viking-1.4.2/0000755000175000017500000000000012175546637010026 500000000000000viking-1.4.2/depcomp0000755000175000017500000005064312134470534011316 00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2012-03-27.16; # UTC # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010, # 2011, 2012 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # A tabulation character. tab=' ' # A newline character. nl=' ' if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency informations. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' "$nl" < "$tmpdepfile" | ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependent.h'. # Do two passes, one to just change these to # '$object: dependent.h' and one to simply 'dependent.h:'. sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler anf tcc (Tiny C Compiler) understand '-MD -MF file'. # However on # $CC -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\': # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... # tcc 0.9.26 (FIXME still under development at the moment of writing) # will emit a similar output, but also prepend the continuation lines # with horizontal tabulation characters. "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form 'foo.o: dependent.h', # or 'foo.o: dep1.h dep2.h \', or ' dep3.h dep4.h \'. # Do two passes, one to just change these to # '$object: dependent.h' and one to simply 'dependent.h:'. sed -e "s/^[ $tab][ $tab]*/ /" -e "s,^[^:]*:,$object :," \ < "$tmpdepfile" > "$depfile" sed ' s/[ '"$tab"'][ '"$tab"']*/ /g s/^ *// s/ *\\*$// s/^[^:]*: *// /^$/d /:$/d s/$/ :/ ' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # With Tru64 cc, shared objects can also be used to make a # static library. This mechanism is used in libtool 1.4 series to # handle both shared and static libraries in a single compilation. # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. # # With libtool 1.5 this exception was removed, and libtool now # generates 2 separate objects for the 2 libraries. These two # compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 tmpdepfile2=$dir$base.o.d # libtool 1.5 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.o.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d tmpdepfile4=$dir$base.d "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test "$stat" = 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed 's:^['"$tab"' ]*[^:'"$tab"' ][^:][^:]*\:['"$tab"' ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' "$nl" < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' "$nl" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: viking-1.4.2/data/0000755000175000017500000000000012175546637010737 500000000000000viking-1.4.2/data/maps.xml0000644000175000017500000001211512174331626012326 00000000000000 OpenStreetMap (Mapnik) tile.openstreetmap.org /%d/%d/%d.png 13 © OpenStreetMap contributors CC-BY-SA http://www.openstreetmap.org/copyright TRUE OpenStreetMap (Cycle) b.tile.opencyclemap.org /cycle/%d/%d/%d.png 17 © OpenStreetMap contributors CC-BY-SA http://www.openstreetmap.org/copyright TRUE 18 OpenStreetMap (WMS) full.wms.geofabrik.de /std/demo_key?LAYERS=osm-full&FORMAT=image/png&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=&SRS=EPSG:4326&BBOX=%s,%s,%s,%s&WIDTH=256&HEIGHT=256 FALSE © OpenStreetMap contributors CC-BY-SA http://www.openstreetmap.org/copyright 29 CalTopo USGS 7.5" Topos s3-us-west-1.amazonaws.com /caltopo/topo/%d/%d/%d.png?v=1 CalTopo Terms of Use CalTopo Terms of Use http://caltopo.com/ 50 SPOTMaps spotmaps.youmapps.org /spotmaps4osm/1.0.0/spotmaps4osm/%d/%d/%d.jpg FALSE © Cnes/Spot Image CC-by-SA 2.0 / ODBl http://www.youmapps.org/licenses/EULA-OSM-en.html Letuffe/hiking beta.letuffe.org /tiles/renderer.py/hiking/%d/%d/%d.png 100 © OpenStreetMap contributors CC-BY-SA http://www.openstreetmap.org/copyright Public Transport Map tile.xn--pnvkarte-m4a.de /tilegen/%0d/%d/%d.png 101 © OpenStreetMap contributors CC-BY-SA http://www.openstreetmap.org/copyright Cyclemap (Cloudmade) a.andy.sandbox.cloudmade.com /tiles/cycle/%d/%d/%d.png 102 © OpenStreetMap contributors CC-BY-SA http://www.openstreetmap.org/copyright Bridle Map opentiles.com /nop/tiles/%d/%d/%d.png 103 © OpenStreetMap contributors CC-BY-SA http://www.openstreetmap.org/copyright OpenSeaMap tiles.openseamap.org /seamark/%d/%d/%d.png 600 © OpenStreetMap contributors CC-BY-SA http://www.openstreetmap.org/copyright viking-1.4.2/data/external_tools.xml0000644000175000017500000000173512122673673014442 00000000000000 Letuffe (Hiking) http://beta.letuffe.org/?layers=0B000FFFFFFFFFFFF&lat=%s&lon=%s&zoom=%d 42 Osmose http://osmose.openstreetmap.fr/map/cgi-bin/index.py?layers=B00000FFFFFFFFFFFFT&lat=%s&lon=%s&zoom=%d 43 NLS: Historic Map of GB http://nls.tileserver.com?lat=%s&lng=%s&zoom=%d 44 Yahoo! Maps http://maps.yahoo.com/#lat=%s&lon=%s&zoom=%d viking-1.4.2/data/Makefile.in0000644000175000017500000003526212175546613012726 00000000000000# Makefile.in generated by automake 1.13.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = data DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/mkinstalldirs ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/expat.m4 \ $(top_srcdir)/m4/libcurl.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgdatadir)" DATA = $(pkgdata_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_STATUS_DEPENDENCIES = @CONFIG_STATUS_DEPENDENCIES@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DB2MAN_XSL = @DB2MAN_XSL@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ EXPAT_CFLAGS = @EXPAT_CFLAGS@ EXPAT_LIBS = @EXPAT_LIBS@ GDK_PIXBUF_CSOURCE = @GDK_PIXBUF_CSOURCE@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GLIB_MKENUMS = @GLIB_MKENUMS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HELP_DIR = @HELP_DIR@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ LDFLAGS = @LDFLAGS@ LIBCURL = @LIBCURL@ LIBCURL_CPPFLAGS = @LIBCURL_CPPFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_CFLAGS = @PACKAGE_CFLAGS@ PACKAGE_LIBS = @PACKAGE_LIBS@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ POW_LIB = @POW_LIB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XP = @XP@ _libcurl_config = @_libcurl_config@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ pkgdata_DATA = maps.xml external_tools.xml goto_tools.xml EXTRA_DIST = \ $(pkgdata_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu data/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu data/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-pkgdataDATA: $(pkgdata_DATA) @$(NORMAL_INSTALL) @list='$(pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgdatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgdatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgdatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgdatadir)" || exit $$?; \ done uninstall-pkgdataDATA: @$(NORMAL_UNINSTALL) @list='$(pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgdatadir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(pkgdatadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgdataDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkgdataDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic cscopelist-am \ ctags-am distclean distclean-generic distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-pkgdataDATA install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags-am uninstall uninstall-am \ uninstall-pkgdataDATA # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: viking-1.4.2/data/Makefile.am0000644000175000017500000000013312122673673012701 00000000000000pkgdata_DATA = maps.xml external_tools.xml goto_tools.xml EXTRA_DIST = \ $(pkgdata_DATA) viking-1.4.2/data/goto_tools.xml0000644000175000017500000000330312122673673013561 00000000000000 Geonames http://ws.geonames.org/search?q=%s&maxRows=1&lang=es&style=short /geonames/geoname/lat /geonames/geoname/lng Name finder http://gazetteer.openstreetmap.org/namefinder/search.xml?find=%s&max=1 /searchresults/named lat /searchresults/named lon Nominatim http://nominatim.openstreetmap.org/search?q=%s&format=xml /searchresults/place@lat /searchresults/place@lon Mapquest Nominatim http://open.mapquestapi.com/nominatim/v1/search?format=xml&limit=1&q=%s /searchresults/place lat /searchresults/place lon viking-1.4.2/install-sh0000755000175000017500000003325612134470533011745 00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2011-01-19.21; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) dst_arg=$2 # Protect names problematic for `test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for `test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for `test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writeable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: viking-1.4.2/aclocal.m40000644000175000017500000022221712175546613011606 00000000000000# generated automatically by aclocal 1.13.3 -*- Autoconf -*- # Copyright (C) 1996-2013 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, [m4_warning([this file was generated for autoconf 2.69. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) # Copyright (C) 1995-2002 Free Software Foundation, Inc. # Copyright (C) 2001-2003,2004 Red Hat, Inc. # # This file is free software, distributed under the terms of the GNU # General Public License. As a special exception to the GNU General # Public License, this file may be distributed as part of a program # that contains a configuration script generated by Autoconf, under # the same distribution terms as the rest of that program. # # This file can be copied and used freely without restrictions. It can # be used in projects which are not available under the GNU Public License # but which still want to provide support for the GNU gettext functionality. # # Macro to add for using GNU gettext. # Ulrich Drepper , 1995, 1996 # # Modified to never use included libintl. # Owen Taylor , 12/15/1998 # # Major rework to remove unused code # Owen Taylor , 12/11/2002 # # Added better handling of ALL_LINGUAS from GNU gettext version # written by Bruno Haible, Owen Taylor 5/30/3002 # # Modified to require ngettext # Matthias Clasen 08/06/2004 # # We need this here as well, since someone might use autoconf-2.5x # to configure GLib then an older version to configure a package # using AM_GLIB_GNU_GETTEXT AC_PREREQ(2.53) dnl dnl We go to great lengths to make sure that aclocal won't dnl try to pull in the installed version of these macros dnl when running aclocal in the glib directory. dnl m4_copy([AC_DEFUN],[glib_DEFUN]) m4_copy([AC_REQUIRE],[glib_REQUIRE]) dnl dnl At the end, if we're not within glib, we'll define the public dnl definitions in terms of our private definitions. dnl # GLIB_LC_MESSAGES #-------------------- glib_DEFUN([GLIB_LC_MESSAGES], [AC_CHECK_HEADERS([locale.h]) if test $ac_cv_header_locale_h = yes; then AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES, [AC_TRY_LINK([#include ], [return LC_MESSAGES], am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)]) if test $am_cv_val_LC_MESSAGES = yes; then AC_DEFINE(HAVE_LC_MESSAGES, 1, [Define if your file defines LC_MESSAGES.]) fi fi]) # GLIB_PATH_PROG_WITH_TEST #---------------------------- dnl GLIB_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) glib_DEFUN([GLIB_PATH_PROG_WITH_TEST], [# Extract the first word of "$2", so it can be a program name with args. set dummy $2; ac_word=[$]2 AC_MSG_CHECKING([for $ac_word]) AC_CACHE_VAL(ac_cv_path_$1, [case "[$]$1" in /*) ac_cv_path_$1="[$]$1" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in ifelse([$5], , $PATH, [$5]); do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if [$3]; then ac_cv_path_$1="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" dnl If no 4th arg is given, leave the cache variable unset, dnl so AC_PATH_PROGS will keep looking. ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" ])dnl ;; esac])dnl $1="$ac_cv_path_$1" if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then AC_MSG_RESULT([$]$1) else AC_MSG_RESULT(no) fi AC_SUBST($1)dnl ]) # GLIB_WITH_NLS #----------------- glib_DEFUN([GLIB_WITH_NLS], dnl NLS is obligatory [USE_NLS=yes AC_SUBST(USE_NLS) gt_cv_have_gettext=no CATOBJEXT=NONE XGETTEXT=: INTLLIBS= AC_CHECK_HEADER(libintl.h, [gt_cv_func_dgettext_libintl="no" libintl_extra_libs="" # # First check in libc # AC_CACHE_CHECK([for ngettext in libc], gt_cv_func_ngettext_libc, [AC_TRY_LINK([ #include ], [return !ngettext ("","", 1)], gt_cv_func_ngettext_libc=yes, gt_cv_func_ngettext_libc=no) ]) if test "$gt_cv_func_ngettext_libc" = "yes" ; then AC_CACHE_CHECK([for dgettext in libc], gt_cv_func_dgettext_libc, [AC_TRY_LINK([ #include ], [return !dgettext ("","")], gt_cv_func_dgettext_libc=yes, gt_cv_func_dgettext_libc=no) ]) fi if test "$gt_cv_func_ngettext_libc" = "yes" ; then AC_CHECK_FUNCS(bind_textdomain_codeset) fi # # If we don't have everything we want, check in libintl # if test "$gt_cv_func_dgettext_libc" != "yes" \ || test "$gt_cv_func_ngettext_libc" != "yes" \ || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then AC_CHECK_LIB(intl, bindtextdomain, [AC_CHECK_LIB(intl, ngettext, [AC_CHECK_LIB(intl, dgettext, gt_cv_func_dgettext_libintl=yes)])]) if test "$gt_cv_func_dgettext_libintl" != "yes" ; then AC_MSG_CHECKING([if -liconv is needed to use gettext]) AC_MSG_RESULT([]) AC_CHECK_LIB(intl, ngettext, [AC_CHECK_LIB(intl, dcgettext, [gt_cv_func_dgettext_libintl=yes libintl_extra_libs=-liconv], :,-liconv)], :,-liconv) fi # # If we found libintl, then check in it for bind_textdomain_codeset(); # we'll prefer libc if neither have bind_textdomain_codeset(), # and both have dgettext and ngettext # if test "$gt_cv_func_dgettext_libintl" = "yes" ; then glib_save_LIBS="$LIBS" LIBS="$LIBS -lintl $libintl_extra_libs" unset ac_cv_func_bind_textdomain_codeset AC_CHECK_FUNCS(bind_textdomain_codeset) LIBS="$glib_save_LIBS" if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then gt_cv_func_dgettext_libc=no else if test "$gt_cv_func_dgettext_libc" = "yes" \ && test "$gt_cv_func_ngettext_libc" = "yes"; then gt_cv_func_dgettext_libintl=no fi fi fi fi if test "$gt_cv_func_dgettext_libc" = "yes" \ || test "$gt_cv_func_dgettext_libintl" = "yes"; then gt_cv_have_gettext=yes fi if test "$gt_cv_func_dgettext_libintl" = "yes"; then INTLLIBS="-lintl $libintl_extra_libs" fi if test "$gt_cv_have_gettext" = "yes"; then AC_DEFINE(HAVE_GETTEXT,1, [Define if the GNU gettext() function is already present or preinstalled.]) GLIB_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)dnl if test "$MSGFMT" != "no"; then glib_save_LIBS="$LIBS" LIBS="$LIBS $INTLLIBS" AC_CHECK_FUNCS(dcgettext) MSGFMT_OPTS= AC_MSG_CHECKING([if msgfmt accepts -c]) GLIB_RUN_PROG([$MSGFMT -c -o /dev/null],[ msgid "" msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Project-Id-Version: test 1.0\n" "PO-Revision-Date: 2007-02-15 12:01+0100\n" "Last-Translator: test \n" "Language-Team: C \n" "MIME-Version: 1.0\n" "Content-Transfer-Encoding: 8bit\n" ], [MSGFMT_OPTS=-c; AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no])]) AC_SUBST(MSGFMT_OPTS) AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) GLIB_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :) AC_TRY_LINK(, [extern int _nl_msg_cat_cntr; return _nl_msg_cat_cntr], [CATOBJEXT=.gmo DATADIRNAME=share], [case $host in *-*-solaris*) dnl On Solaris, if bind_textdomain_codeset is in libc, dnl GNU format message catalog is always supported, dnl since both are added to the libc all together. dnl Hence, we'd like to go with DATADIRNAME=share and dnl and CATOBJEXT=.gmo in this case. AC_CHECK_FUNC(bind_textdomain_codeset, [CATOBJEXT=.gmo DATADIRNAME=share], [CATOBJEXT=.mo DATADIRNAME=lib]) ;; *-*-openbsd*) CATOBJEXT=.mo DATADIRNAME=share ;; *) CATOBJEXT=.mo DATADIRNAME=lib ;; esac]) LIBS="$glib_save_LIBS" INSTOBJEXT=.mo else gt_cv_have_gettext=no fi fi ]) if test "$gt_cv_have_gettext" = "yes" ; then AC_DEFINE(ENABLE_NLS, 1, [always defined to indicate that i18n is enabled]) fi dnl Test whether we really found GNU xgettext. if test "$XGETTEXT" != ":"; then dnl If it is not GNU xgettext we define it as : so that the dnl Makefiles still can work. if $XGETTEXT --omit-header /dev/null 2> /dev/null; then : ; else AC_MSG_RESULT( [found xgettext program is not GNU xgettext; ignore it]) XGETTEXT=":" fi fi # We need to process the po/ directory. POSUB=po AC_OUTPUT_COMMANDS( [case "$CONFIG_FILES" in *po/Makefile.in*) sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile esac]) dnl These rules are solely for the distribution goal. While doing this dnl we only have to keep exactly one list of the available catalogs dnl in configure.ac. for lang in $ALL_LINGUAS; do GMOFILES="$GMOFILES $lang.gmo" POFILES="$POFILES $lang.po" done dnl Make all variables we use known to autoconf. AC_SUBST(CATALOGS) AC_SUBST(CATOBJEXT) AC_SUBST(DATADIRNAME) AC_SUBST(GMOFILES) AC_SUBST(INSTOBJEXT) AC_SUBST(INTLLIBS) AC_SUBST(PO_IN_DATADIR_TRUE) AC_SUBST(PO_IN_DATADIR_FALSE) AC_SUBST(POFILES) AC_SUBST(POSUB) ]) # AM_GLIB_GNU_GETTEXT # ------------------- # Do checks necessary for use of gettext. If a suitable implementation # of gettext is found in either in libintl or in the C library, # it will set INTLLIBS to the libraries needed for use of gettext # and AC_DEFINE() HAVE_GETTEXT and ENABLE_NLS. (The shell variable # gt_cv_have_gettext will be set to "yes".) It will also call AC_SUBST() # on various variables needed by the Makefile.in.in installed by # glib-gettextize. dnl glib_DEFUN([GLIB_GNU_GETTEXT], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_HEADER_STDC])dnl GLIB_LC_MESSAGES GLIB_WITH_NLS if test "$gt_cv_have_gettext" = "yes"; then if test "x$ALL_LINGUAS" = "x"; then LINGUAS= else AC_MSG_CHECKING(for catalogs to be installed) NEW_LINGUAS= for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "${LINGUAS-%UNSET%}"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then NEW_LINGUAS="$NEW_LINGUAS $presentlang" fi done LINGUAS=$NEW_LINGUAS AC_MSG_RESULT($LINGUAS) fi dnl Construct list of names of catalog files to be constructed. if test -n "$LINGUAS"; then for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done fi fi dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly dnl find the mkinstalldirs script in another subdir but ($top_srcdir). dnl Try to locate is. MKINSTALLDIRS= if test -n "$ac_aux_dir"; then MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" fi if test -z "$MKINSTALLDIRS"; then MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" fi AC_SUBST(MKINSTALLDIRS) dnl Generate list of files to be processed by xgettext which will dnl be included in po/Makefile. test -d po || mkdir po if test "x$srcdir" != "x."; then if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then posrcprefix="$srcdir/" else posrcprefix="../$srcdir/" fi else posrcprefix="../" fi rm -f po/POTFILES sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \ < $srcdir/po/POTFILES.in > po/POTFILES ]) # AM_GLIB_DEFINE_LOCALEDIR(VARIABLE) # ------------------------------- # Define VARIABLE to the location where catalog files will # be installed by po/Makefile. glib_DEFUN([GLIB_DEFINE_LOCALEDIR], [glib_REQUIRE([GLIB_GNU_GETTEXT])dnl glib_save_prefix="$prefix" glib_save_exec_prefix="$exec_prefix" glib_save_datarootdir="$datarootdir" test "x$prefix" = xNONE && prefix=$ac_default_prefix test "x$exec_prefix" = xNONE && exec_prefix=$prefix datarootdir=`eval echo "${datarootdir}"` if test "x$CATOBJEXT" = "x.mo" ; then localedir=`eval echo "${libdir}/locale"` else localedir=`eval echo "${datadir}/locale"` fi prefix="$glib_save_prefix" exec_prefix="$glib_save_exec_prefix" datarootdir="$glib_save_datarootdir" AC_DEFINE_UNQUOTED($1, "$localedir", [Define the location where the catalogs will be installed]) ]) dnl dnl Now the definitions that aclocal will find dnl ifdef(glib_configure_ac,[],[ AC_DEFUN([AM_GLIB_GNU_GETTEXT],[GLIB_GNU_GETTEXT($@)]) AC_DEFUN([AM_GLIB_DEFINE_LOCALEDIR],[GLIB_DEFINE_LOCALEDIR($@)]) ])dnl # GLIB_RUN_PROG(PROGRAM, TEST-FILE, [ACTION-IF-PASS], [ACTION-IF-FAIL]) # # Create a temporary file with TEST-FILE as its contents and pass the # file name to PROGRAM. Perform ACTION-IF-PASS if PROGRAM exits with # 0 and perform ACTION-IF-FAIL for any other exit status. AC_DEFUN([GLIB_RUN_PROG], [cat >conftest.foo <<_ACEOF $2 _ACEOF if AC_RUN_LOG([$1 conftest.foo]); then m4_ifval([$3], [$3], [:]) m4_ifvaln([$4], [else $4])dnl echo "$as_me: failed input was:" >&AS_MESSAGE_LOG_FD sed 's/^/| /' conftest.foo >&AS_MESSAGE_LOG_FD fi]) dnl Do not call GNOME_DOC_DEFINES directly. It is split out from dnl GNOME_DOC_INIT to allow gnome-doc-utils to bootstrap off itself. AC_DEFUN([GNOME_DOC_DEFINES], [ AC_ARG_WITH([help-dir], AC_HELP_STRING([--with-help-dir=DIR], [path to help docs]),, [with_help_dir='${datadir}/gnome/help']) HELP_DIR="$with_help_dir" AC_SUBST(HELP_DIR) AC_ARG_WITH([omf-dir], AC_HELP_STRING([--with-omf-dir=DIR], [path to OMF files]),, [with_omf_dir='${datadir}/omf']) OMF_DIR="$with_omf_dir" AC_SUBST(OMF_DIR) AC_ARG_WITH([help-formats], AC_HELP_STRING([--with-help-formats=FORMATS], [list of formats]),, [with_help_formats='']) DOC_USER_FORMATS="$with_help_formats" AC_SUBST(DOC_USER_FORMATS) AC_ARG_ENABLE([scrollkeeper], [AC_HELP_STRING([--disable-scrollkeeper], [do not make updates to the scrollkeeper database])],, enable_scrollkeeper=yes) AM_CONDITIONAL([ENABLE_SK],[test "$gdu_cv_have_gdu" = "yes" -a "$enable_scrollkeeper" = "yes"]) dnl disable scrollkeeper automatically for distcheck DISTCHECK_CONFIGURE_FLAGS="--disable-scrollkeeper $DISTCHECK_CONFIGURE_FLAGS" AC_SUBST(DISTCHECK_CONFIGURE_FLAGS) AM_CONDITIONAL([HAVE_GNOME_DOC_UTILS],[test "$gdu_cv_have_gdu" = "yes"]) ]) # GNOME_DOC_INIT ([MINIMUM-VERSION],[ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND]) # AC_DEFUN([GNOME_DOC_INIT], [AC_REQUIRE([AC_PROG_LN_S])dnl if test -z "$AM_DEFAULT_VERBOSITY"; then AM_DEFAULT_VERBOSITY=1 fi AC_SUBST([AM_DEFAULT_VERBOSITY]) ifelse([$1],,[gdu_cv_version_required=0.3.2],[gdu_cv_version_required=$1]) AC_MSG_CHECKING([gnome-doc-utils >= $gdu_cv_version_required]) PKG_CHECK_EXISTS([gnome-doc-utils >= $gdu_cv_version_required], [gdu_cv_have_gdu=yes],[gdu_cv_have_gdu=no]) if test "$gdu_cv_have_gdu" = "yes"; then AC_MSG_RESULT([yes]) ifelse([$2],,[:],[$2]) else AC_MSG_RESULT([no]) ifelse([$3],,[AC_MSG_ERROR([gnome-doc-utils >= $gdu_cv_version_required not found])],[$3]) fi GNOME_DOC_DEFINES ]) dnl -*- mode: autoconf -*- # serial 1 dnl Usage: dnl GTK_DOC_CHECK([minimum-gtk-doc-version]) AC_DEFUN([GTK_DOC_CHECK], [ AC_REQUIRE([PKG_PROG_PKG_CONFIG]) AC_BEFORE([AC_PROG_LIBTOOL],[$0])dnl setup libtool first AC_BEFORE([AM_PROG_LIBTOOL],[$0])dnl setup libtool first dnl check for tools we added during development AC_PATH_PROG([GTKDOC_CHECK],[gtkdoc-check]) AC_PATH_PROGS([GTKDOC_REBASE],[gtkdoc-rebase],[true]) AC_PATH_PROG([GTKDOC_MKPDF],[gtkdoc-mkpdf]) dnl for overriding the documentation installation directory AC_ARG_WITH([html-dir], AS_HELP_STRING([--with-html-dir=PATH], [path to installed docs]),, [with_html_dir='${datadir}/gtk-doc/html']) HTML_DIR="$with_html_dir" AC_SUBST([HTML_DIR]) dnl enable/disable documentation building AC_ARG_ENABLE([gtk-doc], AS_HELP_STRING([--enable-gtk-doc], [use gtk-doc to build documentation [[default=no]]]),, [enable_gtk_doc=no]) if test x$enable_gtk_doc = xyes; then ifelse([$1],[], [PKG_CHECK_EXISTS([gtk-doc],, AC_MSG_ERROR([gtk-doc not installed and --enable-gtk-doc requested]))], [PKG_CHECK_EXISTS([gtk-doc >= $1],, AC_MSG_ERROR([You need to have gtk-doc >= $1 installed to build $PACKAGE_NAME]))]) dnl don't check for glib if we build glib if test "x$PACKAGE_NAME" != "xglib"; then dnl don't fail if someone does not have glib PKG_CHECK_MODULES(GTKDOC_DEPS, glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0,,) fi fi AC_MSG_CHECKING([whether to build gtk-doc documentation]) AC_MSG_RESULT($enable_gtk_doc) dnl enable/disable output formats AC_ARG_ENABLE([gtk-doc-html], AS_HELP_STRING([--enable-gtk-doc-html], [build documentation in html format [[default=yes]]]),, [enable_gtk_doc_html=yes]) AC_ARG_ENABLE([gtk-doc-pdf], AS_HELP_STRING([--enable-gtk-doc-pdf], [build documentation in pdf format [[default=no]]]),, [enable_gtk_doc_pdf=no]) if test -z "$GTKDOC_MKPDF"; then enable_gtk_doc_pdf=no fi AM_CONDITIONAL([ENABLE_GTK_DOC], [test x$enable_gtk_doc = xyes]) AM_CONDITIONAL([GTK_DOC_BUILD_HTML], [test x$enable_gtk_doc_html = xyes]) AM_CONDITIONAL([GTK_DOC_BUILD_PDF], [test x$enable_gtk_doc_pdf = xyes]) AM_CONDITIONAL([GTK_DOC_USE_LIBTOOL], [test -n "$LIBTOOL"]) AM_CONDITIONAL([GTK_DOC_USE_REBASE], [test -n "$GTKDOC_REBASE"]) ]) dnl IT_PROG_INTLTOOL([MINIMUM-VERSION], [no-xml]) # serial 42 IT_PROG_INTLTOOL AC_DEFUN([IT_PROG_INTLTOOL], [ AC_PREREQ([2.50])dnl AC_REQUIRE([AM_NLS])dnl case "$am__api_version" in 1.[01234]) AC_MSG_ERROR([Automake 1.5 or newer is required to use intltool]) ;; *) ;; esac INTLTOOL_REQUIRED_VERSION_AS_INT=`echo $1 | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` INTLTOOL_APPLIED_VERSION=`intltool-update --version | head -1 | cut -d" " -f3` INTLTOOL_APPLIED_VERSION_AS_INT=`echo $INTLTOOL_APPLIED_VERSION | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` if test -n "$1"; then AC_MSG_CHECKING([for intltool >= $1]) AC_MSG_RESULT([$INTLTOOL_APPLIED_VERSION found]) test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge "$INTLTOOL_REQUIRED_VERSION_AS_INT" || AC_MSG_ERROR([Your intltool is too old. You need intltool $1 or later.]) fi AC_PATH_PROG(INTLTOOL_UPDATE, [intltool-update]) AC_PATH_PROG(INTLTOOL_MERGE, [intltool-merge]) AC_PATH_PROG(INTLTOOL_EXTRACT, [intltool-extract]) if test -z "$INTLTOOL_UPDATE" -o -z "$INTLTOOL_MERGE" -o -z "$INTLTOOL_EXTRACT"; then AC_MSG_ERROR([The intltool scripts were not found. Please install intltool.]) fi if test -z "$AM_DEFAULT_VERBOSITY"; then AM_DEFAULT_VERBOSITY=1 fi AC_SUBST([AM_DEFAULT_VERBOSITY]) INTLTOOL_V_MERGE='$(INTLTOOL__v_MERGE_$(V))' INTLTOOL__v_MERGE_='$(INTLTOOL__v_MERGE_$(AM_DEFAULT_VERBOSITY))' INTLTOOL__v_MERGE_0='@echo " ITMRG " [$]@;' AC_SUBST(INTLTOOL_V_MERGE) AC_SUBST(INTLTOOL__v_MERGE_) AC_SUBST(INTLTOOL__v_MERGE_0) INTLTOOL_V_MERGE_OPTIONS='$(intltool__v_merge_options_$(V))' intltool__v_merge_options_='$(intltool__v_merge_options_$(AM_DEFAULT_VERBOSITY))' intltool__v_merge_options_0='-q' AC_SUBST(INTLTOOL_V_MERGE_OPTIONS) AC_SUBST(intltool__v_merge_options_) AC_SUBST(intltool__v_merge_options_0) INTLTOOL_DESKTOP_RULE='%.desktop: %.desktop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_DIRECTORY_RULE='%.directory: %.directory.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_KEYS_RULE='%.keys: %.keys.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -k -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_PROP_RULE='%.prop: %.prop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_OAF_RULE='%.oaf: %.oaf.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -o -p $(top_srcdir)/po $< [$]@' INTLTOOL_PONG_RULE='%.pong: %.pong.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SERVER_RULE='%.server: %.server.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -o -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SHEET_RULE='%.sheet: %.sheet.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SOUNDLIST_RULE='%.soundlist: %.soundlist.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_UI_RULE='%.ui: %.ui.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_XML_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' if test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge 5000; then INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u --no-translations $< [$]@' else INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; $(INTLTOOL_V_MERGE)_it_tmp_dir=tmp.intltool.[$][$]RANDOM && mkdir [$][$]_it_tmp_dir && LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u [$][$]_it_tmp_dir $< [$]@ && rmdir [$][$]_it_tmp_dir' fi INTLTOOL_XAM_RULE='%.xam: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_KBD_RULE='%.kbd: %.kbd.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -m -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_CAVES_RULE='%.caves: %.caves.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SCHEMAS_RULE='%.schemas: %.schemas.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -s -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_THEME_RULE='%.theme: %.theme.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SERVICE_RULE='%.service: %.service.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_POLICY_RULE='%.policy: %.policy.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' _IT_SUBST(INTLTOOL_DESKTOP_RULE) _IT_SUBST(INTLTOOL_DIRECTORY_RULE) _IT_SUBST(INTLTOOL_KEYS_RULE) _IT_SUBST(INTLTOOL_PROP_RULE) _IT_SUBST(INTLTOOL_OAF_RULE) _IT_SUBST(INTLTOOL_PONG_RULE) _IT_SUBST(INTLTOOL_SERVER_RULE) _IT_SUBST(INTLTOOL_SHEET_RULE) _IT_SUBST(INTLTOOL_SOUNDLIST_RULE) _IT_SUBST(INTLTOOL_UI_RULE) _IT_SUBST(INTLTOOL_XAM_RULE) _IT_SUBST(INTLTOOL_KBD_RULE) _IT_SUBST(INTLTOOL_XML_RULE) _IT_SUBST(INTLTOOL_XML_NOMERGE_RULE) _IT_SUBST(INTLTOOL_CAVES_RULE) _IT_SUBST(INTLTOOL_SCHEMAS_RULE) _IT_SUBST(INTLTOOL_THEME_RULE) _IT_SUBST(INTLTOOL_SERVICE_RULE) _IT_SUBST(INTLTOOL_POLICY_RULE) # Check the gettext tools to make sure they are GNU AC_PATH_PROG(XGETTEXT, xgettext) AC_PATH_PROG(MSGMERGE, msgmerge) AC_PATH_PROG(MSGFMT, msgfmt) AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) if test -z "$XGETTEXT" -o -z "$MSGMERGE" -o -z "$MSGFMT"; then AC_MSG_ERROR([GNU gettext tools not found; required for intltool]) fi xgversion="`$XGETTEXT --version|grep '(GNU ' 2> /dev/null`" mmversion="`$MSGMERGE --version|grep '(GNU ' 2> /dev/null`" mfversion="`$MSGFMT --version|grep '(GNU ' 2> /dev/null`" if test -z "$xgversion" -o -z "$mmversion" -o -z "$mfversion"; then AC_MSG_ERROR([GNU gettext tools not found; required for intltool]) fi AC_PATH_PROG(INTLTOOL_PERL, perl) if test -z "$INTLTOOL_PERL"; then AC_MSG_ERROR([perl not found]) fi AC_MSG_CHECKING([for perl >= 5.8.1]) $INTLTOOL_PERL -e "use 5.8.1;" > /dev/null 2>&1 if test $? -ne 0; then AC_MSG_ERROR([perl 5.8.1 is required for intltool]) else IT_PERL_VERSION=`$INTLTOOL_PERL -e "printf '%vd', $^V"` AC_MSG_RESULT([$IT_PERL_VERSION]) fi if test "x$2" != "xno-xml"; then AC_MSG_CHECKING([for XML::Parser]) if `$INTLTOOL_PERL -e "require XML::Parser" 2>/dev/null`; then AC_MSG_RESULT([ok]) else AC_MSG_ERROR([XML::Parser perl module is required for intltool]) fi fi # Substitute ALL_LINGUAS so we can use it in po/Makefile AC_SUBST(ALL_LINGUAS) # Set DATADIRNAME correctly if it is not set yet # (copied from glib-gettext.m4) if test -z "$DATADIRNAME"; then AC_LINK_IFELSE( [AC_LANG_PROGRAM([[]], [[extern int _nl_msg_cat_cntr; return _nl_msg_cat_cntr]])], [DATADIRNAME=share], [case $host in *-*-solaris*) dnl On Solaris, if bind_textdomain_codeset is in libc, dnl GNU format message catalog is always supported, dnl since both are added to the libc all together. dnl Hence, we'd like to go with DATADIRNAME=share dnl in this case. AC_CHECK_FUNC(bind_textdomain_codeset, [DATADIRNAME=share], [DATADIRNAME=lib]) ;; *) [DATADIRNAME=lib] ;; esac]) fi AC_SUBST(DATADIRNAME) IT_PO_SUBDIR([po]) ]) # IT_PO_SUBDIR(DIRNAME) # --------------------- # All po subdirs have to be declared with this macro; the subdir "po" is # declared by IT_PROG_INTLTOOL. # AC_DEFUN([IT_PO_SUBDIR], [AC_PREREQ([2.53])dnl We use ac_top_srcdir inside AC_CONFIG_COMMANDS. dnl dnl The following CONFIG_COMMANDS should be executed at the very end dnl of config.status. AC_CONFIG_COMMANDS_PRE([ AC_CONFIG_COMMANDS([$1/stamp-it], [ if [ ! grep "^# INTLTOOL_MAKEFILE$" "$1/Makefile.in" > /dev/null ]; then AC_MSG_ERROR([$1/Makefile.in.in was not created by intltoolize.]) fi rm -f "$1/stamp-it" "$1/stamp-it.tmp" "$1/POTFILES" "$1/Makefile.tmp" >"$1/stamp-it.tmp" [sed '/^#/d s/^[[].*] *// /^[ ]*$/d '"s|^| $ac_top_srcdir/|" \ "$srcdir/$1/POTFILES.in" | sed '$!s/$/ \\/' >"$1/POTFILES" ] [sed '/^POTFILES =/,/[^\\]$/ { /^POTFILES =/!d r $1/POTFILES } ' "$1/Makefile.in" >"$1/Makefile"] rm -f "$1/Makefile.tmp" mv "$1/stamp-it.tmp" "$1/stamp-it" ]) ])dnl ]) # _IT_SUBST(VARIABLE) # ------------------- # Abstract macro to do either _AM_SUBST_NOTMAKE or AC_SUBST # AC_DEFUN([_IT_SUBST], [ AC_SUBST([$1]) m4_ifdef([_AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE([$1])]) ] ) # deprecated macros AU_ALIAS([AC_PROG_INTLTOOL], [IT_PROG_INTLTOOL]) # A hint is needed for aclocal from Automake <= 1.9.4: # AC_DEFUN([AC_PROG_INTLTOOL], ...) # nls.m4 serial 5 (gettext-0.18) dnl Copyright (C) 1995-2003, 2005-2006, 2008-2013 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2003. AC_PREREQ([2.50]) AC_DEFUN([AM_NLS], [ AC_MSG_CHECKING([whether NLS is requested]) dnl Default is enabled NLS AC_ARG_ENABLE([nls], [ --disable-nls do not use Native Language Support], USE_NLS=$enableval, USE_NLS=yes) AC_MSG_RESULT([$USE_NLS]) AC_SUBST([USE_NLS]) ]) # pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- # serial 1 (pkg-config-0.24) # # Copyright © 2004 Scott James Remnant . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # PKG_PROG_PKG_CONFIG([MIN-VERSION]) # ---------------------------------- AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi[]dnl ])# PKG_PROG_PKG_CONFIG # PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # # Check to see whether a particular set of modules exists. Similar # to PKG_CHECK_MODULES(), but does not set variables or print errors. # # Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) # only at the first occurence in configure.ac, so if the first place # it's called might be skipped (such as if it is within an "if", you # have to call PKG_CHECK_EXISTS manually # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_default([$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) # _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) # --------------------------------------------- m4_define([_PKG_CONFIG], [if test -n "$$1"; then pkg_cv_[]$1="$$1" elif test -n "$PKG_CONFIG"; then PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) else pkg_failed=untried fi[]dnl ])# _PKG_CONFIG # _PKG_SHORT_ERRORS_SUPPORTED # ----------------------------- AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ])# _PKG_SHORT_ERRORS_SUPPORTED # PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], # [ACTION-IF-NOT-FOUND]) # # # Note that if there is a possibility the first call to # PKG_CHECK_MODULES might not happen, you should be sure to include an # explicit call to PKG_PROG_PKG_CONFIG in your configure.ac # # # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $1]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then AC_MSG_RESULT([no]) _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD m4_default([$4], [AC_MSG_ERROR( [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT])[]dnl ]) elif test $pkg_failed = untried; then AC_MSG_RESULT([no]) m4_default([$4], [AC_MSG_FAILURE( [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .])[]dnl ]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) $3 fi[]dnl ])# PKG_CHECK_MODULES # Copyright (C) 2002-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.13' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.13.3], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.13.3])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to # '$srcdir', '$srcdir/..', or '$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is '.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_COND_IF -*- Autoconf -*- # Copyright (C) 2008-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_COND_IF # _AM_COND_ELSE # _AM_COND_ENDIF # -------------- # These macros are only used for tracing. m4_define([_AM_COND_IF]) m4_define([_AM_COND_ELSE]) m4_define([_AM_COND_ENDIF]) # AM_COND_IF(COND, [IF-TRUE], [IF-FALSE]) # --------------------------------------- # If the shell condition COND is true, execute IF-TRUE, otherwise execute # IF-FALSE. Allow automake to learn about conditional instantiating macros # (the AC_CONFIG_FOOS). AC_DEFUN([AM_COND_IF], [m4_ifndef([_AM_COND_VALUE_$1], [m4_fatal([$0: no such condition "$1"])])dnl _AM_COND_IF([$1])dnl if test -z "$$1_TRUE"; then : m4_n([$2])[]dnl m4_ifval([$3], [_AM_COND_ELSE([$1])dnl else $3 ])dnl _AM_COND_ENDIF([$1])dnl fi[]dnl ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], [$1], [UPC], [depcc="$UPC" am_compiler_list=], [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES. AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each '.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) AM_MISSING_PROG([AUTOCONF], [autoconf]) AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) AM_MISSING_PROG([AUTOHEADER], [autoheader]) AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) AC_REQUIRE([AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl ]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST([install_sh])]) # Copyright (C) 2003-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it is modern enough. # If it is, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi if test "$[2]" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT([yes]) # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2009-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # ("yes" being less verbose, "no" or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor 'install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in "make install-strip", and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of 'v7', 'ustar', or 'pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar # AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([m4/expat.m4]) m4_include([m4/libcurl.m4]) viking-1.4.2/po/0000755000175000017500000000000012175546637010444 500000000000000viking-1.4.2/po/jv.po0000644000175000017500000021360012175546146011340 00000000000000# Javanese translation for viking # Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 # This file is distributed under the same license as the viking package. # FIRST AUTHOR , 2011. # msgid "" msgstr "" "Project-Id-Version: viking\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-02-04 23:29+0100\n" "PO-Revision-Date: 2011-01-10 15:37+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Javanese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 0;\n" "X-Launchpad-Export-Date: 2013-03-23 17:12+0000\n" "X-Generator: Launchpad (build 16540)\n" #: ../src/acquire.c:103 ../src/vikgpslayer.c:1185 msgid "Done." msgstr "" #: ../src/acquire.c:114 msgid "No data." msgstr "" #: ../src/acquire.c:154 ../src/acquire.c:404 msgid "Error: acquisition failed." msgstr "" #: ../src/acquire.c:341 msgid "Working..." msgstr "" #. This shouldn't happen... #: ../src/acquire.c:394 msgid "" "Unable to create command\n" "Acquire method failed." msgstr "" #: ../src/acquire.c:486 msgid "_Filter" msgstr "" #: ../src/acquire.c:501 #, c-format msgid "Filter with %s" msgstr "" #: ../src/acquire.c:518 msgid "Filter" msgstr "" #: ../src/background.c:52 #, c-format msgid "%d items" msgstr "" #: ../src/background.c:248 msgid "Job" msgstr "" #: ../src/background.c:252 msgid "Progress" msgstr "" #: ../src/background.c:268 msgid "Viking Background Jobs" msgstr "" #: ../src/bing.c:47 msgid "Bing" msgstr "" #. VIK_GTK_WINDOW_FROM_WIDGET(vp) #: ../src/bingmapsource.c:445 msgid "Bing attribution Loading" msgstr "" #: ../src/clipboard.c:95 msgid "paste failed" msgstr "" #: ../src/clipboard.c:105 msgid "wrong clipboard data size" msgstr "" #: ../src/clipboard.c:124 #, c-format msgid "" "The clipboard contains sublayer data for %s layers. You must select a layer " "of this type to paste the clipboard data." msgstr "" #: ../src/clipboard.c:236 msgid "" "In order to paste a waypoint, please select an appropriate layer to paste " "into." msgstr "" #: ../src/dialog.c:52 msgid "Go to Lat/Lon" msgstr "" #: ../src/dialog.c:64 ../src/dialog.c:251 msgid "Latitude:" msgstr "" #: ../src/dialog.c:70 ../src/dialog.c:256 msgid "Longitude:" msgstr "" #: ../src/dialog.c:102 msgid "Go to UTM" msgstr "" #: ../src/dialog.c:115 msgid "Northing:" msgstr "" #: ../src/dialog.c:121 msgid "Easting:" msgstr "" #: ../src/dialog.c:128 msgid "Zone:" msgstr "" #: ../src/dialog.c:131 msgid "Letter:" msgstr "" #: ../src/dialog.c:199 msgid "Waypoint Properties" msgstr "" #: ../src/dialog.c:233 msgid "Name:" msgstr "" #: ../src/dialog.c:261 msgid "Altitude:" msgstr "" #: ../src/dialog.c:266 msgid "Comment:" msgstr "" #: ../src/dialog.c:274 ../src/osm-traces.c:437 msgid "Description:" msgstr "" #: ../src/dialog.c:277 msgid "Image:" msgstr "" #: ../src/dialog.c:282 msgid "Symbol:" msgstr "" #: ../src/dialog.c:291 msgid "(none)" msgstr "" #. TODO: other checks (isalpha or whatever ) #: ../src/dialog.c:356 msgid "Please enter a name for the waypoint." msgstr "" #: ../src/dialog.c:529 ../src/geonamessearch.c:243 #: ../src/datasource_osm_my_traces.c:507 msgid "Nothing was selected" msgstr "" #: ../src/dialog.c:537 msgid "Add Route" msgstr "" #: ../src/dialog.c:537 msgid "Add Track" msgstr "" #: ../src/dialog.c:545 msgid "Route Name:" msgstr "" #: ../src/dialog.c:545 msgid "Track Name:" msgstr "" #: ../src/dialog.c:565 msgid "Please enter a name for the track." msgstr "" #: ../src/dialog.c:623 msgid "Zoom Factors..." msgstr "" #: ../src/dialog.c:637 msgid "Zoom factor (in meters per pixel):" msgstr "" #: ../src/dialog.c:638 msgid "X (easting): " msgstr "" #: ../src/dialog.c:639 msgid "Y (northing): " msgstr "" #: ../src/dialog.c:644 msgid "X and Y zoom factors must be equal" msgstr "" #: ../src/dialog.c:699 msgid "1 min" msgstr "" #: ../src/dialog.c:700 msgid "1 hour" msgstr "" #: ../src/dialog.c:701 msgid "1 day" msgstr "" #: ../src/dialog.c:702 msgid "Custom (in minutes):" msgstr "" #: ../src/dialog.c:808 msgid "GPS Data and Topo Analyzer, Explorer, and Manager." msgstr "" #: ../src/dialog.c:809 msgid "" "This program is free software; you can redistribute it and/or modify it " "under the terms of the GNU General Public License as published by the Free " "Software Foundation; either version 2 of the License, or (at your option) " "any later version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT " "ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or " "FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for " "more details.\n" "\n" "You should have received a copy of the GNU General Public License along with " "this program; if not, write to the Free Software Foundation, Inc., 59 Temple " "Place, Suite 330, Boston, MA 02111-1307, USA" msgstr "" #: ../src/dialog.c:837 msgid "Translation is coordinated on http://launchpad.net/viking" msgstr "" #: ../src/dialog.c:845 msgid "Download along track" msgstr "" #: ../src/dialog.c:851 msgid "Map type:" msgstr "" #: ../src/dialog.c:856 msgid "Zoom level:" msgstr "" #: ../src/dialog.c:896 #, c-format msgid "The map data is licensed: %s." msgstr "" #: ../src/dialog.c:899 #, c-format msgid "" "The data provided by '%s' are licensed under the following license: " "%s.\n" "Please, read the license before continuing." msgstr "" #: ../src/dialog.c:904 msgid "Open license" msgstr "" #: ../src/expedia.c:53 msgid "Expedia Street Maps" msgstr "" #: ../src/expedia.c:81 msgid "Invalid expedia altitude" msgstr "" #: ../src/expedia.c:112 #, c-format msgid "" "Couldn't open EXPEDIA image file (right after successful download! Please " "report and delete image file!): %s" msgstr "" #: ../src/expedia.c:125 #, c-format msgid "" "Couldn't save EXPEDIA image file (right after successful download! Please " "report and delete image file!): %s" msgstr "" #. * #. * See http://www.geonames.org/export/wikipedia-webservice.html#wikipediaBoundingBox #. #. Translators may wish to change this setting as appropriate to get Wikipedia articles in that language #: ../src/geonamessearch.c:46 msgid "en" msgstr "" #: ../src/geonamessearch.c:121 msgid "Search" msgstr "" #: ../src/geonamessearch.c:123 msgid "No entries found!" msgstr "" #. NB could allow columns to be shifted around by doing this after each new #. gtk_tree_view_column_set_reorderable ( column, TRUE ); #. However I don't think is that useful, so I haven't put it in #: ../src/geonamessearch.c:177 ../src/datasource_osm_my_traces.c:425 msgid "Name" msgstr "" #: ../src/geonamessearch.c:182 msgid "Feature" msgstr "" #: ../src/geonamessearch.c:187 ../src/datasource_osm_my_traces.c:440 msgid "Lat/Lon" msgstr "" #: ../src/geonamessearch.c:269 ../src/googlesearch.c:100 msgid "couldn't map temp file" msgstr "" #: ../src/globals.c:44 msgid "Degree format:" msgstr "" #: ../src/globals.c:48 msgid "Distance units:" msgstr "" #: ../src/globals.c:52 msgid "Speed units:" msgstr "" #: ../src/globals.c:56 msgid "Height units:" msgstr "" #: ../src/globals.c:60 msgid "Use large waypoint icons:" msgstr "" #: ../src/globals.c:64 msgid "Default latitude:" msgstr "" #: ../src/globals.c:67 msgid "Default longitude:" msgstr "" #: ../src/globals.c:73 msgid "Alphabetical" msgstr "" #: ../src/globals.c:73 ../src/datasource_osm_my_traces.c:435 msgid "Time" msgstr "" #: ../src/globals.c:76 msgid "KML File Export Units:" msgstr "" #: ../src/globals.c:77 msgid "GPX Track Order:" msgstr "" #: ../src/globals.c:82 msgid "Image Viewer:" msgstr "" #: ../src/globals.c:87 msgid "External GPX Program 1:" msgstr "" #: ../src/globals.c:88 msgid "External GPX Program 2:" msgstr "" #. Defaults for the options are setup here #: ../src/globals.c:96 msgid "General" msgstr "" #. New Tab #: ../src/globals.c:121 msgid "Export/External" msgstr "" #. Webtools #: ../src/google.c:36 msgid "Google" msgstr "" #: ../src/datasource_file.c:59 msgid "Import file with GPSBabel" msgstr "" #: ../src/datasource_file.c:60 msgid "Imported file" msgstr "" #. The file selector #: ../src/datasource_file.c:133 msgid "File:" msgstr "" #: ../src/datasource_file.c:134 msgid "File to import" msgstr "" #: ../src/datasource_file.c:141 msgid "All files" msgstr "" #. The file format selector #: ../src/datasource_file.c:148 msgid "File type:" msgstr "" #: ../src/datasource_file.c:193 #, c-format msgid "using babel args '%s' and file '%s'" msgstr "" #: ../src/datasource_gc.c:66 msgid "Download Geocaches" msgstr "" #: ../src/datasource_gc.c:67 msgid "Geocaching.com Caches" msgstr "" #: ../src/datasource_gc.c:84 msgid "geocaching.com username:" msgstr "" #: ../src/datasource_gc.c:85 msgid "geocaching.com password:" msgstr "" #: ../src/datasource_gc.c:126 #, c-format msgid "" "Can't find %s or %s in path! Check that you have installed it correctly." msgstr "" #: ../src/datasource_gc.c:188 msgid "Number geocaches:" msgstr "" #: ../src/datasource_gc.c:190 msgid "Centered around:" msgstr "" #: ../src/datasource_gc.c:226 msgid "Broken input - using some defaults" msgstr "" #: ../src/datasource_geotag.c:51 msgid "Create Waypoints from Geotagged Images" msgstr "" #: ../src/datasource_geotag.c:52 msgid "Geotagged Images" msgstr "" #: ../src/datasource_geotag.c:102 ../src/vikwindow.c:2314 #: ../src/vikwindow.c:2382 ../src/vikwindow.c:2824 msgid "All" msgstr "" #: ../src/datasource_geotag.c:107 ../src/vikwindow.c:2829 msgid "JPG" msgstr "" #: ../src/datasource_geotag.c:165 #, c-format msgid "Unable to create waypoint from %s" msgstr "" #: ../src/datasource_google.c:49 ../src/datasource_google.c:50 msgid "Google Directions" msgstr "" #: ../src/datasource_google.c:77 msgid "From:" msgstr "" #: ../src/datasource_google.c:79 msgid "To:" msgstr "" #: ../src/datasource_gps.c:57 msgid "Acquire from GPS" msgstr "" #: ../src/datasource_gps.c:58 msgid "Acquired from GPS" msgstr "" #: ../src/datasource_gps.c:221 #, c-format msgid "using cmdline '%s' and file '%s'\n" msgstr "" #: ../src/datasource_gps.c:297 ../src/vikgpslayer.c:884 #, c-format msgid "Downloading %d waypoint..." msgid_plural "Downloading %d waypoints..." msgstr[0] "" msgstr[1] "" #: ../src/datasource_gps.c:298 ../src/vikgpslayer.c:885 #, c-format msgid "Downloading %d trackpoint..." msgid_plural "Downloading %d trackpoints..." msgstr[0] "" msgstr[1] "" #: ../src/datasource_gps.c:303 ../src/vikgpslayer.c:890 #, c-format msgid "Downloading %d routepoint..." msgid_plural "Downloading %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/datasource_gps.c:325 ../src/datasource_gps.c:326 #: ../src/datasource_gps.c:327 #, c-format msgid "Downloaded %d out of %d %s..." msgstr "" #: ../src/datasource_gps.c:331 ../src/datasource_gps.c:332 #: ../src/datasource_gps.c:333 #, c-format msgid "Downloaded %d %s." msgstr "" #: ../src/datasource_gps.c:347 ../src/vikgpslayer.c:968 #, c-format msgid "GPS Device: %s" msgstr "" #: ../src/datasource_gps.c:370 ../src/vikgpslayer.c:1042 #: ../src/vikgpslayer.c:1110 msgid "Status: Working..." msgstr "" #: ../src/datasource_gps.c:469 ../src/vikgpslayer.c:150 msgid "GPS Protocol:" msgstr "" #. List now assigned at runtime #: ../src/datasource_gps.c:488 ../src/vikgpslayer.c:151 msgid "Serial Port:" msgstr "" #: ../src/datasource_gps.c:509 msgid "" "Turn Off After Transfer\n" "(Garmin/NAViLink Only)" msgstr "" #: ../src/datasource_gps.c:512 msgid "Tracks:" msgstr "" #: ../src/datasource_gps.c:516 msgid "Routes:" msgstr "" #: ../src/datasource_gps.c:520 msgid "Waypoints:" msgstr "" #: ../src/datasource_gps.c:594 ../src/vikgpslayer.c:1305 msgid "GPS device: N/A" msgstr "" #: ../src/datasource_osm.c:52 ../src/datasource_osm.c:53 msgid "OSM traces" msgstr "" #: ../src/datasource_osm.c:80 msgid "Page number:" msgstr "" #: ../src/datasource_osm_my_traces.c:63 ../src/datasource_osm_my_traces.c:64 msgid "OSM My Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:108 msgid "Username:" msgstr "" #: ../src/datasource_osm_my_traces.c:113 msgid "The email or username used to login to OSM" msgstr "" #: ../src/datasource_osm_my_traces.c:115 ../src/osm-traces.c:413 msgid "Password:" msgstr "" #: ../src/datasource_osm_my_traces.c:120 msgid "The password used to login to OSM" msgstr "" #: ../src/datasource_osm_my_traces.c:430 msgid "Description" msgstr "" #: ../src/datasource_osm_my_traces.c:445 msgid "Privacy" msgstr "" #: ../src/datasource_osm_my_traces.c:452 msgid "Within Current View" msgstr "" #: ../src/datasource_osm_my_traces.c:518 msgid "GPS Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:520 msgid "None found!" msgstr "" #: ../src/datasource_osm_my_traces.c:629 msgid "My OSM Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:645 #, c-format msgid "Unable to get trace: %s" msgstr "" #: ../src/datasource_wikipedia.c:32 msgid "Create Waypoints from Wikipedia Articles" msgstr "" #: ../src/datasource_wikipedia.c:33 msgid "Wikipedia Waypoints" msgstr "" #: ../src/dem.c:65 ../src/dem.c:79 msgid "Invalid DEM" msgstr "" #: ../src/dem.c:121 msgid "Invalid DEM header" msgstr "" #: ../src/dem.c:190 ../src/dem.c:203 msgid "Incorrect DEM Class B record: expected 1" msgstr "" #: ../src/dem.c:360 #, c-format msgid "Couldn't map file %s: %s" msgstr "" #: ../src/download.c:112 msgid "Tile age (s):" msgstr "" #: ../src/download.c:233 #, c-format msgid "Download error: %s" msgstr "" #: ../src/download.c:313 msgid "couldn't open temp file" msgstr "" #: ../src/file.c:456 ../src/file.c:461 #, c-format msgid "Draw mode '%s' no more supported" msgstr "" #: ../src/geotag_exif.c:433 msgid "Not enough memory." msgstr "" #: ../src/geotag_exif.c:451 msgid "Setting a value for this tag is unsupported!" msgstr "" #: ../src/geotag_exif.c:470 #, c-format msgid "Too few components specified (need %d, found %d)\n" msgstr "" #: ../src/geotag_exif.c:474 msgid "Numeric value expected\n" msgstr "" #: ../src/geotag_exif.c:482 msgid "This shouldn't happen!" msgstr "" #: ../src/geotag_exif.c:552 msgid "Not yet implemented!" msgstr "" #: ../src/geotag_exif.c:565 msgid "Warning; Too many components specified!" msgstr "" #: ../src/osm-traces.c:73 msgid "Identifiable (public w/ timestamps)" msgstr "" #: ../src/osm-traces.c:74 msgid "Trackable (private w/ timestamps)" msgstr "" #: ../src/osm-traces.c:75 msgid "Public" msgstr "" #: ../src/osm-traces.c:76 msgid "Private" msgstr "" #: ../src/osm-traces.c:93 msgid "OSM username:" msgstr "" #: ../src/osm-traces.c:94 msgid "OSM password:" msgstr "" #. Preferences #: ../src/osm-traces.c:151 msgid "OpenStreetMap Traces" msgstr "" #: ../src/osm-traces.c:234 #, c-format msgid "failed to upload data: HTTP response is %ld" msgstr "" #: ../src/osm-traces.c:239 #, c-format msgid "curl_easy_getinfo failed: %d" msgstr "" #: ../src/osm-traces.c:244 #, c-format msgid "curl request failed: %s" msgstr "" #: ../src/osm-traces.c:275 #, c-format msgid "failed to open temporary file: %s" msgstr "" #. Success #: ../src/osm-traces.c:328 msgid "Uploaded to OSM" msgstr "" #: ../src/osm-traces.c:332 msgid "FAILED TO UPLOAD DATA TO OSM - CURL PROBLEM" msgstr "" #: ../src/osm-traces.c:335 msgid "FAILED TO UPLOAD DATA TO OSM" msgstr "" #: ../src/osm-traces.c:335 msgid "HTTP response code" msgstr "" #: ../src/osm-traces.c:348 #, c-format msgid "failed to unlink temporary file: %s" msgstr "" #: ../src/osm-traces.c:387 msgid "OSM upload" msgstr "" #: ../src/osm-traces.c:405 msgid "Email:" msgstr "" #: ../src/osm-traces.c:410 msgid "" "The email used as login\n" "Enter the email you use to login into www.openstreetmap.org." msgstr "" #: ../src/osm-traces.c:418 msgid "" "The password used to login\n" "Enter the password you use to login into " "www.openstreetmap.org." msgstr "" #: ../src/osm-traces.c:423 msgid "File's name:" msgstr "" #: ../src/osm-traces.c:433 msgid "" "The name of the file on OSM\n" "This is the name of the file created on the server.This is not the " "name of the local file." msgstr "" #: ../src/osm-traces.c:442 msgid "The description of the trace" msgstr "" #: ../src/osm-traces.c:444 msgid "Tags:" msgstr "" #: ../src/osm-traces.c:449 msgid "The tags associated to the trace" msgstr "" #: ../src/osm-traces.c:482 #, c-format msgid "Uploading %s to OSM" msgstr "" #: ../src/mapcache.c:61 msgid "Map cache memory size (MB):" msgstr "" #: ../src/print.c:53 msgid "None" msgstr "" #: ../src/print.c:54 msgid "Horizontally" msgstr "" #: ../src/print.c:55 msgid "Vertically" msgstr "" #: ../src/print.c:56 msgid "Both" msgstr "" #: ../src/print.c:120 msgid "Image Settings" msgstr "" #: ../src/print.c:546 msgid "done" msgstr "" #. Page Size #: ../src/print.c:575 msgid "_Adjust Page Size and Orientation" msgstr "" #: ../src/print.c:591 msgid "C_enter:" msgstr "" #. ignore page margins #: ../src/print.c:609 msgid "Ignore Page _Margins" msgstr "" #: ../src/print.c:628 msgid "Image S_ize:" msgstr "" #: ../src/util.c:81 msgid "Could not launch web browser." msgstr "" #: ../src/util.c:92 msgid "Could not create new email." msgstr "" #: ../src/vikcoordlayer.c:46 msgid "Color:" msgstr "" #: ../src/vikcoordlayer.c:47 msgid "Minutes Width:" msgstr "" #: ../src/vikcoordlayer.c:48 msgid "Line Thickness:" msgstr "" #: ../src/vikcoordlayer.c:56 msgid "Coordinate" msgstr "" #: ../src/datasource_bfilter.c:46 msgid "Max number of points:" msgstr "" #: ../src/datasource_bfilter.c:60 msgid "Simplify All Tracks..." msgstr "" #: ../src/datasource_bfilter.c:61 msgid "Simplified Tracks" msgstr "" #: ../src/datasource_bfilter.c:96 ../src/datasource_bfilter.c:97 msgid "Remove Duplicate Waypoints" msgstr "" #: ../src/datasource_bfilter.c:129 msgid "Waypoints Inside This" msgstr "" #: ../src/datasource_bfilter.c:130 msgid "Polygonized Layer" msgstr "" #: ../src/datasource_bfilter.c:165 msgid "Waypoints Outside This" msgstr "" #: ../src/datasource_bfilter.c:166 msgid "Polygonzied Layer" msgstr "" #: ../src/main.c:89 #, c-format msgid "Ignoring Xlib error: error code %d request code %d\n" msgstr "" #: ../src/main.c:102 msgid "Enable debug output" msgstr "" #: ../src/main.c:103 msgid "Enable verbose output" msgstr "" #: ../src/main.c:104 msgid "Show version" msgstr "" #: ../src/osm.c:106 msgid "On Disk OSM Tile Format" msgstr "" #: ../src/osm.c:121 msgid "OSM (view)" msgstr "" #: ../src/osm.c:125 msgid "OSM (edit)" msgstr "" #: ../src/osm.c:129 msgid "OSM (render)" msgstr "" #. Example: http://127.0.0.1:8111/load_and_zoom?left=8.19&right=8.20&top=48.605&bottom=48.590&select=node413602999 #. JOSM or merkaartor must already be running with remote interface enabled #: ../src/osm.c:136 msgid "Local port 8111 (eg JOSM)" msgstr "" #: ../src/preferences.c:285 msgid "Preferences" msgstr "" #: ../src/uibuilder.c:147 msgid "Take care that this password will be stored clearly in a plain file." msgstr "" #: ../src/vikaggregatelayer.c:37 msgid "Aggregate" msgstr "" #: ../src/vikdemlayer.c:101 msgid "Absolute height" msgstr "" #: ../src/vikdemlayer.c:102 msgid "Height gradient" msgstr "" #: ../src/vikdemlayer.c:118 msgid "DEM Files:" msgstr "" #: ../src/vikdemlayer.c:119 msgid "Download Source:" msgstr "" #: ../src/vikdemlayer.c:120 msgid "Min Elev Color:" msgstr "" #: ../src/vikdemlayer.c:121 msgid "Type:" msgstr "" #: ../src/vikdemlayer.c:122 msgid "Min Elev:" msgstr "" #: ../src/vikdemlayer.c:123 msgid "Max Elev:" msgstr "" #: ../src/vikdemlayer.c:134 msgid "_DEM Download" msgstr "" #: ../src/vikdemlayer.c:134 msgid "DEM Download" msgstr "" #: ../src/vikdemlayer.c:188 msgid "DEM" msgstr "" #: ../src/vikdemlayer.c:284 #, c-format msgid "Number of files: %d" msgstr "" #: ../src/vikdemlayer.c:385 msgid "DEM Loading" msgstr "" #: ../src/vikdemlayer.c:889 #, c-format msgid "No SRTM data available for %f, %f" msgstr "" #: ../src/vikdemlayer.c:1149 #, c-format msgid "Downloading DEM %s" msgstr "" #: ../src/vikfileentry.c:68 msgid "Browse..." msgstr "" #: ../src/vikfileentry.c:96 msgid "Choose file" msgstr "" #: ../src/vikfilelist.c:48 msgid "Choose file(s)" msgstr "" #: ../src/vikfilelist.c:172 msgid "Add..." msgstr "" #: ../src/vikfilelist.c:173 msgid "Delete" msgstr "" #: ../src/vikgeoreflayer.c:70 msgid "_Georef Move Map" msgstr "" #: ../src/vikgeoreflayer.c:70 msgid "Georef Move Map" msgstr "" #: ../src/vikgeoreflayer.c:77 msgid "Georef Z_oom Tool" msgstr "" #: ../src/vikgeoreflayer.c:77 msgid "Georef Zoom Tool" msgstr "" #: ../src/vikgeoreflayer.c:87 msgid "GeoRef Map" msgstr "" #: ../src/vikgeoreflayer.c:335 ../src/vikmapslayer.c:685 #, c-format msgid "Couldn't open image file: %s" msgstr "" #: ../src/vikgeoreflayer.c:365 msgid "Unexpected end of file reading World file." msgstr "" #: ../src/vikgeoreflayer.c:381 ../src/vikgeoreflayer.c:426 msgid "Choose World file" msgstr "" #: ../src/vikgeoreflayer.c:394 msgid "The World file you requested could not be opened for reading." msgstr "" #: ../src/vikgeoreflayer.c:439 msgid "The file you requested could not be opened for writing." msgstr "" #: ../src/vikgeoreflayer.c:456 ../src/viklayer.c:480 msgid "Layer Properties" msgstr "" #: ../src/vikgeoreflayer.c:478 msgid "World File Parameters:" msgstr "" #: ../src/vikgeoreflayer.c:479 msgid "Load From File..." msgstr "" #: ../src/vikgeoreflayer.c:484 msgid "Corner pixel easting:" msgstr "" #: ../src/vikgeoreflayer.c:486 msgid "the UTM \"easting\" value of the upper-right corner pixel of the map" msgstr "" #: ../src/vikgeoreflayer.c:488 msgid "Corner pixel northing:" msgstr "" #: ../src/vikgeoreflayer.c:490 msgid "the UTM \"northing\" value of the upper-right corner pixel of the map" msgstr "" #: ../src/vikgeoreflayer.c:492 msgid "X (easting) scale (mpp): " msgstr "" #: ../src/vikgeoreflayer.c:493 msgid "Y (northing) scale (mpp): " msgstr "" #: ../src/vikgeoreflayer.c:496 msgid "the scale of the map in the X direction (meters per pixel)" msgstr "" #: ../src/vikgeoreflayer.c:498 msgid "the scale of the map in the Y direction (meters per pixel)" msgstr "" #: ../src/vikgeoreflayer.c:500 msgid "Map Image:" msgstr "" #. Now with icons #: ../src/vikgeoreflayer.c:608 msgid "_Zoom to Fit Map" msgstr "" #: ../src/vikgeoreflayer.c:614 msgid "_Goto Map Center" msgstr "" #: ../src/vikgeoreflayer.c:620 msgid "_Export to World File" msgstr "" #: ../src/vikgoto.c:75 msgid "No goto tool available." msgstr "" #: ../src/vikgoto.c:88 ../src/vikgoto.c:107 msgid "goto" msgstr "" #: ../src/vikgoto.c:90 msgid "I don't know that place. Do you want another goto?" msgstr "" #: ../src/vikgoto.c:109 msgid "goto provider:" msgstr "" #: ../src/vikgoto.c:124 msgid "Enter address or place name:" msgstr "" #: ../src/vikgpslayer.c:127 msgid "Data Mode" msgstr "" #: ../src/vikgpslayer.c:129 msgid "Realtime Tracking Mode" msgstr "" #: ../src/vikgpslayer.c:137 msgid "Keep vehicle at center" msgstr "" #: ../src/vikgpslayer.c:138 msgid "Keep vehicle on screen" msgstr "" #: ../src/vikgpslayer.c:139 msgid "Disable" msgstr "" #: ../src/vikgpslayer.c:152 msgid "Download Tracks:" msgstr "" #: ../src/vikgpslayer.c:153 msgid "Upload Tracks:" msgstr "" #: ../src/vikgpslayer.c:154 msgid "Download Routes:" msgstr "" #: ../src/vikgpslayer.c:155 msgid "Upload Routes:" msgstr "" #: ../src/vikgpslayer.c:156 msgid "Download Waypoints:" msgstr "" #: ../src/vikgpslayer.c:157 msgid "Upload Waypoints:" msgstr "" #: ../src/vikgpslayer.c:159 msgid "Recording tracks" msgstr "" #: ../src/vikgpslayer.c:160 msgid "Jump to current position on start" msgstr "" #: ../src/vikgpslayer.c:161 msgid "Moving Map Method:" msgstr "" #: ../src/vikgpslayer.c:162 msgid "Gpsd Host:" msgstr "" #: ../src/vikgpslayer.c:163 msgid "Gpsd Port:" msgstr "" #: ../src/vikgpslayer.c:164 msgid "Gpsd Retry Interval (seconds):" msgstr "" #: ../src/vikgpslayer.c:179 msgid "GPS" msgstr "" #: ../src/vikgpslayer.c:242 ../src/vikgpslayer.c:1258 msgid "GPS Download" msgstr "" #: ../src/vikgpslayer.c:242 ../src/vikgpslayer.c:1258 #: ../src/viktrwlayer.c:3094 msgid "GPS Upload" msgstr "" #: ../src/vikgpslayer.c:244 msgid "GPS Realtime Tracking" msgstr "" #: ../src/vikgpslayer.c:451 msgid "Unknown GPS Protocol" msgstr "" #: ../src/vikgpslayer.c:469 msgid "Unknown serial port device" msgstr "" #: ../src/vikgpslayer.c:572 #, c-format msgid "%s: unknown parameter" msgstr "" #. Now with icons #: ../src/vikgpslayer.c:693 msgid "_Upload to GPS" msgstr "" #: ../src/vikgpslayer.c:699 msgid "Download from _GPS" msgstr "" #: ../src/vikgpslayer.c:720 msgid "Empty _Realtime" msgstr "" #: ../src/vikgpslayer.c:727 msgid "E_mpty Upload" msgstr "" #: ../src/vikgpslayer.c:733 msgid "_Empty Download" msgstr "" #: ../src/vikgpslayer.c:739 msgid "Empty _All" msgstr "" #. #. NB It's not fatal if this gives 2 for example! Hence removal of the g_assert #. This happens when copied GPS layer is deleted (not sure why the number_handlers would be 2) #. I don't think there's any side effects and certainly better than the program just aborting #. #: ../src/vikgpslayer.c:756 #, c-format msgid "Unexpected number of disconnected handlers: %d" msgstr "" #: ../src/vikgpslayer.c:898 #, c-format msgid "Uploading %d waypoint..." msgid_plural "Uploading %d waypoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:899 #, c-format msgid "Uploading %d trackpoint..." msgid_plural "Uploading %d trackpoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:900 #, c-format msgid "Uploading %d routepoint..." msgid_plural "Uploading %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:925 #, c-format msgid "Downloaded %d out of %d waypoint..." msgid_plural "Downloaded %d out of %d waypoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:926 #, c-format msgid "Downloaded %d out of %d trackpoint..." msgid_plural "Downloaded %d out of %d trackpoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:927 #, c-format msgid "Downloaded %d out of %d routepoint..." msgid_plural "Downloaded %d out of %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:932 #, c-format msgid "Uploaded %d out of %d waypoint..." msgid_plural "Uploaded %d out of %d waypoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:933 #, c-format msgid "Uploaded %d out of %d trackpoint..." msgid_plural "Uploaded %d out of %d trackpoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:934 #, c-format msgid "Uploaded %d out of %d routepoint..." msgid_plural "Uploaded %d out of %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:942 #, c-format msgid "Downloaded %d waypoint" msgid_plural "Downloaded %d waypoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:943 #, c-format msgid "Downloaded %d trackpoint" msgid_plural "Downloaded %d trackpoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:944 #, c-format msgid "Downloaded %d routepoint" msgid_plural "Downloaded %d routepoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:949 #, c-format msgid "Uploaded %d waypoint" msgid_plural "Uploaded %d waypoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:950 #, c-format msgid "Uploaded %d trackpoint" msgid_plural "Uploaded %d trackpoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:951 #, c-format msgid "Uploaded %d routepoint" msgid_plural "Uploaded %d routepoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:1180 msgid "Error: couldn't find gpsbabel." msgstr "" #: ../src/vikgpslayer.c:1269 msgid "Warning - GPS Upload items may overwrite each other" msgstr "" #: ../src/vikgpslayer.c:1301 msgid "Status: detecting gpsbabel" msgstr "" #: ../src/vikgpslayer.c:1332 msgid "No GPS items selected for transfer." msgstr "" #: ../src/vikgpslayer.c:1347 msgid "Could not turn off device." msgstr "" #: ../src/vikgpslayer.c:1385 msgid "Are you sure you want to delete GPS Upload data?" msgstr "" #: ../src/vikgpslayer.c:1398 msgid "Are you sure you want to delete GPS Download data?" msgstr "" #: ../src/vikgpslayer.c:1412 msgid "Are you sure you want to delete GPS Realtime data?" msgstr "" #: ../src/vikgpslayer.c:1425 msgid "Are you sure you want to delete All GPS data?" msgstr "" #: ../src/viklayerspanel.c:55 msgid "/C_ut" msgstr "" #: ../src/viklayerspanel.c:56 msgid "/_Copy" msgstr "" #: ../src/viklayerspanel.c:57 msgid "/_Paste" msgstr "" #: ../src/viklayerspanel.c:58 msgid "/_Delete" msgstr "" #: ../src/viklayerspanel.c:59 msgid "/New Layer" msgstr "" #: ../src/viklayerspanel.c:127 msgid "Top Layer" msgstr "" #: ../src/viklayerspanel.c:143 msgid "Add new layer" msgstr "" #: ../src/viklayerspanel.c:150 msgid "Remove selected layer" msgstr "" #: ../src/viklayerspanel.c:157 msgid "Move selected layer up" msgstr "" #: ../src/viklayerspanel.c:164 msgid "Move selected layer down" msgstr "" #: ../src/viklayerspanel.c:171 msgid "Cut selected layer" msgstr "" #: ../src/viklayerspanel.c:178 msgid "Copy selected layer" msgstr "" #: ../src/viklayerspanel.c:185 msgid "Paste layer below selected layer" msgstr "" #. TODO: FIXME: if name has a '/' in it it will get all messed up. why not have an itemfactory field with #. name, icon, shortcut, etc.? #: ../src/viklayerspanel.c:204 ../src/vikwindow.c:3292 #, c-format msgid "New _%s Layer" msgstr "" #: ../src/viklayerspanel.c:511 msgid "Aggregate Layers have no settable properties." msgstr "" #: ../src/viklayerspanel.c:555 msgid "You cannot cut the Top Layer." msgstr "" #: ../src/viklayerspanel.c:600 #, c-format msgid "Are you sure you want to delete %s?" msgstr "" #: ../src/viklayerspanel.c:617 msgid "You cannot delete the Top Layer." msgstr "" #: ../src/viklayerspanel.c:701 msgid "Are you sure you wish to delete all layers?" msgstr "" #. ******* MAPZOOMS ******** #: ../src/vikmapslayer.c:91 msgid "Use Viking Zoom Level" msgstr "" #: ../src/vikmapslayer.c:124 msgid "Map Type:" msgstr "" #: ../src/vikmapslayer.c:125 msgid "Maps Directory:" msgstr "" #: ../src/vikmapslayer.c:126 msgid "Alpha:" msgstr "" #: ../src/vikmapslayer.c:127 msgid "Control the Alpha value for transparency effects" msgstr "" #: ../src/vikmapslayer.c:128 msgid "Autodownload maps:" msgstr "" #: ../src/vikmapslayer.c:129 msgid "Autodownload Only Gets Missing Maps:" msgstr "" #: ../src/vikmapslayer.c:130 msgid "" "Using this option avoids attempting to update already acquired tiles. This " "can be useful if you want to restrict the network usage, without having to " "resort to manual control. Only applies when 'Autodownload Maps' is on." msgstr "" #: ../src/vikmapslayer.c:131 msgid "Zoom Level:" msgstr "" #: ../src/vikmapslayer.c:132 msgid "" "Determines the method of displaying map tiles for the current zoom level. " "'Viking Zoom Level' uses the best matching level, otherwise setting a fixed " "value will always use map tiles of the specified value regardless of the " "actual zoom level." msgstr "" #: ../src/vikmapslayer.c:146 msgid "_Maps Download" msgstr "" #: ../src/vikmapslayer.c:146 msgid "Maps Download" msgstr "" #: ../src/vikmapslayer.c:161 msgid "Map" msgstr "" #: ../src/vikmapslayer.c:249 msgid "Default maplayer directory:" msgstr "" #: ../src/vikmapslayer.c:249 msgid "Choose a directory to store cached Map tiles for this layer" msgstr "" #: ../src/vikmapslayer.c:505 msgid "Unknown map type" msgstr "" #: ../src/vikmapslayer.c:516 msgid "Unknown Map Zoom" msgstr "" #: ../src/vikmapslayer.c:589 #, c-format msgid "" "New map cannot be displayed in the current drawmode.\n" "Select \"%s\" from View menu to view it." msgstr "" #: ../src/vikmapslayer.c:753 #, c-format msgid "" "Cowardly refusing to draw tiles or existence of tiles beyond %d zoom out " "factor" msgstr "" #: ../src/vikmapslayer.c:1157 #, c-format msgid "Redownloading up to %d %s map..." msgid_plural "Redownloading up to %d %s maps..." msgstr[0] "" msgstr[1] "" #: ../src/vikmapslayer.c:1159 #, c-format msgid "Redownloading %d %s map..." msgid_plural "Redownloading %d %s maps..." msgstr[0] "" msgstr[1] "" #: ../src/vikmapslayer.c:1163 ../src/vikmapslayer.c:1238 #, c-format msgid "Downloading %d %s map..." msgid_plural "Downloading %d %s maps..." msgstr[0] "" msgstr[1] "" #: ../src/vikmapslayer.c:1311 #, c-format msgid "" "\n" "Source: %s\n" "\n" "Tile File: %s\n" "Tile File Timestamp: %s" msgstr "" #: ../src/vikmapslayer.c:1318 #, c-format msgid "" "Source: %s\n" "\n" "No Tile File!" msgstr "" #: ../src/vikmapslayer.c:1356 msgid "Redownload _Bad Map(s)" msgstr "" #: ../src/vikmapslayer.c:1360 msgid "Redownload _New Map(s)" msgstr "" #: ../src/vikmapslayer.c:1364 msgid "Redownload _All Map(s)" msgstr "" #: ../src/vikmapslayer.c:1368 msgid "_Show Tile Information" msgstr "" #: ../src/vikmapslayer.c:1449 #, c-format msgid "" "Wrong drawmode for this map.\n" "Select \"%s\" from View menu and try again." msgstr "" #: ../src/vikmapslayer.c:1454 msgid "Wrong zoom level for this map." msgstr "" #. Now with icons #: ../src/vikmapslayer.c:1485 msgid "Download _Missing Onscreen Maps" msgstr "" #: ../src/vikmapslayer.c:1492 msgid "Download _New Onscreen Maps" msgstr "" #: ../src/vikmapslayer.c:1499 msgid "Reload _All Onscreen Maps" msgstr "" #: ../src/viktreeview.c:263 msgid "Layer Name" msgstr "" #: ../src/viktreeview.c:742 #, c-format msgid "delete data from %s\n" msgstr "" #: ../src/viktrwlayer.c:377 msgid "Create _Waypoint" msgstr "" #: ../src/viktrwlayer.c:377 msgid "Create Waypoint" msgstr "" #: ../src/viktrwlayer.c:383 msgid "Create _Track" msgstr "" #: ../src/viktrwlayer.c:383 msgid "Create Track" msgstr "" #: ../src/viktrwlayer.c:392 msgid "Create _Route" msgstr "" #: ../src/viktrwlayer.c:392 msgid "Create Route" msgstr "" #: ../src/viktrwlayer.c:401 msgid "_Edit Waypoint" msgstr "" #: ../src/viktrwlayer.c:401 msgid "Edit Waypoint" msgstr "" #: ../src/viktrwlayer.c:409 msgid "Edit Trac_kpoint" msgstr "" #: ../src/viktrwlayer.c:409 msgid "Edit Trackpoint" msgstr "" #: ../src/viktrwlayer.c:417 msgid "Show P_icture" msgstr "" #: ../src/viktrwlayer.c:417 msgid "Show Picture" msgstr "" #: ../src/viktrwlayer.c:424 msgid "Route _Finder" msgstr "" #: ../src/viktrwlayer.c:424 msgid "Route Finder" msgstr "" #. ***** PARAMETERS ***** #: ../src/viktrwlayer.c:447 ../src/viktrwlayer.c:1942 #: ../src/viktrwlayer.c:1944 msgid "Waypoints" msgstr "" #: ../src/viktrwlayer.c:447 ../src/viktrwlayer.c:1933 #: ../src/viktrwlayer.c:1935 msgid "Tracks" msgstr "" #: ../src/viktrwlayer.c:447 msgid "Waypoint Images" msgstr "" #: ../src/viktrwlayer.c:450 msgid "Draw by Track" msgstr "" #: ../src/viktrwlayer.c:450 msgid "Draw by Speed" msgstr "" #: ../src/viktrwlayer.c:450 msgid "All Tracks Same Color" msgstr "" #: ../src/viktrwlayer.c:451 msgid "Filled Square" msgstr "" #: ../src/viktrwlayer.c:451 msgid "Square" msgstr "" #: ../src/viktrwlayer.c:451 msgid "Circle" msgstr "" #: ../src/viktrwlayer.c:451 msgid "X" msgstr "" #: ../src/viktrwlayer.c:477 msgid "Extra Extra Small" msgstr "" #: ../src/viktrwlayer.c:478 msgid "Extra Small" msgstr "" #: ../src/viktrwlayer.c:479 msgid "Small" msgstr "" #: ../src/viktrwlayer.c:480 msgid "Medium" msgstr "" #: ../src/viktrwlayer.c:481 msgid "Large" msgstr "" #: ../src/viktrwlayer.c:482 msgid "Extra Large" msgstr "" #: ../src/viktrwlayer.c:483 msgid "Extra Extra Large" msgstr "" #: ../src/viktrwlayer.c:491 msgid "Track Drawing Mode:" msgstr "" #: ../src/viktrwlayer.c:492 msgid "All Tracks Color:" msgstr "" #: ../src/viktrwlayer.c:493 msgid "The color used when 'All Tracks Same Color' drawing mode is selected" msgstr "" #: ../src/viktrwlayer.c:494 msgid "Draw Track Lines" msgstr "" #: ../src/viktrwlayer.c:495 msgid "Track Thickness:" msgstr "" #: ../src/viktrwlayer.c:496 msgid "Draw Track Direction" msgstr "" #: ../src/viktrwlayer.c:497 msgid "Direction Size:" msgstr "" #: ../src/viktrwlayer.c:498 msgid "Draw Trackpoints" msgstr "" #: ../src/viktrwlayer.c:499 msgid "Trackpoint Size:" msgstr "" #: ../src/viktrwlayer.c:500 msgid "Draw Elevation" msgstr "" #: ../src/viktrwlayer.c:501 msgid "Draw Elevation Height %:" msgstr "" #: ../src/viktrwlayer.c:503 msgid "Draw Stops" msgstr "" #: ../src/viktrwlayer.c:504 msgid "" "Whether to draw a marker when trackpoints are at the same position but over " "the minimum stop length apart in time" msgstr "" #: ../src/viktrwlayer.c:505 msgid "Min Stop Length (seconds):" msgstr "" #: ../src/viktrwlayer.c:507 msgid "Track BG Thickness:" msgstr "" #: ../src/viktrwlayer.c:508 msgid "Track Background Color" msgstr "" #: ../src/viktrwlayer.c:509 msgid "Draw by Speed Factor (%):" msgstr "" #: ../src/viktrwlayer.c:510 msgid "" "The percentage factor away from the average speed determining the color used" msgstr "" #: ../src/viktrwlayer.c:512 msgid "Draw Labels" msgstr "" #: ../src/viktrwlayer.c:513 msgid "Waypoint Font Size:" msgstr "" #: ../src/viktrwlayer.c:514 msgid "Waypoint Color:" msgstr "" #: ../src/viktrwlayer.c:515 msgid "Waypoint Text:" msgstr "" #: ../src/viktrwlayer.c:516 msgid "Background:" msgstr "" #: ../src/viktrwlayer.c:517 msgid "Fake BG Color Translucency:" msgstr "" #: ../src/viktrwlayer.c:518 msgid "Waypoint marker:" msgstr "" #: ../src/viktrwlayer.c:519 msgid "Waypoint size:" msgstr "" #: ../src/viktrwlayer.c:520 msgid "Draw Waypoint Symbols:" msgstr "" #: ../src/viktrwlayer.c:522 msgid "Draw Waypoint Images" msgstr "" #: ../src/viktrwlayer.c:523 msgid "Image Size (pixels):" msgstr "" #: ../src/viktrwlayer.c:524 msgid "Image Alpha:" msgstr "" #: ../src/viktrwlayer.c:525 msgid "Image Memory Cache Size:" msgstr "" #: ../src/viktrwlayer.c:610 msgid "TrackWaypoint" msgstr "" #: ../src/viktrwlayer.c:1951 ../src/viktrwlayer.c:1953 msgid "Routes" msgstr "" #: ../src/viktrwlayer.c:2144 #, c-format msgid " in %d:%02d hrs:mins" msgstr "" #: ../src/viktrwlayer.c:2148 #, c-format msgid "" "\n" "%sTotal Length %.1f %s%s" msgstr "" #: ../src/viktrwlayer.c:2154 #, c-format msgid "Tracks: %d - Waypoints: %d - Routes: %d%s" msgstr "" #: ../src/viktrwlayer.c:2174 #, c-format msgid "Tracks: %d" msgstr "" #: ../src/viktrwlayer.c:2184 #, c-format msgid "Routes: %d" msgstr "" #: ../src/viktrwlayer.c:2215 #, c-format msgid "- %d:%02d hrs:mins" msgstr "" #: ../src/viktrwlayer.c:2223 #, c-format msgid "%s%.1f km %s" msgstr "" #: ../src/viktrwlayer.c:2226 #, c-format msgid "%s%.1f miles %s" msgstr "" #: ../src/viktrwlayer.c:2240 #, c-format msgid "Waypoints: %d" msgstr "" #: ../src/viktrwlayer.c:2266 #, c-format msgid "Trkpt: Alt %dft" msgstr "" #. VIK_UNITS_HEIGHT_METRES: #: ../src/viktrwlayer.c:2270 #, c-format msgid "Trkpt: Alt %dm" msgstr "" #. Compact date time format #: ../src/viktrwlayer.c:2277 #, c-format msgid " | Time %x %X" msgstr "" #: ../src/viktrwlayer.c:2295 #, c-format msgid " | Track: %s" msgstr "" #. Combine parts to make overall message #: ../src/viktrwlayer.c:2299 #, c-format msgid "%s%s | %s %s %s" msgstr "" #: ../src/viktrwlayer.c:2314 #, c-format msgid "Wpt: Alt %dft" msgstr "" #. VIK_UNITS_HEIGHT_METRES: #: ../src/viktrwlayer.c:2318 #, c-format msgid "Wpt: Alt %dm" msgstr "" #. Add comment if available #: ../src/viktrwlayer.c:2333 #, c-format msgid "%s | %s %s | Comment: %s" msgstr "" #: ../src/viktrwlayer.c:2335 #, c-format msgid "%s | %s %s" msgstr "" #: ../src/viktrwlayer.c:2563 ../src/viktrwlayer.c:2634 msgid "This layer has no waypoints or trackpoints." msgstr "" #: ../src/viktrwlayer.c:2661 ../src/vikwindow.c:2407 ../src/vikwindow.c:2848 #, c-format msgid "The file \"%s\" exists, do you wish to overwrite it?" msgstr "" #: ../src/viktrwlayer.c:2671 ../src/vikwindow.c:2429 msgid "The filename you requested could not be opened for writing." msgstr "" #: ../src/viktrwlayer.c:2676 ../src/viktrwlayer.c:2681 #: ../src/viktrwlayer.c:2691 ../src/viktrwlayer.c:2703 msgid "Export Layer" msgstr "" #: ../src/viktrwlayer.c:2720 msgid "Could not create temporary file for export." msgstr "" #: ../src/viktrwlayer.c:2729 #, c-format msgid "Could not launch %s." msgstr "" #: ../src/viktrwlayer.c:2773 msgid "Export Track as GPX" msgstr "" #: ../src/viktrwlayer.c:2795 msgid "Find" msgstr "" #: ../src/viktrwlayer.c:2805 msgid "Waypoint Name:" msgstr "" #: ../src/viktrwlayer.c:2822 msgid "Waypoint not found in this layer." msgstr "" #: ../src/viktrwlayer.c:3090 msgid "Can not upload invisible track." msgstr "" #: ../src/viktrwlayer.c:3192 ../src/viktrwlayer.c:7785 msgid "Track" msgstr "" #: ../src/viktrwlayer.c:3215 ../src/viktrwlayer.c:7817 msgid "Route" msgstr "" #: ../src/viktrwlayer.c:3296 ../src/viktrwlayer.c:6265 #: ../src/viktrwlayer.c:6314 msgid "_Finish Route" msgstr "" #: ../src/viktrwlayer.c:3298 ../src/viktrwlayer.c:6223 #: ../src/viktrwlayer.c:6312 msgid "_Finish Track" msgstr "" #. Now with icons #: ../src/viktrwlayer.c:3310 msgid "_View Layer" msgstr "" #: ../src/viktrwlayer.c:3317 msgid "V_iew" msgstr "" #: ../src/viktrwlayer.c:3323 msgid "View All _Tracks" msgstr "" #: ../src/viktrwlayer.c:3328 msgid "View All _Routes" msgstr "" #: ../src/viktrwlayer.c:3333 msgid "View All _Waypoints" msgstr "" #: ../src/viktrwlayer.c:3338 msgid "_Goto Center of Layer" msgstr "" #: ../src/viktrwlayer.c:3344 ../src/viktrwlayer.c:6199 msgid "Goto _Waypoint..." msgstr "" #: ../src/viktrwlayer.c:3350 msgid "_Export Layer" msgstr "" #: ../src/viktrwlayer.c:3356 msgid "Export as GPS_Point..." msgstr "" #: ../src/viktrwlayer.c:3361 msgid "Export as GPS_Mapper..." msgstr "" #: ../src/viktrwlayer.c:3366 msgid "Export as _GPX..." msgstr "" #: ../src/viktrwlayer.c:3371 msgid "Export as _KML..." msgstr "" #: ../src/viktrwlayer.c:3376 msgid "Open with External Program_1: " msgstr "" #: ../src/viktrwlayer.c:3383 msgid "Open with External Program_2: " msgstr "" #: ../src/viktrwlayer.c:3391 ../src/vikwindow.c:3145 msgid "_New" msgstr "" #: ../src/viktrwlayer.c:3397 msgid "New _Waypoint..." msgstr "" #: ../src/viktrwlayer.c:3403 msgid "New _Track" msgstr "" #: ../src/viktrwlayer.c:3411 msgid "New _Route" msgstr "" #: ../src/viktrwlayer.c:3420 ../src/viktrwlayer.c:6597 msgid "Geotag _Images..." msgstr "" #: ../src/viktrwlayer.c:3427 msgid "_Acquire" msgstr "" #: ../src/viktrwlayer.c:3433 ../src/vikwindow.c:3150 msgid "From _GPS..." msgstr "" #: ../src/viktrwlayer.c:3439 msgid "From Google _Directions..." msgstr "" #: ../src/viktrwlayer.c:3446 msgid "From _OSM Traces..." msgstr "" #: ../src/viktrwlayer.c:3451 msgid "From _My OSM Traces..." msgstr "" #: ../src/viktrwlayer.c:3459 ../src/vikwindow.c:3166 msgid "From _Wikipedia Waypoints" msgstr "" #: ../src/viktrwlayer.c:3465 msgid "Within _Layer Bounds" msgstr "" #: ../src/viktrwlayer.c:3471 msgid "Within _Current View" msgstr "" #: ../src/viktrwlayer.c:3479 msgid "From Geo_caching..." msgstr "" #: ../src/viktrwlayer.c:3486 ../src/vikwindow.c:3163 msgid "From Geotagged _Images..." msgstr "" #: ../src/viktrwlayer.c:3492 msgid "From _File..." msgstr "" #: ../src/viktrwlayer.c:3498 ../src/viktrwlayer.c:6542 msgid "_Upload" msgstr "" #: ../src/viktrwlayer.c:3504 msgid "Upload to _GPS..." msgstr "" #: ../src/viktrwlayer.c:3511 ../src/viktrwlayer.c:6570 msgid "Upload to _OSM..." msgstr "" #: ../src/viktrwlayer.c:3519 msgid "De_lete" msgstr "" #: ../src/viktrwlayer.c:3525 msgid "Delete All _Tracks" msgstr "" #: ../src/viktrwlayer.c:3531 msgid "Delete Tracks _From Selection..." msgstr "" #: ../src/viktrwlayer.c:3537 ../src/viktrwlayer.c:6290 msgid "Delete _All Routes" msgstr "" #: ../src/viktrwlayer.c:3543 ../src/viktrwlayer.c:6296 msgid "_Delete Routes From Selection..." msgstr "" #: ../src/viktrwlayer.c:3549 msgid "Delete All _Waypoints" msgstr "" #: ../src/viktrwlayer.c:3555 msgid "Delete Waypoints From _Selection..." msgstr "" #: ../src/viktrwlayer.c:4128 #, c-format msgid "Are you sure you want to delete all tracks in %s?" msgstr "" #: ../src/viktrwlayer.c:4138 #, c-format msgid "Are you sure you want to delete all routes in %s?" msgstr "" #: ../src/viktrwlayer.c:4148 #, c-format msgid "Are you sure you want to delete all waypoints in %s?" msgstr "" #: ../src/viktrwlayer.c:4165 #, c-format msgid "Are you sure you want to delete the waypoint \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4178 #, c-format msgid "Are you sure you want to delete the track \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4191 #, c-format msgid "Are you sure you want to delete the route \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4351 ../src/viktrwlayer.c:4922 msgid "" "Converting a track to a route removes extra track data such as segments, " "timestamps, etc...\n" "Do you want to continue?" msgstr "" #: ../src/viktrwlayer.c:4711 msgid "Failed. No other tracks with timestamps in this layer found" msgstr "" #: ../src/viktrwlayer.c:4713 msgid "Failed. No other tracks without timestamps in this layer found" msgstr "" #: ../src/viktrwlayer.c:4732 msgid "Merge with..." msgstr "" #: ../src/viktrwlayer.c:4733 msgid "Select route to merge with" msgstr "" #: ../src/viktrwlayer.c:4733 msgid "Select track to merge with" msgstr "" #: ../src/viktrwlayer.c:4818 ../src/viktrwlayer.c:4895 msgid "Append Route" msgstr "" #: ../src/viktrwlayer.c:4818 ../src/viktrwlayer.c:4895 msgid "Append Track" msgstr "" #: ../src/viktrwlayer.c:4819 msgid "Select the route to append after the current route" msgstr "" #: ../src/viktrwlayer.c:4820 msgid "Select the track to append after the current track" msgstr "" #: ../src/viktrwlayer.c:4896 msgid "Select the track to append after the current route" msgstr "" #: ../src/viktrwlayer.c:4897 msgid "Select the route to append after the current track" msgstr "" #: ../src/viktrwlayer.c:4957 #, c-format msgid "%d segment merged" msgid_plural "%d segments merged" msgstr[0] "" msgstr[1] "" #: ../src/viktrwlayer.c:4973 msgid "Failed. This track does not have timestamp" msgstr "" #: ../src/viktrwlayer.c:4985 msgid "Failed. No other track in this layer has timestamp" msgstr "" #: ../src/viktrwlayer.c:4992 msgid "Merge Threshold..." msgstr "" #: ../src/viktrwlayer.c:4993 msgid "Merge when time between tracks less than:" msgstr "" #: ../src/viktrwlayer.c:5128 msgid "Split Threshold..." msgstr "" #: ../src/viktrwlayer.c:5129 msgid "Split when time between trackpoints exceeds:" msgstr "" #: ../src/viktrwlayer.c:5205 msgid "Split Every Nth Point" msgstr "" #: ../src/viktrwlayer.c:5206 msgid "Split on every Nth point:" msgstr "" #: ../src/viktrwlayer.c:5312 msgid "Can not split track as it has no segments" msgstr "" #: ../src/viktrwlayer.c:5340 ../src/viktrwlayer.c:5370 #, c-format msgid "Deleted %ld point" msgid_plural "Deleted %ld points" msgstr[0] "" msgstr[1] "" #: ../src/viktrwlayer.c:5531 msgid "Internal Error in vik_trw_layer_uniquify_tracks" msgstr "" #: ../src/viktrwlayer.c:5588 ../src/viktrwlayer.c:5635 #: ../src/viktrwlayer.c:5814 msgid "" "Multiple entries with the same name exist. This method only works with " "unique names. Force unique names now?" msgstr "" #: ../src/viktrwlayer.c:5599 msgid "No tracks found" msgstr "" #: ../src/viktrwlayer.c:5607 ../src/viktrwlayer.c:5654 #: ../src/viktrwlayer.c:5834 msgid "Delete Selection" msgstr "" #: ../src/viktrwlayer.c:5608 msgid "Select tracks to delete" msgstr "" #: ../src/viktrwlayer.c:5646 msgid "No routes found" msgstr "" #: ../src/viktrwlayer.c:5655 msgid "Select routes to delete" msgstr "" #: ../src/viktrwlayer.c:5761 msgid "Internal Error in vik_trw_layer_uniquify_waypoints" msgstr "" #: ../src/viktrwlayer.c:5824 msgid "No waypoints found" msgstr "" #: ../src/viktrwlayer.c:5835 msgid "Select waypoints to delete" msgstr "" #: ../src/viktrwlayer.c:5896 #, c-format msgid "" "A waypoint with the name \"%s\" already exists. Really rename to the same " "name?" msgstr "" #: ../src/viktrwlayer.c:5926 #, c-format msgid "" "A track with the name \"%s\" already exists. Really rename to the same name?" msgstr "" #: ../src/viktrwlayer.c:5963 #, c-format msgid "" "A route with the name \"%s\" already exists. Really rename to the same name?" msgstr "" #: ../src/viktrwlayer.c:6085 ../src/viktrwlayer.c:6337 msgid "_Goto" msgstr "" #: ../src/viktrwlayer.c:6104 msgid "_Visit Geocache Webpage" msgstr "" #: ../src/viktrwlayer.c:6123 msgid "_Show Picture..." msgstr "" #: ../src/viktrwlayer.c:6131 msgid "Update Geotag on _Image" msgstr "" #: ../src/viktrwlayer.c:6137 msgid "_Update" msgstr "" #: ../src/viktrwlayer.c:6142 msgid "Update and _Keep File Timestamp" msgstr "" #: ../src/viktrwlayer.c:6153 msgid "Visit _Webpage" msgstr "" #: ../src/viktrwlayer.c:6184 msgid "_New Waypoint..." msgstr "" #: ../src/viktrwlayer.c:6193 msgid "_View All Waypoints" msgstr "" #: ../src/viktrwlayer.c:6205 msgid "Delete _All Waypoints" msgstr "" #: ../src/viktrwlayer.c:6211 msgid "_Delete Waypoints From Selection..." msgstr "" #: ../src/viktrwlayer.c:6233 msgid "_View All Tracks" msgstr "" #: ../src/viktrwlayer.c:6239 msgid "_New Track" msgstr "" #: ../src/viktrwlayer.c:6247 msgid "Delete _All Tracks" msgstr "" #: ../src/viktrwlayer.c:6253 msgid "_Delete Tracks From Selection..." msgstr "" #: ../src/viktrwlayer.c:6276 msgid "_View All Routes" msgstr "" #: ../src/viktrwlayer.c:6282 msgid "_New Route" msgstr "" #: ../src/viktrwlayer.c:6327 msgid "_View Track" msgstr "" #: ../src/viktrwlayer.c:6329 msgid "_View Route" msgstr "" #: ../src/viktrwlayer.c:6343 msgid "_Startpoint" msgstr "" #: ../src/viktrwlayer.c:6349 msgid "\"_Center\"" msgstr "" #: ../src/viktrwlayer.c:6355 msgid "_Endpoint" msgstr "" #: ../src/viktrwlayer.c:6361 msgid "_Highest Altitude" msgstr "" #: ../src/viktrwlayer.c:6367 msgid "_Lowest Altitude" msgstr "" #: ../src/viktrwlayer.c:6375 msgid "_Maximum Speed" msgstr "" #: ../src/viktrwlayer.c:6384 msgid "Co_mbine" msgstr "" #: ../src/viktrwlayer.c:6392 msgid "_Merge By Time..." msgstr "" #: ../src/viktrwlayer.c:6397 msgid "Merge _Segments" msgstr "" #: ../src/viktrwlayer.c:6403 msgid "Merge _With Other Tracks..." msgstr "" #: ../src/viktrwlayer.c:6409 msgid "_Append Track..." msgstr "" #: ../src/viktrwlayer.c:6411 msgid "_Append Route..." msgstr "" #: ../src/viktrwlayer.c:6417 msgid "Append _Route..." msgstr "" #: ../src/viktrwlayer.c:6419 msgid "Append _Track..." msgstr "" #: ../src/viktrwlayer.c:6426 msgid "_Split" msgstr "" #: ../src/viktrwlayer.c:6434 msgid "_Split By Time..." msgstr "" #. ATM always enable this entry - don't want to have to analyse the track before displaying the menu - to keep the menu speedy #: ../src/viktrwlayer.c:6440 msgid "Split Se_gments" msgstr "" #: ../src/viktrwlayer.c:6446 msgid "Split By _Number of Points..." msgstr "" #: ../src/viktrwlayer.c:6451 msgid "Split at _Trackpoint" msgstr "" #: ../src/viktrwlayer.c:6460 msgid "Delete Poi_nts" msgstr "" #: ../src/viktrwlayer.c:6466 msgid "Delete Points With The Same _Position" msgstr "" #: ../src/viktrwlayer.c:6471 msgid "Delete Points With The Same _Time" msgstr "" #: ../src/viktrwlayer.c:6477 msgid "_Reverse Track" msgstr "" #: ../src/viktrwlayer.c:6479 msgid "_Reverse Route" msgstr "" #: ../src/viktrwlayer.c:6488 msgid "Down_load Maps Along Track..." msgstr "" #: ../src/viktrwlayer.c:6490 msgid "Down_load Maps Along Route..." msgstr "" #: ../src/viktrwlayer.c:6497 msgid "_Apply DEM Data" msgstr "" #: ../src/viktrwlayer.c:6504 msgid "_Export Track as GPX..." msgstr "" #: ../src/viktrwlayer.c:6506 msgid "_Export Route as GPX..." msgstr "" #: ../src/viktrwlayer.c:6513 msgid "E_xtend Track End" msgstr "" #: ../src/viktrwlayer.c:6515 msgid "E_xtend Route End" msgstr "" #: ../src/viktrwlayer.c:6522 msgid "C_onvert to a Route" msgstr "" #: ../src/viktrwlayer.c:6524 msgid "C_onvert to a Track" msgstr "" #: ../src/viktrwlayer.c:6532 msgid "Extend _Using Route Finder" msgstr "" #: ../src/viktrwlayer.c:6548 msgid "_Upload to GPS..." msgstr "" #: ../src/viktrwlayer.c:6559 msgid "_View Google Directions" msgstr "" #: ../src/viktrwlayer.c:6579 msgid "Use with _Filter" msgstr "" #: ../src/viktrwlayer.c:6612 msgid "_Edit Trackpoint" msgstr "" #: ../src/viktrwlayer.c:7524 #, c-format msgid " - Gain %dm:Loss %dm" msgstr "" #: ../src/viktrwlayer.c:7526 #, c-format msgid " - Gain %dft:Loss %dft" msgstr "" #: ../src/viktrwlayer.c:7531 #, c-format msgid " - Bearing %3.1f° - Step %s" msgstr "" #: ../src/viktrwlayer.c:8124 #, c-format msgid "Could not launch %s to open file." msgstr "" #: ../src/viktrwlayer.c:8205 #, c-format msgid "Creating %d Image Thumbnails..." msgstr "" #: ../src/viktrwlayer.c:8524 msgid "No map layer in use. Create one first" msgstr "" #: ../src/viktrwlayer_propwin.c:898 ../src/viktrwlayer_propwin.c:1155 #, c-format msgid "%.1f kph" msgstr "" #: ../src/viktrwlayer_propwin.c:901 ../src/viktrwlayer_propwin.c:1158 #, c-format msgid "%.1f mph" msgstr "" #: ../src/viktrwlayer_propwin.c:904 ../src/viktrwlayer_propwin.c:1161 #, c-format msgid "%.1f knots" msgstr "" #. VIK_UNITS_SPEED_METRES_PER_SECOND: #: ../src/viktrwlayer_propwin.c:908 ../src/viktrwlayer_propwin.c:1165 #, c-format msgid "%.1f m/s" msgstr "" #: ../src/viktrwlayer_propwin.c:1745 #, c-format msgid "%.1f miles" msgstr "" #: ../src/viktrwlayer_propwin.c:1747 #, c-format msgid "%.1f km" msgstr "" #: ../src/viktrwlayer_propwin.c:2681 msgid "Failed spliting track. Track unchanged" msgstr "" #: ../src/viktrwlayer_propwin.c:2779 ../src/viktrwlayer_propwin.c:3178 #, c-format msgid "%s - Track Properties" msgstr "" #: ../src/viktrwlayer_propwin.c:2784 msgid "Split at _Marker" msgstr "" #: ../src/viktrwlayer_propwin.c:2785 msgid "Split _Segments" msgstr "" #: ../src/viktrwlayer_propwin.c:2786 msgid "_Reverse" msgstr "" #: ../src/viktrwlayer_propwin.c:2787 msgid "_Delete Dupl." msgstr "" #: ../src/viktrwlayer_propwin.c:2813 msgid "Comment:" msgstr "" #: ../src/viktrwlayer_propwin.c:2814 msgid "Description:" msgstr "" #: ../src/viktrwlayer_propwin.c:2815 msgid "Track Length:" msgstr "" #: ../src/viktrwlayer_propwin.c:2816 msgid "Trackpoints:" msgstr "" #: ../src/viktrwlayer_propwin.c:2817 msgid "Segments:" msgstr "" #: ../src/viktrwlayer_propwin.c:2818 msgid "Duplicate Points:" msgstr "" #: ../src/viktrwlayer_propwin.c:2819 msgid "Max Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:2820 msgid "Avg. Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:2821 msgid "Moving Avg. Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:2822 msgid "Avg. Dist. Between TPs:" msgstr "" #: ../src/viktrwlayer_propwin.c:2823 msgid "Elevation Range:" msgstr "" #: ../src/viktrwlayer_propwin.c:2824 msgid "Total Elevation Gain/Loss:" msgstr "" #: ../src/viktrwlayer_propwin.c:2825 msgid "Start:" msgstr "" #: ../src/viktrwlayer_propwin.c:2826 msgid "End:" msgstr "" #: ../src/viktrwlayer_propwin.c:2827 msgid "Duration:" msgstr "" #: ../src/viktrwlayer_propwin.c:2828 msgid "Color:" msgstr "" #: ../src/viktrwlayer_propwin.c:2877 ../src/viktrwlayer_propwin.c:2901 #: ../src/viktrwlayer_propwin.c:2929 ../src/viktrwlayer_propwin.c:2966 #: ../src/viktrwlayer_propwin.c:2984 ../src/viktrwlayer_propwin.c:3034 #: ../src/viktrwlayer_propwin.c:3035 ../src/viktrwlayer_propwin.c:3036 #: ../src/viktrwlayer_propwin.c:3062 ../src/viktrwlayer_propwin.c:3063 #: ../src/viktrwlayer_propwin.c:3078 ../src/viktrwlayer_propwin.c:3079 #: ../src/viktrwlayer_propwin.c:3092 ../src/viktrwlayer_propwin.c:3093 #: ../src/viktrwlayer_propwin.c:3106 ../src/viktrwlayer_propwin.c:3107 #: ../src/viktrwlayer_propwin.c:3120 ../src/viktrwlayer_propwin.c:3121 #: ../src/viktrwlayer_propwin.c:3134 ../src/viktrwlayer_propwin.c:3135 #, c-format msgid "No Data" msgstr "" #: ../src/viktrwlayer_propwin.c:3031 #, c-format msgid "%d minutes" msgstr "" #: ../src/viktrwlayer_propwin.c:3058 msgid "Statistics" msgstr "" #: ../src/viktrwlayer_propwin.c:3064 msgid "Show D_EM" msgstr "" #: ../src/viktrwlayer_propwin.c:3065 ../src/viktrwlayer_propwin.c:3080 #: ../src/viktrwlayer_propwin.c:3094 ../src/viktrwlayer_propwin.c:3136 msgid "Show _GPS Speed" msgstr "" #: ../src/viktrwlayer_propwin.c:3067 ../src/viktrwlayer_propwin.c:3082 #: ../src/viktrwlayer_propwin.c:3110 ../src/viktrwlayer_propwin.c:3138 msgid "Track Distance:" msgstr "" #: ../src/viktrwlayer_propwin.c:3068 ../src/viktrwlayer_propwin.c:3125 msgid "Track Height:" msgstr "" #: ../src/viktrwlayer_propwin.c:3073 msgid "Elevation-distance" msgstr "" #: ../src/viktrwlayer_propwin.c:3083 msgid "Track Gradient:" msgstr "" #: ../src/viktrwlayer_propwin.c:3087 msgid "Gradient-distance" msgstr "" #: ../src/viktrwlayer_propwin.c:3096 ../src/viktrwlayer_propwin.c:3111 #: ../src/viktrwlayer_propwin.c:3124 msgid "Track Time:" msgstr "" #: ../src/viktrwlayer_propwin.c:3097 ../src/viktrwlayer_propwin.c:3139 msgid "Track Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:3101 msgid "Speed-time" msgstr "" #: ../src/viktrwlayer_propwin.c:3108 ../src/viktrwlayer_propwin.c:3122 msgid "Show S_peed" msgstr "" #: ../src/viktrwlayer_propwin.c:3115 msgid "Distance-time" msgstr "" #: ../src/viktrwlayer_propwin.c:3129 msgid "Elevation-time" msgstr "" #: ../src/viktrwlayer_propwin.c:3143 msgid "Speed-distance" msgstr "" #: ../src/viktrwlayer_tpwin.c:118 msgid "Part of Track:" msgstr "" #: ../src/viktrwlayer_tpwin.c:119 msgid "Latitude:" msgstr "" #: ../src/viktrwlayer_tpwin.c:120 msgid "Longitude:" msgstr "" #: ../src/viktrwlayer_tpwin.c:121 msgid "Altitude:" msgstr "" #: ../src/viktrwlayer_tpwin.c:122 msgid "Timestamp:" msgstr "" #: ../src/viktrwlayer_tpwin.c:123 msgid "Time:" msgstr "" #: ../src/viktrwlayer_tpwin.c:124 msgid "Distance Difference:" msgstr "" #: ../src/viktrwlayer_tpwin.c:125 msgid "Time Difference:" msgstr "" #: ../src/viktrwlayer_tpwin.c:126 msgid "\"Speed\" Between:" msgstr "" #: ../src/viktrwlayer_tpwin.c:127 msgid "VDOP:" msgstr "" #: ../src/viktrwlayer_tpwin.c:128 msgid "HDOP:" msgstr "" #: ../src/viktrwlayer_tpwin.c:129 msgid "PDOP:" msgstr "" #: ../src/viktrwlayer_tpwin.c:130 msgid "SAT/FIX:" msgstr "" #: ../src/viktrwlayer_tpwin.c:139 msgid "Trackpoint" msgstr "" #: ../src/viktrwlayer_tpwin.c:142 msgid "_Insert After" msgstr "" #: ../src/viktrwlayer_tpwin.c:144 msgid "Split Here" msgstr "" #: ../src/viktrwlayer_geotag.c:446 #, c-format msgid "Geotagging %d Images..." msgstr "" #: ../src/viktrwlayer_geotag.c:510 msgid "Geotag Images" msgstr "" #: ../src/viktrwlayer_geotag.c:516 msgid "Images" msgstr "" #: ../src/viktrwlayer_geotag.c:520 msgid "Overwrite Existing Waypoints:" msgstr "" #: ../src/viktrwlayer_geotag.c:523 msgid "Overwrite Existing GPS Information:" msgstr "" #: ../src/viktrwlayer_geotag.c:525 msgid "Keep File Modification Timestamp:" msgstr "" #: ../src/viktrwlayer_geotag.c:555 msgid "Create Waypoints:" msgstr "" #: ../src/viktrwlayer_geotag.c:563 msgid "Write EXIF:" msgstr "" #: ../src/viktrwlayer_geotag.c:575 msgid "Interpolate Between Track Segments:" msgstr "" #: ../src/viktrwlayer_geotag.c:579 msgid "Image Time Offset (Seconds):" msgstr "" #: ../src/viktrwlayer_geotag.c:581 msgid "" "The number of seconds to ADD to the photos time to make it match the GPS " "data. Calculate this with (GPS - Photo). Can be negative or positive. Useful " "to adjust times when a camera's timestamp was incorrect." msgstr "" #: ../src/viktrwlayer_geotag.c:584 msgid "Image Timezone:" msgstr "" #: ../src/viktrwlayer_geotag.c:586 msgid "" "The timezone that was used when the images were created. For example, if a " "camera is set to AWST or +8:00 hours. Enter +8:00 here so that the correct " "adjustment to the images' time can be made. GPS data is always in UTC." msgstr "" #: ../src/viktrwlayer_geotag.c:590 #, c-format msgid "Using track: %s" msgstr "" #: ../src/viktrwlayer_geotag.c:592 #, c-format msgid "Using all tracks in: %s" msgstr "" #: ../src/vikstatus.c:105 msgid "Current zoom level. Click to select a new one." msgstr "" #: ../src/vikwaypoint.c:34 msgid "Waypoint" msgstr "" #. TODO get rid of this as this is unnecessary duplication... #: ../src/vikwindow.c:221 msgid "Pan" msgstr "" #: ../src/vikwindow.c:221 msgid "Zoom" msgstr "" #: ../src/vikwindow.c:221 msgid "Ruler" msgstr "" #: ../src/vikwindow.c:221 msgid "Select" msgstr "" #. Create tooltip #: ../src/vikwindow.c:440 msgid "Select zoom level" msgstr "" #: ../src/vikwindow.c:645 #, c-format msgid "" "Do you want to save the changes you made to the document \"%s\"?\n" "\n" "Your changes will be lost if you don't save them." msgstr "" #: ../src/vikwindow.c:649 msgid "Don't Save" msgstr "" #: ../src/vikwindow.c:696 msgid "mpp" msgstr "" #: ../src/vikwindow.c:696 msgid "pixelfact" msgstr "" #: ../src/vikwindow.c:861 #, c-format msgid "%s %s %dm" msgstr "" #: ../src/vikwindow.c:863 #, c-format msgid "%s %s %dft" msgstr "" #: ../src/vikwindow.c:866 #, c-format msgid "%s %s" msgstr "" #. NB Ctrl+Shift+R is used for Refresh (deemed more important), so use 'U' instead #: ../src/vikwindow.c:1254 msgid "_Ruler" msgstr "" #: ../src/vikwindow.c:1254 msgid "Ruler Tool" msgstr "" #: ../src/vikwindow.c:1502 ../src/vikwindow.c:3138 msgid "_Zoom" msgstr "" #: ../src/vikwindow.c:1502 msgid "Zoom Tool" msgstr "" #: ../src/vikwindow.c:1547 ../src/vikwindow.c:3139 msgid "_Pan" msgstr "" #: ../src/vikwindow.c:1547 msgid "Pan Tool" msgstr "" #: ../src/vikwindow.c:1664 msgid "_Select" msgstr "" #: ../src/vikwindow.c:1664 msgid "Select Tool" msgstr "" #: ../src/vikwindow.c:1809 msgid "You must select a layer to show its properties." msgstr "" #. No error to show, so unlikely this will get called #: ../src/vikwindow.c:1824 msgid "The help system is not available." msgstr "" #. Main error path #: ../src/vikwindow.c:1827 #, c-format msgid "" "Help is not available because: %s.\n" "Ensure a Mime Type ghelp handler program is installed (e.g. yelp)." msgstr "" #: ../src/vikwindow.c:1850 msgid "You must select a layer to delete." msgstr "" #: ../src/vikwindow.c:2087 msgid "Untitled" msgstr "" #: ../src/vikwindow.c:2194 #, c-format msgid "Unable to add '%s' to the list of recently used documents" msgstr "" #: ../src/vikwindow.c:2208 msgid "The file you requested could not be opened." msgstr "" #: ../src/vikwindow.c:2211 msgid "" "GPSBabel is required to load files of this type or GPSBabel encountered " "problems." msgstr "" #: ../src/vikwindow.c:2214 #, c-format msgid "Unable to load malformed GPX file %s" msgstr "" #: ../src/vikwindow.c:2217 #, c-format msgid "Unsupported file type for %s" msgstr "" #. Since we can process .vik files with issues just show a warning in the status bar #. Not that a user can do much about it... or tells them what this issue is yet... #: ../src/vikwindow.c:2223 #, c-format msgid "WARNING: issues encountered loading %s" msgstr "" #: ../src/vikwindow.c:2278 msgid "Please select a GPS data file to open. " msgstr "" #: ../src/vikwindow.c:2288 msgid "Geocaching" msgstr "" #: ../src/vikwindow.c:2294 msgid "Google Earth" msgstr "" #: ../src/vikwindow.c:2299 msgid "GPX" msgstr "" #: ../src/vikwindow.c:2304 ../src/vikwindow.c:2387 #: ../src/viking.desktop.in.h:1 msgid "Viking" msgstr "" #: ../src/vikwindow.c:2374 msgid "Save as Viking File." msgstr "" #. Try harder... #: ../src/vikwindow.c:2619 ../src/vikwindow.c:2625 msgid "Generating image file..." msgstr "" #: ../src/vikwindow.c:2647 msgid "" "Failed to generate internal image.\n" "\n" "Try creating a smaller image." msgstr "" #: ../src/vikwindow.c:2655 msgid "Failed to generate image file." msgstr "" #. Success #: ../src/vikwindow.c:2660 msgid "Image file generated." msgstr "" #: ../src/vikwindow.c:2764 msgid "" "Viewable region outside allowable pixel size bounds for image. Clipping " "width/height values." msgstr "" #: ../src/vikwindow.c:2789 #, c-format msgid "Total area: %ldm x %ldm (%.3f sq. km)" msgstr "" #: ../src/vikwindow.c:2792 #, c-format msgid "Total area: %ldm x %ldm (%.3f sq. miles)" msgstr "" #: ../src/vikwindow.c:2813 msgid "Save Image" msgstr "" #: ../src/vikwindow.c:2834 msgid "PNG" msgstr "" #: ../src/vikwindow.c:2857 msgid "You must be in UTM mode to use this feature" msgstr "" #: ../src/vikwindow.c:2862 msgid "Choose a directory to hold images" msgstr "" #. todo: default for answers inside VikWindow or static (thruout instance) #: ../src/vikwindow.c:2883 msgid "Save to Image File" msgstr "" #: ../src/vikwindow.c:2900 msgid "Width (pixels):" msgstr "" #: ../src/vikwindow.c:2902 msgid "Height (pixels):" msgstr "" #: ../src/vikwindow.c:2905 msgid "" "WARNING: USING LARGE IMAGES OVER 10000x10000\n" "MAY CRASH THE PROGRAM!" msgstr "" #: ../src/vikwindow.c:2907 msgid "Zoom (meters per pixel):" msgstr "" #: ../src/vikwindow.c:2921 msgid "Area in current viewable window" msgstr "" #: ../src/vikwindow.c:2931 msgid "Save as PNG" msgstr "" #: ../src/vikwindow.c:2932 msgid "Save as JPEG" msgstr "" #: ../src/vikwindow.c:2954 msgid "East-west image tiles:" msgstr "" #: ../src/vikwindow.c:2956 msgid "North-south image tiles:" msgstr "" #: ../src/vikwindow.c:3097 msgid "Choose a background color" msgstr "" #: ../src/vikwindow.c:3113 msgid "Choose a track highlight color" msgstr "" #: ../src/vikwindow.c:3134 msgid "_File" msgstr "" #: ../src/vikwindow.c:3135 msgid "_Edit" msgstr "" #: ../src/vikwindow.c:3136 msgid "_View" msgstr "" #: ../src/vikwindow.c:3137 msgid "_Show" msgstr "" #: ../src/vikwindow.c:3140 msgid "_Layers" msgstr "" #: ../src/vikwindow.c:3141 msgid "_Tools" msgstr "" #: ../src/vikwindow.c:3142 msgid "_Webtools" msgstr "" #: ../src/vikwindow.c:3143 ../src/vikwindow.c:3206 msgid "_Help" msgstr "" #: ../src/vikwindow.c:3145 msgid "New file" msgstr "" #: ../src/vikwindow.c:3146 msgid "_Open..." msgstr "" #: ../src/vikwindow.c:3146 msgid "Open a file" msgstr "" #: ../src/vikwindow.c:3147 msgid "Open _Recent File" msgstr "" #: ../src/vikwindow.c:3148 msgid "Append _File..." msgstr "" #: ../src/vikwindow.c:3148 msgid "Append data from a different file" msgstr "" #: ../src/vikwindow.c:3149 msgid "A_cquire" msgstr "" #: ../src/vikwindow.c:3150 msgid "Transfer data from a GPS device" msgstr "" #: ../src/vikwindow.c:3151 msgid "Import File With GPS_Babel..." msgstr "" #: ../src/vikwindow.c:3151 msgid "Import file via GPSBabel converter" msgstr "" #: ../src/vikwindow.c:3153 msgid "Google _Directions..." msgstr "" #: ../src/vikwindow.c:3153 msgid "Get driving directions from Google" msgstr "" #: ../src/vikwindow.c:3156 msgid "_OSM Traces..." msgstr "" #: ../src/vikwindow.c:3156 msgid "Get traces from OpenStreetMap" msgstr "" #: ../src/vikwindow.c:3157 msgid "_My OSM Traces..." msgstr "" #: ../src/vikwindow.c:3157 msgid "Get Your Own Traces from OpenStreetMap" msgstr "" #: ../src/vikwindow.c:3160 msgid "Geo_caches..." msgstr "" #: ../src/vikwindow.c:3160 msgid "Get Geocaches from geocaching.com" msgstr "" #: ../src/vikwindow.c:3163 msgid "Create waypoints from geotagged images" msgstr "" #: ../src/vikwindow.c:3166 msgid "Create waypoints from Wikipedia items in the current view" msgstr "" #: ../src/vikwindow.c:3168 msgid "_Save" msgstr "" #: ../src/vikwindow.c:3168 msgid "Save the file" msgstr "" #: ../src/vikwindow.c:3169 msgid "Save _As..." msgstr "" #: ../src/vikwindow.c:3169 msgid "Save the file under different name" msgstr "" #: ../src/vikwindow.c:3170 msgid "_Generate Image File..." msgstr "" #: ../src/vikwindow.c:3170 msgid "Save a snapshot of the workspace into a file" msgstr "" #: ../src/vikwindow.c:3171 msgid "Generate _Directory of Images..." msgstr "" #: ../src/vikwindow.c:3171 msgid "FIXME:IMGDIR" msgstr "" #: ../src/vikwindow.c:3174 msgid "_Print..." msgstr "" #: ../src/vikwindow.c:3174 msgid "Print maps" msgstr "" #: ../src/vikwindow.c:3177 msgid "E_xit" msgstr "" #: ../src/vikwindow.c:3177 msgid "Exit the program" msgstr "" #: ../src/vikwindow.c:3178 msgid "Save and Exit" msgstr "" #: ../src/vikwindow.c:3178 msgid "Save and Exit the program" msgstr "" #: ../src/vikwindow.c:3180 msgid "Go to the _Default Location" msgstr "" #: ../src/vikwindow.c:3180 msgid "Go to the default location" msgstr "" #: ../src/vikwindow.c:3181 msgid "Go to _Location..." msgstr "" #: ../src/vikwindow.c:3181 msgid "Go to address/place using text search" msgstr "" #: ../src/vikwindow.c:3182 msgid "_Go to Lat/Lon..." msgstr "" #: ../src/vikwindow.c:3182 msgid "Go to arbitrary lat/lon coordinate" msgstr "" #: ../src/vikwindow.c:3183 msgid "Go to UTM..." msgstr "" #: ../src/vikwindow.c:3183 msgid "Go to arbitrary UTM coordinate" msgstr "" #: ../src/vikwindow.c:3184 msgid "_Refresh" msgstr "" #: ../src/vikwindow.c:3184 msgid "Refresh any maps displayed" msgstr "" #: ../src/vikwindow.c:3185 msgid "Set _Highlight Color..." msgstr "" #: ../src/vikwindow.c:3186 msgid "Set Bac_kground Color..." msgstr "" #: ../src/vikwindow.c:3187 msgid "Zoom _In" msgstr "" #: ../src/vikwindow.c:3188 msgid "Zoom _Out" msgstr "" #: ../src/vikwindow.c:3189 msgid "Zoom _To..." msgstr "" #: ../src/vikwindow.c:3190 msgid "Pan _North" msgstr "" #: ../src/vikwindow.c:3191 msgid "Pan _East" msgstr "" #: ../src/vikwindow.c:3192 msgid "Pan _South" msgstr "" #: ../src/vikwindow.c:3193 msgid "Pan _West" msgstr "" #: ../src/vikwindow.c:3194 msgid "Background _Jobs" msgstr "" #: ../src/vikwindow.c:3196 msgid "Cu_t" msgstr "" #: ../src/vikwindow.c:3197 msgid "_Copy" msgstr "" #: ../src/vikwindow.c:3198 msgid "_Paste" msgstr "" #: ../src/vikwindow.c:3199 msgid "_Delete" msgstr "" #: ../src/vikwindow.c:3200 msgid "Delete All" msgstr "" #: ../src/vikwindow.c:3201 msgid "_Flush Map Cache" msgstr "" #: ../src/vikwindow.c:3202 msgid "_Set the Default Location" msgstr "" #: ../src/vikwindow.c:3202 msgid "Set the Default Location to the current position" msgstr "" #: ../src/vikwindow.c:3203 msgid "_Preferences" msgstr "" #: ../src/vikwindow.c:3204 msgid "_Properties" msgstr "" #: ../src/vikwindow.c:3207 msgid "_About" msgstr "" #: ../src/vikwindow.c:3213 msgid "_UTM Mode" msgstr "" #: ../src/vikwindow.c:3214 msgid "_Expedia Mode" msgstr "" #: ../src/vikwindow.c:3215 msgid "_Mercator Mode" msgstr "" #: ../src/vikwindow.c:3216 msgid "Lat_/Lon Mode" msgstr "" #: ../src/vikwindow.c:3220 msgid "Show _Scale" msgstr "" #: ../src/vikwindow.c:3220 msgid "Show Scale" msgstr "" #: ../src/vikwindow.c:3221 msgid "Show _Center Mark" msgstr "" #: ../src/vikwindow.c:3221 msgid "Show Center Mark" msgstr "" #: ../src/vikwindow.c:3222 msgid "Show _Highlight" msgstr "" #: ../src/vikwindow.c:3222 msgid "Show Highlight" msgstr "" #: ../src/vikwindow.c:3223 msgid "_Full Screen" msgstr "" #: ../src/vikwindow.c:3223 msgid "Activate full screen mode" msgstr "" #: ../src/vikwindow.c:3224 msgid "Show Side _Panel" msgstr "" #: ../src/vikwindow.c:3224 msgid "Show Side Panel" msgstr "" #: ../src/vikwindow.c:3225 msgid "Show Status_bar" msgstr "" #: ../src/vikwindow.c:3225 msgid "Show Statusbar" msgstr "" #: ../src/vikwindow.c:3226 msgid "Show _Toolbar" msgstr "" #: ../src/vikwindow.c:3226 msgid "Show Toolbar" msgstr "" #: ../src/vikwindow.c:3227 msgid "Show _Menu" msgstr "" #: ../src/vikwindow.c:3227 msgid "Show Menu" msgstr "" #: ../src/viking.desktop.in.h:2 msgid "GPS Data Manager" msgstr "" #: ../src/viking.desktop.in.h:3 msgid "Map Based GPS Data Manager (live data capable)." msgstr "" #: ../src/libjpeg/jpeg-data.c:206 msgid "Data does not follow JPEG specification." msgstr "" #: ../src/libjpeg/jpeg-data.c:291 #, c-format msgid "Path '%s' invalid." msgstr "" #: ../src/libjpeg/jpeg-data.c:309 #, c-format msgid "Could not read '%s'." msgstr "" viking-1.4.2/po/hu.po0000644000175000017500000025127712175546146011351 00000000000000# Hungarian translation for viking # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the viking package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: viking\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-02-04 23:29+0100\n" "PO-Revision-Date: 2011-09-26 17:52+0000\n" "Last-Translator: György Balló \n" "Language-Team: Hungarian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2013-03-23 17:12+0000\n" "X-Generator: Launchpad (build 16540)\n" "Language: hu\n" #: ../src/acquire.c:103 ../src/vikgpslayer.c:1185 msgid "Done." msgstr "Kész." #: ../src/acquire.c:114 msgid "No data." msgstr "Nincs adat." #: ../src/acquire.c:154 ../src/acquire.c:404 msgid "Error: acquisition failed." msgstr "Hiba: beszerzés sikertelen." #: ../src/acquire.c:341 msgid "Working..." msgstr "Dolgozom…" #. This shouldn't happen... #: ../src/acquire.c:394 msgid "" "Unable to create command\n" "Acquire method failed." msgstr "" #: ../src/acquire.c:486 msgid "_Filter" msgstr "" #: ../src/acquire.c:501 #, c-format msgid "Filter with %s" msgstr "" #: ../src/acquire.c:518 msgid "Filter" msgstr "" #: ../src/background.c:52 #, c-format msgid "%d items" msgstr "%d elem" #: ../src/background.c:248 msgid "Job" msgstr "Munka" #: ../src/background.c:252 msgid "Progress" msgstr "Folyamat" #: ../src/background.c:268 msgid "Viking Background Jobs" msgstr "Viking háttérmunkák" #: ../src/bing.c:47 msgid "Bing" msgstr "" #. VIK_GTK_WINDOW_FROM_WIDGET(vp) #: ../src/bingmapsource.c:445 msgid "Bing attribution Loading" msgstr "" #: ../src/clipboard.c:95 msgid "paste failed" msgstr "beillesztés sikertelen" #: ../src/clipboard.c:105 msgid "wrong clipboard data size" msgstr "rossz vágólap adatméret" #: ../src/clipboard.c:124 #, c-format msgid "" "The clipboard contains sublayer data for %s layers. You must select a layer " "of this type to paste the clipboard data." msgstr "" "A vágólap alréteg adatokat tartalmaz a(z) %s réteghez. A vágólapon található " "adatok beillesztéséhez ki kell választania egy ilyen típusú réteget." #: ../src/clipboard.c:236 msgid "" "In order to paste a waypoint, please select an appropriate layer to paste " "into." msgstr "Útpont beillesztéséhez ki kell választania egy megfelelő réteget." #: ../src/dialog.c:52 msgid "Go to Lat/Lon" msgstr "Ugrás Szél./Hossz.-ra" #: ../src/dialog.c:64 ../src/dialog.c:251 msgid "Latitude:" msgstr "Földrajzi szélesség:" #: ../src/dialog.c:70 ../src/dialog.c:256 msgid "Longitude:" msgstr "Földrajzi hosszúság:" #: ../src/dialog.c:102 msgid "Go to UTM" msgstr "Ugrás UTM-re" #: ../src/dialog.c:115 msgid "Northing:" msgstr "Északi:" #: ../src/dialog.c:121 msgid "Easting:" msgstr "Keleti:" #: ../src/dialog.c:128 msgid "Zone:" msgstr "Zóna:" #: ../src/dialog.c:131 msgid "Letter:" msgstr "Betű:" #: ../src/dialog.c:199 msgid "Waypoint Properties" msgstr "Útpont tulajdonságai" #: ../src/dialog.c:233 msgid "Name:" msgstr "Név:" #: ../src/dialog.c:261 msgid "Altitude:" msgstr "Magasság:" #: ../src/dialog.c:266 msgid "Comment:" msgstr "Megjegyzés:" #: ../src/dialog.c:274 ../src/osm-traces.c:437 msgid "Description:" msgstr "Leírás:" #: ../src/dialog.c:277 msgid "Image:" msgstr "Kép:" #: ../src/dialog.c:282 msgid "Symbol:" msgstr "Szimbólum:" #: ../src/dialog.c:291 msgid "(none)" msgstr "(nincs)" #. TODO: other checks (isalpha or whatever ) #: ../src/dialog.c:356 msgid "Please enter a name for the waypoint." msgstr "Adjon meg egy nevet az útpontnak." #: ../src/dialog.c:529 ../src/geonamessearch.c:243 #: ../src/datasource_osm_my_traces.c:507 msgid "Nothing was selected" msgstr "Nincs kiválasztva semmi" #: ../src/dialog.c:537 msgid "Add Route" msgstr "" #: ../src/dialog.c:537 msgid "Add Track" msgstr "Nyomvonal hozzáadása" #: ../src/dialog.c:545 msgid "Route Name:" msgstr "" #: ../src/dialog.c:545 msgid "Track Name:" msgstr "Nyomvonal neve:" #: ../src/dialog.c:565 msgid "Please enter a name for the track." msgstr "Adjon meg egy nevet a nyomvonalnak." #: ../src/dialog.c:623 msgid "Zoom Factors..." msgstr "Nagyítási tényezők..." #: ../src/dialog.c:637 msgid "Zoom factor (in meters per pixel):" msgstr "Nagyítási tényező (méter/képpontban)" #: ../src/dialog.c:638 msgid "X (easting): " msgstr "X (keleti): " #: ../src/dialog.c:639 msgid "Y (northing): " msgstr "Y (északi): " #: ../src/dialog.c:644 msgid "X and Y zoom factors must be equal" msgstr "Az X és Y nagyítási tényezők legyenek egyenlők" #: ../src/dialog.c:699 msgid "1 min" msgstr "1 perc" #: ../src/dialog.c:700 msgid "1 hour" msgstr "1 óra" #: ../src/dialog.c:701 msgid "1 day" msgstr "1 nap" #: ../src/dialog.c:702 msgid "Custom (in minutes):" msgstr "Egyéni (percben):" #: ../src/dialog.c:808 msgid "GPS Data and Topo Analyzer, Explorer, and Manager." msgstr "GPS adat- és topográfiai elemző, böngésző és kezelő." #: ../src/dialog.c:809 msgid "" "This program is free software; you can redistribute it and/or modify it " "under the terms of the GNU General Public License as published by the Free " "Software Foundation; either version 2 of the License, or (at your option) " "any later version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT " "ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or " "FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for " "more details.\n" "\n" "You should have received a copy of the GNU General Public License along with " "this program; if not, write to the Free Software Foundation, Inc., 59 Temple " "Place, Suite 330, Boston, MA 02111-1307, USA" msgstr "" "Ez a program szabad szoftver; továbbadható és/vagy módosítható a Free " "Software Foundation által kiadott GNU General Public License 2-es vagy " "(választása szerint) bármely újabb változatának irányelvei szerint.\n" "\n" "Ezt a programot abban a reményben terjesztjük, hogy hasznos lesz, de " "MINDENFÉLE GARANCIA NÉLKÜL; még hallgatólagos garancia sem vonatkozik az " "ELADHATÓSÁGRA vagy ALKALMASSÁGÁRA EGY ADOTT CÉLRA. További részletekért lásd " "a GNU General Public License-t.\n" "\n" "Önnek ezzel a programmal együtt meg kellett kapnia a GNU General Public " "License egy példányát; ha nem, írjon a Free Software Foundation, Inc.-nek, " "59 Temple Place, Suite 330, Boston, MA 02111-1307, USA" #: ../src/dialog.c:837 msgid "Translation is coordinated on http://launchpad.net/viking" msgstr "" "A fordítás koordinálása a http://launchpad.net/viking weboldalon történik" #: ../src/dialog.c:845 msgid "Download along track" msgstr "Letöltés a nyomvonal mentén" #: ../src/dialog.c:851 msgid "Map type:" msgstr "Térképtípus:" #: ../src/dialog.c:856 msgid "Zoom level:" msgstr "Nagyítási szint:" #: ../src/dialog.c:896 #, c-format msgid "The map data is licensed: %s." msgstr "A térképadatokra a következő licenc vonatkozik: %s." #: ../src/dialog.c:899 #, c-format msgid "" "The data provided by '%s' are licensed under the following license: " "%s.\n" "Please, read the license before continuing." msgstr "" "Az adatokat a(z) „%s” szolgáltatja, és a következő licenc vonatkozik " "azokra: %s.\n" "Kérjük, olvassa el a licencet, mielőtt továbblép." #: ../src/dialog.c:904 msgid "Open license" msgstr "Szabad licenc" #: ../src/expedia.c:53 msgid "Expedia Street Maps" msgstr "Expedia utcatérképek" #: ../src/expedia.c:81 msgid "Invalid expedia altitude" msgstr "Érvénytelen expedia magasság" #: ../src/expedia.c:112 #, c-format msgid "" "Couldn't open EXPEDIA image file (right after successful download! Please " "report and delete image file!): %s" msgstr "" "Az EXPEDIA képfájl nem nyitható meg (közvetlenül sikeres letöltés után! " "Jelentse és törölje a képfájlt!): %s" #: ../src/expedia.c:125 #, c-format msgid "" "Couldn't save EXPEDIA image file (right after successful download! Please " "report and delete image file!): %s" msgstr "" "Az EXPEDIA képfájl nem menthető (közvetlenül sikeres letöltés után! Jelentse " "és törölje a képfájlt!): %s" #. * #. * See http://www.geonames.org/export/wikipedia-webservice.html#wikipediaBoundingBox #. #. Translators may wish to change this setting as appropriate to get Wikipedia articles in that language #: ../src/geonamessearch.c:46 msgid "en" msgstr "" #: ../src/geonamessearch.c:121 msgid "Search" msgstr "Keresés" #: ../src/geonamessearch.c:123 msgid "No entries found!" msgstr "Nem található bejegyzés!" #. NB could allow columns to be shifted around by doing this after each new #. gtk_tree_view_column_set_reorderable ( column, TRUE ); #. However I don't think is that useful, so I haven't put it in #: ../src/geonamessearch.c:177 ../src/datasource_osm_my_traces.c:425 msgid "Name" msgstr "" #: ../src/geonamessearch.c:182 msgid "Feature" msgstr "" #: ../src/geonamessearch.c:187 ../src/datasource_osm_my_traces.c:440 msgid "Lat/Lon" msgstr "" #: ../src/geonamessearch.c:269 ../src/googlesearch.c:100 msgid "couldn't map temp file" msgstr "az átmeneti fájl nem található" #: ../src/globals.c:44 msgid "Degree format:" msgstr "Fok formátuma:" #: ../src/globals.c:48 msgid "Distance units:" msgstr "Távolság egysége:" #: ../src/globals.c:52 msgid "Speed units:" msgstr "Sebesség egysége:" #: ../src/globals.c:56 msgid "Height units:" msgstr "Magasság egysége:" #: ../src/globals.c:60 msgid "Use large waypoint icons:" msgstr "Nagy útpontikonok használata:" #: ../src/globals.c:64 msgid "Default latitude:" msgstr "Alapértelmezett szélesség:" #: ../src/globals.c:67 msgid "Default longitude:" msgstr "Alapértelmezett hosszúság:" #: ../src/globals.c:73 msgid "Alphabetical" msgstr "" #: ../src/globals.c:73 ../src/datasource_osm_my_traces.c:435 msgid "Time" msgstr "" #: ../src/globals.c:76 msgid "KML File Export Units:" msgstr "" #: ../src/globals.c:77 msgid "GPX Track Order:" msgstr "" #: ../src/globals.c:82 msgid "Image Viewer:" msgstr "" #: ../src/globals.c:87 msgid "External GPX Program 1:" msgstr "" #: ../src/globals.c:88 msgid "External GPX Program 2:" msgstr "" #. Defaults for the options are setup here #: ../src/globals.c:96 msgid "General" msgstr "" #. New Tab #: ../src/globals.c:121 msgid "Export/External" msgstr "" #. Webtools #: ../src/google.c:36 msgid "Google" msgstr "Google" #: ../src/datasource_file.c:59 msgid "Import file with GPSBabel" msgstr "" #: ../src/datasource_file.c:60 msgid "Imported file" msgstr "" #. The file selector #: ../src/datasource_file.c:133 msgid "File:" msgstr "" #: ../src/datasource_file.c:134 msgid "File to import" msgstr "" #: ../src/datasource_file.c:141 msgid "All files" msgstr "" #. The file format selector #: ../src/datasource_file.c:148 msgid "File type:" msgstr "" #: ../src/datasource_file.c:193 #, c-format msgid "using babel args '%s' and file '%s'" msgstr "" #: ../src/datasource_gc.c:66 msgid "Download Geocaches" msgstr "Geoládák letöltése" #: ../src/datasource_gc.c:67 msgid "Geocaching.com Caches" msgstr "Geocaching.com ládák" #: ../src/datasource_gc.c:84 msgid "geocaching.com username:" msgstr "geocaching.com felhasználónév:" #: ../src/datasource_gc.c:85 msgid "geocaching.com password:" msgstr "geocaching.com jelszó:" #: ../src/datasource_gc.c:126 #, c-format msgid "" "Can't find %s or %s in path! Check that you have installed it correctly." msgstr "" #: ../src/datasource_gc.c:188 msgid "Number geocaches:" msgstr "Geoládák száma:" #: ../src/datasource_gc.c:190 msgid "Centered around:" msgstr "Középre igazítva:" #: ../src/datasource_gc.c:226 msgid "Broken input - using some defaults" msgstr "" #: ../src/datasource_geotag.c:51 msgid "Create Waypoints from Geotagged Images" msgstr "" #: ../src/datasource_geotag.c:52 msgid "Geotagged Images" msgstr "" #: ../src/datasource_geotag.c:102 ../src/vikwindow.c:2314 #: ../src/vikwindow.c:2382 ../src/vikwindow.c:2824 msgid "All" msgstr "" #: ../src/datasource_geotag.c:107 ../src/vikwindow.c:2829 msgid "JPG" msgstr "" #: ../src/datasource_geotag.c:165 #, c-format msgid "Unable to create waypoint from %s" msgstr "" #: ../src/datasource_google.c:49 ../src/datasource_google.c:50 msgid "Google Directions" msgstr "Google útvonalkereső" #: ../src/datasource_google.c:77 msgid "From:" msgstr "Innen:" #: ../src/datasource_google.c:79 msgid "To:" msgstr "Ide:" #: ../src/datasource_gps.c:57 msgid "Acquire from GPS" msgstr "Beszerzés GPS-ről" #: ../src/datasource_gps.c:58 msgid "Acquired from GPS" msgstr "GPS-ről beszerezve" #: ../src/datasource_gps.c:221 #, c-format msgid "using cmdline '%s' and file '%s'\n" msgstr "'%s' parancssor és '%s' fájl használata\n" #: ../src/datasource_gps.c:297 ../src/vikgpslayer.c:884 #, c-format msgid "Downloading %d waypoint..." msgid_plural "Downloading %d waypoints..." msgstr[0] "%d útpont letöltése..." msgstr[1] "%d útpont letöltése..." #: ../src/datasource_gps.c:298 ../src/vikgpslayer.c:885 #, c-format msgid "Downloading %d trackpoint..." msgid_plural "Downloading %d trackpoints..." msgstr[0] "%d nyompont letöltése..." msgstr[1] "%d nyompont letöltése..." #: ../src/datasource_gps.c:303 ../src/vikgpslayer.c:890 #, c-format msgid "Downloading %d routepoint..." msgid_plural "Downloading %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/datasource_gps.c:325 ../src/datasource_gps.c:326 #: ../src/datasource_gps.c:327 #, c-format msgid "Downloaded %d out of %d %s..." msgstr "A(z) %d-ból %d %s letöltve..." #: ../src/datasource_gps.c:331 ../src/datasource_gps.c:332 #: ../src/datasource_gps.c:333 #, c-format msgid "Downloaded %d %s." msgstr "%d %s letöltve." #: ../src/datasource_gps.c:347 ../src/vikgpslayer.c:968 #, c-format msgid "GPS Device: %s" msgstr "GPS eszköz: %s" #: ../src/datasource_gps.c:370 ../src/vikgpslayer.c:1042 #: ../src/vikgpslayer.c:1110 msgid "Status: Working..." msgstr "" #: ../src/datasource_gps.c:469 ../src/vikgpslayer.c:150 msgid "GPS Protocol:" msgstr "GPS protokoll:" #. List now assigned at runtime #: ../src/datasource_gps.c:488 ../src/vikgpslayer.c:151 msgid "Serial Port:" msgstr "Soros port:" #: ../src/datasource_gps.c:509 msgid "" "Turn Off After Transfer\n" "(Garmin/NAViLink Only)" msgstr "" "Kikapcsolás átvitel után\n" "(csak Garmin/NAViLink esetén)" #: ../src/datasource_gps.c:512 msgid "Tracks:" msgstr "" #: ../src/datasource_gps.c:516 msgid "Routes:" msgstr "" #: ../src/datasource_gps.c:520 msgid "Waypoints:" msgstr "" #: ../src/datasource_gps.c:594 ../src/vikgpslayer.c:1305 msgid "GPS device: N/A" msgstr "GPS eszköz: N/A" #: ../src/datasource_osm.c:52 ../src/datasource_osm.c:53 msgid "OSM traces" msgstr "" #: ../src/datasource_osm.c:80 msgid "Page number:" msgstr "" #: ../src/datasource_osm_my_traces.c:63 ../src/datasource_osm_my_traces.c:64 msgid "OSM My Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:108 msgid "Username:" msgstr "" #: ../src/datasource_osm_my_traces.c:113 msgid "The email or username used to login to OSM" msgstr "" #: ../src/datasource_osm_my_traces.c:115 ../src/osm-traces.c:413 msgid "Password:" msgstr "Jelszó:" #: ../src/datasource_osm_my_traces.c:120 msgid "The password used to login to OSM" msgstr "" #: ../src/datasource_osm_my_traces.c:430 msgid "Description" msgstr "" #: ../src/datasource_osm_my_traces.c:445 msgid "Privacy" msgstr "" #: ../src/datasource_osm_my_traces.c:452 msgid "Within Current View" msgstr "" #: ../src/datasource_osm_my_traces.c:518 msgid "GPS Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:520 msgid "None found!" msgstr "" #: ../src/datasource_osm_my_traces.c:629 msgid "My OSM Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:645 #, c-format msgid "Unable to get trace: %s" msgstr "" #: ../src/datasource_wikipedia.c:32 msgid "Create Waypoints from Wikipedia Articles" msgstr "" #: ../src/datasource_wikipedia.c:33 msgid "Wikipedia Waypoints" msgstr "" #: ../src/dem.c:65 ../src/dem.c:79 msgid "Invalid DEM" msgstr "DEM érvénytelen" #: ../src/dem.c:121 msgid "Invalid DEM header" msgstr "Érvénytelen DEM fejléc" #: ../src/dem.c:190 ../src/dem.c:203 msgid "Incorrect DEM Class B record: expected 1" msgstr "Hibás DEM Class B rekord: a várt érték: 1" #: ../src/dem.c:360 #, c-format msgid "Couldn't map file %s: %s" msgstr "A(z) %s fájl nem található: %s" #: ../src/download.c:112 msgid "Tile age (s):" msgstr "Csempe kora (mp):" #: ../src/download.c:233 #, c-format msgid "Download error: %s" msgstr "Letöltési hiba: %s" #: ../src/download.c:313 msgid "couldn't open temp file" msgstr "az átmeneti fájl nem nyitható meg" #: ../src/file.c:456 ../src/file.c:461 #, c-format msgid "Draw mode '%s' no more supported" msgstr "A(z) '%s' rajzolási mód nem támogatott többé" #: ../src/geotag_exif.c:433 msgid "Not enough memory." msgstr "" #: ../src/geotag_exif.c:451 msgid "Setting a value for this tag is unsupported!" msgstr "" #: ../src/geotag_exif.c:470 #, c-format msgid "Too few components specified (need %d, found %d)\n" msgstr "" #: ../src/geotag_exif.c:474 msgid "Numeric value expected\n" msgstr "" #: ../src/geotag_exif.c:482 msgid "This shouldn't happen!" msgstr "" #: ../src/geotag_exif.c:552 msgid "Not yet implemented!" msgstr "" #: ../src/geotag_exif.c:565 msgid "Warning; Too many components specified!" msgstr "" #: ../src/osm-traces.c:73 msgid "Identifiable (public w/ timestamps)" msgstr "Azonosítható (nyilvános időbélyegek nélkül)" #: ../src/osm-traces.c:74 msgid "Trackable (private w/ timestamps)" msgstr "Nyomon követhető (privát időbélyegek nélkül)" #: ../src/osm-traces.c:75 msgid "Public" msgstr "Nyilvános" #: ../src/osm-traces.c:76 msgid "Private" msgstr "Privát" #: ../src/osm-traces.c:93 msgid "OSM username:" msgstr "OSM felhasználónév:" #: ../src/osm-traces.c:94 msgid "OSM password:" msgstr "OSM jelszó:" #. Preferences #: ../src/osm-traces.c:151 msgid "OpenStreetMap Traces" msgstr "" #: ../src/osm-traces.c:234 #, c-format msgid "failed to upload data: HTTP response is %ld" msgstr "adatok feltöltése sikertelen: a HTTP válasz: %ld" #: ../src/osm-traces.c:239 #, c-format msgid "curl_easy_getinfo failed: %d" msgstr "curl_easy_getinfo sikertelen: %d" #: ../src/osm-traces.c:244 #, c-format msgid "curl request failed: %s" msgstr "curl kérés sikertelen: %s" #: ../src/osm-traces.c:275 #, c-format msgid "failed to open temporary file: %s" msgstr "az átmeneti fájl nem nyitható meg: %s" #. Success #: ../src/osm-traces.c:328 msgid "Uploaded to OSM" msgstr "" #: ../src/osm-traces.c:332 msgid "FAILED TO UPLOAD DATA TO OSM - CURL PROBLEM" msgstr "" #: ../src/osm-traces.c:335 msgid "FAILED TO UPLOAD DATA TO OSM" msgstr "" #: ../src/osm-traces.c:335 msgid "HTTP response code" msgstr "" #: ../src/osm-traces.c:348 #, c-format msgid "failed to unlink temporary file: %s" msgstr "az átmeneti fájl nem törölhető: %s" #: ../src/osm-traces.c:387 msgid "OSM upload" msgstr "OSM feltöltés" #: ../src/osm-traces.c:405 msgid "Email:" msgstr "E-mail:" #: ../src/osm-traces.c:410 msgid "" "The email used as login\n" "Enter the email you use to login into www.openstreetmap.org." msgstr "" "A bejelentkezéshez használt e-mail\n" "Adja meg az e-mail címét, amelyet a bejelentkezéshez használ a " "www.openstreetmap.org webhelyen." #: ../src/osm-traces.c:418 msgid "" "The password used to login\n" "Enter the password you use to login into " "www.openstreetmap.org." msgstr "" "A bejelentkezéshez használt jelszó\n" "Adja meg a jelszavát, amelyet a bejelentkezéshez használ a " "www.openstreetmap.org webhelyen." #: ../src/osm-traces.c:423 msgid "File's name:" msgstr "Fájl neve:" #: ../src/osm-traces.c:433 msgid "" "The name of the file on OSM\n" "This is the name of the file created on the server.This is not the " "name of the local file." msgstr "" "A fájl neve az OSM-en\n" "A szerveren létrehozandó fájl neve. Ez nem a helyi fájl neve." #: ../src/osm-traces.c:442 msgid "The description of the trace" msgstr "A nyomvonal leírása" #: ../src/osm-traces.c:444 msgid "Tags:" msgstr "Címkék:" #: ../src/osm-traces.c:449 msgid "The tags associated to the trace" msgstr "A nyomvonalhoz társított címkék" #: ../src/osm-traces.c:482 #, c-format msgid "Uploading %s to OSM" msgstr "%s feltöltése az OSM-re" #: ../src/mapcache.c:61 msgid "Map cache memory size (MB):" msgstr "" #: ../src/print.c:53 msgid "None" msgstr "Egyik sem" #: ../src/print.c:54 msgid "Horizontally" msgstr "Vízszintesen" #: ../src/print.c:55 msgid "Vertically" msgstr "Függőlegesen" #: ../src/print.c:56 msgid "Both" msgstr "Mindkettő" #: ../src/print.c:120 msgid "Image Settings" msgstr "Képbeállítások" #: ../src/print.c:546 msgid "done" msgstr "kész" #. Page Size #: ../src/print.c:575 msgid "_Adjust Page Size and Orientation" msgstr "Lapmé_ret és tájolás beállítása" #: ../src/print.c:591 msgid "C_enter:" msgstr "_Középre:" #. ignore page margins #: ../src/print.c:609 msgid "Ignore Page _Margins" msgstr "Lapmargók f_igyelmen kívül hagyása" #: ../src/print.c:628 msgid "Image S_ize:" msgstr "Kép_méret:" #: ../src/util.c:81 msgid "Could not launch web browser." msgstr "A webböngésző nem indítható." #: ../src/util.c:92 msgid "Could not create new email." msgstr "Nem hozható létre új e-mail." #: ../src/vikcoordlayer.c:46 msgid "Color:" msgstr "Szín:" #: ../src/vikcoordlayer.c:47 msgid "Minutes Width:" msgstr "Perc szélessége:" #: ../src/vikcoordlayer.c:48 msgid "Line Thickness:" msgstr "Vonal vastagsága:" #: ../src/vikcoordlayer.c:56 msgid "Coordinate" msgstr "" #: ../src/datasource_bfilter.c:46 msgid "Max number of points:" msgstr "Pontok maximális száma:" #: ../src/datasource_bfilter.c:60 msgid "Simplify All Tracks..." msgstr "" #: ../src/datasource_bfilter.c:61 msgid "Simplified Tracks" msgstr "Egyszerűsített nyomvonalak" #: ../src/datasource_bfilter.c:96 ../src/datasource_bfilter.c:97 msgid "Remove Duplicate Waypoints" msgstr "Kettőzött útpontok eltávolítása" #: ../src/datasource_bfilter.c:129 msgid "Waypoints Inside This" msgstr "Útpontok ezen belül" #: ../src/datasource_bfilter.c:130 msgid "Polygonized Layer" msgstr "Poligonizált réteg" #: ../src/datasource_bfilter.c:165 msgid "Waypoints Outside This" msgstr "Útpontok ezen kívül" #: ../src/datasource_bfilter.c:166 msgid "Polygonzied Layer" msgstr "Poligonizált réteg" #: ../src/main.c:89 #, c-format msgid "Ignoring Xlib error: error code %d request code %d\n" msgstr "" #: ../src/main.c:102 msgid "Enable debug output" msgstr "Hibakeresési kimenet engedélyezése" #: ../src/main.c:103 msgid "Enable verbose output" msgstr "Részletes üzenetek bekapcsolása" #: ../src/main.c:104 msgid "Show version" msgstr "Verziószám megjelenítése" #: ../src/osm.c:106 msgid "On Disk OSM Tile Format" msgstr "" #: ../src/osm.c:121 msgid "OSM (view)" msgstr "OSM (megtekintés)" #: ../src/osm.c:125 msgid "OSM (edit)" msgstr "OSM (szerkesztés)" #: ../src/osm.c:129 msgid "OSM (render)" msgstr "OSM (renderelés)" #. Example: http://127.0.0.1:8111/load_and_zoom?left=8.19&right=8.20&top=48.605&bottom=48.590&select=node413602999 #. JOSM or merkaartor must already be running with remote interface enabled #: ../src/osm.c:136 msgid "Local port 8111 (eg JOSM)" msgstr "" #: ../src/preferences.c:285 msgid "Preferences" msgstr "Beállítások" #: ../src/uibuilder.c:147 msgid "Take care that this password will be stored clearly in a plain file." msgstr "Ügyeljen arra, hogy ez a jelszó egy sima fájlban kerül eltárolásra." #: ../src/vikaggregatelayer.c:37 msgid "Aggregate" msgstr "" #: ../src/vikdemlayer.c:101 msgid "Absolute height" msgstr "Abszolút magasság" #: ../src/vikdemlayer.c:102 msgid "Height gradient" msgstr "Magassági grádiens" #: ../src/vikdemlayer.c:118 msgid "DEM Files:" msgstr "DEM fájlok:" #: ../src/vikdemlayer.c:119 msgid "Download Source:" msgstr "Forrás letöltése:" #: ../src/vikdemlayer.c:120 msgid "Min Elev Color:" msgstr "Min. magasság színe:" #: ../src/vikdemlayer.c:121 msgid "Type:" msgstr "Típus:" #: ../src/vikdemlayer.c:122 msgid "Min Elev:" msgstr "Min. magasság:" #: ../src/vikdemlayer.c:123 msgid "Max Elev:" msgstr "Max. magasság:" #: ../src/vikdemlayer.c:134 msgid "_DEM Download" msgstr "" #: ../src/vikdemlayer.c:134 msgid "DEM Download" msgstr "" #: ../src/vikdemlayer.c:188 msgid "DEM" msgstr "" #: ../src/vikdemlayer.c:284 #, c-format msgid "Number of files: %d" msgstr "Fájlok száma: %d" #: ../src/vikdemlayer.c:385 msgid "DEM Loading" msgstr "DEM betöltése" #: ../src/vikdemlayer.c:889 #, c-format msgid "No SRTM data available for %f, %f" msgstr "Nem érhető el SRTM adat a következőhöz: %f, %f" #: ../src/vikdemlayer.c:1149 #, c-format msgid "Downloading DEM %s" msgstr "%s DEM letöltése" #: ../src/vikfileentry.c:68 msgid "Browse..." msgstr "Tallózás…" #: ../src/vikfileentry.c:96 msgid "Choose file" msgstr "Válasszon fájlt" #: ../src/vikfilelist.c:48 msgid "Choose file(s)" msgstr "Válasszon fájl(oka)t" #: ../src/vikfilelist.c:172 msgid "Add..." msgstr "Hozzáadás..." #: ../src/vikfilelist.c:173 msgid "Delete" msgstr "Törlés" #: ../src/vikgeoreflayer.c:70 msgid "_Georef Move Map" msgstr "" #: ../src/vikgeoreflayer.c:70 msgid "Georef Move Map" msgstr "Georef térkép mozgatása" #: ../src/vikgeoreflayer.c:77 msgid "Georef Z_oom Tool" msgstr "" #: ../src/vikgeoreflayer.c:77 msgid "Georef Zoom Tool" msgstr "Georef nagyítóeszköz" #: ../src/vikgeoreflayer.c:87 msgid "GeoRef Map" msgstr "" #: ../src/vikgeoreflayer.c:335 ../src/vikmapslayer.c:685 #, c-format msgid "Couldn't open image file: %s" msgstr "A képfájl nem nyitható meg: %s" #: ../src/vikgeoreflayer.c:365 msgid "Unexpected end of file reading World file." msgstr "Váratlan fájlvége a világfájl olvasásakor." #: ../src/vikgeoreflayer.c:381 ../src/vikgeoreflayer.c:426 msgid "Choose World file" msgstr "Világfájl kiválasztása" #: ../src/vikgeoreflayer.c:394 msgid "The World file you requested could not be opened for reading." msgstr "A kért világfájl nem nyitható meg olvasásra." #: ../src/vikgeoreflayer.c:439 msgid "The file you requested could not be opened for writing." msgstr "A kért fájl nem nyitható meg írásra." #: ../src/vikgeoreflayer.c:456 ../src/viklayer.c:480 msgid "Layer Properties" msgstr "Réteg tulajdonságai" #: ../src/vikgeoreflayer.c:478 msgid "World File Parameters:" msgstr "Világfájl paraméterei:" #: ../src/vikgeoreflayer.c:479 msgid "Load From File..." msgstr "Betöltés fájlból..." #: ../src/vikgeoreflayer.c:484 msgid "Corner pixel easting:" msgstr "Sarokképpont keleti:" #: ../src/vikgeoreflayer.c:486 msgid "the UTM \"easting\" value of the upper-right corner pixel of the map" msgstr "a térkép jobb-felső sarkában lévő képpontjának UTM \"keleti\" értéke" #: ../src/vikgeoreflayer.c:488 msgid "Corner pixel northing:" msgstr "Sarokképpont északi:" #: ../src/vikgeoreflayer.c:490 msgid "the UTM \"northing\" value of the upper-right corner pixel of the map" msgstr "a térkép jobb-felső sarkában lévő képpontjának UTM \"északi\" értéke" #: ../src/vikgeoreflayer.c:492 msgid "X (easting) scale (mpp): " msgstr "X (keleti) méretarány (mpp): " #: ../src/vikgeoreflayer.c:493 msgid "Y (northing) scale (mpp): " msgstr "Y (északi) méretarány (mpp): " #: ../src/vikgeoreflayer.c:496 msgid "the scale of the map in the X direction (meters per pixel)" msgstr "a térkép méretaránya X irányban (méter/képpontban)" #: ../src/vikgeoreflayer.c:498 msgid "the scale of the map in the Y direction (meters per pixel)" msgstr "a térkép méretaránya Y irányban (méter/képpontban)" #: ../src/vikgeoreflayer.c:500 msgid "Map Image:" msgstr "Térkép:" #. Now with icons #: ../src/vikgeoreflayer.c:608 msgid "_Zoom to Fit Map" msgstr "_Nézet illesztése a térképhez" #: ../src/vikgeoreflayer.c:614 msgid "_Goto Map Center" msgstr "_Ugrás a térkép közepére" #: ../src/vikgeoreflayer.c:620 msgid "_Export to World File" msgstr "_Exportálás a világfájlba" #: ../src/vikgoto.c:75 msgid "No goto tool available." msgstr "Nem érhető el ugró eszköz." #: ../src/vikgoto.c:88 ../src/vikgoto.c:107 msgid "goto" msgstr "ugrás" #: ../src/vikgoto.c:90 msgid "I don't know that place. Do you want another goto?" msgstr "Nem ismerem ezt a helyet. Szeretne másik ugrást?" #: ../src/vikgoto.c:109 msgid "goto provider:" msgstr "ugrás nyújtója:" #: ../src/vikgoto.c:124 msgid "Enter address or place name:" msgstr "Adja meg a cím vagy hely nevét:" #: ../src/vikgpslayer.c:127 msgid "Data Mode" msgstr "" #: ../src/vikgpslayer.c:129 msgid "Realtime Tracking Mode" msgstr "" #: ../src/vikgpslayer.c:137 msgid "Keep vehicle at center" msgstr "" #: ../src/vikgpslayer.c:138 msgid "Keep vehicle on screen" msgstr "" #: ../src/vikgpslayer.c:139 msgid "Disable" msgstr "" #: ../src/vikgpslayer.c:152 msgid "Download Tracks:" msgstr "" #: ../src/vikgpslayer.c:153 msgid "Upload Tracks:" msgstr "" #: ../src/vikgpslayer.c:154 msgid "Download Routes:" msgstr "" #: ../src/vikgpslayer.c:155 msgid "Upload Routes:" msgstr "" #: ../src/vikgpslayer.c:156 msgid "Download Waypoints:" msgstr "" #: ../src/vikgpslayer.c:157 msgid "Upload Waypoints:" msgstr "" #: ../src/vikgpslayer.c:159 msgid "Recording tracks" msgstr "Nyomvonalak rögzítése" #: ../src/vikgpslayer.c:160 msgid "Jump to current position on start" msgstr "Ugrás a jelenlegi pozícióra indításkor" #: ../src/vikgpslayer.c:161 msgid "Moving Map Method:" msgstr "Térképmozgatási módszer" #: ../src/vikgpslayer.c:162 msgid "Gpsd Host:" msgstr "Gpsd gazda:" #: ../src/vikgpslayer.c:163 msgid "Gpsd Port:" msgstr "Gpsd port:" #: ../src/vikgpslayer.c:164 msgid "Gpsd Retry Interval (seconds):" msgstr "Gpsd újrapróbálkozás intervalluma (másodperc):" #: ../src/vikgpslayer.c:179 msgid "GPS" msgstr "" #: ../src/vikgpslayer.c:242 ../src/vikgpslayer.c:1258 msgid "GPS Download" msgstr "GPS letöltés" #: ../src/vikgpslayer.c:242 ../src/vikgpslayer.c:1258 #: ../src/viktrwlayer.c:3094 msgid "GPS Upload" msgstr "GPS feltöltés" #: ../src/vikgpslayer.c:244 msgid "GPS Realtime Tracking" msgstr "GPS valós idejű nyomkövetés" #: ../src/vikgpslayer.c:451 msgid "Unknown GPS Protocol" msgstr "Ismeretlen GPS protokoll" #: ../src/vikgpslayer.c:469 msgid "Unknown serial port device" msgstr "Ismeretlen soros port eszköz" #: ../src/vikgpslayer.c:572 #, c-format msgid "%s: unknown parameter" msgstr "%s: ismeretlen paraméter" #. Now with icons #: ../src/vikgpslayer.c:693 msgid "_Upload to GPS" msgstr "_Feltöltés GPS-re" #: ../src/vikgpslayer.c:699 msgid "Download from _GPS" msgstr "Letöltés _GPS-ről" #: ../src/vikgpslayer.c:720 msgid "Empty _Realtime" msgstr "_Valós idő ürítése" #: ../src/vikgpslayer.c:727 msgid "E_mpty Upload" msgstr "Feltöltés ürí_tése" #: ../src/vikgpslayer.c:733 msgid "_Empty Download" msgstr "Letöltés ü_rítése" #: ../src/vikgpslayer.c:739 msgid "Empty _All" msgstr "Ö_sszes ürítése" #. #. NB It's not fatal if this gives 2 for example! Hence removal of the g_assert #. This happens when copied GPS layer is deleted (not sure why the number_handlers would be 2) #. I don't think there's any side effects and certainly better than the program just aborting #. #: ../src/vikgpslayer.c:756 #, c-format msgid "Unexpected number of disconnected handlers: %d" msgstr "Váratlan számú szétkapcsolódott kezelő: %d" #: ../src/vikgpslayer.c:898 #, c-format msgid "Uploading %d waypoint..." msgid_plural "Uploading %d waypoints..." msgstr[0] "%d útpont feltöltése..." msgstr[1] "%d útpont feltöltése..." #: ../src/vikgpslayer.c:899 #, c-format msgid "Uploading %d trackpoint..." msgid_plural "Uploading %d trackpoints..." msgstr[0] "%d nyompont feltöltése..." msgstr[1] "%d nyompont feltöltése..." #: ../src/vikgpslayer.c:900 #, c-format msgid "Uploading %d routepoint..." msgid_plural "Uploading %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:925 #, c-format msgid "Downloaded %d out of %d waypoint..." msgid_plural "Downloaded %d out of %d waypoints..." msgstr[0] "%d útpont letöltve a(z) %d-ból..." msgstr[1] "%d útpont letöltve a(z) %d-ból..." #: ../src/vikgpslayer.c:926 #, c-format msgid "Downloaded %d out of %d trackpoint..." msgid_plural "Downloaded %d out of %d trackpoints..." msgstr[0] "%d nyompont letöltve a(z) %d-ból..." msgstr[1] "%d nyompont letöltve a(z) %d-ból..." #: ../src/vikgpslayer.c:927 #, c-format msgid "Downloaded %d out of %d routepoint..." msgid_plural "Downloaded %d out of %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:932 #, c-format msgid "Uploaded %d out of %d waypoint..." msgid_plural "Uploaded %d out of %d waypoints..." msgstr[0] "%d útpont feltöltve a(z) %d-ból..." msgstr[1] "%d útpont feltöltve a(z) %d-ból..." #: ../src/vikgpslayer.c:933 #, c-format msgid "Uploaded %d out of %d trackpoint..." msgid_plural "Uploaded %d out of %d trackpoints..." msgstr[0] "%d nyompont feltöltve a(z) %d-ból..." msgstr[1] "%d nyompont feltöltve a(z) %d-ból..." #: ../src/vikgpslayer.c:934 #, c-format msgid "Uploaded %d out of %d routepoint..." msgid_plural "Uploaded %d out of %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:942 #, c-format msgid "Downloaded %d waypoint" msgid_plural "Downloaded %d waypoints" msgstr[0] "%d útpont letöltve" msgstr[1] "%d útpont letöltve" #: ../src/vikgpslayer.c:943 #, c-format msgid "Downloaded %d trackpoint" msgid_plural "Downloaded %d trackpoints" msgstr[0] "%d nyompont letöltve" msgstr[1] "%d nyompont letöltve" #: ../src/vikgpslayer.c:944 #, c-format msgid "Downloaded %d routepoint" msgid_plural "Downloaded %d routepoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:949 #, c-format msgid "Uploaded %d waypoint" msgid_plural "Uploaded %d waypoints" msgstr[0] "%d útpont feltöltve" msgstr[1] "%d útpont feltöltve" #: ../src/vikgpslayer.c:950 #, c-format msgid "Uploaded %d trackpoint" msgid_plural "Uploaded %d trackpoints" msgstr[0] "%d nyompont feltöltve" msgstr[1] "%d nyompont feltöltve" #: ../src/vikgpslayer.c:951 #, c-format msgid "Uploaded %d routepoint" msgid_plural "Uploaded %d routepoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:1180 msgid "Error: couldn't find gpsbabel." msgstr "Hiba: a gpsbabel nem található." #: ../src/vikgpslayer.c:1269 msgid "Warning - GPS Upload items may overwrite each other" msgstr "" #: ../src/vikgpslayer.c:1301 msgid "Status: detecting gpsbabel" msgstr "Állapot: gpsbabel detektálása" #: ../src/vikgpslayer.c:1332 msgid "No GPS items selected for transfer." msgstr "" #: ../src/vikgpslayer.c:1347 msgid "Could not turn off device." msgstr "" #: ../src/vikgpslayer.c:1385 msgid "Are you sure you want to delete GPS Upload data?" msgstr "" #: ../src/vikgpslayer.c:1398 msgid "Are you sure you want to delete GPS Download data?" msgstr "" #: ../src/vikgpslayer.c:1412 msgid "Are you sure you want to delete GPS Realtime data?" msgstr "" #: ../src/vikgpslayer.c:1425 msgid "Are you sure you want to delete All GPS data?" msgstr "" #: ../src/viklayerspanel.c:55 msgid "/C_ut" msgstr "/_Kivágás" #: ../src/viklayerspanel.c:56 msgid "/_Copy" msgstr "/_Másolás" #: ../src/viklayerspanel.c:57 msgid "/_Paste" msgstr "/_Beillesztés" #: ../src/viklayerspanel.c:58 msgid "/_Delete" msgstr "/_Törlés" #: ../src/viklayerspanel.c:59 msgid "/New Layer" msgstr "/Új réteg" #: ../src/viklayerspanel.c:127 msgid "Top Layer" msgstr "Legfelső réteg" #: ../src/viklayerspanel.c:143 msgid "Add new layer" msgstr "Új réteg hozzáadása" #: ../src/viklayerspanel.c:150 msgid "Remove selected layer" msgstr "Kiválasztott réteg eltávolítása" #: ../src/viklayerspanel.c:157 msgid "Move selected layer up" msgstr "Kiválasztott réteg feljebb mozgatása" #: ../src/viklayerspanel.c:164 msgid "Move selected layer down" msgstr "Kiválasztott réteg lejjebb mozgatása" #: ../src/viklayerspanel.c:171 msgid "Cut selected layer" msgstr "Kiválasztott réteg kivágása" #: ../src/viklayerspanel.c:178 msgid "Copy selected layer" msgstr "Kiválasztott réteg másolása" #: ../src/viklayerspanel.c:185 msgid "Paste layer below selected layer" msgstr "Réteg beillesztése a kiválasztott réteg alá" #. TODO: FIXME: if name has a '/' in it it will get all messed up. why not have an itemfactory field with #. name, icon, shortcut, etc.? #: ../src/viklayerspanel.c:204 ../src/vikwindow.c:3292 #, c-format msgid "New _%s Layer" msgstr "" #: ../src/viklayerspanel.c:511 msgid "Aggregate Layers have no settable properties." msgstr "A csoportosító rétegeknek nincs beállítható tulajdonsága." #: ../src/viklayerspanel.c:555 msgid "You cannot cut the Top Layer." msgstr "A legfelső réteg nem vágható ki." #: ../src/viklayerspanel.c:600 #, c-format msgid "Are you sure you want to delete %s?" msgstr "" #: ../src/viklayerspanel.c:617 msgid "You cannot delete the Top Layer." msgstr "A legfelső réteg nem törölhető." #: ../src/viklayerspanel.c:701 msgid "Are you sure you wish to delete all layers?" msgstr "Biztosan törölni szeretné az összes réteget?" #. ******* MAPZOOMS ******** #: ../src/vikmapslayer.c:91 msgid "Use Viking Zoom Level" msgstr "Viking nagyítási szint használata" #: ../src/vikmapslayer.c:124 msgid "Map Type:" msgstr "Térképtípus:" #: ../src/vikmapslayer.c:125 msgid "Maps Directory:" msgstr "Térkép könyvtára:" #: ../src/vikmapslayer.c:126 msgid "Alpha:" msgstr "Alfa:" #: ../src/vikmapslayer.c:127 msgid "Control the Alpha value for transparency effects" msgstr "" #: ../src/vikmapslayer.c:128 msgid "Autodownload maps:" msgstr "Térkép automatikus letöltése:" #: ../src/vikmapslayer.c:129 msgid "Autodownload Only Gets Missing Maps:" msgstr "" #: ../src/vikmapslayer.c:130 msgid "" "Using this option avoids attempting to update already acquired tiles. This " "can be useful if you want to restrict the network usage, without having to " "resort to manual control. Only applies when 'Autodownload Maps' is on." msgstr "" #: ../src/vikmapslayer.c:131 msgid "Zoom Level:" msgstr "Nagyítási szint:" #: ../src/vikmapslayer.c:132 msgid "" "Determines the method of displaying map tiles for the current zoom level. " "'Viking Zoom Level' uses the best matching level, otherwise setting a fixed " "value will always use map tiles of the specified value regardless of the " "actual zoom level." msgstr "" #: ../src/vikmapslayer.c:146 msgid "_Maps Download" msgstr "" #: ../src/vikmapslayer.c:146 msgid "Maps Download" msgstr "Térkép letöltése" #: ../src/vikmapslayer.c:161 msgid "Map" msgstr "Térkép" #: ../src/vikmapslayer.c:249 msgid "Default maplayer directory:" msgstr "Alapértelmezett térképréteg könyvtára:" #: ../src/vikmapslayer.c:249 msgid "Choose a directory to store cached Map tiles for this layer" msgstr "" #: ../src/vikmapslayer.c:505 msgid "Unknown map type" msgstr "Ismeretlen térképtípus" #: ../src/vikmapslayer.c:516 msgid "Unknown Map Zoom" msgstr "Ismeretlen térképnagyítás" #: ../src/vikmapslayer.c:589 #, c-format msgid "" "New map cannot be displayed in the current drawmode.\n" "Select \"%s\" from View menu to view it." msgstr "" "Az új térkép nem jeleníthető meg a jelenlegi rajzolási módban.\n" "Megtekintéséhez válassza a(z) \"%s\" módot a Nézet menüből." #: ../src/vikmapslayer.c:753 #, c-format msgid "" "Cowardly refusing to draw tiles or existence of tiles beyond %d zoom out " "factor" msgstr "" "Gyáván megtagadta, hogy rajzoljon csempéket, vagy hogy létezik csempe %d " "kicsinyítési tényezőn túl" #: ../src/vikmapslayer.c:1157 #, c-format msgid "Redownloading up to %d %s map..." msgid_plural "Redownloading up to %d %s maps..." msgstr[0] "Legfeljebb %d %s térkép újbóli letöltése..." msgstr[1] "Legfeljebb %d %s térkép újbóli letöltése..." #: ../src/vikmapslayer.c:1159 #, c-format msgid "Redownloading %d %s map..." msgid_plural "Redownloading %d %s maps..." msgstr[0] "%d %s térkép újbóli letöltése..." msgstr[1] "%d %s térkép újbóli letöltése..." #: ../src/vikmapslayer.c:1163 ../src/vikmapslayer.c:1238 #, c-format msgid "Downloading %d %s map..." msgid_plural "Downloading %d %s maps..." msgstr[0] "%d %s térkép letöltése..." msgstr[1] "%d %s térkép letöltése..." #: ../src/vikmapslayer.c:1311 #, c-format msgid "" "\n" "Source: %s\n" "\n" "Tile File: %s\n" "Tile File Timestamp: %s" msgstr "" #: ../src/vikmapslayer.c:1318 #, c-format msgid "" "Source: %s\n" "\n" "No Tile File!" msgstr "" #: ../src/vikmapslayer.c:1356 msgid "Redownload _Bad Map(s)" msgstr "_Rossz térkép(ek) újbóli letöltése" #: ../src/vikmapslayer.c:1360 msgid "Redownload _New Map(s)" msgstr "Ú_j térkép(ek) újbóli letöltése" #: ../src/vikmapslayer.c:1364 msgid "Redownload _All Map(s)" msgstr "Ö_sszes térkép újbóli letöltése" #: ../src/vikmapslayer.c:1368 msgid "_Show Tile Information" msgstr "" #: ../src/vikmapslayer.c:1449 #, c-format msgid "" "Wrong drawmode for this map.\n" "Select \"%s\" from View menu and try again." msgstr "" "Rossz rajzolási mód a térképhez.\n" "Válassza a(z) \"%s\" módot a Nézet menüből, és próbálja újra." #: ../src/vikmapslayer.c:1454 msgid "Wrong zoom level for this map." msgstr "Rossz nagyítási szint a térképhez." #. Now with icons #: ../src/vikmapslayer.c:1485 msgid "Download _Missing Onscreen Maps" msgstr "Képernyőről _hiányzó térképrészletek letöltése" #: ../src/vikmapslayer.c:1492 msgid "Download _New Onscreen Maps" msgstr "Képernyőn lévő ú_j térképrészletek letöltése" #: ../src/vikmapslayer.c:1499 msgid "Reload _All Onscreen Maps" msgstr "Képernyőn lévő ö_sszes térképrészlet újratöltése" #: ../src/viktreeview.c:263 msgid "Layer Name" msgstr "Réteg neve" #: ../src/viktreeview.c:742 #, c-format msgid "delete data from %s\n" msgstr "adatok törlése innen: %s\n" #: ../src/viktrwlayer.c:377 msgid "Create _Waypoint" msgstr "" #: ../src/viktrwlayer.c:377 msgid "Create Waypoint" msgstr "Útpont létrehozása" #: ../src/viktrwlayer.c:383 msgid "Create _Track" msgstr "" #: ../src/viktrwlayer.c:383 msgid "Create Track" msgstr "Nyomvonal létrehozása" #: ../src/viktrwlayer.c:392 msgid "Create _Route" msgstr "" #: ../src/viktrwlayer.c:392 msgid "Create Route" msgstr "" #: ../src/viktrwlayer.c:401 msgid "_Edit Waypoint" msgstr "" #: ../src/viktrwlayer.c:401 msgid "Edit Waypoint" msgstr "Útpont szerkesztése" #: ../src/viktrwlayer.c:409 msgid "Edit Trac_kpoint" msgstr "" #: ../src/viktrwlayer.c:409 msgid "Edit Trackpoint" msgstr "Nyompont szerkesztése" #: ../src/viktrwlayer.c:417 msgid "Show P_icture" msgstr "" #: ../src/viktrwlayer.c:417 msgid "Show Picture" msgstr "Kép megjelenítése" #: ../src/viktrwlayer.c:424 msgid "Route _Finder" msgstr "" #: ../src/viktrwlayer.c:424 msgid "Route Finder" msgstr "" #. ***** PARAMETERS ***** #: ../src/viktrwlayer.c:447 ../src/viktrwlayer.c:1942 #: ../src/viktrwlayer.c:1944 msgid "Waypoints" msgstr "Útpontok" #: ../src/viktrwlayer.c:447 ../src/viktrwlayer.c:1933 #: ../src/viktrwlayer.c:1935 msgid "Tracks" msgstr "Nyomvonalak" #: ../src/viktrwlayer.c:447 msgid "Waypoint Images" msgstr "Útpont képek" #: ../src/viktrwlayer.c:450 msgid "Draw by Track" msgstr "Rajzolás nyomvonal szerint" #: ../src/viktrwlayer.c:450 msgid "Draw by Speed" msgstr "" #: ../src/viktrwlayer.c:450 msgid "All Tracks Same Color" msgstr "" #: ../src/viktrwlayer.c:451 msgid "Filled Square" msgstr "Kitöltött négyzet" #: ../src/viktrwlayer.c:451 msgid "Square" msgstr "Négyzet" #: ../src/viktrwlayer.c:451 msgid "Circle" msgstr "Kör" #: ../src/viktrwlayer.c:451 msgid "X" msgstr "X" #: ../src/viktrwlayer.c:477 msgid "Extra Extra Small" msgstr "" #: ../src/viktrwlayer.c:478 msgid "Extra Small" msgstr "" #: ../src/viktrwlayer.c:479 msgid "Small" msgstr "" #: ../src/viktrwlayer.c:480 msgid "Medium" msgstr "" #: ../src/viktrwlayer.c:481 msgid "Large" msgstr "" #: ../src/viktrwlayer.c:482 msgid "Extra Large" msgstr "" #: ../src/viktrwlayer.c:483 msgid "Extra Extra Large" msgstr "" #: ../src/viktrwlayer.c:491 msgid "Track Drawing Mode:" msgstr "Nyomvonal rajzolási módja:" #: ../src/viktrwlayer.c:492 msgid "All Tracks Color:" msgstr "" #: ../src/viktrwlayer.c:493 msgid "The color used when 'All Tracks Same Color' drawing mode is selected" msgstr "" #: ../src/viktrwlayer.c:494 msgid "Draw Track Lines" msgstr "Nyomvonal vonalainak rajzolása" #: ../src/viktrwlayer.c:495 msgid "Track Thickness:" msgstr "Nyomvonal vastagsága:" #: ../src/viktrwlayer.c:496 msgid "Draw Track Direction" msgstr "" #: ../src/viktrwlayer.c:497 msgid "Direction Size:" msgstr "" #: ../src/viktrwlayer.c:498 msgid "Draw Trackpoints" msgstr "Nyompontok rajzolása" #: ../src/viktrwlayer.c:499 msgid "Trackpoint Size:" msgstr "" #: ../src/viktrwlayer.c:500 msgid "Draw Elevation" msgstr "Magasság rajzolása" #: ../src/viktrwlayer.c:501 msgid "Draw Elevation Height %:" msgstr "Magasság rajzolása %:" #: ../src/viktrwlayer.c:503 msgid "Draw Stops" msgstr "Rajzolás megállítása" #: ../src/viktrwlayer.c:504 msgid "" "Whether to draw a marker when trackpoints are at the same position but over " "the minimum stop length apart in time" msgstr "" #: ../src/viktrwlayer.c:505 msgid "Min Stop Length (seconds):" msgstr "Minimális megállítási hossz (másodperc):" #: ../src/viktrwlayer.c:507 msgid "Track BG Thickness:" msgstr "Nyomvonal hátterének vastagsága" #: ../src/viktrwlayer.c:508 msgid "Track Background Color" msgstr "Nyomvonal háttérszíne" #: ../src/viktrwlayer.c:509 msgid "Draw by Speed Factor (%):" msgstr "" #: ../src/viktrwlayer.c:510 msgid "" "The percentage factor away from the average speed determining the color used" msgstr "" #: ../src/viktrwlayer.c:512 msgid "Draw Labels" msgstr "Címkék rajzolása" #: ../src/viktrwlayer.c:513 msgid "Waypoint Font Size:" msgstr "" #: ../src/viktrwlayer.c:514 msgid "Waypoint Color:" msgstr "Útpont színe:" #: ../src/viktrwlayer.c:515 msgid "Waypoint Text:" msgstr "Útpont szövege:" #: ../src/viktrwlayer.c:516 msgid "Background:" msgstr "Háttér:" #: ../src/viktrwlayer.c:517 msgid "Fake BG Color Translucency:" msgstr "Hamis háttérszín-átlátszóság:" #: ../src/viktrwlayer.c:518 msgid "Waypoint marker:" msgstr "Útpont-jelölő:" #: ../src/viktrwlayer.c:519 msgid "Waypoint size:" msgstr "Útpont mérete:" #: ../src/viktrwlayer.c:520 msgid "Draw Waypoint Symbols:" msgstr "Útpont-szimbólumok rajzolása" #: ../src/viktrwlayer.c:522 msgid "Draw Waypoint Images" msgstr "Útpont-képek rajzolása" #: ../src/viktrwlayer.c:523 msgid "Image Size (pixels):" msgstr "Képméret (képpont):" #: ../src/viktrwlayer.c:524 msgid "Image Alpha:" msgstr "Kép alfa:" #: ../src/viktrwlayer.c:525 msgid "Image Memory Cache Size:" msgstr "Képmemória-gyorsítótár mérete:" #: ../src/viktrwlayer.c:610 msgid "TrackWaypoint" msgstr "" #: ../src/viktrwlayer.c:1951 ../src/viktrwlayer.c:1953 msgid "Routes" msgstr "" #: ../src/viktrwlayer.c:2144 #, c-format msgid " in %d:%02d hrs:mins" msgstr " ezen belül: %d:%02d óra:perc" #: ../src/viktrwlayer.c:2148 #, c-format msgid "" "\n" "%sTotal Length %.1f %s%s" msgstr "" "\n" "%sTeljes hossz %.1f %s%s" #: ../src/viktrwlayer.c:2154 #, c-format msgid "Tracks: %d - Waypoints: %d - Routes: %d%s" msgstr "" #: ../src/viktrwlayer.c:2174 #, c-format msgid "Tracks: %d" msgstr "" #: ../src/viktrwlayer.c:2184 #, c-format msgid "Routes: %d" msgstr "" #: ../src/viktrwlayer.c:2215 #, c-format msgid "- %d:%02d hrs:mins" msgstr "- %d:%02d óra:perc" #: ../src/viktrwlayer.c:2223 #, c-format msgid "%s%.1f km %s" msgstr "%s%.1f km %s" #: ../src/viktrwlayer.c:2226 #, c-format msgid "%s%.1f miles %s" msgstr "%s%.1f mérföld %s" #: ../src/viktrwlayer.c:2240 #, c-format msgid "Waypoints: %d" msgstr "" #: ../src/viktrwlayer.c:2266 #, c-format msgid "Trkpt: Alt %dft" msgstr "" #. VIK_UNITS_HEIGHT_METRES: #: ../src/viktrwlayer.c:2270 #, c-format msgid "Trkpt: Alt %dm" msgstr "" #. Compact date time format #: ../src/viktrwlayer.c:2277 #, c-format msgid " | Time %x %X" msgstr "" #: ../src/viktrwlayer.c:2295 #, c-format msgid " | Track: %s" msgstr "" #. Combine parts to make overall message #: ../src/viktrwlayer.c:2299 #, c-format msgid "%s%s | %s %s %s" msgstr "" #: ../src/viktrwlayer.c:2314 #, c-format msgid "Wpt: Alt %dft" msgstr "" #. VIK_UNITS_HEIGHT_METRES: #: ../src/viktrwlayer.c:2318 #, c-format msgid "Wpt: Alt %dm" msgstr "" #. Add comment if available #: ../src/viktrwlayer.c:2333 #, c-format msgid "%s | %s %s | Comment: %s" msgstr "" #: ../src/viktrwlayer.c:2335 #, c-format msgid "%s | %s %s" msgstr "" #: ../src/viktrwlayer.c:2563 ../src/viktrwlayer.c:2634 msgid "This layer has no waypoints or trackpoints." msgstr "Ez a réteg nem tartalmaz útpontot vagy nyompontot." #: ../src/viktrwlayer.c:2661 ../src/vikwindow.c:2407 ../src/vikwindow.c:2848 #, c-format msgid "The file \"%s\" exists, do you wish to overwrite it?" msgstr "A(z) \"%s\" fájl már létezik. Kívánja felülírni?" #: ../src/viktrwlayer.c:2671 ../src/vikwindow.c:2429 msgid "The filename you requested could not be opened for writing." msgstr "A megadott fájlnév nem nyitható meg olvasásra." #: ../src/viktrwlayer.c:2676 ../src/viktrwlayer.c:2681 #: ../src/viktrwlayer.c:2691 ../src/viktrwlayer.c:2703 msgid "Export Layer" msgstr "Réteg exportálása" #: ../src/viktrwlayer.c:2720 msgid "Could not create temporary file for export." msgstr "" #: ../src/viktrwlayer.c:2729 #, c-format msgid "Could not launch %s." msgstr "" #: ../src/viktrwlayer.c:2773 msgid "Export Track as GPX" msgstr "Nyomvonal exportálása GPX-be" #: ../src/viktrwlayer.c:2795 msgid "Find" msgstr "Keresés" #: ../src/viktrwlayer.c:2805 msgid "Waypoint Name:" msgstr "Útpont neve:" #: ../src/viktrwlayer.c:2822 msgid "Waypoint not found in this layer." msgstr "Nem található útpont ezen a rétegen." #: ../src/viktrwlayer.c:3090 msgid "Can not upload invisible track." msgstr "" #: ../src/viktrwlayer.c:3192 ../src/viktrwlayer.c:7785 msgid "Track" msgstr "Nyomvonal" #: ../src/viktrwlayer.c:3215 ../src/viktrwlayer.c:7817 msgid "Route" msgstr "" #: ../src/viktrwlayer.c:3296 ../src/viktrwlayer.c:6265 #: ../src/viktrwlayer.c:6314 msgid "_Finish Route" msgstr "" #: ../src/viktrwlayer.c:3298 ../src/viktrwlayer.c:6223 #: ../src/viktrwlayer.c:6312 msgid "_Finish Track" msgstr "" #. Now with icons #: ../src/viktrwlayer.c:3310 msgid "_View Layer" msgstr "_Réteg megjelenítése" #: ../src/viktrwlayer.c:3317 msgid "V_iew" msgstr "" #: ../src/viktrwlayer.c:3323 msgid "View All _Tracks" msgstr "" #: ../src/viktrwlayer.c:3328 msgid "View All _Routes" msgstr "" #: ../src/viktrwlayer.c:3333 msgid "View All _Waypoints" msgstr "" #: ../src/viktrwlayer.c:3338 msgid "_Goto Center of Layer" msgstr "_Ugrás a réteg közepére" #: ../src/viktrwlayer.c:3344 ../src/viktrwlayer.c:6199 msgid "Goto _Waypoint..." msgstr "" #: ../src/viktrwlayer.c:3350 msgid "_Export Layer" msgstr "Réteg _exportálása" #: ../src/viktrwlayer.c:3356 msgid "Export as GPS_Point..." msgstr "" #: ../src/viktrwlayer.c:3361 msgid "Export as GPS_Mapper..." msgstr "" #: ../src/viktrwlayer.c:3366 msgid "Export as _GPX..." msgstr "" #: ../src/viktrwlayer.c:3371 msgid "Export as _KML..." msgstr "" #: ../src/viktrwlayer.c:3376 msgid "Open with External Program_1: " msgstr "" #: ../src/viktrwlayer.c:3383 msgid "Open with External Program_2: " msgstr "" #: ../src/viktrwlayer.c:3391 ../src/vikwindow.c:3145 msgid "_New" msgstr "Ú_j" #: ../src/viktrwlayer.c:3397 msgid "New _Waypoint..." msgstr "" #: ../src/viktrwlayer.c:3403 msgid "New _Track" msgstr "" #: ../src/viktrwlayer.c:3411 msgid "New _Route" msgstr "" #: ../src/viktrwlayer.c:3420 ../src/viktrwlayer.c:6597 msgid "Geotag _Images..." msgstr "" #: ../src/viktrwlayer.c:3427 msgid "_Acquire" msgstr "" #: ../src/viktrwlayer.c:3433 ../src/vikwindow.c:3150 msgid "From _GPS..." msgstr "_GPS-ről..." #: ../src/viktrwlayer.c:3439 msgid "From Google _Directions..." msgstr "" #: ../src/viktrwlayer.c:3446 msgid "From _OSM Traces..." msgstr "" #: ../src/viktrwlayer.c:3451 msgid "From _My OSM Traces..." msgstr "" #: ../src/viktrwlayer.c:3459 ../src/vikwindow.c:3166 msgid "From _Wikipedia Waypoints" msgstr "" #: ../src/viktrwlayer.c:3465 msgid "Within _Layer Bounds" msgstr "_Réteg határain belül" #: ../src/viktrwlayer.c:3471 msgid "Within _Current View" msgstr "_Jelenlegi nézeten belül" #: ../src/viktrwlayer.c:3479 msgid "From Geo_caching..." msgstr "" #: ../src/viktrwlayer.c:3486 ../src/vikwindow.c:3163 msgid "From Geotagged _Images..." msgstr "" #: ../src/viktrwlayer.c:3492 msgid "From _File..." msgstr "" #: ../src/viktrwlayer.c:3498 ../src/viktrwlayer.c:6542 msgid "_Upload" msgstr "" #: ../src/viktrwlayer.c:3504 msgid "Upload to _GPS..." msgstr "" #: ../src/viktrwlayer.c:3511 ../src/viktrwlayer.c:6570 msgid "Upload to _OSM..." msgstr "" #: ../src/viktrwlayer.c:3519 msgid "De_lete" msgstr "" #: ../src/viktrwlayer.c:3525 msgid "Delete All _Tracks" msgstr "" #: ../src/viktrwlayer.c:3531 msgid "Delete Tracks _From Selection..." msgstr "" #: ../src/viktrwlayer.c:3537 ../src/viktrwlayer.c:6290 msgid "Delete _All Routes" msgstr "" #: ../src/viktrwlayer.c:3543 ../src/viktrwlayer.c:6296 msgid "_Delete Routes From Selection..." msgstr "" #: ../src/viktrwlayer.c:3549 msgid "Delete All _Waypoints" msgstr "" #: ../src/viktrwlayer.c:3555 msgid "Delete Waypoints From _Selection..." msgstr "" #: ../src/viktrwlayer.c:4128 #, c-format msgid "Are you sure you want to delete all tracks in %s?" msgstr "" #: ../src/viktrwlayer.c:4138 #, c-format msgid "Are you sure you want to delete all routes in %s?" msgstr "" #: ../src/viktrwlayer.c:4148 #, c-format msgid "Are you sure you want to delete all waypoints in %s?" msgstr "" #: ../src/viktrwlayer.c:4165 #, c-format msgid "Are you sure you want to delete the waypoint \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4178 #, c-format msgid "Are you sure you want to delete the track \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4191 #, c-format msgid "Are you sure you want to delete the route \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4351 ../src/viktrwlayer.c:4922 msgid "" "Converting a track to a route removes extra track data such as segments, " "timestamps, etc...\n" "Do you want to continue?" msgstr "" #: ../src/viktrwlayer.c:4711 msgid "Failed. No other tracks with timestamps in this layer found" msgstr "" #: ../src/viktrwlayer.c:4713 msgid "Failed. No other tracks without timestamps in this layer found" msgstr "" #: ../src/viktrwlayer.c:4732 msgid "Merge with..." msgstr "Egyesítés..." #: ../src/viktrwlayer.c:4733 msgid "Select route to merge with" msgstr "" #: ../src/viktrwlayer.c:4733 msgid "Select track to merge with" msgstr "Nyomvonal kiválasztása az egyesítéshez" #: ../src/viktrwlayer.c:4818 ../src/viktrwlayer.c:4895 msgid "Append Route" msgstr "" #: ../src/viktrwlayer.c:4818 ../src/viktrwlayer.c:4895 msgid "Append Track" msgstr "" #: ../src/viktrwlayer.c:4819 msgid "Select the route to append after the current route" msgstr "" #: ../src/viktrwlayer.c:4820 msgid "Select the track to append after the current track" msgstr "" #: ../src/viktrwlayer.c:4896 msgid "Select the track to append after the current route" msgstr "" #: ../src/viktrwlayer.c:4897 msgid "Select the route to append after the current track" msgstr "" #: ../src/viktrwlayer.c:4957 #, c-format msgid "%d segment merged" msgid_plural "%d segments merged" msgstr[0] "" msgstr[1] "" #: ../src/viktrwlayer.c:4973 msgid "Failed. This track does not have timestamp" msgstr "Sikertelen. Ez a nyomvonal nem tartalmaz időbélyeget" #: ../src/viktrwlayer.c:4985 msgid "Failed. No other track in this layer has timestamp" msgstr "" "Sikertelen. Nincs más nyomvonal ezen a rétegen, amely tartalmaz időbélyeget" #: ../src/viktrwlayer.c:4992 msgid "Merge Threshold..." msgstr "Egyesítési küszöb..." #: ../src/viktrwlayer.c:4993 msgid "Merge when time between tracks less than:" msgstr "Egyesítés, ha az időeltérés a nyomvonalak között kevesebb mint:" #: ../src/viktrwlayer.c:5128 msgid "Split Threshold..." msgstr "Vágási küszöb..." #: ../src/viktrwlayer.c:5129 msgid "Split when time between trackpoints exceeds:" msgstr "Kettévágás, ha az időeltérés a nyompontok között meghaladja:" #: ../src/viktrwlayer.c:5205 msgid "Split Every Nth Point" msgstr "Kettévágás minden x-edik pontnál" #: ../src/viktrwlayer.c:5206 msgid "Split on every Nth point:" msgstr "Kettévágás minden x-edik pontnál:" #: ../src/viktrwlayer.c:5312 msgid "Can not split track as it has no segments" msgstr "" #: ../src/viktrwlayer.c:5340 ../src/viktrwlayer.c:5370 #, c-format msgid "Deleted %ld point" msgid_plural "Deleted %ld points" msgstr[0] "" msgstr[1] "" #: ../src/viktrwlayer.c:5531 msgid "Internal Error in vik_trw_layer_uniquify_tracks" msgstr "" #: ../src/viktrwlayer.c:5588 ../src/viktrwlayer.c:5635 #: ../src/viktrwlayer.c:5814 msgid "" "Multiple entries with the same name exist. This method only works with " "unique names. Force unique names now?" msgstr "" #: ../src/viktrwlayer.c:5599 msgid "No tracks found" msgstr "" #: ../src/viktrwlayer.c:5607 ../src/viktrwlayer.c:5654 #: ../src/viktrwlayer.c:5834 msgid "Delete Selection" msgstr "" #: ../src/viktrwlayer.c:5608 msgid "Select tracks to delete" msgstr "" #: ../src/viktrwlayer.c:5646 msgid "No routes found" msgstr "" #: ../src/viktrwlayer.c:5655 msgid "Select routes to delete" msgstr "" #: ../src/viktrwlayer.c:5761 msgid "Internal Error in vik_trw_layer_uniquify_waypoints" msgstr "" #: ../src/viktrwlayer.c:5824 msgid "No waypoints found" msgstr "" #: ../src/viktrwlayer.c:5835 msgid "Select waypoints to delete" msgstr "" #: ../src/viktrwlayer.c:5896 #, c-format msgid "" "A waypoint with the name \"%s\" already exists. Really rename to the same " "name?" msgstr "" #: ../src/viktrwlayer.c:5926 #, c-format msgid "" "A track with the name \"%s\" already exists. Really rename to the same name?" msgstr "" #: ../src/viktrwlayer.c:5963 #, c-format msgid "" "A route with the name \"%s\" already exists. Really rename to the same name?" msgstr "" #: ../src/viktrwlayer.c:6085 ../src/viktrwlayer.c:6337 msgid "_Goto" msgstr "_Ugrás" #: ../src/viktrwlayer.c:6104 msgid "_Visit Geocache Webpage" msgstr "Geocache weboldal _meglátogatása" #: ../src/viktrwlayer.c:6123 msgid "_Show Picture..." msgstr "" #: ../src/viktrwlayer.c:6131 msgid "Update Geotag on _Image" msgstr "" #: ../src/viktrwlayer.c:6137 msgid "_Update" msgstr "" #: ../src/viktrwlayer.c:6142 msgid "Update and _Keep File Timestamp" msgstr "" #: ../src/viktrwlayer.c:6153 msgid "Visit _Webpage" msgstr "" #: ../src/viktrwlayer.c:6184 msgid "_New Waypoint..." msgstr "" #: ../src/viktrwlayer.c:6193 msgid "_View All Waypoints" msgstr "" #: ../src/viktrwlayer.c:6205 msgid "Delete _All Waypoints" msgstr "" #: ../src/viktrwlayer.c:6211 msgid "_Delete Waypoints From Selection..." msgstr "" #: ../src/viktrwlayer.c:6233 msgid "_View All Tracks" msgstr "" #: ../src/viktrwlayer.c:6239 msgid "_New Track" msgstr "" #: ../src/viktrwlayer.c:6247 msgid "Delete _All Tracks" msgstr "" #: ../src/viktrwlayer.c:6253 msgid "_Delete Tracks From Selection..." msgstr "" #: ../src/viktrwlayer.c:6276 msgid "_View All Routes" msgstr "" #: ../src/viktrwlayer.c:6282 msgid "_New Route" msgstr "" #: ../src/viktrwlayer.c:6327 msgid "_View Track" msgstr "_Nyomvonal megjelenítése" #: ../src/viktrwlayer.c:6329 msgid "_View Route" msgstr "" #: ../src/viktrwlayer.c:6343 msgid "_Startpoint" msgstr "_Kezdőpont" #: ../src/viktrwlayer.c:6349 msgid "\"_Center\"" msgstr "\"_Középpont\"" #: ../src/viktrwlayer.c:6355 msgid "_Endpoint" msgstr "_Végpont" #: ../src/viktrwlayer.c:6361 msgid "_Highest Altitude" msgstr "_Legnagyobb magasság" #: ../src/viktrwlayer.c:6367 msgid "_Lowest Altitude" msgstr "L_egalacsonyabb magasság" #: ../src/viktrwlayer.c:6375 msgid "_Maximum Speed" msgstr "_Maximális sebesség" #: ../src/viktrwlayer.c:6384 msgid "Co_mbine" msgstr "" #: ../src/viktrwlayer.c:6392 msgid "_Merge By Time..." msgstr "" #: ../src/viktrwlayer.c:6397 msgid "Merge _Segments" msgstr "" #: ../src/viktrwlayer.c:6403 msgid "Merge _With Other Tracks..." msgstr "Egyesítés _más nyomvonalakkal..." #: ../src/viktrwlayer.c:6409 msgid "_Append Track..." msgstr "" #: ../src/viktrwlayer.c:6411 msgid "_Append Route..." msgstr "" #: ../src/viktrwlayer.c:6417 msgid "Append _Route..." msgstr "" #: ../src/viktrwlayer.c:6419 msgid "Append _Track..." msgstr "" #: ../src/viktrwlayer.c:6426 msgid "_Split" msgstr "" #: ../src/viktrwlayer.c:6434 msgid "_Split By Time..." msgstr "" #. ATM always enable this entry - don't want to have to analyse the track before displaying the menu - to keep the menu speedy #: ../src/viktrwlayer.c:6440 msgid "Split Se_gments" msgstr "" #: ../src/viktrwlayer.c:6446 msgid "Split By _Number of Points..." msgstr "" #: ../src/viktrwlayer.c:6451 msgid "Split at _Trackpoint" msgstr "" #: ../src/viktrwlayer.c:6460 msgid "Delete Poi_nts" msgstr "" #: ../src/viktrwlayer.c:6466 msgid "Delete Points With The Same _Position" msgstr "" #: ../src/viktrwlayer.c:6471 msgid "Delete Points With The Same _Time" msgstr "" #: ../src/viktrwlayer.c:6477 msgid "_Reverse Track" msgstr "" #: ../src/viktrwlayer.c:6479 msgid "_Reverse Route" msgstr "" #: ../src/viktrwlayer.c:6488 msgid "Down_load Maps Along Track..." msgstr "Térképek le_töltése a nyomvonal mentén..." #: ../src/viktrwlayer.c:6490 msgid "Down_load Maps Along Route..." msgstr "" #: ../src/viktrwlayer.c:6497 msgid "_Apply DEM Data" msgstr "DEM adatok _alkalmazása" #: ../src/viktrwlayer.c:6504 msgid "_Export Track as GPX..." msgstr "" #: ../src/viktrwlayer.c:6506 msgid "_Export Route as GPX..." msgstr "" #: ../src/viktrwlayer.c:6513 msgid "E_xtend Track End" msgstr "Nyomvonal végének ki_bővítése" #: ../src/viktrwlayer.c:6515 msgid "E_xtend Route End" msgstr "" #: ../src/viktrwlayer.c:6522 msgid "C_onvert to a Route" msgstr "" #: ../src/viktrwlayer.c:6524 msgid "C_onvert to a Track" msgstr "" #: ../src/viktrwlayer.c:6532 msgid "Extend _Using Route Finder" msgstr "" #: ../src/viktrwlayer.c:6548 msgid "_Upload to GPS..." msgstr "" #: ../src/viktrwlayer.c:6559 msgid "_View Google Directions" msgstr "Google útvonaltervező _megjelenítése" #: ../src/viktrwlayer.c:6579 msgid "Use with _Filter" msgstr "Használat _szűrővel" #: ../src/viktrwlayer.c:6612 msgid "_Edit Trackpoint" msgstr "" #: ../src/viktrwlayer.c:7524 #, c-format msgid " - Gain %dm:Loss %dm" msgstr "" #: ../src/viktrwlayer.c:7526 #, c-format msgid " - Gain %dft:Loss %dft" msgstr "" #: ../src/viktrwlayer.c:7531 #, c-format msgid " - Bearing %3.1f° - Step %s" msgstr "" #: ../src/viktrwlayer.c:8124 #, c-format msgid "Could not launch %s to open file." msgstr "" #: ../src/viktrwlayer.c:8205 #, c-format msgid "Creating %d Image Thumbnails..." msgstr "%d kép-miniatűr létrehozása..." #: ../src/viktrwlayer.c:8524 msgid "No map layer in use. Create one first" msgstr "Nincs térképréteg használatban. Először hozzon létre egyet" #: ../src/viktrwlayer_propwin.c:898 ../src/viktrwlayer_propwin.c:1155 #, c-format msgid "%.1f kph" msgstr "" #: ../src/viktrwlayer_propwin.c:901 ../src/viktrwlayer_propwin.c:1158 #, c-format msgid "%.1f mph" msgstr "" #: ../src/viktrwlayer_propwin.c:904 ../src/viktrwlayer_propwin.c:1161 #, c-format msgid "%.1f knots" msgstr "" #. VIK_UNITS_SPEED_METRES_PER_SECOND: #: ../src/viktrwlayer_propwin.c:908 ../src/viktrwlayer_propwin.c:1165 #, c-format msgid "%.1f m/s" msgstr "" #: ../src/viktrwlayer_propwin.c:1745 #, c-format msgid "%.1f miles" msgstr "" #: ../src/viktrwlayer_propwin.c:1747 #, c-format msgid "%.1f km" msgstr "" #: ../src/viktrwlayer_propwin.c:2681 msgid "Failed spliting track. Track unchanged" msgstr "Nyomvonal kettévágása sikertelen. A nyomvonal nem módosult" #: ../src/viktrwlayer_propwin.c:2779 ../src/viktrwlayer_propwin.c:3178 #, c-format msgid "%s - Track Properties" msgstr "%s - Nyomvonal tulajdonságai" #: ../src/viktrwlayer_propwin.c:2784 msgid "Split at _Marker" msgstr "" #: ../src/viktrwlayer_propwin.c:2785 msgid "Split _Segments" msgstr "" #: ../src/viktrwlayer_propwin.c:2786 msgid "_Reverse" msgstr "" #: ../src/viktrwlayer_propwin.c:2787 msgid "_Delete Dupl." msgstr "" #: ../src/viktrwlayer_propwin.c:2813 msgid "Comment:" msgstr "Megjegyzés:" #: ../src/viktrwlayer_propwin.c:2814 msgid "Description:" msgstr "" #: ../src/viktrwlayer_propwin.c:2815 msgid "Track Length:" msgstr "Nyomvonal hossza:" #: ../src/viktrwlayer_propwin.c:2816 msgid "Trackpoints:" msgstr "Nyompontok:" #: ../src/viktrwlayer_propwin.c:2817 msgid "Segments:" msgstr "Szakaszok:" #: ../src/viktrwlayer_propwin.c:2818 msgid "Duplicate Points:" msgstr "Kettőzött pontok:" #: ../src/viktrwlayer_propwin.c:2819 msgid "Max Speed:" msgstr "Max. sebesség:" #: ../src/viktrwlayer_propwin.c:2820 msgid "Avg. Speed:" msgstr "Átlagsebesség:" #: ../src/viktrwlayer_propwin.c:2821 msgid "Moving Avg. Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:2822 msgid "Avg. Dist. Between TPs:" msgstr "Átlagos távolság nyompontok között:" #: ../src/viktrwlayer_propwin.c:2823 msgid "Elevation Range:" msgstr "Magassági szintkülönbség:" #: ../src/viktrwlayer_propwin.c:2824 msgid "Total Elevation Gain/Loss:" msgstr "Teljes magassági szintnyereség/-veszteség:" #: ../src/viktrwlayer_propwin.c:2825 msgid "Start:" msgstr "Kezdet:" #: ../src/viktrwlayer_propwin.c:2826 msgid "End:" msgstr "Vége:" #: ../src/viktrwlayer_propwin.c:2827 msgid "Duration:" msgstr "Időtartam:" #: ../src/viktrwlayer_propwin.c:2828 msgid "Color:" msgstr "" #: ../src/viktrwlayer_propwin.c:2877 ../src/viktrwlayer_propwin.c:2901 #: ../src/viktrwlayer_propwin.c:2929 ../src/viktrwlayer_propwin.c:2966 #: ../src/viktrwlayer_propwin.c:2984 ../src/viktrwlayer_propwin.c:3034 #: ../src/viktrwlayer_propwin.c:3035 ../src/viktrwlayer_propwin.c:3036 #: ../src/viktrwlayer_propwin.c:3062 ../src/viktrwlayer_propwin.c:3063 #: ../src/viktrwlayer_propwin.c:3078 ../src/viktrwlayer_propwin.c:3079 #: ../src/viktrwlayer_propwin.c:3092 ../src/viktrwlayer_propwin.c:3093 #: ../src/viktrwlayer_propwin.c:3106 ../src/viktrwlayer_propwin.c:3107 #: ../src/viktrwlayer_propwin.c:3120 ../src/viktrwlayer_propwin.c:3121 #: ../src/viktrwlayer_propwin.c:3134 ../src/viktrwlayer_propwin.c:3135 #, c-format msgid "No Data" msgstr "Nincs adat" #: ../src/viktrwlayer_propwin.c:3031 #, c-format msgid "%d minutes" msgstr "%d perc" #: ../src/viktrwlayer_propwin.c:3058 msgid "Statistics" msgstr "Statisztika" #: ../src/viktrwlayer_propwin.c:3064 msgid "Show D_EM" msgstr "" #: ../src/viktrwlayer_propwin.c:3065 ../src/viktrwlayer_propwin.c:3080 #: ../src/viktrwlayer_propwin.c:3094 ../src/viktrwlayer_propwin.c:3136 msgid "Show _GPS Speed" msgstr "" #: ../src/viktrwlayer_propwin.c:3067 ../src/viktrwlayer_propwin.c:3082 #: ../src/viktrwlayer_propwin.c:3110 ../src/viktrwlayer_propwin.c:3138 msgid "Track Distance:" msgstr "Nyomvonal távolsága:" #: ../src/viktrwlayer_propwin.c:3068 ../src/viktrwlayer_propwin.c:3125 msgid "Track Height:" msgstr "" #: ../src/viktrwlayer_propwin.c:3073 msgid "Elevation-distance" msgstr "Magasság-távolság" #: ../src/viktrwlayer_propwin.c:3083 msgid "Track Gradient:" msgstr "" #: ../src/viktrwlayer_propwin.c:3087 msgid "Gradient-distance" msgstr "" #: ../src/viktrwlayer_propwin.c:3096 ../src/viktrwlayer_propwin.c:3111 #: ../src/viktrwlayer_propwin.c:3124 msgid "Track Time:" msgstr "Nyomvonal időtartama:" #: ../src/viktrwlayer_propwin.c:3097 ../src/viktrwlayer_propwin.c:3139 msgid "Track Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:3101 msgid "Speed-time" msgstr "Sebesség-idő" #: ../src/viktrwlayer_propwin.c:3108 ../src/viktrwlayer_propwin.c:3122 msgid "Show S_peed" msgstr "" #: ../src/viktrwlayer_propwin.c:3115 msgid "Distance-time" msgstr "" #: ../src/viktrwlayer_propwin.c:3129 msgid "Elevation-time" msgstr "" #: ../src/viktrwlayer_propwin.c:3143 msgid "Speed-distance" msgstr "" #: ../src/viktrwlayer_tpwin.c:118 msgid "Part of Track:" msgstr "Nyomvonal része:" #: ../src/viktrwlayer_tpwin.c:119 msgid "Latitude:" msgstr "Földrajzi szélesség:" #: ../src/viktrwlayer_tpwin.c:120 msgid "Longitude:" msgstr "Földrajzi hosszúság:" #: ../src/viktrwlayer_tpwin.c:121 msgid "Altitude:" msgstr "Tengerszint feletti magasság:" #: ../src/viktrwlayer_tpwin.c:122 msgid "Timestamp:" msgstr "Időbélyeg:" #: ../src/viktrwlayer_tpwin.c:123 msgid "Time:" msgstr "Idő:" #: ../src/viktrwlayer_tpwin.c:124 msgid "Distance Difference:" msgstr "Távolság eltérése:" #: ../src/viktrwlayer_tpwin.c:125 msgid "Time Difference:" msgstr "Idő eltérése:" #: ../src/viktrwlayer_tpwin.c:126 msgid "\"Speed\" Between:" msgstr "\"Sebesség\" közötte:" #: ../src/viktrwlayer_tpwin.c:127 msgid "VDOP:" msgstr "VDOP:" #: ../src/viktrwlayer_tpwin.c:128 msgid "HDOP:" msgstr "HDOP:" #: ../src/viktrwlayer_tpwin.c:129 msgid "PDOP:" msgstr "PDOP:" #: ../src/viktrwlayer_tpwin.c:130 msgid "SAT/FIX:" msgstr "SAT/FIX:" #: ../src/viktrwlayer_tpwin.c:139 msgid "Trackpoint" msgstr "Nyompont" #: ../src/viktrwlayer_tpwin.c:142 msgid "_Insert After" msgstr "_Beszúrás utána" #: ../src/viktrwlayer_tpwin.c:144 msgid "Split Here" msgstr "Kettévágás itt" #: ../src/viktrwlayer_geotag.c:446 #, c-format msgid "Geotagging %d Images..." msgstr "" #: ../src/viktrwlayer_geotag.c:510 msgid "Geotag Images" msgstr "" #: ../src/viktrwlayer_geotag.c:516 msgid "Images" msgstr "" #: ../src/viktrwlayer_geotag.c:520 msgid "Overwrite Existing Waypoints:" msgstr "" #: ../src/viktrwlayer_geotag.c:523 msgid "Overwrite Existing GPS Information:" msgstr "" #: ../src/viktrwlayer_geotag.c:525 msgid "Keep File Modification Timestamp:" msgstr "" #: ../src/viktrwlayer_geotag.c:555 msgid "Create Waypoints:" msgstr "" #: ../src/viktrwlayer_geotag.c:563 msgid "Write EXIF:" msgstr "" #: ../src/viktrwlayer_geotag.c:575 msgid "Interpolate Between Track Segments:" msgstr "" #: ../src/viktrwlayer_geotag.c:579 msgid "Image Time Offset (Seconds):" msgstr "" #: ../src/viktrwlayer_geotag.c:581 msgid "" "The number of seconds to ADD to the photos time to make it match the GPS " "data. Calculate this with (GPS - Photo). Can be negative or positive. Useful " "to adjust times when a camera's timestamp was incorrect." msgstr "" #: ../src/viktrwlayer_geotag.c:584 msgid "Image Timezone:" msgstr "" #: ../src/viktrwlayer_geotag.c:586 msgid "" "The timezone that was used when the images were created. For example, if a " "camera is set to AWST or +8:00 hours. Enter +8:00 here so that the correct " "adjustment to the images' time can be made. GPS data is always in UTC." msgstr "" #: ../src/viktrwlayer_geotag.c:590 #, c-format msgid "Using track: %s" msgstr "" #: ../src/viktrwlayer_geotag.c:592 #, c-format msgid "Using all tracks in: %s" msgstr "" #: ../src/vikstatus.c:105 msgid "Current zoom level. Click to select a new one." msgstr "" #: ../src/vikwaypoint.c:34 msgid "Waypoint" msgstr "" #. TODO get rid of this as this is unnecessary duplication... #: ../src/vikwindow.c:221 msgid "Pan" msgstr "Elmozdítás" #: ../src/vikwindow.c:221 msgid "Zoom" msgstr "Nagyítás" #: ../src/vikwindow.c:221 msgid "Ruler" msgstr "Vonalzó" #: ../src/vikwindow.c:221 msgid "Select" msgstr "" #. Create tooltip #: ../src/vikwindow.c:440 msgid "Select zoom level" msgstr "" #: ../src/vikwindow.c:645 #, c-format msgid "" "Do you want to save the changes you made to the document \"%s\"?\n" "\n" "Your changes will be lost if you don't save them." msgstr "" "Szeretné menteni a(z) \"%s\" dokumentum módosításait?\n" "\n" "Módosításai elvesznek, ha nem menti el azokat." #: ../src/vikwindow.c:649 msgid "Don't Save" msgstr "Ne mentse" #: ../src/vikwindow.c:696 msgid "mpp" msgstr "mpp" #: ../src/vikwindow.c:696 msgid "pixelfact" msgstr "pixelfact" #: ../src/vikwindow.c:861 #, c-format msgid "%s %s %dm" msgstr "%s %s %dm" #: ../src/vikwindow.c:863 #, c-format msgid "%s %s %dft" msgstr "%s %s %dft" #: ../src/vikwindow.c:866 #, c-format msgid "%s %s" msgstr "%s %s" #. NB Ctrl+Shift+R is used for Refresh (deemed more important), so use 'U' instead #: ../src/vikwindow.c:1254 msgid "_Ruler" msgstr "_Vonalzó" #: ../src/vikwindow.c:1254 msgid "Ruler Tool" msgstr "Vonalzó eszköz" #: ../src/vikwindow.c:1502 ../src/vikwindow.c:3138 msgid "_Zoom" msgstr "Na_gyítási szint" #: ../src/vikwindow.c:1502 msgid "Zoom Tool" msgstr "Nagyító eszköz" #: ../src/vikwindow.c:1547 ../src/vikwindow.c:3139 msgid "_Pan" msgstr "_Mozgatás" #: ../src/vikwindow.c:1547 msgid "Pan Tool" msgstr "Mozgató eszköz" #: ../src/vikwindow.c:1664 msgid "_Select" msgstr "" #: ../src/vikwindow.c:1664 msgid "Select Tool" msgstr "" #: ../src/vikwindow.c:1809 msgid "You must select a layer to show its properties." msgstr "Ki kell választania egy réteget tulajdonságai megtekintéséhez." #. No error to show, so unlikely this will get called #: ../src/vikwindow.c:1824 msgid "The help system is not available." msgstr "" #. Main error path #: ../src/vikwindow.c:1827 #, c-format msgid "" "Help is not available because: %s.\n" "Ensure a Mime Type ghelp handler program is installed (e.g. yelp)." msgstr "" #: ../src/vikwindow.c:1850 msgid "You must select a layer to delete." msgstr "A törléshez ki kell választania egy réteget" #: ../src/vikwindow.c:2087 msgid "Untitled" msgstr "Névtelen" #: ../src/vikwindow.c:2194 #, c-format msgid "Unable to add '%s' to the list of recently used documents" msgstr "" "A(z) \"%s\" nem adható hozzá a legutóbb megnyitott dokumentumok listájához." #: ../src/vikwindow.c:2208 msgid "The file you requested could not be opened." msgstr "A megadott fájl nem nyitható meg." #: ../src/vikwindow.c:2211 msgid "" "GPSBabel is required to load files of this type or GPSBabel encountered " "problems." msgstr "" #: ../src/vikwindow.c:2214 #, c-format msgid "Unable to load malformed GPX file %s" msgstr "" #: ../src/vikwindow.c:2217 #, c-format msgid "Unsupported file type for %s" msgstr "" #. Since we can process .vik files with issues just show a warning in the status bar #. Not that a user can do much about it... or tells them what this issue is yet... #: ../src/vikwindow.c:2223 #, c-format msgid "WARNING: issues encountered loading %s" msgstr "" #: ../src/vikwindow.c:2278 msgid "Please select a GPS data file to open. " msgstr "A megnyitáshoz válasszon egy GPS adatfájlt. " #: ../src/vikwindow.c:2288 msgid "Geocaching" msgstr "" #: ../src/vikwindow.c:2294 msgid "Google Earth" msgstr "" #: ../src/vikwindow.c:2299 msgid "GPX" msgstr "" #: ../src/vikwindow.c:2304 ../src/vikwindow.c:2387 #: ../src/viking.desktop.in.h:1 msgid "Viking" msgstr "Viking" #: ../src/vikwindow.c:2374 msgid "Save as Viking File." msgstr "Mentés mint Viking fájl." #. Try harder... #: ../src/vikwindow.c:2619 ../src/vikwindow.c:2625 msgid "Generating image file..." msgstr "" #: ../src/vikwindow.c:2647 msgid "" "Failed to generate internal image.\n" "\n" "Try creating a smaller image." msgstr "" #: ../src/vikwindow.c:2655 msgid "Failed to generate image file." msgstr "" #. Success #: ../src/vikwindow.c:2660 msgid "Image file generated." msgstr "" #: ../src/vikwindow.c:2764 msgid "" "Viewable region outside allowable pixel size bounds for image. Clipping " "width/height values." msgstr "" "A látható terület meghaladja a képhez megengedett pixelméret határait. " "Szélesség/magasság értékek csökkentése." #: ../src/vikwindow.c:2789 #, c-format msgid "Total area: %ldm x %ldm (%.3f sq. km)" msgstr "Teljes terület: %ldm x %ldm (%.3f négyzetkm)" #: ../src/vikwindow.c:2792 #, c-format msgid "Total area: %ldm x %ldm (%.3f sq. miles)" msgstr "Total area: %ldm x %ldm (%.3f négyzetmérföld)" #: ../src/vikwindow.c:2813 msgid "Save Image" msgstr "Kép mentése" #: ../src/vikwindow.c:2834 msgid "PNG" msgstr "" #: ../src/vikwindow.c:2857 msgid "You must be in UTM mode to use this feature" msgstr "A funkció használatához UTM módban kell lennie" #: ../src/vikwindow.c:2862 msgid "Choose a directory to hold images" msgstr "Válasszon egy könyvtárat a képek tárolásához" #. todo: default for answers inside VikWindow or static (thruout instance) #: ../src/vikwindow.c:2883 msgid "Save to Image File" msgstr "Mentés képfájlba" #: ../src/vikwindow.c:2900 msgid "Width (pixels):" msgstr "Szélesség (képpont):" #: ../src/vikwindow.c:2902 msgid "Height (pixels):" msgstr "Magasság (képpont):" #: ../src/vikwindow.c:2905 msgid "" "WARNING: USING LARGE IMAGES OVER 10000x10000\n" "MAY CRASH THE PROGRAM!" msgstr "" #: ../src/vikwindow.c:2907 msgid "Zoom (meters per pixel):" msgstr "Nagyítás (méter/képpont):" #: ../src/vikwindow.c:2921 msgid "Area in current viewable window" msgstr "Terület a jelenleg látható ablakban" #: ../src/vikwindow.c:2931 msgid "Save as PNG" msgstr "Mentés mint PNG" #: ../src/vikwindow.c:2932 msgid "Save as JPEG" msgstr "Mentés mint JPEG" #: ../src/vikwindow.c:2954 msgid "East-west image tiles:" msgstr "Kelet-nyugat képcsempék:" #: ../src/vikwindow.c:2956 msgid "North-south image tiles:" msgstr "Észak-dél képcsempék:" #: ../src/vikwindow.c:3097 msgid "Choose a background color" msgstr "Háttérszín választása" #: ../src/vikwindow.c:3113 msgid "Choose a track highlight color" msgstr "" #: ../src/vikwindow.c:3134 msgid "_File" msgstr "_Fájl" #: ../src/vikwindow.c:3135 msgid "_Edit" msgstr "S_zerkesztés" #: ../src/vikwindow.c:3136 msgid "_View" msgstr "_Nézet" #: ../src/vikwindow.c:3137 msgid "_Show" msgstr "_Megjelenítés" #: ../src/vikwindow.c:3140 msgid "_Layers" msgstr "_Rétegek" #: ../src/vikwindow.c:3141 msgid "_Tools" msgstr "_Eszközök" #: ../src/vikwindow.c:3142 msgid "_Webtools" msgstr "_Webes eszközök" #: ../src/vikwindow.c:3143 ../src/vikwindow.c:3206 msgid "_Help" msgstr "_Súgó" #: ../src/vikwindow.c:3145 msgid "New file" msgstr "Új fájl" #: ../src/vikwindow.c:3146 msgid "_Open..." msgstr "_Megnyitás..." #: ../src/vikwindow.c:3146 msgid "Open a file" msgstr "Fájl megnyitása" #: ../src/vikwindow.c:3147 msgid "Open _Recent File" msgstr "_Legutóbbi fájl megnyitása" #: ../src/vikwindow.c:3148 msgid "Append _File..." msgstr "_Fájl hozzáfűzése..." #: ../src/vikwindow.c:3148 msgid "Append data from a different file" msgstr "Adatok hozzáfűzése egy másik fájlból" #: ../src/vikwindow.c:3149 msgid "A_cquire" msgstr "_Beszerzés" #: ../src/vikwindow.c:3150 msgid "Transfer data from a GPS device" msgstr "Adatok áttöltése GPS eszközről" #: ../src/vikwindow.c:3151 msgid "Import File With GPS_Babel..." msgstr "" #: ../src/vikwindow.c:3151 msgid "Import file via GPSBabel converter" msgstr "" #: ../src/vikwindow.c:3153 msgid "Google _Directions..." msgstr "Google ú_tvonaltervező..." #: ../src/vikwindow.c:3153 msgid "Get driving directions from Google" msgstr "Útvonaljavaslat kérése Google-től" #: ../src/vikwindow.c:3156 msgid "_OSM Traces..." msgstr "" #: ../src/vikwindow.c:3156 msgid "Get traces from OpenStreetMap" msgstr "" #: ../src/vikwindow.c:3157 msgid "_My OSM Traces..." msgstr "" #: ../src/vikwindow.c:3157 msgid "Get Your Own Traces from OpenStreetMap" msgstr "" #: ../src/vikwindow.c:3160 msgid "Geo_caches..." msgstr "Geo_ládák..." #: ../src/vikwindow.c:3160 msgid "Get Geocaches from geocaching.com" msgstr "Geoládák lekérése a geocaching.com webhelyről" #: ../src/vikwindow.c:3163 msgid "Create waypoints from geotagged images" msgstr "" #: ../src/vikwindow.c:3166 msgid "Create waypoints from Wikipedia items in the current view" msgstr "" #: ../src/vikwindow.c:3168 msgid "_Save" msgstr "M_entés" #: ../src/vikwindow.c:3168 msgid "Save the file" msgstr "A fájl mentése" #: ../src/vikwindow.c:3169 msgid "Save _As..." msgstr "Men_tés másként..." #: ../src/vikwindow.c:3169 msgid "Save the file under different name" msgstr "A fájl mentése más néven" #: ../src/vikwindow.c:3170 msgid "_Generate Image File..." msgstr "Képfájl _generálása..." #: ../src/vikwindow.c:3170 msgid "Save a snapshot of the workspace into a file" msgstr "Pillanatkép mentése a munkaterületről fájlba" #: ../src/vikwindow.c:3171 msgid "Generate _Directory of Images..." msgstr "Ké_pek könyvtárának generálása..." #: ../src/vikwindow.c:3171 msgid "FIXME:IMGDIR" msgstr "FIXME:IMGDIR" #: ../src/vikwindow.c:3174 msgid "_Print..." msgstr "_Nyomtatás..." #: ../src/vikwindow.c:3174 msgid "Print maps" msgstr "Térkép nyomtatása" #: ../src/vikwindow.c:3177 msgid "E_xit" msgstr "_Kilépés" #: ../src/vikwindow.c:3177 msgid "Exit the program" msgstr "Kilépés a programból" #: ../src/vikwindow.c:3178 msgid "Save and Exit" msgstr "Mentés és kilépés" #: ../src/vikwindow.c:3178 msgid "Save and Exit the program" msgstr "Mentés és kilépés a programból" #: ../src/vikwindow.c:3180 msgid "Go to the _Default Location" msgstr "Ugrás az _alapértelmezett helyre" #: ../src/vikwindow.c:3180 msgid "Go to the default location" msgstr "Ugrás az alapértelmezett helyre" #: ../src/vikwindow.c:3181 msgid "Go to _Location..." msgstr "Ugrás _helyre..." #: ../src/vikwindow.c:3181 msgid "Go to address/place using text search" msgstr "Ugrás címre/helyre szöveges kereső használatával" #: ../src/vikwindow.c:3182 msgid "_Go to Lat/Lon..." msgstr "Ugrás _szél./hossz.-ra..." #: ../src/vikwindow.c:3182 msgid "Go to arbitrary lat/lon coordinate" msgstr "Ugrás egy megadott földrajzi szélességi/hosszúsági koordinátára" #: ../src/vikwindow.c:3183 msgid "Go to UTM..." msgstr "Ugrás U_TM-re..." #: ../src/vikwindow.c:3183 msgid "Go to arbitrary UTM coordinate" msgstr "Ugrás egy megadott UTM koordinátára" #: ../src/vikwindow.c:3184 msgid "_Refresh" msgstr "" #: ../src/vikwindow.c:3184 msgid "Refresh any maps displayed" msgstr "" #: ../src/vikwindow.c:3185 msgid "Set _Highlight Color..." msgstr "" #: ../src/vikwindow.c:3186 msgid "Set Bac_kground Color..." msgstr "_Háttérszín beállítása..." #: ../src/vikwindow.c:3187 msgid "Zoom _In" msgstr "_Nagyítás" #: ../src/vikwindow.c:3188 msgid "Zoom _Out" msgstr "_Kicsinyítés" #: ../src/vikwindow.c:3189 msgid "Zoom _To..." msgstr "N_agyítás..." #: ../src/vikwindow.c:3190 msgid "Pan _North" msgstr "Mozgatás é_szak felé" #: ../src/vikwindow.c:3191 msgid "Pan _East" msgstr "Mozgatás _kelet felé" #: ../src/vikwindow.c:3192 msgid "Pan _South" msgstr "Mozgatás _dél felé" #: ../src/vikwindow.c:3193 msgid "Pan _West" msgstr "Mozgatás _nyugat felé" #: ../src/vikwindow.c:3194 msgid "Background _Jobs" msgstr "_Háttérmunkák" #: ../src/vikwindow.c:3196 msgid "Cu_t" msgstr "_Kivágás" #: ../src/vikwindow.c:3197 msgid "_Copy" msgstr "_Másolás" #: ../src/vikwindow.c:3198 msgid "_Paste" msgstr "_Beillesztés" #: ../src/vikwindow.c:3199 msgid "_Delete" msgstr "_Törlés" #: ../src/vikwindow.c:3200 msgid "Delete All" msgstr "Összes törlése" #: ../src/vikwindow.c:3201 msgid "_Flush Map Cache" msgstr "Térkép-_gyorsítótár kiürítése" #: ../src/vikwindow.c:3202 msgid "_Set the Default Location" msgstr "_Alapértelmezett hely beállítása" #: ../src/vikwindow.c:3202 msgid "Set the Default Location to the current position" msgstr "Alapértelmezett hely beállítása a jelenlegi pozícióra" #: ../src/vikwindow.c:3203 msgid "_Preferences" msgstr "B_eállítások" #: ../src/vikwindow.c:3204 msgid "_Properties" msgstr "_Tulajdonságok" #: ../src/vikwindow.c:3207 msgid "_About" msgstr "_Névjegy" #: ../src/vikwindow.c:3213 msgid "_UTM Mode" msgstr "_UTM mód" #: ../src/vikwindow.c:3214 msgid "_Expedia Mode" msgstr "_Expedia mód" #: ../src/vikwindow.c:3215 msgid "_Mercator Mode" msgstr "_Mercator mód" #: ../src/vikwindow.c:3216 msgid "Lat_/Lon Mode" msgstr "Szél._/Hossz. mód" #: ../src/vikwindow.c:3220 msgid "Show _Scale" msgstr "_Méretarány megjelenítése" #: ../src/vikwindow.c:3220 msgid "Show Scale" msgstr "Aránymérték megjelenítése" #: ../src/vikwindow.c:3221 msgid "Show _Center Mark" msgstr "_Középjelölő megjelenítése" #: ../src/vikwindow.c:3221 msgid "Show Center Mark" msgstr "Középjelölő megjelenítése" #: ../src/vikwindow.c:3222 msgid "Show _Highlight" msgstr "" #: ../src/vikwindow.c:3222 msgid "Show Highlight" msgstr "" #: ../src/vikwindow.c:3223 msgid "_Full Screen" msgstr "_Teljes képernyő" #: ../src/vikwindow.c:3223 msgid "Activate full screen mode" msgstr "Teljes képernyő mód aktiválása" #: ../src/vikwindow.c:3224 msgid "Show Side _Panel" msgstr "_Oldalpanel megjelenítése" #: ../src/vikwindow.c:3224 msgid "Show Side Panel" msgstr "Oldalpanel megjelenítése" #: ../src/vikwindow.c:3225 msgid "Show Status_bar" msgstr "Á_llapotsor megjelenítése" #: ../src/vikwindow.c:3225 msgid "Show Statusbar" msgstr "Állapotsor megjelenítése" #: ../src/vikwindow.c:3226 msgid "Show _Toolbar" msgstr "_Eszköztár megjelenítése" #: ../src/vikwindow.c:3226 msgid "Show Toolbar" msgstr "Eszköztár megjelenítése" #: ../src/vikwindow.c:3227 msgid "Show _Menu" msgstr "_Menü megjelenítése" #: ../src/vikwindow.c:3227 msgid "Show Menu" msgstr "Menü megjelenítése" #: ../src/viking.desktop.in.h:2 msgid "GPS Data Manager" msgstr "GPS adatkezelő" #: ../src/viking.desktop.in.h:3 msgid "Map Based GPS Data Manager (live data capable)." msgstr "Térképalapú GPS adatkezelő (élő adatátvitelre képes)." #: ../src/libjpeg/jpeg-data.c:206 msgid "Data does not follow JPEG specification." msgstr "" #: ../src/libjpeg/jpeg-data.c:291 #, c-format msgid "Path '%s' invalid." msgstr "" #: ../src/libjpeg/jpeg-data.c:309 #, c-format msgid "Could not read '%s'." msgstr "" viking-1.4.2/po/POTFILES.in0000644000175000017500000000177412175546146012145 00000000000000src/acquire.c src/background.c src/bing.c src/bingmapsource.c src/clipboard.c src/curl_download.c src/dialog.c src/expedia.c src/geonamessearch.c src/globals.c src/google.c src/googlesearch.c src/datasource_file.c src/datasource_gc.c src/datasource_geotag.c src/datasource_google.c src/datasource_gps.c src/datasource_osm.c src/datasource_osm_my_traces.c src/datasource_wikipedia.c src/dem.c src/download.c src/file.c src/geotag_exif.c src/osm-traces.c src/mapcache.c src/print.c src/util.c src/vikcoordlayer.c src/datasource_bfilter.c src/main.c src/osm.c src/osm-traces.c src/preferences.c src/uibuilder.c src/vikaggregatelayer.c src/vikdemlayer.c src/vikfileentry.c src/vikfilelist.c src/vikgeoreflayer.c src/vikgoto.c src/vikgototool.c src/vikgpslayer.c src/viklayer.c src/viklayerspanel.c src/vikmapslayer.c src/viktreeview.c src/viktrwlayer.c src/viktrwlayer_propwin.c src/viktrwlayer_tpwin.c src/viktrwlayer_geotag.c src/vikstatus.c src/vikwaypoint.c src/vikwindow.c src/viking.desktop.in src/libjpeg/jpeg-data.c viking-1.4.2/po/da.po0000644000175000017500000022074312175546146011313 00000000000000# Danish translation for viking # Copyright (c) 2007 Rosetta Contributors and Canonical Ltd 2007 # This file is distributed under the same license as the viking package. # FIRST AUTHOR , 2007. # msgid "" msgstr "" "Project-Id-Version: viking\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-02-04 23:29+0100\n" "PO-Revision-Date: 2010-11-17 23:14+0000\n" "Last-Translator: Guilhem Bonnefille \n" "Language-Team: Danish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2013-03-23 17:12+0000\n" "X-Generator: Launchpad (build 16540)\n" "Language: da\n" #: ../src/acquire.c:103 ../src/vikgpslayer.c:1185 msgid "Done." msgstr "Færdig." #: ../src/acquire.c:114 msgid "No data." msgstr "" #: ../src/acquire.c:154 ../src/acquire.c:404 msgid "Error: acquisition failed." msgstr "" #: ../src/acquire.c:341 msgid "Working..." msgstr "Arbejder..." #. This shouldn't happen... #: ../src/acquire.c:394 msgid "" "Unable to create command\n" "Acquire method failed." msgstr "" #: ../src/acquire.c:486 msgid "_Filter" msgstr "" #: ../src/acquire.c:501 #, c-format msgid "Filter with %s" msgstr "" #: ../src/acquire.c:518 msgid "Filter" msgstr "" #: ../src/background.c:52 #, c-format msgid "%d items" msgstr "%d emner" #: ../src/background.c:248 msgid "Job" msgstr "Opgave" #: ../src/background.c:252 msgid "Progress" msgstr "Fremdrift" #: ../src/background.c:268 msgid "Viking Background Jobs" msgstr "Viking baggrundsjob" #: ../src/bing.c:47 msgid "Bing" msgstr "" #. VIK_GTK_WINDOW_FROM_WIDGET(vp) #: ../src/bingmapsource.c:445 msgid "Bing attribution Loading" msgstr "" #: ../src/clipboard.c:95 msgid "paste failed" msgstr "" #: ../src/clipboard.c:105 msgid "wrong clipboard data size" msgstr "" #: ../src/clipboard.c:124 #, c-format msgid "" "The clipboard contains sublayer data for %s layers. You must select a layer " "of this type to paste the clipboard data." msgstr "" #: ../src/clipboard.c:236 msgid "" "In order to paste a waypoint, please select an appropriate layer to paste " "into." msgstr "" #: ../src/dialog.c:52 msgid "Go to Lat/Lon" msgstr "" #: ../src/dialog.c:64 ../src/dialog.c:251 msgid "Latitude:" msgstr "Breddegrad:" #: ../src/dialog.c:70 ../src/dialog.c:256 msgid "Longitude:" msgstr "Længdegrad:" #: ../src/dialog.c:102 msgid "Go to UTM" msgstr "" #: ../src/dialog.c:115 msgid "Northing:" msgstr "" #: ../src/dialog.c:121 msgid "Easting:" msgstr "" #: ../src/dialog.c:128 msgid "Zone:" msgstr "Zone:" #: ../src/dialog.c:131 msgid "Letter:" msgstr "" #: ../src/dialog.c:199 msgid "Waypoint Properties" msgstr "" #: ../src/dialog.c:233 msgid "Name:" msgstr "Navn:" #: ../src/dialog.c:261 msgid "Altitude:" msgstr "Højde:" #: ../src/dialog.c:266 msgid "Comment:" msgstr "Kommentar:" #: ../src/dialog.c:274 ../src/osm-traces.c:437 msgid "Description:" msgstr "Beskrivelse:" #: ../src/dialog.c:277 msgid "Image:" msgstr "Billede:" #: ../src/dialog.c:282 msgid "Symbol:" msgstr "Symbol:" #: ../src/dialog.c:291 msgid "(none)" msgstr "(ingen)" #. TODO: other checks (isalpha or whatever ) #: ../src/dialog.c:356 msgid "Please enter a name for the waypoint." msgstr "" #: ../src/dialog.c:529 ../src/geonamessearch.c:243 #: ../src/datasource_osm_my_traces.c:507 msgid "Nothing was selected" msgstr "" #: ../src/dialog.c:537 msgid "Add Route" msgstr "" #: ../src/dialog.c:537 msgid "Add Track" msgstr "Tilføj spor" #: ../src/dialog.c:545 msgid "Route Name:" msgstr "" #: ../src/dialog.c:545 msgid "Track Name:" msgstr "Spornavn:" #: ../src/dialog.c:565 msgid "Please enter a name for the track." msgstr "Indtast venligst et navn for sporet." #: ../src/dialog.c:623 msgid "Zoom Factors..." msgstr "Zoom faktor..." #: ../src/dialog.c:637 msgid "Zoom factor (in meters per pixel):" msgstr "" #: ../src/dialog.c:638 msgid "X (easting): " msgstr "" #: ../src/dialog.c:639 msgid "Y (northing): " msgstr "" #: ../src/dialog.c:644 msgid "X and Y zoom factors must be equal" msgstr "" #: ../src/dialog.c:699 msgid "1 min" msgstr "1 min" #: ../src/dialog.c:700 msgid "1 hour" msgstr "1 time" #: ../src/dialog.c:701 msgid "1 day" msgstr "1 dag" #: ../src/dialog.c:702 msgid "Custom (in minutes):" msgstr "" #: ../src/dialog.c:808 msgid "GPS Data and Topo Analyzer, Explorer, and Manager." msgstr "" #: ../src/dialog.c:809 msgid "" "This program is free software; you can redistribute it and/or modify it " "under the terms of the GNU General Public License as published by the Free " "Software Foundation; either version 2 of the License, or (at your option) " "any later version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT " "ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or " "FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for " "more details.\n" "\n" "You should have received a copy of the GNU General Public License along with " "this program; if not, write to the Free Software Foundation, Inc., 59 Temple " "Place, Suite 330, Boston, MA 02111-1307, USA" msgstr "" #: ../src/dialog.c:837 msgid "Translation is coordinated on http://launchpad.net/viking" msgstr "" #: ../src/dialog.c:845 msgid "Download along track" msgstr "" #: ../src/dialog.c:851 msgid "Map type:" msgstr "Korttype:" #: ../src/dialog.c:856 msgid "Zoom level:" msgstr "Zoom niveau:" #: ../src/dialog.c:896 #, c-format msgid "The map data is licensed: %s." msgstr "" #: ../src/dialog.c:899 #, c-format msgid "" "The data provided by '%s' are licensed under the following license: " "%s.\n" "Please, read the license before continuing." msgstr "" #: ../src/dialog.c:904 msgid "Open license" msgstr "" #: ../src/expedia.c:53 msgid "Expedia Street Maps" msgstr "Expedia vejkort" #: ../src/expedia.c:81 msgid "Invalid expedia altitude" msgstr "" #: ../src/expedia.c:112 #, c-format msgid "" "Couldn't open EXPEDIA image file (right after successful download! Please " "report and delete image file!): %s" msgstr "" #: ../src/expedia.c:125 #, c-format msgid "" "Couldn't save EXPEDIA image file (right after successful download! Please " "report and delete image file!): %s" msgstr "" #. * #. * See http://www.geonames.org/export/wikipedia-webservice.html#wikipediaBoundingBox #. #. Translators may wish to change this setting as appropriate to get Wikipedia articles in that language #: ../src/geonamessearch.c:46 msgid "en" msgstr "" #: ../src/geonamessearch.c:121 msgid "Search" msgstr "Søgning" #: ../src/geonamessearch.c:123 msgid "No entries found!" msgstr "" #. NB could allow columns to be shifted around by doing this after each new #. gtk_tree_view_column_set_reorderable ( column, TRUE ); #. However I don't think is that useful, so I haven't put it in #: ../src/geonamessearch.c:177 ../src/datasource_osm_my_traces.c:425 msgid "Name" msgstr "" #: ../src/geonamessearch.c:182 msgid "Feature" msgstr "" #: ../src/geonamessearch.c:187 ../src/datasource_osm_my_traces.c:440 msgid "Lat/Lon" msgstr "" #: ../src/geonamessearch.c:269 ../src/googlesearch.c:100 msgid "couldn't map temp file" msgstr "" #: ../src/globals.c:44 msgid "Degree format:" msgstr "" #: ../src/globals.c:48 msgid "Distance units:" msgstr "" #: ../src/globals.c:52 msgid "Speed units:" msgstr "" #: ../src/globals.c:56 msgid "Height units:" msgstr "" #: ../src/globals.c:60 msgid "Use large waypoint icons:" msgstr "" #: ../src/globals.c:64 msgid "Default latitude:" msgstr "" #: ../src/globals.c:67 msgid "Default longitude:" msgstr "" #: ../src/globals.c:73 msgid "Alphabetical" msgstr "" #: ../src/globals.c:73 ../src/datasource_osm_my_traces.c:435 msgid "Time" msgstr "" #: ../src/globals.c:76 msgid "KML File Export Units:" msgstr "" #: ../src/globals.c:77 msgid "GPX Track Order:" msgstr "" #: ../src/globals.c:82 msgid "Image Viewer:" msgstr "" #: ../src/globals.c:87 msgid "External GPX Program 1:" msgstr "" #: ../src/globals.c:88 msgid "External GPX Program 2:" msgstr "" #. Defaults for the options are setup here #: ../src/globals.c:96 msgid "General" msgstr "" #. New Tab #: ../src/globals.c:121 msgid "Export/External" msgstr "" #. Webtools #: ../src/google.c:36 msgid "Google" msgstr "Google" #: ../src/datasource_file.c:59 msgid "Import file with GPSBabel" msgstr "" #: ../src/datasource_file.c:60 msgid "Imported file" msgstr "" #. The file selector #: ../src/datasource_file.c:133 msgid "File:" msgstr "" #: ../src/datasource_file.c:134 msgid "File to import" msgstr "" #: ../src/datasource_file.c:141 msgid "All files" msgstr "" #. The file format selector #: ../src/datasource_file.c:148 msgid "File type:" msgstr "" #: ../src/datasource_file.c:193 #, c-format msgid "using babel args '%s' and file '%s'" msgstr "" #: ../src/datasource_gc.c:66 msgid "Download Geocaches" msgstr "Download Geocashes" #: ../src/datasource_gc.c:67 msgid "Geocaching.com Caches" msgstr "" #: ../src/datasource_gc.c:84 msgid "geocaching.com username:" msgstr "" #: ../src/datasource_gc.c:85 msgid "geocaching.com password:" msgstr "" #: ../src/datasource_gc.c:126 #, c-format msgid "" "Can't find %s or %s in path! Check that you have installed it correctly." msgstr "" #: ../src/datasource_gc.c:188 msgid "Number geocaches:" msgstr "" #: ../src/datasource_gc.c:190 msgid "Centered around:" msgstr "" #: ../src/datasource_gc.c:226 msgid "Broken input - using some defaults" msgstr "" #: ../src/datasource_geotag.c:51 msgid "Create Waypoints from Geotagged Images" msgstr "" #: ../src/datasource_geotag.c:52 msgid "Geotagged Images" msgstr "" #: ../src/datasource_geotag.c:102 ../src/vikwindow.c:2314 #: ../src/vikwindow.c:2382 ../src/vikwindow.c:2824 msgid "All" msgstr "" #: ../src/datasource_geotag.c:107 ../src/vikwindow.c:2829 msgid "JPG" msgstr "" #: ../src/datasource_geotag.c:165 #, c-format msgid "Unable to create waypoint from %s" msgstr "" #: ../src/datasource_google.c:49 ../src/datasource_google.c:50 msgid "Google Directions" msgstr "" #: ../src/datasource_google.c:77 msgid "From:" msgstr "Fra:" #: ../src/datasource_google.c:79 msgid "To:" msgstr "Til:" #: ../src/datasource_gps.c:57 msgid "Acquire from GPS" msgstr "Hent fra GPS" #: ../src/datasource_gps.c:58 msgid "Acquired from GPS" msgstr "Hentet fra GPS" #: ../src/datasource_gps.c:221 #, c-format msgid "using cmdline '%s' and file '%s'\n" msgstr "" #: ../src/datasource_gps.c:297 ../src/vikgpslayer.c:884 #, c-format msgid "Downloading %d waypoint..." msgid_plural "Downloading %d waypoints..." msgstr[0] "" msgstr[1] "" #: ../src/datasource_gps.c:298 ../src/vikgpslayer.c:885 #, c-format msgid "Downloading %d trackpoint..." msgid_plural "Downloading %d trackpoints..." msgstr[0] "" msgstr[1] "" #: ../src/datasource_gps.c:303 ../src/vikgpslayer.c:890 #, c-format msgid "Downloading %d routepoint..." msgid_plural "Downloading %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/datasource_gps.c:325 ../src/datasource_gps.c:326 #: ../src/datasource_gps.c:327 #, c-format msgid "Downloaded %d out of %d %s..." msgstr "Downloadet %d ud af %d %s..." #: ../src/datasource_gps.c:331 ../src/datasource_gps.c:332 #: ../src/datasource_gps.c:333 #, c-format msgid "Downloaded %d %s." msgstr "Downloaded %d %s." #: ../src/datasource_gps.c:347 ../src/vikgpslayer.c:968 #, c-format msgid "GPS Device: %s" msgstr "GPS udstyr: %s" #: ../src/datasource_gps.c:370 ../src/vikgpslayer.c:1042 #: ../src/vikgpslayer.c:1110 msgid "Status: Working..." msgstr "" #: ../src/datasource_gps.c:469 ../src/vikgpslayer.c:150 msgid "GPS Protocol:" msgstr "GPS protekol:" #. List now assigned at runtime #: ../src/datasource_gps.c:488 ../src/vikgpslayer.c:151 msgid "Serial Port:" msgstr "" #: ../src/datasource_gps.c:509 msgid "" "Turn Off After Transfer\n" "(Garmin/NAViLink Only)" msgstr "" #: ../src/datasource_gps.c:512 msgid "Tracks:" msgstr "" #: ../src/datasource_gps.c:516 msgid "Routes:" msgstr "" #: ../src/datasource_gps.c:520 msgid "Waypoints:" msgstr "" #: ../src/datasource_gps.c:594 ../src/vikgpslayer.c:1305 msgid "GPS device: N/A" msgstr "GPS udstyr: N/A" #: ../src/datasource_osm.c:52 ../src/datasource_osm.c:53 msgid "OSM traces" msgstr "" #: ../src/datasource_osm.c:80 msgid "Page number:" msgstr "" #: ../src/datasource_osm_my_traces.c:63 ../src/datasource_osm_my_traces.c:64 msgid "OSM My Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:108 msgid "Username:" msgstr "" #: ../src/datasource_osm_my_traces.c:113 msgid "The email or username used to login to OSM" msgstr "" #: ../src/datasource_osm_my_traces.c:115 ../src/osm-traces.c:413 msgid "Password:" msgstr "Adgangskode:" #: ../src/datasource_osm_my_traces.c:120 msgid "The password used to login to OSM" msgstr "" #: ../src/datasource_osm_my_traces.c:430 msgid "Description" msgstr "" #: ../src/datasource_osm_my_traces.c:445 msgid "Privacy" msgstr "" #: ../src/datasource_osm_my_traces.c:452 msgid "Within Current View" msgstr "" #: ../src/datasource_osm_my_traces.c:518 msgid "GPS Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:520 msgid "None found!" msgstr "" #: ../src/datasource_osm_my_traces.c:629 msgid "My OSM Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:645 #, c-format msgid "Unable to get trace: %s" msgstr "" #: ../src/datasource_wikipedia.c:32 msgid "Create Waypoints from Wikipedia Articles" msgstr "" #: ../src/datasource_wikipedia.c:33 msgid "Wikipedia Waypoints" msgstr "" #: ../src/dem.c:65 ../src/dem.c:79 msgid "Invalid DEM" msgstr "" #: ../src/dem.c:121 msgid "Invalid DEM header" msgstr "" #: ../src/dem.c:190 ../src/dem.c:203 msgid "Incorrect DEM Class B record: expected 1" msgstr "" #: ../src/dem.c:360 #, c-format msgid "Couldn't map file %s: %s" msgstr "" #: ../src/download.c:112 msgid "Tile age (s):" msgstr "" #: ../src/download.c:233 #, c-format msgid "Download error: %s" msgstr "" #: ../src/download.c:313 msgid "couldn't open temp file" msgstr "kunne ikke åbne midlertidig fil" #: ../src/file.c:456 ../src/file.c:461 #, c-format msgid "Draw mode '%s' no more supported" msgstr "" #: ../src/geotag_exif.c:433 msgid "Not enough memory." msgstr "" #: ../src/geotag_exif.c:451 msgid "Setting a value for this tag is unsupported!" msgstr "" #: ../src/geotag_exif.c:470 #, c-format msgid "Too few components specified (need %d, found %d)\n" msgstr "" #: ../src/geotag_exif.c:474 msgid "Numeric value expected\n" msgstr "" #: ../src/geotag_exif.c:482 msgid "This shouldn't happen!" msgstr "" #: ../src/geotag_exif.c:552 msgid "Not yet implemented!" msgstr "" #: ../src/geotag_exif.c:565 msgid "Warning; Too many components specified!" msgstr "" #: ../src/osm-traces.c:73 msgid "Identifiable (public w/ timestamps)" msgstr "" #: ../src/osm-traces.c:74 msgid "Trackable (private w/ timestamps)" msgstr "" #: ../src/osm-traces.c:75 msgid "Public" msgstr "Offentlig" #: ../src/osm-traces.c:76 msgid "Private" msgstr "" #: ../src/osm-traces.c:93 msgid "OSM username:" msgstr "" #: ../src/osm-traces.c:94 msgid "OSM password:" msgstr "" #. Preferences #: ../src/osm-traces.c:151 msgid "OpenStreetMap Traces" msgstr "" #: ../src/osm-traces.c:234 #, c-format msgid "failed to upload data: HTTP response is %ld" msgstr "" #: ../src/osm-traces.c:239 #, c-format msgid "curl_easy_getinfo failed: %d" msgstr "" #: ../src/osm-traces.c:244 #, c-format msgid "curl request failed: %s" msgstr "" #: ../src/osm-traces.c:275 #, c-format msgid "failed to open temporary file: %s" msgstr "det mislykkedes at åbne midlertidig fil: %s" #. Success #: ../src/osm-traces.c:328 msgid "Uploaded to OSM" msgstr "" #: ../src/osm-traces.c:332 msgid "FAILED TO UPLOAD DATA TO OSM - CURL PROBLEM" msgstr "" #: ../src/osm-traces.c:335 msgid "FAILED TO UPLOAD DATA TO OSM" msgstr "" #: ../src/osm-traces.c:335 msgid "HTTP response code" msgstr "" #: ../src/osm-traces.c:348 #, c-format msgid "failed to unlink temporary file: %s" msgstr "" #: ../src/osm-traces.c:387 msgid "OSM upload" msgstr "" #: ../src/osm-traces.c:405 msgid "Email:" msgstr "E-mail:" #: ../src/osm-traces.c:410 msgid "" "The email used as login\n" "Enter the email you use to login into www.openstreetmap.org." msgstr "" #: ../src/osm-traces.c:418 msgid "" "The password used to login\n" "Enter the password you use to login into " "www.openstreetmap.org." msgstr "" #: ../src/osm-traces.c:423 msgid "File's name:" msgstr "Filens navn:" #: ../src/osm-traces.c:433 msgid "" "The name of the file on OSM\n" "This is the name of the file created on the server.This is not the " "name of the local file." msgstr "" #: ../src/osm-traces.c:442 msgid "The description of the trace" msgstr "" #: ../src/osm-traces.c:444 msgid "Tags:" msgstr "Mærker:" #: ../src/osm-traces.c:449 msgid "The tags associated to the trace" msgstr "" #: ../src/osm-traces.c:482 #, c-format msgid "Uploading %s to OSM" msgstr "" #: ../src/mapcache.c:61 msgid "Map cache memory size (MB):" msgstr "" #: ../src/print.c:53 msgid "None" msgstr "Ingen" #: ../src/print.c:54 msgid "Horizontally" msgstr "Vandret" #: ../src/print.c:55 msgid "Vertically" msgstr "Lodret" #: ../src/print.c:56 msgid "Both" msgstr "Begge" #: ../src/print.c:120 msgid "Image Settings" msgstr "Billedindstillinger" #: ../src/print.c:546 msgid "done" msgstr "færdig" #. Page Size #: ../src/print.c:575 msgid "_Adjust Page Size and Orientation" msgstr "" #: ../src/print.c:591 msgid "C_enter:" msgstr "C_entrum:" #. ignore page margins #: ../src/print.c:609 msgid "Ignore Page _Margins" msgstr "" #: ../src/print.c:628 msgid "Image S_ize:" msgstr "B_illed størrelse:" #: ../src/util.c:81 msgid "Could not launch web browser." msgstr "Kunne ikke starte web browser." #: ../src/util.c:92 msgid "Could not create new email." msgstr "" #: ../src/vikcoordlayer.c:46 msgid "Color:" msgstr "Farve:" #: ../src/vikcoordlayer.c:47 msgid "Minutes Width:" msgstr "" #: ../src/vikcoordlayer.c:48 msgid "Line Thickness:" msgstr "Linjetykkelse:" #: ../src/vikcoordlayer.c:56 msgid "Coordinate" msgstr "" #: ../src/datasource_bfilter.c:46 msgid "Max number of points:" msgstr "" #: ../src/datasource_bfilter.c:60 msgid "Simplify All Tracks..." msgstr "" #: ../src/datasource_bfilter.c:61 msgid "Simplified Tracks" msgstr "" #: ../src/datasource_bfilter.c:96 ../src/datasource_bfilter.c:97 msgid "Remove Duplicate Waypoints" msgstr "" #: ../src/datasource_bfilter.c:129 msgid "Waypoints Inside This" msgstr "" #: ../src/datasource_bfilter.c:130 msgid "Polygonized Layer" msgstr "" #: ../src/datasource_bfilter.c:165 msgid "Waypoints Outside This" msgstr "" #: ../src/datasource_bfilter.c:166 msgid "Polygonzied Layer" msgstr "" #: ../src/main.c:89 #, c-format msgid "Ignoring Xlib error: error code %d request code %d\n" msgstr "" #: ../src/main.c:102 msgid "Enable debug output" msgstr "" #: ../src/main.c:103 msgid "Enable verbose output" msgstr "" #: ../src/main.c:104 msgid "Show version" msgstr "" #: ../src/osm.c:106 msgid "On Disk OSM Tile Format" msgstr "" #: ../src/osm.c:121 msgid "OSM (view)" msgstr "" #: ../src/osm.c:125 msgid "OSM (edit)" msgstr "" #: ../src/osm.c:129 msgid "OSM (render)" msgstr "" #. Example: http://127.0.0.1:8111/load_and_zoom?left=8.19&right=8.20&top=48.605&bottom=48.590&select=node413602999 #. JOSM or merkaartor must already be running with remote interface enabled #: ../src/osm.c:136 msgid "Local port 8111 (eg JOSM)" msgstr "" #: ../src/preferences.c:285 msgid "Preferences" msgstr "" #: ../src/uibuilder.c:147 msgid "Take care that this password will be stored clearly in a plain file." msgstr "" #: ../src/vikaggregatelayer.c:37 msgid "Aggregate" msgstr "" #: ../src/vikdemlayer.c:101 msgid "Absolute height" msgstr "" #: ../src/vikdemlayer.c:102 msgid "Height gradient" msgstr "" #: ../src/vikdemlayer.c:118 msgid "DEM Files:" msgstr "" #: ../src/vikdemlayer.c:119 msgid "Download Source:" msgstr "Download kilde:" #: ../src/vikdemlayer.c:120 msgid "Min Elev Color:" msgstr "" #: ../src/vikdemlayer.c:121 msgid "Type:" msgstr "" #: ../src/vikdemlayer.c:122 msgid "Min Elev:" msgstr "" #: ../src/vikdemlayer.c:123 msgid "Max Elev:" msgstr "" #: ../src/vikdemlayer.c:134 msgid "_DEM Download" msgstr "" #: ../src/vikdemlayer.c:134 msgid "DEM Download" msgstr "" #: ../src/vikdemlayer.c:188 msgid "DEM" msgstr "" #: ../src/vikdemlayer.c:284 #, c-format msgid "Number of files: %d" msgstr "" #: ../src/vikdemlayer.c:385 msgid "DEM Loading" msgstr "" #: ../src/vikdemlayer.c:889 #, c-format msgid "No SRTM data available for %f, %f" msgstr "" #: ../src/vikdemlayer.c:1149 #, c-format msgid "Downloading DEM %s" msgstr "" #: ../src/vikfileentry.c:68 msgid "Browse..." msgstr "Gennemse..." #: ../src/vikfileentry.c:96 msgid "Choose file" msgstr "Vælg fil" #: ../src/vikfilelist.c:48 msgid "Choose file(s)" msgstr "Vælg fil(er)" #: ../src/vikfilelist.c:172 msgid "Add..." msgstr "Tilføj..." #: ../src/vikfilelist.c:173 msgid "Delete" msgstr "Slet" #: ../src/vikgeoreflayer.c:70 msgid "_Georef Move Map" msgstr "" #: ../src/vikgeoreflayer.c:70 msgid "Georef Move Map" msgstr "" #: ../src/vikgeoreflayer.c:77 msgid "Georef Z_oom Tool" msgstr "" #: ../src/vikgeoreflayer.c:77 msgid "Georef Zoom Tool" msgstr "" #: ../src/vikgeoreflayer.c:87 msgid "GeoRef Map" msgstr "" #: ../src/vikgeoreflayer.c:335 ../src/vikmapslayer.c:685 #, c-format msgid "Couldn't open image file: %s" msgstr "Kunne ikke åbne billedfil: %s" #: ../src/vikgeoreflayer.c:365 msgid "Unexpected end of file reading World file." msgstr "" #: ../src/vikgeoreflayer.c:381 ../src/vikgeoreflayer.c:426 msgid "Choose World file" msgstr "Vælg World fil" #: ../src/vikgeoreflayer.c:394 msgid "The World file you requested could not be opened for reading." msgstr "Den World fil som du valgte kunne ikke åbnes og læses." #: ../src/vikgeoreflayer.c:439 msgid "The file you requested could not be opened for writing." msgstr "Den World fil som du valgte kunne ider ikke skives til." #: ../src/vikgeoreflayer.c:456 ../src/viklayer.c:480 msgid "Layer Properties" msgstr "Lag-egenskaber" #: ../src/vikgeoreflayer.c:478 msgid "World File Parameters:" msgstr "World fil parametre:" #: ../src/vikgeoreflayer.c:479 msgid "Load From File..." msgstr "Indlæs fra fil..." #: ../src/vikgeoreflayer.c:484 msgid "Corner pixel easting:" msgstr "" #: ../src/vikgeoreflayer.c:486 msgid "the UTM \"easting\" value of the upper-right corner pixel of the map" msgstr "" #: ../src/vikgeoreflayer.c:488 msgid "Corner pixel northing:" msgstr "" #: ../src/vikgeoreflayer.c:490 msgid "the UTM \"northing\" value of the upper-right corner pixel of the map" msgstr "" #: ../src/vikgeoreflayer.c:492 msgid "X (easting) scale (mpp): " msgstr "" #: ../src/vikgeoreflayer.c:493 msgid "Y (northing) scale (mpp): " msgstr "" #: ../src/vikgeoreflayer.c:496 msgid "the scale of the map in the X direction (meters per pixel)" msgstr "" #: ../src/vikgeoreflayer.c:498 msgid "the scale of the map in the Y direction (meters per pixel)" msgstr "" #: ../src/vikgeoreflayer.c:500 msgid "Map Image:" msgstr "Kort billed:" #. Now with icons #: ../src/vikgeoreflayer.c:608 msgid "_Zoom to Fit Map" msgstr "" #: ../src/vikgeoreflayer.c:614 msgid "_Goto Map Center" msgstr "" #: ../src/vikgeoreflayer.c:620 msgid "_Export to World File" msgstr "" #: ../src/vikgoto.c:75 msgid "No goto tool available." msgstr "" #: ../src/vikgoto.c:88 ../src/vikgoto.c:107 msgid "goto" msgstr "" #: ../src/vikgoto.c:90 msgid "I don't know that place. Do you want another goto?" msgstr "" #: ../src/vikgoto.c:109 msgid "goto provider:" msgstr "" #: ../src/vikgoto.c:124 msgid "Enter address or place name:" msgstr "Angiv adresse eller stedets navn:" #: ../src/vikgpslayer.c:127 msgid "Data Mode" msgstr "" #: ../src/vikgpslayer.c:129 msgid "Realtime Tracking Mode" msgstr "" #: ../src/vikgpslayer.c:137 msgid "Keep vehicle at center" msgstr "" #: ../src/vikgpslayer.c:138 msgid "Keep vehicle on screen" msgstr "" #: ../src/vikgpslayer.c:139 msgid "Disable" msgstr "" #: ../src/vikgpslayer.c:152 msgid "Download Tracks:" msgstr "" #: ../src/vikgpslayer.c:153 msgid "Upload Tracks:" msgstr "" #: ../src/vikgpslayer.c:154 msgid "Download Routes:" msgstr "" #: ../src/vikgpslayer.c:155 msgid "Upload Routes:" msgstr "" #: ../src/vikgpslayer.c:156 msgid "Download Waypoints:" msgstr "" #: ../src/vikgpslayer.c:157 msgid "Upload Waypoints:" msgstr "" #: ../src/vikgpslayer.c:159 msgid "Recording tracks" msgstr "" #: ../src/vikgpslayer.c:160 msgid "Jump to current position on start" msgstr "" #: ../src/vikgpslayer.c:161 msgid "Moving Map Method:" msgstr "" #: ../src/vikgpslayer.c:162 msgid "Gpsd Host:" msgstr "" #: ../src/vikgpslayer.c:163 msgid "Gpsd Port:" msgstr "Gpsd port:" #: ../src/vikgpslayer.c:164 msgid "Gpsd Retry Interval (seconds):" msgstr "" #: ../src/vikgpslayer.c:179 msgid "GPS" msgstr "" #: ../src/vikgpslayer.c:242 ../src/vikgpslayer.c:1258 msgid "GPS Download" msgstr "GPS download" #: ../src/vikgpslayer.c:242 ../src/vikgpslayer.c:1258 #: ../src/viktrwlayer.c:3094 msgid "GPS Upload" msgstr "GPS upload" #: ../src/vikgpslayer.c:244 msgid "GPS Realtime Tracking" msgstr "" #: ../src/vikgpslayer.c:451 msgid "Unknown GPS Protocol" msgstr "Ukendt GPS protekol" #: ../src/vikgpslayer.c:469 msgid "Unknown serial port device" msgstr "" #: ../src/vikgpslayer.c:572 #, c-format msgid "%s: unknown parameter" msgstr "%s: ukendt parameter" #. Now with icons #: ../src/vikgpslayer.c:693 msgid "_Upload to GPS" msgstr "" #: ../src/vikgpslayer.c:699 msgid "Download from _GPS" msgstr "" #: ../src/vikgpslayer.c:720 msgid "Empty _Realtime" msgstr "" #: ../src/vikgpslayer.c:727 msgid "E_mpty Upload" msgstr "" #: ../src/vikgpslayer.c:733 msgid "_Empty Download" msgstr "" #: ../src/vikgpslayer.c:739 msgid "Empty _All" msgstr "" #. #. NB It's not fatal if this gives 2 for example! Hence removal of the g_assert #. This happens when copied GPS layer is deleted (not sure why the number_handlers would be 2) #. I don't think there's any side effects and certainly better than the program just aborting #. #: ../src/vikgpslayer.c:756 #, c-format msgid "Unexpected number of disconnected handlers: %d" msgstr "" #: ../src/vikgpslayer.c:898 #, c-format msgid "Uploading %d waypoint..." msgid_plural "Uploading %d waypoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:899 #, c-format msgid "Uploading %d trackpoint..." msgid_plural "Uploading %d trackpoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:900 #, c-format msgid "Uploading %d routepoint..." msgid_plural "Uploading %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:925 #, c-format msgid "Downloaded %d out of %d waypoint..." msgid_plural "Downloaded %d out of %d waypoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:926 #, c-format msgid "Downloaded %d out of %d trackpoint..." msgid_plural "Downloaded %d out of %d trackpoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:927 #, c-format msgid "Downloaded %d out of %d routepoint..." msgid_plural "Downloaded %d out of %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:932 #, c-format msgid "Uploaded %d out of %d waypoint..." msgid_plural "Uploaded %d out of %d waypoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:933 #, c-format msgid "Uploaded %d out of %d trackpoint..." msgid_plural "Uploaded %d out of %d trackpoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:934 #, c-format msgid "Uploaded %d out of %d routepoint..." msgid_plural "Uploaded %d out of %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:942 #, c-format msgid "Downloaded %d waypoint" msgid_plural "Downloaded %d waypoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:943 #, c-format msgid "Downloaded %d trackpoint" msgid_plural "Downloaded %d trackpoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:944 #, c-format msgid "Downloaded %d routepoint" msgid_plural "Downloaded %d routepoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:949 #, c-format msgid "Uploaded %d waypoint" msgid_plural "Uploaded %d waypoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:950 #, c-format msgid "Uploaded %d trackpoint" msgid_plural "Uploaded %d trackpoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:951 #, c-format msgid "Uploaded %d routepoint" msgid_plural "Uploaded %d routepoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:1180 msgid "Error: couldn't find gpsbabel." msgstr "" #: ../src/vikgpslayer.c:1269 msgid "Warning - GPS Upload items may overwrite each other" msgstr "" #: ../src/vikgpslayer.c:1301 msgid "Status: detecting gpsbabel" msgstr "" #: ../src/vikgpslayer.c:1332 msgid "No GPS items selected for transfer." msgstr "" #: ../src/vikgpslayer.c:1347 msgid "Could not turn off device." msgstr "" #: ../src/vikgpslayer.c:1385 msgid "Are you sure you want to delete GPS Upload data?" msgstr "" #: ../src/vikgpslayer.c:1398 msgid "Are you sure you want to delete GPS Download data?" msgstr "" #: ../src/vikgpslayer.c:1412 msgid "Are you sure you want to delete GPS Realtime data?" msgstr "" #: ../src/vikgpslayer.c:1425 msgid "Are you sure you want to delete All GPS data?" msgstr "" #: ../src/viklayerspanel.c:55 msgid "/C_ut" msgstr "" #: ../src/viklayerspanel.c:56 msgid "/_Copy" msgstr "" #: ../src/viklayerspanel.c:57 msgid "/_Paste" msgstr "" #: ../src/viklayerspanel.c:58 msgid "/_Delete" msgstr "/_Slet" #: ../src/viklayerspanel.c:59 msgid "/New Layer" msgstr "/Nyt lag" #: ../src/viklayerspanel.c:127 msgid "Top Layer" msgstr "Øverste lag" #: ../src/viklayerspanel.c:143 msgid "Add new layer" msgstr "" #: ../src/viklayerspanel.c:150 msgid "Remove selected layer" msgstr "" #: ../src/viklayerspanel.c:157 msgid "Move selected layer up" msgstr "" #: ../src/viklayerspanel.c:164 msgid "Move selected layer down" msgstr "" #: ../src/viklayerspanel.c:171 msgid "Cut selected layer" msgstr "" #: ../src/viklayerspanel.c:178 msgid "Copy selected layer" msgstr "" #: ../src/viklayerspanel.c:185 msgid "Paste layer below selected layer" msgstr "" #. TODO: FIXME: if name has a '/' in it it will get all messed up. why not have an itemfactory field with #. name, icon, shortcut, etc.? #: ../src/viklayerspanel.c:204 ../src/vikwindow.c:3292 #, c-format msgid "New _%s Layer" msgstr "" #: ../src/viklayerspanel.c:511 msgid "Aggregate Layers have no settable properties." msgstr "" #: ../src/viklayerspanel.c:555 msgid "You cannot cut the Top Layer." msgstr "" #: ../src/viklayerspanel.c:600 #, c-format msgid "Are you sure you want to delete %s?" msgstr "" #: ../src/viklayerspanel.c:617 msgid "You cannot delete the Top Layer." msgstr "Du kan ikke slette øverste lag" #: ../src/viklayerspanel.c:701 msgid "Are you sure you wish to delete all layers?" msgstr "er du sikker på at du vil slette alle lag?" #. ******* MAPZOOMS ******** #: ../src/vikmapslayer.c:91 msgid "Use Viking Zoom Level" msgstr "" #: ../src/vikmapslayer.c:124 msgid "Map Type:" msgstr "Kort type:" #: ../src/vikmapslayer.c:125 msgid "Maps Directory:" msgstr "" #: ../src/vikmapslayer.c:126 msgid "Alpha:" msgstr "Alfa:" #: ../src/vikmapslayer.c:127 msgid "Control the Alpha value for transparency effects" msgstr "" #: ../src/vikmapslayer.c:128 msgid "Autodownload maps:" msgstr "Autodownload kort:" #: ../src/vikmapslayer.c:129 msgid "Autodownload Only Gets Missing Maps:" msgstr "" #: ../src/vikmapslayer.c:130 msgid "" "Using this option avoids attempting to update already acquired tiles. This " "can be useful if you want to restrict the network usage, without having to " "resort to manual control. Only applies when 'Autodownload Maps' is on." msgstr "" #: ../src/vikmapslayer.c:131 msgid "Zoom Level:" msgstr "Zoom niveau:" #: ../src/vikmapslayer.c:132 msgid "" "Determines the method of displaying map tiles for the current zoom level. " "'Viking Zoom Level' uses the best matching level, otherwise setting a fixed " "value will always use map tiles of the specified value regardless of the " "actual zoom level." msgstr "" #: ../src/vikmapslayer.c:146 msgid "_Maps Download" msgstr "" #: ../src/vikmapslayer.c:146 msgid "Maps Download" msgstr "Kort downloaded" #: ../src/vikmapslayer.c:161 msgid "Map" msgstr "Kort" #: ../src/vikmapslayer.c:249 msgid "Default maplayer directory:" msgstr "" #: ../src/vikmapslayer.c:249 msgid "Choose a directory to store cached Map tiles for this layer" msgstr "" #: ../src/vikmapslayer.c:505 msgid "Unknown map type" msgstr "Ukendt korttype" #: ../src/vikmapslayer.c:516 msgid "Unknown Map Zoom" msgstr "Ukendt kort zoom" #: ../src/vikmapslayer.c:589 #, c-format msgid "" "New map cannot be displayed in the current drawmode.\n" "Select \"%s\" from View menu to view it." msgstr "" #: ../src/vikmapslayer.c:753 #, c-format msgid "" "Cowardly refusing to draw tiles or existence of tiles beyond %d zoom out " "factor" msgstr "" #: ../src/vikmapslayer.c:1157 #, c-format msgid "Redownloading up to %d %s map..." msgid_plural "Redownloading up to %d %s maps..." msgstr[0] "" msgstr[1] "" #: ../src/vikmapslayer.c:1159 #, c-format msgid "Redownloading %d %s map..." msgid_plural "Redownloading %d %s maps..." msgstr[0] "" msgstr[1] "" #: ../src/vikmapslayer.c:1163 ../src/vikmapslayer.c:1238 #, c-format msgid "Downloading %d %s map..." msgid_plural "Downloading %d %s maps..." msgstr[0] "Downloader %d %s kort..." #: ../src/vikmapslayer.c:1311 #, c-format msgid "" "\n" "Source: %s\n" "\n" "Tile File: %s\n" "Tile File Timestamp: %s" msgstr "" #: ../src/vikmapslayer.c:1318 #, c-format msgid "" "Source: %s\n" "\n" "No Tile File!" msgstr "" #: ../src/vikmapslayer.c:1356 msgid "Redownload _Bad Map(s)" msgstr "" #: ../src/vikmapslayer.c:1360 msgid "Redownload _New Map(s)" msgstr "" #: ../src/vikmapslayer.c:1364 msgid "Redownload _All Map(s)" msgstr "" #: ../src/vikmapslayer.c:1368 msgid "_Show Tile Information" msgstr "" #: ../src/vikmapslayer.c:1449 #, c-format msgid "" "Wrong drawmode for this map.\n" "Select \"%s\" from View menu and try again." msgstr "" #: ../src/vikmapslayer.c:1454 msgid "Wrong zoom level for this map." msgstr "Forkert zoom niveau for dette kort." #. Now with icons #: ../src/vikmapslayer.c:1485 msgid "Download _Missing Onscreen Maps" msgstr "" #: ../src/vikmapslayer.c:1492 msgid "Download _New Onscreen Maps" msgstr "" #: ../src/vikmapslayer.c:1499 msgid "Reload _All Onscreen Maps" msgstr "" #: ../src/viktreeview.c:263 msgid "Layer Name" msgstr "Navn på lag" #: ../src/viktreeview.c:742 #, c-format msgid "delete data from %s\n" msgstr "slet data fra %s\n" #: ../src/viktrwlayer.c:377 msgid "Create _Waypoint" msgstr "" #: ../src/viktrwlayer.c:377 msgid "Create Waypoint" msgstr "" #: ../src/viktrwlayer.c:383 msgid "Create _Track" msgstr "" #: ../src/viktrwlayer.c:383 msgid "Create Track" msgstr "" #: ../src/viktrwlayer.c:392 msgid "Create _Route" msgstr "" #: ../src/viktrwlayer.c:392 msgid "Create Route" msgstr "" #: ../src/viktrwlayer.c:401 msgid "_Edit Waypoint" msgstr "" #: ../src/viktrwlayer.c:401 msgid "Edit Waypoint" msgstr "" #: ../src/viktrwlayer.c:409 msgid "Edit Trac_kpoint" msgstr "" #: ../src/viktrwlayer.c:409 msgid "Edit Trackpoint" msgstr "" #: ../src/viktrwlayer.c:417 msgid "Show P_icture" msgstr "" #: ../src/viktrwlayer.c:417 msgid "Show Picture" msgstr "Vis billed" #: ../src/viktrwlayer.c:424 msgid "Route _Finder" msgstr "" #: ../src/viktrwlayer.c:424 msgid "Route Finder" msgstr "" #. ***** PARAMETERS ***** #: ../src/viktrwlayer.c:447 ../src/viktrwlayer.c:1942 #: ../src/viktrwlayer.c:1944 msgid "Waypoints" msgstr "" #: ../src/viktrwlayer.c:447 ../src/viktrwlayer.c:1933 #: ../src/viktrwlayer.c:1935 msgid "Tracks" msgstr "Spor" #: ../src/viktrwlayer.c:447 msgid "Waypoint Images" msgstr "" #: ../src/viktrwlayer.c:450 msgid "Draw by Track" msgstr "" #: ../src/viktrwlayer.c:450 msgid "Draw by Speed" msgstr "" #: ../src/viktrwlayer.c:450 msgid "All Tracks Same Color" msgstr "" #: ../src/viktrwlayer.c:451 msgid "Filled Square" msgstr "" #: ../src/viktrwlayer.c:451 msgid "Square" msgstr "Kvadrat" #: ../src/viktrwlayer.c:451 msgid "Circle" msgstr "Cirkel" #: ../src/viktrwlayer.c:451 msgid "X" msgstr "X" #: ../src/viktrwlayer.c:477 msgid "Extra Extra Small" msgstr "" #: ../src/viktrwlayer.c:478 msgid "Extra Small" msgstr "" #: ../src/viktrwlayer.c:479 msgid "Small" msgstr "" #: ../src/viktrwlayer.c:480 msgid "Medium" msgstr "" #: ../src/viktrwlayer.c:481 msgid "Large" msgstr "" #: ../src/viktrwlayer.c:482 msgid "Extra Large" msgstr "" #: ../src/viktrwlayer.c:483 msgid "Extra Extra Large" msgstr "" #: ../src/viktrwlayer.c:491 msgid "Track Drawing Mode:" msgstr "" #: ../src/viktrwlayer.c:492 msgid "All Tracks Color:" msgstr "" #: ../src/viktrwlayer.c:493 msgid "The color used when 'All Tracks Same Color' drawing mode is selected" msgstr "" #: ../src/viktrwlayer.c:494 msgid "Draw Track Lines" msgstr "" #: ../src/viktrwlayer.c:495 msgid "Track Thickness:" msgstr "Spor tykkelse:" #: ../src/viktrwlayer.c:496 msgid "Draw Track Direction" msgstr "" #: ../src/viktrwlayer.c:497 msgid "Direction Size:" msgstr "" #: ../src/viktrwlayer.c:498 msgid "Draw Trackpoints" msgstr "" #: ../src/viktrwlayer.c:499 msgid "Trackpoint Size:" msgstr "" #: ../src/viktrwlayer.c:500 msgid "Draw Elevation" msgstr "" #: ../src/viktrwlayer.c:501 msgid "Draw Elevation Height %:" msgstr "" #: ../src/viktrwlayer.c:503 msgid "Draw Stops" msgstr "" #: ../src/viktrwlayer.c:504 msgid "" "Whether to draw a marker when trackpoints are at the same position but over " "the minimum stop length apart in time" msgstr "" #: ../src/viktrwlayer.c:505 msgid "Min Stop Length (seconds):" msgstr "" #: ../src/viktrwlayer.c:507 msgid "Track BG Thickness:" msgstr "" #: ../src/viktrwlayer.c:508 msgid "Track Background Color" msgstr "Spor baggrundsfarve" #: ../src/viktrwlayer.c:509 msgid "Draw by Speed Factor (%):" msgstr "" #: ../src/viktrwlayer.c:510 msgid "" "The percentage factor away from the average speed determining the color used" msgstr "" #: ../src/viktrwlayer.c:512 msgid "Draw Labels" msgstr "" #: ../src/viktrwlayer.c:513 msgid "Waypoint Font Size:" msgstr "" #: ../src/viktrwlayer.c:514 msgid "Waypoint Color:" msgstr "" #: ../src/viktrwlayer.c:515 msgid "Waypoint Text:" msgstr "" #: ../src/viktrwlayer.c:516 msgid "Background:" msgstr "Baggrund:" #: ../src/viktrwlayer.c:517 msgid "Fake BG Color Translucency:" msgstr "" #: ../src/viktrwlayer.c:518 msgid "Waypoint marker:" msgstr "" #: ../src/viktrwlayer.c:519 msgid "Waypoint size:" msgstr "" #: ../src/viktrwlayer.c:520 msgid "Draw Waypoint Symbols:" msgstr "" #: ../src/viktrwlayer.c:522 msgid "Draw Waypoint Images" msgstr "" #: ../src/viktrwlayer.c:523 msgid "Image Size (pixels):" msgstr "Billed størrelse (pixels):Alfa billed:" #: ../src/viktrwlayer.c:524 msgid "Image Alpha:" msgstr "" #: ../src/viktrwlayer.c:525 msgid "Image Memory Cache Size:" msgstr "" #: ../src/viktrwlayer.c:610 msgid "TrackWaypoint" msgstr "" #: ../src/viktrwlayer.c:1951 ../src/viktrwlayer.c:1953 msgid "Routes" msgstr "" #: ../src/viktrwlayer.c:2144 #, c-format msgid " in %d:%02d hrs:mins" msgstr "" #: ../src/viktrwlayer.c:2148 #, c-format msgid "" "\n" "%sTotal Length %.1f %s%s" msgstr "" #: ../src/viktrwlayer.c:2154 #, c-format msgid "Tracks: %d - Waypoints: %d - Routes: %d%s" msgstr "" #: ../src/viktrwlayer.c:2174 #, c-format msgid "Tracks: %d" msgstr "" #: ../src/viktrwlayer.c:2184 #, c-format msgid "Routes: %d" msgstr "" #: ../src/viktrwlayer.c:2215 #, c-format msgid "- %d:%02d hrs:mins" msgstr "" #: ../src/viktrwlayer.c:2223 #, c-format msgid "%s%.1f km %s" msgstr "" #: ../src/viktrwlayer.c:2226 #, c-format msgid "%s%.1f miles %s" msgstr "" #: ../src/viktrwlayer.c:2240 #, c-format msgid "Waypoints: %d" msgstr "" #: ../src/viktrwlayer.c:2266 #, c-format msgid "Trkpt: Alt %dft" msgstr "" #. VIK_UNITS_HEIGHT_METRES: #: ../src/viktrwlayer.c:2270 #, c-format msgid "Trkpt: Alt %dm" msgstr "" #. Compact date time format #: ../src/viktrwlayer.c:2277 #, c-format msgid " | Time %x %X" msgstr "" #: ../src/viktrwlayer.c:2295 #, c-format msgid " | Track: %s" msgstr "" #. Combine parts to make overall message #: ../src/viktrwlayer.c:2299 #, c-format msgid "%s%s | %s %s %s" msgstr "" #: ../src/viktrwlayer.c:2314 #, c-format msgid "Wpt: Alt %dft" msgstr "" #. VIK_UNITS_HEIGHT_METRES: #: ../src/viktrwlayer.c:2318 #, c-format msgid "Wpt: Alt %dm" msgstr "" #. Add comment if available #: ../src/viktrwlayer.c:2333 #, c-format msgid "%s | %s %s | Comment: %s" msgstr "" #: ../src/viktrwlayer.c:2335 #, c-format msgid "%s | %s %s" msgstr "" #: ../src/viktrwlayer.c:2563 ../src/viktrwlayer.c:2634 msgid "This layer has no waypoints or trackpoints." msgstr "" #: ../src/viktrwlayer.c:2661 ../src/vikwindow.c:2407 ../src/vikwindow.c:2848 #, c-format msgid "The file \"%s\" exists, do you wish to overwrite it?" msgstr "Filen \"%s\" eksisterer, ønsker du at overskrive den?" #: ../src/viktrwlayer.c:2671 ../src/vikwindow.c:2429 msgid "The filename you requested could not be opened for writing." msgstr "Filnavnet du anmodede om kunne ikke åbnes til skrivning." #: ../src/viktrwlayer.c:2676 ../src/viktrwlayer.c:2681 #: ../src/viktrwlayer.c:2691 ../src/viktrwlayer.c:2703 msgid "Export Layer" msgstr "Eksportér lag" #: ../src/viktrwlayer.c:2720 msgid "Could not create temporary file for export." msgstr "" #: ../src/viktrwlayer.c:2729 #, c-format msgid "Could not launch %s." msgstr "" #: ../src/viktrwlayer.c:2773 msgid "Export Track as GPX" msgstr "" #: ../src/viktrwlayer.c:2795 msgid "Find" msgstr "" #: ../src/viktrwlayer.c:2805 msgid "Waypoint Name:" msgstr "" #: ../src/viktrwlayer.c:2822 msgid "Waypoint not found in this layer." msgstr "" #: ../src/viktrwlayer.c:3090 msgid "Can not upload invisible track." msgstr "" #: ../src/viktrwlayer.c:3192 ../src/viktrwlayer.c:7785 msgid "Track" msgstr "" #: ../src/viktrwlayer.c:3215 ../src/viktrwlayer.c:7817 msgid "Route" msgstr "" #: ../src/viktrwlayer.c:3296 ../src/viktrwlayer.c:6265 #: ../src/viktrwlayer.c:6314 msgid "_Finish Route" msgstr "" #: ../src/viktrwlayer.c:3298 ../src/viktrwlayer.c:6223 #: ../src/viktrwlayer.c:6312 msgid "_Finish Track" msgstr "" #. Now with icons #: ../src/viktrwlayer.c:3310 msgid "_View Layer" msgstr "" #: ../src/viktrwlayer.c:3317 msgid "V_iew" msgstr "" #: ../src/viktrwlayer.c:3323 msgid "View All _Tracks" msgstr "" #: ../src/viktrwlayer.c:3328 msgid "View All _Routes" msgstr "" #: ../src/viktrwlayer.c:3333 msgid "View All _Waypoints" msgstr "" #: ../src/viktrwlayer.c:3338 msgid "_Goto Center of Layer" msgstr "" #: ../src/viktrwlayer.c:3344 ../src/viktrwlayer.c:6199 msgid "Goto _Waypoint..." msgstr "" #: ../src/viktrwlayer.c:3350 msgid "_Export Layer" msgstr "" #: ../src/viktrwlayer.c:3356 msgid "Export as GPS_Point..." msgstr "" #: ../src/viktrwlayer.c:3361 msgid "Export as GPS_Mapper..." msgstr "" #: ../src/viktrwlayer.c:3366 msgid "Export as _GPX..." msgstr "" #: ../src/viktrwlayer.c:3371 msgid "Export as _KML..." msgstr "" #: ../src/viktrwlayer.c:3376 msgid "Open with External Program_1: " msgstr "" #: ../src/viktrwlayer.c:3383 msgid "Open with External Program_2: " msgstr "" #: ../src/viktrwlayer.c:3391 ../src/vikwindow.c:3145 msgid "_New" msgstr "_Ny" #: ../src/viktrwlayer.c:3397 msgid "New _Waypoint..." msgstr "" #: ../src/viktrwlayer.c:3403 msgid "New _Track" msgstr "" #: ../src/viktrwlayer.c:3411 msgid "New _Route" msgstr "" #: ../src/viktrwlayer.c:3420 ../src/viktrwlayer.c:6597 msgid "Geotag _Images..." msgstr "" #: ../src/viktrwlayer.c:3427 msgid "_Acquire" msgstr "" #: ../src/viktrwlayer.c:3433 ../src/vikwindow.c:3150 msgid "From _GPS..." msgstr "Fra _GPS..." #: ../src/viktrwlayer.c:3439 msgid "From Google _Directions..." msgstr "" #: ../src/viktrwlayer.c:3446 msgid "From _OSM Traces..." msgstr "" #: ../src/viktrwlayer.c:3451 msgid "From _My OSM Traces..." msgstr "" #: ../src/viktrwlayer.c:3459 ../src/vikwindow.c:3166 msgid "From _Wikipedia Waypoints" msgstr "" #: ../src/viktrwlayer.c:3465 msgid "Within _Layer Bounds" msgstr "" #: ../src/viktrwlayer.c:3471 msgid "Within _Current View" msgstr "" #: ../src/viktrwlayer.c:3479 msgid "From Geo_caching..." msgstr "" #: ../src/viktrwlayer.c:3486 ../src/vikwindow.c:3163 msgid "From Geotagged _Images..." msgstr "" #: ../src/viktrwlayer.c:3492 msgid "From _File..." msgstr "" #: ../src/viktrwlayer.c:3498 ../src/viktrwlayer.c:6542 msgid "_Upload" msgstr "" #: ../src/viktrwlayer.c:3504 msgid "Upload to _GPS..." msgstr "" #: ../src/viktrwlayer.c:3511 ../src/viktrwlayer.c:6570 msgid "Upload to _OSM..." msgstr "" #: ../src/viktrwlayer.c:3519 msgid "De_lete" msgstr "" #: ../src/viktrwlayer.c:3525 msgid "Delete All _Tracks" msgstr "" #: ../src/viktrwlayer.c:3531 msgid "Delete Tracks _From Selection..." msgstr "" #: ../src/viktrwlayer.c:3537 ../src/viktrwlayer.c:6290 msgid "Delete _All Routes" msgstr "" #: ../src/viktrwlayer.c:3543 ../src/viktrwlayer.c:6296 msgid "_Delete Routes From Selection..." msgstr "" #: ../src/viktrwlayer.c:3549 msgid "Delete All _Waypoints" msgstr "" #: ../src/viktrwlayer.c:3555 msgid "Delete Waypoints From _Selection..." msgstr "" #: ../src/viktrwlayer.c:4128 #, c-format msgid "Are you sure you want to delete all tracks in %s?" msgstr "" #: ../src/viktrwlayer.c:4138 #, c-format msgid "Are you sure you want to delete all routes in %s?" msgstr "" #: ../src/viktrwlayer.c:4148 #, c-format msgid "Are you sure you want to delete all waypoints in %s?" msgstr "" #: ../src/viktrwlayer.c:4165 #, c-format msgid "Are you sure you want to delete the waypoint \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4178 #, c-format msgid "Are you sure you want to delete the track \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4191 #, c-format msgid "Are you sure you want to delete the route \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4351 ../src/viktrwlayer.c:4922 msgid "" "Converting a track to a route removes extra track data such as segments, " "timestamps, etc...\n" "Do you want to continue?" msgstr "" #: ../src/viktrwlayer.c:4711 msgid "Failed. No other tracks with timestamps in this layer found" msgstr "" #: ../src/viktrwlayer.c:4713 msgid "Failed. No other tracks without timestamps in this layer found" msgstr "" #: ../src/viktrwlayer.c:4732 msgid "Merge with..." msgstr "" #: ../src/viktrwlayer.c:4733 msgid "Select route to merge with" msgstr "" #: ../src/viktrwlayer.c:4733 msgid "Select track to merge with" msgstr "" #: ../src/viktrwlayer.c:4818 ../src/viktrwlayer.c:4895 msgid "Append Route" msgstr "" #: ../src/viktrwlayer.c:4818 ../src/viktrwlayer.c:4895 msgid "Append Track" msgstr "" #: ../src/viktrwlayer.c:4819 msgid "Select the route to append after the current route" msgstr "" #: ../src/viktrwlayer.c:4820 msgid "Select the track to append after the current track" msgstr "" #: ../src/viktrwlayer.c:4896 msgid "Select the track to append after the current route" msgstr "" #: ../src/viktrwlayer.c:4897 msgid "Select the route to append after the current track" msgstr "" #: ../src/viktrwlayer.c:4957 #, c-format msgid "%d segment merged" msgid_plural "%d segments merged" msgstr[0] "" msgstr[1] "" #: ../src/viktrwlayer.c:4973 msgid "Failed. This track does not have timestamp" msgstr "" #: ../src/viktrwlayer.c:4985 msgid "Failed. No other track in this layer has timestamp" msgstr "" #: ../src/viktrwlayer.c:4992 msgid "Merge Threshold..." msgstr "" #: ../src/viktrwlayer.c:4993 msgid "Merge when time between tracks less than:" msgstr "" #: ../src/viktrwlayer.c:5128 msgid "Split Threshold..." msgstr "" #: ../src/viktrwlayer.c:5129 msgid "Split when time between trackpoints exceeds:" msgstr "" #: ../src/viktrwlayer.c:5205 msgid "Split Every Nth Point" msgstr "" #: ../src/viktrwlayer.c:5206 msgid "Split on every Nth point:" msgstr "" #: ../src/viktrwlayer.c:5312 msgid "Can not split track as it has no segments" msgstr "" #: ../src/viktrwlayer.c:5340 ../src/viktrwlayer.c:5370 #, c-format msgid "Deleted %ld point" msgid_plural "Deleted %ld points" msgstr[0] "" msgstr[1] "" #: ../src/viktrwlayer.c:5531 msgid "Internal Error in vik_trw_layer_uniquify_tracks" msgstr "" #: ../src/viktrwlayer.c:5588 ../src/viktrwlayer.c:5635 #: ../src/viktrwlayer.c:5814 msgid "" "Multiple entries with the same name exist. This method only works with " "unique names. Force unique names now?" msgstr "" #: ../src/viktrwlayer.c:5599 msgid "No tracks found" msgstr "" #: ../src/viktrwlayer.c:5607 ../src/viktrwlayer.c:5654 #: ../src/viktrwlayer.c:5834 msgid "Delete Selection" msgstr "" #: ../src/viktrwlayer.c:5608 msgid "Select tracks to delete" msgstr "" #: ../src/viktrwlayer.c:5646 msgid "No routes found" msgstr "" #: ../src/viktrwlayer.c:5655 msgid "Select routes to delete" msgstr "" #: ../src/viktrwlayer.c:5761 msgid "Internal Error in vik_trw_layer_uniquify_waypoints" msgstr "" #: ../src/viktrwlayer.c:5824 msgid "No waypoints found" msgstr "" #: ../src/viktrwlayer.c:5835 msgid "Select waypoints to delete" msgstr "" #: ../src/viktrwlayer.c:5896 #, c-format msgid "" "A waypoint with the name \"%s\" already exists. Really rename to the same " "name?" msgstr "" #: ../src/viktrwlayer.c:5926 #, c-format msgid "" "A track with the name \"%s\" already exists. Really rename to the same name?" msgstr "" #: ../src/viktrwlayer.c:5963 #, c-format msgid "" "A route with the name \"%s\" already exists. Really rename to the same name?" msgstr "" #: ../src/viktrwlayer.c:6085 ../src/viktrwlayer.c:6337 msgid "_Goto" msgstr "" #: ../src/viktrwlayer.c:6104 msgid "_Visit Geocache Webpage" msgstr "" #: ../src/viktrwlayer.c:6123 msgid "_Show Picture..." msgstr "" #: ../src/viktrwlayer.c:6131 msgid "Update Geotag on _Image" msgstr "" #: ../src/viktrwlayer.c:6137 msgid "_Update" msgstr "" #: ../src/viktrwlayer.c:6142 msgid "Update and _Keep File Timestamp" msgstr "" #: ../src/viktrwlayer.c:6153 msgid "Visit _Webpage" msgstr "" #: ../src/viktrwlayer.c:6184 msgid "_New Waypoint..." msgstr "" #: ../src/viktrwlayer.c:6193 msgid "_View All Waypoints" msgstr "" #: ../src/viktrwlayer.c:6205 msgid "Delete _All Waypoints" msgstr "" #: ../src/viktrwlayer.c:6211 msgid "_Delete Waypoints From Selection..." msgstr "" #: ../src/viktrwlayer.c:6233 msgid "_View All Tracks" msgstr "" #: ../src/viktrwlayer.c:6239 msgid "_New Track" msgstr "" #: ../src/viktrwlayer.c:6247 msgid "Delete _All Tracks" msgstr "" #: ../src/viktrwlayer.c:6253 msgid "_Delete Tracks From Selection..." msgstr "" #: ../src/viktrwlayer.c:6276 msgid "_View All Routes" msgstr "" #: ../src/viktrwlayer.c:6282 msgid "_New Route" msgstr "" #: ../src/viktrwlayer.c:6327 msgid "_View Track" msgstr "" #: ../src/viktrwlayer.c:6329 msgid "_View Route" msgstr "" #: ../src/viktrwlayer.c:6343 msgid "_Startpoint" msgstr "" #: ../src/viktrwlayer.c:6349 msgid "\"_Center\"" msgstr "" #: ../src/viktrwlayer.c:6355 msgid "_Endpoint" msgstr "" #: ../src/viktrwlayer.c:6361 msgid "_Highest Altitude" msgstr "" #: ../src/viktrwlayer.c:6367 msgid "_Lowest Altitude" msgstr "" #: ../src/viktrwlayer.c:6375 msgid "_Maximum Speed" msgstr "" #: ../src/viktrwlayer.c:6384 msgid "Co_mbine" msgstr "" #: ../src/viktrwlayer.c:6392 msgid "_Merge By Time..." msgstr "" #: ../src/viktrwlayer.c:6397 msgid "Merge _Segments" msgstr "" #: ../src/viktrwlayer.c:6403 msgid "Merge _With Other Tracks..." msgstr "" #: ../src/viktrwlayer.c:6409 msgid "_Append Track..." msgstr "" #: ../src/viktrwlayer.c:6411 msgid "_Append Route..." msgstr "" #: ../src/viktrwlayer.c:6417 msgid "Append _Route..." msgstr "" #: ../src/viktrwlayer.c:6419 msgid "Append _Track..." msgstr "" #: ../src/viktrwlayer.c:6426 msgid "_Split" msgstr "" #: ../src/viktrwlayer.c:6434 msgid "_Split By Time..." msgstr "" #. ATM always enable this entry - don't want to have to analyse the track before displaying the menu - to keep the menu speedy #: ../src/viktrwlayer.c:6440 msgid "Split Se_gments" msgstr "" #: ../src/viktrwlayer.c:6446 msgid "Split By _Number of Points..." msgstr "" #: ../src/viktrwlayer.c:6451 msgid "Split at _Trackpoint" msgstr "" #: ../src/viktrwlayer.c:6460 msgid "Delete Poi_nts" msgstr "" #: ../src/viktrwlayer.c:6466 msgid "Delete Points With The Same _Position" msgstr "" #: ../src/viktrwlayer.c:6471 msgid "Delete Points With The Same _Time" msgstr "" #: ../src/viktrwlayer.c:6477 msgid "_Reverse Track" msgstr "" #: ../src/viktrwlayer.c:6479 msgid "_Reverse Route" msgstr "" #: ../src/viktrwlayer.c:6488 msgid "Down_load Maps Along Track..." msgstr "" #: ../src/viktrwlayer.c:6490 msgid "Down_load Maps Along Route..." msgstr "" #: ../src/viktrwlayer.c:6497 msgid "_Apply DEM Data" msgstr "" #: ../src/viktrwlayer.c:6504 msgid "_Export Track as GPX..." msgstr "" #: ../src/viktrwlayer.c:6506 msgid "_Export Route as GPX..." msgstr "" #: ../src/viktrwlayer.c:6513 msgid "E_xtend Track End" msgstr "" #: ../src/viktrwlayer.c:6515 msgid "E_xtend Route End" msgstr "" #: ../src/viktrwlayer.c:6522 msgid "C_onvert to a Route" msgstr "" #: ../src/viktrwlayer.c:6524 msgid "C_onvert to a Track" msgstr "" #: ../src/viktrwlayer.c:6532 msgid "Extend _Using Route Finder" msgstr "" #: ../src/viktrwlayer.c:6548 msgid "_Upload to GPS..." msgstr "" #: ../src/viktrwlayer.c:6559 msgid "_View Google Directions" msgstr "" #: ../src/viktrwlayer.c:6579 msgid "Use with _Filter" msgstr "" #: ../src/viktrwlayer.c:6612 msgid "_Edit Trackpoint" msgstr "" #: ../src/viktrwlayer.c:7524 #, c-format msgid " - Gain %dm:Loss %dm" msgstr "" #: ../src/viktrwlayer.c:7526 #, c-format msgid " - Gain %dft:Loss %dft" msgstr "" #: ../src/viktrwlayer.c:7531 #, c-format msgid " - Bearing %3.1f° - Step %s" msgstr "" #: ../src/viktrwlayer.c:8124 #, c-format msgid "Could not launch %s to open file." msgstr "" #: ../src/viktrwlayer.c:8205 #, c-format msgid "Creating %d Image Thumbnails..." msgstr "" #: ../src/viktrwlayer.c:8524 msgid "No map layer in use. Create one first" msgstr "Ingen kortlag i brug. Skab en først" #: ../src/viktrwlayer_propwin.c:898 ../src/viktrwlayer_propwin.c:1155 #, c-format msgid "%.1f kph" msgstr "" #: ../src/viktrwlayer_propwin.c:901 ../src/viktrwlayer_propwin.c:1158 #, c-format msgid "%.1f mph" msgstr "" #: ../src/viktrwlayer_propwin.c:904 ../src/viktrwlayer_propwin.c:1161 #, c-format msgid "%.1f knots" msgstr "" #. VIK_UNITS_SPEED_METRES_PER_SECOND: #: ../src/viktrwlayer_propwin.c:908 ../src/viktrwlayer_propwin.c:1165 #, c-format msgid "%.1f m/s" msgstr "" #: ../src/viktrwlayer_propwin.c:1745 #, c-format msgid "%.1f miles" msgstr "" #: ../src/viktrwlayer_propwin.c:1747 #, c-format msgid "%.1f km" msgstr "" #: ../src/viktrwlayer_propwin.c:2681 msgid "Failed spliting track. Track unchanged" msgstr "" #: ../src/viktrwlayer_propwin.c:2779 ../src/viktrwlayer_propwin.c:3178 #, c-format msgid "%s - Track Properties" msgstr "" #: ../src/viktrwlayer_propwin.c:2784 msgid "Split at _Marker" msgstr "" #: ../src/viktrwlayer_propwin.c:2785 msgid "Split _Segments" msgstr "" #: ../src/viktrwlayer_propwin.c:2786 msgid "_Reverse" msgstr "" #: ../src/viktrwlayer_propwin.c:2787 msgid "_Delete Dupl." msgstr "" #: ../src/viktrwlayer_propwin.c:2813 msgid "Comment:" msgstr "Kommentar:" #: ../src/viktrwlayer_propwin.c:2814 msgid "Description:" msgstr "" #: ../src/viktrwlayer_propwin.c:2815 msgid "Track Length:" msgstr "Spor længde:" #: ../src/viktrwlayer_propwin.c:2816 msgid "Trackpoints:" msgstr "" #: ../src/viktrwlayer_propwin.c:2817 msgid "Segments:" msgstr "" #: ../src/viktrwlayer_propwin.c:2818 msgid "Duplicate Points:" msgstr "" #: ../src/viktrwlayer_propwin.c:2819 msgid "Max Speed:" msgstr "Max hastighed:" #: ../src/viktrwlayer_propwin.c:2820 msgid "Avg. Speed:" msgstr "Gennemsnitlig hastighed:" #: ../src/viktrwlayer_propwin.c:2821 msgid "Moving Avg. Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:2822 msgid "Avg. Dist. Between TPs:" msgstr "" #: ../src/viktrwlayer_propwin.c:2823 msgid "Elevation Range:" msgstr "" #: ../src/viktrwlayer_propwin.c:2824 msgid "Total Elevation Gain/Loss:" msgstr "" #: ../src/viktrwlayer_propwin.c:2825 msgid "Start:" msgstr "Start:" #: ../src/viktrwlayer_propwin.c:2826 msgid "End:" msgstr "Slut:" #: ../src/viktrwlayer_propwin.c:2827 msgid "Duration:" msgstr "Varighed:" #: ../src/viktrwlayer_propwin.c:2828 msgid "Color:" msgstr "" #: ../src/viktrwlayer_propwin.c:2877 ../src/viktrwlayer_propwin.c:2901 #: ../src/viktrwlayer_propwin.c:2929 ../src/viktrwlayer_propwin.c:2966 #: ../src/viktrwlayer_propwin.c:2984 ../src/viktrwlayer_propwin.c:3034 #: ../src/viktrwlayer_propwin.c:3035 ../src/viktrwlayer_propwin.c:3036 #: ../src/viktrwlayer_propwin.c:3062 ../src/viktrwlayer_propwin.c:3063 #: ../src/viktrwlayer_propwin.c:3078 ../src/viktrwlayer_propwin.c:3079 #: ../src/viktrwlayer_propwin.c:3092 ../src/viktrwlayer_propwin.c:3093 #: ../src/viktrwlayer_propwin.c:3106 ../src/viktrwlayer_propwin.c:3107 #: ../src/viktrwlayer_propwin.c:3120 ../src/viktrwlayer_propwin.c:3121 #: ../src/viktrwlayer_propwin.c:3134 ../src/viktrwlayer_propwin.c:3135 #, c-format msgid "No Data" msgstr "Ingen data" #: ../src/viktrwlayer_propwin.c:3031 #, c-format msgid "%d minutes" msgstr "%d minutter" #: ../src/viktrwlayer_propwin.c:3058 msgid "Statistics" msgstr "" #: ../src/viktrwlayer_propwin.c:3064 msgid "Show D_EM" msgstr "" #: ../src/viktrwlayer_propwin.c:3065 ../src/viktrwlayer_propwin.c:3080 #: ../src/viktrwlayer_propwin.c:3094 ../src/viktrwlayer_propwin.c:3136 msgid "Show _GPS Speed" msgstr "" #: ../src/viktrwlayer_propwin.c:3067 ../src/viktrwlayer_propwin.c:3082 #: ../src/viktrwlayer_propwin.c:3110 ../src/viktrwlayer_propwin.c:3138 msgid "Track Distance:" msgstr "" #: ../src/viktrwlayer_propwin.c:3068 ../src/viktrwlayer_propwin.c:3125 msgid "Track Height:" msgstr "" #: ../src/viktrwlayer_propwin.c:3073 msgid "Elevation-distance" msgstr "" #: ../src/viktrwlayer_propwin.c:3083 msgid "Track Gradient:" msgstr "" #: ../src/viktrwlayer_propwin.c:3087 msgid "Gradient-distance" msgstr "" #: ../src/viktrwlayer_propwin.c:3096 ../src/viktrwlayer_propwin.c:3111 #: ../src/viktrwlayer_propwin.c:3124 msgid "Track Time:" msgstr "" #: ../src/viktrwlayer_propwin.c:3097 ../src/viktrwlayer_propwin.c:3139 msgid "Track Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:3101 msgid "Speed-time" msgstr "Hastighed-tid" #: ../src/viktrwlayer_propwin.c:3108 ../src/viktrwlayer_propwin.c:3122 msgid "Show S_peed" msgstr "" #: ../src/viktrwlayer_propwin.c:3115 msgid "Distance-time" msgstr "" #: ../src/viktrwlayer_propwin.c:3129 msgid "Elevation-time" msgstr "" #: ../src/viktrwlayer_propwin.c:3143 msgid "Speed-distance" msgstr "" #: ../src/viktrwlayer_tpwin.c:118 msgid "Part of Track:" msgstr "Del af spor:" #: ../src/viktrwlayer_tpwin.c:119 msgid "Latitude:" msgstr "" #: ../src/viktrwlayer_tpwin.c:120 msgid "Longitude:" msgstr "" #: ../src/viktrwlayer_tpwin.c:121 msgid "Altitude:" msgstr "" #: ../src/viktrwlayer_tpwin.c:122 msgid "Timestamp:" msgstr "Tidsstempel:" #: ../src/viktrwlayer_tpwin.c:123 msgid "Time:" msgstr "Tid:" #: ../src/viktrwlayer_tpwin.c:124 msgid "Distance Difference:" msgstr "Afstandsforskel:" #: ../src/viktrwlayer_tpwin.c:125 msgid "Time Difference:" msgstr "Tidsforskel:" #: ../src/viktrwlayer_tpwin.c:126 msgid "\"Speed\" Between:" msgstr "\"Hastighed\" mellem:" #: ../src/viktrwlayer_tpwin.c:127 msgid "VDOP:" msgstr "" #: ../src/viktrwlayer_tpwin.c:128 msgid "HDOP:" msgstr "" #: ../src/viktrwlayer_tpwin.c:129 msgid "PDOP:" msgstr "" #: ../src/viktrwlayer_tpwin.c:130 msgid "SAT/FIX:" msgstr "" #: ../src/viktrwlayer_tpwin.c:139 msgid "Trackpoint" msgstr "" #: ../src/viktrwlayer_tpwin.c:142 msgid "_Insert After" msgstr "" #: ../src/viktrwlayer_tpwin.c:144 msgid "Split Here" msgstr "Opdel her" #: ../src/viktrwlayer_geotag.c:446 #, c-format msgid "Geotagging %d Images..." msgstr "" #: ../src/viktrwlayer_geotag.c:510 msgid "Geotag Images" msgstr "" #: ../src/viktrwlayer_geotag.c:516 msgid "Images" msgstr "" #: ../src/viktrwlayer_geotag.c:520 msgid "Overwrite Existing Waypoints:" msgstr "" #: ../src/viktrwlayer_geotag.c:523 msgid "Overwrite Existing GPS Information:" msgstr "" #: ../src/viktrwlayer_geotag.c:525 msgid "Keep File Modification Timestamp:" msgstr "" #: ../src/viktrwlayer_geotag.c:555 msgid "Create Waypoints:" msgstr "" #: ../src/viktrwlayer_geotag.c:563 msgid "Write EXIF:" msgstr "" #: ../src/viktrwlayer_geotag.c:575 msgid "Interpolate Between Track Segments:" msgstr "" #: ../src/viktrwlayer_geotag.c:579 msgid "Image Time Offset (Seconds):" msgstr "" #: ../src/viktrwlayer_geotag.c:581 msgid "" "The number of seconds to ADD to the photos time to make it match the GPS " "data. Calculate this with (GPS - Photo). Can be negative or positive. Useful " "to adjust times when a camera's timestamp was incorrect." msgstr "" #: ../src/viktrwlayer_geotag.c:584 msgid "Image Timezone:" msgstr "" #: ../src/viktrwlayer_geotag.c:586 msgid "" "The timezone that was used when the images were created. For example, if a " "camera is set to AWST or +8:00 hours. Enter +8:00 here so that the correct " "adjustment to the images' time can be made. GPS data is always in UTC." msgstr "" #: ../src/viktrwlayer_geotag.c:590 #, c-format msgid "Using track: %s" msgstr "" #: ../src/viktrwlayer_geotag.c:592 #, c-format msgid "Using all tracks in: %s" msgstr "" #: ../src/vikstatus.c:105 msgid "Current zoom level. Click to select a new one." msgstr "" #: ../src/vikwaypoint.c:34 msgid "Waypoint" msgstr "" #. TODO get rid of this as this is unnecessary duplication... #: ../src/vikwindow.c:221 msgid "Pan" msgstr "" #: ../src/vikwindow.c:221 msgid "Zoom" msgstr "Zoom" #: ../src/vikwindow.c:221 msgid "Ruler" msgstr "Lineal" #: ../src/vikwindow.c:221 msgid "Select" msgstr "" #. Create tooltip #: ../src/vikwindow.c:440 msgid "Select zoom level" msgstr "" #: ../src/vikwindow.c:645 #, c-format msgid "" "Do you want to save the changes you made to the document \"%s\"?\n" "\n" "Your changes will be lost if you don't save them." msgstr "" #: ../src/vikwindow.c:649 msgid "Don't Save" msgstr "Gem ikke" #: ../src/vikwindow.c:696 msgid "mpp" msgstr "" #: ../src/vikwindow.c:696 msgid "pixelfact" msgstr "" #: ../src/vikwindow.c:861 #, c-format msgid "%s %s %dm" msgstr "" #: ../src/vikwindow.c:863 #, c-format msgid "%s %s %dft" msgstr "" #: ../src/vikwindow.c:866 #, c-format msgid "%s %s" msgstr "" #. NB Ctrl+Shift+R is used for Refresh (deemed more important), so use 'U' instead #: ../src/vikwindow.c:1254 msgid "_Ruler" msgstr "" #: ../src/vikwindow.c:1254 msgid "Ruler Tool" msgstr "" #: ../src/vikwindow.c:1502 ../src/vikwindow.c:3138 msgid "_Zoom" msgstr "_Zoom" #: ../src/vikwindow.c:1502 msgid "Zoom Tool" msgstr "Zoomværktøj" #: ../src/vikwindow.c:1547 ../src/vikwindow.c:3139 msgid "_Pan" msgstr "" #: ../src/vikwindow.c:1547 msgid "Pan Tool" msgstr "" #: ../src/vikwindow.c:1664 msgid "_Select" msgstr "" #: ../src/vikwindow.c:1664 msgid "Select Tool" msgstr "" #: ../src/vikwindow.c:1809 msgid "You must select a layer to show its properties." msgstr "" #. No error to show, so unlikely this will get called #: ../src/vikwindow.c:1824 msgid "The help system is not available." msgstr "" #. Main error path #: ../src/vikwindow.c:1827 #, c-format msgid "" "Help is not available because: %s.\n" "Ensure a Mime Type ghelp handler program is installed (e.g. yelp)." msgstr "" #: ../src/vikwindow.c:1850 msgid "You must select a layer to delete." msgstr "" #: ../src/vikwindow.c:2087 msgid "Untitled" msgstr "Uden navn" #: ../src/vikwindow.c:2194 #, c-format msgid "Unable to add '%s' to the list of recently used documents" msgstr "" #: ../src/vikwindow.c:2208 msgid "The file you requested could not be opened." msgstr "Den fil du anmodede om kunne ikke åbnes." #: ../src/vikwindow.c:2211 msgid "" "GPSBabel is required to load files of this type or GPSBabel encountered " "problems." msgstr "" #: ../src/vikwindow.c:2214 #, c-format msgid "Unable to load malformed GPX file %s" msgstr "" #: ../src/vikwindow.c:2217 #, c-format msgid "Unsupported file type for %s" msgstr "" #. Since we can process .vik files with issues just show a warning in the status bar #. Not that a user can do much about it... or tells them what this issue is yet... #: ../src/vikwindow.c:2223 #, c-format msgid "WARNING: issues encountered loading %s" msgstr "" #: ../src/vikwindow.c:2278 msgid "Please select a GPS data file to open. " msgstr "Vælg venligst en GPS data fil. " #: ../src/vikwindow.c:2288 msgid "Geocaching" msgstr "" #: ../src/vikwindow.c:2294 msgid "Google Earth" msgstr "" #: ../src/vikwindow.c:2299 msgid "GPX" msgstr "" #: ../src/vikwindow.c:2304 ../src/vikwindow.c:2387 #: ../src/viking.desktop.in.h:1 msgid "Viking" msgstr "" #: ../src/vikwindow.c:2374 msgid "Save as Viking File." msgstr "Gem som Viking fil." #. Try harder... #: ../src/vikwindow.c:2619 ../src/vikwindow.c:2625 msgid "Generating image file..." msgstr "" #: ../src/vikwindow.c:2647 msgid "" "Failed to generate internal image.\n" "\n" "Try creating a smaller image." msgstr "" #: ../src/vikwindow.c:2655 msgid "Failed to generate image file." msgstr "" #. Success #: ../src/vikwindow.c:2660 msgid "Image file generated." msgstr "" #: ../src/vikwindow.c:2764 msgid "" "Viewable region outside allowable pixel size bounds for image. Clipping " "width/height values." msgstr "" #: ../src/vikwindow.c:2789 #, c-format msgid "Total area: %ldm x %ldm (%.3f sq. km)" msgstr "" #: ../src/vikwindow.c:2792 #, c-format msgid "Total area: %ldm x %ldm (%.3f sq. miles)" msgstr "" #: ../src/vikwindow.c:2813 msgid "Save Image" msgstr "Gem billede" #: ../src/vikwindow.c:2834 msgid "PNG" msgstr "" #: ../src/vikwindow.c:2857 msgid "You must be in UTM mode to use this feature" msgstr "Du skal være i UTM mode for at bruge denne facilitet" #: ../src/vikwindow.c:2862 msgid "Choose a directory to hold images" msgstr "" #. todo: default for answers inside VikWindow or static (thruout instance) #: ../src/vikwindow.c:2883 msgid "Save to Image File" msgstr "Gem til billedfil" #: ../src/vikwindow.c:2900 msgid "Width (pixels):" msgstr "Bredde (pixels):" #: ../src/vikwindow.c:2902 msgid "Height (pixels):" msgstr "Højde (pixels):" #: ../src/vikwindow.c:2905 msgid "" "WARNING: USING LARGE IMAGES OVER 10000x10000\n" "MAY CRASH THE PROGRAM!" msgstr "" #: ../src/vikwindow.c:2907 msgid "Zoom (meters per pixel):" msgstr "Zoom (meter pr pixel):" #: ../src/vikwindow.c:2921 msgid "Area in current viewable window" msgstr "" #: ../src/vikwindow.c:2931 msgid "Save as PNG" msgstr "Gem som PNG" #: ../src/vikwindow.c:2932 msgid "Save as JPEG" msgstr "Gem som JPEG" #: ../src/vikwindow.c:2954 msgid "East-west image tiles:" msgstr "" #: ../src/vikwindow.c:2956 msgid "North-south image tiles:" msgstr "" #: ../src/vikwindow.c:3097 msgid "Choose a background color" msgstr "Vælg en baggrundsfarve" #: ../src/vikwindow.c:3113 msgid "Choose a track highlight color" msgstr "" #: ../src/vikwindow.c:3134 msgid "_File" msgstr "_Fil" #: ../src/vikwindow.c:3135 msgid "_Edit" msgstr "_Redigér" #: ../src/vikwindow.c:3136 msgid "_View" msgstr "_Vis" #: ../src/vikwindow.c:3137 msgid "_Show" msgstr "" #: ../src/vikwindow.c:3140 msgid "_Layers" msgstr "_Lag" #: ../src/vikwindow.c:3141 msgid "_Tools" msgstr "Værk_tøjer" #: ../src/vikwindow.c:3142 msgid "_Webtools" msgstr "" #: ../src/vikwindow.c:3143 ../src/vikwindow.c:3206 msgid "_Help" msgstr "_Hjælp" #: ../src/vikwindow.c:3145 msgid "New file" msgstr "Ny fil" #: ../src/vikwindow.c:3146 msgid "_Open..." msgstr "_Åbn..." #: ../src/vikwindow.c:3146 msgid "Open a file" msgstr "Åbn en fil" #: ../src/vikwindow.c:3147 msgid "Open _Recent File" msgstr "" #: ../src/vikwindow.c:3148 msgid "Append _File..." msgstr "" #: ../src/vikwindow.c:3148 msgid "Append data from a different file" msgstr "" #: ../src/vikwindow.c:3149 msgid "A_cquire" msgstr "" #: ../src/vikwindow.c:3150 msgid "Transfer data from a GPS device" msgstr "Overfør data fra GPS udstyr" #: ../src/vikwindow.c:3151 msgid "Import File With GPS_Babel..." msgstr "" #: ../src/vikwindow.c:3151 msgid "Import file via GPSBabel converter" msgstr "" #: ../src/vikwindow.c:3153 msgid "Google _Directions..." msgstr "" #: ../src/vikwindow.c:3153 msgid "Get driving directions from Google" msgstr "Få kørselsanvisninger fra Google" #: ../src/vikwindow.c:3156 msgid "_OSM Traces..." msgstr "" #: ../src/vikwindow.c:3156 msgid "Get traces from OpenStreetMap" msgstr "" #: ../src/vikwindow.c:3157 msgid "_My OSM Traces..." msgstr "" #: ../src/vikwindow.c:3157 msgid "Get Your Own Traces from OpenStreetMap" msgstr "" #: ../src/vikwindow.c:3160 msgid "Geo_caches..." msgstr "Geo_caches..." #: ../src/vikwindow.c:3160 msgid "Get Geocaches from geocaching.com" msgstr "Få Geocaches fra geocaching.com" #: ../src/vikwindow.c:3163 msgid "Create waypoints from geotagged images" msgstr "" #: ../src/vikwindow.c:3166 msgid "Create waypoints from Wikipedia items in the current view" msgstr "" #: ../src/vikwindow.c:3168 msgid "_Save" msgstr "_Gem" #: ../src/vikwindow.c:3168 msgid "Save the file" msgstr "Gem filen" #: ../src/vikwindow.c:3169 msgid "Save _As..." msgstr "Gem _som..." #: ../src/vikwindow.c:3169 msgid "Save the file under different name" msgstr "Gem filen under et andet navn" #: ../src/vikwindow.c:3170 msgid "_Generate Image File..." msgstr "" #: ../src/vikwindow.c:3170 msgid "Save a snapshot of the workspace into a file" msgstr "" #: ../src/vikwindow.c:3171 msgid "Generate _Directory of Images..." msgstr "" #: ../src/vikwindow.c:3171 msgid "FIXME:IMGDIR" msgstr "" #: ../src/vikwindow.c:3174 msgid "_Print..." msgstr "_Udskriv..." #: ../src/vikwindow.c:3174 msgid "Print maps" msgstr "Udskriv kort" #: ../src/vikwindow.c:3177 msgid "E_xit" msgstr "A_fslut" #: ../src/vikwindow.c:3177 msgid "Exit the program" msgstr "Afslut programmet" #: ../src/vikwindow.c:3178 msgid "Save and Exit" msgstr "Gem og afslut" #: ../src/vikwindow.c:3178 msgid "Save and Exit the program" msgstr "Gem og afslut programmet" #: ../src/vikwindow.c:3180 msgid "Go to the _Default Location" msgstr "" #: ../src/vikwindow.c:3180 msgid "Go to the default location" msgstr "" #: ../src/vikwindow.c:3181 msgid "Go to _Location..." msgstr "" #: ../src/vikwindow.c:3181 msgid "Go to address/place using text search" msgstr "" #: ../src/vikwindow.c:3182 msgid "_Go to Lat/Lon..." msgstr "" #: ../src/vikwindow.c:3182 msgid "Go to arbitrary lat/lon coordinate" msgstr "" #: ../src/vikwindow.c:3183 msgid "Go to UTM..." msgstr "Gå til UTM..." #: ../src/vikwindow.c:3183 msgid "Go to arbitrary UTM coordinate" msgstr "" #: ../src/vikwindow.c:3184 msgid "_Refresh" msgstr "" #: ../src/vikwindow.c:3184 msgid "Refresh any maps displayed" msgstr "" #: ../src/vikwindow.c:3185 msgid "Set _Highlight Color..." msgstr "" #: ../src/vikwindow.c:3186 msgid "Set Bac_kground Color..." msgstr "" #: ../src/vikwindow.c:3187 msgid "Zoom _In" msgstr "Zoom _ind" #: ../src/vikwindow.c:3188 msgid "Zoom _Out" msgstr "Zoom _ud" #: ../src/vikwindow.c:3189 msgid "Zoom _To..." msgstr "Zoom _til..." #: ../src/vikwindow.c:3190 msgid "Pan _North" msgstr "" #: ../src/vikwindow.c:3191 msgid "Pan _East" msgstr "" #: ../src/vikwindow.c:3192 msgid "Pan _South" msgstr "" #: ../src/vikwindow.c:3193 msgid "Pan _West" msgstr "" #: ../src/vikwindow.c:3194 msgid "Background _Jobs" msgstr "Baggrunds_job" #: ../src/vikwindow.c:3196 msgid "Cu_t" msgstr "K_lip" #: ../src/vikwindow.c:3197 msgid "_Copy" msgstr "_Kopiér" #: ../src/vikwindow.c:3198 msgid "_Paste" msgstr "_Sæt ind" #: ../src/vikwindow.c:3199 msgid "_Delete" msgstr "_Slet" #: ../src/vikwindow.c:3200 msgid "Delete All" msgstr "Slet alle" #: ../src/vikwindow.c:3201 msgid "_Flush Map Cache" msgstr "" #: ../src/vikwindow.c:3202 msgid "_Set the Default Location" msgstr "" #: ../src/vikwindow.c:3202 msgid "Set the Default Location to the current position" msgstr "" #: ../src/vikwindow.c:3203 msgid "_Preferences" msgstr "" #: ../src/vikwindow.c:3204 msgid "_Properties" msgstr "_Egenskaber" #: ../src/vikwindow.c:3207 msgid "_About" msgstr "_Om" #: ../src/vikwindow.c:3213 msgid "_UTM Mode" msgstr "" #: ../src/vikwindow.c:3214 msgid "_Expedia Mode" msgstr "" #: ../src/vikwindow.c:3215 msgid "_Mercator Mode" msgstr "" #: ../src/vikwindow.c:3216 msgid "Lat_/Lon Mode" msgstr "" #: ../src/vikwindow.c:3220 msgid "Show _Scale" msgstr "" #: ../src/vikwindow.c:3220 msgid "Show Scale" msgstr "Vis skala" #: ../src/vikwindow.c:3221 msgid "Show _Center Mark" msgstr "" #: ../src/vikwindow.c:3221 msgid "Show Center Mark" msgstr "" #: ../src/vikwindow.c:3222 msgid "Show _Highlight" msgstr "" #: ../src/vikwindow.c:3222 msgid "Show Highlight" msgstr "" #: ../src/vikwindow.c:3223 msgid "_Full Screen" msgstr "" #: ../src/vikwindow.c:3223 msgid "Activate full screen mode" msgstr "" #: ../src/vikwindow.c:3224 msgid "Show Side _Panel" msgstr "" #: ../src/vikwindow.c:3224 msgid "Show Side Panel" msgstr "" #: ../src/vikwindow.c:3225 msgid "Show Status_bar" msgstr "" #: ../src/vikwindow.c:3225 msgid "Show Statusbar" msgstr "" #: ../src/vikwindow.c:3226 msgid "Show _Toolbar" msgstr "" #: ../src/vikwindow.c:3226 msgid "Show Toolbar" msgstr "" #: ../src/vikwindow.c:3227 msgid "Show _Menu" msgstr "" #: ../src/vikwindow.c:3227 msgid "Show Menu" msgstr "" #: ../src/viking.desktop.in.h:2 msgid "GPS Data Manager" msgstr "" #: ../src/viking.desktop.in.h:3 msgid "Map Based GPS Data Manager (live data capable)." msgstr "" #: ../src/libjpeg/jpeg-data.c:206 msgid "Data does not follow JPEG specification." msgstr "" #: ../src/libjpeg/jpeg-data.c:291 #, c-format msgid "Path '%s' invalid." msgstr "" #: ../src/libjpeg/jpeg-data.c:309 #, c-format msgid "Could not read '%s'." msgstr "" viking-1.4.2/po/de.po0000644000175000017500000026074712175546146011327 00000000000000# German translation for viking # Copyright (c) 2007 Rosetta Contributors and Canonical Ltd 2007 # This file is distributed under the same license as the viking package. # FIRST AUTHOR , 2007. # msgid "" msgstr "" "Project-Id-Version: viking\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-02-04 23:29+0100\n" "PO-Revision-Date: 2012-08-17 22:58+0000\n" "Last-Translator: Guido Scholz \n" "Language-Team: German \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2013-03-23 17:12+0000\n" "X-Generator: Launchpad (build 16540)\n" "Language: de\n" #: ../src/acquire.c:103 ../src/vikgpslayer.c:1185 msgid "Done." msgstr "Fertig." #: ../src/acquire.c:114 msgid "No data." msgstr "Keine Daten." #: ../src/acquire.c:154 ../src/acquire.c:404 msgid "Error: acquisition failed." msgstr "Fehler: Datenübertragung fehlgeschlagen" #: ../src/acquire.c:341 msgid "Working..." msgstr "In Bearbeitung ..." #. This shouldn't happen... #: ../src/acquire.c:394 msgid "" "Unable to create command\n" "Acquire method failed." msgstr "" #: ../src/acquire.c:486 msgid "_Filter" msgstr "" #: ../src/acquire.c:501 #, c-format msgid "Filter with %s" msgstr "" #: ../src/acquire.c:518 msgid "Filter" msgstr "" #: ../src/background.c:52 #, c-format msgid "%d items" msgstr "%d Teile" #: ../src/background.c:248 msgid "Job" msgstr "Auftrag" #: ../src/background.c:252 msgid "Progress" msgstr "Fortschritt" #: ../src/background.c:268 msgid "Viking Background Jobs" msgstr "Viking-Hintergrund-Aufträge" #: ../src/bing.c:47 msgid "Bing" msgstr "Bing" #. VIK_GTK_WINDOW_FROM_WIDGET(vp) #: ../src/bingmapsource.c:445 msgid "Bing attribution Loading" msgstr "Lade Bing-Attribution" #: ../src/clipboard.c:95 msgid "paste failed" msgstr "Einfügen fehlgeschlagen" #: ../src/clipboard.c:105 msgid "wrong clipboard data size" msgstr "Fehlerhafte Größe für Zwischenablage" #: ../src/clipboard.c:124 #, c-format msgid "" "The clipboard contains sublayer data for %s layers. You must select a layer " "of this type to paste the clipboard data." msgstr "" "Die Zwischenablage enthält Sublayer-Daten für %s Ebenen. Sie müssen eine " "Ebene dieses Typs wählen, um die Dateien der Zwischenablage einzufügen." #: ../src/clipboard.c:236 msgid "" "In order to paste a waypoint, please select an appropriate layer to paste " "into." msgstr "Bitte eine zum Einfügen eines Wegpunktes geeignete Ebene auswählen." #: ../src/dialog.c:52 msgid "Go to Lat/Lon" msgstr "Gehe zu Breite/Länge" #: ../src/dialog.c:64 ../src/dialog.c:251 msgid "Latitude:" msgstr "Breitengrad:" #: ../src/dialog.c:70 ../src/dialog.c:256 msgid "Longitude:" msgstr "Längengrad:" #: ../src/dialog.c:102 msgid "Go to UTM" msgstr "Gehe zu UTM" #: ../src/dialog.c:115 msgid "Northing:" msgstr "Nördliche Deklinaton:" #: ../src/dialog.c:121 msgid "Easting:" msgstr "Östliche Deklination:" #: ../src/dialog.c:128 msgid "Zone:" msgstr "Zone:" #: ../src/dialog.c:131 msgid "Letter:" msgstr "Buchstabe:" #: ../src/dialog.c:199 msgid "Waypoint Properties" msgstr "Wegpunkt-Eigenschaften" #: ../src/dialog.c:233 msgid "Name:" msgstr "Name:" #: ../src/dialog.c:261 msgid "Altitude:" msgstr "Höhe:" #: ../src/dialog.c:266 msgid "Comment:" msgstr "Kommentar:" #: ../src/dialog.c:274 ../src/osm-traces.c:437 msgid "Description:" msgstr "Beschreibung:" #: ../src/dialog.c:277 msgid "Image:" msgstr "Bild:" #: ../src/dialog.c:282 msgid "Symbol:" msgstr "Symbol:" #: ../src/dialog.c:291 msgid "(none)" msgstr "(nichts)" #. TODO: other checks (isalpha or whatever ) #: ../src/dialog.c:356 msgid "Please enter a name for the waypoint." msgstr "Bitte einen Namen für den Wegpunkt eingeben." #: ../src/dialog.c:529 ../src/geonamessearch.c:243 #: ../src/datasource_osm_my_traces.c:507 msgid "Nothing was selected" msgstr "Nichts ausgewählt" #: ../src/dialog.c:537 msgid "Add Route" msgstr "" #: ../src/dialog.c:537 msgid "Add Track" msgstr "Spur hinzufügen" #: ../src/dialog.c:545 msgid "Route Name:" msgstr "" #: ../src/dialog.c:545 msgid "Track Name:" msgstr "Spur-Name:" #: ../src/dialog.c:565 msgid "Please enter a name for the track." msgstr "Bitte einen Namen für die Spur eingeben." #: ../src/dialog.c:623 msgid "Zoom Factors..." msgstr "Zoom-Faktoren ..." #: ../src/dialog.c:637 msgid "Zoom factor (in meters per pixel):" msgstr "Vergrösserungsfaktor (in Meter pro Pixel):" #: ../src/dialog.c:638 msgid "X (easting): " msgstr "X (östlich): " #: ../src/dialog.c:639 msgid "Y (northing): " msgstr "Y (nördlich): " #: ../src/dialog.c:644 msgid "X and Y zoom factors must be equal" msgstr "Die Zoom-Fakoren X und Y müssen gleich sein." #: ../src/dialog.c:699 msgid "1 min" msgstr "1 Minute" #: ../src/dialog.c:700 msgid "1 hour" msgstr "1 Stunde" #: ../src/dialog.c:701 msgid "1 day" msgstr "1 Tag" #: ../src/dialog.c:702 msgid "Custom (in minutes):" msgstr "Einstellung (in Minuten)" #: ../src/dialog.c:808 msgid "GPS Data and Topo Analyzer, Explorer, and Manager." msgstr "GPS-Daten und Topo-Analysierer, Explorer und Manager," #: ../src/dialog.c:809 msgid "" "This program is free software; you can redistribute it and/or modify it " "under the terms of the GNU General Public License as published by the Free " "Software Foundation; either version 2 of the License, or (at your option) " "any later version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT " "ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or " "FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for " "more details.\n" "\n" "You should have received a copy of the GNU General Public License along with " "this program; if not, write to the Free Software Foundation, Inc., 59 Temple " "Place, Suite 330, Boston, MA 02111-1307, USA" msgstr "" "Dieses Programm ist freie Software, Sie können sie weitergeben und/oder " "verändern solange Sie sich an die Regeln der GNU General Public License " "halten, so wie sie von der Free Software Foundation festgelegt wurden; " "entweder in Version 2 der Lizenz oder (nach Ihrem Ermessen) in jeder " "folgenden Lizenz.\n" "\n" "Dieses Programm wurde mit dem Ziel veröffentlicht, dass Sie es nützlich " "finden, jedoch OHNE JEDWEDE GARANTIE, sogar ohne eine implizite Garantie der " "VERKAUFBARKEIT oder der NUTZBARKEIT FÜR EINEN SPEZIELLEN ZWECK. Schauen Sie " "für weitere Informationen bitte in der GNU General Public License (GNU GPL) " "nach.\n" "\n" "Mit diesem Programm sollten Sie außerdem eine Kopie der GNU General Public " "License erhalten haben. Wenn dem nicht so ist, so schreiben Sie bitte an die " "Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA " "02110-1301, USA." #: ../src/dialog.c:837 msgid "Translation is coordinated on http://launchpad.net/viking" msgstr "" "Die Übersetzungen werden über http://launchpad.net/viking koordiniert" #: ../src/dialog.c:845 msgid "Download along track" msgstr "Daten entlang der Spur herunterladen" #: ../src/dialog.c:851 msgid "Map type:" msgstr "Kartentyp:" #: ../src/dialog.c:856 msgid "Zoom level:" msgstr "Vergrößerungsstufe:" #: ../src/dialog.c:896 #, c-format msgid "The map data is licensed: %s." msgstr "Die Lizenz der Kartendaten liegt bei: %s." #: ../src/dialog.c:899 #, c-format msgid "" "The data provided by '%s' are licensed under the following license: " "%s.\n" "Please, read the license before continuing." msgstr "" "Die Daten von '%s' unterliegen der Lizenz: %s.\n" "Bevor sie fortfahren, lesen sie bitte die Lizenzvereinbarungen." #: ../src/dialog.c:904 msgid "Open license" msgstr "Offene Lizenz" #: ../src/expedia.c:53 msgid "Expedia Street Maps" msgstr "Expedia-Straßenkarten" #: ../src/expedia.c:81 msgid "Invalid expedia altitude" msgstr "Unzulässige Expedia-Höhe" #: ../src/expedia.c:112 #, c-format msgid "" "Couldn't open EXPEDIA image file (right after successful download! Please " "report and delete image file!): %s" msgstr "" "Kann EXPEDIA-Bilddatei nicht öffnen (nach erfolgreichem Herunterladen! Bitte " "berichten und löschen Sie die Bild-Datei!): %s" #: ../src/expedia.c:125 #, c-format msgid "" "Couldn't save EXPEDIA image file (right after successful download! Please " "report and delete image file!): %s" msgstr "" "Kann EXPEDIA-Bilddatei nicht speichern (nach erfolgreichem Herunterladen! " "Bitte berichten und löschen Sie die Bild-Datei!): %s" #. * #. * See http://www.geonames.org/export/wikipedia-webservice.html#wikipediaBoundingBox #. #. Translators may wish to change this setting as appropriate to get Wikipedia articles in that language #: ../src/geonamessearch.c:46 msgid "en" msgstr "" #: ../src/geonamessearch.c:121 msgid "Search" msgstr "Suche" #: ../src/geonamessearch.c:123 msgid "No entries found!" msgstr "Keine Einträge gefunden!" #. NB could allow columns to be shifted around by doing this after each new #. gtk_tree_view_column_set_reorderable ( column, TRUE ); #. However I don't think is that useful, so I haven't put it in #: ../src/geonamessearch.c:177 ../src/datasource_osm_my_traces.c:425 msgid "Name" msgstr "" #: ../src/geonamessearch.c:182 msgid "Feature" msgstr "" #: ../src/geonamessearch.c:187 ../src/datasource_osm_my_traces.c:440 msgid "Lat/Lon" msgstr "" #: ../src/geonamessearch.c:269 ../src/googlesearch.c:100 msgid "couldn't map temp file" msgstr "Aufzeichen der Zwischendatei fehlgeschlagen" #: ../src/globals.c:44 msgid "Degree format:" msgstr "Grad-Format:" #: ../src/globals.c:48 msgid "Distance units:" msgstr "Abstandseinheit:" #: ../src/globals.c:52 msgid "Speed units:" msgstr "Geschwindigkeitseinheit:" #: ../src/globals.c:56 msgid "Height units:" msgstr "Höheneinheit:" #: ../src/globals.c:60 msgid "Use large waypoint icons:" msgstr "Benutze große Wegpunktsymbole:" #: ../src/globals.c:64 msgid "Default latitude:" msgstr "Standardbreitengrad:" #: ../src/globals.c:67 msgid "Default longitude:" msgstr "Standardlängengrad:" #: ../src/globals.c:73 msgid "Alphabetical" msgstr "" #: ../src/globals.c:73 ../src/datasource_osm_my_traces.c:435 msgid "Time" msgstr "" #: ../src/globals.c:76 msgid "KML File Export Units:" msgstr "KML-Datei Exporteinheiten:" #: ../src/globals.c:77 msgid "GPX Track Order:" msgstr "" #: ../src/globals.c:82 msgid "Image Viewer:" msgstr "Bildbetrachter:" #: ../src/globals.c:87 msgid "External GPX Program 1:" msgstr "Externes GPX-Programm 1:" #: ../src/globals.c:88 msgid "External GPX Program 2:" msgstr "Externes GPX-Programm 2:" #. Defaults for the options are setup here #: ../src/globals.c:96 msgid "General" msgstr "Allgemeines" #. New Tab #: ../src/globals.c:121 msgid "Export/External" msgstr "Export/Externes" #. Webtools #: ../src/google.c:36 msgid "Google" msgstr "Google" #: ../src/datasource_file.c:59 msgid "Import file with GPSBabel" msgstr "Importiere Datei mit GPSBabel" #: ../src/datasource_file.c:60 msgid "Imported file" msgstr "Importierte Datei" #. The file selector #: ../src/datasource_file.c:133 msgid "File:" msgstr "Datei:" #: ../src/datasource_file.c:134 msgid "File to import" msgstr "Zu importierende Datei" #: ../src/datasource_file.c:141 msgid "All files" msgstr "Alle Dateien" #. The file format selector #: ../src/datasource_file.c:148 msgid "File type:" msgstr "Dateityp:" #: ../src/datasource_file.c:193 #, c-format msgid "using babel args '%s' and file '%s'" msgstr "Benutze babel Argumente '%s' und Datei '%s'" #: ../src/datasource_gc.c:66 msgid "Download Geocaches" msgstr "Geocaches herunterladen" #: ../src/datasource_gc.c:67 msgid "Geocaching.com Caches" msgstr "Caches von Geocaching.com" #: ../src/datasource_gc.c:84 msgid "geocaching.com username:" msgstr "geocaching.com-Benutzername:" #: ../src/datasource_gc.c:85 msgid "geocaching.com password:" msgstr "geocaching.com-Passwort:" #: ../src/datasource_gc.c:126 #, c-format msgid "" "Can't find %s or %s in path! Check that you have installed it correctly." msgstr "" "Kann %s oder %s nicht im Pfad finden! Bitte prüfen, ob es richtig " "installiert ist" #: ../src/datasource_gc.c:188 msgid "Number geocaches:" msgstr "Anzahl Geocaches:" #: ../src/datasource_gc.c:190 msgid "Centered around:" msgstr "Mittelpunkt:" #: ../src/datasource_gc.c:226 msgid "Broken input - using some defaults" msgstr "Falsche Eingabe - Benutze einige Voreinstellungen" #: ../src/datasource_geotag.c:51 msgid "Create Waypoints from Geotagged Images" msgstr "Wegpunkte aus georeferenzierten Bildern erzeugen" #: ../src/datasource_geotag.c:52 msgid "Geotagged Images" msgstr "Georeferenzierte Bilder" #: ../src/datasource_geotag.c:102 ../src/vikwindow.c:2314 #: ../src/vikwindow.c:2382 ../src/vikwindow.c:2824 msgid "All" msgstr "Alle" #: ../src/datasource_geotag.c:107 ../src/vikwindow.c:2829 msgid "JPG" msgstr "JPG" #: ../src/datasource_geotag.c:165 #, c-format msgid "Unable to create waypoint from %s" msgstr "Kann keinen Wegpunkt aus %s erzeugen" #: ../src/datasource_google.c:49 ../src/datasource_google.c:50 msgid "Google Directions" msgstr "Google-Richtungen" #: ../src/datasource_google.c:77 msgid "From:" msgstr "Von:" #: ../src/datasource_google.c:79 msgid "To:" msgstr "Zu:" #: ../src/datasource_gps.c:57 msgid "Acquire from GPS" msgstr "Vom GPS laden" #: ../src/datasource_gps.c:58 msgid "Acquired from GPS" msgstr "Vom GPS geladen" #: ../src/datasource_gps.c:221 #, c-format msgid "using cmdline '%s' and file '%s'\n" msgstr "Kommandozeile '%s' und Datei '%s' benutzen\n" #: ../src/datasource_gps.c:297 ../src/vikgpslayer.c:884 #, c-format msgid "Downloading %d waypoint..." msgid_plural "Downloading %d waypoints..." msgstr[0] "%d Wegpunkt herunterladen..." msgstr[1] "%d Wegpunkte herunterladen..." #: ../src/datasource_gps.c:298 ../src/vikgpslayer.c:885 #, c-format msgid "Downloading %d trackpoint..." msgid_plural "Downloading %d trackpoints..." msgstr[0] "%d Spurpunkt herunterladen..." msgstr[1] "%d Spurpunkte herunterladen..." #: ../src/datasource_gps.c:303 ../src/vikgpslayer.c:890 #, c-format msgid "Downloading %d routepoint..." msgid_plural "Downloading %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/datasource_gps.c:325 ../src/datasource_gps.c:326 #: ../src/datasource_gps.c:327 #, c-format msgid "Downloaded %d out of %d %s..." msgstr "%d heruntergeladen von %d %s ..." #: ../src/datasource_gps.c:331 ../src/datasource_gps.c:332 #: ../src/datasource_gps.c:333 #, c-format msgid "Downloaded %d %s." msgstr "%d %s heruntergeladen." #: ../src/datasource_gps.c:347 ../src/vikgpslayer.c:968 #, c-format msgid "GPS Device: %s" msgstr "GPS-Gerät: %s" #: ../src/datasource_gps.c:370 ../src/vikgpslayer.c:1042 #: ../src/vikgpslayer.c:1110 msgid "Status: Working..." msgstr "" #: ../src/datasource_gps.c:469 ../src/vikgpslayer.c:150 msgid "GPS Protocol:" msgstr "GPS-Protokoll:" #. List now assigned at runtime #: ../src/datasource_gps.c:488 ../src/vikgpslayer.c:151 msgid "Serial Port:" msgstr "Serielle Schnittstelle:" #: ../src/datasource_gps.c:509 msgid "" "Turn Off After Transfer\n" "(Garmin/NAViLink Only)" msgstr "" "Nach dem Datentransfer bitte ausschalten\n" "(Nur Garmin/NAViLink)" #: ../src/datasource_gps.c:512 msgid "Tracks:" msgstr "Spuren:" #: ../src/datasource_gps.c:516 msgid "Routes:" msgstr "" #: ../src/datasource_gps.c:520 msgid "Waypoints:" msgstr "Wegpunkte:" #: ../src/datasource_gps.c:594 ../src/vikgpslayer.c:1305 msgid "GPS device: N/A" msgstr "GPS-Gerät: Nicht gefunden" #: ../src/datasource_osm.c:52 ../src/datasource_osm.c:53 msgid "OSM traces" msgstr "OSM-Spuren" #: ../src/datasource_osm.c:80 msgid "Page number:" msgstr "Seitennummer:" #: ../src/datasource_osm_my_traces.c:63 ../src/datasource_osm_my_traces.c:64 msgid "OSM My Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:108 msgid "Username:" msgstr "" #: ../src/datasource_osm_my_traces.c:113 msgid "The email or username used to login to OSM" msgstr "" #: ../src/datasource_osm_my_traces.c:115 ../src/osm-traces.c:413 msgid "Password:" msgstr "Passwort:" #: ../src/datasource_osm_my_traces.c:120 msgid "The password used to login to OSM" msgstr "" #: ../src/datasource_osm_my_traces.c:430 msgid "Description" msgstr "" #: ../src/datasource_osm_my_traces.c:445 msgid "Privacy" msgstr "" #: ../src/datasource_osm_my_traces.c:452 msgid "Within Current View" msgstr "" #: ../src/datasource_osm_my_traces.c:518 msgid "GPS Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:520 msgid "None found!" msgstr "" #: ../src/datasource_osm_my_traces.c:629 msgid "My OSM Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:645 #, c-format msgid "Unable to get trace: %s" msgstr "" #: ../src/datasource_wikipedia.c:32 msgid "Create Waypoints from Wikipedia Articles" msgstr "" #: ../src/datasource_wikipedia.c:33 msgid "Wikipedia Waypoints" msgstr "" #: ../src/dem.c:65 ../src/dem.c:79 msgid "Invalid DEM" msgstr "Ungültiges DEM" #: ../src/dem.c:121 msgid "Invalid DEM header" msgstr "DEM-Dateikopf fehlerhaft" #: ../src/dem.c:190 ../src/dem.c:203 msgid "Incorrect DEM Class B record: expected 1" msgstr "Ungültiger DEM-Klasse B Eintrag: 1 erwartet" #: ../src/dem.c:360 #, c-format msgid "Couldn't map file %s: %s" msgstr "Kann Datei %s: %s nicht zeichnen" #: ../src/download.c:112 msgid "Tile age (s):" msgstr "Kachelalter (s)" #: ../src/download.c:233 #, c-format msgid "Download error: %s" msgstr "Fehler beim Herunterladen: %s" #: ../src/download.c:313 msgid "couldn't open temp file" msgstr "Kann Zwischendatei nicht öffnen" #: ../src/file.c:456 ../src/file.c:461 #, c-format msgid "Draw mode '%s' no more supported" msgstr "Zeichen-Modus '%s' nicht mehr unterstützt" #: ../src/geotag_exif.c:433 msgid "Not enough memory." msgstr "Nicht genügend Speicher." #: ../src/geotag_exif.c:451 msgid "Setting a value for this tag is unsupported!" msgstr "Werteingabe für diese Marke wird nicht unterstützt!" #: ../src/geotag_exif.c:470 #, c-format msgid "Too few components specified (need %d, found %d)\n" msgstr "Zu wenig Komponenten angegeben (erforderlich: %d, gefunden: %d)\n" #: ../src/geotag_exif.c:474 msgid "Numeric value expected\n" msgstr "Numerischer Wert erwartet\n" #: ../src/geotag_exif.c:482 msgid "This shouldn't happen!" msgstr "Das sollte nicht passieren!" #: ../src/geotag_exif.c:552 msgid "Not yet implemented!" msgstr "Noch nicht implementiert!" #: ../src/geotag_exif.c:565 msgid "Warning; Too many components specified!" msgstr "Warnung: Zu viele Komponenten angegeben!" #: ../src/osm-traces.c:73 msgid "Identifiable (public w/ timestamps)" msgstr "Identifizierbar (öffentlich mit Zeitstempeln)" #: ../src/osm-traces.c:74 msgid "Trackable (private w/ timestamps)" msgstr "Auffindbar (privat mit Zeitstempeln)" #: ../src/osm-traces.c:75 msgid "Public" msgstr "Öffentlich" #: ../src/osm-traces.c:76 msgid "Private" msgstr "Nicht öffentlich" #: ../src/osm-traces.c:93 msgid "OSM username:" msgstr "OSM-Benutzername:" #: ../src/osm-traces.c:94 msgid "OSM password:" msgstr "OSM-Passwort:" #. Preferences #: ../src/osm-traces.c:151 msgid "OpenStreetMap Traces" msgstr "Openstreetmap-Spuren" #: ../src/osm-traces.c:234 #, c-format msgid "failed to upload data: HTTP response is %ld" msgstr "Fehler beim Hochladen (HTTP Fehler: %ld)" #: ../src/osm-traces.c:239 #, c-format msgid "curl_easy_getinfo failed: %d" msgstr "curl_easy_getinfo fehlgeschlagen: %d" #: ../src/osm-traces.c:244 #, c-format msgid "curl request failed: %s" msgstr "curl request fehlgeschlagen: %s" #: ../src/osm-traces.c:275 #, c-format msgid "failed to open temporary file: %s" msgstr "Fehler beim Öffnen der Zwischendatei: %s" #. Success #: ../src/osm-traces.c:328 msgid "Uploaded to OSM" msgstr "Nach OSM hochgeladen" #: ../src/osm-traces.c:332 msgid "FAILED TO UPLOAD DATA TO OSM - CURL PROBLEM" msgstr "Fehler beim Hochladen nach OSM - Curl-Problem" #: ../src/osm-traces.c:335 msgid "FAILED TO UPLOAD DATA TO OSM" msgstr "Fehler beim Hochladen nach OSM" #: ../src/osm-traces.c:335 msgid "HTTP response code" msgstr "HTTP Antwort" #: ../src/osm-traces.c:348 #, c-format msgid "failed to unlink temporary file: %s" msgstr "Fehler beim Freigeben der Zwischendatei: %s" #: ../src/osm-traces.c:387 msgid "OSM upload" msgstr "OSM-Upload" #: ../src/osm-traces.c:405 msgid "Email:" msgstr "E-Mail:" #: ../src/osm-traces.c:410 msgid "" "The email used as login\n" "Enter the email you use to login into www.openstreetmap.org." msgstr "" "Die E-Mail-Adresse zum Anmelden\n" "Geben Sie die E-Mail-Adresse ein, mit der Sie sich auf " "www.openstreetmap.org einloggen." #: ../src/osm-traces.c:418 msgid "" "The password used to login\n" "Enter the password you use to login into " "www.openstreetmap.org." msgstr "" "Das Passwort zum Anmelden\n" "Geben Sie das Passwort ein, mit dem Sie sich auf " "www.openstreetmap.org anmelden." #: ../src/osm-traces.c:423 msgid "File's name:" msgstr "Dateiname:" #: ../src/osm-traces.c:433 msgid "" "The name of the file on OSM\n" "This is the name of the file created on the server.This is not the " "name of the local file." msgstr "" "Der Name der Datei auf OSM\n" "Das ist der Name der Datei, die auf dem Server erstellt wurde. Es ist " "nicht der Name der lokalen Datei." #: ../src/osm-traces.c:442 msgid "The description of the trace" msgstr "Beschreibung der Aufzeichnung" #: ../src/osm-traces.c:444 msgid "Tags:" msgstr "Schlagwörter:" #: ../src/osm-traces.c:449 msgid "The tags associated to the trace" msgstr "Die zur Aufzeichnung gehörigen Schlagwörter:" #: ../src/osm-traces.c:482 #, c-format msgid "Uploading %s to OSM" msgstr "Hochladen von %s nach OSM" #: ../src/mapcache.c:61 msgid "Map cache memory size (MB):" msgstr "" #: ../src/print.c:53 msgid "None" msgstr "Keine" #: ../src/print.c:54 msgid "Horizontally" msgstr "Horizontal" #: ../src/print.c:55 msgid "Vertically" msgstr "Vertikal" #: ../src/print.c:56 msgid "Both" msgstr "Beides" #: ../src/print.c:120 msgid "Image Settings" msgstr "Bildeinstellungen" #: ../src/print.c:546 msgid "done" msgstr "fertig" #. Page Size #: ../src/print.c:575 msgid "_Adjust Page Size and Orientation" msgstr "Seitengröße und _Orientierung anpassen" #: ../src/print.c:591 msgid "C_enter:" msgstr "_Zentrieren:" #. ignore page margins #: ../src/print.c:609 msgid "Ignore Page _Margins" msgstr "Seiten_ränder ignorieren" #: ../src/print.c:628 msgid "Image S_ize:" msgstr "_Bildgröße:" #: ../src/util.c:81 msgid "Could not launch web browser." msgstr "Kann Web-Browser nicht starten." #: ../src/util.c:92 msgid "Could not create new email." msgstr "Kann E-Mail nicht erstellen." #: ../src/vikcoordlayer.c:46 msgid "Color:" msgstr "Farbe:" #: ../src/vikcoordlayer.c:47 msgid "Minutes Width:" msgstr "Minuten-Dicke:" #: ../src/vikcoordlayer.c:48 msgid "Line Thickness:" msgstr "Strichstärke:" #: ../src/vikcoordlayer.c:56 msgid "Coordinate" msgstr "" #: ../src/datasource_bfilter.c:46 msgid "Max number of points:" msgstr "Maximale Anzahl von Punkten:" #: ../src/datasource_bfilter.c:60 msgid "Simplify All Tracks..." msgstr "Alle GPS-Spuren vereinfachen..." #: ../src/datasource_bfilter.c:61 msgid "Simplified Tracks" msgstr "Vereinfachte Spuren" #: ../src/datasource_bfilter.c:96 ../src/datasource_bfilter.c:97 msgid "Remove Duplicate Waypoints" msgstr "Doppelte Wegpunkte entfernen" #: ../src/datasource_bfilter.c:129 msgid "Waypoints Inside This" msgstr "Wegpunkte innerhalb von" #: ../src/datasource_bfilter.c:130 msgid "Polygonized Layer" msgstr "Polygon-Ebene" #: ../src/datasource_bfilter.c:165 msgid "Waypoints Outside This" msgstr "Wegpunkte liegt außerhalb von" #: ../src/datasource_bfilter.c:166 msgid "Polygonzied Layer" msgstr "Ebene in Polygon" #: ../src/main.c:89 #, c-format msgid "Ignoring Xlib error: error code %d request code %d\n" msgstr "" #: ../src/main.c:102 msgid "Enable debug output" msgstr "Fehlerausgabe aktivieren" #: ../src/main.c:103 msgid "Enable verbose output" msgstr "Mit Verlaufsprotokoll" #: ../src/main.c:104 msgid "Show version" msgstr "Version anzeigen" #: ../src/osm.c:106 msgid "On Disk OSM Tile Format" msgstr "" #: ../src/osm.c:121 msgid "OSM (view)" msgstr "OSM (Ansicht)" #: ../src/osm.c:125 msgid "OSM (edit)" msgstr "OSM (Bearbeiten)" #: ../src/osm.c:129 msgid "OSM (render)" msgstr "OSM (Darstellen)" #. Example: http://127.0.0.1:8111/load_and_zoom?left=8.19&right=8.20&top=48.605&bottom=48.590&select=node413602999 #. JOSM or merkaartor must already be running with remote interface enabled #: ../src/osm.c:136 msgid "Local port 8111 (eg JOSM)" msgstr "Lokaler Port 8111 (z.B. JOSM)" #: ../src/preferences.c:285 msgid "Preferences" msgstr "Einstellungen" #: ../src/uibuilder.c:147 msgid "Take care that this password will be stored clearly in a plain file." msgstr "Achtung: Das Passwort wird in Klartext in einer Datei abgelegt." #: ../src/vikaggregatelayer.c:37 msgid "Aggregate" msgstr "" #: ../src/vikdemlayer.c:101 msgid "Absolute height" msgstr "Absolute Höhe" #: ../src/vikdemlayer.c:102 msgid "Height gradient" msgstr "Höhen-Gradient" #: ../src/vikdemlayer.c:118 msgid "DEM Files:" msgstr "DEM-Dateien:" #: ../src/vikdemlayer.c:119 msgid "Download Source:" msgstr "Quelle zum Herunterladen:" #: ../src/vikdemlayer.c:120 msgid "Min Elev Color:" msgstr "Min. Höhe Farbe:" #: ../src/vikdemlayer.c:121 msgid "Type:" msgstr "Typ:" #: ../src/vikdemlayer.c:122 msgid "Min Elev:" msgstr "Min. Höhe:" #: ../src/vikdemlayer.c:123 msgid "Max Elev:" msgstr "Max. Höhe:" #: ../src/vikdemlayer.c:134 msgid "_DEM Download" msgstr "" #: ../src/vikdemlayer.c:134 msgid "DEM Download" msgstr "" #: ../src/vikdemlayer.c:188 msgid "DEM" msgstr "" #: ../src/vikdemlayer.c:284 #, c-format msgid "Number of files: %d" msgstr "Anzahl der Dateien: %d" #: ../src/vikdemlayer.c:385 msgid "DEM Loading" msgstr "Lade DEM" #: ../src/vikdemlayer.c:889 #, c-format msgid "No SRTM data available for %f, %f" msgstr "Keine SRTM-Daten für %f, %f verfügbar" #: ../src/vikdemlayer.c:1149 #, c-format msgid "Downloading DEM %s" msgstr "DEM %s herunterladen" #: ../src/vikfileentry.c:68 msgid "Browse..." msgstr "_Durchsuchen..." #: ../src/vikfileentry.c:96 msgid "Choose file" msgstr "Datei auswählen" #: ../src/vikfilelist.c:48 msgid "Choose file(s)" msgstr "Datei(en) auswählen" #: ../src/vikfilelist.c:172 msgid "Add..." msgstr "Hinzufügen ..." #: ../src/vikfilelist.c:173 msgid "Delete" msgstr "Löschen" #: ../src/vikgeoreflayer.c:70 msgid "_Georef Move Map" msgstr "" #: ../src/vikgeoreflayer.c:70 msgid "Georef Move Map" msgstr "Georef-Karte verschieben" #: ../src/vikgeoreflayer.c:77 msgid "Georef Z_oom Tool" msgstr "" #: ../src/vikgeoreflayer.c:77 msgid "Georef Zoom Tool" msgstr "Georef-Vergrösserungswerkzeug" #: ../src/vikgeoreflayer.c:87 msgid "GeoRef Map" msgstr "" #: ../src/vikgeoreflayer.c:335 ../src/vikmapslayer.c:685 #, c-format msgid "Couldn't open image file: %s" msgstr "Konnte Bilddatei nicht öffnen: %s" #: ../src/vikgeoreflayer.c:365 msgid "Unexpected end of file reading World file." msgstr "Unerwartetes Ende beim Einlesen der Welt-Datei." #: ../src/vikgeoreflayer.c:381 ../src/vikgeoreflayer.c:426 msgid "Choose World file" msgstr "Welt-Datei auswählen" #: ../src/vikgeoreflayer.c:394 msgid "The World file you requested could not be opened for reading." msgstr "" "Ihre gewünschte Welt-Datei koonte zum Einlesen nicht geöffnet werden." #: ../src/vikgeoreflayer.c:439 msgid "The file you requested could not be opened for writing." msgstr "Die angeforderte Datei konnte nicht zum Schreiben geöffnet werden." #: ../src/vikgeoreflayer.c:456 ../src/viklayer.c:480 msgid "Layer Properties" msgstr "Ebenen-Eigenschaften" #: ../src/vikgeoreflayer.c:478 msgid "World File Parameters:" msgstr "Welt-Datei-Parameter:" #: ../src/vikgeoreflayer.c:479 msgid "Load From File..." msgstr "Aus Datei laden ..." #: ../src/vikgeoreflayer.c:484 msgid "Corner pixel easting:" msgstr "Pixel östliche Ecke" #: ../src/vikgeoreflayer.c:486 msgid "the UTM \"easting\" value of the upper-right corner pixel of the map" msgstr "Der Östliche UTM-Wert des Pixel an der oberen rechten Ecke der Karte" #: ../src/vikgeoreflayer.c:488 msgid "Corner pixel northing:" msgstr "Pixel. Nördliche Ecke" #: ../src/vikgeoreflayer.c:490 msgid "the UTM \"northing\" value of the upper-right corner pixel of the map" msgstr "" "Der Nördliche UTM-Wert des Pixel an der oberen rechten Ecke der Karte" #: ../src/vikgeoreflayer.c:492 msgid "X (easting) scale (mpp): " msgstr "X (Ostwert) Maßstab (mpp): " #: ../src/vikgeoreflayer.c:493 msgid "Y (northing) scale (mpp): " msgstr "Y (Nordwert) Maßstab (mpp): " #: ../src/vikgeoreflayer.c:496 msgid "the scale of the map in the X direction (meters per pixel)" msgstr "Maßstab in X-Richtung (Meter pro Pixel)" #: ../src/vikgeoreflayer.c:498 msgid "the scale of the map in the Y direction (meters per pixel)" msgstr "Maßstab in Y-Richtung (Meter pro Pixel)" #: ../src/vikgeoreflayer.c:500 msgid "Map Image:" msgstr "Karten-Bild:" #. Now with icons #: ../src/vikgeoreflayer.c:608 msgid "_Zoom to Fit Map" msgstr "_Zoom (zum Einpassen der Karte)" #: ../src/vikgeoreflayer.c:614 msgid "_Goto Map Center" msgstr "_Gehe zum Kartenmittelpunkt" #: ../src/vikgeoreflayer.c:620 msgid "_Export to World File" msgstr "_Export als Welt-Datei" #: ../src/vikgoto.c:75 msgid "No goto tool available." msgstr "Kein \"Gehe zu\"-Werkzeug verfügbar" #: ../src/vikgoto.c:88 ../src/vikgoto.c:107 msgid "goto" msgstr "Gehe zu" #: ../src/vikgoto.c:90 msgid "I don't know that place. Do you want another goto?" msgstr "Dieser Ort ist unbekannt. Wollen Sie einen anderen wählen?" #: ../src/vikgoto.c:109 msgid "goto provider:" msgstr "Suchanbieter:" #: ../src/vikgoto.c:124 msgid "Enter address or place name:" msgstr "Adresse oder Namen des Ortes eingeben:" #: ../src/vikgpslayer.c:127 msgid "Data Mode" msgstr "" #: ../src/vikgpslayer.c:129 msgid "Realtime Tracking Mode" msgstr "" #: ../src/vikgpslayer.c:137 msgid "Keep vehicle at center" msgstr "" #: ../src/vikgpslayer.c:138 msgid "Keep vehicle on screen" msgstr "" #: ../src/vikgpslayer.c:139 msgid "Disable" msgstr "" #: ../src/vikgpslayer.c:152 msgid "Download Tracks:" msgstr "GPS-Spuren herunterladen:" #: ../src/vikgpslayer.c:153 msgid "Upload Tracks:" msgstr "GPS-Spuren zum Hochladen:" #: ../src/vikgpslayer.c:154 msgid "Download Routes:" msgstr "" #: ../src/vikgpslayer.c:155 msgid "Upload Routes:" msgstr "" #: ../src/vikgpslayer.c:156 msgid "Download Waypoints:" msgstr "Wegpunkte zum Herunterladen:" #: ../src/vikgpslayer.c:157 msgid "Upload Waypoints:" msgstr "Wegpunkte zum Hochladen:" #: ../src/vikgpslayer.c:159 msgid "Recording tracks" msgstr "Spur aufzeichen" #: ../src/vikgpslayer.c:160 msgid "Jump to current position on start" msgstr "Beim Start zu dieser Position springen" #: ../src/vikgpslayer.c:161 msgid "Moving Map Method:" msgstr "Kartenverschiebungsmethode:" #: ../src/vikgpslayer.c:162 msgid "Gpsd Host:" msgstr "Gpsd-Rechner:" #: ../src/vikgpslayer.c:163 msgid "Gpsd Port:" msgstr "Gpsd-Port:" #: ../src/vikgpslayer.c:164 msgid "Gpsd Retry Interval (seconds):" msgstr "Gpsd-Empfangs-Interval (Sekunden):" #: ../src/vikgpslayer.c:179 msgid "GPS" msgstr "" #: ../src/vikgpslayer.c:242 ../src/vikgpslayer.c:1258 msgid "GPS Download" msgstr "Von GPS-Gerät herunterladen" #: ../src/vikgpslayer.c:242 ../src/vikgpslayer.c:1258 #: ../src/viktrwlayer.c:3094 msgid "GPS Upload" msgstr "Zum GPS-Gerät senden" #: ../src/vikgpslayer.c:244 msgid "GPS Realtime Tracking" msgstr "GPS-Echtzeitverfolgung" #: ../src/vikgpslayer.c:451 msgid "Unknown GPS Protocol" msgstr "Unbekanntes GPS-Protokoll" #: ../src/vikgpslayer.c:469 msgid "Unknown serial port device" msgstr "Unbekanntes serielles Schnittstellengerät" #: ../src/vikgpslayer.c:572 #, c-format msgid "%s: unknown parameter" msgstr "%s: unbekannter Parameter" #. Now with icons #: ../src/vikgpslayer.c:693 msgid "_Upload to GPS" msgstr "Auf GPS-Gerät _hochladen" #: ../src/vikgpslayer.c:699 msgid "Download from _GPS" msgstr "Vom _GPS-Gerät herunterladen" #: ../src/vikgpslayer.c:720 msgid "Empty _Realtime" msgstr "Echtzeitaufzeichnnung _löschen" #: ../src/vikgpslayer.c:727 msgid "E_mpty Upload" msgstr "L_ösche Hochgeladenes" #: ../src/vikgpslayer.c:733 msgid "_Empty Download" msgstr "_Lösche Heruntergeladenes" #: ../src/vikgpslayer.c:739 msgid "Empty _All" msgstr "Lösche _alles" #. #. NB It's not fatal if this gives 2 for example! Hence removal of the g_assert #. This happens when copied GPS layer is deleted (not sure why the number_handlers would be 2) #. I don't think there's any side effects and certainly better than the program just aborting #. #: ../src/vikgpslayer.c:756 #, c-format msgid "Unexpected number of disconnected handlers: %d" msgstr "Unerwartete Anzahl an \"disconnected handlers\": %d" #: ../src/vikgpslayer.c:898 #, c-format msgid "Uploading %d waypoint..." msgid_plural "Uploading %d waypoints..." msgstr[0] "%d Wegpunkt hochladen..." msgstr[1] "%d Wegpunkte hochladen..." #: ../src/vikgpslayer.c:899 #, c-format msgid "Uploading %d trackpoint..." msgid_plural "Uploading %d trackpoints..." msgstr[0] "%d Spurpunkt hochladen..." msgstr[1] "%d Spurpunkte hochladen..." #: ../src/vikgpslayer.c:900 #, c-format msgid "Uploading %d routepoint..." msgid_plural "Uploading %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:925 #, c-format msgid "Downloaded %d out of %d waypoint..." msgid_plural "Downloaded %d out of %d waypoints..." msgstr[0] "%d von %d Wegpunkt heruntergeladen..." msgstr[1] "%d von %d Wegpunkten heruntergeladen..." #: ../src/vikgpslayer.c:926 #, c-format msgid "Downloaded %d out of %d trackpoint..." msgid_plural "Downloaded %d out of %d trackpoints..." msgstr[0] "%d von %d Spurpunkt heruntergeladen..." msgstr[1] "%d von %d Spurpunkten heruntergeladen..." #: ../src/vikgpslayer.c:927 #, c-format msgid "Downloaded %d out of %d routepoint..." msgid_plural "Downloaded %d out of %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:932 #, c-format msgid "Uploaded %d out of %d waypoint..." msgid_plural "Uploaded %d out of %d waypoints..." msgstr[0] "%d von %d Wegpunkt heruntergeladen ..." msgstr[1] "%d von %d Wegpunkte heruntergeladen ..." #: ../src/vikgpslayer.c:933 #, c-format msgid "Uploaded %d out of %d trackpoint..." msgid_plural "Uploaded %d out of %d trackpoints..." msgstr[0] "%d von %d Spurpunkt heruntergeladen ..." msgstr[1] "%d von %d Spurpunkten heruntergeladen ..." #: ../src/vikgpslayer.c:934 #, c-format msgid "Uploaded %d out of %d routepoint..." msgid_plural "Uploaded %d out of %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:942 #, c-format msgid "Downloaded %d waypoint" msgid_plural "Downloaded %d waypoints" msgstr[0] "%d Wegpunkt heruntergeladen" msgstr[1] "%d Wegpunkte heruntergeladen" #: ../src/vikgpslayer.c:943 #, c-format msgid "Downloaded %d trackpoint" msgid_plural "Downloaded %d trackpoints" msgstr[0] "%d Spurpunkt heruntergeladen" msgstr[1] "%d Spurpunkte heruntergeladen" #: ../src/vikgpslayer.c:944 #, c-format msgid "Downloaded %d routepoint" msgid_plural "Downloaded %d routepoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:949 #, c-format msgid "Uploaded %d waypoint" msgid_plural "Uploaded %d waypoints" msgstr[0] "%d Wegpunkt heruntergeladen" msgstr[1] "%d Wegpunkte heruntergeladen" #: ../src/vikgpslayer.c:950 #, c-format msgid "Uploaded %d trackpoint" msgid_plural "Uploaded %d trackpoints" msgstr[0] "%d Spurpunkt heruntergeladen" msgstr[1] "%d Spurpunkte heruntergeladen" #: ../src/vikgpslayer.c:951 #, c-format msgid "Uploaded %d routepoint" msgid_plural "Uploaded %d routepoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:1180 msgid "Error: couldn't find gpsbabel." msgstr "Fehler: gpsbabel nicht gefunden." #: ../src/vikgpslayer.c:1269 msgid "Warning - GPS Upload items may overwrite each other" msgstr "" #: ../src/vikgpslayer.c:1301 msgid "Status: detecting gpsbabel" msgstr "Status: Suche nach gpsbabel" #: ../src/vikgpslayer.c:1332 msgid "No GPS items selected for transfer." msgstr "" #: ../src/vikgpslayer.c:1347 msgid "Could not turn off device." msgstr "" #: ../src/vikgpslayer.c:1385 msgid "Are you sure you want to delete GPS Upload data?" msgstr "" "Sind sie sicher, dass sie die GPS-Daten zum Hochladen löschen möchten?" #: ../src/vikgpslayer.c:1398 msgid "Are you sure you want to delete GPS Download data?" msgstr "" "Sind sie sicher, dass sie die GPS-Daten zum Herunterladen löschen möchten?" #: ../src/vikgpslayer.c:1412 msgid "Are you sure you want to delete GPS Realtime data?" msgstr "Sind sie sicher, dass sie die GPS-Echtzeitdaten löschen möchten?" #: ../src/vikgpslayer.c:1425 msgid "Are you sure you want to delete All GPS data?" msgstr "Sind sie sicher, dass sie alle GPS-Daten löschen möchten?" #: ../src/viklayerspanel.c:55 msgid "/C_ut" msgstr "/A_usschneiden" #: ../src/viklayerspanel.c:56 msgid "/_Copy" msgstr "/_Kopieren" #: ../src/viklayerspanel.c:57 msgid "/_Paste" msgstr "/_Einfügen" #: ../src/viklayerspanel.c:58 msgid "/_Delete" msgstr "/_Löschen" #: ../src/viklayerspanel.c:59 msgid "/New Layer" msgstr "/Neue Ebene" #: ../src/viklayerspanel.c:127 msgid "Top Layer" msgstr "Oberste Ebene" #: ../src/viklayerspanel.c:143 msgid "Add new layer" msgstr "Eine neue Ebene hinzufügen" #: ../src/viklayerspanel.c:150 msgid "Remove selected layer" msgstr "Ausgewählte Ebene entfernen" #: ../src/viklayerspanel.c:157 msgid "Move selected layer up" msgstr "Gewählte Ebene nach oben verschieben" #: ../src/viklayerspanel.c:164 msgid "Move selected layer down" msgstr "Gewählte Ebene nach unten veraschieben" #: ../src/viklayerspanel.c:171 msgid "Cut selected layer" msgstr "Gewählte Ebene ausschneiden" #: ../src/viklayerspanel.c:178 msgid "Copy selected layer" msgstr "Gewählte Ebene kopieren" #: ../src/viklayerspanel.c:185 msgid "Paste layer below selected layer" msgstr "Ebene unterhalb gewählter Ebene einfügen" #. TODO: FIXME: if name has a '/' in it it will get all messed up. why not have an itemfactory field with #. name, icon, shortcut, etc.? #: ../src/viklayerspanel.c:204 ../src/vikwindow.c:3292 #, c-format msgid "New _%s Layer" msgstr "" #: ../src/viklayerspanel.c:511 msgid "Aggregate Layers have no settable properties." msgstr "Zusammengefügte Ebenen ohne gemeinsame Eigenschaft." #: ../src/viklayerspanel.c:555 msgid "You cannot cut the Top Layer." msgstr "Sie können die oberste Ebene nicht ausschneiden." #: ../src/viklayerspanel.c:600 #, c-format msgid "Are you sure you want to delete %s?" msgstr "Sind Sie sicher, dass sie %s löschen möchten?" #: ../src/viklayerspanel.c:617 msgid "You cannot delete the Top Layer." msgstr "Sie können die oberste Ebene nicht löschen." #: ../src/viklayerspanel.c:701 msgid "Are you sure you wish to delete all layers?" msgstr "Sind Sie sicher, dass Sie alle Ebenen löschen wollen?" #. ******* MAPZOOMS ******** #: ../src/vikmapslayer.c:91 msgid "Use Viking Zoom Level" msgstr "Viking-Vergrösserungsstufe benutzen" #: ../src/vikmapslayer.c:124 msgid "Map Type:" msgstr "Karten-Typ:" #: ../src/vikmapslayer.c:125 msgid "Maps Directory:" msgstr "Karten-Verzeichnis:" #: ../src/vikmapslayer.c:126 msgid "Alpha:" msgstr "Alpha:" #: ../src/vikmapslayer.c:127 msgid "Control the Alpha value for transparency effects" msgstr "" #: ../src/vikmapslayer.c:128 msgid "Autodownload maps:" msgstr "Karten automatisch herunterladen:" #: ../src/vikmapslayer.c:129 msgid "Autodownload Only Gets Missing Maps:" msgstr "" #: ../src/vikmapslayer.c:130 msgid "" "Using this option avoids attempting to update already acquired tiles. This " "can be useful if you want to restrict the network usage, without having to " "resort to manual control. Only applies when 'Autodownload Maps' is on." msgstr "" #: ../src/vikmapslayer.c:131 msgid "Zoom Level:" msgstr "Vergrösserungsstufe:" #: ../src/vikmapslayer.c:132 msgid "" "Determines the method of displaying map tiles for the current zoom level. " "'Viking Zoom Level' uses the best matching level, otherwise setting a fixed " "value will always use map tiles of the specified value regardless of the " "actual zoom level." msgstr "" #: ../src/vikmapslayer.c:146 msgid "_Maps Download" msgstr "" #: ../src/vikmapslayer.c:146 msgid "Maps Download" msgstr "Herunterladen von Karten" #: ../src/vikmapslayer.c:161 msgid "Map" msgstr "Karte" #: ../src/vikmapslayer.c:249 msgid "Default maplayer directory:" msgstr "Standardverzeichnis für Kartenebenen:" #: ../src/vikmapslayer.c:249 msgid "Choose a directory to store cached Map tiles for this layer" msgstr "" #: ../src/vikmapslayer.c:505 msgid "Unknown map type" msgstr "Unbekannter Kartentyp" #: ../src/vikmapslayer.c:516 msgid "Unknown Map Zoom" msgstr "Unbekannte Kartenvergrösserung" #: ../src/vikmapslayer.c:589 #, c-format msgid "" "New map cannot be displayed in the current drawmode.\n" "Select \"%s\" from View menu to view it." msgstr "" "Neue Karte kann im aktuellen Zeichenmodus nicht angezeigt werden.\n" "Wähle \"%s\" aus dem Ansichtmenü." #: ../src/vikmapslayer.c:753 #, c-format msgid "" "Cowardly refusing to draw tiles or existence of tiles beyond %d zoom out " "factor" msgstr "Schlechte Kacheldarstellung beim Herauszoomen hinter Faktor %d" #: ../src/vikmapslayer.c:1157 #, c-format msgid "Redownloading up to %d %s map..." msgid_plural "Redownloading up to %d %s maps..." msgstr[0] "Neuladen von bis zu %d %s Karten..." msgstr[1] "Neuladen von bis zu %d %s Karten..." #: ../src/vikmapslayer.c:1159 #, c-format msgid "Redownloading %d %s map..." msgid_plural "Redownloading %d %s maps..." msgstr[0] "Erneutes Herunterladen der %d %s Karte..." msgstr[1] "Erneutes Herunterladen der %d %s Karten..." #: ../src/vikmapslayer.c:1163 ../src/vikmapslayer.c:1238 #, c-format msgid "Downloading %d %s map..." msgid_plural "Downloading %d %s maps..." msgstr[0] "Herunterladen der %d %s Karte..." msgstr[1] "Erneutes Herunterladen der %d %s Karten..." #: ../src/vikmapslayer.c:1311 #, c-format msgid "" "\n" "Source: %s\n" "\n" "Tile File: %s\n" "Tile File Timestamp: %s" msgstr "" #: ../src/vikmapslayer.c:1318 #, c-format msgid "" "Source: %s\n" "\n" "No Tile File!" msgstr "" #: ../src/vikmapslayer.c:1356 msgid "Redownload _Bad Map(s)" msgstr "_Fehlerhafte Karte(n) erneut laden" #: ../src/vikmapslayer.c:1360 msgid "Redownload _New Map(s)" msgstr "_Neue Karte(n) erneut laden" #: ../src/vikmapslayer.c:1364 msgid "Redownload _All Map(s)" msgstr "_Alle Karten neu laden" #: ../src/vikmapslayer.c:1368 msgid "_Show Tile Information" msgstr "" #: ../src/vikmapslayer.c:1449 #, c-format msgid "" "Wrong drawmode for this map.\n" "Select \"%s\" from View menu and try again." msgstr "" "Falscher Zeichenmodus für diese Karte.\n" "Wähle \"%s\" aus dem Ansichtmenü und versuche es neu." #: ../src/vikmapslayer.c:1454 msgid "Wrong zoom level for this map." msgstr "Falsche Vergrösserungsstufe für diese Karte." #. Now with icons #: ../src/vikmapslayer.c:1485 msgid "Download _Missing Onscreen Maps" msgstr "_Fehlende Bildschirmkarte laden" #: ../src/vikmapslayer.c:1492 msgid "Download _New Onscreen Maps" msgstr "_Neue Bildschirmkarte laden" #: ../src/vikmapslayer.c:1499 msgid "Reload _All Onscreen Maps" msgstr "Alle _Bildschirmkarten erneut laden" #: ../src/viktreeview.c:263 msgid "Layer Name" msgstr "Name der Ebene" #: ../src/viktreeview.c:742 #, c-format msgid "delete data from %s\n" msgstr "Daten von %s löschen\n" #: ../src/viktrwlayer.c:377 msgid "Create _Waypoint" msgstr "" #: ../src/viktrwlayer.c:377 msgid "Create Waypoint" msgstr "Weg_punkt erstellen" #: ../src/viktrwlayer.c:383 msgid "Create _Track" msgstr "" #: ../src/viktrwlayer.c:383 msgid "Create Track" msgstr "Spur er_zeugen" #: ../src/viktrwlayer.c:392 msgid "Create _Route" msgstr "" #: ../src/viktrwlayer.c:392 msgid "Create Route" msgstr "" #: ../src/viktrwlayer.c:401 msgid "_Edit Waypoint" msgstr "" #: ../src/viktrwlayer.c:401 msgid "Edit Waypoint" msgstr "Wegpunkt _bearbeiten" #: ../src/viktrwlayer.c:409 msgid "Edit Trac_kpoint" msgstr "" #: ../src/viktrwlayer.c:409 msgid "Edit Trackpoint" msgstr "Spurpun_kt bearbeiten" #: ../src/viktrwlayer.c:417 msgid "Show P_icture" msgstr "" #: ../src/viktrwlayer.c:417 msgid "Show Picture" msgstr "Bild _anzeigen" #: ../src/viktrwlayer.c:424 msgid "Route _Finder" msgstr "" #: ../src/viktrwlayer.c:424 msgid "Route Finder" msgstr "Routensuche" #. ***** PARAMETERS ***** #: ../src/viktrwlayer.c:447 ../src/viktrwlayer.c:1942 #: ../src/viktrwlayer.c:1944 msgid "Waypoints" msgstr "Wegpunkte" #: ../src/viktrwlayer.c:447 ../src/viktrwlayer.c:1933 #: ../src/viktrwlayer.c:1935 msgid "Tracks" msgstr "Spuren" #: ../src/viktrwlayer.c:447 msgid "Waypoint Images" msgstr "Wegpunkt-Bilder" #: ../src/viktrwlayer.c:450 msgid "Draw by Track" msgstr "Von Spur gezeichnet" #: ../src/viktrwlayer.c:450 msgid "Draw by Speed" msgstr "" #: ../src/viktrwlayer.c:450 msgid "All Tracks Same Color" msgstr "" #: ../src/viktrwlayer.c:451 msgid "Filled Square" msgstr "Rechteck ausgefüllt" #: ../src/viktrwlayer.c:451 msgid "Square" msgstr "Quadrat" #: ../src/viktrwlayer.c:451 msgid "Circle" msgstr "Kreis" #: ../src/viktrwlayer.c:451 msgid "X" msgstr "X" #: ../src/viktrwlayer.c:477 msgid "Extra Extra Small" msgstr "" #: ../src/viktrwlayer.c:478 msgid "Extra Small" msgstr "" #: ../src/viktrwlayer.c:479 msgid "Small" msgstr "" #: ../src/viktrwlayer.c:480 msgid "Medium" msgstr "" #: ../src/viktrwlayer.c:481 msgid "Large" msgstr "" #: ../src/viktrwlayer.c:482 msgid "Extra Large" msgstr "" #: ../src/viktrwlayer.c:483 msgid "Extra Extra Large" msgstr "" #: ../src/viktrwlayer.c:491 msgid "Track Drawing Mode:" msgstr "Spur-Zeichenmodus" #: ../src/viktrwlayer.c:492 msgid "All Tracks Color:" msgstr "" #: ../src/viktrwlayer.c:493 msgid "The color used when 'All Tracks Same Color' drawing mode is selected" msgstr "" #: ../src/viktrwlayer.c:494 msgid "Draw Track Lines" msgstr "Spurlinien zeichnen" #: ../src/viktrwlayer.c:495 msgid "Track Thickness:" msgstr "Spur-Dicke:" #: ../src/viktrwlayer.c:496 msgid "Draw Track Direction" msgstr "" #: ../src/viktrwlayer.c:497 msgid "Direction Size:" msgstr "" #: ../src/viktrwlayer.c:498 msgid "Draw Trackpoints" msgstr "Spurpunkte zeichnen" #: ../src/viktrwlayer.c:499 msgid "Trackpoint Size:" msgstr "" #: ../src/viktrwlayer.c:500 msgid "Draw Elevation" msgstr "Steigungen zeichnen" #: ../src/viktrwlayer.c:501 msgid "Draw Elevation Height %:" msgstr "Steigungshöhe zeichnen %:" #: ../src/viktrwlayer.c:503 msgid "Draw Stops" msgstr "Stopps zeichnen" #: ../src/viktrwlayer.c:504 msgid "" "Whether to draw a marker when trackpoints are at the same position but over " "the minimum stop length apart in time" msgstr "" #: ../src/viktrwlayer.c:505 msgid "Min Stop Length (seconds):" msgstr "Minimale Stopp-Dauer (Sekunden):" #: ../src/viktrwlayer.c:507 msgid "Track BG Thickness:" msgstr "Spur-Hintergrund-Dicke:" #: ../src/viktrwlayer.c:508 msgid "Track Background Color" msgstr "Spur-Hintergrundfarbe:" #: ../src/viktrwlayer.c:509 msgid "Draw by Speed Factor (%):" msgstr "" #: ../src/viktrwlayer.c:510 msgid "" "The percentage factor away from the average speed determining the color used" msgstr "" #: ../src/viktrwlayer.c:512 msgid "Draw Labels" msgstr "Beschriftungen zeichnen" #: ../src/viktrwlayer.c:513 msgid "Waypoint Font Size:" msgstr "" #: ../src/viktrwlayer.c:514 msgid "Waypoint Color:" msgstr "Wegpunkt-Farbe:" #: ../src/viktrwlayer.c:515 msgid "Waypoint Text:" msgstr "Wegpunkt-Text:" #: ../src/viktrwlayer.c:516 msgid "Background:" msgstr "Hintergrund:" #: ../src/viktrwlayer.c:517 msgid "Fake BG Color Translucency:" msgstr "Falsche Hintergrund-Farbdurchsichtigkeit:" #: ../src/viktrwlayer.c:518 msgid "Waypoint marker:" msgstr "Wegpunkt-Markierung" #: ../src/viktrwlayer.c:519 msgid "Waypoint size:" msgstr "Wegpunkt-Grösse:" #: ../src/viktrwlayer.c:520 msgid "Draw Waypoint Symbols:" msgstr "Wegpunkt-Symbol zeichnen:" #: ../src/viktrwlayer.c:522 msgid "Draw Waypoint Images" msgstr "Wegpunkt-Bild zeichnen:" #: ../src/viktrwlayer.c:523 msgid "Image Size (pixels):" msgstr "Bild-Grösse (Pixel):" #: ../src/viktrwlayer.c:524 msgid "Image Alpha:" msgstr "Bild Alpha-Wert:" #: ../src/viktrwlayer.c:525 msgid "Image Memory Cache Size:" msgstr "Bildspeicher Puffergröße:" #: ../src/viktrwlayer.c:610 msgid "TrackWaypoint" msgstr "" #: ../src/viktrwlayer.c:1951 ../src/viktrwlayer.c:1953 msgid "Routes" msgstr "" #: ../src/viktrwlayer.c:2144 #, c-format msgid " in %d:%02d hrs:mins" msgstr " in %d:%02d hh:mm" #: ../src/viktrwlayer.c:2148 #, c-format msgid "" "\n" "%sTotal Length %.1f %s%s" msgstr "" "\n" "%s Gesamtlänge %.1f %s%s" #: ../src/viktrwlayer.c:2154 #, c-format msgid "Tracks: %d - Waypoints: %d - Routes: %d%s" msgstr "" #: ../src/viktrwlayer.c:2174 #, c-format msgid "Tracks: %d" msgstr "" #: ../src/viktrwlayer.c:2184 #, c-format msgid "Routes: %d" msgstr "" #: ../src/viktrwlayer.c:2215 #, c-format msgid "- %d:%02d hrs:mins" msgstr "- %d:%02d hh:mm" #: ../src/viktrwlayer.c:2223 #, c-format msgid "%s%.1f km %s" msgstr "%s%.1f km %s" #: ../src/viktrwlayer.c:2226 #, c-format msgid "%s%.1f miles %s" msgstr "%s%.1f Meilen %s" #: ../src/viktrwlayer.c:2240 #, c-format msgid "Waypoints: %d" msgstr "" #: ../src/viktrwlayer.c:2266 #, c-format msgid "Trkpt: Alt %dft" msgstr "Trkpt: Höhe %d ft" #. VIK_UNITS_HEIGHT_METRES: #: ../src/viktrwlayer.c:2270 #, c-format msgid "Trkpt: Alt %dm" msgstr "Trkpt: Höhe %d m" #. Compact date time format #: ../src/viktrwlayer.c:2277 #, c-format msgid " | Time %x %X" msgstr " | Zeit %x %X" #: ../src/viktrwlayer.c:2295 #, c-format msgid " | Track: %s" msgstr " | GPS-Spur: %s" #. Combine parts to make overall message #: ../src/viktrwlayer.c:2299 #, c-format msgid "%s%s | %s %s %s" msgstr "%s%s | %s %s %s" #: ../src/viktrwlayer.c:2314 #, c-format msgid "Wpt: Alt %dft" msgstr "Wpt: Höhe %d ft" #. VIK_UNITS_HEIGHT_METRES: #: ../src/viktrwlayer.c:2318 #, c-format msgid "Wpt: Alt %dm" msgstr "Wpt: Höhe %d m" #. Add comment if available #: ../src/viktrwlayer.c:2333 #, c-format msgid "%s | %s %s | Comment: %s" msgstr "%s | %s %s | Kommentar: %s" #: ../src/viktrwlayer.c:2335 #, c-format msgid "%s | %s %s" msgstr "%s | %s %s" #: ../src/viktrwlayer.c:2563 ../src/viktrwlayer.c:2634 msgid "This layer has no waypoints or trackpoints." msgstr "Diese Ebene hat keine Wegpunkte oder Spurpunkte." #: ../src/viktrwlayer.c:2661 ../src/vikwindow.c:2407 ../src/vikwindow.c:2848 #, c-format msgid "The file \"%s\" exists, do you wish to overwrite it?" msgstr "Soll die bereits existierende Datei \"%s\" überschrieben werden?" #: ../src/viktrwlayer.c:2671 ../src/vikwindow.c:2429 msgid "The filename you requested could not be opened for writing." msgstr "Die angegebene Datei konnte nicht zum Schreiben geöffnet werden." #: ../src/viktrwlayer.c:2676 ../src/viktrwlayer.c:2681 #: ../src/viktrwlayer.c:2691 ../src/viktrwlayer.c:2703 msgid "Export Layer" msgstr "Ebene exportieren" #: ../src/viktrwlayer.c:2720 msgid "Could not create temporary file for export." msgstr "Konnte keine temporäre Datei für Export erzeugen." #: ../src/viktrwlayer.c:2729 #, c-format msgid "Could not launch %s." msgstr "Konnte %s nicht starten." #: ../src/viktrwlayer.c:2773 msgid "Export Track as GPX" msgstr "Exportiere Spur als GPX" #: ../src/viktrwlayer.c:2795 msgid "Find" msgstr "Suche" #: ../src/viktrwlayer.c:2805 msgid "Waypoint Name:" msgstr "Wegpunkt-Name:" #: ../src/viktrwlayer.c:2822 msgid "Waypoint not found in this layer." msgstr "Wegpunkt nicht in dieser Ebene gefunden" #: ../src/viktrwlayer.c:3090 msgid "Can not upload invisible track." msgstr "" #: ../src/viktrwlayer.c:3192 ../src/viktrwlayer.c:7785 msgid "Track" msgstr "Spur" #: ../src/viktrwlayer.c:3215 ../src/viktrwlayer.c:7817 msgid "Route" msgstr "" #: ../src/viktrwlayer.c:3296 ../src/viktrwlayer.c:6265 #: ../src/viktrwlayer.c:6314 msgid "_Finish Route" msgstr "" #: ../src/viktrwlayer.c:3298 ../src/viktrwlayer.c:6223 #: ../src/viktrwlayer.c:6312 msgid "_Finish Track" msgstr "" #. Now with icons #: ../src/viktrwlayer.c:3310 msgid "_View Layer" msgstr "_Ebene anzeigen" #: ../src/viktrwlayer.c:3317 msgid "V_iew" msgstr "" #: ../src/viktrwlayer.c:3323 msgid "View All _Tracks" msgstr "" #: ../src/viktrwlayer.c:3328 msgid "View All _Routes" msgstr "" #: ../src/viktrwlayer.c:3333 msgid "View All _Waypoints" msgstr "" #: ../src/viktrwlayer.c:3338 msgid "_Goto Center of Layer" msgstr "_Zentriere Ebene" #: ../src/viktrwlayer.c:3344 ../src/viktrwlayer.c:6199 msgid "Goto _Waypoint..." msgstr "Gehe _zum Wegpunkt..." #: ../src/viktrwlayer.c:3350 msgid "_Export Layer" msgstr "_Exportiere Ebene" #: ../src/viktrwlayer.c:3356 msgid "Export as GPS_Point..." msgstr "E_xportiere als Spurpunkt..." #: ../src/viktrwlayer.c:3361 msgid "Export as GPS_Mapper..." msgstr "Ex_portiere als GPS-Kartierer..." #: ../src/viktrwlayer.c:3366 msgid "Export as _GPX..." msgstr "Exportiere als _GPX..." #: ../src/viktrwlayer.c:3371 msgid "Export as _KML..." msgstr "Exportiere als _KML..." #: ../src/viktrwlayer.c:3376 msgid "Open with External Program_1: " msgstr "Mit externem Programm _1 öffnen: " #: ../src/viktrwlayer.c:3383 msgid "Open with External Program_2: " msgstr "Mit externem Programm _2 öffnen: " #: ../src/viktrwlayer.c:3391 ../src/vikwindow.c:3145 msgid "_New" msgstr "_Neu" #: ../src/viktrwlayer.c:3397 msgid "New _Waypoint..." msgstr "" #: ../src/viktrwlayer.c:3403 msgid "New _Track" msgstr "" #: ../src/viktrwlayer.c:3411 msgid "New _Route" msgstr "" #: ../src/viktrwlayer.c:3420 ../src/viktrwlayer.c:6597 msgid "Geotag _Images..." msgstr "_Kartenreferenzierte Bilder..." #: ../src/viktrwlayer.c:3427 msgid "_Acquire" msgstr "" #: ../src/viktrwlayer.c:3433 ../src/vikwindow.c:3150 msgid "From _GPS..." msgstr "Von _GPS-Gerät..." #: ../src/viktrwlayer.c:3439 msgid "From Google _Directions..." msgstr "" #: ../src/viktrwlayer.c:3446 msgid "From _OSM Traces..." msgstr "Von _OSM-Spuren..." #: ../src/viktrwlayer.c:3451 msgid "From _My OSM Traces..." msgstr "" #: ../src/viktrwlayer.c:3459 ../src/vikwindow.c:3166 msgid "From _Wikipedia Waypoints" msgstr "" #: ../src/viktrwlayer.c:3465 msgid "Within _Layer Bounds" msgstr "_Innerhalb Ebenenbegrenzung" #: ../src/viktrwlayer.c:3471 msgid "Within _Current View" msgstr "Innerhalb _aktueller Ansicht" #: ../src/viktrwlayer.c:3479 msgid "From Geo_caching..." msgstr "Von Geo-_Caching..." #: ../src/viktrwlayer.c:3486 ../src/vikwindow.c:3163 msgid "From Geotagged _Images..." msgstr "Von georeferenzierten _Bildern..." #: ../src/viktrwlayer.c:3492 msgid "From _File..." msgstr "" #: ../src/viktrwlayer.c:3498 ../src/viktrwlayer.c:6542 msgid "_Upload" msgstr "" #: ../src/viktrwlayer.c:3504 msgid "Upload to _GPS..." msgstr "" #: ../src/viktrwlayer.c:3511 ../src/viktrwlayer.c:6570 msgid "Upload to _OSM..." msgstr "Nach OSM _hochladen..." #: ../src/viktrwlayer.c:3519 msgid "De_lete" msgstr "_Löschen" #: ../src/viktrwlayer.c:3525 msgid "Delete All _Tracks" msgstr "_Alle GPS-Spuren löschen" #: ../src/viktrwlayer.c:3531 msgid "Delete Tracks _From Selection..." msgstr "Ge_wählte GPS-Spuren löschen..." #: ../src/viktrwlayer.c:3537 ../src/viktrwlayer.c:6290 msgid "Delete _All Routes" msgstr "" #: ../src/viktrwlayer.c:3543 ../src/viktrwlayer.c:6296 msgid "_Delete Routes From Selection..." msgstr "" #: ../src/viktrwlayer.c:3549 msgid "Delete All _Waypoints" msgstr "Alle Weg_punkte löschen" #: ../src/viktrwlayer.c:3555 msgid "Delete Waypoints From _Selection..." msgstr "Gewählte Wegpun_kte löschen..." #: ../src/viktrwlayer.c:4128 #, c-format msgid "Are you sure you want to delete all tracks in %s?" msgstr "Sind sich sicher, dass sie alle GPS-Spuren in %s löschen wollen?" #: ../src/viktrwlayer.c:4138 #, c-format msgid "Are you sure you want to delete all routes in %s?" msgstr "" #: ../src/viktrwlayer.c:4148 #, c-format msgid "Are you sure you want to delete all waypoints in %s?" msgstr "Sind sich sicher, dass sie alle Wegpunkte in %s löschen wollen?" #: ../src/viktrwlayer.c:4165 #, c-format msgid "Are you sure you want to delete the waypoint \"%s\"" msgstr "Sind sich sicher, dass sie den Wegpunkt \"%s\" löschen wollen?" #: ../src/viktrwlayer.c:4178 #, c-format msgid "Are you sure you want to delete the track \"%s\"" msgstr "Sind sich sicher, dass sie die GPS-Spur \"%s\" löschen wollen?" #: ../src/viktrwlayer.c:4191 #, c-format msgid "Are you sure you want to delete the route \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4351 ../src/viktrwlayer.c:4922 msgid "" "Converting a track to a route removes extra track data such as segments, " "timestamps, etc...\n" "Do you want to continue?" msgstr "" #: ../src/viktrwlayer.c:4711 msgid "Failed. No other tracks with timestamps in this layer found" msgstr "" "Fehler: Keine weiteren GPS-Spuren mit Zeitstempel in dieser Ebene gefunden" #: ../src/viktrwlayer.c:4713 msgid "Failed. No other tracks without timestamps in this layer found" msgstr "" "Fehler: Keine weiteren GPS-Spuren ohne Zeitstempel in dieser Ebene gefunden" #: ../src/viktrwlayer.c:4732 msgid "Merge with..." msgstr "Vereinen mit..." #: ../src/viktrwlayer.c:4733 msgid "Select route to merge with" msgstr "" #: ../src/viktrwlayer.c:4733 msgid "Select track to merge with" msgstr "Spur auswählen zum Zusammenfügen mit" #: ../src/viktrwlayer.c:4818 ../src/viktrwlayer.c:4895 msgid "Append Route" msgstr "" #: ../src/viktrwlayer.c:4818 ../src/viktrwlayer.c:4895 msgid "Append Track" msgstr "" #: ../src/viktrwlayer.c:4819 msgid "Select the route to append after the current route" msgstr "" #: ../src/viktrwlayer.c:4820 msgid "Select the track to append after the current track" msgstr "" #: ../src/viktrwlayer.c:4896 msgid "Select the track to append after the current route" msgstr "" #: ../src/viktrwlayer.c:4897 msgid "Select the route to append after the current track" msgstr "" #: ../src/viktrwlayer.c:4957 #, c-format msgid "%d segment merged" msgid_plural "%d segments merged" msgstr[0] "" msgstr[1] "" #: ../src/viktrwlayer.c:4973 msgid "Failed. This track does not have timestamp" msgstr "Fehlgeschlagen. Diese Spur hat keine Zeitstempel" #: ../src/viktrwlayer.c:4985 msgid "Failed. No other track in this layer has timestamp" msgstr "Fehlgeschlagen. Keine andere Spur in dieser Ebene hat Zeitstempel" #: ../src/viktrwlayer.c:4992 msgid "Merge Threshold..." msgstr "Vereine bei Grenzwert..." #: ../src/viktrwlayer.c:4993 msgid "Merge when time between tracks less than:" msgstr "Zusammenfassen wenn Dauer zwischen Spuren kleiner als ist:" #: ../src/viktrwlayer.c:5128 msgid "Split Threshold..." msgstr "Bei Schwellwert trennen..." #: ../src/viktrwlayer.c:5129 msgid "Split when time between trackpoints exceeds:" msgstr "Trennen, wenn Dauer zwischen Spurpunkten grösser als:" #: ../src/viktrwlayer.c:5205 msgid "Split Every Nth Point" msgstr "Trenne jeden n'ten Punkt" #: ../src/viktrwlayer.c:5206 msgid "Split on every Nth point:" msgstr "Trenne auf dem n'ten Punkt" #: ../src/viktrwlayer.c:5312 msgid "Can not split track as it has no segments" msgstr "" #: ../src/viktrwlayer.c:5340 ../src/viktrwlayer.c:5370 #, c-format msgid "Deleted %ld point" msgid_plural "Deleted %ld points" msgstr[0] "" msgstr[1] "" #: ../src/viktrwlayer.c:5531 msgid "Internal Error in vik_trw_layer_uniquify_tracks" msgstr "" #: ../src/viktrwlayer.c:5588 ../src/viktrwlayer.c:5635 #: ../src/viktrwlayer.c:5814 msgid "" "Multiple entries with the same name exist. This method only works with " "unique names. Force unique names now?" msgstr "" #: ../src/viktrwlayer.c:5599 msgid "No tracks found" msgstr "Keine GPS-Spuren gefunden" #: ../src/viktrwlayer.c:5607 ../src/viktrwlayer.c:5654 #: ../src/viktrwlayer.c:5834 msgid "Delete Selection" msgstr "Auswahl löschen" #: ../src/viktrwlayer.c:5608 msgid "Select tracks to delete" msgstr "GPS-Spuren zum Löschen auswählen" #: ../src/viktrwlayer.c:5646 msgid "No routes found" msgstr "" #: ../src/viktrwlayer.c:5655 msgid "Select routes to delete" msgstr "" #: ../src/viktrwlayer.c:5761 msgid "Internal Error in vik_trw_layer_uniquify_waypoints" msgstr "" #: ../src/viktrwlayer.c:5824 msgid "No waypoints found" msgstr "Keine Wegpunkte gefunden" #: ../src/viktrwlayer.c:5835 msgid "Select waypoints to delete" msgstr "Wegpunkte zum Löschen auswählen" #: ../src/viktrwlayer.c:5896 #, c-format msgid "" "A waypoint with the name \"%s\" already exists. Really rename to the same " "name?" msgstr "" #: ../src/viktrwlayer.c:5926 #, c-format msgid "" "A track with the name \"%s\" already exists. Really rename to the same name?" msgstr "" #: ../src/viktrwlayer.c:5963 #, c-format msgid "" "A route with the name \"%s\" already exists. Really rename to the same name?" msgstr "" #: ../src/viktrwlayer.c:6085 ../src/viktrwlayer.c:6337 msgid "_Goto" msgstr "_Gehe zu" #: ../src/viktrwlayer.c:6104 msgid "_Visit Geocache Webpage" msgstr "Zur Geocache _Internetseite" #: ../src/viktrwlayer.c:6123 msgid "_Show Picture..." msgstr "Bild _anzeigen..." #: ../src/viktrwlayer.c:6131 msgid "Update Geotag on _Image" msgstr "Geotag über _Bild aktualisieren" #: ../src/viktrwlayer.c:6137 msgid "_Update" msgstr "_Aktualisieren" #: ../src/viktrwlayer.c:6142 msgid "Update and _Keep File Timestamp" msgstr "Aktualisieren und _Zeitstempel der Datei erhalten" #: ../src/viktrwlayer.c:6153 msgid "Visit _Webpage" msgstr "" #: ../src/viktrwlayer.c:6184 msgid "_New Waypoint..." msgstr "Neuer _Wegpunkt..." #: ../src/viktrwlayer.c:6193 msgid "_View All Waypoints" msgstr "Alle Weg_punkte anzeigen" #: ../src/viktrwlayer.c:6205 msgid "Delete _All Waypoints" msgstr "Alle Wegpunkte l_öschen" #: ../src/viktrwlayer.c:6211 msgid "_Delete Waypoints From Selection..." msgstr "Gewählte Wegpun_kte löschen" #: ../src/viktrwlayer.c:6233 msgid "_View All Tracks" msgstr "Alle GPS-Sp_uren anzeigen" #: ../src/viktrwlayer.c:6239 msgid "_New Track" msgstr "" #: ../src/viktrwlayer.c:6247 msgid "Delete _All Tracks" msgstr "Alle GPS-Spu_ren löschen" #: ../src/viktrwlayer.c:6253 msgid "_Delete Tracks From Selection..." msgstr "Gew_ählte GPS-Spuren löschen..." #: ../src/viktrwlayer.c:6276 msgid "_View All Routes" msgstr "" #: ../src/viktrwlayer.c:6282 msgid "_New Route" msgstr "" #: ../src/viktrwlayer.c:6327 msgid "_View Track" msgstr "_Zeige Spur" #: ../src/viktrwlayer.c:6329 msgid "_View Route" msgstr "" #: ../src/viktrwlayer.c:6343 msgid "_Startpoint" msgstr "_Startpunkt" #: ../src/viktrwlayer.c:6349 msgid "\"_Center\"" msgstr "_Zentriere" #: ../src/viktrwlayer.c:6355 msgid "_Endpoint" msgstr "_Endpunkt" #: ../src/viktrwlayer.c:6361 msgid "_Highest Altitude" msgstr "_Höchster Punkt" #: ../src/viktrwlayer.c:6367 msgid "_Lowest Altitude" msgstr "_Tiefster Punkt" #: ../src/viktrwlayer.c:6375 msgid "_Maximum Speed" msgstr "_Maximalgeschwindigkeit" #: ../src/viktrwlayer.c:6384 msgid "Co_mbine" msgstr "" #: ../src/viktrwlayer.c:6392 msgid "_Merge By Time..." msgstr "Vereinen nach _Zeit" #: ../src/viktrwlayer.c:6397 msgid "Merge _Segments" msgstr "" #: ../src/viktrwlayer.c:6403 msgid "Merge _With Other Tracks..." msgstr "Mit _anderen Spuren vereinen..." #: ../src/viktrwlayer.c:6409 msgid "_Append Track..." msgstr "" #: ../src/viktrwlayer.c:6411 msgid "_Append Route..." msgstr "" #: ../src/viktrwlayer.c:6417 msgid "Append _Route..." msgstr "" #: ../src/viktrwlayer.c:6419 msgid "Append _Track..." msgstr "" #: ../src/viktrwlayer.c:6426 msgid "_Split" msgstr "" #: ../src/viktrwlayer.c:6434 msgid "_Split By Time..." msgstr "_Trenne nach Zeit" #. ATM always enable this entry - don't want to have to analyse the track before displaying the menu - to keep the menu speedy #: ../src/viktrwlayer.c:6440 msgid "Split Se_gments" msgstr "" #: ../src/viktrwlayer.c:6446 msgid "Split By _Number of Points..." msgstr "Tre_nne nach Anzahl der Punkte" #: ../src/viktrwlayer.c:6451 msgid "Split at _Trackpoint" msgstr "" #: ../src/viktrwlayer.c:6460 msgid "Delete Poi_nts" msgstr "" #: ../src/viktrwlayer.c:6466 msgid "Delete Points With The Same _Position" msgstr "" #: ../src/viktrwlayer.c:6471 msgid "Delete Points With The Same _Time" msgstr "" #: ../src/viktrwlayer.c:6477 msgid "_Reverse Track" msgstr "GPS-Spur _umkehren" #: ../src/viktrwlayer.c:6479 msgid "_Reverse Route" msgstr "" #: ../src/viktrwlayer.c:6488 msgid "Down_load Maps Along Track..." msgstr "_Lade Karte entlang der Spur..." #: ../src/viktrwlayer.c:6490 msgid "Down_load Maps Along Route..." msgstr "" #: ../src/viktrwlayer.c:6497 msgid "_Apply DEM Data" msgstr "Verwende DEM-D_aten" #: ../src/viktrwlayer.c:6504 msgid "_Export Track as GPX..." msgstr "" #: ../src/viktrwlayer.c:6506 msgid "_Export Route as GPX..." msgstr "" #: ../src/viktrwlayer.c:6513 msgid "E_xtend Track End" msgstr "Verlänger_e Spurende" #: ../src/viktrwlayer.c:6515 msgid "E_xtend Route End" msgstr "" #: ../src/viktrwlayer.c:6522 msgid "C_onvert to a Route" msgstr "" #: ../src/viktrwlayer.c:6524 msgid "C_onvert to a Track" msgstr "" #: ../src/viktrwlayer.c:6532 msgid "Extend _Using Route Finder" msgstr "Verlängere über _Routenfinder" #: ../src/viktrwlayer.c:6548 msgid "_Upload to GPS..." msgstr "" #: ../src/viktrwlayer.c:6559 msgid "_View Google Directions" msgstr "Google _Directions anzeigen" #: ../src/viktrwlayer.c:6579 msgid "Use with _Filter" msgstr "_Filter anwenden" #: ../src/viktrwlayer.c:6612 msgid "_Edit Trackpoint" msgstr "Spurpunkt _bearbeiten" #: ../src/viktrwlayer.c:7524 #, c-format msgid " - Gain %dm:Loss %dm" msgstr " - Gewinn %d m: Verlust %d m" #: ../src/viktrwlayer.c:7526 #, c-format msgid " - Gain %dft:Loss %dft" msgstr " - Gewinn %d ft: Verlust %d ft" #: ../src/viktrwlayer.c:7531 #, c-format msgid " - Bearing %3.1f° - Step %s" msgstr "" #: ../src/viktrwlayer.c:8124 #, c-format msgid "Could not launch %s to open file." msgstr "Konnte %s nicht zum Dateiöffnen starten." #: ../src/viktrwlayer.c:8205 #, c-format msgid "Creating %d Image Thumbnails..." msgstr "%d Bild-Vorschauen erzeugen ..." #: ../src/viktrwlayer.c:8524 msgid "No map layer in use. Create one first" msgstr "Keine Karten-Ebene in Benutzung. Zuerst eine erzeugen" #: ../src/viktrwlayer_propwin.c:898 ../src/viktrwlayer_propwin.c:1155 #, c-format msgid "%.1f kph" msgstr "%.1f km/h" #: ../src/viktrwlayer_propwin.c:901 ../src/viktrwlayer_propwin.c:1158 #, c-format msgid "%.1f mph" msgstr "%.1f mph" #: ../src/viktrwlayer_propwin.c:904 ../src/viktrwlayer_propwin.c:1161 #, c-format msgid "%.1f knots" msgstr "%.1f knots" #. VIK_UNITS_SPEED_METRES_PER_SECOND: #: ../src/viktrwlayer_propwin.c:908 ../src/viktrwlayer_propwin.c:1165 #, c-format msgid "%.1f m/s" msgstr "%.1f m/s" #: ../src/viktrwlayer_propwin.c:1745 #, c-format msgid "%.1f miles" msgstr "%.1f Meilen" #: ../src/viktrwlayer_propwin.c:1747 #, c-format msgid "%.1f km" msgstr "%.1f km" #: ../src/viktrwlayer_propwin.c:2681 msgid "Failed spliting track. Track unchanged" msgstr "Trennen der Spur fehlgeschlagen. Spur unverändert" #: ../src/viktrwlayer_propwin.c:2779 ../src/viktrwlayer_propwin.c:3178 #, c-format msgid "%s - Track Properties" msgstr "%s - Spur-Eigenschaften" #: ../src/viktrwlayer_propwin.c:2784 msgid "Split at _Marker" msgstr "Bei Markierung _trennen" #: ../src/viktrwlayer_propwin.c:2785 msgid "Split _Segments" msgstr "_Segmente trennen" #: ../src/viktrwlayer_propwin.c:2786 msgid "_Reverse" msgstr "_Umkehren" #: ../src/viktrwlayer_propwin.c:2787 msgid "_Delete Dupl." msgstr "_Doppelte Daten löschen" #: ../src/viktrwlayer_propwin.c:2813 msgid "Comment:" msgstr "Kommentar:" #: ../src/viktrwlayer_propwin.c:2814 msgid "Description:" msgstr "" #: ../src/viktrwlayer_propwin.c:2815 msgid "Track Length:" msgstr "Spur-Länge:" #: ../src/viktrwlayer_propwin.c:2816 msgid "Trackpoints:" msgstr "Spurpunkte:" #: ../src/viktrwlayer_propwin.c:2817 msgid "Segments:" msgstr "Segmente:" #: ../src/viktrwlayer_propwin.c:2818 msgid "Duplicate Points:" msgstr "Doppelte Punkte:" #: ../src/viktrwlayer_propwin.c:2819 msgid "Max Speed:" msgstr "Höchstgeschwindigkeit:" #: ../src/viktrwlayer_propwin.c:2820 msgid "Avg. Speed:" msgstr "Durchschnittsgeschwindigkeit:" #: ../src/viktrwlayer_propwin.c:2821 msgid "Moving Avg. Speed:" msgstr "Mittlere Durchschnittsgeschwindigkeit:" #: ../src/viktrwlayer_propwin.c:2822 msgid "Avg. Dist. Between TPs:" msgstr "Durchschnt. Abstand TPs:" #: ../src/viktrwlayer_propwin.c:2823 msgid "Elevation Range:" msgstr "Höhendifferenz:" #: ../src/viktrwlayer_propwin.c:2824 msgid "Total Elevation Gain/Loss:" msgstr "Absoluter Höhengewinn/-verlust:" #: ../src/viktrwlayer_propwin.c:2825 msgid "Start:" msgstr "Start:" #: ../src/viktrwlayer_propwin.c:2826 msgid "End:" msgstr "Ende:" #: ../src/viktrwlayer_propwin.c:2827 msgid "Duration:" msgstr "Dauer:" #: ../src/viktrwlayer_propwin.c:2828 msgid "Color:" msgstr "" #: ../src/viktrwlayer_propwin.c:2877 ../src/viktrwlayer_propwin.c:2901 #: ../src/viktrwlayer_propwin.c:2929 ../src/viktrwlayer_propwin.c:2966 #: ../src/viktrwlayer_propwin.c:2984 ../src/viktrwlayer_propwin.c:3034 #: ../src/viktrwlayer_propwin.c:3035 ../src/viktrwlayer_propwin.c:3036 #: ../src/viktrwlayer_propwin.c:3062 ../src/viktrwlayer_propwin.c:3063 #: ../src/viktrwlayer_propwin.c:3078 ../src/viktrwlayer_propwin.c:3079 #: ../src/viktrwlayer_propwin.c:3092 ../src/viktrwlayer_propwin.c:3093 #: ../src/viktrwlayer_propwin.c:3106 ../src/viktrwlayer_propwin.c:3107 #: ../src/viktrwlayer_propwin.c:3120 ../src/viktrwlayer_propwin.c:3121 #: ../src/viktrwlayer_propwin.c:3134 ../src/viktrwlayer_propwin.c:3135 #, c-format msgid "No Data" msgstr "Keine Daten" #: ../src/viktrwlayer_propwin.c:3031 #, c-format msgid "%d minutes" msgstr "%d Minuten" #: ../src/viktrwlayer_propwin.c:3058 msgid "Statistics" msgstr "Statistik" #: ../src/viktrwlayer_propwin.c:3064 msgid "Show D_EM" msgstr "D_EM Anzeigen" #: ../src/viktrwlayer_propwin.c:3065 ../src/viktrwlayer_propwin.c:3080 #: ../src/viktrwlayer_propwin.c:3094 ../src/viktrwlayer_propwin.c:3136 msgid "Show _GPS Speed" msgstr "_GPS-Geschwindigkeit anzeigen" #: ../src/viktrwlayer_propwin.c:3067 ../src/viktrwlayer_propwin.c:3082 #: ../src/viktrwlayer_propwin.c:3110 ../src/viktrwlayer_propwin.c:3138 msgid "Track Distance:" msgstr "Spur-Distanz:" #: ../src/viktrwlayer_propwin.c:3068 ../src/viktrwlayer_propwin.c:3125 msgid "Track Height:" msgstr "Spur-Höhe:" #: ../src/viktrwlayer_propwin.c:3073 msgid "Elevation-distance" msgstr "Höhenunterschied" #: ../src/viktrwlayer_propwin.c:3083 msgid "Track Gradient:" msgstr "" #: ../src/viktrwlayer_propwin.c:3087 msgid "Gradient-distance" msgstr "" #: ../src/viktrwlayer_propwin.c:3096 ../src/viktrwlayer_propwin.c:3111 #: ../src/viktrwlayer_propwin.c:3124 msgid "Track Time:" msgstr "Spur-Zeit:" #: ../src/viktrwlayer_propwin.c:3097 ../src/viktrwlayer_propwin.c:3139 msgid "Track Speed:" msgstr "Spur-Geschwindigkeit:" #: ../src/viktrwlayer_propwin.c:3101 msgid "Speed-time" msgstr "Geschwindigkeit-Zeit" #: ../src/viktrwlayer_propwin.c:3108 ../src/viktrwlayer_propwin.c:3122 msgid "Show S_peed" msgstr "_Geschwindigkeit anzeigen" #: ../src/viktrwlayer_propwin.c:3115 msgid "Distance-time" msgstr "Distanz-Zeit" #: ../src/viktrwlayer_propwin.c:3129 msgid "Elevation-time" msgstr "Höhe-Zeit" #: ../src/viktrwlayer_propwin.c:3143 msgid "Speed-distance" msgstr "Geschwindigkeit-Distanz" #: ../src/viktrwlayer_tpwin.c:118 msgid "Part of Track:" msgstr "Teile der Spur:" #: ../src/viktrwlayer_tpwin.c:119 msgid "Latitude:" msgstr "Breitengrad:" #: ../src/viktrwlayer_tpwin.c:120 msgid "Longitude:" msgstr "Längengrad:" #: ../src/viktrwlayer_tpwin.c:121 msgid "Altitude:" msgstr "Höhe:" #: ../src/viktrwlayer_tpwin.c:122 msgid "Timestamp:" msgstr "Zeitstempel:" #: ../src/viktrwlayer_tpwin.c:123 msgid "Time:" msgstr "Zeit:" #: ../src/viktrwlayer_tpwin.c:124 msgid "Distance Difference:" msgstr "Distanz-Differenz:" #: ../src/viktrwlayer_tpwin.c:125 msgid "Time Difference:" msgstr "Zeitunterschied:" #: ../src/viktrwlayer_tpwin.c:126 msgid "\"Speed\" Between:" msgstr "\"Geschwindigkeit\" zwischen:" #: ../src/viktrwlayer_tpwin.c:127 msgid "VDOP:" msgstr "VDOP:" #: ../src/viktrwlayer_tpwin.c:128 msgid "HDOP:" msgstr "HDOP:" #: ../src/viktrwlayer_tpwin.c:129 msgid "PDOP:" msgstr "PDOP:" #: ../src/viktrwlayer_tpwin.c:130 msgid "SAT/FIX:" msgstr "SAT/FIX:" #: ../src/viktrwlayer_tpwin.c:139 msgid "Trackpoint" msgstr "Spurpunkt" #: ../src/viktrwlayer_tpwin.c:142 msgid "_Insert After" msgstr "Einfügen _nach" #: ../src/viktrwlayer_tpwin.c:144 msgid "Split Here" msgstr "Hier auftrennen" #: ../src/viktrwlayer_geotag.c:446 #, c-format msgid "Geotagging %d Images..." msgstr "Georeferenziere %d Bilder..." #: ../src/viktrwlayer_geotag.c:510 msgid "Geotag Images" msgstr "Bilder georeferenzieren" #: ../src/viktrwlayer_geotag.c:516 msgid "Images" msgstr "Bilder" #: ../src/viktrwlayer_geotag.c:520 msgid "Overwrite Existing Waypoints:" msgstr "" #: ../src/viktrwlayer_geotag.c:523 msgid "Overwrite Existing GPS Information:" msgstr "Überschreibe existierende GPS-Information:" #: ../src/viktrwlayer_geotag.c:525 msgid "Keep File Modification Timestamp:" msgstr "Erhalte Zeitstempel für Dateiänderung:" #: ../src/viktrwlayer_geotag.c:555 msgid "Create Waypoints:" msgstr "Erzeuge Wegpunkte:" #: ../src/viktrwlayer_geotag.c:563 msgid "Write EXIF:" msgstr "Schreibe EXIF:" #: ../src/viktrwlayer_geotag.c:575 msgid "Interpolate Between Track Segments:" msgstr "Interpoliere zwischen Spursegmenten:" #: ../src/viktrwlayer_geotag.c:579 msgid "Image Time Offset (Seconds):" msgstr "Bild-Zeitversatz (Sekunden)" #: ../src/viktrwlayer_geotag.c:581 msgid "" "The number of seconds to ADD to the photos time to make it match the GPS " "data. Calculate this with (GPS - Photo). Can be negative or positive. Useful " "to adjust times when a camera's timestamp was incorrect." msgstr "" "Anzahl Sekunden, die der Zeitinformation im Bild hinzugefügt werden muss, um " "synchron zu den GPS-Daten zu sein. Kann negativ oder positiv sein. Nützlich, " "wenn der Kamerazeitstempel falsch war." #: ../src/viktrwlayer_geotag.c:584 msgid "Image Timezone:" msgstr "Zeitzone des Bildes" #: ../src/viktrwlayer_geotag.c:586 msgid "" "The timezone that was used when the images were created. For example, if a " "camera is set to AWST or +8:00 hours. Enter +8:00 here so that the correct " "adjustment to the images' time can be made. GPS data is always in UTC." msgstr "" "Zeitzone in der das Bild erzeugt wurde. Z.B. wenn die Kamera CEST oder +2:00 " "h nutzt, dann hier +2:00 eingeben, so dass der Zeitstempel des Bildes auf " "die GPS-Zeitbasis (UTC) justiert wird." #: ../src/viktrwlayer_geotag.c:590 #, c-format msgid "Using track: %s" msgstr "Benutze Spur: %s" #: ../src/viktrwlayer_geotag.c:592 #, c-format msgid "Using all tracks in: %s" msgstr "Benutze alle Spuren in: %s" #: ../src/vikstatus.c:105 msgid "Current zoom level. Click to select a new one." msgstr "" #: ../src/vikwaypoint.c:34 msgid "Waypoint" msgstr "" #. TODO get rid of this as this is unnecessary duplication... #: ../src/vikwindow.c:221 msgid "Pan" msgstr "Greifer" #: ../src/vikwindow.c:221 msgid "Zoom" msgstr "Vergrößerung" #: ../src/vikwindow.c:221 msgid "Ruler" msgstr "Lineal" #: ../src/vikwindow.c:221 msgid "Select" msgstr "Auswahl" #. Create tooltip #: ../src/vikwindow.c:440 msgid "Select zoom level" msgstr "" #: ../src/vikwindow.c:645 #, c-format msgid "" "Do you want to save the changes you made to the document \"%s\"?\n" "\n" "Your changes will be lost if you don't save them." msgstr "" "Wollen Sie die Änderungen am Dokument \"%s\" speichern?\n" "Ihre Änderungen gehen verloren, wenn Sie sie nicht speichern." #: ../src/vikwindow.c:649 msgid "Don't Save" msgstr "Nicht speichern" #: ../src/vikwindow.c:696 msgid "mpp" msgstr "mpp" #: ../src/vikwindow.c:696 msgid "pixelfact" msgstr "pixelfact" #: ../src/vikwindow.c:861 #, c-format msgid "%s %s %dm" msgstr "%s %s %d m" #: ../src/vikwindow.c:863 #, c-format msgid "%s %s %dft" msgstr "%s %s %d ft" #: ../src/vikwindow.c:866 #, c-format msgid "%s %s" msgstr "%s %s" #. NB Ctrl+Shift+R is used for Refresh (deemed more important), so use 'U' instead #: ../src/vikwindow.c:1254 msgid "_Ruler" msgstr "_Messwerkzeug" #: ../src/vikwindow.c:1254 msgid "Ruler Tool" msgstr "Messwerkzeug" #: ../src/vikwindow.c:1502 ../src/vikwindow.c:3138 msgid "_Zoom" msgstr "_Vergrößerung" #: ../src/vikwindow.c:1502 msgid "Zoom Tool" msgstr "Vergrößerungswerkzeug" #: ../src/vikwindow.c:1547 ../src/vikwindow.c:3139 msgid "_Pan" msgstr "_Greife" #: ../src/vikwindow.c:1547 msgid "Pan Tool" msgstr "Greifer-Werkzeug" #: ../src/vikwindow.c:1664 msgid "_Select" msgstr "Aus_wählen" #: ../src/vikwindow.c:1664 msgid "Select Tool" msgstr "Auswahlwerkzeug" #: ../src/vikwindow.c:1809 msgid "You must select a layer to show its properties." msgstr "Sie müssen eine Ebene auswählen, um ihre Eigenschaften anzuzeigen." #. No error to show, so unlikely this will get called #: ../src/vikwindow.c:1824 msgid "The help system is not available." msgstr "" #. Main error path #: ../src/vikwindow.c:1827 #, c-format msgid "" "Help is not available because: %s.\n" "Ensure a Mime Type ghelp handler program is installed (e.g. yelp)." msgstr "" #: ../src/vikwindow.c:1850 msgid "You must select a layer to delete." msgstr "Sie müssen eine Ebene zum Löschen auswählen." #: ../src/vikwindow.c:2087 msgid "Untitled" msgstr "Unbenannt" #: ../src/vikwindow.c:2194 #, c-format msgid "Unable to add '%s' to the list of recently used documents" msgstr "" "'%s' kann der Liste der aktuell benutzten Dokumente nicht angefügt werden." #: ../src/vikwindow.c:2208 msgid "The file you requested could not be opened." msgstr "Die angeforderte Datei konnte nicht geöffnet werden." #: ../src/vikwindow.c:2211 msgid "" "GPSBabel is required to load files of this type or GPSBabel encountered " "problems." msgstr "" "GPSBabel wird benötigt, um Dateien dieses Typs zu laden oder es gab ein " "Problem beim Anwenden von GPSBabel." #: ../src/vikwindow.c:2214 #, c-format msgid "Unable to load malformed GPX file %s" msgstr "" #: ../src/vikwindow.c:2217 #, c-format msgid "Unsupported file type for %s" msgstr "Nicht unterstützter Dateityp für %s" #. Since we can process .vik files with issues just show a warning in the status bar #. Not that a user can do much about it... or tells them what this issue is yet... #: ../src/vikwindow.c:2223 #, c-format msgid "WARNING: issues encountered loading %s" msgstr "" #: ../src/vikwindow.c:2278 msgid "Please select a GPS data file to open. " msgstr "Bitte geben Sie eine GPS-Datendatei zum Öffnen an. " #: ../src/vikwindow.c:2288 msgid "Geocaching" msgstr "Geocaching" #: ../src/vikwindow.c:2294 msgid "Google Earth" msgstr "Google Earth" #: ../src/vikwindow.c:2299 msgid "GPX" msgstr "GPX" #: ../src/vikwindow.c:2304 ../src/vikwindow.c:2387 #: ../src/viking.desktop.in.h:1 msgid "Viking" msgstr "Viking" #: ../src/vikwindow.c:2374 msgid "Save as Viking File." msgstr "Als Viking-Datei speichern." #. Try harder... #: ../src/vikwindow.c:2619 ../src/vikwindow.c:2625 msgid "Generating image file..." msgstr "" #: ../src/vikwindow.c:2647 msgid "" "Failed to generate internal image.\n" "\n" "Try creating a smaller image." msgstr "" #: ../src/vikwindow.c:2655 msgid "Failed to generate image file." msgstr "" #. Success #: ../src/vikwindow.c:2660 msgid "Image file generated." msgstr "" #: ../src/vikwindow.c:2764 msgid "" "Viewable region outside allowable pixel size bounds for image. Clipping " "width/height values." msgstr "" "Der sichtbare Bereich liegt außerhalb der erlaubten Pixelzahl des Bildes. " "Höhe/Breite beschnitten." #: ../src/vikwindow.c:2789 #, c-format msgid "Total area: %ldm x %ldm (%.3f sq. km)" msgstr "Gesamtareal: %ld m x %ld m (%.3f km²)" #: ../src/vikwindow.c:2792 #, c-format msgid "Total area: %ldm x %ldm (%.3f sq. miles)" msgstr "Gesamtareal: %ld m x %ld m (%.3f Quadratmeilen)" #: ../src/vikwindow.c:2813 msgid "Save Image" msgstr "Bild speichern" #: ../src/vikwindow.c:2834 msgid "PNG" msgstr "" #: ../src/vikwindow.c:2857 msgid "You must be in UTM mode to use this feature" msgstr "Diese Funktion nur im UTM-Modus möglich." #: ../src/vikwindow.c:2862 msgid "Choose a directory to hold images" msgstr "Ein Verzeichnis für Speicherung der Bilder auswählen" #. todo: default for answers inside VikWindow or static (thruout instance) #: ../src/vikwindow.c:2883 msgid "Save to Image File" msgstr "Als Bild-Datei speichern" #: ../src/vikwindow.c:2900 msgid "Width (pixels):" msgstr "Breite (Pixel):" #: ../src/vikwindow.c:2902 msgid "Height (pixels):" msgstr "Höhe (Pixel):" #: ../src/vikwindow.c:2905 msgid "" "WARNING: USING LARGE IMAGES OVER 10000x10000\n" "MAY CRASH THE PROGRAM!" msgstr "" #: ../src/vikwindow.c:2907 msgid "Zoom (meters per pixel):" msgstr "Vergrösserung (Meter pro Pixel):" #: ../src/vikwindow.c:2921 msgid "Area in current viewable window" msgstr "Bereich in aktuell sichtbarem Fenster" #: ../src/vikwindow.c:2931 msgid "Save as PNG" msgstr "Als PNG speichern" #: ../src/vikwindow.c:2932 msgid "Save as JPEG" msgstr "Als JPEG speichern" #: ../src/vikwindow.c:2954 msgid "East-west image tiles:" msgstr "Ost-West-Bildkachel:" #: ../src/vikwindow.c:2956 msgid "North-south image tiles:" msgstr "Nord-Süd-Bildkachel:" #: ../src/vikwindow.c:3097 msgid "Choose a background color" msgstr "Hintergrundfarbe wählen" #: ../src/vikwindow.c:3113 msgid "Choose a track highlight color" msgstr "Farbe für Hervorhebung der Spur wählen" #: ../src/vikwindow.c:3134 msgid "_File" msgstr "_Datei" #: ../src/vikwindow.c:3135 msgid "_Edit" msgstr "_Bearbeiten" #: ../src/vikwindow.c:3136 msgid "_View" msgstr "_Ansicht" #: ../src/vikwindow.c:3137 msgid "_Show" msgstr "_Anzeigen" #: ../src/vikwindow.c:3140 msgid "_Layers" msgstr "_Ebenen" #: ../src/vikwindow.c:3141 msgid "_Tools" msgstr "_Werkzeuge" #: ../src/vikwindow.c:3142 msgid "_Webtools" msgstr "_Internetwerkzeuge" #: ../src/vikwindow.c:3143 ../src/vikwindow.c:3206 msgid "_Help" msgstr "_Hilfe" #: ../src/vikwindow.c:3145 msgid "New file" msgstr "Neue Datei" #: ../src/vikwindow.c:3146 msgid "_Open..." msgstr "_Öffnen..." #: ../src/vikwindow.c:3146 msgid "Open a file" msgstr "Eine Datei öffnen" #: ../src/vikwindow.c:3147 msgid "Open _Recent File" msgstr "_Zuletzt geöffnet" #: ../src/vikwindow.c:3148 msgid "Append _File..." msgstr "Datei _anfügen..." #: ../src/vikwindow.c:3148 msgid "Append data from a different file" msgstr "Daten auf einer anderen Datei anfügen" #: ../src/vikwindow.c:3149 msgid "A_cquire" msgstr "_Laden" #: ../src/vikwindow.c:3150 msgid "Transfer data from a GPS device" msgstr "Daten von GPS-Gerät übertragen" #: ../src/vikwindow.c:3151 msgid "Import File With GPS_Babel..." msgstr "Importiere Datei mit GPS_Babel..." #: ../src/vikwindow.c:3151 msgid "Import file via GPSBabel converter" msgstr "Importiere Datei über den GPSBabel-Dateikonvertierer" #: ../src/vikwindow.c:3153 msgid "Google _Directions..." msgstr "Google-_Richtung..." #: ../src/vikwindow.c:3153 msgid "Get driving directions from Google" msgstr "Fahrtrichtung von Google beziehen" #: ../src/vikwindow.c:3156 msgid "_OSM Traces..." msgstr "_OSM-Spuren..." #: ../src/vikwindow.c:3156 msgid "Get traces from OpenStreetMap" msgstr "Hole Spuren von Openstreetmap" #: ../src/vikwindow.c:3157 msgid "_My OSM Traces..." msgstr "" #: ../src/vikwindow.c:3157 msgid "Get Your Own Traces from OpenStreetMap" msgstr "" #: ../src/vikwindow.c:3160 msgid "Geo_caches..." msgstr "Geo_caches..." #: ../src/vikwindow.c:3160 msgid "Get Geocaches from geocaching.com" msgstr "Geocaches von geocaching.com beziehen" #: ../src/vikwindow.c:3163 msgid "Create waypoints from geotagged images" msgstr "Erzeuge Wegpunkte aus georeferenzierten Bildern" #: ../src/vikwindow.c:3166 msgid "Create waypoints from Wikipedia items in the current view" msgstr "" #: ../src/vikwindow.c:3168 msgid "_Save" msgstr "_Speichern" #: ../src/vikwindow.c:3168 msgid "Save the file" msgstr "Datei speichern" #: ../src/vikwindow.c:3169 msgid "Save _As..." msgstr "Speichern _unter …" #: ../src/vikwindow.c:3169 msgid "Save the file under different name" msgstr "Datei unter anderem Namen Speichern" #: ../src/vikwindow.c:3170 msgid "_Generate Image File..." msgstr "_Bild-Datei erzeugen..." #: ../src/vikwindow.c:3170 msgid "Save a snapshot of the workspace into a file" msgstr "Speichere Schnappschuss des Arbeitsbereichs in einer Datei." #: ../src/vikwindow.c:3171 msgid "Generate _Directory of Images..." msgstr "Bild-_Verzeichnis erzeugen..." #: ../src/vikwindow.c:3171 msgid "FIXME:IMGDIR" msgstr "FIXME:IMGDIR" #: ../src/vikwindow.c:3174 msgid "_Print..." msgstr "_Drucken..." #: ../src/vikwindow.c:3174 msgid "Print maps" msgstr "Karten drucken" #: ../src/vikwindow.c:3177 msgid "E_xit" msgstr "Be_enden" #: ../src/vikwindow.c:3177 msgid "Exit the program" msgstr "Das Programm beenden" #: ../src/vikwindow.c:3178 msgid "Save and Exit" msgstr "Speichern _und beenden" #: ../src/vikwindow.c:3178 msgid "Save and Exit the program" msgstr "Speichern und das Programm beenden" #: ../src/vikwindow.c:3180 msgid "Go to the _Default Location" msgstr "Gehe zum _Ausgangsstandort" #: ../src/vikwindow.c:3180 msgid "Go to the default location" msgstr "Gehe zum Ausgangsstandort" #: ../src/vikwindow.c:3181 msgid "Go to _Location..." msgstr "Gehe zum _Ort" #: ../src/vikwindow.c:3181 msgid "Go to address/place using text search" msgstr "Gehe zu Adresse/Ort mittels _Textsuche" #: ../src/vikwindow.c:3182 msgid "_Go to Lat/Lon..." msgstr "Gehe zu B_reite/Länge..." #: ../src/vikwindow.c:3182 msgid "Go to arbitrary lat/lon coordinate" msgstr "Gehe zu beliebiger Breiten-/Längenkoordinate" #: ../src/vikwindow.c:3183 msgid "Go to UTM..." msgstr "Gehe zu _UTM..." #: ../src/vikwindow.c:3183 msgid "Go to arbitrary UTM coordinate" msgstr "Gehe zu beliebiger UTM-Koordinate" #: ../src/vikwindow.c:3184 msgid "_Refresh" msgstr "" #: ../src/vikwindow.c:3184 msgid "Refresh any maps displayed" msgstr "" #: ../src/vikwindow.c:3185 msgid "Set _Highlight Color..." msgstr "Farbe für _Hervorhebung wählen..." #: ../src/vikwindow.c:3186 msgid "Set Bac_kground Color..." msgstr "Hintergrund_farbe" #: ../src/vikwindow.c:3187 msgid "Zoom _In" msgstr "Ver_größern" #: ../src/vikwindow.c:3188 msgid "Zoom _Out" msgstr "Ver_kleinern" #: ../src/vikwindow.c:3189 msgid "Zoom _To..." msgstr "Zoome _auf..." #: ../src/vikwindow.c:3190 msgid "Pan _North" msgstr "Richtung _Nord" #: ../src/vikwindow.c:3191 msgid "Pan _East" msgstr "Richtung _Ost" #: ../src/vikwindow.c:3192 msgid "Pan _South" msgstr "Richtung _Süd" #: ../src/vikwindow.c:3193 msgid "Pan _West" msgstr "Richtung _West" #: ../src/vikwindow.c:3194 msgid "Background _Jobs" msgstr "Hintergrund_aufträge" #: ../src/vikwindow.c:3196 msgid "Cu_t" msgstr "_Ausschneiden" #: ../src/vikwindow.c:3197 msgid "_Copy" msgstr "K_opieren" #: ../src/vikwindow.c:3198 msgid "_Paste" msgstr "_Einfügen" #: ../src/vikwindow.c:3199 msgid "_Delete" msgstr "_Löschen" #: ../src/vikwindow.c:3200 msgid "Delete All" msgstr "_Alle löschen" #: ../src/vikwindow.c:3201 msgid "_Flush Map Cache" msgstr "Kartenpu_ffer löschen" #: ../src/vikwindow.c:3202 msgid "_Set the Default Location" msgstr "Ausgangsstandort _setzen" #: ../src/vikwindow.c:3202 msgid "Set the Default Location to the current position" msgstr "Ausgangsstandort auf aktuelle Position setzen" #: ../src/vikwindow.c:3203 msgid "_Preferences" msgstr "_Einstellungen" #: ../src/vikwindow.c:3204 msgid "_Properties" msgstr "Ei_genschaften..." #: ../src/vikwindow.c:3207 msgid "_About" msgstr "_Über" #: ../src/vikwindow.c:3213 msgid "_UTM Mode" msgstr "_UTM-Modus" #: ../src/vikwindow.c:3214 msgid "_Expedia Mode" msgstr "_Expedia-Modus" #: ../src/vikwindow.c:3215 msgid "_Mercator Mode" msgstr "_Mercator-Modus" #: ../src/vikwindow.c:3216 msgid "Lat_/Lon Mode" msgstr "Längen-_/Breitengrad-Modus" #: ../src/vikwindow.c:3220 msgid "Show _Scale" msgstr "Maß_stab anzeigen" #: ../src/vikwindow.c:3220 msgid "Show Scale" msgstr "Maßstab anzeigen" #: ../src/vikwindow.c:3221 msgid "Show _Center Mark" msgstr "_Mittenmarkierung anzeigen" #: ../src/vikwindow.c:3221 msgid "Show Center Mark" msgstr "Zentrumsmarkierung anzeigen" #: ../src/vikwindow.c:3222 msgid "Show _Highlight" msgstr "_Hervorhebung anzeigen" #: ../src/vikwindow.c:3222 msgid "Show Highlight" msgstr "Hervorhebung anzeigen" #: ../src/vikwindow.c:3223 msgid "_Full Screen" msgstr "_Vollbild" #: ../src/vikwindow.c:3223 msgid "Activate full screen mode" msgstr "Vollbildmodus aktivieren" #: ../src/vikwindow.c:3224 msgid "Show Side _Panel" msgstr "Seiten_fenster anzeigen" #: ../src/vikwindow.c:3224 msgid "Show Side Panel" msgstr "Seitenfenster anzeigen" #: ../src/vikwindow.c:3225 msgid "Show Status_bar" msgstr "Status_leiste anzeigen" #: ../src/vikwindow.c:3225 msgid "Show Statusbar" msgstr "Statusleiste anzeigen" #: ../src/vikwindow.c:3226 msgid "Show _Toolbar" msgstr "_Werkzeugleiste anzeigen" #: ../src/vikwindow.c:3226 msgid "Show Toolbar" msgstr "Werkzeugleiste anzeigen" #: ../src/vikwindow.c:3227 msgid "Show _Menu" msgstr "_Menü anzeigen" #: ../src/vikwindow.c:3227 msgid "Show Menu" msgstr "Menü anzeigen" #: ../src/viking.desktop.in.h:2 msgid "GPS Data Manager" msgstr "GPS-Daten-Manager" #: ../src/viking.desktop.in.h:3 msgid "Map Based GPS Data Manager (live data capable)." msgstr "Kartenbasierter GPS Daten-Manager (Live-Daten fähig)" #: ../src/libjpeg/jpeg-data.c:206 msgid "Data does not follow JPEG specification." msgstr "Daten erfüllen nicht die JPEG-Spezifikation." #: ../src/libjpeg/jpeg-data.c:291 #, c-format msgid "Path '%s' invalid." msgstr "Pfad '%s' ist ungültig." #: ../src/libjpeg/jpeg-data.c:309 #, c-format msgid "Could not read '%s'." msgstr "Konnte '%s' nicht lesen." viking-1.4.2/po/es.po0000644000175000017500000024713012175546146011335 00000000000000# Spanish translation for viking # Copyright (c) 2007 Rosetta Contributors and Canonical Ltd 2007 # This file is distributed under the same license as the viking package. # FIRST AUTHOR , 2007. # msgid "" msgstr "" "Project-Id-Version: viking\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-02-04 23:29+0100\n" "PO-Revision-Date: 2012-11-04 20:58+0000\n" "Last-Translator: Aiguanachein \n" "Language-Team: Spanish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2013-03-23 17:12+0000\n" "X-Generator: Launchpad (build 16540)\n" #: ../src/dialog.c:199 msgid "Waypoint Properties" msgstr "Propiedades del punto de ruta (Waypoint)" #: ../src/acquire.c:103 ../src/vikgpslayer.c:1185 msgid "Done." msgstr "Hecho." #: ../src/acquire.c:114 msgid "No data." msgstr "Sin datos." #: ../src/acquire.c:154 ../src/acquire.c:404 msgid "Error: acquisition failed." msgstr "Error: Fallo en la adquisión" #: ../src/acquire.c:341 msgid "Working..." msgstr "Trabajando..." #. This shouldn't happen... #: ../src/acquire.c:394 msgid "" "Unable to create command\n" "Acquire method failed." msgstr "" #: ../src/acquire.c:486 msgid "_Filter" msgstr "" #: ../src/acquire.c:501 #, c-format msgid "Filter with %s" msgstr "" #: ../src/acquire.c:518 msgid "Filter" msgstr "" #: ../src/background.c:52 #, c-format msgid "%d items" msgstr "%d elementos" #: ../src/background.c:248 msgid "Job" msgstr "Tarea" #: ../src/background.c:252 msgid "Progress" msgstr "En proceso" #: ../src/background.c:268 msgid "Viking Background Jobs" msgstr "Tareas en segundo plano de Viking" #: ../src/bing.c:47 msgid "Bing" msgstr "" #. VIK_GTK_WINDOW_FROM_WIDGET(vp) #: ../src/bingmapsource.c:445 msgid "Bing attribution Loading" msgstr "" #: ../src/clipboard.c:95 msgid "paste failed" msgstr "fallo el pegado" #: ../src/clipboard.c:105 msgid "wrong clipboard data size" msgstr "tamaño de los datos del portapapeles incorrecto" #: ../src/clipboard.c:124 #, c-format msgid "" "The clipboard contains sublayer data for %s layers. You must select a layer " "of this type to paste the clipboard data." msgstr "" "El portapapeles contiene datos de subcapa para %s capas. Elija una capa de " "este tipo para pegar los datos del portapapeles." #: ../src/clipboard.c:236 msgid "" "In order to paste a waypoint, please select an appropriate layer to paste " "into." msgstr "Por favor, seleccione una capa apropiada para pegar el waypoint." #: ../src/dialog.c:52 msgid "Go to Lat/Lon" msgstr "Ir a Lat/Lon" #: ../src/dialog.c:64 ../src/dialog.c:251 msgid "Latitude:" msgstr "Latitud:" #: ../src/dialog.c:70 ../src/dialog.c:256 msgid "Longitude:" msgstr "Longitud:" #: ../src/dialog.c:102 msgid "Go to UTM" msgstr "Ir hacia UTM" #: ../src/dialog.c:115 msgid "Northing:" msgstr "Despl. N:" #: ../src/dialog.c:121 msgid "Easting:" msgstr "Despl. E:" #: ../src/dialog.c:128 msgid "Zone:" msgstr "Zona:" #: ../src/dialog.c:131 msgid "Letter:" msgstr "Carta:" #: ../src/dialog.c:233 msgid "Name:" msgstr "Nombre:" #: ../src/dialog.c:261 msgid "Altitude:" msgstr "Altitud:" #: ../src/dialog.c:266 msgid "Comment:" msgstr "Comentario:" #: ../src/dialog.c:274 ../src/osm-traces.c:437 msgid "Description:" msgstr "Descripción:" #: ../src/dialog.c:277 msgid "Image:" msgstr "Imagen:" #: ../src/dialog.c:282 msgid "Symbol:" msgstr "Símbolo:" #: ../src/dialog.c:291 msgid "(none)" msgstr "(nada)" #. TODO: other checks (isalpha or whatever ) #: ../src/dialog.c:356 msgid "Please enter a name for the waypoint." msgstr "Por favor, introduzca el nombre del waypoint." #: ../src/dialog.c:529 ../src/geonamessearch.c:243 #: ../src/datasource_osm_my_traces.c:507 msgid "Nothing was selected" msgstr "Nada fue seleccionado" #: ../src/dialog.c:537 msgid "Add Route" msgstr "" #: ../src/dialog.c:537 msgid "Add Track" msgstr "Añadir ruta" #: ../src/dialog.c:545 msgid "Route Name:" msgstr "" #: ../src/dialog.c:545 msgid "Track Name:" msgstr "Nombre de ruta:" #: ../src/dialog.c:565 msgid "Please enter a name for the track." msgstr "Por favor, introduzca el nombre de la ruta." #: ../src/dialog.c:623 msgid "Zoom Factors..." msgstr "Factor de acercamiento" #: ../src/dialog.c:637 msgid "Zoom factor (in meters per pixel):" msgstr "Factor de zoom (en metros por pixel)" #: ../src/dialog.c:638 msgid "X (easting): " msgstr "X (despl. E): " #: ../src/dialog.c:639 msgid "Y (northing): " msgstr "Y (despl. N): " #: ../src/dialog.c:644 msgid "X and Y zoom factors must be equal" msgstr "Mantener factores de zoom X e Y iguales" #: ../src/dialog.c:699 msgid "1 min" msgstr "1 min" #: ../src/dialog.c:700 msgid "1 hour" msgstr "1 hora" #: ../src/dialog.c:701 msgid "1 day" msgstr "1 día" #: ../src/dialog.c:702 msgid "Custom (in minutes):" msgstr "Personalizado (minutos):" #: ../src/dialog.c:808 msgid "GPS Data and Topo Analyzer, Explorer, and Manager." msgstr "Analizador, Explorador y Gestor de datos topológicos y GPS." #: ../src/dialog.c:809 msgid "" "This program is free software; you can redistribute it and/or modify it " "under the terms of the GNU General Public License as published by the Free " "Software Foundation; either version 2 of the License, or (at your option) " "any later version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT " "ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or " "FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for " "more details.\n" "\n" "You should have received a copy of the GNU General Public License along with " "this program; if not, write to the Free Software Foundation, Inc., 59 Temple " "Place, Suite 330, Boston, MA 02111-1307, USA" msgstr "" "Este programa es software libre; puedes redistribuirlo , y / o modificarlo " "bajo los terminos de la licencia Publica (GNU) publicada por la Free " "Software Foundation; la versión 2 de la licencia , o alguna version " "posterior.\n" "\n" "Este programa es distribuido con la esperanza de que pueda ser usado, PERO " "SIN NINGUNA GARANTIA;sin que se encuentre implicada garantias de MERCADEO " "para un proposito particular. Revisa la licencia publica GNU para mas " "detalles.\n" "\n" "Tu deberas de recibir una copia de la licencia publica general GNU General " "Public License en este programa; en caso contrario, escribe a la Free " "Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-" "1307, USA" #: ../src/dialog.c:837 msgid "Translation is coordinated on http://launchpad.net/viking" msgstr "La traducción se coordina en http://launchpad.net/viking" #: ../src/dialog.c:845 msgid "Download along track" msgstr "Descargar a lo largo de la ruta" #: ../src/dialog.c:851 msgid "Map type:" msgstr "Tipo de mapa:" #: ../src/dialog.c:856 msgid "Zoom level:" msgstr "Nivel de zoom:" #: ../src/dialog.c:896 #, c-format msgid "The map data is licensed: %s." msgstr "Los datos del mapa están bajo licencia: %s" #: ../src/dialog.c:899 #, c-format msgid "" "The data provided by '%s' are licensed under the following license: " "%s.\n" "Please, read the license before continuing." msgstr "" "Los datos suministrados por '%s' están bajo la siguiente licencia: " "%s.\n" "Por favor, lee esta licencia antes de seguir." #: ../src/dialog.c:904 msgid "Open license" msgstr "Licencia libre" #: ../src/expedia.c:53 msgid "Expedia Street Maps" msgstr "Mapas de calles Expedia" #: ../src/expedia.c:81 msgid "Invalid expedia altitude" msgstr "Altitud Expedia no válida" #: ../src/expedia.c:112 #, c-format msgid "" "Couldn't open EXPEDIA image file (right after successful download! Please " "report and delete image file!): %s" msgstr "" "No se puede abrir la imagen de Expedia a pesar de haber sido descargada. Por " "favor, informe del error y borre el fichero de imagen: %s" #: ../src/expedia.c:125 #, c-format msgid "" "Couldn't save EXPEDIA image file (right after successful download! Please " "report and delete image file!): %s" msgstr "" "No se puede guardar la imagen de Expedia a pesar de haber sido descargada. " "Por favor informe del error y borre el fichero de imagen: %s" #. * #. * See http://www.geonames.org/export/wikipedia-webservice.html#wikipediaBoundingBox #. #. Translators may wish to change this setting as appropriate to get Wikipedia articles in that language #: ../src/geonamessearch.c:46 msgid "en" msgstr "" #: ../src/geonamessearch.c:121 msgid "Search" msgstr "Buscar" #: ../src/geonamessearch.c:123 msgid "No entries found!" msgstr "¡No se encontraron resultados!" #. NB could allow columns to be shifted around by doing this after each new #. gtk_tree_view_column_set_reorderable ( column, TRUE ); #. However I don't think is that useful, so I haven't put it in #: ../src/geonamessearch.c:177 ../src/datasource_osm_my_traces.c:425 msgid "Name" msgstr "" #: ../src/geonamessearch.c:182 msgid "Feature" msgstr "" #: ../src/geonamessearch.c:187 ../src/datasource_osm_my_traces.c:440 msgid "Lat/Lon" msgstr "" #: ../src/geonamessearch.c:269 ../src/googlesearch.c:100 msgid "couldn't map temp file" msgstr "No se ha podido trazar el mapa del archivo temporal" #: ../src/globals.c:44 msgid "Degree format:" msgstr "Formato de aceptación" #: ../src/globals.c:48 msgid "Distance units:" msgstr "Unidades de distancia" #: ../src/globals.c:52 msgid "Speed units:" msgstr "Unidades de velocidad" #: ../src/globals.c:56 msgid "Height units:" msgstr "Unidades de altura" #: ../src/globals.c:60 msgid "Use large waypoint icons:" msgstr "Usar iconos grandes para Waypoints" #: ../src/globals.c:64 msgid "Default latitude:" msgstr "Latitud por defecto" #: ../src/globals.c:67 msgid "Default longitude:" msgstr "Longitud por defecto" #: ../src/globals.c:73 msgid "Alphabetical" msgstr "" #: ../src/globals.c:73 ../src/datasource_osm_my_traces.c:435 msgid "Time" msgstr "" #: ../src/globals.c:76 msgid "KML File Export Units:" msgstr "" #: ../src/globals.c:77 msgid "GPX Track Order:" msgstr "" #: ../src/globals.c:82 msgid "Image Viewer:" msgstr "Visor de imágenes:" #: ../src/globals.c:87 msgid "External GPX Program 1:" msgstr "" #: ../src/globals.c:88 msgid "External GPX Program 2:" msgstr "" #. Defaults for the options are setup here #: ../src/globals.c:96 msgid "General" msgstr "" #. New Tab #: ../src/globals.c:121 msgid "Export/External" msgstr "" #. Webtools #: ../src/google.c:36 msgid "Google" msgstr "Google" #: ../src/datasource_file.c:59 msgid "Import file with GPSBabel" msgstr "Importar archivo con GPSBabel" #: ../src/datasource_file.c:60 msgid "Imported file" msgstr "Archivo importado" #. The file selector #: ../src/datasource_file.c:133 msgid "File:" msgstr "" #: ../src/datasource_file.c:134 msgid "File to import" msgstr "" #: ../src/datasource_file.c:141 msgid "All files" msgstr "" #. The file format selector #: ../src/datasource_file.c:148 msgid "File type:" msgstr "" #: ../src/datasource_file.c:193 #, c-format msgid "using babel args '%s' and file '%s'" msgstr "" #: ../src/datasource_gc.c:66 msgid "Download Geocaches" msgstr "Descargar geocachés" #: ../src/datasource_gc.c:67 msgid "Geocaching.com Caches" msgstr "Cachés de Geocaching.com" #: ../src/datasource_gc.c:84 msgid "geocaching.com username:" msgstr "Nombre de usuario de geocaching.com" #: ../src/datasource_gc.c:85 msgid "geocaching.com password:" msgstr "Contraseña de geocaching.com" #: ../src/datasource_gc.c:126 #, c-format msgid "" "Can't find %s or %s in path! Check that you have installed it correctly." msgstr "" #: ../src/datasource_gc.c:188 msgid "Number geocaches:" msgstr "Número de geocachés:" #: ../src/datasource_gc.c:190 msgid "Centered around:" msgstr "Centrado alrededor de:" #: ../src/datasource_gc.c:226 msgid "Broken input - using some defaults" msgstr "" #: ../src/datasource_geotag.c:51 msgid "Create Waypoints from Geotagged Images" msgstr "" #: ../src/datasource_geotag.c:52 msgid "Geotagged Images" msgstr "" #: ../src/datasource_geotag.c:102 ../src/vikwindow.c:2314 #: ../src/vikwindow.c:2382 ../src/vikwindow.c:2824 msgid "All" msgstr "" #: ../src/datasource_geotag.c:107 ../src/vikwindow.c:2829 msgid "JPG" msgstr "" #: ../src/datasource_geotag.c:165 #, c-format msgid "Unable to create waypoint from %s" msgstr "" #: ../src/datasource_google.c:49 ../src/datasource_google.c:50 msgid "Google Directions" msgstr "Direcciones Google" #: ../src/datasource_google.c:77 msgid "From:" msgstr "Desde:" #: ../src/datasource_google.c:79 msgid "To:" msgstr "Hasta:" #: ../src/datasource_gps.c:57 msgid "Acquire from GPS" msgstr "Adquirir desde GPS" #: ../src/datasource_gps.c:58 msgid "Acquired from GPS" msgstr "Adquirido desde GPS" #: ../src/datasource_gps.c:221 #, c-format msgid "using cmdline '%s' and file '%s'\n" msgstr "usando línea de comandos '%s' y fichero '%s'\n" #: ../src/datasource_gps.c:297 ../src/vikgpslayer.c:884 #, c-format msgid "Downloading %d waypoint..." msgid_plural "Downloading %d waypoints..." msgstr[0] "Descargando %d waypoint..." msgstr[1] "Descargando %d waypoints..." #: ../src/datasource_gps.c:298 ../src/vikgpslayer.c:885 #, c-format msgid "Downloading %d trackpoint..." msgid_plural "Downloading %d trackpoints..." msgstr[0] "Descargando %d traza" msgstr[1] "Descargando %d trazas" #: ../src/datasource_gps.c:303 ../src/vikgpslayer.c:890 #, c-format msgid "Downloading %d routepoint..." msgid_plural "Downloading %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/datasource_gps.c:325 ../src/datasource_gps.c:326 #: ../src/datasource_gps.c:327 #, c-format msgid "Downloaded %d out of %d %s..." msgstr "Descargados %d de %d %s..." #: ../src/datasource_gps.c:331 ../src/datasource_gps.c:332 #: ../src/datasource_gps.c:333 #, c-format msgid "Downloaded %d %s." msgstr "Descargados %d %s." #: ../src/datasource_gps.c:347 ../src/vikgpslayer.c:968 #, c-format msgid "GPS Device: %s" msgstr "Dispositivo GPS: %s" #: ../src/datasource_gps.c:370 ../src/vikgpslayer.c:1042 #: ../src/vikgpslayer.c:1110 msgid "Status: Working..." msgstr "" #: ../src/datasource_gps.c:469 ../src/vikgpslayer.c:150 msgid "GPS Protocol:" msgstr "Protocolo GPS:" #. List now assigned at runtime #: ../src/datasource_gps.c:488 ../src/vikgpslayer.c:151 msgid "Serial Port:" msgstr "Puerto serie:" #: ../src/datasource_gps.c:509 msgid "" "Turn Off After Transfer\n" "(Garmin/NAViLink Only)" msgstr "" "Girar después del cambio\n" "(Garmin/NAViLink Sólo)" #: ../src/datasource_gps.c:512 msgid "Tracks:" msgstr "" #: ../src/datasource_gps.c:516 msgid "Routes:" msgstr "" #: ../src/datasource_gps.c:520 msgid "Waypoints:" msgstr "" #: ../src/datasource_gps.c:594 ../src/vikgpslayer.c:1305 msgid "GPS device: N/A" msgstr "Dispositivo GPS: (no disponible)" #: ../src/datasource_osm.c:52 ../src/datasource_osm.c:53 msgid "OSM traces" msgstr "Trazas de OSM" #: ../src/datasource_osm.c:80 msgid "Page number:" msgstr "" #: ../src/datasource_osm_my_traces.c:63 ../src/datasource_osm_my_traces.c:64 msgid "OSM My Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:108 msgid "Username:" msgstr "" #: ../src/datasource_osm_my_traces.c:113 msgid "The email or username used to login to OSM" msgstr "" #: ../src/datasource_osm_my_traces.c:115 ../src/osm-traces.c:413 msgid "Password:" msgstr "Contraseña:" #: ../src/datasource_osm_my_traces.c:120 msgid "The password used to login to OSM" msgstr "" #: ../src/datasource_osm_my_traces.c:430 msgid "Description" msgstr "" #: ../src/datasource_osm_my_traces.c:445 msgid "Privacy" msgstr "" #: ../src/datasource_osm_my_traces.c:452 msgid "Within Current View" msgstr "" #: ../src/datasource_osm_my_traces.c:518 msgid "GPS Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:520 msgid "None found!" msgstr "" #: ../src/datasource_osm_my_traces.c:629 msgid "My OSM Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:645 #, c-format msgid "Unable to get trace: %s" msgstr "" #: ../src/datasource_wikipedia.c:32 msgid "Create Waypoints from Wikipedia Articles" msgstr "" #: ../src/datasource_wikipedia.c:33 msgid "Wikipedia Waypoints" msgstr "" #: ../src/dem.c:65 ../src/dem.c:79 msgid "Invalid DEM" msgstr "DEM no válido" #: ../src/dem.c:121 msgid "Invalid DEM header" msgstr "Cabecera DEM no válida" #: ../src/dem.c:190 ../src/dem.c:203 msgid "Incorrect DEM Class B record: expected 1" msgstr "Registro DEM de clase B incorrecto: se esperaba 1" #: ../src/dem.c:360 #, c-format msgid "Couldn't map file %s: %s" msgstr "No se encuentra el archivo de mapa %s:%s" #: ../src/download.c:112 msgid "Tile age (s):" msgstr "Edad(es) de la tesela:" #: ../src/download.c:233 #, c-format msgid "Download error: %s" msgstr "Error en descarga: %s" #: ../src/download.c:313 msgid "couldn't open temp file" msgstr "No se ha podido abrir el archivo temporal" #: ../src/file.c:456 ../src/file.c:461 #, c-format msgid "Draw mode '%s' no more supported" msgstr "El modo de dibujo '%s' no es soportado ya" #: ../src/geotag_exif.c:433 msgid "Not enough memory." msgstr "" #: ../src/geotag_exif.c:451 msgid "Setting a value for this tag is unsupported!" msgstr "" #: ../src/geotag_exif.c:470 #, c-format msgid "Too few components specified (need %d, found %d)\n" msgstr "" #: ../src/geotag_exif.c:474 msgid "Numeric value expected\n" msgstr "Se espera un valor numérico\n" #: ../src/geotag_exif.c:482 msgid "This shouldn't happen!" msgstr "¡Esto no debería suceder!" #: ../src/geotag_exif.c:552 msgid "Not yet implemented!" msgstr "¡No implementado aún!" #: ../src/geotag_exif.c:565 msgid "Warning; Too many components specified!" msgstr "" #: ../src/osm-traces.c:73 msgid "Identifiable (public w/ timestamps)" msgstr "Identificable (público c/ timestamps)" #: ../src/osm-traces.c:74 msgid "Trackable (private w/ timestamps)" msgstr "Trazable (privado con fecha y hora)" #: ../src/osm-traces.c:75 msgid "Public" msgstr "Pública" #: ../src/osm-traces.c:76 msgid "Private" msgstr "Privado" #: ../src/osm-traces.c:93 msgid "OSM username:" msgstr "Usuario OSM:" #: ../src/osm-traces.c:94 msgid "OSM password:" msgstr "Contraseña OSM:" #. Preferences #: ../src/osm-traces.c:151 msgid "OpenStreetMap Traces" msgstr "Trazas OpenStreetMap" #: ../src/osm-traces.c:234 #, c-format msgid "failed to upload data: HTTP response is %ld" msgstr "fallo al enviar datos: la respuesta HTTP es %ld" #: ../src/osm-traces.c:239 #, c-format msgid "curl_easy_getinfo failed: %d" msgstr "fallo en la llamada a la función curl_easy_getinfo(): %d" #: ../src/osm-traces.c:244 #, c-format msgid "curl request failed: %s" msgstr "fallo en petición curl: %s" #: ../src/osm-traces.c:275 #, c-format msgid "failed to open temporary file: %s" msgstr "fallo al abrir fichero temporal: %s" #. Success #: ../src/osm-traces.c:328 msgid "Uploaded to OSM" msgstr "Subido a OSM" #: ../src/osm-traces.c:332 msgid "FAILED TO UPLOAD DATA TO OSM - CURL PROBLEM" msgstr "" #: ../src/osm-traces.c:335 msgid "FAILED TO UPLOAD DATA TO OSM" msgstr "" #: ../src/osm-traces.c:335 msgid "HTTP response code" msgstr "Código de respuesta HTTP" #: ../src/osm-traces.c:348 #, c-format msgid "failed to unlink temporary file: %s" msgstr "fallo al borrar fichero temporal: %s" #: ../src/osm-traces.c:387 msgid "OSM upload" msgstr "Enviar a OSM" #: ../src/osm-traces.c:405 msgid "Email:" msgstr "Correo-e:" #: ../src/osm-traces.c:410 msgid "" "The email used as login\n" "Enter the email you use to login into www.openstreetmap.org." msgstr "" "El correo electronico usado para el login\n" "Introduzca el correo electronico usado para iniciar sesión en " "www.openstreetmap.org." #: ../src/osm-traces.c:418 msgid "" "The password used to login\n" "Enter the password you use to login into " "www.openstreetmap.org." msgstr "" "La clave usada para login\n" "Introduzca la clave usada para iniciar sesión en " "www.openstreetmap.org." #: ../src/osm-traces.c:423 msgid "File's name:" msgstr "Nombre del fichero:" #: ../src/osm-traces.c:433 msgid "" "The name of the file on OSM\n" "This is the name of the file created on the server.This is not the " "name of the local file." msgstr "" "El nombre del archivo usado en OSM\n" "Este es el nombre del archivo creado en el servidor. Este no es el " "nombre del archivo local." #: ../src/osm-traces.c:442 msgid "The description of the trace" msgstr "La descripción de la traza" #: ../src/osm-traces.c:444 msgid "Tags:" msgstr "Etiquetas:" #: ../src/osm-traces.c:449 msgid "The tags associated to the trace" msgstr "Las etiquetas asociadas a la traza" #: ../src/osm-traces.c:482 #, c-format msgid "Uploading %s to OSM" msgstr "Enviando %s a OSM" #: ../src/mapcache.c:61 msgid "Map cache memory size (MB):" msgstr "" #: ../src/print.c:53 msgid "None" msgstr "Ninguno" #: ../src/print.c:54 msgid "Horizontally" msgstr "Horizontal" #: ../src/print.c:55 msgid "Vertically" msgstr "Vertical" #: ../src/print.c:56 msgid "Both" msgstr "Ambos" #: ../src/print.c:120 msgid "Image Settings" msgstr "Ajustes de imagen" #: ../src/print.c:546 msgid "done" msgstr "hecho" #. Page Size #: ../src/print.c:575 msgid "_Adjust Page Size and Orientation" msgstr "_Ajustar el tamaño y la orientación de la página" #: ../src/print.c:591 msgid "C_enter:" msgstr "C_entrado:" #. ignore page margins #: ../src/print.c:609 msgid "Ignore Page _Margins" msgstr "Ignorar los _márgenes de la página" #: ../src/print.c:628 msgid "Image S_ize:" msgstr "_Tamaño de imagen" #: ../src/util.c:81 msgid "Could not launch web browser." msgstr "No se ha podido lanzar el navegador" #: ../src/util.c:92 msgid "Could not create new email." msgstr "No puedo crear un nuevo email" #: ../src/vikcoordlayer.c:46 msgid "Color:" msgstr "Color:" #: ../src/vikcoordlayer.c:47 msgid "Minutes Width:" msgstr "Ancho (minutos):" #: ../src/vikcoordlayer.c:48 msgid "Line Thickness:" msgstr "Ancho de línea:" #: ../src/vikcoordlayer.c:56 msgid "Coordinate" msgstr "" #: ../src/datasource_bfilter.c:46 msgid "Max number of points:" msgstr "Máximo número de puntos:" #: ../src/datasource_bfilter.c:60 msgid "Simplify All Tracks..." msgstr "" #: ../src/datasource_bfilter.c:61 msgid "Simplified Tracks" msgstr "Rutas simplificadas" #: ../src/datasource_bfilter.c:96 ../src/datasource_bfilter.c:97 msgid "Remove Duplicate Waypoints" msgstr "Eliminar waypoints duplicados" #: ../src/datasource_bfilter.c:129 msgid "Waypoints Inside This" msgstr "Waypoints en el interior" #: ../src/datasource_bfilter.c:130 msgid "Polygonized Layer" msgstr "Capa Poligonizada" #: ../src/datasource_bfilter.c:165 msgid "Waypoints Outside This" msgstr "Waypoints en el exterior" #: ../src/datasource_bfilter.c:166 msgid "Polygonzied Layer" msgstr "Capa poligonal" #: ../src/main.c:89 #, c-format msgid "Ignoring Xlib error: error code %d request code %d\n" msgstr "" #: ../src/main.c:102 msgid "Enable debug output" msgstr "no puedo activar la salida" #: ../src/main.c:103 msgid "Enable verbose output" msgstr "salida verbosa activada" #: ../src/main.c:104 msgid "Show version" msgstr "Mostrar versión" #: ../src/osm.c:106 msgid "On Disk OSM Tile Format" msgstr "" #: ../src/osm.c:121 msgid "OSM (view)" msgstr "Vista OSM" #: ../src/osm.c:125 msgid "OSM (edit)" msgstr "Edicion OSM" #: ../src/osm.c:129 msgid "OSM (render)" msgstr "Renderizado OSM" #. Example: http://127.0.0.1:8111/load_and_zoom?left=8.19&right=8.20&top=48.605&bottom=48.590&select=node413602999 #. JOSM or merkaartor must already be running with remote interface enabled #: ../src/osm.c:136 msgid "Local port 8111 (eg JOSM)" msgstr "" #: ../src/preferences.c:285 msgid "Preferences" msgstr "Preferencias" #: ../src/uibuilder.c:147 msgid "Take care that this password will be stored clearly in a plain file." msgstr "verifica que este password se borre en el archivo plano" #: ../src/vikaggregatelayer.c:37 msgid "Aggregate" msgstr "" #: ../src/vikdemlayer.c:101 msgid "Absolute height" msgstr "Altura Absoluta" #: ../src/vikdemlayer.c:102 msgid "Height gradient" msgstr "Gradiente de Altura" #: ../src/vikdemlayer.c:118 msgid "DEM Files:" msgstr "Ficheros DEM:" #: ../src/vikdemlayer.c:119 msgid "Download Source:" msgstr "Fuentes de descarga:" #: ../src/vikdemlayer.c:120 msgid "Min Elev Color:" msgstr "Color para la elevación mínima" #: ../src/vikdemlayer.c:121 msgid "Type:" msgstr "Tipo:" #: ../src/vikdemlayer.c:122 msgid "Min Elev:" msgstr "Elev. min.:" #: ../src/vikdemlayer.c:123 msgid "Max Elev:" msgstr "Elev. max.:" #: ../src/vikdemlayer.c:134 msgid "_DEM Download" msgstr "" #: ../src/vikdemlayer.c:134 msgid "DEM Download" msgstr "" #: ../src/vikdemlayer.c:188 msgid "DEM" msgstr "" #: ../src/vikdemlayer.c:284 #, c-format msgid "Number of files: %d" msgstr "Número de ficheros: %d" #: ../src/vikdemlayer.c:385 msgid "DEM Loading" msgstr "Cargando DEM" #: ../src/vikdemlayer.c:889 #, c-format msgid "No SRTM data available for %f, %f" msgstr "Ningun dato SRTM disponible para %f, %f" #: ../src/vikdemlayer.c:1149 #, c-format msgid "Downloading DEM %s" msgstr "Descargando DEM %s" #: ../src/vikfileentry.c:68 msgid "Browse..." msgstr "Examinar..." #: ../src/vikfileentry.c:96 msgid "Choose file" msgstr "Elegir fichero" #: ../src/vikfilelist.c:48 msgid "Choose file(s)" msgstr "Elegir fichero(s)" #: ../src/vikfilelist.c:172 msgid "Add..." msgstr "Añadir…" #: ../src/vikfilelist.c:173 msgid "Delete" msgstr "Borrar" #: ../src/vikgeoreflayer.c:70 msgid "_Georef Move Map" msgstr "" #: ../src/vikgeoreflayer.c:70 msgid "Georef Move Map" msgstr "Mover mapa Georef" #: ../src/vikgeoreflayer.c:77 msgid "Georef Z_oom Tool" msgstr "" #: ../src/vikgeoreflayer.c:77 msgid "Georef Zoom Tool" msgstr "Zoom Georef" #: ../src/vikgeoreflayer.c:87 msgid "GeoRef Map" msgstr "" #: ../src/vikgeoreflayer.c:335 ../src/vikmapslayer.c:685 #, c-format msgid "Couldn't open image file: %s" msgstr "No se ha podido abrir el fichero de imagen: %s" #: ../src/vikgeoreflayer.c:365 msgid "Unexpected end of file reading World file." msgstr "Final de fichero inesperado mientras se leía el fichero World." #: ../src/vikgeoreflayer.c:381 ../src/vikgeoreflayer.c:426 msgid "Choose World file" msgstr "Elegir fichero World" #: ../src/vikgeoreflayer.c:394 msgid "The World file you requested could not be opened for reading." msgstr "El fichero World seleccionado no se ha podido abrir para lectura." #: ../src/vikgeoreflayer.c:439 msgid "The file you requested could not be opened for writing." msgstr "El fichero seleccionado no se ha podido abrir para escritura." #: ../src/vikgeoreflayer.c:456 ../src/viklayer.c:480 msgid "Layer Properties" msgstr "Propiedades de capa" #: ../src/vikgeoreflayer.c:478 msgid "World File Parameters:" msgstr "Parámetros de fichero World:" #: ../src/vikgeoreflayer.c:479 msgid "Load From File..." msgstr "Cargar desde archivo..." #: ../src/vikgeoreflayer.c:484 msgid "Corner pixel easting:" msgstr "Despl. E de la esquina" #: ../src/vikgeoreflayer.c:486 msgid "the UTM \"easting\" value of the upper-right corner pixel of the map" msgstr "" "el ajuste de latitud UTM del pixel de la esquina superior derecha en el mapa" #: ../src/vikgeoreflayer.c:488 msgid "Corner pixel northing:" msgstr "Despl. N de la esquina" #: ../src/vikgeoreflayer.c:490 msgid "the UTM \"northing\" value of the upper-right corner pixel of the map" msgstr "" "the UTM \"northing\" value of the upper-right corner pixel of the map" #: ../src/vikgeoreflayer.c:492 msgid "X (easting) scale (mpp): " msgstr "Escala X (desp. E, metros/píxel): " #: ../src/vikgeoreflayer.c:493 msgid "Y (northing) scale (mpp): " msgstr "Escala Y (desp. N, metros/píxel): " #: ../src/vikgeoreflayer.c:496 msgid "the scale of the map in the X direction (meters per pixel)" msgstr "la escala del mapa en la dirección X (metros por pixel)" #: ../src/vikgeoreflayer.c:498 msgid "the scale of the map in the Y direction (meters per pixel)" msgstr "la escala del mapa en la dirección Y (metros por pixel)" #: ../src/vikgeoreflayer.c:500 msgid "Map Image:" msgstr "Imagen de mapa:" #. Now with icons #: ../src/vikgeoreflayer.c:608 msgid "_Zoom to Fit Map" msgstr "_Zoom para ajustar mapa" #: ../src/vikgeoreflayer.c:614 msgid "_Goto Map Center" msgstr "_Ir al centro del mapa" #: ../src/vikgeoreflayer.c:620 msgid "_Export to World File" msgstr "_Exportar hacia Archivo Mundial" #: ../src/vikgoto.c:75 msgid "No goto tool available." msgstr "La herramienta \"ir a\" no esta disponible" #: ../src/vikgoto.c:88 ../src/vikgoto.c:107 msgid "goto" msgstr "ir a" #: ../src/vikgoto.c:90 msgid "I don't know that place. Do you want another goto?" msgstr "No conozco ese lugar. Desea realizar otro \"ir a\"" #: ../src/vikgoto.c:109 msgid "goto provider:" msgstr "proveedor \"ir a\"" #: ../src/vikgoto.c:124 msgid "Enter address or place name:" msgstr "Introduzca la dirección o nombre del lugar:" #: ../src/vikgpslayer.c:127 msgid "Data Mode" msgstr "" #: ../src/vikgpslayer.c:129 msgid "Realtime Tracking Mode" msgstr "" #: ../src/vikgpslayer.c:137 msgid "Keep vehicle at center" msgstr "" #: ../src/vikgpslayer.c:138 msgid "Keep vehicle on screen" msgstr "" #: ../src/vikgpslayer.c:139 msgid "Disable" msgstr "" #: ../src/vikgpslayer.c:152 msgid "Download Tracks:" msgstr "" #: ../src/vikgpslayer.c:153 msgid "Upload Tracks:" msgstr "" #: ../src/vikgpslayer.c:154 msgid "Download Routes:" msgstr "" #: ../src/vikgpslayer.c:155 msgid "Upload Routes:" msgstr "" #: ../src/vikgpslayer.c:156 msgid "Download Waypoints:" msgstr "" #: ../src/vikgpslayer.c:157 msgid "Upload Waypoints:" msgstr "" #: ../src/vikgpslayer.c:159 msgid "Recording tracks" msgstr "Grabando rutas" #: ../src/vikgpslayer.c:160 msgid "Jump to current position on start" msgstr "Saltar a la posición actual al comienzo" #: ../src/vikgpslayer.c:161 msgid "Moving Map Method:" msgstr "Metodo de movimiento de mapas" #: ../src/vikgpslayer.c:162 msgid "Gpsd Host:" msgstr "Servidor gpsd:" #: ../src/vikgpslayer.c:163 msgid "Gpsd Port:" msgstr "Puerto gpsd:" #: ../src/vikgpslayer.c:164 msgid "Gpsd Retry Interval (seconds):" msgstr "Intervalo de reconexión de Gpsd (segundos)" #: ../src/vikgpslayer.c:179 msgid "GPS" msgstr "" #: ../src/vikgpslayer.c:242 ../src/vikgpslayer.c:1258 msgid "GPS Download" msgstr "Descargar desde GPS" #: ../src/vikgpslayer.c:242 ../src/vikgpslayer.c:1258 #: ../src/viktrwlayer.c:3094 msgid "GPS Upload" msgstr "Enviar al GPS" #: ../src/vikgpslayer.c:244 msgid "GPS Realtime Tracking" msgstr "Seguimiento GPS en tiempo real" #: ../src/vikgpslayer.c:451 msgid "Unknown GPS Protocol" msgstr "Protocolo GPS desconocido" #: ../src/vikgpslayer.c:469 msgid "Unknown serial port device" msgstr "Puerto serie desconocido" #: ../src/vikgpslayer.c:572 #, c-format msgid "%s: unknown parameter" msgstr "Parámetro desconocido: %s" #. Now with icons #: ../src/vikgpslayer.c:693 msgid "_Upload to GPS" msgstr "_Subir a GPS" #: ../src/vikgpslayer.c:699 msgid "Download from _GPS" msgstr "Descargar desde _GPS" #: ../src/vikgpslayer.c:720 msgid "Empty _Realtime" msgstr "Vaciar en tiempo real" #: ../src/vikgpslayer.c:727 msgid "E_mpty Upload" msgstr "Subida vacía" #: ../src/vikgpslayer.c:733 msgid "_Empty Download" msgstr "Descarga vacía" #: ../src/vikgpslayer.c:739 msgid "Empty _All" msgstr "Todo vacío" #. #. NB It's not fatal if this gives 2 for example! Hence removal of the g_assert #. This happens when copied GPS layer is deleted (not sure why the number_handlers would be 2) #. I don't think there's any side effects and certainly better than the program just aborting #. #: ../src/vikgpslayer.c:756 #, c-format msgid "Unexpected number of disconnected handlers: %d" msgstr "Número inesperado de manejadores desconectados: %d" #: ../src/vikgpslayer.c:898 #, c-format msgid "Uploading %d waypoint..." msgid_plural "Uploading %d waypoints..." msgstr[0] "Subiendo %d waypoint..." msgstr[1] "Subiendo %d waypoints..." #: ../src/vikgpslayer.c:899 #, c-format msgid "Uploading %d trackpoint..." msgid_plural "Uploading %d trackpoints..." msgstr[0] "Subiendo %d traza..." msgstr[1] "Subiendo %d trazas..." #: ../src/vikgpslayer.c:900 #, c-format msgid "Uploading %d routepoint..." msgid_plural "Uploading %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:925 #, c-format msgid "Downloaded %d out of %d waypoint..." msgid_plural "Downloaded %d out of %d waypoints..." msgstr[0] "Descargado %d de %d waypoint..." msgstr[1] "Descargados %d de %d waypoints..." #: ../src/vikgpslayer.c:926 #, c-format msgid "Downloaded %d out of %d trackpoint..." msgid_plural "Downloaded %d out of %d trackpoints..." msgstr[0] "Descargada %d de %d traza..." msgstr[1] "Descargadas %d de %d trazas..." #: ../src/vikgpslayer.c:927 #, c-format msgid "Downloaded %d out of %d routepoint..." msgid_plural "Downloaded %d out of %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:932 #, c-format msgid "Uploaded %d out of %d waypoint..." msgid_plural "Uploaded %d out of %d waypoints..." msgstr[0] "Subida %d de %d waypoint..." msgstr[1] "Subidas %d de %d waypoints..." #: ../src/vikgpslayer.c:933 #, c-format msgid "Uploaded %d out of %d trackpoint..." msgid_plural "Uploaded %d out of %d trackpoints..." msgstr[0] "Subida %d de %d trza..." msgstr[1] "Subidas %d de %d trazas..." #: ../src/vikgpslayer.c:934 #, c-format msgid "Uploaded %d out of %d routepoint..." msgid_plural "Uploaded %d out of %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:942 #, c-format msgid "Downloaded %d waypoint" msgid_plural "Downloaded %d waypoints" msgstr[0] "Descargado %d waypoint" msgstr[1] "Descargados %d waypoints" #: ../src/vikgpslayer.c:943 #, c-format msgid "Downloaded %d trackpoint" msgid_plural "Downloaded %d trackpoints" msgstr[0] "Descargada %d traza" msgstr[1] "Descargadas %d trazas" #: ../src/vikgpslayer.c:944 #, c-format msgid "Downloaded %d routepoint" msgid_plural "Downloaded %d routepoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:949 #, c-format msgid "Uploaded %d waypoint" msgid_plural "Uploaded %d waypoints" msgstr[0] "Subido %d waypoint" msgstr[1] "Subidos %d waypoints" #: ../src/vikgpslayer.c:950 #, c-format msgid "Uploaded %d trackpoint" msgid_plural "Uploaded %d trackpoints" msgstr[0] "Subida %d traza" msgstr[1] "Subidas %d trazas" #: ../src/vikgpslayer.c:951 #, c-format msgid "Uploaded %d routepoint" msgid_plural "Uploaded %d routepoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:1180 msgid "Error: couldn't find gpsbabel." msgstr "Error: gpsbabel no encontrado" #: ../src/vikgpslayer.c:1269 msgid "Warning - GPS Upload items may overwrite each other" msgstr "" #: ../src/vikgpslayer.c:1301 msgid "Status: detecting gpsbabel" msgstr "Conectando a gpsbabel" #: ../src/vikgpslayer.c:1332 msgid "No GPS items selected for transfer." msgstr "" #: ../src/vikgpslayer.c:1347 msgid "Could not turn off device." msgstr "" #: ../src/vikgpslayer.c:1385 msgid "Are you sure you want to delete GPS Upload data?" msgstr "" #: ../src/vikgpslayer.c:1398 msgid "Are you sure you want to delete GPS Download data?" msgstr "" #: ../src/vikgpslayer.c:1412 msgid "Are you sure you want to delete GPS Realtime data?" msgstr "" #: ../src/vikgpslayer.c:1425 msgid "Are you sure you want to delete All GPS data?" msgstr "" #: ../src/viklayerspanel.c:55 msgid "/C_ut" msgstr "/Co_rtar" #: ../src/viklayerspanel.c:56 msgid "/_Copy" msgstr "/_Copiar" #: ../src/viklayerspanel.c:57 msgid "/_Paste" msgstr "/_Pegar" #: ../src/viklayerspanel.c:58 msgid "/_Delete" msgstr "/_Borrar" #: ../src/viklayerspanel.c:59 msgid "/New Layer" msgstr "/Nueva capa" #: ../src/viklayerspanel.c:127 msgid "Top Layer" msgstr "Capa principal" #: ../src/viklayerspanel.c:143 msgid "Add new layer" msgstr "Añadir nueva capa" #: ../src/viklayerspanel.c:150 msgid "Remove selected layer" msgstr "Remover la capa seleccionada" #: ../src/viklayerspanel.c:157 msgid "Move selected layer up" msgstr "Mover la capa seleccionada" #: ../src/viklayerspanel.c:164 msgid "Move selected layer down" msgstr "Mover la capa seleccionada abajo" #: ../src/viklayerspanel.c:171 msgid "Cut selected layer" msgstr "Cortar la capa seleccionada" #: ../src/viklayerspanel.c:178 msgid "Copy selected layer" msgstr "Copiar la capa seleccionada" #: ../src/viklayerspanel.c:185 msgid "Paste layer below selected layer" msgstr "Pegar la capa por de bajo de la capa seleccionada" #. TODO: FIXME: if name has a '/' in it it will get all messed up. why not have an itemfactory field with #. name, icon, shortcut, etc.? #: ../src/viklayerspanel.c:204 ../src/vikwindow.c:3292 #, c-format msgid "New _%s Layer" msgstr "" #: ../src/viklayerspanel.c:511 msgid "Aggregate Layers have no settable properties." msgstr "Las capas de agregación no tienen propiedades modificables." #: ../src/viklayerspanel.c:555 msgid "You cannot cut the Top Layer." msgstr "No se puede cortar la capa principal." #: ../src/viklayerspanel.c:600 #, c-format msgid "Are you sure you want to delete %s?" msgstr "" #: ../src/viklayerspanel.c:617 msgid "You cannot delete the Top Layer." msgstr "No se puede borrar la capa principal." #: ../src/viklayerspanel.c:701 msgid "Are you sure you wish to delete all layers?" msgstr "¿Está seguro de que desea borrar todas las capas?" #. ******* MAPZOOMS ******** #: ../src/vikmapslayer.c:91 msgid "Use Viking Zoom Level" msgstr "Usar nivel de zoom de Viking" #: ../src/vikmapslayer.c:124 msgid "Map Type:" msgstr "Tipo de mapa:" #: ../src/vikmapslayer.c:125 msgid "Maps Directory:" msgstr "Directorio de Mapas:" #: ../src/vikmapslayer.c:126 msgid "Alpha:" msgstr "Alfa:" #: ../src/vikmapslayer.c:127 msgid "Control the Alpha value for transparency effects" msgstr "" #: ../src/vikmapslayer.c:128 msgid "Autodownload maps:" msgstr "Autodescargar mapas:" #: ../src/vikmapslayer.c:129 msgid "Autodownload Only Gets Missing Maps:" msgstr "" #: ../src/vikmapslayer.c:130 msgid "" "Using this option avoids attempting to update already acquired tiles. This " "can be useful if you want to restrict the network usage, without having to " "resort to manual control. Only applies when 'Autodownload Maps' is on." msgstr "" #: ../src/vikmapslayer.c:131 msgid "Zoom Level:" msgstr "Nivel de zoom:" #: ../src/vikmapslayer.c:132 msgid "" "Determines the method of displaying map tiles for the current zoom level. " "'Viking Zoom Level' uses the best matching level, otherwise setting a fixed " "value will always use map tiles of the specified value regardless of the " "actual zoom level." msgstr "" #: ../src/vikmapslayer.c:146 msgid "_Maps Download" msgstr "" #: ../src/vikmapslayer.c:146 msgid "Maps Download" msgstr "Descarga de mapas" #: ../src/vikmapslayer.c:161 msgid "Map" msgstr "Mapa" #: ../src/vikmapslayer.c:249 msgid "Default maplayer directory:" msgstr "Directorio por defecto de maplayer:" #: ../src/vikmapslayer.c:249 msgid "Choose a directory to store cached Map tiles for this layer" msgstr "" #: ../src/vikmapslayer.c:505 msgid "Unknown map type" msgstr "Tipo de mapa desconocido" #: ../src/vikmapslayer.c:516 msgid "Unknown Map Zoom" msgstr "Nivel de zoom de mapa desconocido" #: ../src/vikmapslayer.c:589 #, c-format msgid "" "New map cannot be displayed in the current drawmode.\n" "Select \"%s\" from View menu to view it." msgstr "" "El nuevo mapa no puede ser visualizado en el modo actual.\n" "Seleccione \"%s\" en el menu Ver para mostrarlo." #: ../src/vikmapslayer.c:753 #, c-format msgid "" "Cowardly refusing to draw tiles or existence of tiles beyond %d zoom out " "factor" msgstr "" "Evitando pusilánimemente el dibujado de teselas o existencia de teselas mas " "alla del factor de zoom %d" #: ../src/vikmapslayer.c:1157 #, c-format msgid "Redownloading up to %d %s map..." msgid_plural "Redownloading up to %d %s maps..." msgstr[0] "Descargando arriba de %d%s mapas" msgstr[1] "Descargando arriba de %d%s mapas" #: ../src/vikmapslayer.c:1159 #, c-format msgid "Redownloading %d %s map..." msgid_plural "Redownloading %d %s maps..." msgstr[0] "Redescargando %d %s mapa..." msgstr[1] "Redescargando %d %s mapas..." #: ../src/vikmapslayer.c:1163 ../src/vikmapslayer.c:1238 #, c-format msgid "Downloading %d %s map..." msgid_plural "Downloading %d %s maps..." msgstr[0] "Descargando mapa %d (%s)..." msgstr[1] "Descargando mapas %d (%s)..." #: ../src/vikmapslayer.c:1311 #, c-format msgid "" "\n" "Source: %s\n" "\n" "Tile File: %s\n" "Tile File Timestamp: %s" msgstr "" #: ../src/vikmapslayer.c:1318 #, c-format msgid "" "Source: %s\n" "\n" "No Tile File!" msgstr "" #: ../src/vikmapslayer.c:1356 msgid "Redownload _Bad Map(s)" msgstr "Descargar de nuevo mapas incorrectos" #: ../src/vikmapslayer.c:1360 msgid "Redownload _New Map(s)" msgstr "Descargar de nuevo los mapas nuevos" #: ../src/vikmapslayer.c:1364 msgid "Redownload _All Map(s)" msgstr "Cargar de nuevo todos los mapas" #: ../src/vikmapslayer.c:1368 msgid "_Show Tile Information" msgstr "" #: ../src/vikmapslayer.c:1449 #, c-format msgid "" "Wrong drawmode for this map.\n" "Select \"%s\" from View menu and try again." msgstr "" "El modo de dibujado es incorrecto para este mapa.\n" "Seleccione \"%s\" en el menú Ver e inténtelo de nuevo." #: ../src/vikmapslayer.c:1454 msgid "Wrong zoom level for this map." msgstr "Nivel de zoom incorrecto para este mapa." #. Now with icons #: ../src/vikmapslayer.c:1485 msgid "Download _Missing Onscreen Maps" msgstr "Descargar mapas incorrectos en pantalla" #: ../src/vikmapslayer.c:1492 msgid "Download _New Onscreen Maps" msgstr "Descargar mapas nuevos en pantalla" #: ../src/vikmapslayer.c:1499 msgid "Reload _All Onscreen Maps" msgstr "Recargar todos los mapas en pantalla" #: ../src/viktreeview.c:263 msgid "Layer Name" msgstr "Nombre de capa" #: ../src/viktreeview.c:742 #, c-format msgid "delete data from %s\n" msgstr "borrar datos de %s\n" #: ../src/viktrwlayer.c:377 msgid "Create _Waypoint" msgstr "" #: ../src/viktrwlayer.c:377 msgid "Create Waypoint" msgstr "Crear waypoint" #: ../src/viktrwlayer.c:383 msgid "Create _Track" msgstr "" #: ../src/viktrwlayer.c:383 msgid "Create Track" msgstr "Crear ruta" #: ../src/viktrwlayer.c:392 msgid "Create _Route" msgstr "" #: ../src/viktrwlayer.c:392 msgid "Create Route" msgstr "" #: ../src/viktrwlayer.c:401 msgid "_Edit Waypoint" msgstr "" #: ../src/viktrwlayer.c:401 msgid "Edit Waypoint" msgstr "Editar waypoint" #: ../src/viktrwlayer.c:409 msgid "Edit Trac_kpoint" msgstr "" #: ../src/viktrwlayer.c:409 msgid "Edit Trackpoint" msgstr "Editar punto de ruta" #: ../src/viktrwlayer.c:417 msgid "Show P_icture" msgstr "" #: ../src/viktrwlayer.c:417 msgid "Show Picture" msgstr "Mostrar imagen" #: ../src/viktrwlayer.c:424 msgid "Route _Finder" msgstr "" #: ../src/viktrwlayer.c:424 msgid "Route Finder" msgstr "" #. ***** PARAMETERS ***** #: ../src/viktrwlayer.c:447 ../src/viktrwlayer.c:1942 #: ../src/viktrwlayer.c:1944 msgid "Waypoints" msgstr "Waypoints" #: ../src/viktrwlayer.c:447 ../src/viktrwlayer.c:1933 #: ../src/viktrwlayer.c:1935 msgid "Tracks" msgstr "Rutas" #: ../src/viktrwlayer.c:447 msgid "Waypoint Images" msgstr "Imágenes de waypoints" #: ../src/viktrwlayer.c:450 msgid "Draw by Track" msgstr "Dbujar por ruta" #: ../src/viktrwlayer.c:450 msgid "Draw by Speed" msgstr "" #: ../src/viktrwlayer.c:450 msgid "All Tracks Same Color" msgstr "" #: ../src/viktrwlayer.c:451 msgid "Filled Square" msgstr "Cuadro relleno" #: ../src/viktrwlayer.c:451 msgid "Square" msgstr "Cuadrado" #: ../src/viktrwlayer.c:451 msgid "Circle" msgstr "Círculo" #: ../src/viktrwlayer.c:451 msgid "X" msgstr "X" #: ../src/viktrwlayer.c:477 msgid "Extra Extra Small" msgstr "" #: ../src/viktrwlayer.c:478 msgid "Extra Small" msgstr "" #: ../src/viktrwlayer.c:479 msgid "Small" msgstr "" #: ../src/viktrwlayer.c:480 msgid "Medium" msgstr "" #: ../src/viktrwlayer.c:481 msgid "Large" msgstr "" #: ../src/viktrwlayer.c:482 msgid "Extra Large" msgstr "" #: ../src/viktrwlayer.c:483 msgid "Extra Extra Large" msgstr "" #: ../src/viktrwlayer.c:491 msgid "Track Drawing Mode:" msgstr "Modo de dibujo de rutas:" #: ../src/viktrwlayer.c:492 msgid "All Tracks Color:" msgstr "" #: ../src/viktrwlayer.c:493 msgid "The color used when 'All Tracks Same Color' drawing mode is selected" msgstr "" #: ../src/viktrwlayer.c:494 msgid "Draw Track Lines" msgstr "Dibujar líneas de ruta" #: ../src/viktrwlayer.c:495 msgid "Track Thickness:" msgstr "Ancho de ruta:" #: ../src/viktrwlayer.c:496 msgid "Draw Track Direction" msgstr "" #: ../src/viktrwlayer.c:497 msgid "Direction Size:" msgstr "" #: ../src/viktrwlayer.c:498 msgid "Draw Trackpoints" msgstr "Dibujar puntos de rutas" #: ../src/viktrwlayer.c:499 msgid "Trackpoint Size:" msgstr "" #: ../src/viktrwlayer.c:500 msgid "Draw Elevation" msgstr "Dibujar elevación" #: ../src/viktrwlayer.c:501 msgid "Draw Elevation Height %:" msgstr "Dibujar elevación %d:" #: ../src/viktrwlayer.c:503 msgid "Draw Stops" msgstr "Dibujar paradas" #: ../src/viktrwlayer.c:504 msgid "" "Whether to draw a marker when trackpoints are at the same position but over " "the minimum stop length apart in time" msgstr "" #: ../src/viktrwlayer.c:505 msgid "Min Stop Length (seconds):" msgstr "Duración min. de parada (segundos):" #: ../src/viktrwlayer.c:507 msgid "Track BG Thickness:" msgstr "Ancho de fondo de ruta:" #: ../src/viktrwlayer.c:508 msgid "Track Background Color" msgstr "Color de fondo de ruta" #: ../src/viktrwlayer.c:509 msgid "Draw by Speed Factor (%):" msgstr "" #: ../src/viktrwlayer.c:510 msgid "" "The percentage factor away from the average speed determining the color used" msgstr "" #: ../src/viktrwlayer.c:512 msgid "Draw Labels" msgstr "Dibujar etiquetas" #: ../src/viktrwlayer.c:513 msgid "Waypoint Font Size:" msgstr "" #: ../src/viktrwlayer.c:514 msgid "Waypoint Color:" msgstr "Color de waypoint:" #: ../src/viktrwlayer.c:515 msgid "Waypoint Text:" msgstr "Texto de waypoint:" #: ../src/viktrwlayer.c:516 msgid "Background:" msgstr "Fondo:" #: ../src/viktrwlayer.c:517 msgid "Fake BG Color Translucency:" msgstr "Color de transparencia simulada:" #: ../src/viktrwlayer.c:518 msgid "Waypoint marker:" msgstr "Marcador de waypoint:" #: ../src/viktrwlayer.c:519 msgid "Waypoint size:" msgstr "Tamaño de waypoint:" #: ../src/viktrwlayer.c:520 msgid "Draw Waypoint Symbols:" msgstr "Dibujar símbolos de waypoint:" #: ../src/viktrwlayer.c:522 msgid "Draw Waypoint Images" msgstr "Dibujar imágenes de waypoint:" #: ../src/viktrwlayer.c:523 msgid "Image Size (pixels):" msgstr "Tamaño de imagen (pixels):" #: ../src/viktrwlayer.c:524 msgid "Image Alpha:" msgstr "Factor alfa de imagen:" #: ../src/viktrwlayer.c:525 msgid "Image Memory Cache Size:" msgstr "Tamaño de la caché de imágenes:" #: ../src/viktrwlayer.c:610 msgid "TrackWaypoint" msgstr "" #: ../src/viktrwlayer.c:1951 ../src/viktrwlayer.c:1953 msgid "Routes" msgstr "" #: ../src/viktrwlayer.c:2144 #, c-format msgid " in %d:%02d hrs:mins" msgstr " en %d:%02d hrs:mins" #: ../src/viktrwlayer.c:2148 #, c-format msgid "" "\n" "%sTotal Length %.1f %s%s" msgstr "" "\n" "%s Longitud Total %.1f %s%s" #: ../src/viktrwlayer.c:2154 #, c-format msgid "Tracks: %d - Waypoints: %d - Routes: %d%s" msgstr "" #: ../src/viktrwlayer.c:2174 #, c-format msgid "Tracks: %d" msgstr "" #: ../src/viktrwlayer.c:2184 #, c-format msgid "Routes: %d" msgstr "" #: ../src/viktrwlayer.c:2215 #, c-format msgid "- %d:%02d hrs:mins" msgstr "- %d:%02d hrs:mins" #: ../src/viktrwlayer.c:2223 #, c-format msgid "%s%.1f km %s" msgstr "%s%.1f km %s" #: ../src/viktrwlayer.c:2226 #, c-format msgid "%s%.1f miles %s" msgstr "%s%.1f millas %s" #: ../src/viktrwlayer.c:2240 #, c-format msgid "Waypoints: %d" msgstr "" #: ../src/viktrwlayer.c:2266 #, c-format msgid "Trkpt: Alt %dft" msgstr "" #. VIK_UNITS_HEIGHT_METRES: #: ../src/viktrwlayer.c:2270 #, c-format msgid "Trkpt: Alt %dm" msgstr "" #. Compact date time format #: ../src/viktrwlayer.c:2277 #, c-format msgid " | Time %x %X" msgstr "" #: ../src/viktrwlayer.c:2295 #, c-format msgid " | Track: %s" msgstr "" #. Combine parts to make overall message #: ../src/viktrwlayer.c:2299 #, c-format msgid "%s%s | %s %s %s" msgstr "" #: ../src/viktrwlayer.c:2314 #, c-format msgid "Wpt: Alt %dft" msgstr "" #. VIK_UNITS_HEIGHT_METRES: #: ../src/viktrwlayer.c:2318 #, c-format msgid "Wpt: Alt %dm" msgstr "" #. Add comment if available #: ../src/viktrwlayer.c:2333 #, c-format msgid "%s | %s %s | Comment: %s" msgstr "" #: ../src/viktrwlayer.c:2335 #, c-format msgid "%s | %s %s" msgstr "" #: ../src/viktrwlayer.c:2563 ../src/viktrwlayer.c:2634 msgid "This layer has no waypoints or trackpoints." msgstr "Esta capa no tiene waypoints ni puntos de ruta." #: ../src/viktrwlayer.c:2661 ../src/vikwindow.c:2407 ../src/vikwindow.c:2848 #, c-format msgid "The file \"%s\" exists, do you wish to overwrite it?" msgstr "El fichero \"%s\" existe. ¿Desea sobreescribirlo?" #: ../src/viktrwlayer.c:2671 ../src/vikwindow.c:2429 msgid "The filename you requested could not be opened for writing." msgstr "El fichero seleccionado no se puede abrir para escritura." #: ../src/viktrwlayer.c:2676 ../src/viktrwlayer.c:2681 #: ../src/viktrwlayer.c:2691 ../src/viktrwlayer.c:2703 msgid "Export Layer" msgstr "Exportar capa" #: ../src/viktrwlayer.c:2720 msgid "Could not create temporary file for export." msgstr "" #: ../src/viktrwlayer.c:2729 #, c-format msgid "Could not launch %s." msgstr "" #: ../src/viktrwlayer.c:2773 msgid "Export Track as GPX" msgstr "Exportar traza como GPX" #: ../src/viktrwlayer.c:2795 msgid "Find" msgstr "Buscar" #: ../src/viktrwlayer.c:2805 msgid "Waypoint Name:" msgstr "Nombre del waypoint:" #: ../src/viktrwlayer.c:2822 msgid "Waypoint not found in this layer." msgstr "Waypoint no encontrado en esta capa." #: ../src/viktrwlayer.c:3090 msgid "Can not upload invisible track." msgstr "" #: ../src/viktrwlayer.c:3192 ../src/viktrwlayer.c:7785 msgid "Track" msgstr "Traza" #: ../src/viktrwlayer.c:3215 ../src/viktrwlayer.c:7817 msgid "Route" msgstr "" #: ../src/viktrwlayer.c:3296 ../src/viktrwlayer.c:6265 #: ../src/viktrwlayer.c:6314 msgid "_Finish Route" msgstr "" #: ../src/viktrwlayer.c:3298 ../src/viktrwlayer.c:6223 #: ../src/viktrwlayer.c:6312 msgid "_Finish Track" msgstr "" #. Now with icons #: ../src/viktrwlayer.c:3310 msgid "_View Layer" msgstr "Ver capa" #: ../src/viktrwlayer.c:3317 msgid "V_iew" msgstr "" #: ../src/viktrwlayer.c:3323 msgid "View All _Tracks" msgstr "" #: ../src/viktrwlayer.c:3328 msgid "View All _Routes" msgstr "" #: ../src/viktrwlayer.c:3333 msgid "View All _Waypoints" msgstr "" #: ../src/viktrwlayer.c:3338 msgid "_Goto Center of Layer" msgstr "Ir al centro de la capa" #: ../src/viktrwlayer.c:3344 ../src/viktrwlayer.c:6199 msgid "Goto _Waypoint..." msgstr "" #: ../src/viktrwlayer.c:3350 msgid "_Export Layer" msgstr "Exportar capa" #: ../src/viktrwlayer.c:3356 msgid "Export as GPS_Point..." msgstr "" #: ../src/viktrwlayer.c:3361 msgid "Export as GPS_Mapper..." msgstr "" #: ../src/viktrwlayer.c:3366 msgid "Export as _GPX..." msgstr "" #: ../src/viktrwlayer.c:3371 msgid "Export as _KML..." msgstr "" #: ../src/viktrwlayer.c:3376 msgid "Open with External Program_1: " msgstr "" #: ../src/viktrwlayer.c:3383 msgid "Open with External Program_2: " msgstr "" #: ../src/viktrwlayer.c:3391 ../src/vikwindow.c:3145 msgid "_New" msgstr "_Nuevo" #: ../src/viktrwlayer.c:3397 msgid "New _Waypoint..." msgstr "" #: ../src/viktrwlayer.c:3403 msgid "New _Track" msgstr "" #: ../src/viktrwlayer.c:3411 msgid "New _Route" msgstr "" #: ../src/viktrwlayer.c:3420 ../src/viktrwlayer.c:6597 msgid "Geotag _Images..." msgstr "" #: ../src/viktrwlayer.c:3427 msgid "_Acquire" msgstr "" #: ../src/viktrwlayer.c:3433 ../src/vikwindow.c:3150 msgid "From _GPS..." msgstr "Desde _GPS..." #: ../src/viktrwlayer.c:3439 msgid "From Google _Directions..." msgstr "" #: ../src/viktrwlayer.c:3446 msgid "From _OSM Traces..." msgstr "" #: ../src/viktrwlayer.c:3451 msgid "From _My OSM Traces..." msgstr "" #: ../src/viktrwlayer.c:3459 ../src/vikwindow.c:3166 msgid "From _Wikipedia Waypoints" msgstr "" #: ../src/viktrwlayer.c:3465 msgid "Within _Layer Bounds" msgstr "Dentro de los límites de la capa" #: ../src/viktrwlayer.c:3471 msgid "Within _Current View" msgstr "Dentro de la vista actual" #: ../src/viktrwlayer.c:3479 msgid "From Geo_caching..." msgstr "" #: ../src/viktrwlayer.c:3486 ../src/vikwindow.c:3163 msgid "From Geotagged _Images..." msgstr "" #: ../src/viktrwlayer.c:3492 msgid "From _File..." msgstr "" #: ../src/viktrwlayer.c:3498 ../src/viktrwlayer.c:6542 msgid "_Upload" msgstr "" #: ../src/viktrwlayer.c:3504 msgid "Upload to _GPS..." msgstr "" #: ../src/viktrwlayer.c:3511 ../src/viktrwlayer.c:6570 msgid "Upload to _OSM..." msgstr "" #: ../src/viktrwlayer.c:3519 msgid "De_lete" msgstr "" #: ../src/viktrwlayer.c:3525 msgid "Delete All _Tracks" msgstr "" #: ../src/viktrwlayer.c:3531 msgid "Delete Tracks _From Selection..." msgstr "" #: ../src/viktrwlayer.c:3537 ../src/viktrwlayer.c:6290 msgid "Delete _All Routes" msgstr "" #: ../src/viktrwlayer.c:3543 ../src/viktrwlayer.c:6296 msgid "_Delete Routes From Selection..." msgstr "" #: ../src/viktrwlayer.c:3549 msgid "Delete All _Waypoints" msgstr "" #: ../src/viktrwlayer.c:3555 msgid "Delete Waypoints From _Selection..." msgstr "" #: ../src/viktrwlayer.c:4128 #, c-format msgid "Are you sure you want to delete all tracks in %s?" msgstr "" #: ../src/viktrwlayer.c:4138 #, c-format msgid "Are you sure you want to delete all routes in %s?" msgstr "" #: ../src/viktrwlayer.c:4148 #, c-format msgid "Are you sure you want to delete all waypoints in %s?" msgstr "" #: ../src/viktrwlayer.c:4165 #, c-format msgid "Are you sure you want to delete the waypoint \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4178 #, c-format msgid "Are you sure you want to delete the track \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4191 #, c-format msgid "Are you sure you want to delete the route \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4351 ../src/viktrwlayer.c:4922 msgid "" "Converting a track to a route removes extra track data such as segments, " "timestamps, etc...\n" "Do you want to continue?" msgstr "" #: ../src/viktrwlayer.c:4711 msgid "Failed. No other tracks with timestamps in this layer found" msgstr "" #: ../src/viktrwlayer.c:4713 msgid "Failed. No other tracks without timestamps in this layer found" msgstr "" #: ../src/viktrwlayer.c:4732 msgid "Merge with..." msgstr "Unido con..." #: ../src/viktrwlayer.c:4733 msgid "Select route to merge with" msgstr "" #: ../src/viktrwlayer.c:4733 msgid "Select track to merge with" msgstr "Track seleccionado unido con..." #: ../src/viktrwlayer.c:4818 ../src/viktrwlayer.c:4895 msgid "Append Route" msgstr "" #: ../src/viktrwlayer.c:4818 ../src/viktrwlayer.c:4895 msgid "Append Track" msgstr "" #: ../src/viktrwlayer.c:4819 msgid "Select the route to append after the current route" msgstr "" #: ../src/viktrwlayer.c:4820 msgid "Select the track to append after the current track" msgstr "" #: ../src/viktrwlayer.c:4896 msgid "Select the track to append after the current route" msgstr "" #: ../src/viktrwlayer.c:4897 msgid "Select the route to append after the current track" msgstr "" #: ../src/viktrwlayer.c:4957 #, c-format msgid "%d segment merged" msgid_plural "%d segments merged" msgstr[0] "" msgstr[1] "" #: ../src/viktrwlayer.c:4973 msgid "Failed. This track does not have timestamp" msgstr "Fallo: Este track no tiene tiempo de registro" #: ../src/viktrwlayer.c:4985 msgid "Failed. No other track in this layer has timestamp" msgstr "Fallo: no existe otro track con tiempo de registro" #: ../src/viktrwlayer.c:4992 msgid "Merge Threshold..." msgstr "Umbral de fusionado..." #: ../src/viktrwlayer.c:4993 msgid "Merge when time between tracks less than:" msgstr "Fusionar cuando el tiempo entre trazas de menos de:" #: ../src/viktrwlayer.c:5128 msgid "Split Threshold..." msgstr "Umbral de división..." #: ../src/viktrwlayer.c:5129 msgid "Split when time between trackpoints exceeds:" msgstr "Dividir cuando el intervalo entre puntos exceda:" #: ../src/viktrwlayer.c:5205 msgid "Split Every Nth Point" msgstr "Separar cada punto N-ésimo:" #: ../src/viktrwlayer.c:5206 msgid "Split on every Nth point:" msgstr "Separar en cada punto N-ésimo:" #: ../src/viktrwlayer.c:5312 msgid "Can not split track as it has no segments" msgstr "" #: ../src/viktrwlayer.c:5340 ../src/viktrwlayer.c:5370 #, c-format msgid "Deleted %ld point" msgid_plural "Deleted %ld points" msgstr[0] "" msgstr[1] "" #: ../src/viktrwlayer.c:5531 msgid "Internal Error in vik_trw_layer_uniquify_tracks" msgstr "" #: ../src/viktrwlayer.c:5588 ../src/viktrwlayer.c:5635 #: ../src/viktrwlayer.c:5814 msgid "" "Multiple entries with the same name exist. This method only works with " "unique names. Force unique names now?" msgstr "" #: ../src/viktrwlayer.c:5599 msgid "No tracks found" msgstr "" #: ../src/viktrwlayer.c:5607 ../src/viktrwlayer.c:5654 #: ../src/viktrwlayer.c:5834 msgid "Delete Selection" msgstr "" #: ../src/viktrwlayer.c:5608 msgid "Select tracks to delete" msgstr "Seleccione pistas a eliminar" #: ../src/viktrwlayer.c:5646 msgid "No routes found" msgstr "" #: ../src/viktrwlayer.c:5655 msgid "Select routes to delete" msgstr "" #: ../src/viktrwlayer.c:5761 msgid "Internal Error in vik_trw_layer_uniquify_waypoints" msgstr "" #: ../src/viktrwlayer.c:5824 msgid "No waypoints found" msgstr "" #: ../src/viktrwlayer.c:5835 msgid "Select waypoints to delete" msgstr "" #: ../src/viktrwlayer.c:5896 #, c-format msgid "" "A waypoint with the name \"%s\" already exists. Really rename to the same " "name?" msgstr "" #: ../src/viktrwlayer.c:5926 #, c-format msgid "" "A track with the name \"%s\" already exists. Really rename to the same name?" msgstr "" #: ../src/viktrwlayer.c:5963 #, c-format msgid "" "A route with the name \"%s\" already exists. Really rename to the same name?" msgstr "" #: ../src/viktrwlayer.c:6085 ../src/viktrwlayer.c:6337 msgid "_Goto" msgstr "_Ir a" #: ../src/viktrwlayer.c:6104 msgid "_Visit Geocache Webpage" msgstr "Visitar página de Geocache" #: ../src/viktrwlayer.c:6123 msgid "_Show Picture..." msgstr "" #: ../src/viktrwlayer.c:6131 msgid "Update Geotag on _Image" msgstr "" #: ../src/viktrwlayer.c:6137 msgid "_Update" msgstr "" #: ../src/viktrwlayer.c:6142 msgid "Update and _Keep File Timestamp" msgstr "" #: ../src/viktrwlayer.c:6153 msgid "Visit _Webpage" msgstr "" #: ../src/viktrwlayer.c:6184 msgid "_New Waypoint..." msgstr "" #: ../src/viktrwlayer.c:6193 msgid "_View All Waypoints" msgstr "" #: ../src/viktrwlayer.c:6205 msgid "Delete _All Waypoints" msgstr "" #: ../src/viktrwlayer.c:6211 msgid "_Delete Waypoints From Selection..." msgstr "" #: ../src/viktrwlayer.c:6233 msgid "_View All Tracks" msgstr "" #: ../src/viktrwlayer.c:6239 msgid "_New Track" msgstr "" #: ../src/viktrwlayer.c:6247 msgid "Delete _All Tracks" msgstr "" #: ../src/viktrwlayer.c:6253 msgid "_Delete Tracks From Selection..." msgstr "" #: ../src/viktrwlayer.c:6276 msgid "_View All Routes" msgstr "" #: ../src/viktrwlayer.c:6282 msgid "_New Route" msgstr "" #: ../src/viktrwlayer.c:6327 msgid "_View Track" msgstr "Ver traza" #: ../src/viktrwlayer.c:6329 msgid "_View Route" msgstr "" #: ../src/viktrwlayer.c:6343 msgid "_Startpoint" msgstr "Punto de inicio" #: ../src/viktrwlayer.c:6349 msgid "\"_Center\"" msgstr "Centrar" #: ../src/viktrwlayer.c:6355 msgid "_Endpoint" msgstr "Fin" #: ../src/viktrwlayer.c:6361 msgid "_Highest Altitude" msgstr "Altitud superior" #: ../src/viktrwlayer.c:6367 msgid "_Lowest Altitude" msgstr "Altitud inferior" #: ../src/viktrwlayer.c:6375 msgid "_Maximum Speed" msgstr "Velocidad máxima" #: ../src/viktrwlayer.c:6384 msgid "Co_mbine" msgstr "" #: ../src/viktrwlayer.c:6392 msgid "_Merge By Time..." msgstr "" #: ../src/viktrwlayer.c:6397 msgid "Merge _Segments" msgstr "" #: ../src/viktrwlayer.c:6403 msgid "Merge _With Other Tracks..." msgstr "Mezclar con otras trazas" #: ../src/viktrwlayer.c:6409 msgid "_Append Track..." msgstr "" #: ../src/viktrwlayer.c:6411 msgid "_Append Route..." msgstr "" #: ../src/viktrwlayer.c:6417 msgid "Append _Route..." msgstr "" #: ../src/viktrwlayer.c:6419 msgid "Append _Track..." msgstr "" #: ../src/viktrwlayer.c:6426 msgid "_Split" msgstr "" #: ../src/viktrwlayer.c:6434 msgid "_Split By Time..." msgstr "" #. ATM always enable this entry - don't want to have to analyse the track before displaying the menu - to keep the menu speedy #: ../src/viktrwlayer.c:6440 msgid "Split Se_gments" msgstr "" #: ../src/viktrwlayer.c:6446 msgid "Split By _Number of Points..." msgstr "" #: ../src/viktrwlayer.c:6451 msgid "Split at _Trackpoint" msgstr "" #: ../src/viktrwlayer.c:6460 msgid "Delete Poi_nts" msgstr "" #: ../src/viktrwlayer.c:6466 msgid "Delete Points With The Same _Position" msgstr "" #: ../src/viktrwlayer.c:6471 msgid "Delete Points With The Same _Time" msgstr "" #: ../src/viktrwlayer.c:6477 msgid "_Reverse Track" msgstr "" #: ../src/viktrwlayer.c:6479 msgid "_Reverse Route" msgstr "" #: ../src/viktrwlayer.c:6488 msgid "Down_load Maps Along Track..." msgstr "Descargar mapas a lo largo de la traza" #: ../src/viktrwlayer.c:6490 msgid "Down_load Maps Along Route..." msgstr "" #: ../src/viktrwlayer.c:6497 msgid "_Apply DEM Data" msgstr "Aplicar datos DEM" #: ../src/viktrwlayer.c:6504 msgid "_Export Track as GPX..." msgstr "" #: ../src/viktrwlayer.c:6506 msgid "_Export Route as GPX..." msgstr "" #: ../src/viktrwlayer.c:6513 msgid "E_xtend Track End" msgstr "Extender al final de la traza" #: ../src/viktrwlayer.c:6515 msgid "E_xtend Route End" msgstr "" #: ../src/viktrwlayer.c:6522 msgid "C_onvert to a Route" msgstr "" #: ../src/viktrwlayer.c:6524 msgid "C_onvert to a Track" msgstr "" #: ../src/viktrwlayer.c:6532 msgid "Extend _Using Route Finder" msgstr "" #: ../src/viktrwlayer.c:6548 msgid "_Upload to GPS..." msgstr "" #: ../src/viktrwlayer.c:6559 msgid "_View Google Directions" msgstr "Ver Direcciones de Google" #: ../src/viktrwlayer.c:6579 msgid "Use with _Filter" msgstr "Usar con filtro" #: ../src/viktrwlayer.c:6612 msgid "_Edit Trackpoint" msgstr "" #: ../src/viktrwlayer.c:7524 #, c-format msgid " - Gain %dm:Loss %dm" msgstr "" #: ../src/viktrwlayer.c:7526 #, c-format msgid " - Gain %dft:Loss %dft" msgstr "" #: ../src/viktrwlayer.c:7531 #, c-format msgid " - Bearing %3.1f° - Step %s" msgstr "" #: ../src/viktrwlayer.c:8124 #, c-format msgid "Could not launch %s to open file." msgstr "" #: ../src/viktrwlayer.c:8205 #, c-format msgid "Creating %d Image Thumbnails..." msgstr "Creando %d miniaturas..." #: ../src/viktrwlayer.c:8524 msgid "No map layer in use. Create one first" msgstr "No hay una capa de mapa en uso. Cree una primero" #: ../src/viktrwlayer_propwin.c:898 ../src/viktrwlayer_propwin.c:1155 #, c-format msgid "%.1f kph" msgstr "" #: ../src/viktrwlayer_propwin.c:901 ../src/viktrwlayer_propwin.c:1158 #, c-format msgid "%.1f mph" msgstr "" #: ../src/viktrwlayer_propwin.c:904 ../src/viktrwlayer_propwin.c:1161 #, c-format msgid "%.1f knots" msgstr "" #. VIK_UNITS_SPEED_METRES_PER_SECOND: #: ../src/viktrwlayer_propwin.c:908 ../src/viktrwlayer_propwin.c:1165 #, c-format msgid "%.1f m/s" msgstr "" #: ../src/viktrwlayer_propwin.c:1745 #, c-format msgid "%.1f miles" msgstr "" #: ../src/viktrwlayer_propwin.c:1747 #, c-format msgid "%.1f km" msgstr "" #: ../src/viktrwlayer_propwin.c:2681 msgid "Failed spliting track. Track unchanged" msgstr "falla en la operacion del spliting . Track no modificado" #: ../src/viktrwlayer_propwin.c:2779 ../src/viktrwlayer_propwin.c:3178 #, c-format msgid "%s - Track Properties" msgstr "%s - Propiedades de ruta" #: ../src/viktrwlayer_propwin.c:2784 msgid "Split at _Marker" msgstr "" #: ../src/viktrwlayer_propwin.c:2785 msgid "Split _Segments" msgstr "" #: ../src/viktrwlayer_propwin.c:2786 msgid "_Reverse" msgstr "" #: ../src/viktrwlayer_propwin.c:2787 msgid "_Delete Dupl." msgstr "" #: ../src/viktrwlayer_propwin.c:2813 msgid "Comment:" msgstr "Comentario:" #: ../src/viktrwlayer_propwin.c:2814 msgid "Description:" msgstr "" #: ../src/viktrwlayer_propwin.c:2815 msgid "Track Length:" msgstr "Longitud de ruta:" #: ../src/viktrwlayer_propwin.c:2816 msgid "Trackpoints:" msgstr "Puntos de ruta:" #: ../src/viktrwlayer_propwin.c:2817 msgid "Segments:" msgstr "Segmentos:" #: ../src/viktrwlayer_propwin.c:2818 msgid "Duplicate Points:" msgstr "Puntos duplicados:" #: ../src/viktrwlayer_propwin.c:2819 msgid "Max Speed:" msgstr "Velocidad max.:" #: ../src/viktrwlayer_propwin.c:2820 msgid "Avg. Speed:" msgstr "Velocidad media:" #: ../src/viktrwlayer_propwin.c:2821 msgid "Moving Avg. Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:2822 msgid "Avg. Dist. Between TPs:" msgstr "Dist. media entre puntos:" #: ../src/viktrwlayer_propwin.c:2823 msgid "Elevation Range:" msgstr "Horquilla de elevación:" #: ../src/viktrwlayer_propwin.c:2824 msgid "Total Elevation Gain/Loss:" msgstr "Diferencia total de elevación:" #: ../src/viktrwlayer_propwin.c:2825 msgid "Start:" msgstr "Comienzo:" #: ../src/viktrwlayer_propwin.c:2826 msgid "End:" msgstr "Fin:" #: ../src/viktrwlayer_propwin.c:2827 msgid "Duration:" msgstr "Duración:" #: ../src/viktrwlayer_propwin.c:2828 msgid "Color:" msgstr "" #: ../src/viktrwlayer_propwin.c:2877 ../src/viktrwlayer_propwin.c:2901 #: ../src/viktrwlayer_propwin.c:2929 ../src/viktrwlayer_propwin.c:2966 #: ../src/viktrwlayer_propwin.c:2984 ../src/viktrwlayer_propwin.c:3034 #: ../src/viktrwlayer_propwin.c:3035 ../src/viktrwlayer_propwin.c:3036 #: ../src/viktrwlayer_propwin.c:3062 ../src/viktrwlayer_propwin.c:3063 #: ../src/viktrwlayer_propwin.c:3078 ../src/viktrwlayer_propwin.c:3079 #: ../src/viktrwlayer_propwin.c:3092 ../src/viktrwlayer_propwin.c:3093 #: ../src/viktrwlayer_propwin.c:3106 ../src/viktrwlayer_propwin.c:3107 #: ../src/viktrwlayer_propwin.c:3120 ../src/viktrwlayer_propwin.c:3121 #: ../src/viktrwlayer_propwin.c:3134 ../src/viktrwlayer_propwin.c:3135 #, c-format msgid "No Data" msgstr "Sin datos" #: ../src/viktrwlayer_propwin.c:3031 #, c-format msgid "%d minutes" msgstr "%d minutos" #: ../src/viktrwlayer_propwin.c:3058 msgid "Statistics" msgstr "Estadisticas" #: ../src/viktrwlayer_propwin.c:3064 msgid "Show D_EM" msgstr "" #: ../src/viktrwlayer_propwin.c:3065 ../src/viktrwlayer_propwin.c:3080 #: ../src/viktrwlayer_propwin.c:3094 ../src/viktrwlayer_propwin.c:3136 msgid "Show _GPS Speed" msgstr "" #: ../src/viktrwlayer_propwin.c:3067 ../src/viktrwlayer_propwin.c:3082 #: ../src/viktrwlayer_propwin.c:3110 ../src/viktrwlayer_propwin.c:3138 msgid "Track Distance:" msgstr "Distancia del Track:" #: ../src/viktrwlayer_propwin.c:3068 ../src/viktrwlayer_propwin.c:3125 msgid "Track Height:" msgstr "" #: ../src/viktrwlayer_propwin.c:3073 msgid "Elevation-distance" msgstr "Elevación-distancia" #: ../src/viktrwlayer_propwin.c:3083 msgid "Track Gradient:" msgstr "" #: ../src/viktrwlayer_propwin.c:3087 msgid "Gradient-distance" msgstr "" #: ../src/viktrwlayer_propwin.c:3096 ../src/viktrwlayer_propwin.c:3111 #: ../src/viktrwlayer_propwin.c:3124 msgid "Track Time:" msgstr "Tiempo del Track:" #: ../src/viktrwlayer_propwin.c:3097 ../src/viktrwlayer_propwin.c:3139 msgid "Track Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:3101 msgid "Speed-time" msgstr "Velocidad-tiempo" #: ../src/viktrwlayer_propwin.c:3108 ../src/viktrwlayer_propwin.c:3122 msgid "Show S_peed" msgstr "" #: ../src/viktrwlayer_propwin.c:3115 msgid "Distance-time" msgstr "" #: ../src/viktrwlayer_propwin.c:3129 msgid "Elevation-time" msgstr "" #: ../src/viktrwlayer_propwin.c:3143 msgid "Speed-distance" msgstr "" #: ../src/viktrwlayer_tpwin.c:118 msgid "Part of Track:" msgstr "Parte de la ruta:" #: ../src/viktrwlayer_tpwin.c:119 msgid "Latitude:" msgstr "Latitud:" #: ../src/viktrwlayer_tpwin.c:120 msgid "Longitude:" msgstr "Longitud:" #: ../src/viktrwlayer_tpwin.c:121 msgid "Altitude:" msgstr "Altitud:" #: ../src/viktrwlayer_tpwin.c:122 msgid "Timestamp:" msgstr "Instante temporal:" #: ../src/viktrwlayer_tpwin.c:123 msgid "Time:" msgstr "Tiempo:" #: ../src/viktrwlayer_tpwin.c:124 msgid "Distance Difference:" msgstr "Diferencia en distancia:" #: ../src/viktrwlayer_tpwin.c:125 msgid "Time Difference:" msgstr "Diferencia en tiempo:" #: ../src/viktrwlayer_tpwin.c:126 msgid "\"Speed\" Between:" msgstr "\"Velocidad\" entre:" #: ../src/viktrwlayer_tpwin.c:127 msgid "VDOP:" msgstr "VDOP:" #: ../src/viktrwlayer_tpwin.c:128 msgid "HDOP:" msgstr "HDOP:" #: ../src/viktrwlayer_tpwin.c:129 msgid "PDOP:" msgstr "PDOP:" #: ../src/viktrwlayer_tpwin.c:130 msgid "SAT/FIX:" msgstr "Configurar / Establecer: " #: ../src/viktrwlayer_tpwin.c:139 msgid "Trackpoint" msgstr "Punto de ruta" #: ../src/viktrwlayer_tpwin.c:142 msgid "_Insert After" msgstr "Insertar después" #: ../src/viktrwlayer_tpwin.c:144 msgid "Split Here" msgstr "Dividir aquí" #: ../src/viktrwlayer_geotag.c:446 #, c-format msgid "Geotagging %d Images..." msgstr "" #: ../src/viktrwlayer_geotag.c:510 msgid "Geotag Images" msgstr "" #: ../src/viktrwlayer_geotag.c:516 msgid "Images" msgstr "" #: ../src/viktrwlayer_geotag.c:520 msgid "Overwrite Existing Waypoints:" msgstr "" #: ../src/viktrwlayer_geotag.c:523 msgid "Overwrite Existing GPS Information:" msgstr "" #: ../src/viktrwlayer_geotag.c:525 msgid "Keep File Modification Timestamp:" msgstr "" #: ../src/viktrwlayer_geotag.c:555 msgid "Create Waypoints:" msgstr "" #: ../src/viktrwlayer_geotag.c:563 msgid "Write EXIF:" msgstr "Escribir EXIF:" #: ../src/viktrwlayer_geotag.c:575 msgid "Interpolate Between Track Segments:" msgstr "" #: ../src/viktrwlayer_geotag.c:579 msgid "Image Time Offset (Seconds):" msgstr "" #: ../src/viktrwlayer_geotag.c:581 msgid "" "The number of seconds to ADD to the photos time to make it match the GPS " "data. Calculate this with (GPS - Photo). Can be negative or positive. Useful " "to adjust times when a camera's timestamp was incorrect." msgstr "" #: ../src/viktrwlayer_geotag.c:584 msgid "Image Timezone:" msgstr "" #: ../src/viktrwlayer_geotag.c:586 msgid "" "The timezone that was used when the images were created. For example, if a " "camera is set to AWST or +8:00 hours. Enter +8:00 here so that the correct " "adjustment to the images' time can be made. GPS data is always in UTC." msgstr "" #: ../src/viktrwlayer_geotag.c:590 #, c-format msgid "Using track: %s" msgstr "" #: ../src/viktrwlayer_geotag.c:592 #, c-format msgid "Using all tracks in: %s" msgstr "" #: ../src/vikstatus.c:105 msgid "Current zoom level. Click to select a new one." msgstr "" #: ../src/vikwaypoint.c:34 msgid "Waypoint" msgstr "" #. TODO get rid of this as this is unnecessary duplication... #: ../src/vikwindow.c:221 msgid "Pan" msgstr "Desplazar" #: ../src/vikwindow.c:221 msgid "Zoom" msgstr "Zoom" #: ../src/vikwindow.c:221 msgid "Ruler" msgstr "Regla" #: ../src/vikwindow.c:221 msgid "Select" msgstr "" #. Create tooltip #: ../src/vikwindow.c:440 msgid "Select zoom level" msgstr "" #: ../src/vikwindow.c:645 #, c-format msgid "" "Do you want to save the changes you made to the document \"%s\"?\n" "\n" "Your changes will be lost if you don't save them." msgstr "" "¿Desea grabar los cambios en el documento \"%s\"?\n" "\n" "Sus cambios se perderán si no los graba." #: ../src/vikwindow.c:649 msgid "Don't Save" msgstr "No guardar" #: ../src/vikwindow.c:696 msgid "mpp" msgstr "metros/pixel" #: ../src/vikwindow.c:696 msgid "pixelfact" msgstr "factor de pixel" #: ../src/vikwindow.c:861 #, c-format msgid "%s %s %dm" msgstr "%s%s%dm" #: ../src/vikwindow.c:863 #, c-format msgid "%s %s %dft" msgstr "%s %s %dpiés" #: ../src/vikwindow.c:866 #, c-format msgid "%s %s" msgstr "%s%s" #. NB Ctrl+Shift+R is used for Refresh (deemed more important), so use 'U' instead #: ../src/vikwindow.c:1254 msgid "_Ruler" msgstr "_Regla" #: ../src/vikwindow.c:1254 msgid "Ruler Tool" msgstr "Herramienta regla" #: ../src/vikwindow.c:1502 ../src/vikwindow.c:3138 msgid "_Zoom" msgstr "_Zoom" #: ../src/vikwindow.c:1502 msgid "Zoom Tool" msgstr "Herramienta zoom" #: ../src/vikwindow.c:1547 ../src/vikwindow.c:3139 msgid "_Pan" msgstr "_Desplazar" #: ../src/vikwindow.c:1547 msgid "Pan Tool" msgstr "Herramienta de paneo" #: ../src/vikwindow.c:1664 msgid "_Select" msgstr "" #: ../src/vikwindow.c:1664 msgid "Select Tool" msgstr "" #: ../src/vikwindow.c:1809 msgid "You must select a layer to show its properties." msgstr "Debe seleccionar una capa para mostrar sus propiedades." #. No error to show, so unlikely this will get called #: ../src/vikwindow.c:1824 msgid "The help system is not available." msgstr "" #. Main error path #: ../src/vikwindow.c:1827 #, c-format msgid "" "Help is not available because: %s.\n" "Ensure a Mime Type ghelp handler program is installed (e.g. yelp)." msgstr "" #: ../src/vikwindow.c:1850 msgid "You must select a layer to delete." msgstr "Debe seleccionar una capa que borrar." #: ../src/vikwindow.c:2087 msgid "Untitled" msgstr "Sin nombre" #: ../src/vikwindow.c:2194 #, c-format msgid "Unable to add '%s' to the list of recently used documents" msgstr "" "Imposibilitado de agregar '%s' a la lista de los documentos recientemente " "usados" #: ../src/vikwindow.c:2208 msgid "The file you requested could not be opened." msgstr "El fichero seleccionado no se puede abrir" #: ../src/vikwindow.c:2211 msgid "" "GPSBabel is required to load files of this type or GPSBabel encountered " "problems." msgstr "" #: ../src/vikwindow.c:2214 #, c-format msgid "Unable to load malformed GPX file %s" msgstr "" #: ../src/vikwindow.c:2217 #, c-format msgid "Unsupported file type for %s" msgstr "" #. Since we can process .vik files with issues just show a warning in the status bar #. Not that a user can do much about it... or tells them what this issue is yet... #: ../src/vikwindow.c:2223 #, c-format msgid "WARNING: issues encountered loading %s" msgstr "" #: ../src/vikwindow.c:2278 msgid "Please select a GPS data file to open. " msgstr "Por favor seleccione un fichero GPS que abrir. " #: ../src/vikwindow.c:2288 msgid "Geocaching" msgstr "" #: ../src/vikwindow.c:2294 msgid "Google Earth" msgstr "" #: ../src/vikwindow.c:2299 msgid "GPX" msgstr "" #: ../src/vikwindow.c:2304 ../src/vikwindow.c:2387 #: ../src/viking.desktop.in.h:1 msgid "Viking" msgstr "Vikingo" #: ../src/vikwindow.c:2374 msgid "Save as Viking File." msgstr "Guardar como archivo Viking." #. Try harder... #: ../src/vikwindow.c:2619 ../src/vikwindow.c:2625 msgid "Generating image file..." msgstr "" #: ../src/vikwindow.c:2647 msgid "" "Failed to generate internal image.\n" "\n" "Try creating a smaller image." msgstr "" #: ../src/vikwindow.c:2655 msgid "Failed to generate image file." msgstr "" #. Success #: ../src/vikwindow.c:2660 msgid "Image file generated." msgstr "" #: ../src/vikwindow.c:2764 msgid "" "Viewable region outside allowable pixel size bounds for image. Clipping " "width/height values." msgstr "" "La región visible fuera esta fuera de los valores permitidos para los " "límites de la imagen. Se limitarán el ancho y el alto." #: ../src/vikwindow.c:2789 #, c-format msgid "Total area: %ldm x %ldm (%.3f sq. km)" msgstr "Area total: %ldm x %ldm (%.3f km cuadrados)" #: ../src/vikwindow.c:2792 #, c-format msgid "Total area: %ldm x %ldm (%.3f sq. miles)" msgstr "Area total: %ldm x %ldm (%.3f sq. miles)" #: ../src/vikwindow.c:2813 msgid "Save Image" msgstr "Guardar imagen" #: ../src/vikwindow.c:2834 msgid "PNG" msgstr "" #: ../src/vikwindow.c:2857 msgid "You must be in UTM mode to use this feature" msgstr "Debe estar en modo UTM para usar esta función" #: ../src/vikwindow.c:2862 msgid "Choose a directory to hold images" msgstr "Elije un directorio para colocar las imagenes" #. todo: default for answers inside VikWindow or static (thruout instance) #: ../src/vikwindow.c:2883 msgid "Save to Image File" msgstr "Guardar como imagen" #: ../src/vikwindow.c:2900 msgid "Width (pixels):" msgstr "Ancho (pixels):" #: ../src/vikwindow.c:2902 msgid "Height (pixels):" msgstr "Alto (pixels):" #: ../src/vikwindow.c:2905 msgid "" "WARNING: USING LARGE IMAGES OVER 10000x10000\n" "MAY CRASH THE PROGRAM!" msgstr "" #: ../src/vikwindow.c:2907 msgid "Zoom (meters per pixel):" msgstr "Zoom (metros/pixel):" #: ../src/vikwindow.c:2921 msgid "Area in current viewable window" msgstr "Area en ventana visible" #: ../src/vikwindow.c:2931 msgid "Save as PNG" msgstr "Guardar como PNG" #: ../src/vikwindow.c:2932 msgid "Save as JPEG" msgstr "Guardar como JPEG" #: ../src/vikwindow.c:2954 msgid "East-west image tiles:" msgstr "Teselas de imagen E-W:" #: ../src/vikwindow.c:2956 msgid "North-south image tiles:" msgstr "Teselas de imagen N-S:" #: ../src/vikwindow.c:3097 msgid "Choose a background color" msgstr "Escoja un color de fondo" #: ../src/vikwindow.c:3113 msgid "Choose a track highlight color" msgstr "" #: ../src/vikwindow.c:3134 msgid "_File" msgstr "_Archivo" #: ../src/vikwindow.c:3135 msgid "_Edit" msgstr "_Editar" #: ../src/vikwindow.c:3136 msgid "_View" msgstr "_Ver" #: ../src/vikwindow.c:3137 msgid "_Show" msgstr "_Mostrar" #: ../src/vikwindow.c:3140 msgid "_Layers" msgstr "_Capas" #: ../src/vikwindow.c:3141 msgid "_Tools" msgstr "_Herramientas" #: ../src/vikwindow.c:3142 msgid "_Webtools" msgstr "_Herramientas WEB" #: ../src/vikwindow.c:3143 ../src/vikwindow.c:3206 msgid "_Help" msgstr "A_yuda" #: ../src/vikwindow.c:3145 msgid "New file" msgstr "Archivo nuevo" #: ../src/vikwindow.c:3146 msgid "_Open..." msgstr "_Abrir…" #: ../src/vikwindow.c:3146 msgid "Open a file" msgstr "Abrir un archivo" #: ../src/vikwindow.c:3147 msgid "Open _Recent File" msgstr "Abrir fichero reciente" #: ../src/vikwindow.c:3148 msgid "Append _File..." msgstr "Añadir fichero" #: ../src/vikwindow.c:3148 msgid "Append data from a different file" msgstr "Añadir datos de otro fichero" #: ../src/vikwindow.c:3149 msgid "A_cquire" msgstr "A_dquirir" #: ../src/vikwindow.c:3150 msgid "Transfer data from a GPS device" msgstr "Transferir datos desde un dispositivo GPS" #: ../src/vikwindow.c:3151 msgid "Import File With GPS_Babel..." msgstr "" #: ../src/vikwindow.c:3151 msgid "Import file via GPSBabel converter" msgstr "" #: ../src/vikwindow.c:3153 msgid "Google _Directions..." msgstr "Google _Directions..." #: ../src/vikwindow.c:3153 msgid "Get driving directions from Google" msgstr "Obtener trayectos desde Google" #: ../src/vikwindow.c:3156 msgid "_OSM Traces..." msgstr "" #: ../src/vikwindow.c:3156 msgid "Get traces from OpenStreetMap" msgstr "" #: ../src/vikwindow.c:3157 msgid "_My OSM Traces..." msgstr "" #: ../src/vikwindow.c:3157 msgid "Get Your Own Traces from OpenStreetMap" msgstr "" #: ../src/vikwindow.c:3160 msgid "Geo_caches..." msgstr "Geocaches" #: ../src/vikwindow.c:3160 msgid "Get Geocaches from geocaching.com" msgstr "Obtener geocachés de geocaching.com" #: ../src/vikwindow.c:3163 msgid "Create waypoints from geotagged images" msgstr "" #: ../src/vikwindow.c:3166 msgid "Create waypoints from Wikipedia items in the current view" msgstr "" #: ../src/vikwindow.c:3168 msgid "_Save" msgstr "_Guardar" #: ../src/vikwindow.c:3168 msgid "Save the file" msgstr "Guardar el fichero" #: ../src/vikwindow.c:3169 msgid "Save _As..." msgstr "Guardar _como..." #: ../src/vikwindow.c:3169 msgid "Save the file under different name" msgstr "Guardar el fichero con otro nombre" #: ../src/vikwindow.c:3170 msgid "_Generate Image File..." msgstr "Generar i_magen..." #: ../src/vikwindow.c:3170 msgid "Save a snapshot of the workspace into a file" msgstr "Guardar una imagen del area de trabajo en un fichero" #: ../src/vikwindow.c:3171 msgid "Generate _Directory of Images..." msgstr "Generar _directorio de imágenes..." #: ../src/vikwindow.c:3171 msgid "FIXME:IMGDIR" msgstr "FIXME:IMGDIR" #: ../src/vikwindow.c:3174 msgid "_Print..." msgstr "_Imprimir…" #: ../src/vikwindow.c:3174 msgid "Print maps" msgstr "Imprimir mapas" #: ../src/vikwindow.c:3177 msgid "E_xit" msgstr "_Salir" #: ../src/vikwindow.c:3177 msgid "Exit the program" msgstr "Salir del programa" #: ../src/vikwindow.c:3178 msgid "Save and Exit" msgstr "Guardar y salir" #: ../src/vikwindow.c:3178 msgid "Save and Exit the program" msgstr "Guardar el fichero y salir de Viking" #: ../src/vikwindow.c:3180 msgid "Go to the _Default Location" msgstr "Ir a la localización por defecto" #: ../src/vikwindow.c:3180 msgid "Go to the default location" msgstr "Ir a la localización por defecto" #: ../src/vikwindow.c:3181 msgid "Go to _Location..." msgstr "Ir a localización..." #: ../src/vikwindow.c:3181 msgid "Go to address/place using text search" msgstr "Ir a la direccion/posición usada por la busqueda de texto" #: ../src/vikwindow.c:3182 msgid "_Go to Lat/Lon..." msgstr "_Ir a Lat/Lon..." #: ../src/vikwindow.c:3182 msgid "Go to arbitrary lat/lon coordinate" msgstr "Ir a una lat/lon arbitraria" #: ../src/vikwindow.c:3183 msgid "Go to UTM..." msgstr "Ir a UTM..." #: ../src/vikwindow.c:3183 msgid "Go to arbitrary UTM coordinate" msgstr "Ir a una coordenada UTM arbitraria" #: ../src/vikwindow.c:3184 msgid "_Refresh" msgstr "" #: ../src/vikwindow.c:3184 msgid "Refresh any maps displayed" msgstr "" #: ../src/vikwindow.c:3185 msgid "Set _Highlight Color..." msgstr "" #: ../src/vikwindow.c:3186 msgid "Set Bac_kground Color..." msgstr "Poner color de fondo" #: ../src/vikwindow.c:3187 msgid "Zoom _In" msgstr "_Ampliar" #: ../src/vikwindow.c:3188 msgid "Zoom _Out" msgstr "_Reducir" #: ../src/vikwindow.c:3189 msgid "Zoom _To..." msgstr "Acercar/alejar a..." #: ../src/vikwindow.c:3190 msgid "Pan _North" msgstr "Girar hacia el Norte" #: ../src/vikwindow.c:3191 msgid "Pan _East" msgstr "Girar hacia el Este" #: ../src/vikwindow.c:3192 msgid "Pan _South" msgstr "Girar hacia el Sur" #: ../src/vikwindow.c:3193 msgid "Pan _West" msgstr "Girar hacia el Oeste" #: ../src/vikwindow.c:3194 msgid "Background _Jobs" msgstr "_Tareas en segundo plano" #: ../src/vikwindow.c:3196 msgid "Cu_t" msgstr "Cor_tar" #: ../src/vikwindow.c:3197 msgid "_Copy" msgstr "_Copiar" #: ../src/vikwindow.c:3198 msgid "_Paste" msgstr "_Pegar" #: ../src/vikwindow.c:3199 msgid "_Delete" msgstr "_Borrar" #: ../src/vikwindow.c:3200 msgid "Delete All" msgstr "Borrar todo" #: ../src/vikwindow.c:3201 msgid "_Flush Map Cache" msgstr "Vaciar caché de mapas" #: ../src/vikwindow.c:3202 msgid "_Set the Default Location" msgstr "Establecer como localización por defecto" #: ../src/vikwindow.c:3202 msgid "Set the Default Location to the current position" msgstr "Establecer la localización actual como localización por defecto" #: ../src/vikwindow.c:3203 msgid "_Preferences" msgstr "_Preferencias" #: ../src/vikwindow.c:3204 msgid "_Properties" msgstr "P_ropiedades" #: ../src/vikwindow.c:3207 msgid "_About" msgstr "_Acerca de..." #: ../src/vikwindow.c:3213 msgid "_UTM Mode" msgstr "Modo _UTM" #: ../src/vikwindow.c:3214 msgid "_Expedia Mode" msgstr "Modo _Expedia" #: ../src/vikwindow.c:3215 msgid "_Mercator Mode" msgstr "Modo _Mercator" #: ../src/vikwindow.c:3216 msgid "Lat_/Lon Mode" msgstr "Modo de Lat/Lon" #: ../src/vikwindow.c:3220 msgid "Show _Scale" msgstr "Mostrar escala" #: ../src/vikwindow.c:3220 msgid "Show Scale" msgstr "Mostrar escala" #: ../src/vikwindow.c:3221 msgid "Show _Center Mark" msgstr "Mostrar marca de centro" #: ../src/vikwindow.c:3221 msgid "Show Center Mark" msgstr "Mostrar marca central" #: ../src/vikwindow.c:3222 msgid "Show _Highlight" msgstr "" #: ../src/vikwindow.c:3222 msgid "Show Highlight" msgstr "" #: ../src/vikwindow.c:3223 msgid "_Full Screen" msgstr "_Pantalla completa" #: ../src/vikwindow.c:3223 msgid "Activate full screen mode" msgstr "Activando el modo de pantalla completa" #: ../src/vikwindow.c:3224 msgid "Show Side _Panel" msgstr "Mostrar panel lateral" #: ../src/vikwindow.c:3224 msgid "Show Side Panel" msgstr "Muestra el panel lateral" #: ../src/vikwindow.c:3225 msgid "Show Status_bar" msgstr "Mostrar barra de estado" #: ../src/vikwindow.c:3225 msgid "Show Statusbar" msgstr "Mostrar barra de estado" #: ../src/vikwindow.c:3226 msgid "Show _Toolbar" msgstr "Mostrar Barra de _Herramientas" #: ../src/vikwindow.c:3226 msgid "Show Toolbar" msgstr "Mostrar Barra de Herramientas" #: ../src/vikwindow.c:3227 msgid "Show _Menu" msgstr "Mostrar Menú" #: ../src/vikwindow.c:3227 msgid "Show Menu" msgstr "Mostrar Menú" #: ../src/viking.desktop.in.h:2 msgid "GPS Data Manager" msgstr "Administrador de datos GPS" #: ../src/viking.desktop.in.h:3 msgid "Map Based GPS Data Manager (live data capable)." msgstr "" "Mapa basado en el administrador de datos GPS (Capacidad de datos en tiempo " "real)" #: ../src/libjpeg/jpeg-data.c:206 msgid "Data does not follow JPEG specification." msgstr "" #: ../src/libjpeg/jpeg-data.c:291 #, c-format msgid "Path '%s' invalid." msgstr "" #: ../src/libjpeg/jpeg-data.c:309 #, c-format msgid "Could not read '%s'." msgstr "" viking-1.4.2/po/pl.po0000644000175000017500000022716612175546146011350 00000000000000# Polish translation for viking # Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008 # This file is distributed under the same license as the viking package. # FIRST AUTHOR , 2008. # msgid "" msgstr "" "Project-Id-Version: viking\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-02-04 23:29+0100\n" "PO-Revision-Date: 2010-09-07 09:15+0000\n" "Last-Translator: Guilhem Bonnefille \n" "Language-Team: Polish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2;\n" "X-Launchpad-Export-Date: 2013-03-23 17:12+0000\n" "X-Generator: Launchpad (build 16540)\n" #: ../src/acquire.c:103 ../src/vikgpslayer.c:1185 msgid "Done." msgstr "Wykonano." #: ../src/acquire.c:114 msgid "No data." msgstr "Brak danych" #: ../src/acquire.c:154 ../src/acquire.c:404 msgid "Error: acquisition failed." msgstr "" #: ../src/acquire.c:341 msgid "Working..." msgstr "Pracuję..." #. This shouldn't happen... #: ../src/acquire.c:394 msgid "" "Unable to create command\n" "Acquire method failed." msgstr "" #: ../src/acquire.c:486 msgid "_Filter" msgstr "" #: ../src/acquire.c:501 #, c-format msgid "Filter with %s" msgstr "" #: ../src/acquire.c:518 msgid "Filter" msgstr "" #: ../src/background.c:52 #, c-format msgid "%d items" msgstr "%d elementów" #: ../src/background.c:248 msgid "Job" msgstr "Zadanie" #: ../src/background.c:252 msgid "Progress" msgstr "Postęp" #: ../src/background.c:268 msgid "Viking Background Jobs" msgstr "" #: ../src/bing.c:47 msgid "Bing" msgstr "" #. VIK_GTK_WINDOW_FROM_WIDGET(vp) #: ../src/bingmapsource.c:445 msgid "Bing attribution Loading" msgstr "" #: ../src/clipboard.c:95 msgid "paste failed" msgstr "błąd wstawiania" #: ../src/clipboard.c:105 msgid "wrong clipboard data size" msgstr "zły rozmiar danych schowka" #: ../src/clipboard.c:124 #, c-format msgid "" "The clipboard contains sublayer data for %s layers. You must select a layer " "of this type to paste the clipboard data." msgstr "" #: ../src/clipboard.c:236 msgid "" "In order to paste a waypoint, please select an appropriate layer to paste " "into." msgstr "" #: ../src/dialog.c:52 msgid "Go to Lat/Lon" msgstr "Idź do szer/dług" #: ../src/dialog.c:64 ../src/dialog.c:251 msgid "Latitude:" msgstr "Szerokość:" #: ../src/dialog.c:70 ../src/dialog.c:256 msgid "Longitude:" msgstr "Długość:" #: ../src/dialog.c:102 msgid "Go to UTM" msgstr "" #: ../src/dialog.c:115 msgid "Northing:" msgstr "" #: ../src/dialog.c:121 msgid "Easting:" msgstr "" #: ../src/dialog.c:128 msgid "Zone:" msgstr "Strefa:" #: ../src/dialog.c:131 msgid "Letter:" msgstr "Litera:" #: ../src/dialog.c:199 msgid "Waypoint Properties" msgstr "Właściwości punktu orientacyjnego" #: ../src/dialog.c:233 msgid "Name:" msgstr "Nazwa:" #: ../src/dialog.c:261 msgid "Altitude:" msgstr "Wysokość:" #: ../src/dialog.c:266 msgid "Comment:" msgstr "Komentarz:" #: ../src/dialog.c:274 ../src/osm-traces.c:437 msgid "Description:" msgstr "Opis:" #: ../src/dialog.c:277 msgid "Image:" msgstr "Obraz:" #: ../src/dialog.c:282 msgid "Symbol:" msgstr "Symbol:" #: ../src/dialog.c:291 msgid "(none)" msgstr "(brak)" #. TODO: other checks (isalpha or whatever ) #: ../src/dialog.c:356 msgid "Please enter a name for the waypoint." msgstr "Proszę wprowadzić nazwę punktu orientacyjnego." #: ../src/dialog.c:529 ../src/geonamessearch.c:243 #: ../src/datasource_osm_my_traces.c:507 msgid "Nothing was selected" msgstr "Nic nie zaznaczono" #: ../src/dialog.c:537 msgid "Add Route" msgstr "" #: ../src/dialog.c:537 msgid "Add Track" msgstr "Dodaj ścieżkę" #: ../src/dialog.c:545 msgid "Route Name:" msgstr "" #: ../src/dialog.c:545 msgid "Track Name:" msgstr "Nazwa ścieżki:" #: ../src/dialog.c:565 msgid "Please enter a name for the track." msgstr "Poszę podać nazwę dla ścieżki." #: ../src/dialog.c:623 msgid "Zoom Factors..." msgstr "Współczynniki zbliżenia..." #: ../src/dialog.c:637 msgid "Zoom factor (in meters per pixel):" msgstr "" #: ../src/dialog.c:638 msgid "X (easting): " msgstr "" #: ../src/dialog.c:639 msgid "Y (northing): " msgstr "" #: ../src/dialog.c:644 msgid "X and Y zoom factors must be equal" msgstr "" #: ../src/dialog.c:699 msgid "1 min" msgstr "1 min" #: ../src/dialog.c:700 msgid "1 hour" msgstr "1 godzina" #: ../src/dialog.c:701 msgid "1 day" msgstr "1 dzień" #: ../src/dialog.c:702 msgid "Custom (in minutes):" msgstr "" #: ../src/dialog.c:808 msgid "GPS Data and Topo Analyzer, Explorer, and Manager." msgstr "" #: ../src/dialog.c:809 msgid "" "This program is free software; you can redistribute it and/or modify it " "under the terms of the GNU General Public License as published by the Free " "Software Foundation; either version 2 of the License, or (at your option) " "any later version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT " "ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or " "FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for " "more details.\n" "\n" "You should have received a copy of the GNU General Public License along with " "this program; if not, write to the Free Software Foundation, Inc., 59 Temple " "Place, Suite 330, Boston, MA 02111-1307, USA" msgstr "" #: ../src/dialog.c:837 msgid "Translation is coordinated on http://launchpad.net/viking" msgstr "" #: ../src/dialog.c:845 msgid "Download along track" msgstr "" #: ../src/dialog.c:851 msgid "Map type:" msgstr "Typ mapy:" #: ../src/dialog.c:856 msgid "Zoom level:" msgstr "Poziom zbliżenia:" #: ../src/dialog.c:896 #, c-format msgid "The map data is licensed: %s." msgstr "" #: ../src/dialog.c:899 #, c-format msgid "" "The data provided by '%s' are licensed under the following license: " "%s.\n" "Please, read the license before continuing." msgstr "" #: ../src/dialog.c:904 msgid "Open license" msgstr "" #: ../src/expedia.c:53 msgid "Expedia Street Maps" msgstr "" #: ../src/expedia.c:81 msgid "Invalid expedia altitude" msgstr "" #: ../src/expedia.c:112 #, c-format msgid "" "Couldn't open EXPEDIA image file (right after successful download! Please " "report and delete image file!): %s" msgstr "" #: ../src/expedia.c:125 #, c-format msgid "" "Couldn't save EXPEDIA image file (right after successful download! Please " "report and delete image file!): %s" msgstr "" #. * #. * See http://www.geonames.org/export/wikipedia-webservice.html#wikipediaBoundingBox #. #. Translators may wish to change this setting as appropriate to get Wikipedia articles in that language #: ../src/geonamessearch.c:46 msgid "en" msgstr "" #: ../src/geonamessearch.c:121 msgid "Search" msgstr "Szukaj" #: ../src/geonamessearch.c:123 msgid "No entries found!" msgstr "Nie znaleziono wpisów!" #. NB could allow columns to be shifted around by doing this after each new #. gtk_tree_view_column_set_reorderable ( column, TRUE ); #. However I don't think is that useful, so I haven't put it in #: ../src/geonamessearch.c:177 ../src/datasource_osm_my_traces.c:425 msgid "Name" msgstr "" #: ../src/geonamessearch.c:182 msgid "Feature" msgstr "" #: ../src/geonamessearch.c:187 ../src/datasource_osm_my_traces.c:440 msgid "Lat/Lon" msgstr "" #: ../src/geonamessearch.c:269 ../src/googlesearch.c:100 msgid "couldn't map temp file" msgstr "" #: ../src/globals.c:44 msgid "Degree format:" msgstr "Format stopni:" #: ../src/globals.c:48 msgid "Distance units:" msgstr "Jednostki odległości:" #: ../src/globals.c:52 msgid "Speed units:" msgstr "Jednostki prędkości:" #: ../src/globals.c:56 msgid "Height units:" msgstr "Jednostki wysokości:" #: ../src/globals.c:60 msgid "Use large waypoint icons:" msgstr "" #: ../src/globals.c:64 msgid "Default latitude:" msgstr "Domyślna szerokość geograficzna:" #: ../src/globals.c:67 msgid "Default longitude:" msgstr "Domyślna długość geograficzna:" #: ../src/globals.c:73 msgid "Alphabetical" msgstr "" #: ../src/globals.c:73 ../src/datasource_osm_my_traces.c:435 msgid "Time" msgstr "" #: ../src/globals.c:76 msgid "KML File Export Units:" msgstr "" #: ../src/globals.c:77 msgid "GPX Track Order:" msgstr "" #: ../src/globals.c:82 msgid "Image Viewer:" msgstr "" #: ../src/globals.c:87 msgid "External GPX Program 1:" msgstr "" #: ../src/globals.c:88 msgid "External GPX Program 2:" msgstr "" #. Defaults for the options are setup here #: ../src/globals.c:96 msgid "General" msgstr "" #. New Tab #: ../src/globals.c:121 msgid "Export/External" msgstr "" #. Webtools #: ../src/google.c:36 msgid "Google" msgstr "Google" #: ../src/datasource_file.c:59 msgid "Import file with GPSBabel" msgstr "" #: ../src/datasource_file.c:60 msgid "Imported file" msgstr "" #. The file selector #: ../src/datasource_file.c:133 msgid "File:" msgstr "" #: ../src/datasource_file.c:134 msgid "File to import" msgstr "" #: ../src/datasource_file.c:141 msgid "All files" msgstr "" #. The file format selector #: ../src/datasource_file.c:148 msgid "File type:" msgstr "" #: ../src/datasource_file.c:193 #, c-format msgid "using babel args '%s' and file '%s'" msgstr "" #: ../src/datasource_gc.c:66 msgid "Download Geocaches" msgstr "" #: ../src/datasource_gc.c:67 msgid "Geocaching.com Caches" msgstr "" #: ../src/datasource_gc.c:84 msgid "geocaching.com username:" msgstr "Użytkownik geocaching.com:" #: ../src/datasource_gc.c:85 msgid "geocaching.com password:" msgstr "Hasło geocaching.com:" #: ../src/datasource_gc.c:126 #, c-format msgid "" "Can't find %s or %s in path! Check that you have installed it correctly." msgstr "" #: ../src/datasource_gc.c:188 msgid "Number geocaches:" msgstr "" #: ../src/datasource_gc.c:190 msgid "Centered around:" msgstr "" #: ../src/datasource_gc.c:226 msgid "Broken input - using some defaults" msgstr "" #: ../src/datasource_geotag.c:51 msgid "Create Waypoints from Geotagged Images" msgstr "" #: ../src/datasource_geotag.c:52 msgid "Geotagged Images" msgstr "" #: ../src/datasource_geotag.c:102 ../src/vikwindow.c:2314 #: ../src/vikwindow.c:2382 ../src/vikwindow.c:2824 msgid "All" msgstr "" #: ../src/datasource_geotag.c:107 ../src/vikwindow.c:2829 msgid "JPG" msgstr "" #: ../src/datasource_geotag.c:165 #, c-format msgid "Unable to create waypoint from %s" msgstr "" #: ../src/datasource_google.c:49 ../src/datasource_google.c:50 msgid "Google Directions" msgstr "" #: ../src/datasource_google.c:77 msgid "From:" msgstr "Z:" #: ../src/datasource_google.c:79 msgid "To:" msgstr "Do:" #: ../src/datasource_gps.c:57 msgid "Acquire from GPS" msgstr "Pobierz z GPS" #: ../src/datasource_gps.c:58 msgid "Acquired from GPS" msgstr "Pobrano z GPS" #: ../src/datasource_gps.c:221 #, c-format msgid "using cmdline '%s' and file '%s'\n" msgstr "" #: ../src/datasource_gps.c:297 ../src/vikgpslayer.c:884 #, c-format msgid "Downloading %d waypoint..." msgid_plural "Downloading %d waypoints..." msgstr[0] "Pobieranie %d punktu pośredniego..." msgstr[1] "Pobieranie %d punktów pośrednich..." msgstr[2] "Pobieranie %d punktów pośrednich..." #: ../src/datasource_gps.c:298 ../src/vikgpslayer.c:885 #, c-format msgid "Downloading %d trackpoint..." msgid_plural "Downloading %d trackpoints..." msgstr[0] "" msgstr[1] "" #: ../src/datasource_gps.c:303 ../src/vikgpslayer.c:890 #, c-format msgid "Downloading %d routepoint..." msgid_plural "Downloading %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/datasource_gps.c:325 ../src/datasource_gps.c:326 #: ../src/datasource_gps.c:327 #, c-format msgid "Downloaded %d out of %d %s..." msgstr "Pobrano %d z %d %s..." #: ../src/datasource_gps.c:331 ../src/datasource_gps.c:332 #: ../src/datasource_gps.c:333 #, c-format msgid "Downloaded %d %s." msgstr "Pobrano %d %s." #: ../src/datasource_gps.c:347 ../src/vikgpslayer.c:968 #, c-format msgid "GPS Device: %s" msgstr "Urządzenie GPS: %s" #: ../src/datasource_gps.c:370 ../src/vikgpslayer.c:1042 #: ../src/vikgpslayer.c:1110 msgid "Status: Working..." msgstr "" #: ../src/datasource_gps.c:469 ../src/vikgpslayer.c:150 msgid "GPS Protocol:" msgstr "Protokół GPS:" #. List now assigned at runtime #: ../src/datasource_gps.c:488 ../src/vikgpslayer.c:151 msgid "Serial Port:" msgstr "Port szeregowy:" #: ../src/datasource_gps.c:509 msgid "" "Turn Off After Transfer\n" "(Garmin/NAViLink Only)" msgstr "" #: ../src/datasource_gps.c:512 msgid "Tracks:" msgstr "" #: ../src/datasource_gps.c:516 msgid "Routes:" msgstr "" #: ../src/datasource_gps.c:520 msgid "Waypoints:" msgstr "" #: ../src/datasource_gps.c:594 ../src/vikgpslayer.c:1305 msgid "GPS device: N/A" msgstr "Urządzenie GPS: N/A" #: ../src/datasource_osm.c:52 ../src/datasource_osm.c:53 msgid "OSM traces" msgstr "" #: ../src/datasource_osm.c:80 msgid "Page number:" msgstr "" #: ../src/datasource_osm_my_traces.c:63 ../src/datasource_osm_my_traces.c:64 msgid "OSM My Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:108 msgid "Username:" msgstr "" #: ../src/datasource_osm_my_traces.c:113 msgid "The email or username used to login to OSM" msgstr "" #: ../src/datasource_osm_my_traces.c:115 ../src/osm-traces.c:413 msgid "Password:" msgstr "Hasło:" #: ../src/datasource_osm_my_traces.c:120 msgid "The password used to login to OSM" msgstr "" #: ../src/datasource_osm_my_traces.c:430 msgid "Description" msgstr "" #: ../src/datasource_osm_my_traces.c:445 msgid "Privacy" msgstr "" #: ../src/datasource_osm_my_traces.c:452 msgid "Within Current View" msgstr "" #: ../src/datasource_osm_my_traces.c:518 msgid "GPS Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:520 msgid "None found!" msgstr "" #: ../src/datasource_osm_my_traces.c:629 msgid "My OSM Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:645 #, c-format msgid "Unable to get trace: %s" msgstr "" #: ../src/datasource_wikipedia.c:32 msgid "Create Waypoints from Wikipedia Articles" msgstr "" #: ../src/datasource_wikipedia.c:33 msgid "Wikipedia Waypoints" msgstr "" #: ../src/dem.c:65 ../src/dem.c:79 msgid "Invalid DEM" msgstr "Nieprawidłowy DEM" #: ../src/dem.c:121 msgid "Invalid DEM header" msgstr "Nieprawidłowy nagłówek DEM" #: ../src/dem.c:190 ../src/dem.c:203 msgid "Incorrect DEM Class B record: expected 1" msgstr "" #: ../src/dem.c:360 #, c-format msgid "Couldn't map file %s: %s" msgstr "" #: ../src/download.c:112 msgid "Tile age (s):" msgstr "" #: ../src/download.c:233 #, c-format msgid "Download error: %s" msgstr "Błąd pobierania: %s" #: ../src/download.c:313 msgid "couldn't open temp file" msgstr "nie można otworzyć pliku tymczasowego" #: ../src/file.c:456 ../src/file.c:461 #, c-format msgid "Draw mode '%s' no more supported" msgstr "" #: ../src/geotag_exif.c:433 msgid "Not enough memory." msgstr "" #: ../src/geotag_exif.c:451 msgid "Setting a value for this tag is unsupported!" msgstr "" #: ../src/geotag_exif.c:470 #, c-format msgid "Too few components specified (need %d, found %d)\n" msgstr "" #: ../src/geotag_exif.c:474 msgid "Numeric value expected\n" msgstr "" #: ../src/geotag_exif.c:482 msgid "This shouldn't happen!" msgstr "" #: ../src/geotag_exif.c:552 msgid "Not yet implemented!" msgstr "" #: ../src/geotag_exif.c:565 msgid "Warning; Too many components specified!" msgstr "" #: ../src/osm-traces.c:73 msgid "Identifiable (public w/ timestamps)" msgstr "" #: ../src/osm-traces.c:74 msgid "Trackable (private w/ timestamps)" msgstr "" #: ../src/osm-traces.c:75 msgid "Public" msgstr "" #: ../src/osm-traces.c:76 msgid "Private" msgstr "" #: ../src/osm-traces.c:93 msgid "OSM username:" msgstr "Nazwa użytkownika OSM:" #: ../src/osm-traces.c:94 msgid "OSM password:" msgstr "Hasło OSM:" #. Preferences #: ../src/osm-traces.c:151 msgid "OpenStreetMap Traces" msgstr "" #: ../src/osm-traces.c:234 #, c-format msgid "failed to upload data: HTTP response is %ld" msgstr "" #: ../src/osm-traces.c:239 #, c-format msgid "curl_easy_getinfo failed: %d" msgstr "" #: ../src/osm-traces.c:244 #, c-format msgid "curl request failed: %s" msgstr "" #: ../src/osm-traces.c:275 #, c-format msgid "failed to open temporary file: %s" msgstr "błąd otwarcia pliku tymczasowego: %s" #. Success #: ../src/osm-traces.c:328 msgid "Uploaded to OSM" msgstr "" #: ../src/osm-traces.c:332 msgid "FAILED TO UPLOAD DATA TO OSM - CURL PROBLEM" msgstr "" #: ../src/osm-traces.c:335 msgid "FAILED TO UPLOAD DATA TO OSM" msgstr "" #: ../src/osm-traces.c:335 msgid "HTTP response code" msgstr "" #: ../src/osm-traces.c:348 #, c-format msgid "failed to unlink temporary file: %s" msgstr "" #: ../src/osm-traces.c:387 msgid "OSM upload" msgstr "" #: ../src/osm-traces.c:405 msgid "Email:" msgstr "Email:" #: ../src/osm-traces.c:410 msgid "" "The email used as login\n" "Enter the email you use to login into www.openstreetmap.org." msgstr "" #: ../src/osm-traces.c:418 msgid "" "The password used to login\n" "Enter the password you use to login into " "www.openstreetmap.org." msgstr "" #: ../src/osm-traces.c:423 msgid "File's name:" msgstr "Nazwa pliku:" #: ../src/osm-traces.c:433 msgid "" "The name of the file on OSM\n" "This is the name of the file created on the server.This is not the " "name of the local file." msgstr "" #: ../src/osm-traces.c:442 msgid "The description of the trace" msgstr "Opis śladu" #: ../src/osm-traces.c:444 msgid "Tags:" msgstr "Etykiety:" #: ../src/osm-traces.c:449 msgid "The tags associated to the trace" msgstr "Etykiety związane ze śladem" #: ../src/osm-traces.c:482 #, c-format msgid "Uploading %s to OSM" msgstr "" #: ../src/mapcache.c:61 msgid "Map cache memory size (MB):" msgstr "" #: ../src/print.c:53 msgid "None" msgstr "Żaden" #: ../src/print.c:54 msgid "Horizontally" msgstr "Poziomo" #: ../src/print.c:55 msgid "Vertically" msgstr "Pionowo" #: ../src/print.c:56 msgid "Both" msgstr "Obydwa" #: ../src/print.c:120 msgid "Image Settings" msgstr "Ustawienia obrazu" #: ../src/print.c:546 msgid "done" msgstr "wykonano" #. Page Size #: ../src/print.c:575 msgid "_Adjust Page Size and Orientation" msgstr "_Dopasuj rozmiar i orientację strony" #: ../src/print.c:591 msgid "C_enter:" msgstr "" #. ignore page margins #: ../src/print.c:609 msgid "Ignore Page _Margins" msgstr "Ignoruj _marginesy strony" #: ../src/print.c:628 msgid "Image S_ize:" msgstr "_Rozmiar obrazu:" #: ../src/util.c:81 msgid "Could not launch web browser." msgstr "Nie można otworzyć przeglądarki internetowej." #: ../src/util.c:92 msgid "Could not create new email." msgstr "Nie można utworzyć nowej wiadomości." #: ../src/vikcoordlayer.c:46 msgid "Color:" msgstr "Kolor:" #: ../src/vikcoordlayer.c:47 msgid "Minutes Width:" msgstr "" #: ../src/vikcoordlayer.c:48 msgid "Line Thickness:" msgstr "Grubość linii:" #: ../src/vikcoordlayer.c:56 msgid "Coordinate" msgstr "" #: ../src/datasource_bfilter.c:46 msgid "Max number of points:" msgstr "Maksymalna liczba punktów:" #: ../src/datasource_bfilter.c:60 msgid "Simplify All Tracks..." msgstr "" #: ../src/datasource_bfilter.c:61 msgid "Simplified Tracks" msgstr "" #: ../src/datasource_bfilter.c:96 ../src/datasource_bfilter.c:97 msgid "Remove Duplicate Waypoints" msgstr "Usuń powielone punkty orientacyjne" #: ../src/datasource_bfilter.c:129 msgid "Waypoints Inside This" msgstr "" #: ../src/datasource_bfilter.c:130 msgid "Polygonized Layer" msgstr "" #: ../src/datasource_bfilter.c:165 msgid "Waypoints Outside This" msgstr "" #: ../src/datasource_bfilter.c:166 msgid "Polygonzied Layer" msgstr "" #: ../src/main.c:89 #, c-format msgid "Ignoring Xlib error: error code %d request code %d\n" msgstr "" #: ../src/main.c:102 msgid "Enable debug output" msgstr "" #: ../src/main.c:103 msgid "Enable verbose output" msgstr "" #: ../src/main.c:104 msgid "Show version" msgstr "Pokaż wersję" #: ../src/osm.c:106 msgid "On Disk OSM Tile Format" msgstr "" #: ../src/osm.c:121 msgid "OSM (view)" msgstr "OSM (podgląd)" #: ../src/osm.c:125 msgid "OSM (edit)" msgstr "OSM (edycja)" #: ../src/osm.c:129 msgid "OSM (render)" msgstr "" #. Example: http://127.0.0.1:8111/load_and_zoom?left=8.19&right=8.20&top=48.605&bottom=48.590&select=node413602999 #. JOSM or merkaartor must already be running with remote interface enabled #: ../src/osm.c:136 msgid "Local port 8111 (eg JOSM)" msgstr "" #: ../src/preferences.c:285 msgid "Preferences" msgstr "" #: ../src/uibuilder.c:147 msgid "Take care that this password will be stored clearly in a plain file." msgstr "" "Musisz mieć na uwadze, że to hasło będzie przechowywane w czystej formie w " "zwykłym pliku" #: ../src/vikaggregatelayer.c:37 msgid "Aggregate" msgstr "" #: ../src/vikdemlayer.c:101 msgid "Absolute height" msgstr "Wysokość absolutna" #: ../src/vikdemlayer.c:102 msgid "Height gradient" msgstr "" #: ../src/vikdemlayer.c:118 msgid "DEM Files:" msgstr "Pliki DEM:" #: ../src/vikdemlayer.c:119 msgid "Download Source:" msgstr "" #: ../src/vikdemlayer.c:120 msgid "Min Elev Color:" msgstr "" #: ../src/vikdemlayer.c:121 msgid "Type:" msgstr "Typ:" #: ../src/vikdemlayer.c:122 msgid "Min Elev:" msgstr "Min wys:" #: ../src/vikdemlayer.c:123 msgid "Max Elev:" msgstr "Maks wys:" #: ../src/vikdemlayer.c:134 msgid "_DEM Download" msgstr "" #: ../src/vikdemlayer.c:134 msgid "DEM Download" msgstr "" #: ../src/vikdemlayer.c:188 msgid "DEM" msgstr "" #: ../src/vikdemlayer.c:284 #, c-format msgid "Number of files: %d" msgstr "" #: ../src/vikdemlayer.c:385 msgid "DEM Loading" msgstr "" #: ../src/vikdemlayer.c:889 #, c-format msgid "No SRTM data available for %f, %f" msgstr "Brak danych SRTM dla %f, %f" #: ../src/vikdemlayer.c:1149 #, c-format msgid "Downloading DEM %s" msgstr "Pobieranie DEM %s" #: ../src/vikfileentry.c:68 msgid "Browse..." msgstr "Przeglądaj..." #: ../src/vikfileentry.c:96 msgid "Choose file" msgstr "Wskaż plik" #: ../src/vikfilelist.c:48 msgid "Choose file(s)" msgstr "Wskaż plik(i)" #: ../src/vikfilelist.c:172 msgid "Add..." msgstr "Dodaj..." #: ../src/vikfilelist.c:173 msgid "Delete" msgstr "Skasuj" #: ../src/vikgeoreflayer.c:70 msgid "_Georef Move Map" msgstr "" #: ../src/vikgeoreflayer.c:70 msgid "Georef Move Map" msgstr "" #: ../src/vikgeoreflayer.c:77 msgid "Georef Z_oom Tool" msgstr "" #: ../src/vikgeoreflayer.c:77 msgid "Georef Zoom Tool" msgstr "" #: ../src/vikgeoreflayer.c:87 msgid "GeoRef Map" msgstr "" #: ../src/vikgeoreflayer.c:335 ../src/vikmapslayer.c:685 #, c-format msgid "Couldn't open image file: %s" msgstr "Nie można otworzyć pliku obrazu: %s" #: ../src/vikgeoreflayer.c:365 msgid "Unexpected end of file reading World file." msgstr "Nieoczekiwany koniec pliku World" #: ../src/vikgeoreflayer.c:381 ../src/vikgeoreflayer.c:426 msgid "Choose World file" msgstr "Wskaż plik World" #: ../src/vikgeoreflayer.c:394 msgid "The World file you requested could not be opened for reading." msgstr "Plik World, który wskazałeś nie może być otwarty do odczytu." #: ../src/vikgeoreflayer.c:439 msgid "The file you requested could not be opened for writing." msgstr "Plik, który wskazałeś nie może być otwarty do zapisu." #: ../src/vikgeoreflayer.c:456 ../src/viklayer.c:480 msgid "Layer Properties" msgstr "Właściwości warstwy" #: ../src/vikgeoreflayer.c:478 msgid "World File Parameters:" msgstr "Parametry pliku World:" #: ../src/vikgeoreflayer.c:479 msgid "Load From File..." msgstr "Ładuj z pliku..." #: ../src/vikgeoreflayer.c:484 msgid "Corner pixel easting:" msgstr "" #: ../src/vikgeoreflayer.c:486 msgid "the UTM \"easting\" value of the upper-right corner pixel of the map" msgstr "" #: ../src/vikgeoreflayer.c:488 msgid "Corner pixel northing:" msgstr "" #: ../src/vikgeoreflayer.c:490 msgid "the UTM \"northing\" value of the upper-right corner pixel of the map" msgstr "" #: ../src/vikgeoreflayer.c:492 msgid "X (easting) scale (mpp): " msgstr "" #: ../src/vikgeoreflayer.c:493 msgid "Y (northing) scale (mpp): " msgstr "" #: ../src/vikgeoreflayer.c:496 msgid "the scale of the map in the X direction (meters per pixel)" msgstr "" #: ../src/vikgeoreflayer.c:498 msgid "the scale of the map in the Y direction (meters per pixel)" msgstr "" #: ../src/vikgeoreflayer.c:500 msgid "Map Image:" msgstr "" #. Now with icons #: ../src/vikgeoreflayer.c:608 msgid "_Zoom to Fit Map" msgstr "" #: ../src/vikgeoreflayer.c:614 msgid "_Goto Map Center" msgstr "" #: ../src/vikgeoreflayer.c:620 msgid "_Export to World File" msgstr "" #: ../src/vikgoto.c:75 msgid "No goto tool available." msgstr "" #: ../src/vikgoto.c:88 ../src/vikgoto.c:107 msgid "goto" msgstr "" #: ../src/vikgoto.c:90 msgid "I don't know that place. Do you want another goto?" msgstr "" #: ../src/vikgoto.c:109 msgid "goto provider:" msgstr "" #: ../src/vikgoto.c:124 msgid "Enter address or place name:" msgstr "Wprowadź adres lub nazwę miejsca:" #: ../src/vikgpslayer.c:127 msgid "Data Mode" msgstr "" #: ../src/vikgpslayer.c:129 msgid "Realtime Tracking Mode" msgstr "" #: ../src/vikgpslayer.c:137 msgid "Keep vehicle at center" msgstr "" #: ../src/vikgpslayer.c:138 msgid "Keep vehicle on screen" msgstr "" #: ../src/vikgpslayer.c:139 msgid "Disable" msgstr "" #: ../src/vikgpslayer.c:152 msgid "Download Tracks:" msgstr "" #: ../src/vikgpslayer.c:153 msgid "Upload Tracks:" msgstr "" #: ../src/vikgpslayer.c:154 msgid "Download Routes:" msgstr "" #: ../src/vikgpslayer.c:155 msgid "Upload Routes:" msgstr "" #: ../src/vikgpslayer.c:156 msgid "Download Waypoints:" msgstr "" #: ../src/vikgpslayer.c:157 msgid "Upload Waypoints:" msgstr "" #: ../src/vikgpslayer.c:159 msgid "Recording tracks" msgstr "Nagrywanie ścieżek" #: ../src/vikgpslayer.c:160 msgid "Jump to current position on start" msgstr "Skocz do aktualnej pozycji przy starcie" #: ../src/vikgpslayer.c:161 msgid "Moving Map Method:" msgstr "Metoda przesuwania mapy:" #: ../src/vikgpslayer.c:162 msgid "Gpsd Host:" msgstr "" #: ../src/vikgpslayer.c:163 msgid "Gpsd Port:" msgstr "" #: ../src/vikgpslayer.c:164 msgid "Gpsd Retry Interval (seconds):" msgstr "" #: ../src/vikgpslayer.c:179 msgid "GPS" msgstr "" #: ../src/vikgpslayer.c:242 ../src/vikgpslayer.c:1258 msgid "GPS Download" msgstr "" #: ../src/vikgpslayer.c:242 ../src/vikgpslayer.c:1258 #: ../src/viktrwlayer.c:3094 msgid "GPS Upload" msgstr "" #: ../src/vikgpslayer.c:244 msgid "GPS Realtime Tracking" msgstr "" #: ../src/vikgpslayer.c:451 msgid "Unknown GPS Protocol" msgstr "Nieznany protokół GPS" #: ../src/vikgpslayer.c:469 msgid "Unknown serial port device" msgstr "Nieznany port szeregowy urządzenia" #: ../src/vikgpslayer.c:572 #, c-format msgid "%s: unknown parameter" msgstr "%s: nieznany parametr" #. Now with icons #: ../src/vikgpslayer.c:693 msgid "_Upload to GPS" msgstr "" #: ../src/vikgpslayer.c:699 msgid "Download from _GPS" msgstr "" #: ../src/vikgpslayer.c:720 msgid "Empty _Realtime" msgstr "" #: ../src/vikgpslayer.c:727 msgid "E_mpty Upload" msgstr "" #: ../src/vikgpslayer.c:733 msgid "_Empty Download" msgstr "" #: ../src/vikgpslayer.c:739 msgid "Empty _All" msgstr "" #. #. NB It's not fatal if this gives 2 for example! Hence removal of the g_assert #. This happens when copied GPS layer is deleted (not sure why the number_handlers would be 2) #. I don't think there's any side effects and certainly better than the program just aborting #. #: ../src/vikgpslayer.c:756 #, c-format msgid "Unexpected number of disconnected handlers: %d" msgstr "" #: ../src/vikgpslayer.c:898 #, c-format msgid "Uploading %d waypoint..." msgid_plural "Uploading %d waypoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:899 #, c-format msgid "Uploading %d trackpoint..." msgid_plural "Uploading %d trackpoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:900 #, c-format msgid "Uploading %d routepoint..." msgid_plural "Uploading %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:925 #, c-format msgid "Downloaded %d out of %d waypoint..." msgid_plural "Downloaded %d out of %d waypoints..." msgstr[0] "Pobrano %d z %d punktu orientacyjnego..." msgstr[1] "Pobrano %d z %d punktów orientacyjnych..." msgstr[2] "Pobrano %d z %d punktów orientacyjnych..." #: ../src/vikgpslayer.c:926 #, c-format msgid "Downloaded %d out of %d trackpoint..." msgid_plural "Downloaded %d out of %d trackpoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:927 #, c-format msgid "Downloaded %d out of %d routepoint..." msgid_plural "Downloaded %d out of %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:932 #, c-format msgid "Uploaded %d out of %d waypoint..." msgid_plural "Uploaded %d out of %d waypoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:933 #, c-format msgid "Uploaded %d out of %d trackpoint..." msgid_plural "Uploaded %d out of %d trackpoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:934 #, c-format msgid "Uploaded %d out of %d routepoint..." msgid_plural "Uploaded %d out of %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:942 #, c-format msgid "Downloaded %d waypoint" msgid_plural "Downloaded %d waypoints" msgstr[0] "Pobrano %d punkt orientacyjny" msgstr[1] "Pobrano %d punktów orientacyjnych" msgstr[2] "Pobrano %d punktów orientacyjnych" #: ../src/vikgpslayer.c:943 #, c-format msgid "Downloaded %d trackpoint" msgid_plural "Downloaded %d trackpoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:944 #, c-format msgid "Downloaded %d routepoint" msgid_plural "Downloaded %d routepoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:949 #, c-format msgid "Uploaded %d waypoint" msgid_plural "Uploaded %d waypoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:950 #, c-format msgid "Uploaded %d trackpoint" msgid_plural "Uploaded %d trackpoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:951 #, c-format msgid "Uploaded %d routepoint" msgid_plural "Uploaded %d routepoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:1180 msgid "Error: couldn't find gpsbabel." msgstr "" #: ../src/vikgpslayer.c:1269 msgid "Warning - GPS Upload items may overwrite each other" msgstr "" #: ../src/vikgpslayer.c:1301 msgid "Status: detecting gpsbabel" msgstr "" #: ../src/vikgpslayer.c:1332 msgid "No GPS items selected for transfer." msgstr "" #: ../src/vikgpslayer.c:1347 msgid "Could not turn off device." msgstr "" #: ../src/vikgpslayer.c:1385 msgid "Are you sure you want to delete GPS Upload data?" msgstr "" #: ../src/vikgpslayer.c:1398 msgid "Are you sure you want to delete GPS Download data?" msgstr "" #: ../src/vikgpslayer.c:1412 msgid "Are you sure you want to delete GPS Realtime data?" msgstr "" #: ../src/vikgpslayer.c:1425 msgid "Are you sure you want to delete All GPS data?" msgstr "" #: ../src/viklayerspanel.c:55 msgid "/C_ut" msgstr "/Wytnij" #: ../src/viklayerspanel.c:56 msgid "/_Copy" msgstr "/_Kopiuj" #: ../src/viklayerspanel.c:57 msgid "/_Paste" msgstr "/_Wklej" #: ../src/viklayerspanel.c:58 msgid "/_Delete" msgstr "/_Skasuj" #: ../src/viklayerspanel.c:59 msgid "/New Layer" msgstr "/Nowa warstwa" #: ../src/viklayerspanel.c:127 msgid "Top Layer" msgstr "" #: ../src/viklayerspanel.c:143 msgid "Add new layer" msgstr "Dodaj nową wartwę" #: ../src/viklayerspanel.c:150 msgid "Remove selected layer" msgstr "Usuń wybraną warstwę" #: ../src/viklayerspanel.c:157 msgid "Move selected layer up" msgstr "" #: ../src/viklayerspanel.c:164 msgid "Move selected layer down" msgstr "" #: ../src/viklayerspanel.c:171 msgid "Cut selected layer" msgstr "Wytnij zaznaczoną warstwę" #: ../src/viklayerspanel.c:178 msgid "Copy selected layer" msgstr "Kopiuj zaznaczoną warstwę" #: ../src/viklayerspanel.c:185 msgid "Paste layer below selected layer" msgstr "Wstaw warstwę poniżej zaznaczonej warstwy" #. TODO: FIXME: if name has a '/' in it it will get all messed up. why not have an itemfactory field with #. name, icon, shortcut, etc.? #: ../src/viklayerspanel.c:204 ../src/vikwindow.c:3292 #, c-format msgid "New _%s Layer" msgstr "" #: ../src/viklayerspanel.c:511 msgid "Aggregate Layers have no settable properties." msgstr "" #: ../src/viklayerspanel.c:555 msgid "You cannot cut the Top Layer." msgstr "Nie można wyciąć najwyższej warstwy" #: ../src/viklayerspanel.c:600 #, c-format msgid "Are you sure you want to delete %s?" msgstr "" #: ../src/viklayerspanel.c:617 msgid "You cannot delete the Top Layer." msgstr "Nie można usunąćnajwyższej warstwy" #: ../src/viklayerspanel.c:701 msgid "Are you sure you wish to delete all layers?" msgstr "Czy na pewno skasować wszystkie warstwy?" #. ******* MAPZOOMS ******** #: ../src/vikmapslayer.c:91 msgid "Use Viking Zoom Level" msgstr "" #: ../src/vikmapslayer.c:124 msgid "Map Type:" msgstr "Typ mapy:" #: ../src/vikmapslayer.c:125 msgid "Maps Directory:" msgstr "Katalog map:" #: ../src/vikmapslayer.c:126 msgid "Alpha:" msgstr "Alfa:" #: ../src/vikmapslayer.c:127 msgid "Control the Alpha value for transparency effects" msgstr "" #: ../src/vikmapslayer.c:128 msgid "Autodownload maps:" msgstr "" #: ../src/vikmapslayer.c:129 msgid "Autodownload Only Gets Missing Maps:" msgstr "" #: ../src/vikmapslayer.c:130 msgid "" "Using this option avoids attempting to update already acquired tiles. This " "can be useful if you want to restrict the network usage, without having to " "resort to manual control. Only applies when 'Autodownload Maps' is on." msgstr "" #: ../src/vikmapslayer.c:131 msgid "Zoom Level:" msgstr "Poziom zbliżenia:" #: ../src/vikmapslayer.c:132 msgid "" "Determines the method of displaying map tiles for the current zoom level. " "'Viking Zoom Level' uses the best matching level, otherwise setting a fixed " "value will always use map tiles of the specified value regardless of the " "actual zoom level." msgstr "" #: ../src/vikmapslayer.c:146 msgid "_Maps Download" msgstr "" #: ../src/vikmapslayer.c:146 msgid "Maps Download" msgstr "" #: ../src/vikmapslayer.c:161 msgid "Map" msgstr "Mapa" #: ../src/vikmapslayer.c:249 msgid "Default maplayer directory:" msgstr "" #: ../src/vikmapslayer.c:249 msgid "Choose a directory to store cached Map tiles for this layer" msgstr "" #: ../src/vikmapslayer.c:505 msgid "Unknown map type" msgstr "Nieznany typ mapy" #: ../src/vikmapslayer.c:516 msgid "Unknown Map Zoom" msgstr "" #: ../src/vikmapslayer.c:589 #, c-format msgid "" "New map cannot be displayed in the current drawmode.\n" "Select \"%s\" from View menu to view it." msgstr "" #: ../src/vikmapslayer.c:753 #, c-format msgid "" "Cowardly refusing to draw tiles or existence of tiles beyond %d zoom out " "factor" msgstr "" #: ../src/vikmapslayer.c:1157 #, c-format msgid "Redownloading up to %d %s map..." msgid_plural "Redownloading up to %d %s maps..." msgstr[0] "" msgstr[1] "" #: ../src/vikmapslayer.c:1159 #, c-format msgid "Redownloading %d %s map..." msgid_plural "Redownloading %d %s maps..." msgstr[0] "" msgstr[1] "" #: ../src/vikmapslayer.c:1163 ../src/vikmapslayer.c:1238 #, c-format msgid "Downloading %d %s map..." msgid_plural "Downloading %d %s maps..." msgstr[0] "Pobieranie %d %s mapy..." msgstr[1] "Pobieranie %d %s map..." msgstr[2] "Pobieranie %d %s map..." #: ../src/vikmapslayer.c:1311 #, c-format msgid "" "\n" "Source: %s\n" "\n" "Tile File: %s\n" "Tile File Timestamp: %s" msgstr "" #: ../src/vikmapslayer.c:1318 #, c-format msgid "" "Source: %s\n" "\n" "No Tile File!" msgstr "" #: ../src/vikmapslayer.c:1356 msgid "Redownload _Bad Map(s)" msgstr "" #: ../src/vikmapslayer.c:1360 msgid "Redownload _New Map(s)" msgstr "" #: ../src/vikmapslayer.c:1364 msgid "Redownload _All Map(s)" msgstr "" #: ../src/vikmapslayer.c:1368 msgid "_Show Tile Information" msgstr "" #: ../src/vikmapslayer.c:1449 #, c-format msgid "" "Wrong drawmode for this map.\n" "Select \"%s\" from View menu and try again." msgstr "" #: ../src/vikmapslayer.c:1454 msgid "Wrong zoom level for this map." msgstr "" #. Now with icons #: ../src/vikmapslayer.c:1485 msgid "Download _Missing Onscreen Maps" msgstr "" #: ../src/vikmapslayer.c:1492 msgid "Download _New Onscreen Maps" msgstr "" #: ../src/vikmapslayer.c:1499 msgid "Reload _All Onscreen Maps" msgstr "" #: ../src/viktreeview.c:263 msgid "Layer Name" msgstr "Nazwa warstwy" #: ../src/viktreeview.c:742 #, c-format msgid "delete data from %s\n" msgstr "usuń dane z %s\n" #: ../src/viktrwlayer.c:377 msgid "Create _Waypoint" msgstr "" #: ../src/viktrwlayer.c:377 msgid "Create Waypoint" msgstr "Utwórz punkt orientacyjny" #: ../src/viktrwlayer.c:383 msgid "Create _Track" msgstr "" #: ../src/viktrwlayer.c:383 msgid "Create Track" msgstr "Utwórz ścieżkę" #: ../src/viktrwlayer.c:392 msgid "Create _Route" msgstr "" #: ../src/viktrwlayer.c:392 msgid "Create Route" msgstr "" #: ../src/viktrwlayer.c:401 msgid "_Edit Waypoint" msgstr "" #: ../src/viktrwlayer.c:401 msgid "Edit Waypoint" msgstr "Edytuj punkt orientacyjny" #: ../src/viktrwlayer.c:409 msgid "Edit Trac_kpoint" msgstr "" #: ../src/viktrwlayer.c:409 msgid "Edit Trackpoint" msgstr "" #: ../src/viktrwlayer.c:417 msgid "Show P_icture" msgstr "" #: ../src/viktrwlayer.c:417 msgid "Show Picture" msgstr "Pokaż zdjęcie" #: ../src/viktrwlayer.c:424 msgid "Route _Finder" msgstr "" #: ../src/viktrwlayer.c:424 msgid "Route Finder" msgstr "" #. ***** PARAMETERS ***** #: ../src/viktrwlayer.c:447 ../src/viktrwlayer.c:1942 #: ../src/viktrwlayer.c:1944 msgid "Waypoints" msgstr "Punkty orientacyjne" #: ../src/viktrwlayer.c:447 ../src/viktrwlayer.c:1933 #: ../src/viktrwlayer.c:1935 msgid "Tracks" msgstr "Ścieżki" #: ../src/viktrwlayer.c:447 msgid "Waypoint Images" msgstr "" #: ../src/viktrwlayer.c:450 msgid "Draw by Track" msgstr "Rysuj wg ścieżki" #: ../src/viktrwlayer.c:450 msgid "Draw by Speed" msgstr "" #: ../src/viktrwlayer.c:450 msgid "All Tracks Same Color" msgstr "" #: ../src/viktrwlayer.c:451 msgid "Filled Square" msgstr "Kwadrat wypełniony" #: ../src/viktrwlayer.c:451 msgid "Square" msgstr "Kwadrat" #: ../src/viktrwlayer.c:451 msgid "Circle" msgstr "Okrąg" #: ../src/viktrwlayer.c:451 msgid "X" msgstr "X" #: ../src/viktrwlayer.c:477 msgid "Extra Extra Small" msgstr "" #: ../src/viktrwlayer.c:478 msgid "Extra Small" msgstr "" #: ../src/viktrwlayer.c:479 msgid "Small" msgstr "" #: ../src/viktrwlayer.c:480 msgid "Medium" msgstr "" #: ../src/viktrwlayer.c:481 msgid "Large" msgstr "" #: ../src/viktrwlayer.c:482 msgid "Extra Large" msgstr "" #: ../src/viktrwlayer.c:483 msgid "Extra Extra Large" msgstr "" #: ../src/viktrwlayer.c:491 msgid "Track Drawing Mode:" msgstr "Tryb rysowania ścieżki:" #: ../src/viktrwlayer.c:492 msgid "All Tracks Color:" msgstr "" #: ../src/viktrwlayer.c:493 msgid "The color used when 'All Tracks Same Color' drawing mode is selected" msgstr "" #: ../src/viktrwlayer.c:494 msgid "Draw Track Lines" msgstr "Trysuj linie ścieżki" #: ../src/viktrwlayer.c:495 msgid "Track Thickness:" msgstr "Grubość ścieżki:" #: ../src/viktrwlayer.c:496 msgid "Draw Track Direction" msgstr "" #: ../src/viktrwlayer.c:497 msgid "Direction Size:" msgstr "" #: ../src/viktrwlayer.c:498 msgid "Draw Trackpoints" msgstr "" #: ../src/viktrwlayer.c:499 msgid "Trackpoint Size:" msgstr "" #: ../src/viktrwlayer.c:500 msgid "Draw Elevation" msgstr "Rysuj wysokość" #: ../src/viktrwlayer.c:501 msgid "Draw Elevation Height %:" msgstr "" #: ../src/viktrwlayer.c:503 msgid "Draw Stops" msgstr "Rysuj postoje" #: ../src/viktrwlayer.c:504 msgid "" "Whether to draw a marker when trackpoints are at the same position but over " "the minimum stop length apart in time" msgstr "" #: ../src/viktrwlayer.c:505 msgid "Min Stop Length (seconds):" msgstr "Min długość postoju (sekundy):" #: ../src/viktrwlayer.c:507 msgid "Track BG Thickness:" msgstr "" #: ../src/viktrwlayer.c:508 msgid "Track Background Color" msgstr "" #: ../src/viktrwlayer.c:509 msgid "Draw by Speed Factor (%):" msgstr "" #: ../src/viktrwlayer.c:510 msgid "" "The percentage factor away from the average speed determining the color used" msgstr "" #: ../src/viktrwlayer.c:512 msgid "Draw Labels" msgstr "Rysuj etykiety" #: ../src/viktrwlayer.c:513 msgid "Waypoint Font Size:" msgstr "" #: ../src/viktrwlayer.c:514 msgid "Waypoint Color:" msgstr "Kolor punktu orientacyjnego:" #: ../src/viktrwlayer.c:515 msgid "Waypoint Text:" msgstr "Opis punktu orientacyjnego:" #: ../src/viktrwlayer.c:516 msgid "Background:" msgstr "Tło:" #: ../src/viktrwlayer.c:517 msgid "Fake BG Color Translucency:" msgstr "" #: ../src/viktrwlayer.c:518 msgid "Waypoint marker:" msgstr "Znacznik puktu orientacyjnego:" #: ../src/viktrwlayer.c:519 msgid "Waypoint size:" msgstr "Rozmiar punktu orientacyjnego:" #: ../src/viktrwlayer.c:520 msgid "Draw Waypoint Symbols:" msgstr "Rysuj symbole puktów orientacyjnych:" #: ../src/viktrwlayer.c:522 msgid "Draw Waypoint Images" msgstr "" #: ../src/viktrwlayer.c:523 msgid "Image Size (pixels):" msgstr "Rozmiar obrazu (piksele):" #: ../src/viktrwlayer.c:524 msgid "Image Alpha:" msgstr "" #: ../src/viktrwlayer.c:525 msgid "Image Memory Cache Size:" msgstr "Rozmiar pamięci podręcznej obrazu:" #: ../src/viktrwlayer.c:610 msgid "TrackWaypoint" msgstr "" #: ../src/viktrwlayer.c:1951 ../src/viktrwlayer.c:1953 msgid "Routes" msgstr "" #: ../src/viktrwlayer.c:2144 #, c-format msgid " in %d:%02d hrs:mins" msgstr "" #: ../src/viktrwlayer.c:2148 #, c-format msgid "" "\n" "%sTotal Length %.1f %s%s" msgstr "" #: ../src/viktrwlayer.c:2154 #, c-format msgid "Tracks: %d - Waypoints: %d - Routes: %d%s" msgstr "" #: ../src/viktrwlayer.c:2174 #, c-format msgid "Tracks: %d" msgstr "" #: ../src/viktrwlayer.c:2184 #, c-format msgid "Routes: %d" msgstr "" #: ../src/viktrwlayer.c:2215 #, c-format msgid "- %d:%02d hrs:mins" msgstr "" #: ../src/viktrwlayer.c:2223 #, c-format msgid "%s%.1f km %s" msgstr "" #: ../src/viktrwlayer.c:2226 #, c-format msgid "%s%.1f miles %s" msgstr "" #: ../src/viktrwlayer.c:2240 #, c-format msgid "Waypoints: %d" msgstr "" #: ../src/viktrwlayer.c:2266 #, c-format msgid "Trkpt: Alt %dft" msgstr "" #. VIK_UNITS_HEIGHT_METRES: #: ../src/viktrwlayer.c:2270 #, c-format msgid "Trkpt: Alt %dm" msgstr "" #. Compact date time format #: ../src/viktrwlayer.c:2277 #, c-format msgid " | Time %x %X" msgstr "" #: ../src/viktrwlayer.c:2295 #, c-format msgid " | Track: %s" msgstr "" #. Combine parts to make overall message #: ../src/viktrwlayer.c:2299 #, c-format msgid "%s%s | %s %s %s" msgstr "" #: ../src/viktrwlayer.c:2314 #, c-format msgid "Wpt: Alt %dft" msgstr "" #. VIK_UNITS_HEIGHT_METRES: #: ../src/viktrwlayer.c:2318 #, c-format msgid "Wpt: Alt %dm" msgstr "" #. Add comment if available #: ../src/viktrwlayer.c:2333 #, c-format msgid "%s | %s %s | Comment: %s" msgstr "" #: ../src/viktrwlayer.c:2335 #, c-format msgid "%s | %s %s" msgstr "" #: ../src/viktrwlayer.c:2563 ../src/viktrwlayer.c:2634 msgid "This layer has no waypoints or trackpoints." msgstr "" #: ../src/viktrwlayer.c:2661 ../src/vikwindow.c:2407 ../src/vikwindow.c:2848 #, c-format msgid "The file \"%s\" exists, do you wish to overwrite it?" msgstr "Plik %s istnieje, czy nadpisać go?" #: ../src/viktrwlayer.c:2671 ../src/vikwindow.c:2429 msgid "The filename you requested could not be opened for writing." msgstr "Nazwa pliku, którą wskazałeś, nie może być otwarta do zapisu." #: ../src/viktrwlayer.c:2676 ../src/viktrwlayer.c:2681 #: ../src/viktrwlayer.c:2691 ../src/viktrwlayer.c:2703 msgid "Export Layer" msgstr "Eksportuj warstwę" #: ../src/viktrwlayer.c:2720 msgid "Could not create temporary file for export." msgstr "" #: ../src/viktrwlayer.c:2729 #, c-format msgid "Could not launch %s." msgstr "" #: ../src/viktrwlayer.c:2773 msgid "Export Track as GPX" msgstr "" #: ../src/viktrwlayer.c:2795 msgid "Find" msgstr "" #: ../src/viktrwlayer.c:2805 msgid "Waypoint Name:" msgstr "Nazwa punktu orientacyjnego:" #: ../src/viktrwlayer.c:2822 msgid "Waypoint not found in this layer." msgstr "Punkt orientacyjny nie znaleziony w tej warstwie." #: ../src/viktrwlayer.c:3090 msgid "Can not upload invisible track." msgstr "" #: ../src/viktrwlayer.c:3192 ../src/viktrwlayer.c:7785 msgid "Track" msgstr "" #: ../src/viktrwlayer.c:3215 ../src/viktrwlayer.c:7817 msgid "Route" msgstr "" #: ../src/viktrwlayer.c:3296 ../src/viktrwlayer.c:6265 #: ../src/viktrwlayer.c:6314 msgid "_Finish Route" msgstr "" #: ../src/viktrwlayer.c:3298 ../src/viktrwlayer.c:6223 #: ../src/viktrwlayer.c:6312 msgid "_Finish Track" msgstr "" #. Now with icons #: ../src/viktrwlayer.c:3310 msgid "_View Layer" msgstr "" #: ../src/viktrwlayer.c:3317 msgid "V_iew" msgstr "" #: ../src/viktrwlayer.c:3323 msgid "View All _Tracks" msgstr "" #: ../src/viktrwlayer.c:3328 msgid "View All _Routes" msgstr "" #: ../src/viktrwlayer.c:3333 msgid "View All _Waypoints" msgstr "" #: ../src/viktrwlayer.c:3338 msgid "_Goto Center of Layer" msgstr "" #: ../src/viktrwlayer.c:3344 ../src/viktrwlayer.c:6199 msgid "Goto _Waypoint..." msgstr "" #: ../src/viktrwlayer.c:3350 msgid "_Export Layer" msgstr "" #: ../src/viktrwlayer.c:3356 msgid "Export as GPS_Point..." msgstr "" #: ../src/viktrwlayer.c:3361 msgid "Export as GPS_Mapper..." msgstr "" #: ../src/viktrwlayer.c:3366 msgid "Export as _GPX..." msgstr "" #: ../src/viktrwlayer.c:3371 msgid "Export as _KML..." msgstr "" #: ../src/viktrwlayer.c:3376 msgid "Open with External Program_1: " msgstr "" #: ../src/viktrwlayer.c:3383 msgid "Open with External Program_2: " msgstr "" #: ../src/viktrwlayer.c:3391 ../src/vikwindow.c:3145 msgid "_New" msgstr "_Nowy" #: ../src/viktrwlayer.c:3397 msgid "New _Waypoint..." msgstr "" #: ../src/viktrwlayer.c:3403 msgid "New _Track" msgstr "" #: ../src/viktrwlayer.c:3411 msgid "New _Route" msgstr "" #: ../src/viktrwlayer.c:3420 ../src/viktrwlayer.c:6597 msgid "Geotag _Images..." msgstr "" #: ../src/viktrwlayer.c:3427 msgid "_Acquire" msgstr "" #: ../src/viktrwlayer.c:3433 ../src/vikwindow.c:3150 msgid "From _GPS..." msgstr "Z _GPS..." #: ../src/viktrwlayer.c:3439 msgid "From Google _Directions..." msgstr "" #: ../src/viktrwlayer.c:3446 msgid "From _OSM Traces..." msgstr "" #: ../src/viktrwlayer.c:3451 msgid "From _My OSM Traces..." msgstr "" #: ../src/viktrwlayer.c:3459 ../src/vikwindow.c:3166 msgid "From _Wikipedia Waypoints" msgstr "" #: ../src/viktrwlayer.c:3465 msgid "Within _Layer Bounds" msgstr "" #: ../src/viktrwlayer.c:3471 msgid "Within _Current View" msgstr "" #: ../src/viktrwlayer.c:3479 msgid "From Geo_caching..." msgstr "" #: ../src/viktrwlayer.c:3486 ../src/vikwindow.c:3163 msgid "From Geotagged _Images..." msgstr "" #: ../src/viktrwlayer.c:3492 msgid "From _File..." msgstr "" #: ../src/viktrwlayer.c:3498 ../src/viktrwlayer.c:6542 msgid "_Upload" msgstr "" #: ../src/viktrwlayer.c:3504 msgid "Upload to _GPS..." msgstr "" #: ../src/viktrwlayer.c:3511 ../src/viktrwlayer.c:6570 msgid "Upload to _OSM..." msgstr "" #: ../src/viktrwlayer.c:3519 msgid "De_lete" msgstr "" #: ../src/viktrwlayer.c:3525 msgid "Delete All _Tracks" msgstr "" #: ../src/viktrwlayer.c:3531 msgid "Delete Tracks _From Selection..." msgstr "" #: ../src/viktrwlayer.c:3537 ../src/viktrwlayer.c:6290 msgid "Delete _All Routes" msgstr "" #: ../src/viktrwlayer.c:3543 ../src/viktrwlayer.c:6296 msgid "_Delete Routes From Selection..." msgstr "" #: ../src/viktrwlayer.c:3549 msgid "Delete All _Waypoints" msgstr "" #: ../src/viktrwlayer.c:3555 msgid "Delete Waypoints From _Selection..." msgstr "" #: ../src/viktrwlayer.c:4128 #, c-format msgid "Are you sure you want to delete all tracks in %s?" msgstr "" #: ../src/viktrwlayer.c:4138 #, c-format msgid "Are you sure you want to delete all routes in %s?" msgstr "" #: ../src/viktrwlayer.c:4148 #, c-format msgid "Are you sure you want to delete all waypoints in %s?" msgstr "" #: ../src/viktrwlayer.c:4165 #, c-format msgid "Are you sure you want to delete the waypoint \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4178 #, c-format msgid "Are you sure you want to delete the track \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4191 #, c-format msgid "Are you sure you want to delete the route \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4351 ../src/viktrwlayer.c:4922 msgid "" "Converting a track to a route removes extra track data such as segments, " "timestamps, etc...\n" "Do you want to continue?" msgstr "" #: ../src/viktrwlayer.c:4711 msgid "Failed. No other tracks with timestamps in this layer found" msgstr "" #: ../src/viktrwlayer.c:4713 msgid "Failed. No other tracks without timestamps in this layer found" msgstr "" #: ../src/viktrwlayer.c:4732 msgid "Merge with..." msgstr "Łącz z..." #: ../src/viktrwlayer.c:4733 msgid "Select route to merge with" msgstr "" #: ../src/viktrwlayer.c:4733 msgid "Select track to merge with" msgstr "Wybież sieżkę, z którą połączyć" #: ../src/viktrwlayer.c:4818 ../src/viktrwlayer.c:4895 msgid "Append Route" msgstr "" #: ../src/viktrwlayer.c:4818 ../src/viktrwlayer.c:4895 msgid "Append Track" msgstr "" #: ../src/viktrwlayer.c:4819 msgid "Select the route to append after the current route" msgstr "" #: ../src/viktrwlayer.c:4820 msgid "Select the track to append after the current track" msgstr "" #: ../src/viktrwlayer.c:4896 msgid "Select the track to append after the current route" msgstr "" #: ../src/viktrwlayer.c:4897 msgid "Select the route to append after the current track" msgstr "" #: ../src/viktrwlayer.c:4957 #, c-format msgid "%d segment merged" msgid_plural "%d segments merged" msgstr[0] "" msgstr[1] "" #: ../src/viktrwlayer.c:4973 msgid "Failed. This track does not have timestamp" msgstr "Błąd. Ta ścieżka nie ma znacznika czasowego." #: ../src/viktrwlayer.c:4985 msgid "Failed. No other track in this layer has timestamp" msgstr "" #: ../src/viktrwlayer.c:4992 msgid "Merge Threshold..." msgstr "" #: ../src/viktrwlayer.c:4993 msgid "Merge when time between tracks less than:" msgstr "" #: ../src/viktrwlayer.c:5128 msgid "Split Threshold..." msgstr "" #: ../src/viktrwlayer.c:5129 msgid "Split when time between trackpoints exceeds:" msgstr "" #: ../src/viktrwlayer.c:5205 msgid "Split Every Nth Point" msgstr "" #: ../src/viktrwlayer.c:5206 msgid "Split on every Nth point:" msgstr "" #: ../src/viktrwlayer.c:5312 msgid "Can not split track as it has no segments" msgstr "" #: ../src/viktrwlayer.c:5340 ../src/viktrwlayer.c:5370 #, c-format msgid "Deleted %ld point" msgid_plural "Deleted %ld points" msgstr[0] "" msgstr[1] "" #: ../src/viktrwlayer.c:5531 msgid "Internal Error in vik_trw_layer_uniquify_tracks" msgstr "" #: ../src/viktrwlayer.c:5588 ../src/viktrwlayer.c:5635 #: ../src/viktrwlayer.c:5814 msgid "" "Multiple entries with the same name exist. This method only works with " "unique names. Force unique names now?" msgstr "" #: ../src/viktrwlayer.c:5599 msgid "No tracks found" msgstr "" #: ../src/viktrwlayer.c:5607 ../src/viktrwlayer.c:5654 #: ../src/viktrwlayer.c:5834 msgid "Delete Selection" msgstr "" #: ../src/viktrwlayer.c:5608 msgid "Select tracks to delete" msgstr "" #: ../src/viktrwlayer.c:5646 msgid "No routes found" msgstr "" #: ../src/viktrwlayer.c:5655 msgid "Select routes to delete" msgstr "" #: ../src/viktrwlayer.c:5761 msgid "Internal Error in vik_trw_layer_uniquify_waypoints" msgstr "" #: ../src/viktrwlayer.c:5824 msgid "No waypoints found" msgstr "" #: ../src/viktrwlayer.c:5835 msgid "Select waypoints to delete" msgstr "" #: ../src/viktrwlayer.c:5896 #, c-format msgid "" "A waypoint with the name \"%s\" already exists. Really rename to the same " "name?" msgstr "" #: ../src/viktrwlayer.c:5926 #, c-format msgid "" "A track with the name \"%s\" already exists. Really rename to the same name?" msgstr "" #: ../src/viktrwlayer.c:5963 #, c-format msgid "" "A route with the name \"%s\" already exists. Really rename to the same name?" msgstr "" #: ../src/viktrwlayer.c:6085 ../src/viktrwlayer.c:6337 msgid "_Goto" msgstr "" #: ../src/viktrwlayer.c:6104 msgid "_Visit Geocache Webpage" msgstr "" #: ../src/viktrwlayer.c:6123 msgid "_Show Picture..." msgstr "" #: ../src/viktrwlayer.c:6131 msgid "Update Geotag on _Image" msgstr "" #: ../src/viktrwlayer.c:6137 msgid "_Update" msgstr "" #: ../src/viktrwlayer.c:6142 msgid "Update and _Keep File Timestamp" msgstr "" #: ../src/viktrwlayer.c:6153 msgid "Visit _Webpage" msgstr "" #: ../src/viktrwlayer.c:6184 msgid "_New Waypoint..." msgstr "" #: ../src/viktrwlayer.c:6193 msgid "_View All Waypoints" msgstr "" #: ../src/viktrwlayer.c:6205 msgid "Delete _All Waypoints" msgstr "" #: ../src/viktrwlayer.c:6211 msgid "_Delete Waypoints From Selection..." msgstr "" #: ../src/viktrwlayer.c:6233 msgid "_View All Tracks" msgstr "" #: ../src/viktrwlayer.c:6239 msgid "_New Track" msgstr "" #: ../src/viktrwlayer.c:6247 msgid "Delete _All Tracks" msgstr "" #: ../src/viktrwlayer.c:6253 msgid "_Delete Tracks From Selection..." msgstr "" #: ../src/viktrwlayer.c:6276 msgid "_View All Routes" msgstr "" #: ../src/viktrwlayer.c:6282 msgid "_New Route" msgstr "" #: ../src/viktrwlayer.c:6327 msgid "_View Track" msgstr "" #: ../src/viktrwlayer.c:6329 msgid "_View Route" msgstr "" #: ../src/viktrwlayer.c:6343 msgid "_Startpoint" msgstr "" #: ../src/viktrwlayer.c:6349 msgid "\"_Center\"" msgstr "" #: ../src/viktrwlayer.c:6355 msgid "_Endpoint" msgstr "" #: ../src/viktrwlayer.c:6361 msgid "_Highest Altitude" msgstr "" #: ../src/viktrwlayer.c:6367 msgid "_Lowest Altitude" msgstr "" #: ../src/viktrwlayer.c:6375 msgid "_Maximum Speed" msgstr "" #: ../src/viktrwlayer.c:6384 msgid "Co_mbine" msgstr "" #: ../src/viktrwlayer.c:6392 msgid "_Merge By Time..." msgstr "" #: ../src/viktrwlayer.c:6397 msgid "Merge _Segments" msgstr "" #: ../src/viktrwlayer.c:6403 msgid "Merge _With Other Tracks..." msgstr "" #: ../src/viktrwlayer.c:6409 msgid "_Append Track..." msgstr "" #: ../src/viktrwlayer.c:6411 msgid "_Append Route..." msgstr "" #: ../src/viktrwlayer.c:6417 msgid "Append _Route..." msgstr "" #: ../src/viktrwlayer.c:6419 msgid "Append _Track..." msgstr "" #: ../src/viktrwlayer.c:6426 msgid "_Split" msgstr "" #: ../src/viktrwlayer.c:6434 msgid "_Split By Time..." msgstr "" #. ATM always enable this entry - don't want to have to analyse the track before displaying the menu - to keep the menu speedy #: ../src/viktrwlayer.c:6440 msgid "Split Se_gments" msgstr "" #: ../src/viktrwlayer.c:6446 msgid "Split By _Number of Points..." msgstr "" #: ../src/viktrwlayer.c:6451 msgid "Split at _Trackpoint" msgstr "" #: ../src/viktrwlayer.c:6460 msgid "Delete Poi_nts" msgstr "" #: ../src/viktrwlayer.c:6466 msgid "Delete Points With The Same _Position" msgstr "" #: ../src/viktrwlayer.c:6471 msgid "Delete Points With The Same _Time" msgstr "" #: ../src/viktrwlayer.c:6477 msgid "_Reverse Track" msgstr "" #: ../src/viktrwlayer.c:6479 msgid "_Reverse Route" msgstr "" #: ../src/viktrwlayer.c:6488 msgid "Down_load Maps Along Track..." msgstr "" #: ../src/viktrwlayer.c:6490 msgid "Down_load Maps Along Route..." msgstr "" #: ../src/viktrwlayer.c:6497 msgid "_Apply DEM Data" msgstr "" #: ../src/viktrwlayer.c:6504 msgid "_Export Track as GPX..." msgstr "" #: ../src/viktrwlayer.c:6506 msgid "_Export Route as GPX..." msgstr "" #: ../src/viktrwlayer.c:6513 msgid "E_xtend Track End" msgstr "" #: ../src/viktrwlayer.c:6515 msgid "E_xtend Route End" msgstr "" #: ../src/viktrwlayer.c:6522 msgid "C_onvert to a Route" msgstr "" #: ../src/viktrwlayer.c:6524 msgid "C_onvert to a Track" msgstr "" #: ../src/viktrwlayer.c:6532 msgid "Extend _Using Route Finder" msgstr "" #: ../src/viktrwlayer.c:6548 msgid "_Upload to GPS..." msgstr "" #: ../src/viktrwlayer.c:6559 msgid "_View Google Directions" msgstr "" #: ../src/viktrwlayer.c:6579 msgid "Use with _Filter" msgstr "" #: ../src/viktrwlayer.c:6612 msgid "_Edit Trackpoint" msgstr "" #: ../src/viktrwlayer.c:7524 #, c-format msgid " - Gain %dm:Loss %dm" msgstr "" #: ../src/viktrwlayer.c:7526 #, c-format msgid " - Gain %dft:Loss %dft" msgstr "" #: ../src/viktrwlayer.c:7531 #, c-format msgid " - Bearing %3.1f° - Step %s" msgstr "" #: ../src/viktrwlayer.c:8124 #, c-format msgid "Could not launch %s to open file." msgstr "" #: ../src/viktrwlayer.c:8205 #, c-format msgid "Creating %d Image Thumbnails..." msgstr "" #: ../src/viktrwlayer.c:8524 msgid "No map layer in use. Create one first" msgstr "Brak warstw w użyciu. Utwórz najpierw jedną" #: ../src/viktrwlayer_propwin.c:898 ../src/viktrwlayer_propwin.c:1155 #, c-format msgid "%.1f kph" msgstr "" #: ../src/viktrwlayer_propwin.c:901 ../src/viktrwlayer_propwin.c:1158 #, c-format msgid "%.1f mph" msgstr "" #: ../src/viktrwlayer_propwin.c:904 ../src/viktrwlayer_propwin.c:1161 #, c-format msgid "%.1f knots" msgstr "" #. VIK_UNITS_SPEED_METRES_PER_SECOND: #: ../src/viktrwlayer_propwin.c:908 ../src/viktrwlayer_propwin.c:1165 #, c-format msgid "%.1f m/s" msgstr "" #: ../src/viktrwlayer_propwin.c:1745 #, c-format msgid "%.1f miles" msgstr "" #: ../src/viktrwlayer_propwin.c:1747 #, c-format msgid "%.1f km" msgstr "" #: ../src/viktrwlayer_propwin.c:2681 msgid "Failed spliting track. Track unchanged" msgstr "Błąd podziału ścieżki. Ścieżka nie zmieniona" #: ../src/viktrwlayer_propwin.c:2779 ../src/viktrwlayer_propwin.c:3178 #, c-format msgid "%s - Track Properties" msgstr "%s - Właściwości ścieżki" #: ../src/viktrwlayer_propwin.c:2784 msgid "Split at _Marker" msgstr "" #: ../src/viktrwlayer_propwin.c:2785 msgid "Split _Segments" msgstr "" #: ../src/viktrwlayer_propwin.c:2786 msgid "_Reverse" msgstr "" #: ../src/viktrwlayer_propwin.c:2787 msgid "_Delete Dupl." msgstr "" #: ../src/viktrwlayer_propwin.c:2813 msgid "Comment:" msgstr "Komentarz:" #: ../src/viktrwlayer_propwin.c:2814 msgid "Description:" msgstr "" #: ../src/viktrwlayer_propwin.c:2815 msgid "Track Length:" msgstr "Długość ścieżki:" #: ../src/viktrwlayer_propwin.c:2816 msgid "Trackpoints:" msgstr "" #: ../src/viktrwlayer_propwin.c:2817 msgid "Segments:" msgstr "Segmenty:" #: ../src/viktrwlayer_propwin.c:2818 msgid "Duplicate Points:" msgstr "" #: ../src/viktrwlayer_propwin.c:2819 msgid "Max Speed:" msgstr "Maksymalna prędkość:" #: ../src/viktrwlayer_propwin.c:2820 msgid "Avg. Speed:" msgstr "Średnia prędkość:" #: ../src/viktrwlayer_propwin.c:2821 msgid "Moving Avg. Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:2822 msgid "Avg. Dist. Between TPs:" msgstr "" #: ../src/viktrwlayer_propwin.c:2823 msgid "Elevation Range:" msgstr "" #: ../src/viktrwlayer_propwin.c:2824 msgid "Total Elevation Gain/Loss:" msgstr "" #: ../src/viktrwlayer_propwin.c:2825 msgid "Start:" msgstr "Start:" #: ../src/viktrwlayer_propwin.c:2826 msgid "End:" msgstr "Koniec:" #: ../src/viktrwlayer_propwin.c:2827 msgid "Duration:" msgstr "Czas trwania:" #: ../src/viktrwlayer_propwin.c:2828 msgid "Color:" msgstr "" #: ../src/viktrwlayer_propwin.c:2877 ../src/viktrwlayer_propwin.c:2901 #: ../src/viktrwlayer_propwin.c:2929 ../src/viktrwlayer_propwin.c:2966 #: ../src/viktrwlayer_propwin.c:2984 ../src/viktrwlayer_propwin.c:3034 #: ../src/viktrwlayer_propwin.c:3035 ../src/viktrwlayer_propwin.c:3036 #: ../src/viktrwlayer_propwin.c:3062 ../src/viktrwlayer_propwin.c:3063 #: ../src/viktrwlayer_propwin.c:3078 ../src/viktrwlayer_propwin.c:3079 #: ../src/viktrwlayer_propwin.c:3092 ../src/viktrwlayer_propwin.c:3093 #: ../src/viktrwlayer_propwin.c:3106 ../src/viktrwlayer_propwin.c:3107 #: ../src/viktrwlayer_propwin.c:3120 ../src/viktrwlayer_propwin.c:3121 #: ../src/viktrwlayer_propwin.c:3134 ../src/viktrwlayer_propwin.c:3135 #, c-format msgid "No Data" msgstr "Brak danych" #: ../src/viktrwlayer_propwin.c:3031 #, c-format msgid "%d minutes" msgstr "%d minute" #: ../src/viktrwlayer_propwin.c:3058 msgid "Statistics" msgstr "Statystyki" #: ../src/viktrwlayer_propwin.c:3064 msgid "Show D_EM" msgstr "" #: ../src/viktrwlayer_propwin.c:3065 ../src/viktrwlayer_propwin.c:3080 #: ../src/viktrwlayer_propwin.c:3094 ../src/viktrwlayer_propwin.c:3136 msgid "Show _GPS Speed" msgstr "" #: ../src/viktrwlayer_propwin.c:3067 ../src/viktrwlayer_propwin.c:3082 #: ../src/viktrwlayer_propwin.c:3110 ../src/viktrwlayer_propwin.c:3138 msgid "Track Distance:" msgstr "Długość ścieżki:" #: ../src/viktrwlayer_propwin.c:3068 ../src/viktrwlayer_propwin.c:3125 msgid "Track Height:" msgstr "" #: ../src/viktrwlayer_propwin.c:3073 msgid "Elevation-distance" msgstr "Wysokość-odległość" #: ../src/viktrwlayer_propwin.c:3083 msgid "Track Gradient:" msgstr "" #: ../src/viktrwlayer_propwin.c:3087 msgid "Gradient-distance" msgstr "" #: ../src/viktrwlayer_propwin.c:3096 ../src/viktrwlayer_propwin.c:3111 #: ../src/viktrwlayer_propwin.c:3124 msgid "Track Time:" msgstr "Czas ścieżki:" #: ../src/viktrwlayer_propwin.c:3097 ../src/viktrwlayer_propwin.c:3139 msgid "Track Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:3101 msgid "Speed-time" msgstr "Prędkość-czas" #: ../src/viktrwlayer_propwin.c:3108 ../src/viktrwlayer_propwin.c:3122 msgid "Show S_peed" msgstr "" #: ../src/viktrwlayer_propwin.c:3115 msgid "Distance-time" msgstr "" #: ../src/viktrwlayer_propwin.c:3129 msgid "Elevation-time" msgstr "" #: ../src/viktrwlayer_propwin.c:3143 msgid "Speed-distance" msgstr "" #: ../src/viktrwlayer_tpwin.c:118 msgid "Part of Track:" msgstr "Część ścieżki:" #: ../src/viktrwlayer_tpwin.c:119 msgid "Latitude:" msgstr "Szerokość geograficzna:" #: ../src/viktrwlayer_tpwin.c:120 msgid "Longitude:" msgstr "Długość geograficzna:" #: ../src/viktrwlayer_tpwin.c:121 msgid "Altitude:" msgstr "Wysokość:" #: ../src/viktrwlayer_tpwin.c:122 msgid "Timestamp:" msgstr "TZnacznik czasowy:" #: ../src/viktrwlayer_tpwin.c:123 msgid "Time:" msgstr "Czas:" #: ../src/viktrwlayer_tpwin.c:124 msgid "Distance Difference:" msgstr "Różnica odległości:" #: ../src/viktrwlayer_tpwin.c:125 msgid "Time Difference:" msgstr "Różnica czasu:" #: ../src/viktrwlayer_tpwin.c:126 msgid "\"Speed\" Between:" msgstr "\"Prędkość\" pomiędzy:" #: ../src/viktrwlayer_tpwin.c:127 msgid "VDOP:" msgstr "VDOP:" #: ../src/viktrwlayer_tpwin.c:128 msgid "HDOP:" msgstr "HDOP:" #: ../src/viktrwlayer_tpwin.c:129 msgid "PDOP:" msgstr "PDOP:" #: ../src/viktrwlayer_tpwin.c:130 msgid "SAT/FIX:" msgstr "SAT/FIX:" #: ../src/viktrwlayer_tpwin.c:139 msgid "Trackpoint" msgstr "" #: ../src/viktrwlayer_tpwin.c:142 msgid "_Insert After" msgstr "" #: ../src/viktrwlayer_tpwin.c:144 msgid "Split Here" msgstr "Podziel tutaj" #: ../src/viktrwlayer_geotag.c:446 #, c-format msgid "Geotagging %d Images..." msgstr "" #: ../src/viktrwlayer_geotag.c:510 msgid "Geotag Images" msgstr "" #: ../src/viktrwlayer_geotag.c:516 msgid "Images" msgstr "" #: ../src/viktrwlayer_geotag.c:520 msgid "Overwrite Existing Waypoints:" msgstr "" #: ../src/viktrwlayer_geotag.c:523 msgid "Overwrite Existing GPS Information:" msgstr "" #: ../src/viktrwlayer_geotag.c:525 msgid "Keep File Modification Timestamp:" msgstr "" #: ../src/viktrwlayer_geotag.c:555 msgid "Create Waypoints:" msgstr "" #: ../src/viktrwlayer_geotag.c:563 msgid "Write EXIF:" msgstr "" #: ../src/viktrwlayer_geotag.c:575 msgid "Interpolate Between Track Segments:" msgstr "" #: ../src/viktrwlayer_geotag.c:579 msgid "Image Time Offset (Seconds):" msgstr "" #: ../src/viktrwlayer_geotag.c:581 msgid "" "The number of seconds to ADD to the photos time to make it match the GPS " "data. Calculate this with (GPS - Photo). Can be negative or positive. Useful " "to adjust times when a camera's timestamp was incorrect." msgstr "" #: ../src/viktrwlayer_geotag.c:584 msgid "Image Timezone:" msgstr "" #: ../src/viktrwlayer_geotag.c:586 msgid "" "The timezone that was used when the images were created. For example, if a " "camera is set to AWST or +8:00 hours. Enter +8:00 here so that the correct " "adjustment to the images' time can be made. GPS data is always in UTC." msgstr "" #: ../src/viktrwlayer_geotag.c:590 #, c-format msgid "Using track: %s" msgstr "" #: ../src/viktrwlayer_geotag.c:592 #, c-format msgid "Using all tracks in: %s" msgstr "" #: ../src/vikstatus.c:105 msgid "Current zoom level. Click to select a new one." msgstr "" #: ../src/vikwaypoint.c:34 msgid "Waypoint" msgstr "" #. TODO get rid of this as this is unnecessary duplication... #: ../src/vikwindow.c:221 msgid "Pan" msgstr "" #: ../src/vikwindow.c:221 msgid "Zoom" msgstr "Zbliżenie" #: ../src/vikwindow.c:221 msgid "Ruler" msgstr "Linijka" #: ../src/vikwindow.c:221 msgid "Select" msgstr "" #. Create tooltip #: ../src/vikwindow.c:440 msgid "Select zoom level" msgstr "" #: ../src/vikwindow.c:645 #, c-format msgid "" "Do you want to save the changes you made to the document \"%s\"?\n" "\n" "Your changes will be lost if you don't save them." msgstr "" "Czy chcesz zapisać zmiany do dokumentu \"%s\"?\n" "\n" "Jeśi nie zapiszesz zmian, zostaną utracone." #: ../src/vikwindow.c:649 msgid "Don't Save" msgstr "Nie zapisuj" #: ../src/vikwindow.c:696 msgid "mpp" msgstr "" #: ../src/vikwindow.c:696 msgid "pixelfact" msgstr "" #: ../src/vikwindow.c:861 #, c-format msgid "%s %s %dm" msgstr "%s %s %dm" #: ../src/vikwindow.c:863 #, c-format msgid "%s %s %dft" msgstr "" #: ../src/vikwindow.c:866 #, c-format msgid "%s %s" msgstr "%s %s" #. NB Ctrl+Shift+R is used for Refresh (deemed more important), so use 'U' instead #: ../src/vikwindow.c:1254 msgid "_Ruler" msgstr "_Linijka" #: ../src/vikwindow.c:1254 msgid "Ruler Tool" msgstr "Narzędzie linijki" #: ../src/vikwindow.c:1502 ../src/vikwindow.c:3138 msgid "_Zoom" msgstr "_Zbliżenie" #: ../src/vikwindow.c:1502 msgid "Zoom Tool" msgstr "Narzędzie zbliżania" #: ../src/vikwindow.c:1547 ../src/vikwindow.c:3139 msgid "_Pan" msgstr "" #: ../src/vikwindow.c:1547 msgid "Pan Tool" msgstr "" #: ../src/vikwindow.c:1664 msgid "_Select" msgstr "" #: ../src/vikwindow.c:1664 msgid "Select Tool" msgstr "" #: ../src/vikwindow.c:1809 msgid "You must select a layer to show its properties." msgstr "Musisz zaznaczyć warstwę, aby pokazać jej właściwości." #. No error to show, so unlikely this will get called #: ../src/vikwindow.c:1824 msgid "The help system is not available." msgstr "" #. Main error path #: ../src/vikwindow.c:1827 #, c-format msgid "" "Help is not available because: %s.\n" "Ensure a Mime Type ghelp handler program is installed (e.g. yelp)." msgstr "" #: ../src/vikwindow.c:1850 msgid "You must select a layer to delete." msgstr "Musisz zaznaczyć warstwę do skasowania." #: ../src/vikwindow.c:2087 msgid "Untitled" msgstr "Bez nazwy" #: ../src/vikwindow.c:2194 #, c-format msgid "Unable to add '%s' to the list of recently used documents" msgstr "" #: ../src/vikwindow.c:2208 msgid "The file you requested could not be opened." msgstr "Nie można otworzyć żądanego pliku." #: ../src/vikwindow.c:2211 msgid "" "GPSBabel is required to load files of this type or GPSBabel encountered " "problems." msgstr "" #: ../src/vikwindow.c:2214 #, c-format msgid "Unable to load malformed GPX file %s" msgstr "" #: ../src/vikwindow.c:2217 #, c-format msgid "Unsupported file type for %s" msgstr "" #. Since we can process .vik files with issues just show a warning in the status bar #. Not that a user can do much about it... or tells them what this issue is yet... #: ../src/vikwindow.c:2223 #, c-format msgid "WARNING: issues encountered loading %s" msgstr "" #: ../src/vikwindow.c:2278 msgid "Please select a GPS data file to open. " msgstr "Proszę wybrać plik danych GPS do otwarcia. " #: ../src/vikwindow.c:2288 msgid "Geocaching" msgstr "" #: ../src/vikwindow.c:2294 msgid "Google Earth" msgstr "" #: ../src/vikwindow.c:2299 msgid "GPX" msgstr "" #: ../src/vikwindow.c:2304 ../src/vikwindow.c:2387 #: ../src/viking.desktop.in.h:1 msgid "Viking" msgstr "Viking" #: ../src/vikwindow.c:2374 msgid "Save as Viking File." msgstr "Zapisz jako plik Viking." #. Try harder... #: ../src/vikwindow.c:2619 ../src/vikwindow.c:2625 msgid "Generating image file..." msgstr "" #: ../src/vikwindow.c:2647 msgid "" "Failed to generate internal image.\n" "\n" "Try creating a smaller image." msgstr "" #: ../src/vikwindow.c:2655 msgid "Failed to generate image file." msgstr "" #. Success #: ../src/vikwindow.c:2660 msgid "Image file generated." msgstr "" #: ../src/vikwindow.c:2764 msgid "" "Viewable region outside allowable pixel size bounds for image. Clipping " "width/height values." msgstr "" #: ../src/vikwindow.c:2789 #, c-format msgid "Total area: %ldm x %ldm (%.3f sq. km)" msgstr "Obszar całkowity: %ldm x %ldm (%.3f km kw.)" #: ../src/vikwindow.c:2792 #, c-format msgid "Total area: %ldm x %ldm (%.3f sq. miles)" msgstr "" #: ../src/vikwindow.c:2813 msgid "Save Image" msgstr "Zapisz obraz" #: ../src/vikwindow.c:2834 msgid "PNG" msgstr "" #: ../src/vikwindow.c:2857 msgid "You must be in UTM mode to use this feature" msgstr "" #: ../src/vikwindow.c:2862 msgid "Choose a directory to hold images" msgstr "Wskaż katalog dla przechowywania obrazów" #. todo: default for answers inside VikWindow or static (thruout instance) #: ../src/vikwindow.c:2883 msgid "Save to Image File" msgstr "" #: ../src/vikwindow.c:2900 msgid "Width (pixels):" msgstr "Szerokość (piksele):" #: ../src/vikwindow.c:2902 msgid "Height (pixels):" msgstr "Wysokość (piksele):" #: ../src/vikwindow.c:2905 msgid "" "WARNING: USING LARGE IMAGES OVER 10000x10000\n" "MAY CRASH THE PROGRAM!" msgstr "" #: ../src/vikwindow.c:2907 msgid "Zoom (meters per pixel):" msgstr "" #: ../src/vikwindow.c:2921 msgid "Area in current viewable window" msgstr "" #: ../src/vikwindow.c:2931 msgid "Save as PNG" msgstr "Zapisz jako PNG" #: ../src/vikwindow.c:2932 msgid "Save as JPEG" msgstr "Zapisz jako JPEG" #: ../src/vikwindow.c:2954 msgid "East-west image tiles:" msgstr "" #: ../src/vikwindow.c:2956 msgid "North-south image tiles:" msgstr "" #: ../src/vikwindow.c:3097 msgid "Choose a background color" msgstr "Wskaż kolor tła" #: ../src/vikwindow.c:3113 msgid "Choose a track highlight color" msgstr "" #: ../src/vikwindow.c:3134 msgid "_File" msgstr "_Plik" #: ../src/vikwindow.c:3135 msgid "_Edit" msgstr "_Edycja" #: ../src/vikwindow.c:3136 msgid "_View" msgstr "_Podgląd" #: ../src/vikwindow.c:3137 msgid "_Show" msgstr "" #: ../src/vikwindow.c:3140 msgid "_Layers" msgstr "_Warstwy" #: ../src/vikwindow.c:3141 msgid "_Tools" msgstr "_Narzędzia" #: ../src/vikwindow.c:3142 msgid "_Webtools" msgstr "" #: ../src/vikwindow.c:3143 ../src/vikwindow.c:3206 msgid "_Help" msgstr "_Pomoc" #: ../src/vikwindow.c:3145 msgid "New file" msgstr "Nowy plik" #: ../src/vikwindow.c:3146 msgid "_Open..." msgstr "_Otwórz..." #: ../src/vikwindow.c:3146 msgid "Open a file" msgstr "Otwórz plik" #: ../src/vikwindow.c:3147 msgid "Open _Recent File" msgstr "Otwórz ostatnio _używany plik" #: ../src/vikwindow.c:3148 msgid "Append _File..." msgstr "Dołącz _plik..." #: ../src/vikwindow.c:3148 msgid "Append data from a different file" msgstr "Dołącz dane z innego pliku" #: ../src/vikwindow.c:3149 msgid "A_cquire" msgstr "" #: ../src/vikwindow.c:3150 msgid "Transfer data from a GPS device" msgstr "Transferuj dane z urządzenia GPS" #: ../src/vikwindow.c:3151 msgid "Import File With GPS_Babel..." msgstr "" #: ../src/vikwindow.c:3151 msgid "Import file via GPSBabel converter" msgstr "" #: ../src/vikwindow.c:3153 msgid "Google _Directions..." msgstr "" #: ../src/vikwindow.c:3153 msgid "Get driving directions from Google" msgstr "" #: ../src/vikwindow.c:3156 msgid "_OSM Traces..." msgstr "" #: ../src/vikwindow.c:3156 msgid "Get traces from OpenStreetMap" msgstr "" #: ../src/vikwindow.c:3157 msgid "_My OSM Traces..." msgstr "" #: ../src/vikwindow.c:3157 msgid "Get Your Own Traces from OpenStreetMap" msgstr "" #: ../src/vikwindow.c:3160 msgid "Geo_caches..." msgstr "" #: ../src/vikwindow.c:3160 msgid "Get Geocaches from geocaching.com" msgstr "" #: ../src/vikwindow.c:3163 msgid "Create waypoints from geotagged images" msgstr "" #: ../src/vikwindow.c:3166 msgid "Create waypoints from Wikipedia items in the current view" msgstr "" #: ../src/vikwindow.c:3168 msgid "_Save" msgstr "_Zapisz" #: ../src/vikwindow.c:3168 msgid "Save the file" msgstr "Zapisz plik" #: ../src/vikwindow.c:3169 msgid "Save _As..." msgstr "Zapisz _jako..." #: ../src/vikwindow.c:3169 msgid "Save the file under different name" msgstr "Zapisz plik pod inną nazwą" #: ../src/vikwindow.c:3170 msgid "_Generate Image File..." msgstr "" #: ../src/vikwindow.c:3170 msgid "Save a snapshot of the workspace into a file" msgstr "" #: ../src/vikwindow.c:3171 msgid "Generate _Directory of Images..." msgstr "Generuj _katalog ze zdjęciami..." #: ../src/vikwindow.c:3171 msgid "FIXME:IMGDIR" msgstr "FIXME:IMGDIR" #: ../src/vikwindow.c:3174 msgid "_Print..." msgstr "_Drukuj..." #: ../src/vikwindow.c:3174 msgid "Print maps" msgstr "Drukuj mapy" #: ../src/vikwindow.c:3177 msgid "E_xit" msgstr "_Wyjdź" #: ../src/vikwindow.c:3177 msgid "Exit the program" msgstr "Wyjdź z programu" #: ../src/vikwindow.c:3178 msgid "Save and Exit" msgstr "Zapisz i wyjdź" #: ../src/vikwindow.c:3178 msgid "Save and Exit the program" msgstr "Zapisz i wyjdź z programu" #: ../src/vikwindow.c:3180 msgid "Go to the _Default Location" msgstr "" #: ../src/vikwindow.c:3180 msgid "Go to the default location" msgstr "Idź do domyślnego położenia" #: ../src/vikwindow.c:3181 msgid "Go to _Location..." msgstr "" #: ../src/vikwindow.c:3181 msgid "Go to address/place using text search" msgstr "Idź do adresu/miejsca używając wyszukiwarki" #: ../src/vikwindow.c:3182 msgid "_Go to Lat/Lon..." msgstr "_Idź do szer/dług..." #: ../src/vikwindow.c:3182 msgid "Go to arbitrary lat/lon coordinate" msgstr "" #: ../src/vikwindow.c:3183 msgid "Go to UTM..." msgstr "Idź do UTM..." #: ../src/vikwindow.c:3183 msgid "Go to arbitrary UTM coordinate" msgstr "" #: ../src/vikwindow.c:3184 msgid "_Refresh" msgstr "" #: ../src/vikwindow.c:3184 msgid "Refresh any maps displayed" msgstr "" #: ../src/vikwindow.c:3185 msgid "Set _Highlight Color..." msgstr "" #: ../src/vikwindow.c:3186 msgid "Set Bac_kground Color..." msgstr "" #: ../src/vikwindow.c:3187 msgid "Zoom _In" msgstr "Zbl_iż" #: ../src/vikwindow.c:3188 msgid "Zoom _Out" msgstr "_Oddal" #: ../src/vikwindow.c:3189 msgid "Zoom _To..." msgstr "" #: ../src/vikwindow.c:3190 msgid "Pan _North" msgstr "" #: ../src/vikwindow.c:3191 msgid "Pan _East" msgstr "" #: ../src/vikwindow.c:3192 msgid "Pan _South" msgstr "" #: ../src/vikwindow.c:3193 msgid "Pan _West" msgstr "" #: ../src/vikwindow.c:3194 msgid "Background _Jobs" msgstr "" #: ../src/vikwindow.c:3196 msgid "Cu_t" msgstr "W_ytnij" #: ../src/vikwindow.c:3197 msgid "_Copy" msgstr "_Kopiuj" #: ../src/vikwindow.c:3198 msgid "_Paste" msgstr "_Wstaw" #: ../src/vikwindow.c:3199 msgid "_Delete" msgstr "_Skasuj" #: ../src/vikwindow.c:3200 msgid "Delete All" msgstr "Skasuj wszystko" #: ../src/vikwindow.c:3201 msgid "_Flush Map Cache" msgstr "" #: ../src/vikwindow.c:3202 msgid "_Set the Default Location" msgstr "" #: ../src/vikwindow.c:3202 msgid "Set the Default Location to the current position" msgstr "" #: ../src/vikwindow.c:3203 msgid "_Preferences" msgstr "_Preferencje" #: ../src/vikwindow.c:3204 msgid "_Properties" msgstr "_Właściwości" #: ../src/vikwindow.c:3207 msgid "_About" msgstr "_O programie" #: ../src/vikwindow.c:3213 msgid "_UTM Mode" msgstr "Tryb _UTM" #: ../src/vikwindow.c:3214 msgid "_Expedia Mode" msgstr "" #: ../src/vikwindow.c:3215 msgid "_Mercator Mode" msgstr "" #: ../src/vikwindow.c:3216 msgid "Lat_/Lon Mode" msgstr "" #: ../src/vikwindow.c:3220 msgid "Show _Scale" msgstr "" #: ../src/vikwindow.c:3220 msgid "Show Scale" msgstr "Pokaż skalę" #: ../src/vikwindow.c:3221 msgid "Show _Center Mark" msgstr "" #: ../src/vikwindow.c:3221 msgid "Show Center Mark" msgstr "" #: ../src/vikwindow.c:3222 msgid "Show _Highlight" msgstr "" #: ../src/vikwindow.c:3222 msgid "Show Highlight" msgstr "" #: ../src/vikwindow.c:3223 msgid "_Full Screen" msgstr "_Pełny ekran" #: ../src/vikwindow.c:3223 msgid "Activate full screen mode" msgstr "Aktywuj tryb pełnego ekranu" #: ../src/vikwindow.c:3224 msgid "Show Side _Panel" msgstr "" #: ../src/vikwindow.c:3224 msgid "Show Side Panel" msgstr "Pokaż panel boczny" #: ../src/vikwindow.c:3225 msgid "Show Status_bar" msgstr "" #: ../src/vikwindow.c:3225 msgid "Show Statusbar" msgstr "" #: ../src/vikwindow.c:3226 msgid "Show _Toolbar" msgstr "" #: ../src/vikwindow.c:3226 msgid "Show Toolbar" msgstr "" #: ../src/vikwindow.c:3227 msgid "Show _Menu" msgstr "" #: ../src/vikwindow.c:3227 msgid "Show Menu" msgstr "" #: ../src/viking.desktop.in.h:2 msgid "GPS Data Manager" msgstr "Menedżer danych GPS" #: ../src/viking.desktop.in.h:3 msgid "Map Based GPS Data Manager (live data capable)." msgstr "" #: ../src/libjpeg/jpeg-data.c:206 msgid "Data does not follow JPEG specification." msgstr "" #: ../src/libjpeg/jpeg-data.c:291 #, c-format msgid "Path '%s' invalid." msgstr "" #: ../src/libjpeg/jpeg-data.c:309 #, c-format msgid "Could not read '%s'." msgstr "" viking-1.4.2/po/uk.po0000644000175000017500000021374012175546146011345 00000000000000# Ukrainian translation for viking # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the viking package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: viking\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-02-04 23:29+0100\n" "PO-Revision-Date: 2010-08-21 15:47+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Ukrainian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Launchpad-Export-Date: 2013-03-23 17:12+0000\n" "X-Generator: Launchpad (build 16540)\n" "Language: uk\n" #: ../src/acquire.c:103 ../src/vikgpslayer.c:1185 msgid "Done." msgstr "" #: ../src/acquire.c:114 msgid "No data." msgstr "" #: ../src/acquire.c:154 ../src/acquire.c:404 msgid "Error: acquisition failed." msgstr "" #: ../src/acquire.c:341 msgid "Working..." msgstr "" #. This shouldn't happen... #: ../src/acquire.c:394 msgid "" "Unable to create command\n" "Acquire method failed." msgstr "" #: ../src/acquire.c:486 msgid "_Filter" msgstr "" #: ../src/acquire.c:501 #, c-format msgid "Filter with %s" msgstr "" #: ../src/acquire.c:518 msgid "Filter" msgstr "" #: ../src/background.c:52 #, c-format msgid "%d items" msgstr "" #: ../src/background.c:248 msgid "Job" msgstr "" #: ../src/background.c:252 msgid "Progress" msgstr "" #: ../src/background.c:268 msgid "Viking Background Jobs" msgstr "" #: ../src/bing.c:47 msgid "Bing" msgstr "" #. VIK_GTK_WINDOW_FROM_WIDGET(vp) #: ../src/bingmapsource.c:445 msgid "Bing attribution Loading" msgstr "" #: ../src/clipboard.c:95 msgid "paste failed" msgstr "" #: ../src/clipboard.c:105 msgid "wrong clipboard data size" msgstr "" #: ../src/clipboard.c:124 #, c-format msgid "" "The clipboard contains sublayer data for %s layers. You must select a layer " "of this type to paste the clipboard data." msgstr "" #: ../src/clipboard.c:236 msgid "" "In order to paste a waypoint, please select an appropriate layer to paste " "into." msgstr "" #: ../src/dialog.c:52 msgid "Go to Lat/Lon" msgstr "" #: ../src/dialog.c:64 ../src/dialog.c:251 msgid "Latitude:" msgstr "" #: ../src/dialog.c:70 ../src/dialog.c:256 msgid "Longitude:" msgstr "" #: ../src/dialog.c:102 msgid "Go to UTM" msgstr "" #: ../src/dialog.c:115 msgid "Northing:" msgstr "" #: ../src/dialog.c:121 msgid "Easting:" msgstr "" #: ../src/dialog.c:128 msgid "Zone:" msgstr "" #: ../src/dialog.c:131 msgid "Letter:" msgstr "" #: ../src/dialog.c:199 msgid "Waypoint Properties" msgstr "" #: ../src/dialog.c:233 msgid "Name:" msgstr "" #: ../src/dialog.c:261 msgid "Altitude:" msgstr "" #: ../src/dialog.c:266 msgid "Comment:" msgstr "" #: ../src/dialog.c:274 ../src/osm-traces.c:437 msgid "Description:" msgstr "" #: ../src/dialog.c:277 msgid "Image:" msgstr "" #: ../src/dialog.c:282 msgid "Symbol:" msgstr "" #: ../src/dialog.c:291 msgid "(none)" msgstr "" #. TODO: other checks (isalpha or whatever ) #: ../src/dialog.c:356 msgid "Please enter a name for the waypoint." msgstr "" #: ../src/dialog.c:529 ../src/geonamessearch.c:243 #: ../src/datasource_osm_my_traces.c:507 msgid "Nothing was selected" msgstr "" #: ../src/dialog.c:537 msgid "Add Route" msgstr "" #: ../src/dialog.c:537 msgid "Add Track" msgstr "" #: ../src/dialog.c:545 msgid "Route Name:" msgstr "" #: ../src/dialog.c:545 msgid "Track Name:" msgstr "" #: ../src/dialog.c:565 msgid "Please enter a name for the track." msgstr "" #: ../src/dialog.c:623 msgid "Zoom Factors..." msgstr "" #: ../src/dialog.c:637 msgid "Zoom factor (in meters per pixel):" msgstr "" #: ../src/dialog.c:638 msgid "X (easting): " msgstr "" #: ../src/dialog.c:639 msgid "Y (northing): " msgstr "" #: ../src/dialog.c:644 msgid "X and Y zoom factors must be equal" msgstr "" #: ../src/dialog.c:699 msgid "1 min" msgstr "" #: ../src/dialog.c:700 msgid "1 hour" msgstr "" #: ../src/dialog.c:701 msgid "1 day" msgstr "" #: ../src/dialog.c:702 msgid "Custom (in minutes):" msgstr "" #: ../src/dialog.c:808 msgid "GPS Data and Topo Analyzer, Explorer, and Manager." msgstr "" #: ../src/dialog.c:809 msgid "" "This program is free software; you can redistribute it and/or modify it " "under the terms of the GNU General Public License as published by the Free " "Software Foundation; either version 2 of the License, or (at your option) " "any later version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT " "ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or " "FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for " "more details.\n" "\n" "You should have received a copy of the GNU General Public License along with " "this program; if not, write to the Free Software Foundation, Inc., 59 Temple " "Place, Suite 330, Boston, MA 02111-1307, USA" msgstr "" #: ../src/dialog.c:837 msgid "Translation is coordinated on http://launchpad.net/viking" msgstr "" #: ../src/dialog.c:845 msgid "Download along track" msgstr "" #: ../src/dialog.c:851 msgid "Map type:" msgstr "" #: ../src/dialog.c:856 msgid "Zoom level:" msgstr "" #: ../src/dialog.c:896 #, c-format msgid "The map data is licensed: %s." msgstr "" #: ../src/dialog.c:899 #, c-format msgid "" "The data provided by '%s' are licensed under the following license: " "%s.\n" "Please, read the license before continuing." msgstr "" #: ../src/dialog.c:904 msgid "Open license" msgstr "" #: ../src/expedia.c:53 msgid "Expedia Street Maps" msgstr "" #: ../src/expedia.c:81 msgid "Invalid expedia altitude" msgstr "" #: ../src/expedia.c:112 #, c-format msgid "" "Couldn't open EXPEDIA image file (right after successful download! Please " "report and delete image file!): %s" msgstr "" #: ../src/expedia.c:125 #, c-format msgid "" "Couldn't save EXPEDIA image file (right after successful download! Please " "report and delete image file!): %s" msgstr "" #. * #. * See http://www.geonames.org/export/wikipedia-webservice.html#wikipediaBoundingBox #. #. Translators may wish to change this setting as appropriate to get Wikipedia articles in that language #: ../src/geonamessearch.c:46 msgid "en" msgstr "" #: ../src/geonamessearch.c:121 msgid "Search" msgstr "" #: ../src/geonamessearch.c:123 msgid "No entries found!" msgstr "" #. NB could allow columns to be shifted around by doing this after each new #. gtk_tree_view_column_set_reorderable ( column, TRUE ); #. However I don't think is that useful, so I haven't put it in #: ../src/geonamessearch.c:177 ../src/datasource_osm_my_traces.c:425 msgid "Name" msgstr "" #: ../src/geonamessearch.c:182 msgid "Feature" msgstr "" #: ../src/geonamessearch.c:187 ../src/datasource_osm_my_traces.c:440 msgid "Lat/Lon" msgstr "" #: ../src/geonamessearch.c:269 ../src/googlesearch.c:100 msgid "couldn't map temp file" msgstr "" #: ../src/globals.c:44 msgid "Degree format:" msgstr "" #: ../src/globals.c:48 msgid "Distance units:" msgstr "" #: ../src/globals.c:52 msgid "Speed units:" msgstr "" #: ../src/globals.c:56 msgid "Height units:" msgstr "" #: ../src/globals.c:60 msgid "Use large waypoint icons:" msgstr "" #: ../src/globals.c:64 msgid "Default latitude:" msgstr "" #: ../src/globals.c:67 msgid "Default longitude:" msgstr "" #: ../src/globals.c:73 msgid "Alphabetical" msgstr "" #: ../src/globals.c:73 ../src/datasource_osm_my_traces.c:435 msgid "Time" msgstr "" #: ../src/globals.c:76 msgid "KML File Export Units:" msgstr "" #: ../src/globals.c:77 msgid "GPX Track Order:" msgstr "" #: ../src/globals.c:82 msgid "Image Viewer:" msgstr "" #: ../src/globals.c:87 msgid "External GPX Program 1:" msgstr "" #: ../src/globals.c:88 msgid "External GPX Program 2:" msgstr "" #. Defaults for the options are setup here #: ../src/globals.c:96 msgid "General" msgstr "" #. New Tab #: ../src/globals.c:121 msgid "Export/External" msgstr "" #. Webtools #: ../src/google.c:36 msgid "Google" msgstr "" #: ../src/datasource_file.c:59 msgid "Import file with GPSBabel" msgstr "" #: ../src/datasource_file.c:60 msgid "Imported file" msgstr "" #. The file selector #: ../src/datasource_file.c:133 msgid "File:" msgstr "" #: ../src/datasource_file.c:134 msgid "File to import" msgstr "" #: ../src/datasource_file.c:141 msgid "All files" msgstr "" #. The file format selector #: ../src/datasource_file.c:148 msgid "File type:" msgstr "" #: ../src/datasource_file.c:193 #, c-format msgid "using babel args '%s' and file '%s'" msgstr "" #: ../src/datasource_gc.c:66 msgid "Download Geocaches" msgstr "" #: ../src/datasource_gc.c:67 msgid "Geocaching.com Caches" msgstr "" #: ../src/datasource_gc.c:84 msgid "geocaching.com username:" msgstr "" #: ../src/datasource_gc.c:85 msgid "geocaching.com password:" msgstr "" #: ../src/datasource_gc.c:126 #, c-format msgid "" "Can't find %s or %s in path! Check that you have installed it correctly." msgstr "" #: ../src/datasource_gc.c:188 msgid "Number geocaches:" msgstr "" #: ../src/datasource_gc.c:190 msgid "Centered around:" msgstr "" #: ../src/datasource_gc.c:226 msgid "Broken input - using some defaults" msgstr "" #: ../src/datasource_geotag.c:51 msgid "Create Waypoints from Geotagged Images" msgstr "" #: ../src/datasource_geotag.c:52 msgid "Geotagged Images" msgstr "" #: ../src/datasource_geotag.c:102 ../src/vikwindow.c:2314 #: ../src/vikwindow.c:2382 ../src/vikwindow.c:2824 msgid "All" msgstr "" #: ../src/datasource_geotag.c:107 ../src/vikwindow.c:2829 msgid "JPG" msgstr "" #: ../src/datasource_geotag.c:165 #, c-format msgid "Unable to create waypoint from %s" msgstr "" #: ../src/datasource_google.c:49 ../src/datasource_google.c:50 msgid "Google Directions" msgstr "" #: ../src/datasource_google.c:77 msgid "From:" msgstr "" #: ../src/datasource_google.c:79 msgid "To:" msgstr "" #: ../src/datasource_gps.c:57 msgid "Acquire from GPS" msgstr "" #: ../src/datasource_gps.c:58 msgid "Acquired from GPS" msgstr "" #: ../src/datasource_gps.c:221 #, c-format msgid "using cmdline '%s' and file '%s'\n" msgstr "" #: ../src/datasource_gps.c:297 ../src/vikgpslayer.c:884 #, c-format msgid "Downloading %d waypoint..." msgid_plural "Downloading %d waypoints..." msgstr[0] "" msgstr[1] "" #: ../src/datasource_gps.c:298 ../src/vikgpslayer.c:885 #, c-format msgid "Downloading %d trackpoint..." msgid_plural "Downloading %d trackpoints..." msgstr[0] "" msgstr[1] "" #: ../src/datasource_gps.c:303 ../src/vikgpslayer.c:890 #, c-format msgid "Downloading %d routepoint..." msgid_plural "Downloading %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/datasource_gps.c:325 ../src/datasource_gps.c:326 #: ../src/datasource_gps.c:327 #, c-format msgid "Downloaded %d out of %d %s..." msgstr "" #: ../src/datasource_gps.c:331 ../src/datasource_gps.c:332 #: ../src/datasource_gps.c:333 #, c-format msgid "Downloaded %d %s." msgstr "" #: ../src/datasource_gps.c:347 ../src/vikgpslayer.c:968 #, c-format msgid "GPS Device: %s" msgstr "" #: ../src/datasource_gps.c:370 ../src/vikgpslayer.c:1042 #: ../src/vikgpslayer.c:1110 msgid "Status: Working..." msgstr "" #: ../src/datasource_gps.c:469 ../src/vikgpslayer.c:150 msgid "GPS Protocol:" msgstr "" #. List now assigned at runtime #: ../src/datasource_gps.c:488 ../src/vikgpslayer.c:151 msgid "Serial Port:" msgstr "" #: ../src/datasource_gps.c:509 msgid "" "Turn Off After Transfer\n" "(Garmin/NAViLink Only)" msgstr "" #: ../src/datasource_gps.c:512 msgid "Tracks:" msgstr "" #: ../src/datasource_gps.c:516 msgid "Routes:" msgstr "" #: ../src/datasource_gps.c:520 msgid "Waypoints:" msgstr "" #: ../src/datasource_gps.c:594 ../src/vikgpslayer.c:1305 msgid "GPS device: N/A" msgstr "" #: ../src/datasource_osm.c:52 ../src/datasource_osm.c:53 msgid "OSM traces" msgstr "" #: ../src/datasource_osm.c:80 msgid "Page number:" msgstr "" #: ../src/datasource_osm_my_traces.c:63 ../src/datasource_osm_my_traces.c:64 msgid "OSM My Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:108 msgid "Username:" msgstr "" #: ../src/datasource_osm_my_traces.c:113 msgid "The email or username used to login to OSM" msgstr "" #: ../src/datasource_osm_my_traces.c:115 ../src/osm-traces.c:413 msgid "Password:" msgstr "" #: ../src/datasource_osm_my_traces.c:120 msgid "The password used to login to OSM" msgstr "" #: ../src/datasource_osm_my_traces.c:430 msgid "Description" msgstr "" #: ../src/datasource_osm_my_traces.c:445 msgid "Privacy" msgstr "" #: ../src/datasource_osm_my_traces.c:452 msgid "Within Current View" msgstr "" #: ../src/datasource_osm_my_traces.c:518 msgid "GPS Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:520 msgid "None found!" msgstr "" #: ../src/datasource_osm_my_traces.c:629 msgid "My OSM Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:645 #, c-format msgid "Unable to get trace: %s" msgstr "" #: ../src/datasource_wikipedia.c:32 msgid "Create Waypoints from Wikipedia Articles" msgstr "" #: ../src/datasource_wikipedia.c:33 msgid "Wikipedia Waypoints" msgstr "" #: ../src/dem.c:65 ../src/dem.c:79 msgid "Invalid DEM" msgstr "" #: ../src/dem.c:121 msgid "Invalid DEM header" msgstr "" #: ../src/dem.c:190 ../src/dem.c:203 msgid "Incorrect DEM Class B record: expected 1" msgstr "" #: ../src/dem.c:360 #, c-format msgid "Couldn't map file %s: %s" msgstr "" #: ../src/download.c:112 msgid "Tile age (s):" msgstr "" #: ../src/download.c:233 #, c-format msgid "Download error: %s" msgstr "" #: ../src/download.c:313 msgid "couldn't open temp file" msgstr "" #: ../src/file.c:456 ../src/file.c:461 #, c-format msgid "Draw mode '%s' no more supported" msgstr "" #: ../src/geotag_exif.c:433 msgid "Not enough memory." msgstr "" #: ../src/geotag_exif.c:451 msgid "Setting a value for this tag is unsupported!" msgstr "" #: ../src/geotag_exif.c:470 #, c-format msgid "Too few components specified (need %d, found %d)\n" msgstr "" #: ../src/geotag_exif.c:474 msgid "Numeric value expected\n" msgstr "" #: ../src/geotag_exif.c:482 msgid "This shouldn't happen!" msgstr "" #: ../src/geotag_exif.c:552 msgid "Not yet implemented!" msgstr "" #: ../src/geotag_exif.c:565 msgid "Warning; Too many components specified!" msgstr "" #: ../src/osm-traces.c:73 msgid "Identifiable (public w/ timestamps)" msgstr "" #: ../src/osm-traces.c:74 msgid "Trackable (private w/ timestamps)" msgstr "" #: ../src/osm-traces.c:75 msgid "Public" msgstr "" #: ../src/osm-traces.c:76 msgid "Private" msgstr "" #: ../src/osm-traces.c:93 msgid "OSM username:" msgstr "" #: ../src/osm-traces.c:94 msgid "OSM password:" msgstr "" #. Preferences #: ../src/osm-traces.c:151 msgid "OpenStreetMap Traces" msgstr "" #: ../src/osm-traces.c:234 #, c-format msgid "failed to upload data: HTTP response is %ld" msgstr "" #: ../src/osm-traces.c:239 #, c-format msgid "curl_easy_getinfo failed: %d" msgstr "" #: ../src/osm-traces.c:244 #, c-format msgid "curl request failed: %s" msgstr "" #: ../src/osm-traces.c:275 #, c-format msgid "failed to open temporary file: %s" msgstr "" #. Success #: ../src/osm-traces.c:328 msgid "Uploaded to OSM" msgstr "" #: ../src/osm-traces.c:332 msgid "FAILED TO UPLOAD DATA TO OSM - CURL PROBLEM" msgstr "" #: ../src/osm-traces.c:335 msgid "FAILED TO UPLOAD DATA TO OSM" msgstr "" #: ../src/osm-traces.c:335 msgid "HTTP response code" msgstr "" #: ../src/osm-traces.c:348 #, c-format msgid "failed to unlink temporary file: %s" msgstr "" #: ../src/osm-traces.c:387 msgid "OSM upload" msgstr "" #: ../src/osm-traces.c:405 msgid "Email:" msgstr "" #: ../src/osm-traces.c:410 msgid "" "The email used as login\n" "Enter the email you use to login into www.openstreetmap.org." msgstr "" #: ../src/osm-traces.c:418 msgid "" "The password used to login\n" "Enter the password you use to login into " "www.openstreetmap.org." msgstr "" #: ../src/osm-traces.c:423 msgid "File's name:" msgstr "" #: ../src/osm-traces.c:433 msgid "" "The name of the file on OSM\n" "This is the name of the file created on the server.This is not the " "name of the local file." msgstr "" #: ../src/osm-traces.c:442 msgid "The description of the trace" msgstr "" #: ../src/osm-traces.c:444 msgid "Tags:" msgstr "" #: ../src/osm-traces.c:449 msgid "The tags associated to the trace" msgstr "" #: ../src/osm-traces.c:482 #, c-format msgid "Uploading %s to OSM" msgstr "" #: ../src/mapcache.c:61 msgid "Map cache memory size (MB):" msgstr "" #: ../src/print.c:53 msgid "None" msgstr "" #: ../src/print.c:54 msgid "Horizontally" msgstr "" #: ../src/print.c:55 msgid "Vertically" msgstr "" #: ../src/print.c:56 msgid "Both" msgstr "" #: ../src/print.c:120 msgid "Image Settings" msgstr "" #: ../src/print.c:546 msgid "done" msgstr "" #. Page Size #: ../src/print.c:575 msgid "_Adjust Page Size and Orientation" msgstr "" #: ../src/print.c:591 msgid "C_enter:" msgstr "" #. ignore page margins #: ../src/print.c:609 msgid "Ignore Page _Margins" msgstr "" #: ../src/print.c:628 msgid "Image S_ize:" msgstr "" #: ../src/util.c:81 msgid "Could not launch web browser." msgstr "" #: ../src/util.c:92 msgid "Could not create new email." msgstr "" #: ../src/vikcoordlayer.c:46 msgid "Color:" msgstr "" #: ../src/vikcoordlayer.c:47 msgid "Minutes Width:" msgstr "" #: ../src/vikcoordlayer.c:48 msgid "Line Thickness:" msgstr "" #: ../src/vikcoordlayer.c:56 msgid "Coordinate" msgstr "" #: ../src/datasource_bfilter.c:46 msgid "Max number of points:" msgstr "" #: ../src/datasource_bfilter.c:60 msgid "Simplify All Tracks..." msgstr "" #: ../src/datasource_bfilter.c:61 msgid "Simplified Tracks" msgstr "" #: ../src/datasource_bfilter.c:96 ../src/datasource_bfilter.c:97 msgid "Remove Duplicate Waypoints" msgstr "" #: ../src/datasource_bfilter.c:129 msgid "Waypoints Inside This" msgstr "" #: ../src/datasource_bfilter.c:130 msgid "Polygonized Layer" msgstr "" #: ../src/datasource_bfilter.c:165 msgid "Waypoints Outside This" msgstr "" #: ../src/datasource_bfilter.c:166 msgid "Polygonzied Layer" msgstr "" #: ../src/main.c:89 #, c-format msgid "Ignoring Xlib error: error code %d request code %d\n" msgstr "" #: ../src/main.c:102 msgid "Enable debug output" msgstr "" #: ../src/main.c:103 msgid "Enable verbose output" msgstr "" #: ../src/main.c:104 msgid "Show version" msgstr "" #: ../src/osm.c:106 msgid "On Disk OSM Tile Format" msgstr "" #: ../src/osm.c:121 msgid "OSM (view)" msgstr "" #: ../src/osm.c:125 msgid "OSM (edit)" msgstr "" #: ../src/osm.c:129 msgid "OSM (render)" msgstr "" #. Example: http://127.0.0.1:8111/load_and_zoom?left=8.19&right=8.20&top=48.605&bottom=48.590&select=node413602999 #. JOSM or merkaartor must already be running with remote interface enabled #: ../src/osm.c:136 msgid "Local port 8111 (eg JOSM)" msgstr "" #: ../src/preferences.c:285 msgid "Preferences" msgstr "" #: ../src/uibuilder.c:147 msgid "Take care that this password will be stored clearly in a plain file." msgstr "" #: ../src/vikaggregatelayer.c:37 msgid "Aggregate" msgstr "" #: ../src/vikdemlayer.c:101 msgid "Absolute height" msgstr "" #: ../src/vikdemlayer.c:102 msgid "Height gradient" msgstr "" #: ../src/vikdemlayer.c:118 msgid "DEM Files:" msgstr "" #: ../src/vikdemlayer.c:119 msgid "Download Source:" msgstr "" #: ../src/vikdemlayer.c:120 msgid "Min Elev Color:" msgstr "" #: ../src/vikdemlayer.c:121 msgid "Type:" msgstr "" #: ../src/vikdemlayer.c:122 msgid "Min Elev:" msgstr "" #: ../src/vikdemlayer.c:123 msgid "Max Elev:" msgstr "" #: ../src/vikdemlayer.c:134 msgid "_DEM Download" msgstr "" #: ../src/vikdemlayer.c:134 msgid "DEM Download" msgstr "" #: ../src/vikdemlayer.c:188 msgid "DEM" msgstr "" #: ../src/vikdemlayer.c:284 #, c-format msgid "Number of files: %d" msgstr "" #: ../src/vikdemlayer.c:385 msgid "DEM Loading" msgstr "" #: ../src/vikdemlayer.c:889 #, c-format msgid "No SRTM data available for %f, %f" msgstr "" #: ../src/vikdemlayer.c:1149 #, c-format msgid "Downloading DEM %s" msgstr "" #: ../src/vikfileentry.c:68 msgid "Browse..." msgstr "" #: ../src/vikfileentry.c:96 msgid "Choose file" msgstr "" #: ../src/vikfilelist.c:48 msgid "Choose file(s)" msgstr "" #: ../src/vikfilelist.c:172 msgid "Add..." msgstr "" #: ../src/vikfilelist.c:173 msgid "Delete" msgstr "" #: ../src/vikgeoreflayer.c:70 msgid "_Georef Move Map" msgstr "" #: ../src/vikgeoreflayer.c:70 msgid "Georef Move Map" msgstr "" #: ../src/vikgeoreflayer.c:77 msgid "Georef Z_oom Tool" msgstr "" #: ../src/vikgeoreflayer.c:77 msgid "Georef Zoom Tool" msgstr "" #: ../src/vikgeoreflayer.c:87 msgid "GeoRef Map" msgstr "" #: ../src/vikgeoreflayer.c:335 ../src/vikmapslayer.c:685 #, c-format msgid "Couldn't open image file: %s" msgstr "" #: ../src/vikgeoreflayer.c:365 msgid "Unexpected end of file reading World file." msgstr "" #: ../src/vikgeoreflayer.c:381 ../src/vikgeoreflayer.c:426 msgid "Choose World file" msgstr "" #: ../src/vikgeoreflayer.c:394 msgid "The World file you requested could not be opened for reading." msgstr "" #: ../src/vikgeoreflayer.c:439 msgid "The file you requested could not be opened for writing." msgstr "" #: ../src/vikgeoreflayer.c:456 ../src/viklayer.c:480 msgid "Layer Properties" msgstr "" #: ../src/vikgeoreflayer.c:478 msgid "World File Parameters:" msgstr "" #: ../src/vikgeoreflayer.c:479 msgid "Load From File..." msgstr "" #: ../src/vikgeoreflayer.c:484 msgid "Corner pixel easting:" msgstr "" #: ../src/vikgeoreflayer.c:486 msgid "the UTM \"easting\" value of the upper-right corner pixel of the map" msgstr "" #: ../src/vikgeoreflayer.c:488 msgid "Corner pixel northing:" msgstr "" #: ../src/vikgeoreflayer.c:490 msgid "the UTM \"northing\" value of the upper-right corner pixel of the map" msgstr "" #: ../src/vikgeoreflayer.c:492 msgid "X (easting) scale (mpp): " msgstr "" #: ../src/vikgeoreflayer.c:493 msgid "Y (northing) scale (mpp): " msgstr "" #: ../src/vikgeoreflayer.c:496 msgid "the scale of the map in the X direction (meters per pixel)" msgstr "" #: ../src/vikgeoreflayer.c:498 msgid "the scale of the map in the Y direction (meters per pixel)" msgstr "" #: ../src/vikgeoreflayer.c:500 msgid "Map Image:" msgstr "" #. Now with icons #: ../src/vikgeoreflayer.c:608 msgid "_Zoom to Fit Map" msgstr "" #: ../src/vikgeoreflayer.c:614 msgid "_Goto Map Center" msgstr "" #: ../src/vikgeoreflayer.c:620 msgid "_Export to World File" msgstr "" #: ../src/vikgoto.c:75 msgid "No goto tool available." msgstr "" #: ../src/vikgoto.c:88 ../src/vikgoto.c:107 msgid "goto" msgstr "" #: ../src/vikgoto.c:90 msgid "I don't know that place. Do you want another goto?" msgstr "" #: ../src/vikgoto.c:109 msgid "goto provider:" msgstr "" #: ../src/vikgoto.c:124 msgid "Enter address or place name:" msgstr "" #: ../src/vikgpslayer.c:127 msgid "Data Mode" msgstr "" #: ../src/vikgpslayer.c:129 msgid "Realtime Tracking Mode" msgstr "" #: ../src/vikgpslayer.c:137 msgid "Keep vehicle at center" msgstr "" #: ../src/vikgpslayer.c:138 msgid "Keep vehicle on screen" msgstr "" #: ../src/vikgpslayer.c:139 msgid "Disable" msgstr "" #: ../src/vikgpslayer.c:152 msgid "Download Tracks:" msgstr "" #: ../src/vikgpslayer.c:153 msgid "Upload Tracks:" msgstr "" #: ../src/vikgpslayer.c:154 msgid "Download Routes:" msgstr "" #: ../src/vikgpslayer.c:155 msgid "Upload Routes:" msgstr "" #: ../src/vikgpslayer.c:156 msgid "Download Waypoints:" msgstr "" #: ../src/vikgpslayer.c:157 msgid "Upload Waypoints:" msgstr "" #: ../src/vikgpslayer.c:159 msgid "Recording tracks" msgstr "" #: ../src/vikgpslayer.c:160 msgid "Jump to current position on start" msgstr "" #: ../src/vikgpslayer.c:161 msgid "Moving Map Method:" msgstr "" #: ../src/vikgpslayer.c:162 msgid "Gpsd Host:" msgstr "" #: ../src/vikgpslayer.c:163 msgid "Gpsd Port:" msgstr "" #: ../src/vikgpslayer.c:164 msgid "Gpsd Retry Interval (seconds):" msgstr "" #: ../src/vikgpslayer.c:179 msgid "GPS" msgstr "" #: ../src/vikgpslayer.c:242 ../src/vikgpslayer.c:1258 msgid "GPS Download" msgstr "" #: ../src/vikgpslayer.c:242 ../src/vikgpslayer.c:1258 #: ../src/viktrwlayer.c:3094 msgid "GPS Upload" msgstr "" #: ../src/vikgpslayer.c:244 msgid "GPS Realtime Tracking" msgstr "" #: ../src/vikgpslayer.c:451 msgid "Unknown GPS Protocol" msgstr "" #: ../src/vikgpslayer.c:469 msgid "Unknown serial port device" msgstr "" #: ../src/vikgpslayer.c:572 #, c-format msgid "%s: unknown parameter" msgstr "" #. Now with icons #: ../src/vikgpslayer.c:693 msgid "_Upload to GPS" msgstr "" #: ../src/vikgpslayer.c:699 msgid "Download from _GPS" msgstr "" #: ../src/vikgpslayer.c:720 msgid "Empty _Realtime" msgstr "" #: ../src/vikgpslayer.c:727 msgid "E_mpty Upload" msgstr "" #: ../src/vikgpslayer.c:733 msgid "_Empty Download" msgstr "" #: ../src/vikgpslayer.c:739 msgid "Empty _All" msgstr "" #. #. NB It's not fatal if this gives 2 for example! Hence removal of the g_assert #. This happens when copied GPS layer is deleted (not sure why the number_handlers would be 2) #. I don't think there's any side effects and certainly better than the program just aborting #. #: ../src/vikgpslayer.c:756 #, c-format msgid "Unexpected number of disconnected handlers: %d" msgstr "" #: ../src/vikgpslayer.c:898 #, c-format msgid "Uploading %d waypoint..." msgid_plural "Uploading %d waypoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:899 #, c-format msgid "Uploading %d trackpoint..." msgid_plural "Uploading %d trackpoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:900 #, c-format msgid "Uploading %d routepoint..." msgid_plural "Uploading %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:925 #, c-format msgid "Downloaded %d out of %d waypoint..." msgid_plural "Downloaded %d out of %d waypoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:926 #, c-format msgid "Downloaded %d out of %d trackpoint..." msgid_plural "Downloaded %d out of %d trackpoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:927 #, c-format msgid "Downloaded %d out of %d routepoint..." msgid_plural "Downloaded %d out of %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:932 #, c-format msgid "Uploaded %d out of %d waypoint..." msgid_plural "Uploaded %d out of %d waypoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:933 #, c-format msgid "Uploaded %d out of %d trackpoint..." msgid_plural "Uploaded %d out of %d trackpoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:934 #, c-format msgid "Uploaded %d out of %d routepoint..." msgid_plural "Uploaded %d out of %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:942 #, c-format msgid "Downloaded %d waypoint" msgid_plural "Downloaded %d waypoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:943 #, c-format msgid "Downloaded %d trackpoint" msgid_plural "Downloaded %d trackpoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:944 #, c-format msgid "Downloaded %d routepoint" msgid_plural "Downloaded %d routepoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:949 #, c-format msgid "Uploaded %d waypoint" msgid_plural "Uploaded %d waypoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:950 #, c-format msgid "Uploaded %d trackpoint" msgid_plural "Uploaded %d trackpoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:951 #, c-format msgid "Uploaded %d routepoint" msgid_plural "Uploaded %d routepoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:1180 msgid "Error: couldn't find gpsbabel." msgstr "" #: ../src/vikgpslayer.c:1269 msgid "Warning - GPS Upload items may overwrite each other" msgstr "" #: ../src/vikgpslayer.c:1301 msgid "Status: detecting gpsbabel" msgstr "" #: ../src/vikgpslayer.c:1332 msgid "No GPS items selected for transfer." msgstr "" #: ../src/vikgpslayer.c:1347 msgid "Could not turn off device." msgstr "" #: ../src/vikgpslayer.c:1385 msgid "Are you sure you want to delete GPS Upload data?" msgstr "" #: ../src/vikgpslayer.c:1398 msgid "Are you sure you want to delete GPS Download data?" msgstr "" #: ../src/vikgpslayer.c:1412 msgid "Are you sure you want to delete GPS Realtime data?" msgstr "" #: ../src/vikgpslayer.c:1425 msgid "Are you sure you want to delete All GPS data?" msgstr "" #: ../src/viklayerspanel.c:55 msgid "/C_ut" msgstr "" #: ../src/viklayerspanel.c:56 msgid "/_Copy" msgstr "" #: ../src/viklayerspanel.c:57 msgid "/_Paste" msgstr "" #: ../src/viklayerspanel.c:58 msgid "/_Delete" msgstr "" #: ../src/viklayerspanel.c:59 msgid "/New Layer" msgstr "" #: ../src/viklayerspanel.c:127 msgid "Top Layer" msgstr "" #: ../src/viklayerspanel.c:143 msgid "Add new layer" msgstr "" #: ../src/viklayerspanel.c:150 msgid "Remove selected layer" msgstr "" #: ../src/viklayerspanel.c:157 msgid "Move selected layer up" msgstr "" #: ../src/viklayerspanel.c:164 msgid "Move selected layer down" msgstr "" #: ../src/viklayerspanel.c:171 msgid "Cut selected layer" msgstr "" #: ../src/viklayerspanel.c:178 msgid "Copy selected layer" msgstr "" #: ../src/viklayerspanel.c:185 msgid "Paste layer below selected layer" msgstr "" #. TODO: FIXME: if name has a '/' in it it will get all messed up. why not have an itemfactory field with #. name, icon, shortcut, etc.? #: ../src/viklayerspanel.c:204 ../src/vikwindow.c:3292 #, c-format msgid "New _%s Layer" msgstr "" #: ../src/viklayerspanel.c:511 msgid "Aggregate Layers have no settable properties." msgstr "" #: ../src/viklayerspanel.c:555 msgid "You cannot cut the Top Layer." msgstr "" #: ../src/viklayerspanel.c:600 #, c-format msgid "Are you sure you want to delete %s?" msgstr "" #: ../src/viklayerspanel.c:617 msgid "You cannot delete the Top Layer." msgstr "" #: ../src/viklayerspanel.c:701 msgid "Are you sure you wish to delete all layers?" msgstr "" #. ******* MAPZOOMS ******** #: ../src/vikmapslayer.c:91 msgid "Use Viking Zoom Level" msgstr "" #: ../src/vikmapslayer.c:124 msgid "Map Type:" msgstr "" #: ../src/vikmapslayer.c:125 msgid "Maps Directory:" msgstr "" #: ../src/vikmapslayer.c:126 msgid "Alpha:" msgstr "" #: ../src/vikmapslayer.c:127 msgid "Control the Alpha value for transparency effects" msgstr "" #: ../src/vikmapslayer.c:128 msgid "Autodownload maps:" msgstr "" #: ../src/vikmapslayer.c:129 msgid "Autodownload Only Gets Missing Maps:" msgstr "" #: ../src/vikmapslayer.c:130 msgid "" "Using this option avoids attempting to update already acquired tiles. This " "can be useful if you want to restrict the network usage, without having to " "resort to manual control. Only applies when 'Autodownload Maps' is on." msgstr "" #: ../src/vikmapslayer.c:131 msgid "Zoom Level:" msgstr "" #: ../src/vikmapslayer.c:132 msgid "" "Determines the method of displaying map tiles for the current zoom level. " "'Viking Zoom Level' uses the best matching level, otherwise setting a fixed " "value will always use map tiles of the specified value regardless of the " "actual zoom level." msgstr "" #: ../src/vikmapslayer.c:146 msgid "_Maps Download" msgstr "" #: ../src/vikmapslayer.c:146 msgid "Maps Download" msgstr "" #: ../src/vikmapslayer.c:161 msgid "Map" msgstr "" #: ../src/vikmapslayer.c:249 msgid "Default maplayer directory:" msgstr "" #: ../src/vikmapslayer.c:249 msgid "Choose a directory to store cached Map tiles for this layer" msgstr "" #: ../src/vikmapslayer.c:505 msgid "Unknown map type" msgstr "" #: ../src/vikmapslayer.c:516 msgid "Unknown Map Zoom" msgstr "" #: ../src/vikmapslayer.c:589 #, c-format msgid "" "New map cannot be displayed in the current drawmode.\n" "Select \"%s\" from View menu to view it." msgstr "" #: ../src/vikmapslayer.c:753 #, c-format msgid "" "Cowardly refusing to draw tiles or existence of tiles beyond %d zoom out " "factor" msgstr "" #: ../src/vikmapslayer.c:1157 #, c-format msgid "Redownloading up to %d %s map..." msgid_plural "Redownloading up to %d %s maps..." msgstr[0] "" msgstr[1] "" #: ../src/vikmapslayer.c:1159 #, c-format msgid "Redownloading %d %s map..." msgid_plural "Redownloading %d %s maps..." msgstr[0] "" msgstr[1] "" #: ../src/vikmapslayer.c:1163 ../src/vikmapslayer.c:1238 #, c-format msgid "Downloading %d %s map..." msgid_plural "Downloading %d %s maps..." msgstr[0] "" msgstr[1] "" #: ../src/vikmapslayer.c:1311 #, c-format msgid "" "\n" "Source: %s\n" "\n" "Tile File: %s\n" "Tile File Timestamp: %s" msgstr "" #: ../src/vikmapslayer.c:1318 #, c-format msgid "" "Source: %s\n" "\n" "No Tile File!" msgstr "" #: ../src/vikmapslayer.c:1356 msgid "Redownload _Bad Map(s)" msgstr "" #: ../src/vikmapslayer.c:1360 msgid "Redownload _New Map(s)" msgstr "" #: ../src/vikmapslayer.c:1364 msgid "Redownload _All Map(s)" msgstr "" #: ../src/vikmapslayer.c:1368 msgid "_Show Tile Information" msgstr "" #: ../src/vikmapslayer.c:1449 #, c-format msgid "" "Wrong drawmode for this map.\n" "Select \"%s\" from View menu and try again." msgstr "" #: ../src/vikmapslayer.c:1454 msgid "Wrong zoom level for this map." msgstr "" #. Now with icons #: ../src/vikmapslayer.c:1485 msgid "Download _Missing Onscreen Maps" msgstr "" #: ../src/vikmapslayer.c:1492 msgid "Download _New Onscreen Maps" msgstr "" #: ../src/vikmapslayer.c:1499 msgid "Reload _All Onscreen Maps" msgstr "" #: ../src/viktreeview.c:263 msgid "Layer Name" msgstr "" #: ../src/viktreeview.c:742 #, c-format msgid "delete data from %s\n" msgstr "" #: ../src/viktrwlayer.c:377 msgid "Create _Waypoint" msgstr "" #: ../src/viktrwlayer.c:377 msgid "Create Waypoint" msgstr "" #: ../src/viktrwlayer.c:383 msgid "Create _Track" msgstr "" #: ../src/viktrwlayer.c:383 msgid "Create Track" msgstr "" #: ../src/viktrwlayer.c:392 msgid "Create _Route" msgstr "" #: ../src/viktrwlayer.c:392 msgid "Create Route" msgstr "" #: ../src/viktrwlayer.c:401 msgid "_Edit Waypoint" msgstr "" #: ../src/viktrwlayer.c:401 msgid "Edit Waypoint" msgstr "" #: ../src/viktrwlayer.c:409 msgid "Edit Trac_kpoint" msgstr "" #: ../src/viktrwlayer.c:409 msgid "Edit Trackpoint" msgstr "" #: ../src/viktrwlayer.c:417 msgid "Show P_icture" msgstr "" #: ../src/viktrwlayer.c:417 msgid "Show Picture" msgstr "" #: ../src/viktrwlayer.c:424 msgid "Route _Finder" msgstr "" #: ../src/viktrwlayer.c:424 msgid "Route Finder" msgstr "" #. ***** PARAMETERS ***** #: ../src/viktrwlayer.c:447 ../src/viktrwlayer.c:1942 #: ../src/viktrwlayer.c:1944 msgid "Waypoints" msgstr "" #: ../src/viktrwlayer.c:447 ../src/viktrwlayer.c:1933 #: ../src/viktrwlayer.c:1935 msgid "Tracks" msgstr "" #: ../src/viktrwlayer.c:447 msgid "Waypoint Images" msgstr "" #: ../src/viktrwlayer.c:450 msgid "Draw by Track" msgstr "" #: ../src/viktrwlayer.c:450 msgid "Draw by Speed" msgstr "" #: ../src/viktrwlayer.c:450 msgid "All Tracks Same Color" msgstr "" #: ../src/viktrwlayer.c:451 msgid "Filled Square" msgstr "" #: ../src/viktrwlayer.c:451 msgid "Square" msgstr "" #: ../src/viktrwlayer.c:451 msgid "Circle" msgstr "" #: ../src/viktrwlayer.c:451 msgid "X" msgstr "" #: ../src/viktrwlayer.c:477 msgid "Extra Extra Small" msgstr "" #: ../src/viktrwlayer.c:478 msgid "Extra Small" msgstr "" #: ../src/viktrwlayer.c:479 msgid "Small" msgstr "" #: ../src/viktrwlayer.c:480 msgid "Medium" msgstr "" #: ../src/viktrwlayer.c:481 msgid "Large" msgstr "" #: ../src/viktrwlayer.c:482 msgid "Extra Large" msgstr "" #: ../src/viktrwlayer.c:483 msgid "Extra Extra Large" msgstr "" #: ../src/viktrwlayer.c:491 msgid "Track Drawing Mode:" msgstr "" #: ../src/viktrwlayer.c:492 msgid "All Tracks Color:" msgstr "" #: ../src/viktrwlayer.c:493 msgid "The color used when 'All Tracks Same Color' drawing mode is selected" msgstr "" #: ../src/viktrwlayer.c:494 msgid "Draw Track Lines" msgstr "" #: ../src/viktrwlayer.c:495 msgid "Track Thickness:" msgstr "" #: ../src/viktrwlayer.c:496 msgid "Draw Track Direction" msgstr "" #: ../src/viktrwlayer.c:497 msgid "Direction Size:" msgstr "" #: ../src/viktrwlayer.c:498 msgid "Draw Trackpoints" msgstr "" #: ../src/viktrwlayer.c:499 msgid "Trackpoint Size:" msgstr "" #: ../src/viktrwlayer.c:500 msgid "Draw Elevation" msgstr "" #: ../src/viktrwlayer.c:501 msgid "Draw Elevation Height %:" msgstr "" #: ../src/viktrwlayer.c:503 msgid "Draw Stops" msgstr "" #: ../src/viktrwlayer.c:504 msgid "" "Whether to draw a marker when trackpoints are at the same position but over " "the minimum stop length apart in time" msgstr "" #: ../src/viktrwlayer.c:505 msgid "Min Stop Length (seconds):" msgstr "" #: ../src/viktrwlayer.c:507 msgid "Track BG Thickness:" msgstr "" #: ../src/viktrwlayer.c:508 msgid "Track Background Color" msgstr "" #: ../src/viktrwlayer.c:509 msgid "Draw by Speed Factor (%):" msgstr "" #: ../src/viktrwlayer.c:510 msgid "" "The percentage factor away from the average speed determining the color used" msgstr "" #: ../src/viktrwlayer.c:512 msgid "Draw Labels" msgstr "" #: ../src/viktrwlayer.c:513 msgid "Waypoint Font Size:" msgstr "" #: ../src/viktrwlayer.c:514 msgid "Waypoint Color:" msgstr "" #: ../src/viktrwlayer.c:515 msgid "Waypoint Text:" msgstr "" #: ../src/viktrwlayer.c:516 msgid "Background:" msgstr "" #: ../src/viktrwlayer.c:517 msgid "Fake BG Color Translucency:" msgstr "" #: ../src/viktrwlayer.c:518 msgid "Waypoint marker:" msgstr "" #: ../src/viktrwlayer.c:519 msgid "Waypoint size:" msgstr "" #: ../src/viktrwlayer.c:520 msgid "Draw Waypoint Symbols:" msgstr "" #: ../src/viktrwlayer.c:522 msgid "Draw Waypoint Images" msgstr "" #: ../src/viktrwlayer.c:523 msgid "Image Size (pixels):" msgstr "" #: ../src/viktrwlayer.c:524 msgid "Image Alpha:" msgstr "" #: ../src/viktrwlayer.c:525 msgid "Image Memory Cache Size:" msgstr "" #: ../src/viktrwlayer.c:610 msgid "TrackWaypoint" msgstr "" #: ../src/viktrwlayer.c:1951 ../src/viktrwlayer.c:1953 msgid "Routes" msgstr "" #: ../src/viktrwlayer.c:2144 #, c-format msgid " in %d:%02d hrs:mins" msgstr "" #: ../src/viktrwlayer.c:2148 #, c-format msgid "" "\n" "%sTotal Length %.1f %s%s" msgstr "" #: ../src/viktrwlayer.c:2154 #, c-format msgid "Tracks: %d - Waypoints: %d - Routes: %d%s" msgstr "" #: ../src/viktrwlayer.c:2174 #, c-format msgid "Tracks: %d" msgstr "" #: ../src/viktrwlayer.c:2184 #, c-format msgid "Routes: %d" msgstr "" #: ../src/viktrwlayer.c:2215 #, c-format msgid "- %d:%02d hrs:mins" msgstr "" #: ../src/viktrwlayer.c:2223 #, c-format msgid "%s%.1f km %s" msgstr "" #: ../src/viktrwlayer.c:2226 #, c-format msgid "%s%.1f miles %s" msgstr "" #: ../src/viktrwlayer.c:2240 #, c-format msgid "Waypoints: %d" msgstr "" #: ../src/viktrwlayer.c:2266 #, c-format msgid "Trkpt: Alt %dft" msgstr "" #. VIK_UNITS_HEIGHT_METRES: #: ../src/viktrwlayer.c:2270 #, c-format msgid "Trkpt: Alt %dm" msgstr "" #. Compact date time format #: ../src/viktrwlayer.c:2277 #, c-format msgid " | Time %x %X" msgstr "" #: ../src/viktrwlayer.c:2295 #, c-format msgid " | Track: %s" msgstr "" #. Combine parts to make overall message #: ../src/viktrwlayer.c:2299 #, c-format msgid "%s%s | %s %s %s" msgstr "" #: ../src/viktrwlayer.c:2314 #, c-format msgid "Wpt: Alt %dft" msgstr "" #. VIK_UNITS_HEIGHT_METRES: #: ../src/viktrwlayer.c:2318 #, c-format msgid "Wpt: Alt %dm" msgstr "" #. Add comment if available #: ../src/viktrwlayer.c:2333 #, c-format msgid "%s | %s %s | Comment: %s" msgstr "" #: ../src/viktrwlayer.c:2335 #, c-format msgid "%s | %s %s" msgstr "" #: ../src/viktrwlayer.c:2563 ../src/viktrwlayer.c:2634 msgid "This layer has no waypoints or trackpoints." msgstr "" #: ../src/viktrwlayer.c:2661 ../src/vikwindow.c:2407 ../src/vikwindow.c:2848 #, c-format msgid "The file \"%s\" exists, do you wish to overwrite it?" msgstr "" #: ../src/viktrwlayer.c:2671 ../src/vikwindow.c:2429 msgid "The filename you requested could not be opened for writing." msgstr "" #: ../src/viktrwlayer.c:2676 ../src/viktrwlayer.c:2681 #: ../src/viktrwlayer.c:2691 ../src/viktrwlayer.c:2703 msgid "Export Layer" msgstr "" #: ../src/viktrwlayer.c:2720 msgid "Could not create temporary file for export." msgstr "" #: ../src/viktrwlayer.c:2729 #, c-format msgid "Could not launch %s." msgstr "" #: ../src/viktrwlayer.c:2773 msgid "Export Track as GPX" msgstr "" #: ../src/viktrwlayer.c:2795 msgid "Find" msgstr "" #: ../src/viktrwlayer.c:2805 msgid "Waypoint Name:" msgstr "" #: ../src/viktrwlayer.c:2822 msgid "Waypoint not found in this layer." msgstr "" #: ../src/viktrwlayer.c:3090 msgid "Can not upload invisible track." msgstr "" #: ../src/viktrwlayer.c:3192 ../src/viktrwlayer.c:7785 msgid "Track" msgstr "" #: ../src/viktrwlayer.c:3215 ../src/viktrwlayer.c:7817 msgid "Route" msgstr "" #: ../src/viktrwlayer.c:3296 ../src/viktrwlayer.c:6265 #: ../src/viktrwlayer.c:6314 msgid "_Finish Route" msgstr "" #: ../src/viktrwlayer.c:3298 ../src/viktrwlayer.c:6223 #: ../src/viktrwlayer.c:6312 msgid "_Finish Track" msgstr "" #. Now with icons #: ../src/viktrwlayer.c:3310 msgid "_View Layer" msgstr "" #: ../src/viktrwlayer.c:3317 msgid "V_iew" msgstr "" #: ../src/viktrwlayer.c:3323 msgid "View All _Tracks" msgstr "" #: ../src/viktrwlayer.c:3328 msgid "View All _Routes" msgstr "" #: ../src/viktrwlayer.c:3333 msgid "View All _Waypoints" msgstr "" #: ../src/viktrwlayer.c:3338 msgid "_Goto Center of Layer" msgstr "" #: ../src/viktrwlayer.c:3344 ../src/viktrwlayer.c:6199 msgid "Goto _Waypoint..." msgstr "" #: ../src/viktrwlayer.c:3350 msgid "_Export Layer" msgstr "" #: ../src/viktrwlayer.c:3356 msgid "Export as GPS_Point..." msgstr "" #: ../src/viktrwlayer.c:3361 msgid "Export as GPS_Mapper..." msgstr "" #: ../src/viktrwlayer.c:3366 msgid "Export as _GPX..." msgstr "" #: ../src/viktrwlayer.c:3371 msgid "Export as _KML..." msgstr "" #: ../src/viktrwlayer.c:3376 msgid "Open with External Program_1: " msgstr "" #: ../src/viktrwlayer.c:3383 msgid "Open with External Program_2: " msgstr "" #: ../src/viktrwlayer.c:3391 ../src/vikwindow.c:3145 msgid "_New" msgstr "" #: ../src/viktrwlayer.c:3397 msgid "New _Waypoint..." msgstr "" #: ../src/viktrwlayer.c:3403 msgid "New _Track" msgstr "" #: ../src/viktrwlayer.c:3411 msgid "New _Route" msgstr "" #: ../src/viktrwlayer.c:3420 ../src/viktrwlayer.c:6597 msgid "Geotag _Images..." msgstr "" #: ../src/viktrwlayer.c:3427 msgid "_Acquire" msgstr "" #: ../src/viktrwlayer.c:3433 ../src/vikwindow.c:3150 msgid "From _GPS..." msgstr "" #: ../src/viktrwlayer.c:3439 msgid "From Google _Directions..." msgstr "" #: ../src/viktrwlayer.c:3446 msgid "From _OSM Traces..." msgstr "" #: ../src/viktrwlayer.c:3451 msgid "From _My OSM Traces..." msgstr "" #: ../src/viktrwlayer.c:3459 ../src/vikwindow.c:3166 msgid "From _Wikipedia Waypoints" msgstr "" #: ../src/viktrwlayer.c:3465 msgid "Within _Layer Bounds" msgstr "" #: ../src/viktrwlayer.c:3471 msgid "Within _Current View" msgstr "" #: ../src/viktrwlayer.c:3479 msgid "From Geo_caching..." msgstr "" #: ../src/viktrwlayer.c:3486 ../src/vikwindow.c:3163 msgid "From Geotagged _Images..." msgstr "" #: ../src/viktrwlayer.c:3492 msgid "From _File..." msgstr "" #: ../src/viktrwlayer.c:3498 ../src/viktrwlayer.c:6542 msgid "_Upload" msgstr "" #: ../src/viktrwlayer.c:3504 msgid "Upload to _GPS..." msgstr "" #: ../src/viktrwlayer.c:3511 ../src/viktrwlayer.c:6570 msgid "Upload to _OSM..." msgstr "" #: ../src/viktrwlayer.c:3519 msgid "De_lete" msgstr "" #: ../src/viktrwlayer.c:3525 msgid "Delete All _Tracks" msgstr "" #: ../src/viktrwlayer.c:3531 msgid "Delete Tracks _From Selection..." msgstr "" #: ../src/viktrwlayer.c:3537 ../src/viktrwlayer.c:6290 msgid "Delete _All Routes" msgstr "" #: ../src/viktrwlayer.c:3543 ../src/viktrwlayer.c:6296 msgid "_Delete Routes From Selection..." msgstr "" #: ../src/viktrwlayer.c:3549 msgid "Delete All _Waypoints" msgstr "" #: ../src/viktrwlayer.c:3555 msgid "Delete Waypoints From _Selection..." msgstr "" #: ../src/viktrwlayer.c:4128 #, c-format msgid "Are you sure you want to delete all tracks in %s?" msgstr "" #: ../src/viktrwlayer.c:4138 #, c-format msgid "Are you sure you want to delete all routes in %s?" msgstr "" #: ../src/viktrwlayer.c:4148 #, c-format msgid "Are you sure you want to delete all waypoints in %s?" msgstr "" #: ../src/viktrwlayer.c:4165 #, c-format msgid "Are you sure you want to delete the waypoint \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4178 #, c-format msgid "Are you sure you want to delete the track \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4191 #, c-format msgid "Are you sure you want to delete the route \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4351 ../src/viktrwlayer.c:4922 msgid "" "Converting a track to a route removes extra track data such as segments, " "timestamps, etc...\n" "Do you want to continue?" msgstr "" #: ../src/viktrwlayer.c:4711 msgid "Failed. No other tracks with timestamps in this layer found" msgstr "" #: ../src/viktrwlayer.c:4713 msgid "Failed. No other tracks without timestamps in this layer found" msgstr "" #: ../src/viktrwlayer.c:4732 msgid "Merge with..." msgstr "" #: ../src/viktrwlayer.c:4733 msgid "Select route to merge with" msgstr "" #: ../src/viktrwlayer.c:4733 msgid "Select track to merge with" msgstr "" #: ../src/viktrwlayer.c:4818 ../src/viktrwlayer.c:4895 msgid "Append Route" msgstr "" #: ../src/viktrwlayer.c:4818 ../src/viktrwlayer.c:4895 msgid "Append Track" msgstr "" #: ../src/viktrwlayer.c:4819 msgid "Select the route to append after the current route" msgstr "" #: ../src/viktrwlayer.c:4820 msgid "Select the track to append after the current track" msgstr "" #: ../src/viktrwlayer.c:4896 msgid "Select the track to append after the current route" msgstr "" #: ../src/viktrwlayer.c:4897 msgid "Select the route to append after the current track" msgstr "" #: ../src/viktrwlayer.c:4957 #, c-format msgid "%d segment merged" msgid_plural "%d segments merged" msgstr[0] "" msgstr[1] "" #: ../src/viktrwlayer.c:4973 msgid "Failed. This track does not have timestamp" msgstr "" #: ../src/viktrwlayer.c:4985 msgid "Failed. No other track in this layer has timestamp" msgstr "" #: ../src/viktrwlayer.c:4992 msgid "Merge Threshold..." msgstr "" #: ../src/viktrwlayer.c:4993 msgid "Merge when time between tracks less than:" msgstr "" #: ../src/viktrwlayer.c:5128 msgid "Split Threshold..." msgstr "" #: ../src/viktrwlayer.c:5129 msgid "Split when time between trackpoints exceeds:" msgstr "" #: ../src/viktrwlayer.c:5205 msgid "Split Every Nth Point" msgstr "" #: ../src/viktrwlayer.c:5206 msgid "Split on every Nth point:" msgstr "" #: ../src/viktrwlayer.c:5312 msgid "Can not split track as it has no segments" msgstr "" #: ../src/viktrwlayer.c:5340 ../src/viktrwlayer.c:5370 #, c-format msgid "Deleted %ld point" msgid_plural "Deleted %ld points" msgstr[0] "" msgstr[1] "" #: ../src/viktrwlayer.c:5531 msgid "Internal Error in vik_trw_layer_uniquify_tracks" msgstr "" #: ../src/viktrwlayer.c:5588 ../src/viktrwlayer.c:5635 #: ../src/viktrwlayer.c:5814 msgid "" "Multiple entries with the same name exist. This method only works with " "unique names. Force unique names now?" msgstr "" #: ../src/viktrwlayer.c:5599 msgid "No tracks found" msgstr "" #: ../src/viktrwlayer.c:5607 ../src/viktrwlayer.c:5654 #: ../src/viktrwlayer.c:5834 msgid "Delete Selection" msgstr "" #: ../src/viktrwlayer.c:5608 msgid "Select tracks to delete" msgstr "" #: ../src/viktrwlayer.c:5646 msgid "No routes found" msgstr "" #: ../src/viktrwlayer.c:5655 msgid "Select routes to delete" msgstr "" #: ../src/viktrwlayer.c:5761 msgid "Internal Error in vik_trw_layer_uniquify_waypoints" msgstr "" #: ../src/viktrwlayer.c:5824 msgid "No waypoints found" msgstr "" #: ../src/viktrwlayer.c:5835 msgid "Select waypoints to delete" msgstr "" #: ../src/viktrwlayer.c:5896 #, c-format msgid "" "A waypoint with the name \"%s\" already exists. Really rename to the same " "name?" msgstr "" #: ../src/viktrwlayer.c:5926 #, c-format msgid "" "A track with the name \"%s\" already exists. Really rename to the same name?" msgstr "" #: ../src/viktrwlayer.c:5963 #, c-format msgid "" "A route with the name \"%s\" already exists. Really rename to the same name?" msgstr "" #: ../src/viktrwlayer.c:6085 ../src/viktrwlayer.c:6337 msgid "_Goto" msgstr "" #: ../src/viktrwlayer.c:6104 msgid "_Visit Geocache Webpage" msgstr "" #: ../src/viktrwlayer.c:6123 msgid "_Show Picture..." msgstr "" #: ../src/viktrwlayer.c:6131 msgid "Update Geotag on _Image" msgstr "" #: ../src/viktrwlayer.c:6137 msgid "_Update" msgstr "" #: ../src/viktrwlayer.c:6142 msgid "Update and _Keep File Timestamp" msgstr "" #: ../src/viktrwlayer.c:6153 msgid "Visit _Webpage" msgstr "" #: ../src/viktrwlayer.c:6184 msgid "_New Waypoint..." msgstr "" #: ../src/viktrwlayer.c:6193 msgid "_View All Waypoints" msgstr "" #: ../src/viktrwlayer.c:6205 msgid "Delete _All Waypoints" msgstr "" #: ../src/viktrwlayer.c:6211 msgid "_Delete Waypoints From Selection..." msgstr "" #: ../src/viktrwlayer.c:6233 msgid "_View All Tracks" msgstr "" #: ../src/viktrwlayer.c:6239 msgid "_New Track" msgstr "" #: ../src/viktrwlayer.c:6247 msgid "Delete _All Tracks" msgstr "" #: ../src/viktrwlayer.c:6253 msgid "_Delete Tracks From Selection..." msgstr "" #: ../src/viktrwlayer.c:6276 msgid "_View All Routes" msgstr "" #: ../src/viktrwlayer.c:6282 msgid "_New Route" msgstr "" #: ../src/viktrwlayer.c:6327 msgid "_View Track" msgstr "" #: ../src/viktrwlayer.c:6329 msgid "_View Route" msgstr "" #: ../src/viktrwlayer.c:6343 msgid "_Startpoint" msgstr "" #: ../src/viktrwlayer.c:6349 msgid "\"_Center\"" msgstr "" #: ../src/viktrwlayer.c:6355 msgid "_Endpoint" msgstr "" #: ../src/viktrwlayer.c:6361 msgid "_Highest Altitude" msgstr "" #: ../src/viktrwlayer.c:6367 msgid "_Lowest Altitude" msgstr "" #: ../src/viktrwlayer.c:6375 msgid "_Maximum Speed" msgstr "" #: ../src/viktrwlayer.c:6384 msgid "Co_mbine" msgstr "" #: ../src/viktrwlayer.c:6392 msgid "_Merge By Time..." msgstr "" #: ../src/viktrwlayer.c:6397 msgid "Merge _Segments" msgstr "" #: ../src/viktrwlayer.c:6403 msgid "Merge _With Other Tracks..." msgstr "" #: ../src/viktrwlayer.c:6409 msgid "_Append Track..." msgstr "" #: ../src/viktrwlayer.c:6411 msgid "_Append Route..." msgstr "" #: ../src/viktrwlayer.c:6417 msgid "Append _Route..." msgstr "" #: ../src/viktrwlayer.c:6419 msgid "Append _Track..." msgstr "" #: ../src/viktrwlayer.c:6426 msgid "_Split" msgstr "" #: ../src/viktrwlayer.c:6434 msgid "_Split By Time..." msgstr "" #. ATM always enable this entry - don't want to have to analyse the track before displaying the menu - to keep the menu speedy #: ../src/viktrwlayer.c:6440 msgid "Split Se_gments" msgstr "" #: ../src/viktrwlayer.c:6446 msgid "Split By _Number of Points..." msgstr "" #: ../src/viktrwlayer.c:6451 msgid "Split at _Trackpoint" msgstr "" #: ../src/viktrwlayer.c:6460 msgid "Delete Poi_nts" msgstr "" #: ../src/viktrwlayer.c:6466 msgid "Delete Points With The Same _Position" msgstr "" #: ../src/viktrwlayer.c:6471 msgid "Delete Points With The Same _Time" msgstr "" #: ../src/viktrwlayer.c:6477 msgid "_Reverse Track" msgstr "" #: ../src/viktrwlayer.c:6479 msgid "_Reverse Route" msgstr "" #: ../src/viktrwlayer.c:6488 msgid "Down_load Maps Along Track..." msgstr "" #: ../src/viktrwlayer.c:6490 msgid "Down_load Maps Along Route..." msgstr "" #: ../src/viktrwlayer.c:6497 msgid "_Apply DEM Data" msgstr "" #: ../src/viktrwlayer.c:6504 msgid "_Export Track as GPX..." msgstr "" #: ../src/viktrwlayer.c:6506 msgid "_Export Route as GPX..." msgstr "" #: ../src/viktrwlayer.c:6513 msgid "E_xtend Track End" msgstr "" #: ../src/viktrwlayer.c:6515 msgid "E_xtend Route End" msgstr "" #: ../src/viktrwlayer.c:6522 msgid "C_onvert to a Route" msgstr "" #: ../src/viktrwlayer.c:6524 msgid "C_onvert to a Track" msgstr "" #: ../src/viktrwlayer.c:6532 msgid "Extend _Using Route Finder" msgstr "" #: ../src/viktrwlayer.c:6548 msgid "_Upload to GPS..." msgstr "" #: ../src/viktrwlayer.c:6559 msgid "_View Google Directions" msgstr "" #: ../src/viktrwlayer.c:6579 msgid "Use with _Filter" msgstr "" #: ../src/viktrwlayer.c:6612 msgid "_Edit Trackpoint" msgstr "" #: ../src/viktrwlayer.c:7524 #, c-format msgid " - Gain %dm:Loss %dm" msgstr "" #: ../src/viktrwlayer.c:7526 #, c-format msgid " - Gain %dft:Loss %dft" msgstr "" #: ../src/viktrwlayer.c:7531 #, c-format msgid " - Bearing %3.1f° - Step %s" msgstr "" #: ../src/viktrwlayer.c:8124 #, c-format msgid "Could not launch %s to open file." msgstr "" #: ../src/viktrwlayer.c:8205 #, c-format msgid "Creating %d Image Thumbnails..." msgstr "" #: ../src/viktrwlayer.c:8524 msgid "No map layer in use. Create one first" msgstr "" #: ../src/viktrwlayer_propwin.c:898 ../src/viktrwlayer_propwin.c:1155 #, c-format msgid "%.1f kph" msgstr "" #: ../src/viktrwlayer_propwin.c:901 ../src/viktrwlayer_propwin.c:1158 #, c-format msgid "%.1f mph" msgstr "" #: ../src/viktrwlayer_propwin.c:904 ../src/viktrwlayer_propwin.c:1161 #, c-format msgid "%.1f knots" msgstr "" #. VIK_UNITS_SPEED_METRES_PER_SECOND: #: ../src/viktrwlayer_propwin.c:908 ../src/viktrwlayer_propwin.c:1165 #, c-format msgid "%.1f m/s" msgstr "" #: ../src/viktrwlayer_propwin.c:1745 #, c-format msgid "%.1f miles" msgstr "" #: ../src/viktrwlayer_propwin.c:1747 #, c-format msgid "%.1f km" msgstr "" #: ../src/viktrwlayer_propwin.c:2681 msgid "Failed spliting track. Track unchanged" msgstr "" #: ../src/viktrwlayer_propwin.c:2779 ../src/viktrwlayer_propwin.c:3178 #, c-format msgid "%s - Track Properties" msgstr "" #: ../src/viktrwlayer_propwin.c:2784 msgid "Split at _Marker" msgstr "" #: ../src/viktrwlayer_propwin.c:2785 msgid "Split _Segments" msgstr "" #: ../src/viktrwlayer_propwin.c:2786 msgid "_Reverse" msgstr "" #: ../src/viktrwlayer_propwin.c:2787 msgid "_Delete Dupl." msgstr "" #: ../src/viktrwlayer_propwin.c:2813 msgid "Comment:" msgstr "" #: ../src/viktrwlayer_propwin.c:2814 msgid "Description:" msgstr "" #: ../src/viktrwlayer_propwin.c:2815 msgid "Track Length:" msgstr "" #: ../src/viktrwlayer_propwin.c:2816 msgid "Trackpoints:" msgstr "" #: ../src/viktrwlayer_propwin.c:2817 msgid "Segments:" msgstr "" #: ../src/viktrwlayer_propwin.c:2818 msgid "Duplicate Points:" msgstr "" #: ../src/viktrwlayer_propwin.c:2819 msgid "Max Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:2820 msgid "Avg. Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:2821 msgid "Moving Avg. Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:2822 msgid "Avg. Dist. Between TPs:" msgstr "" #: ../src/viktrwlayer_propwin.c:2823 msgid "Elevation Range:" msgstr "" #: ../src/viktrwlayer_propwin.c:2824 msgid "Total Elevation Gain/Loss:" msgstr "" #: ../src/viktrwlayer_propwin.c:2825 msgid "Start:" msgstr "" #: ../src/viktrwlayer_propwin.c:2826 msgid "End:" msgstr "" #: ../src/viktrwlayer_propwin.c:2827 msgid "Duration:" msgstr "" #: ../src/viktrwlayer_propwin.c:2828 msgid "Color:" msgstr "" #: ../src/viktrwlayer_propwin.c:2877 ../src/viktrwlayer_propwin.c:2901 #: ../src/viktrwlayer_propwin.c:2929 ../src/viktrwlayer_propwin.c:2966 #: ../src/viktrwlayer_propwin.c:2984 ../src/viktrwlayer_propwin.c:3034 #: ../src/viktrwlayer_propwin.c:3035 ../src/viktrwlayer_propwin.c:3036 #: ../src/viktrwlayer_propwin.c:3062 ../src/viktrwlayer_propwin.c:3063 #: ../src/viktrwlayer_propwin.c:3078 ../src/viktrwlayer_propwin.c:3079 #: ../src/viktrwlayer_propwin.c:3092 ../src/viktrwlayer_propwin.c:3093 #: ../src/viktrwlayer_propwin.c:3106 ../src/viktrwlayer_propwin.c:3107 #: ../src/viktrwlayer_propwin.c:3120 ../src/viktrwlayer_propwin.c:3121 #: ../src/viktrwlayer_propwin.c:3134 ../src/viktrwlayer_propwin.c:3135 #, c-format msgid "No Data" msgstr "" #: ../src/viktrwlayer_propwin.c:3031 #, c-format msgid "%d minutes" msgstr "" #: ../src/viktrwlayer_propwin.c:3058 msgid "Statistics" msgstr "" #: ../src/viktrwlayer_propwin.c:3064 msgid "Show D_EM" msgstr "" #: ../src/viktrwlayer_propwin.c:3065 ../src/viktrwlayer_propwin.c:3080 #: ../src/viktrwlayer_propwin.c:3094 ../src/viktrwlayer_propwin.c:3136 msgid "Show _GPS Speed" msgstr "" #: ../src/viktrwlayer_propwin.c:3067 ../src/viktrwlayer_propwin.c:3082 #: ../src/viktrwlayer_propwin.c:3110 ../src/viktrwlayer_propwin.c:3138 msgid "Track Distance:" msgstr "" #: ../src/viktrwlayer_propwin.c:3068 ../src/viktrwlayer_propwin.c:3125 msgid "Track Height:" msgstr "" #: ../src/viktrwlayer_propwin.c:3073 msgid "Elevation-distance" msgstr "" #: ../src/viktrwlayer_propwin.c:3083 msgid "Track Gradient:" msgstr "" #: ../src/viktrwlayer_propwin.c:3087 msgid "Gradient-distance" msgstr "" #: ../src/viktrwlayer_propwin.c:3096 ../src/viktrwlayer_propwin.c:3111 #: ../src/viktrwlayer_propwin.c:3124 msgid "Track Time:" msgstr "" #: ../src/viktrwlayer_propwin.c:3097 ../src/viktrwlayer_propwin.c:3139 msgid "Track Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:3101 msgid "Speed-time" msgstr "" #: ../src/viktrwlayer_propwin.c:3108 ../src/viktrwlayer_propwin.c:3122 msgid "Show S_peed" msgstr "" #: ../src/viktrwlayer_propwin.c:3115 msgid "Distance-time" msgstr "" #: ../src/viktrwlayer_propwin.c:3129 msgid "Elevation-time" msgstr "" #: ../src/viktrwlayer_propwin.c:3143 msgid "Speed-distance" msgstr "" #: ../src/viktrwlayer_tpwin.c:118 msgid "Part of Track:" msgstr "" #: ../src/viktrwlayer_tpwin.c:119 msgid "Latitude:" msgstr "" #: ../src/viktrwlayer_tpwin.c:120 msgid "Longitude:" msgstr "" #: ../src/viktrwlayer_tpwin.c:121 msgid "Altitude:" msgstr "" #: ../src/viktrwlayer_tpwin.c:122 msgid "Timestamp:" msgstr "" #: ../src/viktrwlayer_tpwin.c:123 msgid "Time:" msgstr "" #: ../src/viktrwlayer_tpwin.c:124 msgid "Distance Difference:" msgstr "" #: ../src/viktrwlayer_tpwin.c:125 msgid "Time Difference:" msgstr "" #: ../src/viktrwlayer_tpwin.c:126 msgid "\"Speed\" Between:" msgstr "" #: ../src/viktrwlayer_tpwin.c:127 msgid "VDOP:" msgstr "" #: ../src/viktrwlayer_tpwin.c:128 msgid "HDOP:" msgstr "" #: ../src/viktrwlayer_tpwin.c:129 msgid "PDOP:" msgstr "" #: ../src/viktrwlayer_tpwin.c:130 msgid "SAT/FIX:" msgstr "" #: ../src/viktrwlayer_tpwin.c:139 msgid "Trackpoint" msgstr "" #: ../src/viktrwlayer_tpwin.c:142 msgid "_Insert After" msgstr "" #: ../src/viktrwlayer_tpwin.c:144 msgid "Split Here" msgstr "" #: ../src/viktrwlayer_geotag.c:446 #, c-format msgid "Geotagging %d Images..." msgstr "" #: ../src/viktrwlayer_geotag.c:510 msgid "Geotag Images" msgstr "" #: ../src/viktrwlayer_geotag.c:516 msgid "Images" msgstr "" #: ../src/viktrwlayer_geotag.c:520 msgid "Overwrite Existing Waypoints:" msgstr "" #: ../src/viktrwlayer_geotag.c:523 msgid "Overwrite Existing GPS Information:" msgstr "" #: ../src/viktrwlayer_geotag.c:525 msgid "Keep File Modification Timestamp:" msgstr "" #: ../src/viktrwlayer_geotag.c:555 msgid "Create Waypoints:" msgstr "" #: ../src/viktrwlayer_geotag.c:563 msgid "Write EXIF:" msgstr "" #: ../src/viktrwlayer_geotag.c:575 msgid "Interpolate Between Track Segments:" msgstr "" #: ../src/viktrwlayer_geotag.c:579 msgid "Image Time Offset (Seconds):" msgstr "" #: ../src/viktrwlayer_geotag.c:581 msgid "" "The number of seconds to ADD to the photos time to make it match the GPS " "data. Calculate this with (GPS - Photo). Can be negative or positive. Useful " "to adjust times when a camera's timestamp was incorrect." msgstr "" #: ../src/viktrwlayer_geotag.c:584 msgid "Image Timezone:" msgstr "" #: ../src/viktrwlayer_geotag.c:586 msgid "" "The timezone that was used when the images were created. For example, if a " "camera is set to AWST or +8:00 hours. Enter +8:00 here so that the correct " "adjustment to the images' time can be made. GPS data is always in UTC." msgstr "" #: ../src/viktrwlayer_geotag.c:590 #, c-format msgid "Using track: %s" msgstr "" #: ../src/viktrwlayer_geotag.c:592 #, c-format msgid "Using all tracks in: %s" msgstr "" #: ../src/vikstatus.c:105 msgid "Current zoom level. Click to select a new one." msgstr "" #: ../src/vikwaypoint.c:34 msgid "Waypoint" msgstr "" #. TODO get rid of this as this is unnecessary duplication... #: ../src/vikwindow.c:221 msgid "Pan" msgstr "" #: ../src/vikwindow.c:221 msgid "Zoom" msgstr "" #: ../src/vikwindow.c:221 msgid "Ruler" msgstr "" #: ../src/vikwindow.c:221 msgid "Select" msgstr "" #. Create tooltip #: ../src/vikwindow.c:440 msgid "Select zoom level" msgstr "" #: ../src/vikwindow.c:645 #, c-format msgid "" "Do you want to save the changes you made to the document \"%s\"?\n" "\n" "Your changes will be lost if you don't save them." msgstr "" #: ../src/vikwindow.c:649 msgid "Don't Save" msgstr "" #: ../src/vikwindow.c:696 msgid "mpp" msgstr "" #: ../src/vikwindow.c:696 msgid "pixelfact" msgstr "" #: ../src/vikwindow.c:861 #, c-format msgid "%s %s %dm" msgstr "" #: ../src/vikwindow.c:863 #, c-format msgid "%s %s %dft" msgstr "" #: ../src/vikwindow.c:866 #, c-format msgid "%s %s" msgstr "" #. NB Ctrl+Shift+R is used for Refresh (deemed more important), so use 'U' instead #: ../src/vikwindow.c:1254 msgid "_Ruler" msgstr "" #: ../src/vikwindow.c:1254 msgid "Ruler Tool" msgstr "" #: ../src/vikwindow.c:1502 ../src/vikwindow.c:3138 msgid "_Zoom" msgstr "" #: ../src/vikwindow.c:1502 msgid "Zoom Tool" msgstr "" #: ../src/vikwindow.c:1547 ../src/vikwindow.c:3139 msgid "_Pan" msgstr "" #: ../src/vikwindow.c:1547 msgid "Pan Tool" msgstr "" #: ../src/vikwindow.c:1664 msgid "_Select" msgstr "" #: ../src/vikwindow.c:1664 msgid "Select Tool" msgstr "" #: ../src/vikwindow.c:1809 msgid "You must select a layer to show its properties." msgstr "" #. No error to show, so unlikely this will get called #: ../src/vikwindow.c:1824 msgid "The help system is not available." msgstr "" #. Main error path #: ../src/vikwindow.c:1827 #, c-format msgid "" "Help is not available because: %s.\n" "Ensure a Mime Type ghelp handler program is installed (e.g. yelp)." msgstr "" #: ../src/vikwindow.c:1850 msgid "You must select a layer to delete." msgstr "" #: ../src/vikwindow.c:2087 msgid "Untitled" msgstr "" #: ../src/vikwindow.c:2194 #, c-format msgid "Unable to add '%s' to the list of recently used documents" msgstr "" #: ../src/vikwindow.c:2208 msgid "The file you requested could not be opened." msgstr "" #: ../src/vikwindow.c:2211 msgid "" "GPSBabel is required to load files of this type or GPSBabel encountered " "problems." msgstr "" #: ../src/vikwindow.c:2214 #, c-format msgid "Unable to load malformed GPX file %s" msgstr "" #: ../src/vikwindow.c:2217 #, c-format msgid "Unsupported file type for %s" msgstr "" #. Since we can process .vik files with issues just show a warning in the status bar #. Not that a user can do much about it... or tells them what this issue is yet... #: ../src/vikwindow.c:2223 #, c-format msgid "WARNING: issues encountered loading %s" msgstr "" #: ../src/vikwindow.c:2278 msgid "Please select a GPS data file to open. " msgstr "" #: ../src/vikwindow.c:2288 msgid "Geocaching" msgstr "" #: ../src/vikwindow.c:2294 msgid "Google Earth" msgstr "" #: ../src/vikwindow.c:2299 msgid "GPX" msgstr "" #: ../src/vikwindow.c:2304 ../src/vikwindow.c:2387 #: ../src/viking.desktop.in.h:1 msgid "Viking" msgstr "" #: ../src/vikwindow.c:2374 msgid "Save as Viking File." msgstr "" #. Try harder... #: ../src/vikwindow.c:2619 ../src/vikwindow.c:2625 msgid "Generating image file..." msgstr "" #: ../src/vikwindow.c:2647 msgid "" "Failed to generate internal image.\n" "\n" "Try creating a smaller image." msgstr "" #: ../src/vikwindow.c:2655 msgid "Failed to generate image file." msgstr "" #. Success #: ../src/vikwindow.c:2660 msgid "Image file generated." msgstr "" #: ../src/vikwindow.c:2764 msgid "" "Viewable region outside allowable pixel size bounds for image. Clipping " "width/height values." msgstr "" #: ../src/vikwindow.c:2789 #, c-format msgid "Total area: %ldm x %ldm (%.3f sq. km)" msgstr "" #: ../src/vikwindow.c:2792 #, c-format msgid "Total area: %ldm x %ldm (%.3f sq. miles)" msgstr "" #: ../src/vikwindow.c:2813 msgid "Save Image" msgstr "" #: ../src/vikwindow.c:2834 msgid "PNG" msgstr "" #: ../src/vikwindow.c:2857 msgid "You must be in UTM mode to use this feature" msgstr "" #: ../src/vikwindow.c:2862 msgid "Choose a directory to hold images" msgstr "" #. todo: default for answers inside VikWindow or static (thruout instance) #: ../src/vikwindow.c:2883 msgid "Save to Image File" msgstr "" #: ../src/vikwindow.c:2900 msgid "Width (pixels):" msgstr "" #: ../src/vikwindow.c:2902 msgid "Height (pixels):" msgstr "" #: ../src/vikwindow.c:2905 msgid "" "WARNING: USING LARGE IMAGES OVER 10000x10000\n" "MAY CRASH THE PROGRAM!" msgstr "" #: ../src/vikwindow.c:2907 msgid "Zoom (meters per pixel):" msgstr "" #: ../src/vikwindow.c:2921 msgid "Area in current viewable window" msgstr "" #: ../src/vikwindow.c:2931 msgid "Save as PNG" msgstr "" #: ../src/vikwindow.c:2932 msgid "Save as JPEG" msgstr "" #: ../src/vikwindow.c:2954 msgid "East-west image tiles:" msgstr "" #: ../src/vikwindow.c:2956 msgid "North-south image tiles:" msgstr "" #: ../src/vikwindow.c:3097 msgid "Choose a background color" msgstr "" #: ../src/vikwindow.c:3113 msgid "Choose a track highlight color" msgstr "" #: ../src/vikwindow.c:3134 msgid "_File" msgstr "" #: ../src/vikwindow.c:3135 msgid "_Edit" msgstr "" #: ../src/vikwindow.c:3136 msgid "_View" msgstr "" #: ../src/vikwindow.c:3137 msgid "_Show" msgstr "" #: ../src/vikwindow.c:3140 msgid "_Layers" msgstr "" #: ../src/vikwindow.c:3141 msgid "_Tools" msgstr "" #: ../src/vikwindow.c:3142 msgid "_Webtools" msgstr "" #: ../src/vikwindow.c:3143 ../src/vikwindow.c:3206 msgid "_Help" msgstr "" #: ../src/vikwindow.c:3145 msgid "New file" msgstr "" #: ../src/vikwindow.c:3146 msgid "_Open..." msgstr "" #: ../src/vikwindow.c:3146 msgid "Open a file" msgstr "" #: ../src/vikwindow.c:3147 msgid "Open _Recent File" msgstr "" #: ../src/vikwindow.c:3148 msgid "Append _File..." msgstr "" #: ../src/vikwindow.c:3148 msgid "Append data from a different file" msgstr "" #: ../src/vikwindow.c:3149 msgid "A_cquire" msgstr "" #: ../src/vikwindow.c:3150 msgid "Transfer data from a GPS device" msgstr "" #: ../src/vikwindow.c:3151 msgid "Import File With GPS_Babel..." msgstr "" #: ../src/vikwindow.c:3151 msgid "Import file via GPSBabel converter" msgstr "" #: ../src/vikwindow.c:3153 msgid "Google _Directions..." msgstr "" #: ../src/vikwindow.c:3153 msgid "Get driving directions from Google" msgstr "" #: ../src/vikwindow.c:3156 msgid "_OSM Traces..." msgstr "" #: ../src/vikwindow.c:3156 msgid "Get traces from OpenStreetMap" msgstr "" #: ../src/vikwindow.c:3157 msgid "_My OSM Traces..." msgstr "" #: ../src/vikwindow.c:3157 msgid "Get Your Own Traces from OpenStreetMap" msgstr "" #: ../src/vikwindow.c:3160 msgid "Geo_caches..." msgstr "" #: ../src/vikwindow.c:3160 msgid "Get Geocaches from geocaching.com" msgstr "" #: ../src/vikwindow.c:3163 msgid "Create waypoints from geotagged images" msgstr "" #: ../src/vikwindow.c:3166 msgid "Create waypoints from Wikipedia items in the current view" msgstr "" #: ../src/vikwindow.c:3168 msgid "_Save" msgstr "" #: ../src/vikwindow.c:3168 msgid "Save the file" msgstr "" #: ../src/vikwindow.c:3169 msgid "Save _As..." msgstr "" #: ../src/vikwindow.c:3169 msgid "Save the file under different name" msgstr "" #: ../src/vikwindow.c:3170 msgid "_Generate Image File..." msgstr "" #: ../src/vikwindow.c:3170 msgid "Save a snapshot of the workspace into a file" msgstr "" #: ../src/vikwindow.c:3171 msgid "Generate _Directory of Images..." msgstr "" #: ../src/vikwindow.c:3171 msgid "FIXME:IMGDIR" msgstr "" #: ../src/vikwindow.c:3174 msgid "_Print..." msgstr "" #: ../src/vikwindow.c:3174 msgid "Print maps" msgstr "" #: ../src/vikwindow.c:3177 msgid "E_xit" msgstr "" #: ../src/vikwindow.c:3177 msgid "Exit the program" msgstr "" #: ../src/vikwindow.c:3178 msgid "Save and Exit" msgstr "" #: ../src/vikwindow.c:3178 msgid "Save and Exit the program" msgstr "" #: ../src/vikwindow.c:3180 msgid "Go to the _Default Location" msgstr "" #: ../src/vikwindow.c:3180 msgid "Go to the default location" msgstr "" #: ../src/vikwindow.c:3181 msgid "Go to _Location..." msgstr "" #: ../src/vikwindow.c:3181 msgid "Go to address/place using text search" msgstr "" #: ../src/vikwindow.c:3182 msgid "_Go to Lat/Lon..." msgstr "" #: ../src/vikwindow.c:3182 msgid "Go to arbitrary lat/lon coordinate" msgstr "" #: ../src/vikwindow.c:3183 msgid "Go to UTM..." msgstr "" #: ../src/vikwindow.c:3183 msgid "Go to arbitrary UTM coordinate" msgstr "" #: ../src/vikwindow.c:3184 msgid "_Refresh" msgstr "" #: ../src/vikwindow.c:3184 msgid "Refresh any maps displayed" msgstr "" #: ../src/vikwindow.c:3185 msgid "Set _Highlight Color..." msgstr "" #: ../src/vikwindow.c:3186 msgid "Set Bac_kground Color..." msgstr "" #: ../src/vikwindow.c:3187 msgid "Zoom _In" msgstr "" #: ../src/vikwindow.c:3188 msgid "Zoom _Out" msgstr "" #: ../src/vikwindow.c:3189 msgid "Zoom _To..." msgstr "" #: ../src/vikwindow.c:3190 msgid "Pan _North" msgstr "" #: ../src/vikwindow.c:3191 msgid "Pan _East" msgstr "" #: ../src/vikwindow.c:3192 msgid "Pan _South" msgstr "" #: ../src/vikwindow.c:3193 msgid "Pan _West" msgstr "" #: ../src/vikwindow.c:3194 msgid "Background _Jobs" msgstr "" #: ../src/vikwindow.c:3196 msgid "Cu_t" msgstr "" #: ../src/vikwindow.c:3197 msgid "_Copy" msgstr "" #: ../src/vikwindow.c:3198 msgid "_Paste" msgstr "" #: ../src/vikwindow.c:3199 msgid "_Delete" msgstr "" #: ../src/vikwindow.c:3200 msgid "Delete All" msgstr "" #: ../src/vikwindow.c:3201 msgid "_Flush Map Cache" msgstr "" #: ../src/vikwindow.c:3202 msgid "_Set the Default Location" msgstr "" #: ../src/vikwindow.c:3202 msgid "Set the Default Location to the current position" msgstr "" #: ../src/vikwindow.c:3203 msgid "_Preferences" msgstr "" #: ../src/vikwindow.c:3204 msgid "_Properties" msgstr "" #: ../src/vikwindow.c:3207 msgid "_About" msgstr "" #: ../src/vikwindow.c:3213 msgid "_UTM Mode" msgstr "" #: ../src/vikwindow.c:3214 msgid "_Expedia Mode" msgstr "" #: ../src/vikwindow.c:3215 msgid "_Mercator Mode" msgstr "" #: ../src/vikwindow.c:3216 msgid "Lat_/Lon Mode" msgstr "" #: ../src/vikwindow.c:3220 msgid "Show _Scale" msgstr "" #: ../src/vikwindow.c:3220 msgid "Show Scale" msgstr "" #: ../src/vikwindow.c:3221 msgid "Show _Center Mark" msgstr "" #: ../src/vikwindow.c:3221 msgid "Show Center Mark" msgstr "" #: ../src/vikwindow.c:3222 msgid "Show _Highlight" msgstr "" #: ../src/vikwindow.c:3222 msgid "Show Highlight" msgstr "" #: ../src/vikwindow.c:3223 msgid "_Full Screen" msgstr "" #: ../src/vikwindow.c:3223 msgid "Activate full screen mode" msgstr "" #: ../src/vikwindow.c:3224 msgid "Show Side _Panel" msgstr "" #: ../src/vikwindow.c:3224 msgid "Show Side Panel" msgstr "" #: ../src/vikwindow.c:3225 msgid "Show Status_bar" msgstr "" #: ../src/vikwindow.c:3225 msgid "Show Statusbar" msgstr "" #: ../src/vikwindow.c:3226 msgid "Show _Toolbar" msgstr "" #: ../src/vikwindow.c:3226 msgid "Show Toolbar" msgstr "" #: ../src/vikwindow.c:3227 msgid "Show _Menu" msgstr "" #: ../src/vikwindow.c:3227 msgid "Show Menu" msgstr "" #: ../src/viking.desktop.in.h:2 msgid "GPS Data Manager" msgstr "" #: ../src/viking.desktop.in.h:3 msgid "Map Based GPS Data Manager (live data capable)." msgstr "" #: ../src/libjpeg/jpeg-data.c:206 msgid "Data does not follow JPEG specification." msgstr "" #: ../src/libjpeg/jpeg-data.c:291 #, c-format msgid "Path '%s' invalid." msgstr "" #: ../src/libjpeg/jpeg-data.c:309 #, c-format msgid "Could not read '%s'." msgstr "" viking-1.4.2/po/en_GB.po0000644000175000017500000021501112175546146011671 00000000000000# English (United Kingdom) translation for viking # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the viking package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: viking\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-02-04 23:29+0100\n" "PO-Revision-Date: 2013-02-05 00:41+0000\n" "Last-Translator: Rob Norris \n" "Language-Team: English (United Kingdom) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2013-03-23 17:12+0000\n" "X-Generator: Launchpad (build 16540)\n" "Language: \n" #: ../src/acquire.c:103 ../src/vikgpslayer.c:1185 msgid "Done." msgstr "Done." #: ../src/acquire.c:114 msgid "No data." msgstr "" #: ../src/acquire.c:154 ../src/acquire.c:404 msgid "Error: acquisition failed." msgstr "Error: acquisition failed." #: ../src/acquire.c:341 msgid "Working..." msgstr "Working…" #. This shouldn't happen... #: ../src/acquire.c:394 msgid "" "Unable to create command\n" "Acquire method failed." msgstr "" #: ../src/acquire.c:486 msgid "_Filter" msgstr "" #: ../src/acquire.c:501 #, c-format msgid "Filter with %s" msgstr "" #: ../src/acquire.c:518 msgid "Filter" msgstr "" #: ../src/background.c:52 #, c-format msgid "%d items" msgstr "%d items" #: ../src/background.c:248 msgid "Job" msgstr "Job" #: ../src/background.c:252 msgid "Progress" msgstr "Progress" #: ../src/background.c:268 msgid "Viking Background Jobs" msgstr "Viking Background Jobs" #: ../src/bing.c:47 msgid "Bing" msgstr "" #. VIK_GTK_WINDOW_FROM_WIDGET(vp) #: ../src/bingmapsource.c:445 msgid "Bing attribution Loading" msgstr "" #: ../src/clipboard.c:95 msgid "paste failed" msgstr "paste failed" #: ../src/clipboard.c:105 msgid "wrong clipboard data size" msgstr "wrong clipboard data size" #: ../src/clipboard.c:124 #, c-format msgid "" "The clipboard contains sublayer data for %s layers. You must select a layer " "of this type to paste the clipboard data." msgstr "" #: ../src/clipboard.c:236 msgid "" "In order to paste a waypoint, please select an appropriate layer to paste " "into." msgstr "" #: ../src/dialog.c:52 msgid "Go to Lat/Lon" msgstr "" #: ../src/dialog.c:64 ../src/dialog.c:251 msgid "Latitude:" msgstr "" #: ../src/dialog.c:70 ../src/dialog.c:256 msgid "Longitude:" msgstr "" #: ../src/dialog.c:102 msgid "Go to UTM" msgstr "" #: ../src/dialog.c:115 msgid "Northing:" msgstr "" #: ../src/dialog.c:121 msgid "Easting:" msgstr "" #: ../src/dialog.c:128 msgid "Zone:" msgstr "" #: ../src/dialog.c:131 msgid "Letter:" msgstr "" #: ../src/dialog.c:199 msgid "Waypoint Properties" msgstr "" #: ../src/dialog.c:233 msgid "Name:" msgstr "" #: ../src/dialog.c:261 msgid "Altitude:" msgstr "" #: ../src/dialog.c:266 msgid "Comment:" msgstr "" #: ../src/dialog.c:274 ../src/osm-traces.c:437 msgid "Description:" msgstr "" #: ../src/dialog.c:277 msgid "Image:" msgstr "" #: ../src/dialog.c:282 msgid "Symbol:" msgstr "" #: ../src/dialog.c:291 msgid "(none)" msgstr "" #. TODO: other checks (isalpha or whatever ) #: ../src/dialog.c:356 msgid "Please enter a name for the waypoint." msgstr "" #: ../src/dialog.c:529 ../src/geonamessearch.c:243 #: ../src/datasource_osm_my_traces.c:507 msgid "Nothing was selected" msgstr "" #: ../src/dialog.c:537 msgid "Add Route" msgstr "" #: ../src/dialog.c:537 msgid "Add Track" msgstr "" #: ../src/dialog.c:545 msgid "Route Name:" msgstr "" #: ../src/dialog.c:545 msgid "Track Name:" msgstr "" #: ../src/dialog.c:565 msgid "Please enter a name for the track." msgstr "" #: ../src/dialog.c:623 msgid "Zoom Factors..." msgstr "" #: ../src/dialog.c:637 msgid "Zoom factor (in meters per pixel):" msgstr "" #: ../src/dialog.c:638 msgid "X (easting): " msgstr "" #: ../src/dialog.c:639 msgid "Y (northing): " msgstr "" #: ../src/dialog.c:644 msgid "X and Y zoom factors must be equal" msgstr "" #: ../src/dialog.c:699 msgid "1 min" msgstr "" #: ../src/dialog.c:700 msgid "1 hour" msgstr "" #: ../src/dialog.c:701 msgid "1 day" msgstr "" #: ../src/dialog.c:702 msgid "Custom (in minutes):" msgstr "" #: ../src/dialog.c:808 msgid "GPS Data and Topo Analyzer, Explorer, and Manager." msgstr "" #: ../src/dialog.c:809 msgid "" "This program is free software; you can redistribute it and/or modify it " "under the terms of the GNU General Public License as published by the Free " "Software Foundation; either version 2 of the License, or (at your option) " "any later version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT " "ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or " "FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for " "more details.\n" "\n" "You should have received a copy of the GNU General Public License along with " "this program; if not, write to the Free Software Foundation, Inc., 59 Temple " "Place, Suite 330, Boston, MA 02111-1307, USA" msgstr "" #: ../src/dialog.c:837 msgid "Translation is coordinated on http://launchpad.net/viking" msgstr "" #: ../src/dialog.c:845 msgid "Download along track" msgstr "" #: ../src/dialog.c:851 msgid "Map type:" msgstr "" #: ../src/dialog.c:856 msgid "Zoom level:" msgstr "" #: ../src/dialog.c:896 #, c-format msgid "The map data is licensed: %s." msgstr "" #: ../src/dialog.c:899 #, c-format msgid "" "The data provided by '%s' are licensed under the following license: " "%s.\n" "Please, read the license before continuing." msgstr "" #: ../src/dialog.c:904 msgid "Open license" msgstr "" #: ../src/expedia.c:53 msgid "Expedia Street Maps" msgstr "" #: ../src/expedia.c:81 msgid "Invalid expedia altitude" msgstr "" #: ../src/expedia.c:112 #, c-format msgid "" "Couldn't open EXPEDIA image file (right after successful download! Please " "report and delete image file!): %s" msgstr "" #: ../src/expedia.c:125 #, c-format msgid "" "Couldn't save EXPEDIA image file (right after successful download! Please " "report and delete image file!): %s" msgstr "" #. * #. * See http://www.geonames.org/export/wikipedia-webservice.html#wikipediaBoundingBox #. #. Translators may wish to change this setting as appropriate to get Wikipedia articles in that language #: ../src/geonamessearch.c:46 msgid "en" msgstr "" #: ../src/geonamessearch.c:121 msgid "Search" msgstr "" #: ../src/geonamessearch.c:123 msgid "No entries found!" msgstr "" #. NB could allow columns to be shifted around by doing this after each new #. gtk_tree_view_column_set_reorderable ( column, TRUE ); #. However I don't think is that useful, so I haven't put it in #: ../src/geonamessearch.c:177 ../src/datasource_osm_my_traces.c:425 msgid "Name" msgstr "" #: ../src/geonamessearch.c:182 msgid "Feature" msgstr "" #: ../src/geonamessearch.c:187 ../src/datasource_osm_my_traces.c:440 msgid "Lat/Lon" msgstr "" #: ../src/geonamessearch.c:269 ../src/googlesearch.c:100 msgid "couldn't map temp file" msgstr "" #: ../src/globals.c:44 msgid "Degree format:" msgstr "" #: ../src/globals.c:48 msgid "Distance units:" msgstr "" #: ../src/globals.c:52 msgid "Speed units:" msgstr "" #: ../src/globals.c:56 msgid "Height units:" msgstr "" #: ../src/globals.c:60 msgid "Use large waypoint icons:" msgstr "" #: ../src/globals.c:64 msgid "Default latitude:" msgstr "" #: ../src/globals.c:67 msgid "Default longitude:" msgstr "" #: ../src/globals.c:73 msgid "Alphabetical" msgstr "" #: ../src/globals.c:73 ../src/datasource_osm_my_traces.c:435 msgid "Time" msgstr "" #: ../src/globals.c:76 msgid "KML File Export Units:" msgstr "" #: ../src/globals.c:77 msgid "GPX Track Order:" msgstr "" #: ../src/globals.c:82 msgid "Image Viewer:" msgstr "" #: ../src/globals.c:87 msgid "External GPX Program 1:" msgstr "" #: ../src/globals.c:88 msgid "External GPX Program 2:" msgstr "" #. Defaults for the options are setup here #: ../src/globals.c:96 msgid "General" msgstr "" #. New Tab #: ../src/globals.c:121 msgid "Export/External" msgstr "" #. Webtools #: ../src/google.c:36 msgid "Google" msgstr "" #: ../src/datasource_file.c:59 msgid "Import file with GPSBabel" msgstr "" #: ../src/datasource_file.c:60 msgid "Imported file" msgstr "" #. The file selector #: ../src/datasource_file.c:133 msgid "File:" msgstr "" #: ../src/datasource_file.c:134 msgid "File to import" msgstr "" #: ../src/datasource_file.c:141 msgid "All files" msgstr "" #. The file format selector #: ../src/datasource_file.c:148 msgid "File type:" msgstr "" #: ../src/datasource_file.c:193 #, c-format msgid "using babel args '%s' and file '%s'" msgstr "" #: ../src/datasource_gc.c:66 msgid "Download Geocaches" msgstr "" #: ../src/datasource_gc.c:67 msgid "Geocaching.com Caches" msgstr "" #: ../src/datasource_gc.c:84 msgid "geocaching.com username:" msgstr "" #: ../src/datasource_gc.c:85 msgid "geocaching.com password:" msgstr "" #: ../src/datasource_gc.c:126 #, c-format msgid "" "Can't find %s or %s in path! Check that you have installed it correctly." msgstr "" #: ../src/datasource_gc.c:188 msgid "Number geocaches:" msgstr "" #: ../src/datasource_gc.c:190 msgid "Centered around:" msgstr "Centred around:" #: ../src/datasource_gc.c:226 msgid "Broken input - using some defaults" msgstr "" #: ../src/datasource_geotag.c:51 msgid "Create Waypoints from Geotagged Images" msgstr "" #: ../src/datasource_geotag.c:52 msgid "Geotagged Images" msgstr "" #: ../src/datasource_geotag.c:102 ../src/vikwindow.c:2314 #: ../src/vikwindow.c:2382 ../src/vikwindow.c:2824 msgid "All" msgstr "" #: ../src/datasource_geotag.c:107 ../src/vikwindow.c:2829 msgid "JPG" msgstr "" #: ../src/datasource_geotag.c:165 #, c-format msgid "Unable to create waypoint from %s" msgstr "" #: ../src/datasource_google.c:49 ../src/datasource_google.c:50 msgid "Google Directions" msgstr "" #: ../src/datasource_google.c:77 msgid "From:" msgstr "" #: ../src/datasource_google.c:79 msgid "To:" msgstr "" #: ../src/datasource_gps.c:57 msgid "Acquire from GPS" msgstr "" #: ../src/datasource_gps.c:58 msgid "Acquired from GPS" msgstr "" #: ../src/datasource_gps.c:221 #, c-format msgid "using cmdline '%s' and file '%s'\n" msgstr "" #: ../src/datasource_gps.c:297 ../src/vikgpslayer.c:884 #, c-format msgid "Downloading %d waypoint..." msgid_plural "Downloading %d waypoints..." msgstr[0] "" msgstr[1] "" #: ../src/datasource_gps.c:298 ../src/vikgpslayer.c:885 #, c-format msgid "Downloading %d trackpoint..." msgid_plural "Downloading %d trackpoints..." msgstr[0] "" msgstr[1] "" #: ../src/datasource_gps.c:303 ../src/vikgpslayer.c:890 #, c-format msgid "Downloading %d routepoint..." msgid_plural "Downloading %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/datasource_gps.c:325 ../src/datasource_gps.c:326 #: ../src/datasource_gps.c:327 #, c-format msgid "Downloaded %d out of %d %s..." msgstr "" #: ../src/datasource_gps.c:331 ../src/datasource_gps.c:332 #: ../src/datasource_gps.c:333 #, c-format msgid "Downloaded %d %s." msgstr "" #: ../src/datasource_gps.c:347 ../src/vikgpslayer.c:968 #, c-format msgid "GPS Device: %s" msgstr "" #: ../src/datasource_gps.c:370 ../src/vikgpslayer.c:1042 #: ../src/vikgpslayer.c:1110 msgid "Status: Working..." msgstr "" #: ../src/datasource_gps.c:469 ../src/vikgpslayer.c:150 msgid "GPS Protocol:" msgstr "" #. List now assigned at runtime #: ../src/datasource_gps.c:488 ../src/vikgpslayer.c:151 msgid "Serial Port:" msgstr "" #: ../src/datasource_gps.c:509 msgid "" "Turn Off After Transfer\n" "(Garmin/NAViLink Only)" msgstr "" #: ../src/datasource_gps.c:512 msgid "Tracks:" msgstr "" #: ../src/datasource_gps.c:516 msgid "Routes:" msgstr "" #: ../src/datasource_gps.c:520 msgid "Waypoints:" msgstr "" #: ../src/datasource_gps.c:594 ../src/vikgpslayer.c:1305 msgid "GPS device: N/A" msgstr "" #: ../src/datasource_osm.c:52 ../src/datasource_osm.c:53 msgid "OSM traces" msgstr "" #: ../src/datasource_osm.c:80 msgid "Page number:" msgstr "" #: ../src/datasource_osm_my_traces.c:63 ../src/datasource_osm_my_traces.c:64 msgid "OSM My Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:108 msgid "Username:" msgstr "" #: ../src/datasource_osm_my_traces.c:113 msgid "The email or username used to login to OSM" msgstr "" #: ../src/datasource_osm_my_traces.c:115 ../src/osm-traces.c:413 msgid "Password:" msgstr "" #: ../src/datasource_osm_my_traces.c:120 msgid "The password used to login to OSM" msgstr "" #: ../src/datasource_osm_my_traces.c:430 msgid "Description" msgstr "" #: ../src/datasource_osm_my_traces.c:445 msgid "Privacy" msgstr "" #: ../src/datasource_osm_my_traces.c:452 msgid "Within Current View" msgstr "" #: ../src/datasource_osm_my_traces.c:518 msgid "GPS Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:520 msgid "None found!" msgstr "" #: ../src/datasource_osm_my_traces.c:629 msgid "My OSM Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:645 #, c-format msgid "Unable to get trace: %s" msgstr "" #: ../src/datasource_wikipedia.c:32 msgid "Create Waypoints from Wikipedia Articles" msgstr "" #: ../src/datasource_wikipedia.c:33 msgid "Wikipedia Waypoints" msgstr "" #: ../src/dem.c:65 ../src/dem.c:79 msgid "Invalid DEM" msgstr "" #: ../src/dem.c:121 msgid "Invalid DEM header" msgstr "" #: ../src/dem.c:190 ../src/dem.c:203 msgid "Incorrect DEM Class B record: expected 1" msgstr "" #: ../src/dem.c:360 #, c-format msgid "Couldn't map file %s: %s" msgstr "" #: ../src/download.c:112 msgid "Tile age (s):" msgstr "" #: ../src/download.c:233 #, c-format msgid "Download error: %s" msgstr "" #: ../src/download.c:313 msgid "couldn't open temp file" msgstr "" #: ../src/file.c:456 ../src/file.c:461 #, c-format msgid "Draw mode '%s' no more supported" msgstr "" #: ../src/geotag_exif.c:433 msgid "Not enough memory." msgstr "" #: ../src/geotag_exif.c:451 msgid "Setting a value for this tag is unsupported!" msgstr "" #: ../src/geotag_exif.c:470 #, c-format msgid "Too few components specified (need %d, found %d)\n" msgstr "" #: ../src/geotag_exif.c:474 msgid "Numeric value expected\n" msgstr "" #: ../src/geotag_exif.c:482 msgid "This shouldn't happen!" msgstr "" #: ../src/geotag_exif.c:552 msgid "Not yet implemented!" msgstr "" #: ../src/geotag_exif.c:565 msgid "Warning; Too many components specified!" msgstr "" #: ../src/osm-traces.c:73 msgid "Identifiable (public w/ timestamps)" msgstr "" #: ../src/osm-traces.c:74 msgid "Trackable (private w/ timestamps)" msgstr "" #: ../src/osm-traces.c:75 msgid "Public" msgstr "" #: ../src/osm-traces.c:76 msgid "Private" msgstr "" #: ../src/osm-traces.c:93 msgid "OSM username:" msgstr "" #: ../src/osm-traces.c:94 msgid "OSM password:" msgstr "" #. Preferences #: ../src/osm-traces.c:151 msgid "OpenStreetMap Traces" msgstr "" #: ../src/osm-traces.c:234 #, c-format msgid "failed to upload data: HTTP response is %ld" msgstr "" #: ../src/osm-traces.c:239 #, c-format msgid "curl_easy_getinfo failed: %d" msgstr "" #: ../src/osm-traces.c:244 #, c-format msgid "curl request failed: %s" msgstr "" #: ../src/osm-traces.c:275 #, c-format msgid "failed to open temporary file: %s" msgstr "" #. Success #: ../src/osm-traces.c:328 msgid "Uploaded to OSM" msgstr "" #: ../src/osm-traces.c:332 msgid "FAILED TO UPLOAD DATA TO OSM - CURL PROBLEM" msgstr "" #: ../src/osm-traces.c:335 msgid "FAILED TO UPLOAD DATA TO OSM" msgstr "" #: ../src/osm-traces.c:335 msgid "HTTP response code" msgstr "" #: ../src/osm-traces.c:348 #, c-format msgid "failed to unlink temporary file: %s" msgstr "" #: ../src/osm-traces.c:387 msgid "OSM upload" msgstr "" #: ../src/osm-traces.c:405 msgid "Email:" msgstr "" #: ../src/osm-traces.c:410 msgid "" "The email used as login\n" "Enter the email you use to login into www.openstreetmap.org." msgstr "" #: ../src/osm-traces.c:418 msgid "" "The password used to login\n" "Enter the password you use to login into " "www.openstreetmap.org." msgstr "" #: ../src/osm-traces.c:423 msgid "File's name:" msgstr "" #: ../src/osm-traces.c:433 msgid "" "The name of the file on OSM\n" "This is the name of the file created on the server.This is not the " "name of the local file." msgstr "" #: ../src/osm-traces.c:442 msgid "The description of the trace" msgstr "" #: ../src/osm-traces.c:444 msgid "Tags:" msgstr "" #: ../src/osm-traces.c:449 msgid "The tags associated to the trace" msgstr "" #: ../src/osm-traces.c:482 #, c-format msgid "Uploading %s to OSM" msgstr "" #: ../src/mapcache.c:61 msgid "Map cache memory size (MB):" msgstr "" #: ../src/print.c:53 msgid "None" msgstr "" #: ../src/print.c:54 msgid "Horizontally" msgstr "" #: ../src/print.c:55 msgid "Vertically" msgstr "" #: ../src/print.c:56 msgid "Both" msgstr "" #: ../src/print.c:120 msgid "Image Settings" msgstr "" #: ../src/print.c:546 msgid "done" msgstr "" #. Page Size #: ../src/print.c:575 msgid "_Adjust Page Size and Orientation" msgstr "" #: ../src/print.c:591 msgid "C_enter:" msgstr "" #. ignore page margins #: ../src/print.c:609 msgid "Ignore Page _Margins" msgstr "" #: ../src/print.c:628 msgid "Image S_ize:" msgstr "" #: ../src/util.c:81 msgid "Could not launch web browser." msgstr "" #: ../src/util.c:92 msgid "Could not create new email." msgstr "" #: ../src/vikcoordlayer.c:46 msgid "Color:" msgstr "Colour:" #: ../src/vikcoordlayer.c:47 msgid "Minutes Width:" msgstr "" #: ../src/vikcoordlayer.c:48 msgid "Line Thickness:" msgstr "" #: ../src/vikcoordlayer.c:56 msgid "Coordinate" msgstr "" #: ../src/datasource_bfilter.c:46 msgid "Max number of points:" msgstr "" #: ../src/datasource_bfilter.c:60 msgid "Simplify All Tracks..." msgstr "" #: ../src/datasource_bfilter.c:61 msgid "Simplified Tracks" msgstr "" #: ../src/datasource_bfilter.c:96 ../src/datasource_bfilter.c:97 msgid "Remove Duplicate Waypoints" msgstr "" #: ../src/datasource_bfilter.c:129 msgid "Waypoints Inside This" msgstr "" #: ../src/datasource_bfilter.c:130 msgid "Polygonized Layer" msgstr "" #: ../src/datasource_bfilter.c:165 msgid "Waypoints Outside This" msgstr "" #: ../src/datasource_bfilter.c:166 msgid "Polygonzied Layer" msgstr "" #: ../src/main.c:89 #, c-format msgid "Ignoring Xlib error: error code %d request code %d\n" msgstr "" #: ../src/main.c:102 msgid "Enable debug output" msgstr "" #: ../src/main.c:103 msgid "Enable verbose output" msgstr "" #: ../src/main.c:104 msgid "Show version" msgstr "" #: ../src/osm.c:106 msgid "On Disk OSM Tile Format" msgstr "" #: ../src/osm.c:121 msgid "OSM (view)" msgstr "" #: ../src/osm.c:125 msgid "OSM (edit)" msgstr "" #: ../src/osm.c:129 msgid "OSM (render)" msgstr "" #. Example: http://127.0.0.1:8111/load_and_zoom?left=8.19&right=8.20&top=48.605&bottom=48.590&select=node413602999 #. JOSM or merkaartor must already be running with remote interface enabled #: ../src/osm.c:136 msgid "Local port 8111 (eg JOSM)" msgstr "" #: ../src/preferences.c:285 msgid "Preferences" msgstr "" #: ../src/uibuilder.c:147 msgid "Take care that this password will be stored clearly in a plain file." msgstr "" #: ../src/vikaggregatelayer.c:37 msgid "Aggregate" msgstr "" #: ../src/vikdemlayer.c:101 msgid "Absolute height" msgstr "" #: ../src/vikdemlayer.c:102 msgid "Height gradient" msgstr "" #: ../src/vikdemlayer.c:118 msgid "DEM Files:" msgstr "" #: ../src/vikdemlayer.c:119 msgid "Download Source:" msgstr "" #: ../src/vikdemlayer.c:120 msgid "Min Elev Color:" msgstr "Min Elev Colour" #: ../src/vikdemlayer.c:121 msgid "Type:" msgstr "" #: ../src/vikdemlayer.c:122 msgid "Min Elev:" msgstr "" #: ../src/vikdemlayer.c:123 msgid "Max Elev:" msgstr "" #: ../src/vikdemlayer.c:134 msgid "_DEM Download" msgstr "" #: ../src/vikdemlayer.c:134 msgid "DEM Download" msgstr "" #: ../src/vikdemlayer.c:188 msgid "DEM" msgstr "" #: ../src/vikdemlayer.c:284 #, c-format msgid "Number of files: %d" msgstr "" #: ../src/vikdemlayer.c:385 msgid "DEM Loading" msgstr "" #: ../src/vikdemlayer.c:889 #, c-format msgid "No SRTM data available for %f, %f" msgstr "" #: ../src/vikdemlayer.c:1149 #, c-format msgid "Downloading DEM %s" msgstr "" #: ../src/vikfileentry.c:68 msgid "Browse..." msgstr "" #: ../src/vikfileentry.c:96 msgid "Choose file" msgstr "" #: ../src/vikfilelist.c:48 msgid "Choose file(s)" msgstr "" #: ../src/vikfilelist.c:172 msgid "Add..." msgstr "" #: ../src/vikfilelist.c:173 msgid "Delete" msgstr "" #: ../src/vikgeoreflayer.c:70 msgid "_Georef Move Map" msgstr "" #: ../src/vikgeoreflayer.c:70 msgid "Georef Move Map" msgstr "" #: ../src/vikgeoreflayer.c:77 msgid "Georef Z_oom Tool" msgstr "" #: ../src/vikgeoreflayer.c:77 msgid "Georef Zoom Tool" msgstr "" #: ../src/vikgeoreflayer.c:87 msgid "GeoRef Map" msgstr "" #: ../src/vikgeoreflayer.c:335 ../src/vikmapslayer.c:685 #, c-format msgid "Couldn't open image file: %s" msgstr "" #: ../src/vikgeoreflayer.c:365 msgid "Unexpected end of file reading World file." msgstr "" #: ../src/vikgeoreflayer.c:381 ../src/vikgeoreflayer.c:426 msgid "Choose World file" msgstr "" #: ../src/vikgeoreflayer.c:394 msgid "The World file you requested could not be opened for reading." msgstr "" #: ../src/vikgeoreflayer.c:439 msgid "The file you requested could not be opened for writing." msgstr "" #: ../src/vikgeoreflayer.c:456 ../src/viklayer.c:480 msgid "Layer Properties" msgstr "" #: ../src/vikgeoreflayer.c:478 msgid "World File Parameters:" msgstr "Zoom (metres per pixel):" #: ../src/vikgeoreflayer.c:479 msgid "Load From File..." msgstr "" #: ../src/vikgeoreflayer.c:484 msgid "Corner pixel easting:" msgstr "" #: ../src/vikgeoreflayer.c:486 msgid "the UTM \"easting\" value of the upper-right corner pixel of the map" msgstr "" #: ../src/vikgeoreflayer.c:488 msgid "Corner pixel northing:" msgstr "" #: ../src/vikgeoreflayer.c:490 msgid "the UTM \"northing\" value of the upper-right corner pixel of the map" msgstr "" #: ../src/vikgeoreflayer.c:492 msgid "X (easting) scale (mpp): " msgstr "" #: ../src/vikgeoreflayer.c:493 msgid "Y (northing) scale (mpp): " msgstr "" #: ../src/vikgeoreflayer.c:496 msgid "the scale of the map in the X direction (meters per pixel)" msgstr "" #: ../src/vikgeoreflayer.c:498 msgid "the scale of the map in the Y direction (meters per pixel)" msgstr "" #: ../src/vikgeoreflayer.c:500 msgid "Map Image:" msgstr "" #. Now with icons #: ../src/vikgeoreflayer.c:608 msgid "_Zoom to Fit Map" msgstr "" #: ../src/vikgeoreflayer.c:614 msgid "_Goto Map Center" msgstr "" #: ../src/vikgeoreflayer.c:620 msgid "_Export to World File" msgstr "" #: ../src/vikgoto.c:75 msgid "No goto tool available." msgstr "" #: ../src/vikgoto.c:88 ../src/vikgoto.c:107 msgid "goto" msgstr "" #: ../src/vikgoto.c:90 msgid "I don't know that place. Do you want another goto?" msgstr "" #: ../src/vikgoto.c:109 msgid "goto provider:" msgstr "" #: ../src/vikgoto.c:124 msgid "Enter address or place name:" msgstr "" #: ../src/vikgpslayer.c:127 msgid "Data Mode" msgstr "" #: ../src/vikgpslayer.c:129 msgid "Realtime Tracking Mode" msgstr "" #: ../src/vikgpslayer.c:137 msgid "Keep vehicle at center" msgstr "" #: ../src/vikgpslayer.c:138 msgid "Keep vehicle on screen" msgstr "" #: ../src/vikgpslayer.c:139 msgid "Disable" msgstr "" #: ../src/vikgpslayer.c:152 msgid "Download Tracks:" msgstr "" #: ../src/vikgpslayer.c:153 msgid "Upload Tracks:" msgstr "" #: ../src/vikgpslayer.c:154 msgid "Download Routes:" msgstr "" #: ../src/vikgpslayer.c:155 msgid "Upload Routes:" msgstr "" #: ../src/vikgpslayer.c:156 msgid "Download Waypoints:" msgstr "" #: ../src/vikgpslayer.c:157 msgid "Upload Waypoints:" msgstr "" #: ../src/vikgpslayer.c:159 msgid "Recording tracks" msgstr "" #: ../src/vikgpslayer.c:160 msgid "Jump to current position on start" msgstr "" #: ../src/vikgpslayer.c:161 msgid "Moving Map Method:" msgstr "" #: ../src/vikgpslayer.c:162 msgid "Gpsd Host:" msgstr "" #: ../src/vikgpslayer.c:163 msgid "Gpsd Port:" msgstr "" #: ../src/vikgpslayer.c:164 msgid "Gpsd Retry Interval (seconds):" msgstr "" #: ../src/vikgpslayer.c:179 msgid "GPS" msgstr "" #: ../src/vikgpslayer.c:242 ../src/vikgpslayer.c:1258 msgid "GPS Download" msgstr "" #: ../src/vikgpslayer.c:242 ../src/vikgpslayer.c:1258 #: ../src/viktrwlayer.c:3094 msgid "GPS Upload" msgstr "" #: ../src/vikgpslayer.c:244 msgid "GPS Realtime Tracking" msgstr "" #: ../src/vikgpslayer.c:451 msgid "Unknown GPS Protocol" msgstr "" #: ../src/vikgpslayer.c:469 msgid "Unknown serial port device" msgstr "" #: ../src/vikgpslayer.c:572 #, c-format msgid "%s: unknown parameter" msgstr "" #. Now with icons #: ../src/vikgpslayer.c:693 msgid "_Upload to GPS" msgstr "" #: ../src/vikgpslayer.c:699 msgid "Download from _GPS" msgstr "" #: ../src/vikgpslayer.c:720 msgid "Empty _Realtime" msgstr "" #: ../src/vikgpslayer.c:727 msgid "E_mpty Upload" msgstr "" #: ../src/vikgpslayer.c:733 msgid "_Empty Download" msgstr "" #: ../src/vikgpslayer.c:739 msgid "Empty _All" msgstr "" #. #. NB It's not fatal if this gives 2 for example! Hence removal of the g_assert #. This happens when copied GPS layer is deleted (not sure why the number_handlers would be 2) #. I don't think there's any side effects and certainly better than the program just aborting #. #: ../src/vikgpslayer.c:756 #, c-format msgid "Unexpected number of disconnected handlers: %d" msgstr "" #: ../src/vikgpslayer.c:898 #, c-format msgid "Uploading %d waypoint..." msgid_plural "Uploading %d waypoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:899 #, c-format msgid "Uploading %d trackpoint..." msgid_plural "Uploading %d trackpoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:900 #, c-format msgid "Uploading %d routepoint..." msgid_plural "Uploading %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:925 #, c-format msgid "Downloaded %d out of %d waypoint..." msgid_plural "Downloaded %d out of %d waypoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:926 #, c-format msgid "Downloaded %d out of %d trackpoint..." msgid_plural "Downloaded %d out of %d trackpoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:927 #, c-format msgid "Downloaded %d out of %d routepoint..." msgid_plural "Downloaded %d out of %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:932 #, c-format msgid "Uploaded %d out of %d waypoint..." msgid_plural "Uploaded %d out of %d waypoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:933 #, c-format msgid "Uploaded %d out of %d trackpoint..." msgid_plural "Uploaded %d out of %d trackpoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:934 #, c-format msgid "Uploaded %d out of %d routepoint..." msgid_plural "Uploaded %d out of %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:942 #, c-format msgid "Downloaded %d waypoint" msgid_plural "Downloaded %d waypoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:943 #, c-format msgid "Downloaded %d trackpoint" msgid_plural "Downloaded %d trackpoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:944 #, c-format msgid "Downloaded %d routepoint" msgid_plural "Downloaded %d routepoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:949 #, c-format msgid "Uploaded %d waypoint" msgid_plural "Uploaded %d waypoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:950 #, c-format msgid "Uploaded %d trackpoint" msgid_plural "Uploaded %d trackpoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:951 #, c-format msgid "Uploaded %d routepoint" msgid_plural "Uploaded %d routepoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:1180 msgid "Error: couldn't find gpsbabel." msgstr "" #: ../src/vikgpslayer.c:1269 msgid "Warning - GPS Upload items may overwrite each other" msgstr "" #: ../src/vikgpslayer.c:1301 msgid "Status: detecting gpsbabel" msgstr "Status: detecting gpsbabel" #: ../src/vikgpslayer.c:1332 msgid "No GPS items selected for transfer." msgstr "" #: ../src/vikgpslayer.c:1347 msgid "Could not turn off device." msgstr "" #: ../src/vikgpslayer.c:1385 msgid "Are you sure you want to delete GPS Upload data?" msgstr "" #: ../src/vikgpslayer.c:1398 msgid "Are you sure you want to delete GPS Download data?" msgstr "" #: ../src/vikgpslayer.c:1412 msgid "Are you sure you want to delete GPS Realtime data?" msgstr "" #: ../src/vikgpslayer.c:1425 msgid "Are you sure you want to delete All GPS data?" msgstr "" #: ../src/viklayerspanel.c:55 msgid "/C_ut" msgstr "" #: ../src/viklayerspanel.c:56 msgid "/_Copy" msgstr "" #: ../src/viklayerspanel.c:57 msgid "/_Paste" msgstr "" #: ../src/viklayerspanel.c:58 msgid "/_Delete" msgstr "" #: ../src/viklayerspanel.c:59 msgid "/New Layer" msgstr "" #: ../src/viklayerspanel.c:127 msgid "Top Layer" msgstr "" #: ../src/viklayerspanel.c:143 msgid "Add new layer" msgstr "" #: ../src/viklayerspanel.c:150 msgid "Remove selected layer" msgstr "" #: ../src/viklayerspanel.c:157 msgid "Move selected layer up" msgstr "" #: ../src/viklayerspanel.c:164 msgid "Move selected layer down" msgstr "" #: ../src/viklayerspanel.c:171 msgid "Cut selected layer" msgstr "" #: ../src/viklayerspanel.c:178 msgid "Copy selected layer" msgstr "" #: ../src/viklayerspanel.c:185 msgid "Paste layer below selected layer" msgstr "" #. TODO: FIXME: if name has a '/' in it it will get all messed up. why not have an itemfactory field with #. name, icon, shortcut, etc.? #: ../src/viklayerspanel.c:204 ../src/vikwindow.c:3292 #, c-format msgid "New _%s Layer" msgstr "" #: ../src/viklayerspanel.c:511 msgid "Aggregate Layers have no settable properties." msgstr "" #: ../src/viklayerspanel.c:555 msgid "You cannot cut the Top Layer." msgstr "" #: ../src/viklayerspanel.c:600 #, c-format msgid "Are you sure you want to delete %s?" msgstr "" #: ../src/viklayerspanel.c:617 msgid "You cannot delete the Top Layer." msgstr "" #: ../src/viklayerspanel.c:701 msgid "Are you sure you wish to delete all layers?" msgstr "" #. ******* MAPZOOMS ******** #: ../src/vikmapslayer.c:91 msgid "Use Viking Zoom Level" msgstr "" #: ../src/vikmapslayer.c:124 msgid "Map Type:" msgstr "" #: ../src/vikmapslayer.c:125 msgid "Maps Directory:" msgstr "" #: ../src/vikmapslayer.c:126 msgid "Alpha:" msgstr "" #: ../src/vikmapslayer.c:127 msgid "Control the Alpha value for transparency effects" msgstr "" #: ../src/vikmapslayer.c:128 msgid "Autodownload maps:" msgstr "" #: ../src/vikmapslayer.c:129 msgid "Autodownload Only Gets Missing Maps:" msgstr "" #: ../src/vikmapslayer.c:130 msgid "" "Using this option avoids attempting to update already acquired tiles. This " "can be useful if you want to restrict the network usage, without having to " "resort to manual control. Only applies when 'Autodownload Maps' is on." msgstr "" #: ../src/vikmapslayer.c:131 msgid "Zoom Level:" msgstr "" #: ../src/vikmapslayer.c:132 msgid "" "Determines the method of displaying map tiles for the current zoom level. " "'Viking Zoom Level' uses the best matching level, otherwise setting a fixed " "value will always use map tiles of the specified value regardless of the " "actual zoom level." msgstr "" #: ../src/vikmapslayer.c:146 msgid "_Maps Download" msgstr "" #: ../src/vikmapslayer.c:146 msgid "Maps Download" msgstr "" #: ../src/vikmapslayer.c:161 msgid "Map" msgstr "" #: ../src/vikmapslayer.c:249 msgid "Default maplayer directory:" msgstr "" #: ../src/vikmapslayer.c:249 msgid "Choose a directory to store cached Map tiles for this layer" msgstr "" #: ../src/vikmapslayer.c:505 msgid "Unknown map type" msgstr "" #: ../src/vikmapslayer.c:516 msgid "Unknown Map Zoom" msgstr "" #: ../src/vikmapslayer.c:589 #, c-format msgid "" "New map cannot be displayed in the current drawmode.\n" "Select \"%s\" from View menu to view it." msgstr "" #: ../src/vikmapslayer.c:753 #, c-format msgid "" "Cowardly refusing to draw tiles or existence of tiles beyond %d zoom out " "factor" msgstr "" #: ../src/vikmapslayer.c:1157 #, c-format msgid "Redownloading up to %d %s map..." msgid_plural "Redownloading up to %d %s maps..." msgstr[0] "" msgstr[1] "" #: ../src/vikmapslayer.c:1159 #, c-format msgid "Redownloading %d %s map..." msgid_plural "Redownloading %d %s maps..." msgstr[0] "" msgstr[1] "" #: ../src/vikmapslayer.c:1163 ../src/vikmapslayer.c:1238 #, c-format msgid "Downloading %d %s map..." msgid_plural "Downloading %d %s maps..." msgstr[0] "" msgstr[1] "" #: ../src/vikmapslayer.c:1311 #, c-format msgid "" "\n" "Source: %s\n" "\n" "Tile File: %s\n" "Tile File Timestamp: %s" msgstr "" #: ../src/vikmapslayer.c:1318 #, c-format msgid "" "Source: %s\n" "\n" "No Tile File!" msgstr "" #: ../src/vikmapslayer.c:1356 msgid "Redownload _Bad Map(s)" msgstr "" #: ../src/vikmapslayer.c:1360 msgid "Redownload _New Map(s)" msgstr "" #: ../src/vikmapslayer.c:1364 msgid "Redownload _All Map(s)" msgstr "" #: ../src/vikmapslayer.c:1368 msgid "_Show Tile Information" msgstr "" #: ../src/vikmapslayer.c:1449 #, c-format msgid "" "Wrong drawmode for this map.\n" "Select \"%s\" from View menu and try again." msgstr "" #: ../src/vikmapslayer.c:1454 msgid "Wrong zoom level for this map." msgstr "" #. Now with icons #: ../src/vikmapslayer.c:1485 msgid "Download _Missing Onscreen Maps" msgstr "" #: ../src/vikmapslayer.c:1492 msgid "Download _New Onscreen Maps" msgstr "" #: ../src/vikmapslayer.c:1499 msgid "Reload _All Onscreen Maps" msgstr "" #: ../src/viktreeview.c:263 msgid "Layer Name" msgstr "" #: ../src/viktreeview.c:742 #, c-format msgid "delete data from %s\n" msgstr "" #: ../src/viktrwlayer.c:377 msgid "Create _Waypoint" msgstr "" #: ../src/viktrwlayer.c:377 msgid "Create Waypoint" msgstr "" #: ../src/viktrwlayer.c:383 msgid "Create _Track" msgstr "" #: ../src/viktrwlayer.c:383 msgid "Create Track" msgstr "" #: ../src/viktrwlayer.c:392 msgid "Create _Route" msgstr "" #: ../src/viktrwlayer.c:392 msgid "Create Route" msgstr "" #: ../src/viktrwlayer.c:401 msgid "_Edit Waypoint" msgstr "" #: ../src/viktrwlayer.c:401 msgid "Edit Waypoint" msgstr "" #: ../src/viktrwlayer.c:409 msgid "Edit Trac_kpoint" msgstr "" #: ../src/viktrwlayer.c:409 msgid "Edit Trackpoint" msgstr "" #: ../src/viktrwlayer.c:417 msgid "Show P_icture" msgstr "" #: ../src/viktrwlayer.c:417 msgid "Show Picture" msgstr "" #: ../src/viktrwlayer.c:424 msgid "Route _Finder" msgstr "" #: ../src/viktrwlayer.c:424 msgid "Route Finder" msgstr "" #. ***** PARAMETERS ***** #: ../src/viktrwlayer.c:447 ../src/viktrwlayer.c:1942 #: ../src/viktrwlayer.c:1944 msgid "Waypoints" msgstr "" #: ../src/viktrwlayer.c:447 ../src/viktrwlayer.c:1933 #: ../src/viktrwlayer.c:1935 msgid "Tracks" msgstr "" #: ../src/viktrwlayer.c:447 msgid "Waypoint Images" msgstr "" #: ../src/viktrwlayer.c:450 msgid "Draw by Track" msgstr "" #: ../src/viktrwlayer.c:450 msgid "Draw by Speed" msgstr "" #: ../src/viktrwlayer.c:450 msgid "All Tracks Same Color" msgstr "" #: ../src/viktrwlayer.c:451 msgid "Filled Square" msgstr "" #: ../src/viktrwlayer.c:451 msgid "Square" msgstr "" #: ../src/viktrwlayer.c:451 msgid "Circle" msgstr "" #: ../src/viktrwlayer.c:451 msgid "X" msgstr "" #: ../src/viktrwlayer.c:477 msgid "Extra Extra Small" msgstr "" #: ../src/viktrwlayer.c:478 msgid "Extra Small" msgstr "" #: ../src/viktrwlayer.c:479 msgid "Small" msgstr "" #: ../src/viktrwlayer.c:480 msgid "Medium" msgstr "" #: ../src/viktrwlayer.c:481 msgid "Large" msgstr "" #: ../src/viktrwlayer.c:482 msgid "Extra Large" msgstr "" #: ../src/viktrwlayer.c:483 msgid "Extra Extra Large" msgstr "" #: ../src/viktrwlayer.c:491 msgid "Track Drawing Mode:" msgstr "" #: ../src/viktrwlayer.c:492 msgid "All Tracks Color:" msgstr "All Tracks Colour:" #: ../src/viktrwlayer.c:493 msgid "The color used when 'All Tracks Same Color' drawing mode is selected" msgstr "" "The colour used when 'All Tracks Same Colour' drawing mode is selected" #: ../src/viktrwlayer.c:494 msgid "Draw Track Lines" msgstr "" #: ../src/viktrwlayer.c:495 msgid "Track Thickness:" msgstr "" #: ../src/viktrwlayer.c:496 msgid "Draw Track Direction" msgstr "" #: ../src/viktrwlayer.c:497 msgid "Direction Size:" msgstr "" #: ../src/viktrwlayer.c:498 msgid "Draw Trackpoints" msgstr "" #: ../src/viktrwlayer.c:499 msgid "Trackpoint Size:" msgstr "" #: ../src/viktrwlayer.c:500 msgid "Draw Elevation" msgstr "" #: ../src/viktrwlayer.c:501 msgid "Draw Elevation Height %:" msgstr "" #: ../src/viktrwlayer.c:503 msgid "Draw Stops" msgstr "" #: ../src/viktrwlayer.c:504 msgid "" "Whether to draw a marker when trackpoints are at the same position but over " "the minimum stop length apart in time" msgstr "" #: ../src/viktrwlayer.c:505 msgid "Min Stop Length (seconds):" msgstr "" #: ../src/viktrwlayer.c:507 msgid "Track BG Thickness:" msgstr "" #: ../src/viktrwlayer.c:508 msgid "Track Background Color" msgstr "Track Background Colour" #: ../src/viktrwlayer.c:509 msgid "Draw by Speed Factor (%):" msgstr "" #: ../src/viktrwlayer.c:510 msgid "" "The percentage factor away from the average speed determining the color used" msgstr "" "The percentage factor away from the average speed determining the colour used" #: ../src/viktrwlayer.c:512 msgid "Draw Labels" msgstr "" #: ../src/viktrwlayer.c:513 msgid "Waypoint Font Size:" msgstr "" #: ../src/viktrwlayer.c:514 msgid "Waypoint Color:" msgstr "Waypoint Colour:" #: ../src/viktrwlayer.c:515 msgid "Waypoint Text:" msgstr "" #: ../src/viktrwlayer.c:516 msgid "Background:" msgstr "" #: ../src/viktrwlayer.c:517 msgid "Fake BG Color Translucency:" msgstr "Fake BG Colour Translucency:" #: ../src/viktrwlayer.c:518 msgid "Waypoint marker:" msgstr "" #: ../src/viktrwlayer.c:519 msgid "Waypoint size:" msgstr "" #: ../src/viktrwlayer.c:520 msgid "Draw Waypoint Symbols:" msgstr "" #: ../src/viktrwlayer.c:522 msgid "Draw Waypoint Images" msgstr "" #: ../src/viktrwlayer.c:523 msgid "Image Size (pixels):" msgstr "" #: ../src/viktrwlayer.c:524 msgid "Image Alpha:" msgstr "" #: ../src/viktrwlayer.c:525 msgid "Image Memory Cache Size:" msgstr "" #: ../src/viktrwlayer.c:610 msgid "TrackWaypoint" msgstr "" #: ../src/viktrwlayer.c:1951 ../src/viktrwlayer.c:1953 msgid "Routes" msgstr "" #: ../src/viktrwlayer.c:2144 #, c-format msgid " in %d:%02d hrs:mins" msgstr "" #: ../src/viktrwlayer.c:2148 #, c-format msgid "" "\n" "%sTotal Length %.1f %s%s" msgstr "" #: ../src/viktrwlayer.c:2154 #, c-format msgid "Tracks: %d - Waypoints: %d - Routes: %d%s" msgstr "" #: ../src/viktrwlayer.c:2174 #, c-format msgid "Tracks: %d" msgstr "" #: ../src/viktrwlayer.c:2184 #, c-format msgid "Routes: %d" msgstr "" #: ../src/viktrwlayer.c:2215 #, c-format msgid "- %d:%02d hrs:mins" msgstr "" #: ../src/viktrwlayer.c:2223 #, c-format msgid "%s%.1f km %s" msgstr "" #: ../src/viktrwlayer.c:2226 #, c-format msgid "%s%.1f miles %s" msgstr "" #: ../src/viktrwlayer.c:2240 #, c-format msgid "Waypoints: %d" msgstr "" #: ../src/viktrwlayer.c:2266 #, c-format msgid "Trkpt: Alt %dft" msgstr "" #. VIK_UNITS_HEIGHT_METRES: #: ../src/viktrwlayer.c:2270 #, c-format msgid "Trkpt: Alt %dm" msgstr "" #. Compact date time format #: ../src/viktrwlayer.c:2277 #, c-format msgid " | Time %x %X" msgstr "" #: ../src/viktrwlayer.c:2295 #, c-format msgid " | Track: %s" msgstr "" #. Combine parts to make overall message #: ../src/viktrwlayer.c:2299 #, c-format msgid "%s%s | %s %s %s" msgstr "" #: ../src/viktrwlayer.c:2314 #, c-format msgid "Wpt: Alt %dft" msgstr "" #. VIK_UNITS_HEIGHT_METRES: #: ../src/viktrwlayer.c:2318 #, c-format msgid "Wpt: Alt %dm" msgstr "" #. Add comment if available #: ../src/viktrwlayer.c:2333 #, c-format msgid "%s | %s %s | Comment: %s" msgstr "" #: ../src/viktrwlayer.c:2335 #, c-format msgid "%s | %s %s" msgstr "" #: ../src/viktrwlayer.c:2563 ../src/viktrwlayer.c:2634 msgid "This layer has no waypoints or trackpoints." msgstr "" #: ../src/viktrwlayer.c:2661 ../src/vikwindow.c:2407 ../src/vikwindow.c:2848 #, c-format msgid "The file \"%s\" exists, do you wish to overwrite it?" msgstr "" #: ../src/viktrwlayer.c:2671 ../src/vikwindow.c:2429 msgid "The filename you requested could not be opened for writing." msgstr "" #: ../src/viktrwlayer.c:2676 ../src/viktrwlayer.c:2681 #: ../src/viktrwlayer.c:2691 ../src/viktrwlayer.c:2703 msgid "Export Layer" msgstr "" #: ../src/viktrwlayer.c:2720 msgid "Could not create temporary file for export." msgstr "" #: ../src/viktrwlayer.c:2729 #, c-format msgid "Could not launch %s." msgstr "" #: ../src/viktrwlayer.c:2773 msgid "Export Track as GPX" msgstr "" #: ../src/viktrwlayer.c:2795 msgid "Find" msgstr "" #: ../src/viktrwlayer.c:2805 msgid "Waypoint Name:" msgstr "" #: ../src/viktrwlayer.c:2822 msgid "Waypoint not found in this layer." msgstr "" #: ../src/viktrwlayer.c:3090 msgid "Can not upload invisible track." msgstr "" #: ../src/viktrwlayer.c:3192 ../src/viktrwlayer.c:7785 msgid "Track" msgstr "" #: ../src/viktrwlayer.c:3215 ../src/viktrwlayer.c:7817 msgid "Route" msgstr "" #: ../src/viktrwlayer.c:3296 ../src/viktrwlayer.c:6265 #: ../src/viktrwlayer.c:6314 msgid "_Finish Route" msgstr "" #: ../src/viktrwlayer.c:3298 ../src/viktrwlayer.c:6223 #: ../src/viktrwlayer.c:6312 msgid "_Finish Track" msgstr "" #. Now with icons #: ../src/viktrwlayer.c:3310 msgid "_View Layer" msgstr "" #: ../src/viktrwlayer.c:3317 msgid "V_iew" msgstr "" #: ../src/viktrwlayer.c:3323 msgid "View All _Tracks" msgstr "" #: ../src/viktrwlayer.c:3328 msgid "View All _Routes" msgstr "" #: ../src/viktrwlayer.c:3333 msgid "View All _Waypoints" msgstr "" #: ../src/viktrwlayer.c:3338 msgid "_Goto Center of Layer" msgstr "" #: ../src/viktrwlayer.c:3344 ../src/viktrwlayer.c:6199 msgid "Goto _Waypoint..." msgstr "" #: ../src/viktrwlayer.c:3350 msgid "_Export Layer" msgstr "" #: ../src/viktrwlayer.c:3356 msgid "Export as GPS_Point..." msgstr "" #: ../src/viktrwlayer.c:3361 msgid "Export as GPS_Mapper..." msgstr "" #: ../src/viktrwlayer.c:3366 msgid "Export as _GPX..." msgstr "" #: ../src/viktrwlayer.c:3371 msgid "Export as _KML..." msgstr "" #: ../src/viktrwlayer.c:3376 msgid "Open with External Program_1: " msgstr "" #: ../src/viktrwlayer.c:3383 msgid "Open with External Program_2: " msgstr "" #: ../src/viktrwlayer.c:3391 ../src/vikwindow.c:3145 msgid "_New" msgstr "" #: ../src/viktrwlayer.c:3397 msgid "New _Waypoint..." msgstr "" #: ../src/viktrwlayer.c:3403 msgid "New _Track" msgstr "" #: ../src/viktrwlayer.c:3411 msgid "New _Route" msgstr "" #: ../src/viktrwlayer.c:3420 ../src/viktrwlayer.c:6597 msgid "Geotag _Images..." msgstr "" #: ../src/viktrwlayer.c:3427 msgid "_Acquire" msgstr "" #: ../src/viktrwlayer.c:3433 ../src/vikwindow.c:3150 msgid "From _GPS..." msgstr "" #: ../src/viktrwlayer.c:3439 msgid "From Google _Directions..." msgstr "" #: ../src/viktrwlayer.c:3446 msgid "From _OSM Traces..." msgstr "" #: ../src/viktrwlayer.c:3451 msgid "From _My OSM Traces..." msgstr "" #: ../src/viktrwlayer.c:3459 ../src/vikwindow.c:3166 msgid "From _Wikipedia Waypoints" msgstr "" #: ../src/viktrwlayer.c:3465 msgid "Within _Layer Bounds" msgstr "" #: ../src/viktrwlayer.c:3471 msgid "Within _Current View" msgstr "" #: ../src/viktrwlayer.c:3479 msgid "From Geo_caching..." msgstr "" #: ../src/viktrwlayer.c:3486 ../src/vikwindow.c:3163 msgid "From Geotagged _Images..." msgstr "" #: ../src/viktrwlayer.c:3492 msgid "From _File..." msgstr "" #: ../src/viktrwlayer.c:3498 ../src/viktrwlayer.c:6542 msgid "_Upload" msgstr "" #: ../src/viktrwlayer.c:3504 msgid "Upload to _GPS..." msgstr "" #: ../src/viktrwlayer.c:3511 ../src/viktrwlayer.c:6570 msgid "Upload to _OSM..." msgstr "" #: ../src/viktrwlayer.c:3519 msgid "De_lete" msgstr "" #: ../src/viktrwlayer.c:3525 msgid "Delete All _Tracks" msgstr "" #: ../src/viktrwlayer.c:3531 msgid "Delete Tracks _From Selection..." msgstr "" #: ../src/viktrwlayer.c:3537 ../src/viktrwlayer.c:6290 msgid "Delete _All Routes" msgstr "" #: ../src/viktrwlayer.c:3543 ../src/viktrwlayer.c:6296 msgid "_Delete Routes From Selection..." msgstr "" #: ../src/viktrwlayer.c:3549 msgid "Delete All _Waypoints" msgstr "" #: ../src/viktrwlayer.c:3555 msgid "Delete Waypoints From _Selection..." msgstr "" #: ../src/viktrwlayer.c:4128 #, c-format msgid "Are you sure you want to delete all tracks in %s?" msgstr "" #: ../src/viktrwlayer.c:4138 #, c-format msgid "Are you sure you want to delete all routes in %s?" msgstr "" #: ../src/viktrwlayer.c:4148 #, c-format msgid "Are you sure you want to delete all waypoints in %s?" msgstr "" #: ../src/viktrwlayer.c:4165 #, c-format msgid "Are you sure you want to delete the waypoint \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4178 #, c-format msgid "Are you sure you want to delete the track \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4191 #, c-format msgid "Are you sure you want to delete the route \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4351 ../src/viktrwlayer.c:4922 msgid "" "Converting a track to a route removes extra track data such as segments, " "timestamps, etc...\n" "Do you want to continue?" msgstr "" #: ../src/viktrwlayer.c:4711 msgid "Failed. No other tracks with timestamps in this layer found" msgstr "" #: ../src/viktrwlayer.c:4713 msgid "Failed. No other tracks without timestamps in this layer found" msgstr "" #: ../src/viktrwlayer.c:4732 msgid "Merge with..." msgstr "" #: ../src/viktrwlayer.c:4733 msgid "Select route to merge with" msgstr "" #: ../src/viktrwlayer.c:4733 msgid "Select track to merge with" msgstr "" #: ../src/viktrwlayer.c:4818 ../src/viktrwlayer.c:4895 msgid "Append Route" msgstr "" #: ../src/viktrwlayer.c:4818 ../src/viktrwlayer.c:4895 msgid "Append Track" msgstr "" #: ../src/viktrwlayer.c:4819 msgid "Select the route to append after the current route" msgstr "" #: ../src/viktrwlayer.c:4820 msgid "Select the track to append after the current track" msgstr "" #: ../src/viktrwlayer.c:4896 msgid "Select the track to append after the current route" msgstr "" #: ../src/viktrwlayer.c:4897 msgid "Select the route to append after the current track" msgstr "" #: ../src/viktrwlayer.c:4957 #, c-format msgid "%d segment merged" msgid_plural "%d segments merged" msgstr[0] "" msgstr[1] "" #: ../src/viktrwlayer.c:4973 msgid "Failed. This track does not have timestamp" msgstr "" #: ../src/viktrwlayer.c:4985 msgid "Failed. No other track in this layer has timestamp" msgstr "" #: ../src/viktrwlayer.c:4992 msgid "Merge Threshold..." msgstr "" #: ../src/viktrwlayer.c:4993 msgid "Merge when time between tracks less than:" msgstr "" #: ../src/viktrwlayer.c:5128 msgid "Split Threshold..." msgstr "" #: ../src/viktrwlayer.c:5129 msgid "Split when time between trackpoints exceeds:" msgstr "" #: ../src/viktrwlayer.c:5205 msgid "Split Every Nth Point" msgstr "" #: ../src/viktrwlayer.c:5206 msgid "Split on every Nth point:" msgstr "" #: ../src/viktrwlayer.c:5312 msgid "Can not split track as it has no segments" msgstr "" #: ../src/viktrwlayer.c:5340 ../src/viktrwlayer.c:5370 #, c-format msgid "Deleted %ld point" msgid_plural "Deleted %ld points" msgstr[0] "" msgstr[1] "" #: ../src/viktrwlayer.c:5531 msgid "Internal Error in vik_trw_layer_uniquify_tracks" msgstr "" #: ../src/viktrwlayer.c:5588 ../src/viktrwlayer.c:5635 #: ../src/viktrwlayer.c:5814 msgid "" "Multiple entries with the same name exist. This method only works with " "unique names. Force unique names now?" msgstr "" #: ../src/viktrwlayer.c:5599 msgid "No tracks found" msgstr "" #: ../src/viktrwlayer.c:5607 ../src/viktrwlayer.c:5654 #: ../src/viktrwlayer.c:5834 msgid "Delete Selection" msgstr "" #: ../src/viktrwlayer.c:5608 msgid "Select tracks to delete" msgstr "" #: ../src/viktrwlayer.c:5646 msgid "No routes found" msgstr "" #: ../src/viktrwlayer.c:5655 msgid "Select routes to delete" msgstr "" #: ../src/viktrwlayer.c:5761 msgid "Internal Error in vik_trw_layer_uniquify_waypoints" msgstr "" #: ../src/viktrwlayer.c:5824 msgid "No waypoints found" msgstr "" #: ../src/viktrwlayer.c:5835 msgid "Select waypoints to delete" msgstr "" #: ../src/viktrwlayer.c:5896 #, c-format msgid "" "A waypoint with the name \"%s\" already exists. Really rename to the same " "name?" msgstr "" #: ../src/viktrwlayer.c:5926 #, c-format msgid "" "A track with the name \"%s\" already exists. Really rename to the same name?" msgstr "" #: ../src/viktrwlayer.c:5963 #, c-format msgid "" "A route with the name \"%s\" already exists. Really rename to the same name?" msgstr "" #: ../src/viktrwlayer.c:6085 ../src/viktrwlayer.c:6337 msgid "_Goto" msgstr "" #: ../src/viktrwlayer.c:6104 msgid "_Visit Geocache Webpage" msgstr "" #: ../src/viktrwlayer.c:6123 msgid "_Show Picture..." msgstr "" #: ../src/viktrwlayer.c:6131 msgid "Update Geotag on _Image" msgstr "" #: ../src/viktrwlayer.c:6137 msgid "_Update" msgstr "" #: ../src/viktrwlayer.c:6142 msgid "Update and _Keep File Timestamp" msgstr "" #: ../src/viktrwlayer.c:6153 msgid "Visit _Webpage" msgstr "" #: ../src/viktrwlayer.c:6184 msgid "_New Waypoint..." msgstr "" #: ../src/viktrwlayer.c:6193 msgid "_View All Waypoints" msgstr "" #: ../src/viktrwlayer.c:6205 msgid "Delete _All Waypoints" msgstr "" #: ../src/viktrwlayer.c:6211 msgid "_Delete Waypoints From Selection..." msgstr "" #: ../src/viktrwlayer.c:6233 msgid "_View All Tracks" msgstr "" #: ../src/viktrwlayer.c:6239 msgid "_New Track" msgstr "" #: ../src/viktrwlayer.c:6247 msgid "Delete _All Tracks" msgstr "" #: ../src/viktrwlayer.c:6253 msgid "_Delete Tracks From Selection..." msgstr "" #: ../src/viktrwlayer.c:6276 msgid "_View All Routes" msgstr "" #: ../src/viktrwlayer.c:6282 msgid "_New Route" msgstr "" #: ../src/viktrwlayer.c:6327 msgid "_View Track" msgstr "" #: ../src/viktrwlayer.c:6329 msgid "_View Route" msgstr "" #: ../src/viktrwlayer.c:6343 msgid "_Startpoint" msgstr "" #: ../src/viktrwlayer.c:6349 msgid "\"_Center\"" msgstr "" #: ../src/viktrwlayer.c:6355 msgid "_Endpoint" msgstr "" #: ../src/viktrwlayer.c:6361 msgid "_Highest Altitude" msgstr "" #: ../src/viktrwlayer.c:6367 msgid "_Lowest Altitude" msgstr "" #: ../src/viktrwlayer.c:6375 msgid "_Maximum Speed" msgstr "" #: ../src/viktrwlayer.c:6384 msgid "Co_mbine" msgstr "" #: ../src/viktrwlayer.c:6392 msgid "_Merge By Time..." msgstr "" #: ../src/viktrwlayer.c:6397 msgid "Merge _Segments" msgstr "" #: ../src/viktrwlayer.c:6403 msgid "Merge _With Other Tracks..." msgstr "" #: ../src/viktrwlayer.c:6409 msgid "_Append Track..." msgstr "" #: ../src/viktrwlayer.c:6411 msgid "_Append Route..." msgstr "" #: ../src/viktrwlayer.c:6417 msgid "Append _Route..." msgstr "" #: ../src/viktrwlayer.c:6419 msgid "Append _Track..." msgstr "" #: ../src/viktrwlayer.c:6426 msgid "_Split" msgstr "" #: ../src/viktrwlayer.c:6434 msgid "_Split By Time..." msgstr "" #. ATM always enable this entry - don't want to have to analyse the track before displaying the menu - to keep the menu speedy #: ../src/viktrwlayer.c:6440 msgid "Split Se_gments" msgstr "" #: ../src/viktrwlayer.c:6446 msgid "Split By _Number of Points..." msgstr "" #: ../src/viktrwlayer.c:6451 msgid "Split at _Trackpoint" msgstr "" #: ../src/viktrwlayer.c:6460 msgid "Delete Poi_nts" msgstr "" #: ../src/viktrwlayer.c:6466 msgid "Delete Points With The Same _Position" msgstr "" #: ../src/viktrwlayer.c:6471 msgid "Delete Points With The Same _Time" msgstr "" #: ../src/viktrwlayer.c:6477 msgid "_Reverse Track" msgstr "" #: ../src/viktrwlayer.c:6479 msgid "_Reverse Route" msgstr "" #: ../src/viktrwlayer.c:6488 msgid "Down_load Maps Along Track..." msgstr "" #: ../src/viktrwlayer.c:6490 msgid "Down_load Maps Along Route..." msgstr "" #: ../src/viktrwlayer.c:6497 msgid "_Apply DEM Data" msgstr "" #: ../src/viktrwlayer.c:6504 msgid "_Export Track as GPX..." msgstr "" #: ../src/viktrwlayer.c:6506 msgid "_Export Route as GPX..." msgstr "" #: ../src/viktrwlayer.c:6513 msgid "E_xtend Track End" msgstr "" #: ../src/viktrwlayer.c:6515 msgid "E_xtend Route End" msgstr "" #: ../src/viktrwlayer.c:6522 msgid "C_onvert to a Route" msgstr "" #: ../src/viktrwlayer.c:6524 msgid "C_onvert to a Track" msgstr "" #: ../src/viktrwlayer.c:6532 msgid "Extend _Using Route Finder" msgstr "" #: ../src/viktrwlayer.c:6548 msgid "_Upload to GPS..." msgstr "" #: ../src/viktrwlayer.c:6559 msgid "_View Google Directions" msgstr "" #: ../src/viktrwlayer.c:6579 msgid "Use with _Filter" msgstr "" #: ../src/viktrwlayer.c:6612 msgid "_Edit Trackpoint" msgstr "" #: ../src/viktrwlayer.c:7524 #, c-format msgid " - Gain %dm:Loss %dm" msgstr "" #: ../src/viktrwlayer.c:7526 #, c-format msgid " - Gain %dft:Loss %dft" msgstr "" #: ../src/viktrwlayer.c:7531 #, c-format msgid " - Bearing %3.1f° - Step %s" msgstr "" #: ../src/viktrwlayer.c:8124 #, c-format msgid "Could not launch %s to open file." msgstr "" #: ../src/viktrwlayer.c:8205 #, c-format msgid "Creating %d Image Thumbnails..." msgstr "" #: ../src/viktrwlayer.c:8524 msgid "No map layer in use. Create one first" msgstr "" #: ../src/viktrwlayer_propwin.c:898 ../src/viktrwlayer_propwin.c:1155 #, c-format msgid "%.1f kph" msgstr "" #: ../src/viktrwlayer_propwin.c:901 ../src/viktrwlayer_propwin.c:1158 #, c-format msgid "%.1f mph" msgstr "" #: ../src/viktrwlayer_propwin.c:904 ../src/viktrwlayer_propwin.c:1161 #, c-format msgid "%.1f knots" msgstr "" #. VIK_UNITS_SPEED_METRES_PER_SECOND: #: ../src/viktrwlayer_propwin.c:908 ../src/viktrwlayer_propwin.c:1165 #, c-format msgid "%.1f m/s" msgstr "" #: ../src/viktrwlayer_propwin.c:1745 #, c-format msgid "%.1f miles" msgstr "" #: ../src/viktrwlayer_propwin.c:1747 #, c-format msgid "%.1f km" msgstr "" #: ../src/viktrwlayer_propwin.c:2681 msgid "Failed spliting track. Track unchanged" msgstr "" #: ../src/viktrwlayer_propwin.c:2779 ../src/viktrwlayer_propwin.c:3178 #, c-format msgid "%s - Track Properties" msgstr "" #: ../src/viktrwlayer_propwin.c:2784 msgid "Split at _Marker" msgstr "" #: ../src/viktrwlayer_propwin.c:2785 msgid "Split _Segments" msgstr "" #: ../src/viktrwlayer_propwin.c:2786 msgid "_Reverse" msgstr "" #: ../src/viktrwlayer_propwin.c:2787 msgid "_Delete Dupl." msgstr "" #: ../src/viktrwlayer_propwin.c:2813 msgid "Comment:" msgstr "" #: ../src/viktrwlayer_propwin.c:2814 msgid "Description:" msgstr "" #: ../src/viktrwlayer_propwin.c:2815 msgid "Track Length:" msgstr "" #: ../src/viktrwlayer_propwin.c:2816 msgid "Trackpoints:" msgstr "" #: ../src/viktrwlayer_propwin.c:2817 msgid "Segments:" msgstr "" #: ../src/viktrwlayer_propwin.c:2818 msgid "Duplicate Points:" msgstr "" #: ../src/viktrwlayer_propwin.c:2819 msgid "Max Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:2820 msgid "Avg. Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:2821 msgid "Moving Avg. Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:2822 msgid "Avg. Dist. Between TPs:" msgstr "" #: ../src/viktrwlayer_propwin.c:2823 msgid "Elevation Range:" msgstr "" #: ../src/viktrwlayer_propwin.c:2824 msgid "Total Elevation Gain/Loss:" msgstr "" #: ../src/viktrwlayer_propwin.c:2825 msgid "Start:" msgstr "" #: ../src/viktrwlayer_propwin.c:2826 msgid "End:" msgstr "" #: ../src/viktrwlayer_propwin.c:2827 msgid "Duration:" msgstr "" #: ../src/viktrwlayer_propwin.c:2828 msgid "Color:" msgstr "Colour:" #: ../src/viktrwlayer_propwin.c:2877 ../src/viktrwlayer_propwin.c:2901 #: ../src/viktrwlayer_propwin.c:2929 ../src/viktrwlayer_propwin.c:2966 #: ../src/viktrwlayer_propwin.c:2984 ../src/viktrwlayer_propwin.c:3034 #: ../src/viktrwlayer_propwin.c:3035 ../src/viktrwlayer_propwin.c:3036 #: ../src/viktrwlayer_propwin.c:3062 ../src/viktrwlayer_propwin.c:3063 #: ../src/viktrwlayer_propwin.c:3078 ../src/viktrwlayer_propwin.c:3079 #: ../src/viktrwlayer_propwin.c:3092 ../src/viktrwlayer_propwin.c:3093 #: ../src/viktrwlayer_propwin.c:3106 ../src/viktrwlayer_propwin.c:3107 #: ../src/viktrwlayer_propwin.c:3120 ../src/viktrwlayer_propwin.c:3121 #: ../src/viktrwlayer_propwin.c:3134 ../src/viktrwlayer_propwin.c:3135 #, c-format msgid "No Data" msgstr "" #: ../src/viktrwlayer_propwin.c:3031 #, c-format msgid "%d minutes" msgstr "" #: ../src/viktrwlayer_propwin.c:3058 msgid "Statistics" msgstr "" #: ../src/viktrwlayer_propwin.c:3064 msgid "Show D_EM" msgstr "" #: ../src/viktrwlayer_propwin.c:3065 ../src/viktrwlayer_propwin.c:3080 #: ../src/viktrwlayer_propwin.c:3094 ../src/viktrwlayer_propwin.c:3136 msgid "Show _GPS Speed" msgstr "" #: ../src/viktrwlayer_propwin.c:3067 ../src/viktrwlayer_propwin.c:3082 #: ../src/viktrwlayer_propwin.c:3110 ../src/viktrwlayer_propwin.c:3138 msgid "Track Distance:" msgstr "" #: ../src/viktrwlayer_propwin.c:3068 ../src/viktrwlayer_propwin.c:3125 msgid "Track Height:" msgstr "" #: ../src/viktrwlayer_propwin.c:3073 msgid "Elevation-distance" msgstr "" #: ../src/viktrwlayer_propwin.c:3083 msgid "Track Gradient:" msgstr "" #: ../src/viktrwlayer_propwin.c:3087 msgid "Gradient-distance" msgstr "" #: ../src/viktrwlayer_propwin.c:3096 ../src/viktrwlayer_propwin.c:3111 #: ../src/viktrwlayer_propwin.c:3124 msgid "Track Time:" msgstr "" #: ../src/viktrwlayer_propwin.c:3097 ../src/viktrwlayer_propwin.c:3139 msgid "Track Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:3101 msgid "Speed-time" msgstr "" #: ../src/viktrwlayer_propwin.c:3108 ../src/viktrwlayer_propwin.c:3122 msgid "Show S_peed" msgstr "" #: ../src/viktrwlayer_propwin.c:3115 msgid "Distance-time" msgstr "" #: ../src/viktrwlayer_propwin.c:3129 msgid "Elevation-time" msgstr "" #: ../src/viktrwlayer_propwin.c:3143 msgid "Speed-distance" msgstr "" #: ../src/viktrwlayer_tpwin.c:118 msgid "Part of Track:" msgstr "" #: ../src/viktrwlayer_tpwin.c:119 msgid "Latitude:" msgstr "" #: ../src/viktrwlayer_tpwin.c:120 msgid "Longitude:" msgstr "" #: ../src/viktrwlayer_tpwin.c:121 msgid "Altitude:" msgstr "" #: ../src/viktrwlayer_tpwin.c:122 msgid "Timestamp:" msgstr "" #: ../src/viktrwlayer_tpwin.c:123 msgid "Time:" msgstr "" #: ../src/viktrwlayer_tpwin.c:124 msgid "Distance Difference:" msgstr "" #: ../src/viktrwlayer_tpwin.c:125 msgid "Time Difference:" msgstr "" #: ../src/viktrwlayer_tpwin.c:126 msgid "\"Speed\" Between:" msgstr "" #: ../src/viktrwlayer_tpwin.c:127 msgid "VDOP:" msgstr "" #: ../src/viktrwlayer_tpwin.c:128 msgid "HDOP:" msgstr "" #: ../src/viktrwlayer_tpwin.c:129 msgid "PDOP:" msgstr "" #: ../src/viktrwlayer_tpwin.c:130 msgid "SAT/FIX:" msgstr "" #: ../src/viktrwlayer_tpwin.c:139 msgid "Trackpoint" msgstr "" #: ../src/viktrwlayer_tpwin.c:142 msgid "_Insert After" msgstr "" #: ../src/viktrwlayer_tpwin.c:144 msgid "Split Here" msgstr "" #: ../src/viktrwlayer_geotag.c:446 #, c-format msgid "Geotagging %d Images..." msgstr "" #: ../src/viktrwlayer_geotag.c:510 msgid "Geotag Images" msgstr "" #: ../src/viktrwlayer_geotag.c:516 msgid "Images" msgstr "" #: ../src/viktrwlayer_geotag.c:520 msgid "Overwrite Existing Waypoints:" msgstr "" #: ../src/viktrwlayer_geotag.c:523 msgid "Overwrite Existing GPS Information:" msgstr "" #: ../src/viktrwlayer_geotag.c:525 msgid "Keep File Modification Timestamp:" msgstr "" #: ../src/viktrwlayer_geotag.c:555 msgid "Create Waypoints:" msgstr "" #: ../src/viktrwlayer_geotag.c:563 msgid "Write EXIF:" msgstr "" #: ../src/viktrwlayer_geotag.c:575 msgid "Interpolate Between Track Segments:" msgstr "" #: ../src/viktrwlayer_geotag.c:579 msgid "Image Time Offset (Seconds):" msgstr "" #: ../src/viktrwlayer_geotag.c:581 msgid "" "The number of seconds to ADD to the photos time to make it match the GPS " "data. Calculate this with (GPS - Photo). Can be negative or positive. Useful " "to adjust times when a camera's timestamp was incorrect." msgstr "" #: ../src/viktrwlayer_geotag.c:584 msgid "Image Timezone:" msgstr "" #: ../src/viktrwlayer_geotag.c:586 msgid "" "The timezone that was used when the images were created. For example, if a " "camera is set to AWST or +8:00 hours. Enter +8:00 here so that the correct " "adjustment to the images' time can be made. GPS data is always in UTC." msgstr "" #: ../src/viktrwlayer_geotag.c:590 #, c-format msgid "Using track: %s" msgstr "" #: ../src/viktrwlayer_geotag.c:592 #, c-format msgid "Using all tracks in: %s" msgstr "" #: ../src/vikstatus.c:105 msgid "Current zoom level. Click to select a new one." msgstr "" #: ../src/vikwaypoint.c:34 msgid "Waypoint" msgstr "" #. TODO get rid of this as this is unnecessary duplication... #: ../src/vikwindow.c:221 msgid "Pan" msgstr "" #: ../src/vikwindow.c:221 msgid "Zoom" msgstr "" #: ../src/vikwindow.c:221 msgid "Ruler" msgstr "" #: ../src/vikwindow.c:221 msgid "Select" msgstr "" #. Create tooltip #: ../src/vikwindow.c:440 msgid "Select zoom level" msgstr "" #: ../src/vikwindow.c:645 #, c-format msgid "" "Do you want to save the changes you made to the document \"%s\"?\n" "\n" "Your changes will be lost if you don't save them." msgstr "" #: ../src/vikwindow.c:649 msgid "Don't Save" msgstr "" #: ../src/vikwindow.c:696 msgid "mpp" msgstr "" #: ../src/vikwindow.c:696 msgid "pixelfact" msgstr "" #: ../src/vikwindow.c:861 #, c-format msgid "%s %s %dm" msgstr "" #: ../src/vikwindow.c:863 #, c-format msgid "%s %s %dft" msgstr "" #: ../src/vikwindow.c:866 #, c-format msgid "%s %s" msgstr "" #. NB Ctrl+Shift+R is used for Refresh (deemed more important), so use 'U' instead #: ../src/vikwindow.c:1254 msgid "_Ruler" msgstr "" #: ../src/vikwindow.c:1254 msgid "Ruler Tool" msgstr "" #: ../src/vikwindow.c:1502 ../src/vikwindow.c:3138 msgid "_Zoom" msgstr "" #: ../src/vikwindow.c:1502 msgid "Zoom Tool" msgstr "" #: ../src/vikwindow.c:1547 ../src/vikwindow.c:3139 msgid "_Pan" msgstr "" #: ../src/vikwindow.c:1547 msgid "Pan Tool" msgstr "" #: ../src/vikwindow.c:1664 msgid "_Select" msgstr "" #: ../src/vikwindow.c:1664 msgid "Select Tool" msgstr "" #: ../src/vikwindow.c:1809 msgid "You must select a layer to show its properties." msgstr "" #. No error to show, so unlikely this will get called #: ../src/vikwindow.c:1824 msgid "The help system is not available." msgstr "" #. Main error path #: ../src/vikwindow.c:1827 #, c-format msgid "" "Help is not available because: %s.\n" "Ensure a Mime Type ghelp handler program is installed (e.g. yelp)." msgstr "" #: ../src/vikwindow.c:1850 msgid "You must select a layer to delete." msgstr "" #: ../src/vikwindow.c:2087 msgid "Untitled" msgstr "" #: ../src/vikwindow.c:2194 #, c-format msgid "Unable to add '%s' to the list of recently used documents" msgstr "" #: ../src/vikwindow.c:2208 msgid "The file you requested could not be opened." msgstr "" #: ../src/vikwindow.c:2211 msgid "" "GPSBabel is required to load files of this type or GPSBabel encountered " "problems." msgstr "" #: ../src/vikwindow.c:2214 #, c-format msgid "Unable to load malformed GPX file %s" msgstr "" #: ../src/vikwindow.c:2217 #, c-format msgid "Unsupported file type for %s" msgstr "" #. Since we can process .vik files with issues just show a warning in the status bar #. Not that a user can do much about it... or tells them what this issue is yet... #: ../src/vikwindow.c:2223 #, c-format msgid "WARNING: issues encountered loading %s" msgstr "" #: ../src/vikwindow.c:2278 msgid "Please select a GPS data file to open. " msgstr "" #: ../src/vikwindow.c:2288 msgid "Geocaching" msgstr "" #: ../src/vikwindow.c:2294 msgid "Google Earth" msgstr "" #: ../src/vikwindow.c:2299 msgid "GPX" msgstr "" #: ../src/vikwindow.c:2304 ../src/vikwindow.c:2387 #: ../src/viking.desktop.in.h:1 msgid "Viking" msgstr "" #: ../src/vikwindow.c:2374 msgid "Save as Viking File." msgstr "" #. Try harder... #: ../src/vikwindow.c:2619 ../src/vikwindow.c:2625 msgid "Generating image file..." msgstr "" #: ../src/vikwindow.c:2647 msgid "" "Failed to generate internal image.\n" "\n" "Try creating a smaller image." msgstr "" #: ../src/vikwindow.c:2655 msgid "Failed to generate image file." msgstr "" #. Success #: ../src/vikwindow.c:2660 msgid "Image file generated." msgstr "" #: ../src/vikwindow.c:2764 msgid "" "Viewable region outside allowable pixel size bounds for image. Clipping " "width/height values." msgstr "" #: ../src/vikwindow.c:2789 #, c-format msgid "Total area: %ldm x %ldm (%.3f sq. km)" msgstr "" #: ../src/vikwindow.c:2792 #, c-format msgid "Total area: %ldm x %ldm (%.3f sq. miles)" msgstr "" #: ../src/vikwindow.c:2813 msgid "Save Image" msgstr "" #: ../src/vikwindow.c:2834 msgid "PNG" msgstr "" #: ../src/vikwindow.c:2857 msgid "You must be in UTM mode to use this feature" msgstr "" #: ../src/vikwindow.c:2862 msgid "Choose a directory to hold images" msgstr "" #. todo: default for answers inside VikWindow or static (thruout instance) #: ../src/vikwindow.c:2883 msgid "Save to Image File" msgstr "" #: ../src/vikwindow.c:2900 msgid "Width (pixels):" msgstr "" #: ../src/vikwindow.c:2902 msgid "Height (pixels):" msgstr "" #: ../src/vikwindow.c:2905 msgid "" "WARNING: USING LARGE IMAGES OVER 10000x10000\n" "MAY CRASH THE PROGRAM!" msgstr "" #: ../src/vikwindow.c:2907 msgid "Zoom (meters per pixel):" msgstr "Zoom (metres per pixel):" #: ../src/vikwindow.c:2921 msgid "Area in current viewable window" msgstr "" #: ../src/vikwindow.c:2931 msgid "Save as PNG" msgstr "" #: ../src/vikwindow.c:2932 msgid "Save as JPEG" msgstr "" #: ../src/vikwindow.c:2954 msgid "East-west image tiles:" msgstr "" #: ../src/vikwindow.c:2956 msgid "North-south image tiles:" msgstr "" #: ../src/vikwindow.c:3097 msgid "Choose a background color" msgstr "Choose a background colour" #: ../src/vikwindow.c:3113 msgid "Choose a track highlight color" msgstr "Choose a track highlight colour" #: ../src/vikwindow.c:3134 msgid "_File" msgstr "" #: ../src/vikwindow.c:3135 msgid "_Edit" msgstr "" #: ../src/vikwindow.c:3136 msgid "_View" msgstr "" #: ../src/vikwindow.c:3137 msgid "_Show" msgstr "" #: ../src/vikwindow.c:3140 msgid "_Layers" msgstr "" #: ../src/vikwindow.c:3141 msgid "_Tools" msgstr "" #: ../src/vikwindow.c:3142 msgid "_Webtools" msgstr "" #: ../src/vikwindow.c:3143 ../src/vikwindow.c:3206 msgid "_Help" msgstr "" #: ../src/vikwindow.c:3145 msgid "New file" msgstr "" #: ../src/vikwindow.c:3146 msgid "_Open..." msgstr "" #: ../src/vikwindow.c:3146 msgid "Open a file" msgstr "" #: ../src/vikwindow.c:3147 msgid "Open _Recent File" msgstr "" #: ../src/vikwindow.c:3148 msgid "Append _File..." msgstr "" #: ../src/vikwindow.c:3148 msgid "Append data from a different file" msgstr "" #: ../src/vikwindow.c:3149 msgid "A_cquire" msgstr "" #: ../src/vikwindow.c:3150 msgid "Transfer data from a GPS device" msgstr "" #: ../src/vikwindow.c:3151 msgid "Import File With GPS_Babel..." msgstr "" #: ../src/vikwindow.c:3151 msgid "Import file via GPSBabel converter" msgstr "" #: ../src/vikwindow.c:3153 msgid "Google _Directions..." msgstr "" #: ../src/vikwindow.c:3153 msgid "Get driving directions from Google" msgstr "" #: ../src/vikwindow.c:3156 msgid "_OSM Traces..." msgstr "" #: ../src/vikwindow.c:3156 msgid "Get traces from OpenStreetMap" msgstr "" #: ../src/vikwindow.c:3157 msgid "_My OSM Traces..." msgstr "" #: ../src/vikwindow.c:3157 msgid "Get Your Own Traces from OpenStreetMap" msgstr "" #: ../src/vikwindow.c:3160 msgid "Geo_caches..." msgstr "" #: ../src/vikwindow.c:3160 msgid "Get Geocaches from geocaching.com" msgstr "" #: ../src/vikwindow.c:3163 msgid "Create waypoints from geotagged images" msgstr "" #: ../src/vikwindow.c:3166 msgid "Create waypoints from Wikipedia items in the current view" msgstr "" #: ../src/vikwindow.c:3168 msgid "_Save" msgstr "" #: ../src/vikwindow.c:3168 msgid "Save the file" msgstr "" #: ../src/vikwindow.c:3169 msgid "Save _As..." msgstr "" #: ../src/vikwindow.c:3169 msgid "Save the file under different name" msgstr "" #: ../src/vikwindow.c:3170 msgid "_Generate Image File..." msgstr "" #: ../src/vikwindow.c:3170 msgid "Save a snapshot of the workspace into a file" msgstr "" #: ../src/vikwindow.c:3171 msgid "Generate _Directory of Images..." msgstr "" #: ../src/vikwindow.c:3171 msgid "FIXME:IMGDIR" msgstr "" #: ../src/vikwindow.c:3174 msgid "_Print..." msgstr "" #: ../src/vikwindow.c:3174 msgid "Print maps" msgstr "" #: ../src/vikwindow.c:3177 msgid "E_xit" msgstr "" #: ../src/vikwindow.c:3177 msgid "Exit the program" msgstr "" #: ../src/vikwindow.c:3178 msgid "Save and Exit" msgstr "" #: ../src/vikwindow.c:3178 msgid "Save and Exit the program" msgstr "" #: ../src/vikwindow.c:3180 msgid "Go to the _Default Location" msgstr "" #: ../src/vikwindow.c:3180 msgid "Go to the default location" msgstr "" #: ../src/vikwindow.c:3181 msgid "Go to _Location..." msgstr "" #: ../src/vikwindow.c:3181 msgid "Go to address/place using text search" msgstr "" #: ../src/vikwindow.c:3182 msgid "_Go to Lat/Lon..." msgstr "" #: ../src/vikwindow.c:3182 msgid "Go to arbitrary lat/lon coordinate" msgstr "" #: ../src/vikwindow.c:3183 msgid "Go to UTM..." msgstr "" #: ../src/vikwindow.c:3183 msgid "Go to arbitrary UTM coordinate" msgstr "" #: ../src/vikwindow.c:3184 msgid "_Refresh" msgstr "" #: ../src/vikwindow.c:3184 msgid "Refresh any maps displayed" msgstr "" #: ../src/vikwindow.c:3185 msgid "Set _Highlight Color..." msgstr "Set _Highlight Colour..." #: ../src/vikwindow.c:3186 msgid "Set Bac_kground Color..." msgstr "Set Bac_kground Colour..." #: ../src/vikwindow.c:3187 msgid "Zoom _In" msgstr "" #: ../src/vikwindow.c:3188 msgid "Zoom _Out" msgstr "" #: ../src/vikwindow.c:3189 msgid "Zoom _To..." msgstr "" #: ../src/vikwindow.c:3190 msgid "Pan _North" msgstr "" #: ../src/vikwindow.c:3191 msgid "Pan _East" msgstr "" #: ../src/vikwindow.c:3192 msgid "Pan _South" msgstr "" #: ../src/vikwindow.c:3193 msgid "Pan _West" msgstr "" #: ../src/vikwindow.c:3194 msgid "Background _Jobs" msgstr "" #: ../src/vikwindow.c:3196 msgid "Cu_t" msgstr "" #: ../src/vikwindow.c:3197 msgid "_Copy" msgstr "" #: ../src/vikwindow.c:3198 msgid "_Paste" msgstr "" #: ../src/vikwindow.c:3199 msgid "_Delete" msgstr "" #: ../src/vikwindow.c:3200 msgid "Delete All" msgstr "" #: ../src/vikwindow.c:3201 msgid "_Flush Map Cache" msgstr "" #: ../src/vikwindow.c:3202 msgid "_Set the Default Location" msgstr "" #: ../src/vikwindow.c:3202 msgid "Set the Default Location to the current position" msgstr "" #: ../src/vikwindow.c:3203 msgid "_Preferences" msgstr "" #: ../src/vikwindow.c:3204 msgid "_Properties" msgstr "" #: ../src/vikwindow.c:3207 msgid "_About" msgstr "" #: ../src/vikwindow.c:3213 msgid "_UTM Mode" msgstr "" #: ../src/vikwindow.c:3214 msgid "_Expedia Mode" msgstr "" #: ../src/vikwindow.c:3215 msgid "_Mercator Mode" msgstr "" #: ../src/vikwindow.c:3216 msgid "Lat_/Lon Mode" msgstr "" #: ../src/vikwindow.c:3220 msgid "Show _Scale" msgstr "" #: ../src/vikwindow.c:3220 msgid "Show Scale" msgstr "" #: ../src/vikwindow.c:3221 msgid "Show _Center Mark" msgstr "" #: ../src/vikwindow.c:3221 msgid "Show Center Mark" msgstr "Show Centre Mark" #: ../src/vikwindow.c:3222 msgid "Show _Highlight" msgstr "" #: ../src/vikwindow.c:3222 msgid "Show Highlight" msgstr "" #: ../src/vikwindow.c:3223 msgid "_Full Screen" msgstr "" #: ../src/vikwindow.c:3223 msgid "Activate full screen mode" msgstr "" #: ../src/vikwindow.c:3224 msgid "Show Side _Panel" msgstr "" #: ../src/vikwindow.c:3224 msgid "Show Side Panel" msgstr "" #: ../src/vikwindow.c:3225 msgid "Show Status_bar" msgstr "" #: ../src/vikwindow.c:3225 msgid "Show Statusbar" msgstr "" #: ../src/vikwindow.c:3226 msgid "Show _Toolbar" msgstr "" #: ../src/vikwindow.c:3226 msgid "Show Toolbar" msgstr "" #: ../src/vikwindow.c:3227 msgid "Show _Menu" msgstr "" #: ../src/vikwindow.c:3227 msgid "Show Menu" msgstr "" #: ../src/viking.desktop.in.h:2 msgid "GPS Data Manager" msgstr "" #: ../src/viking.desktop.in.h:3 msgid "Map Based GPS Data Manager (live data capable)." msgstr "" #: ../src/libjpeg/jpeg-data.c:206 msgid "Data does not follow JPEG specification." msgstr "" #: ../src/libjpeg/jpeg-data.c:291 #, c-format msgid "Path '%s' invalid." msgstr "" #: ../src/libjpeg/jpeg-data.c:309 #, c-format msgid "Could not read '%s'." msgstr "" viking-1.4.2/po/ChangeLog0000644000175000017500000002111512175546146012131 000000000000002013-03-07 Wylmer Wang * zh_CN.po: updated 2013-03-06 Radek Stastny * cs.po: updated 2013-02-05 Rob Norris * en_GB.po: updated 2013-01-26 Rob Norris * en_GB.po: updated 2012-11-13 Jorma Karvonen * fi.po: updated 2012-11-07 Wonderfulheart * it.po: updated 2012-11-04 Maxime Teixeira * fr.po: updated 2012-11-04 Aiguanachein * es.po: updated 2012-10-29 Dmitri Bogomolov * ru.po: updated 2012-08-17 Guido Scholz * de.po: updated 2012-08-15 Dirk Roos * nl.po: updated 2012-04-23 Radek Stastny * cs.po: updated 2012-03-26 Dennis Baudys * de.po: updated 2012-02-02 Vyacheslav Sharmanov * ru.po: updated 2011-12-31 Jonay * es.po: updated 2011-10-04 Mantas Kriaučiūnas * lt.po: updated 2011-10-02 Jordi Hortigüela * ca.po: added 2011-09-26 György Balló * hu.po: updated 2011-09-20 Cristian Marchi * it.po: updated 2011-09-17 Rob Norris * en_GB.po: updated 2011-09-17 Nicolas ELIE * fr.po: updated 2011-06-09 Sam Samuels * pt_BR.po: updated 2011-05-09 sezaiyeniay * tr.po: new 2011-05-04 Dmitri Bogomolov * ru.po: updated 2011-04-29 eknus * de.po: updated 2011-04-29 Alessi Andrea * it.po: updated 2011-04-23 Radek Stastny * cs.po: updated 2011-03-08 英华 * zh_CN.po: updated 2011-02-08 Guilhem Bonnefille * fr.po: updated 2011-02-06 Radek Stastny * cs.po: updated 2011-02-03 György Balló * hu.po: updated 2011-02-01 Colegota * es.po: updated 2011-01-10 FULL NAME * jv.po: updated 2011-01-10 Arief Setiadi Wibowo * id.po: updated 2010-12-30 Erik Simmesgård * sv.po: updated 2010-12-19 asphyxia * nl.po: updated 2010-12-08 Júlio Cezar Santos Pires * pt_BR.po: updated 2010-11-21 Patricio Carreño Mancilla * es.po: updated 2010-11-17 György Balló * hu.po: updated 2010-11-17 Guilhem Bonnefille * zh_TW.po: updated 2010-11-17 Guilhem Bonnefille * nb.po: updated 2010-11-17 Guilhem Bonnefille * it.po: updated 2010-11-17 Guilhem Bonnefille * da.po: updated 2010-11-17 Eleanor Chen * zh_CN.po: updated 2010-11-17 eknus * de.po: updated 2010-11-16 Guilhem Bonnefille * fr.po: updated 2010-11-16 Guilhem Bonnefille * el.po: updated 2010-11-16 Guilhem Bonnefille * cs.po: updated 2010-11-12 Jean-Paul GERST * fr.po: updated 2010-11-03 eknus * de.po: updated 2010-11-01 Radek Stastny * cs.po: updated 2010-10-17 simone.sandri * it.po: updated 2010-10-11 aitolos * el.po: updated 2010-09-26 WillyTM * de.po: updated 2010-09-14 Radek Stastny * cs.po: updated 2010-09-07 Jonay * es.po: updated 2010-09-07 issyl0 * en_GB.po: updated 2010-09-07 Guilhem Bonnefille * da.po, de.po, el.po, es.po, fr.po, id.po, it.po, lt.po, nb.po, pl.po, pt_BR.po, sl.po, sv.po, zh_CN.po, zh_TW.po: restore as many translations as possible 2010-09-01 Jonay * es.po: updated 2010-08-21 FULL NAME * uk.po: updated 2010-08-21 Dmitri Bogomolov * ru.po: updated 2010-08-02 Arief Setiadi Wibowo * id.po: updated 2010-07-29 skrzat * pl.po: updated 2010-07-14 Radek Stastny * cs.po: updated 2010-06-24 Mathieu A * fr.po: updated 2010-06-09 Gustavo Guidorizzi * pt_BR.po: updated 2010-06-07 Eleanor Chen * zh_CN.po: updated 2010-05-01 Erik Simmesgård * sv.po: updated 2010-04-23 Mathieu A * fr.po: updated 2010-04-22 DiegoJ * es.po: updated 2010-04-16 skrzat * pl.po: updated 2010-04-12 Vladimir G. Galkin * ru.po: updated 2010-03-28 aitolos * el.po: updated 2010-03-25 Juan Eduardo Riva * es.po: updated 2010-03-20 Fabian Affolter * de.po: updated 2010-03-16 Radek Stastny * cs.po: updated 2010-02-25 issyl0 * en_GB.po: updated 2010-02-25 GP Frello * it.po: updated 2010-02-19 Fabian Affolter * de.po: updated 2010-02-11 Auduf <5097@mail.ru> * ru.po: updated 2010-02-10 Radek Stastny * cs.po: updated 2010-02-05 Guilhem Bonnefille * import launchpad files * Declare new translations 2010-01-03 Jarosław Ogrodnik * de.po: updated 2009-12-09 Giwex * it.po: updated 2009-12-08 Cadu * pt_BR.po: updated 2009-11-02 Arief Setiadi Wibowo * id.po: updated 2009-10-29 shizhao * zh_CN.po: updated 2009-10-17 Tognu * es.po: updated 2009-10-08 tonio_73 * fr.po: updated 2009-10-02 ΑναστόπουλοςΧάρης * el.po: updated 2009-10-12 Guilhem Bonnefille * Declare new translations 2009-09-09 Guilhem Bonnefille * import launchpad files 2009-09-07 rainofchaos * zh_CN.po: updated 2009-09-06 Federico Vera * es.po: updated 2009-09-02 Guilhem Bonnefille * fr.po: updated 2009-08-31 EliotBlennerhassett * en_GB.po: created 2009-08-20 Dainius Sakalinskas * lt.po: updated 2009-08-20 Alessi Andrea * it.po: updated 2009-08-20 Radek Stastny * cs.po: updated 2009-08-18 Guilhem Bonnefille * import launchpad files 2009-07-30 MarcusLS * de.po: updated 2009-07-20 skrzat * pl.po: updated 2009-05-23 MeltingShell * it.po: updated 2009-05-01 Mikael Olofsson * sv.po: updated 2009-04-04 Tadas Masiulionis * lt.po: updated 2009-02-08 Guilhem Bonnefille * fr.po: updated 2009-02-05 Radek Stastny * cs.po: updated 2009-02-04 Guilhem Bonnefille * Automatic update files and manual correction 2008-09-30 Viesturs Zariņš * lv.po: added 2008-09-16 Guilhem Bonnefille * Automatic update files and manual correction 2008-09-06 Aron Xu * updated zh_CN.po 2008-09-06 Tognu * updated es.po 2008-09-04 Štefan Baebler * added sl.po 2008-08-18 Krylov Ilya * added he.po, ru.po 2008-08-08 Ufis * updated it.po 2008-07-25 Radek Stastny * updated cz.po 2008-07-21 Zhang Jun * updated zh_TW.po 2008-07-21 Radek Stastny * updated cz.po 2008-07-17 Dainius Sakalinskas * added lt.po 2008-07-12 Mikael Olofsson * sw.po 2008-07-11 Katz Kawai * added ja.po 2008-07-11 Jocelyn Jaubert * fr.po 2008-07-09 Guilhem Bonnefille * Update files 2008-05-24 Emilio Gómez Fernández * es.po 2008-04-12 Zhang Jun * zh_TW.po, zh_CN.po 2008-04-10 Tomasz * pl.po 2008-03-29 Liam Zwitser * nl.po 2008-03-28 kingu * nb.po 2008-03-22 Pierre Slamich * fr.po 2008-03-11 Alessi Andrea * it.po 2008-02-22 George & Elina * el.po 2008-02-15 Guilhem Bonnefille * cs.po, da.po, de.po, es.po, pt_BR.po, sv.po: Added translations from LaunchPad.net 2007-12-15 Jocelyn Jaubert * fr.po: French translation updated 2007-12-13 Guilhem Bonnefille * fr.po: Added French translation 2007-11-26 Guilhem Bonnefille * Start I18N viking-1.4.2/po/fi.po0000644000175000017500000026173612175546146011334 00000000000000# Finnish messages for viking # Copyright © 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the viking package. # Jorma Karvonen , 2012. # msgid "" msgstr "" "Project-Id-Version: viking\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-02-04 23:29+0100\n" "PO-Revision-Date: 2012-11-13 23:03+0000\n" "Last-Translator: Jorma Karvonen \n" "Language-Team: Finnish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2013-03-23 17:12+0000\n" "X-Generator: Launchpad (build 16540)\n" "Language: fi\n" #: ../src/acquire.c:103 ../src/vikgpslayer.c:1185 msgid "Done." msgstr "Valmis." #: ../src/acquire.c:114 msgid "No data." msgstr "Ei tietoja." #: ../src/acquire.c:154 ../src/acquire.c:404 msgid "Error: acquisition failed." msgstr "Virhe: hankinta epäonnistui." #: ../src/acquire.c:341 msgid "Working..." msgstr "Työn alla..." #. This shouldn't happen... #: ../src/acquire.c:394 msgid "" "Unable to create command\n" "Acquire method failed." msgstr "" #: ../src/acquire.c:486 msgid "_Filter" msgstr "" #: ../src/acquire.c:501 #, c-format msgid "Filter with %s" msgstr "" #: ../src/acquire.c:518 msgid "Filter" msgstr "" #: ../src/background.c:52 #, c-format msgid "%d items" msgstr "%d alkiota" #: ../src/background.c:248 msgid "Job" msgstr "Työ" #: ../src/background.c:252 msgid "Progress" msgstr "Edistyminen" #: ../src/background.c:268 msgid "Viking Background Jobs" msgstr "Viking-taustatyöt" #: ../src/bing.c:47 msgid "Bing" msgstr "Bing" #. VIK_GTK_WINDOW_FROM_WIDGET(vp) #: ../src/bingmapsource.c:445 msgid "Bing attribution Loading" msgstr "Bing-attribuuttilataus" #: ../src/clipboard.c:95 msgid "paste failed" msgstr "liittäminen epäonnistui" #: ../src/clipboard.c:105 msgid "wrong clipboard data size" msgstr "virheellinen leikepöytätietojen koko" #: ../src/clipboard.c:124 #, c-format msgid "" "The clipboard contains sublayer data for %s layers. You must select a layer " "of this type to paste the clipboard data." msgstr "" "Leikepöytä sisältää alikerrostietoja %s:lle kerrokselle. Sinun on valittava " "tämän tyyppinen kerros leikepöytätietojen liittämiseksi." #: ../src/clipboard.c:236 msgid "" "In order to paste a waypoint, please select an appropriate layer to paste " "into." msgstr "Välietapin liittämiseksi valitse sopiva kerros liittämiskohteeksi." #: ../src/dialog.c:52 msgid "Go to Lat/Lon" msgstr "Siirry leveysp./pituusp." #: ../src/dialog.c:64 ../src/dialog.c:251 msgid "Latitude:" msgstr "Leveyspiiri:" #: ../src/dialog.c:70 ../src/dialog.c:256 msgid "Longitude:" msgstr "Pituuspiiri:" #: ../src/dialog.c:102 msgid "Go to UTM" msgstr "Siirry UTM:ään" #: ../src/dialog.c:115 msgid "Northing:" msgstr "Pohjoista leveyttä:" #: ../src/dialog.c:121 msgid "Easting:" msgstr "Itäistä pituutta:" #: ../src/dialog.c:128 msgid "Zone:" msgstr "Vyöhyke:" #: ../src/dialog.c:131 msgid "Letter:" msgstr "Kirjain:" #: ../src/dialog.c:199 msgid "Waypoint Properties" msgstr "Välietappiominaisuudet" #: ../src/dialog.c:233 msgid "Name:" msgstr "Nimi:" #: ../src/dialog.c:261 msgid "Altitude:" msgstr "Korkeusasema:" #: ../src/dialog.c:266 msgid "Comment:" msgstr "Kommentti:" #: ../src/dialog.c:274 ../src/osm-traces.c:437 msgid "Description:" msgstr "Kuvaus:" #: ../src/dialog.c:277 msgid "Image:" msgstr "Kuva:" #: ../src/dialog.c:282 msgid "Symbol:" msgstr "Symboli:" #: ../src/dialog.c:291 msgid "(none)" msgstr "(ei mitään)" #. TODO: other checks (isalpha or whatever ) #: ../src/dialog.c:356 msgid "Please enter a name for the waypoint." msgstr "Kirjoita välietapin nimi." #: ../src/dialog.c:529 ../src/geonamessearch.c:243 #: ../src/datasource_osm_my_traces.c:507 msgid "Nothing was selected" msgstr "Mitään ei ole valittu" #: ../src/dialog.c:537 msgid "Add Route" msgstr "" #: ../src/dialog.c:537 msgid "Add Track" msgstr "Lisää reitti" #: ../src/dialog.c:545 msgid "Route Name:" msgstr "" #: ../src/dialog.c:545 msgid "Track Name:" msgstr "Reittinimi:" #: ../src/dialog.c:565 msgid "Please enter a name for the track." msgstr "Kirjoita reitin nimi." #: ../src/dialog.c:623 msgid "Zoom Factors..." msgstr "Loitonnus-/lähennystekijät..." #: ../src/dialog.c:637 msgid "Zoom factor (in meters per pixel):" msgstr "Loitonnus-/lähennystekijä (metreissä per pikseli):" #: ../src/dialog.c:638 msgid "X (easting): " msgstr "X (itäistä pituutta): " #: ../src/dialog.c:639 msgid "Y (northing): " msgstr "Y (pohjoista leveyttä): " #: ../src/dialog.c:644 msgid "X and Y zoom factors must be equal" msgstr "X- ja Y-loitonnus/lähennystekijöiden on oltava yhtä suuria" #: ../src/dialog.c:699 msgid "1 min" msgstr "1 min." #: ../src/dialog.c:700 msgid "1 hour" msgstr "1 tunti" #: ../src/dialog.c:701 msgid "1 day" msgstr "1 päivä" #: ../src/dialog.c:702 msgid "Custom (in minutes):" msgstr "Oma (minuuteissa):" #: ../src/dialog.c:808 msgid "GPS Data and Topo Analyzer, Explorer, and Manager." msgstr "GPS-tieto- ja topologia-analysoija, -selain ja -hallintaohjelma" #: ../src/dialog.c:809 msgid "" "This program is free software; you can redistribute it and/or modify it " "under the terms of the GNU General Public License as published by the Free " "Software Foundation; either version 2 of the License, or (at your option) " "any later version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT " "ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or " "FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for " "more details.\n" "\n" "You should have received a copy of the GNU General Public License along with " "this program; if not, write to the Free Software Foundation, Inc., 59 Temple " "Place, Suite 330, Boston, MA 02111-1307, USA" msgstr "" "Tämä ohjelma on vapaaohjelmisto; voitte levittää edelleen ja/tai \n" "muuttaa sitä Free Software Foundationin julkaiseman GNU General Public\n" "Licensen ehtojen mukaisesti; joko version 2, tai (valintanne mukaan)\n" "minkä tahansa myöhemmän version.\n" "\n" "Tätä ohjelmaa levitetään siinä toivossa, että se olisi hyödyllinen,\n" "mutta TAKUUTA EI OLE; ei edes KAUPALLISESTI HYVÄKSYTTÄVÄSTÄ LAADUSTA\n" "tai SOPIVUUDESTA TIETTYYN TARKOITUKSEEN. Katsokaa lisätietoja GNU\n" "General Public Licensestä.\n" "\n" "\"Olette saaneet kopion GNU General Public Licensestä tämän\n" "ohjelman mukana. Ellette saaneet, kirjoittakaa osoitteeseen\n" "Free Software Foundation, Inc., 59 Temple Place, Suite 330,\n" "Boston, MA 02111-1307, USA." #: ../src/dialog.c:837 msgid "Translation is coordinated on http://launchpad.net/viking" msgstr "Kotoistamiset koordinoi http://launchpad.net/viking" #: ../src/dialog.c:845 msgid "Download along track" msgstr "Lataa reittiä pitkin" #: ../src/dialog.c:851 msgid "Map type:" msgstr "Karttatyyppi:" #: ../src/dialog.c:856 msgid "Zoom level:" msgstr "Loitonnus-/lähennystaso:" #: ../src/dialog.c:896 #, c-format msgid "The map data is licensed: %s." msgstr "Karttatiedot on lisensoitu: %s." #: ../src/dialog.c:899 #, c-format msgid "" "The data provided by '%s' are licensed under the following license: " "%s.\n" "Please, read the license before continuing." msgstr "" "Kohteen ’%s’ tarjoamat tiedot on lisenssoitu seuraavan lisenssin " "mukaan: %s.\n" "Lue lisenssiehdot ennen jatkamista." #: ../src/dialog.c:904 msgid "Open license" msgstr "Avaa lisenssi" #: ../src/expedia.c:53 msgid "Expedia Street Maps" msgstr "Expedia Street-kartat" #: ../src/expedia.c:81 msgid "Invalid expedia altitude" msgstr "Virheellinen expedia-korkeus" #: ../src/expedia.c:112 #, c-format msgid "" "Couldn't open EXPEDIA image file (right after successful download! Please " "report and delete image file!): %s" msgstr "" "EXPEDIA-kuvatiedoston avaus epäonnistui (heti onnistuneen latauksen jälkeen! " "Ilmoita ja poista kuvatiedosto!): %s" #: ../src/expedia.c:125 #, c-format msgid "" "Couldn't save EXPEDIA image file (right after successful download! Please " "report and delete image file!): %s" msgstr "" "EXPEDIA-kuvatiedoston tallentaminen epäonnistui (heti onnistuneen latauksen " "jälkeen! Ilmoita ja poista kuvatiedosto!): %s" #. * #. * See http://www.geonames.org/export/wikipedia-webservice.html#wikipediaBoundingBox #. #. Translators may wish to change this setting as appropriate to get Wikipedia articles in that language #: ../src/geonamessearch.c:46 msgid "en" msgstr "" #: ../src/geonamessearch.c:121 msgid "Search" msgstr "Etsi" #: ../src/geonamessearch.c:123 msgid "No entries found!" msgstr "Kohteita ei löytynyt!" #. NB could allow columns to be shifted around by doing this after each new #. gtk_tree_view_column_set_reorderable ( column, TRUE ); #. However I don't think is that useful, so I haven't put it in #: ../src/geonamessearch.c:177 ../src/datasource_osm_my_traces.c:425 msgid "Name" msgstr "" #: ../src/geonamessearch.c:182 msgid "Feature" msgstr "" #: ../src/geonamessearch.c:187 ../src/datasource_osm_my_traces.c:440 msgid "Lat/Lon" msgstr "" #: ../src/geonamessearch.c:269 ../src/googlesearch.c:100 msgid "couldn't map temp file" msgstr "tilapäisen tiedoston kartoittaminen epäonnistui" #: ../src/globals.c:44 msgid "Degree format:" msgstr "Astemuoto:" #: ../src/globals.c:48 msgid "Distance units:" msgstr "Etäisyysyksiköt:" #: ../src/globals.c:52 msgid "Speed units:" msgstr "Nopeusyksiköt:" #: ../src/globals.c:56 msgid "Height units:" msgstr "Korkeusyksiköt:" #: ../src/globals.c:60 msgid "Use large waypoint icons:" msgstr "Käytä suurikokoisia välietappikuvakkeita:" #: ../src/globals.c:64 msgid "Default latitude:" msgstr "Oletusleveysaste:" #: ../src/globals.c:67 msgid "Default longitude:" msgstr "Oletuspituusaste:" #: ../src/globals.c:73 msgid "Alphabetical" msgstr "" #: ../src/globals.c:73 ../src/datasource_osm_my_traces.c:435 msgid "Time" msgstr "" #: ../src/globals.c:76 msgid "KML File Export Units:" msgstr "KML-tiedostovientiyksiköt:" #: ../src/globals.c:77 msgid "GPX Track Order:" msgstr "" #: ../src/globals.c:82 msgid "Image Viewer:" msgstr "Kuvaselain:" #: ../src/globals.c:87 msgid "External GPX Program 1:" msgstr "Ulkoinen GPX-ohjelma 1:" #: ../src/globals.c:88 msgid "External GPX Program 2:" msgstr "Ulkoinen GPX-ohjelma 2:" #. Defaults for the options are setup here #: ../src/globals.c:96 msgid "General" msgstr "Yleistä" #. New Tab #: ../src/globals.c:121 msgid "Export/External" msgstr "Vie/Ulkoinen" #. Webtools #: ../src/google.c:36 msgid "Google" msgstr "Google" #: ../src/datasource_file.c:59 msgid "Import file with GPSBabel" msgstr "Tuo tiedosto GPSBabel-ohjelmalla" #: ../src/datasource_file.c:60 msgid "Imported file" msgstr "Tuotu tiedosto" #. The file selector #: ../src/datasource_file.c:133 msgid "File:" msgstr "Tiedosto:" #: ../src/datasource_file.c:134 msgid "File to import" msgstr "Tuotava tiedosto" #: ../src/datasource_file.c:141 msgid "All files" msgstr "Kaikki tiedostot" #. The file format selector #: ../src/datasource_file.c:148 msgid "File type:" msgstr "Tiedostotyyppi:" # Tämä on debug-sanoma #: ../src/datasource_file.c:193 #, c-format msgid "using babel args '%s' and file '%s'" msgstr "käytetään babel-argumentteja ’%s’ ja tiedostoa ’%s’" #: ../src/datasource_gc.c:66 msgid "Download Geocaches" msgstr "Lataa geokätköt" #: ../src/datasource_gc.c:67 msgid "Geocaching.com Caches" msgstr "Geocaching.com-kätköt" #: ../src/datasource_gc.c:84 msgid "geocaching.com username:" msgstr "geocaching.com-käyttäjänimi:" #: ../src/datasource_gc.c:85 msgid "geocaching.com password:" msgstr "geocaching.com-salasana:" #: ../src/datasource_gc.c:126 #, c-format msgid "" "Can't find %s or %s in path! Check that you have installed it correctly." msgstr "" "Kohteiden %s tai %s löytäminen polussa epäonnistui! Tarkista, että olet " "asentanut sen oikein." #: ../src/datasource_gc.c:188 msgid "Number geocaches:" msgstr "Geokätköjen lukumäärä:" #: ../src/datasource_gc.c:190 msgid "Centered around:" msgstr "Keskitetty ympärille:" #: ../src/datasource_gc.c:226 msgid "Broken input - using some defaults" msgstr "Rikkinäinen syöte - käytetään joitakin oletusarvoja" #: ../src/datasource_geotag.c:51 msgid "Create Waypoints from Geotagged Images" msgstr "Luo välietapit Geotagged-kuvista" #: ../src/datasource_geotag.c:52 msgid "Geotagged Images" msgstr "Geotagged-kuvat" #: ../src/datasource_geotag.c:102 ../src/vikwindow.c:2314 #: ../src/vikwindow.c:2382 ../src/vikwindow.c:2824 msgid "All" msgstr "Kaikki" #: ../src/datasource_geotag.c:107 ../src/vikwindow.c:2829 msgid "JPG" msgstr "JPG" #: ../src/datasource_geotag.c:165 #, c-format msgid "Unable to create waypoint from %s" msgstr "Välietapin luominen kohteesta %s epäonnistui" #: ../src/datasource_google.c:49 ../src/datasource_google.c:50 msgid "Google Directions" msgstr "Google-ajo-ohjeet" #: ../src/datasource_google.c:77 msgid "From:" msgstr "Mistä:" #: ../src/datasource_google.c:79 msgid "To:" msgstr "Mihin:" #: ../src/datasource_gps.c:57 msgid "Acquire from GPS" msgstr "Hanki GPS:stä" #: ../src/datasource_gps.c:58 msgid "Acquired from GPS" msgstr "Hankittu GPS:stä" # Tämä on debug-sanoma #: ../src/datasource_gps.c:221 #, c-format msgid "using cmdline '%s' and file '%s'\n" msgstr "käytetään cmdline ’%s’ ja file ’%s’\n" #: ../src/datasource_gps.c:297 ../src/vikgpslayer.c:884 #, c-format msgid "Downloading %d waypoint..." msgid_plural "Downloading %d waypoints..." msgstr[0] "Ladataan %d välietappi..." msgstr[1] "Ladataan %d välietappia..." #: ../src/datasource_gps.c:298 ../src/vikgpslayer.c:885 #, c-format msgid "Downloading %d trackpoint..." msgid_plural "Downloading %d trackpoints..." msgstr[0] "Ladataan %d reittipiste..." msgstr[1] "Ladataan %d reittipisteet..." #: ../src/datasource_gps.c:303 ../src/vikgpslayer.c:890 #, c-format msgid "Downloading %d routepoint..." msgid_plural "Downloading %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/datasource_gps.c:325 ../src/datasource_gps.c:326 #: ../src/datasource_gps.c:327 #, c-format msgid "Downloaded %d out of %d %s..." msgstr "Ladattu %d / %d %s..." #: ../src/datasource_gps.c:331 ../src/datasource_gps.c:332 #: ../src/datasource_gps.c:333 #, c-format msgid "Downloaded %d %s." msgstr "Ladattu %d %s." #: ../src/datasource_gps.c:347 ../src/vikgpslayer.c:968 #, c-format msgid "GPS Device: %s" msgstr "GPS-laite: %s" #: ../src/datasource_gps.c:370 ../src/vikgpslayer.c:1042 #: ../src/vikgpslayer.c:1110 msgid "Status: Working..." msgstr "" #: ../src/datasource_gps.c:469 ../src/vikgpslayer.c:150 msgid "GPS Protocol:" msgstr "GPS-yhteyskäytäntö:" #. List now assigned at runtime #: ../src/datasource_gps.c:488 ../src/vikgpslayer.c:151 msgid "Serial Port:" msgstr "Sarjaportti:" #: ../src/datasource_gps.c:509 msgid "" "Turn Off After Transfer\n" "(Garmin/NAViLink Only)" msgstr "" "Käännä pois päältä siirron jälkeen\n" "(Vain Garmin/NAViLink)" #: ../src/datasource_gps.c:512 msgid "Tracks:" msgstr "Reitit:" #: ../src/datasource_gps.c:516 msgid "Routes:" msgstr "" #: ../src/datasource_gps.c:520 msgid "Waypoints:" msgstr "Välietapit:" #: ../src/datasource_gps.c:594 ../src/vikgpslayer.c:1305 msgid "GPS device: N/A" msgstr "GPS-laite: Ei saatavilla" #: ../src/datasource_osm.c:52 ../src/datasource_osm.c:53 msgid "OSM traces" msgstr "OSM-jäljet:" #: ../src/datasource_osm.c:80 msgid "Page number:" msgstr "Sivunumero:" #: ../src/datasource_osm_my_traces.c:63 ../src/datasource_osm_my_traces.c:64 msgid "OSM My Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:108 msgid "Username:" msgstr "" #: ../src/datasource_osm_my_traces.c:113 msgid "The email or username used to login to OSM" msgstr "" #: ../src/datasource_osm_my_traces.c:115 ../src/osm-traces.c:413 msgid "Password:" msgstr "Salasana:" #: ../src/datasource_osm_my_traces.c:120 msgid "The password used to login to OSM" msgstr "" #: ../src/datasource_osm_my_traces.c:430 msgid "Description" msgstr "" #: ../src/datasource_osm_my_traces.c:445 msgid "Privacy" msgstr "" #: ../src/datasource_osm_my_traces.c:452 msgid "Within Current View" msgstr "" #: ../src/datasource_osm_my_traces.c:518 msgid "GPS Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:520 msgid "None found!" msgstr "" #: ../src/datasource_osm_my_traces.c:629 msgid "My OSM Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:645 #, c-format msgid "Unable to get trace: %s" msgstr "" #: ../src/datasource_wikipedia.c:32 msgid "Create Waypoints from Wikipedia Articles" msgstr "" #: ../src/datasource_wikipedia.c:33 msgid "Wikipedia Waypoints" msgstr "" #: ../src/dem.c:65 ../src/dem.c:79 msgid "Invalid DEM" msgstr "Virheellinen DEM" #: ../src/dem.c:121 msgid "Invalid DEM header" msgstr "Virheellinen DEM-otsake" #: ../src/dem.c:190 ../src/dem.c:203 msgid "Incorrect DEM Class B record: expected 1" msgstr "Virheellinen DEM Class B-tietue, odotettiin 1" #: ../src/dem.c:360 #, c-format msgid "Couldn't map file %s: %s" msgstr "Tiedoston %s kartoittaminen epäonnistui: %s" # As a translator I have no idea, what this means. What is Tile age and what (s)?? #: ../src/download.c:112 msgid "Tile age (s):" msgstr "Tiili-ikä (s):" #: ../src/download.c:233 #, c-format msgid "Download error: %s" msgstr "Latausvirhe: %s" #: ../src/download.c:313 msgid "couldn't open temp file" msgstr "tilapäisen tiedoston avaaminen epäonnistui" #: ../src/file.c:456 ../src/file.c:461 #, c-format msgid "Draw mode '%s' no more supported" msgstr "Piirrostilaa ’%s’ ei enää tueta" #: ../src/geotag_exif.c:433 msgid "Not enough memory." msgstr "Muisti ei riitä." #: ../src/geotag_exif.c:451 msgid "Setting a value for this tag is unsupported!" msgstr "Arvon asettamista tälle tunnisteelle ei tueta!" #: ../src/geotag_exif.c:470 #, c-format msgid "Too few components specified (need %d, found %d)\n" msgstr "Määritelty liian vähän komponentteja (tarvitaan %d, löytyi %d)\n" #: ../src/geotag_exif.c:474 msgid "Numeric value expected\n" msgstr "Odotettiin numeroarvoa\n" #: ../src/geotag_exif.c:482 msgid "This shouldn't happen!" msgstr "Tätä ei pitäisi tapahtua!" #: ../src/geotag_exif.c:552 msgid "Not yet implemented!" msgstr "Ei ole vielä toteutettu!" #: ../src/geotag_exif.c:565 msgid "Warning; Too many components specified!" msgstr "Varoitus; Liian monta komponenttia määritelty!" #: ../src/osm-traces.c:73 msgid "Identifiable (public w/ timestamps)" msgstr "Tunnistettava (julkiset w/ aikaleimat)" #: ../src/osm-traces.c:74 msgid "Trackable (private w/ timestamps)" msgstr "Reititettävä (yksityiset w/ aikaleimat)" #: ../src/osm-traces.c:75 msgid "Public" msgstr "Julkinen" #: ../src/osm-traces.c:76 msgid "Private" msgstr "Yksityinen" #: ../src/osm-traces.c:93 msgid "OSM username:" msgstr "OSM-käyttäjänimi:" #: ../src/osm-traces.c:94 msgid "OSM password:" msgstr "OSM-salasana:" #. Preferences #: ../src/osm-traces.c:151 msgid "OpenStreetMap Traces" msgstr "OpenStreetMap-jäljet" #: ../src/osm-traces.c:234 #, c-format msgid "failed to upload data: HTTP response is %ld" msgstr "tietojen kopioiminen palvelimelle epäonnistui: HTTP-vastaus on %ld" #: ../src/osm-traces.c:239 #, c-format msgid "curl_easy_getinfo failed: %d" msgstr "curl_easy_getinfo epäonnistui: %d" #: ../src/osm-traces.c:244 #, c-format msgid "curl request failed: %s" msgstr "curl-pyyntö epäonnistui: %s" #: ../src/osm-traces.c:275 #, c-format msgid "failed to open temporary file: %s" msgstr "tilapäisen tiedoston avaaminen epäonnistui: %s" #. Success #: ../src/osm-traces.c:328 msgid "Uploaded to OSM" msgstr "Kopioitu OSM-palvelimelle" #: ../src/osm-traces.c:332 msgid "FAILED TO UPLOAD DATA TO OSM - CURL PROBLEM" msgstr "TIETOJEN KOPIOIMINEN OSM-PALVELIMELLE EPÄONNISTUI - CURL-PULMA" #: ../src/osm-traces.c:335 msgid "FAILED TO UPLOAD DATA TO OSM" msgstr "TIETOJEN KOPIOIMINEN OSM-PALVELIMELLE EPÄONNISTUI" #: ../src/osm-traces.c:335 msgid "HTTP response code" msgstr "HTTP-vastauskoodi" #: ../src/osm-traces.c:348 #, c-format msgid "failed to unlink temporary file: %s" msgstr "unlink-toiminto tilapäiselle tiedostolle epäonnistui: %s" #: ../src/osm-traces.c:387 msgid "OSM upload" msgstr "OSM-kopiointi palvelimelle" #: ../src/osm-traces.c:405 msgid "Email:" msgstr "Sähköpostiosoite:" #: ../src/osm-traces.c:410 msgid "" "The email used as login\n" "Enter the email you use to login into www.openstreetmap.org." msgstr "" "Sähköpostiosoitetta käytetty kirjautumiseen\n" "Kirjoita sähköpostiosoite, jota käytät kirjautumiseen sivustolle " "www.openstreetmap.org." #: ../src/osm-traces.c:418 msgid "" "The password used to login\n" "Enter the password you use to login into " "www.openstreetmap.org." msgstr "" "Salasanaa käytetty kirjautumiseen\n" "Kirjoita salasana, jota käytät kirjautumiseen sivustolle " "www.openstreetmap.org." #: ../src/osm-traces.c:423 msgid "File's name:" msgstr "Tiedoston nimi:" #: ../src/osm-traces.c:433 msgid "" "The name of the file on OSM\n" "This is the name of the file created on the server.This is not the " "name of the local file." msgstr "" "Tiedoston nimi OSM:ssä\n" "Tämä on palvelimella luodun tiedoston nimi. Tämä ei ole paikallisen " "tiedoston nimi." #: ../src/osm-traces.c:442 msgid "The description of the trace" msgstr "Jäljen kuvaus" #: ../src/osm-traces.c:444 msgid "Tags:" msgstr "Tunnisteet:" #: ../src/osm-traces.c:449 msgid "The tags associated to the trace" msgstr "Jälkeen liitetyt tunnisteet" #: ../src/osm-traces.c:482 #, c-format msgid "Uploading %s to OSM" msgstr "Kopioidaan %s OSM-palvelimelle" #: ../src/mapcache.c:61 msgid "Map cache memory size (MB):" msgstr "" #: ../src/print.c:53 msgid "None" msgstr "Ei mitään" #: ../src/print.c:54 msgid "Horizontally" msgstr "Vaakasuoraan" #: ../src/print.c:55 msgid "Vertically" msgstr "Pystysuoraan" #: ../src/print.c:56 msgid "Both" msgstr "Molemmat" #: ../src/print.c:120 msgid "Image Settings" msgstr "Kuva-asetukset" #: ../src/print.c:546 msgid "done" msgstr "valmis" #. Page Size #: ../src/print.c:575 msgid "_Adjust Page Size and Orientation" msgstr "_Säädä kuvakoko ja suuntaus" #: ../src/print.c:591 msgid "C_enter:" msgstr "K_eskitä:" #. ignore page margins #: ../src/print.c:609 msgid "Ignore Page _Margins" msgstr "Ohita sivu_marginaalit" #: ../src/print.c:628 msgid "Image S_ize:" msgstr "_Kuvakoko:" #: ../src/util.c:81 msgid "Could not launch web browser." msgstr "Webbiselaimen käynnistäminen epäonnistui." #: ../src/util.c:92 msgid "Could not create new email." msgstr "Uuden sähköpostiosoitteen luominen epäonnistui." #: ../src/vikcoordlayer.c:46 msgid "Color:" msgstr "Väri:" #: ../src/vikcoordlayer.c:47 msgid "Minutes Width:" msgstr "Minuuttipituus:" #: ../src/vikcoordlayer.c:48 msgid "Line Thickness:" msgstr "Viivan paksuus:" #: ../src/vikcoordlayer.c:56 msgid "Coordinate" msgstr "" #: ../src/datasource_bfilter.c:46 msgid "Max number of points:" msgstr "Pisteiden enimmäismäärä:" #: ../src/datasource_bfilter.c:60 msgid "Simplify All Tracks..." msgstr "Yksinkertaista kaikkia reittejä..." #: ../src/datasource_bfilter.c:61 msgid "Simplified Tracks" msgstr "Yksinkertaistetut reitit" #: ../src/datasource_bfilter.c:96 ../src/datasource_bfilter.c:97 msgid "Remove Duplicate Waypoints" msgstr "Poista välietappien kaksoiskappaleet" #: ../src/datasource_bfilter.c:129 msgid "Waypoints Inside This" msgstr "Poista välietapit tämän sisältä" #: ../src/datasource_bfilter.c:130 msgid "Polygonized Layer" msgstr "Monikulmaistettu kerros" #: ../src/datasource_bfilter.c:165 msgid "Waypoints Outside This" msgstr "Välietapit tämän ulkopuolella" # Tämä on varmaan typo ? #: ../src/datasource_bfilter.c:166 msgid "Polygonzied Layer" msgstr "Monikulmaistettu kerros" #: ../src/main.c:89 #, c-format msgid "Ignoring Xlib error: error code %d request code %d\n" msgstr "" #: ../src/main.c:102 msgid "Enable debug output" msgstr "Ota käyttöön vianjäljitystulostus" #: ../src/main.c:103 msgid "Enable verbose output" msgstr "Ota käyttöön lavea tulostus" #: ../src/main.c:104 msgid "Show version" msgstr "Näytä versio" #: ../src/osm.c:106 msgid "On Disk OSM Tile Format" msgstr "" #: ../src/osm.c:121 msgid "OSM (view)" msgstr "OSM (näkymä)" #: ../src/osm.c:125 msgid "OSM (edit)" msgstr "OSM (muokkaa)" #: ../src/osm.c:129 msgid "OSM (render)" msgstr "OSM (renderoi)" #. Example: http://127.0.0.1:8111/load_and_zoom?left=8.19&right=8.20&top=48.605&bottom=48.590&select=node413602999 #. JOSM or merkaartor must already be running with remote interface enabled #: ../src/osm.c:136 msgid "Local port 8111 (eg JOSM)" msgstr "Paikallinen portti 8111 (esim.: JOSM)" #: ../src/preferences.c:285 msgid "Preferences" msgstr "Asetukset" #: ../src/uibuilder.c:147 msgid "Take care that this password will be stored clearly in a plain file." msgstr "" "Muista, että tämä salasana tallennetaan salaamattomaan tekstitiedostoon." #: ../src/vikaggregatelayer.c:37 msgid "Aggregate" msgstr "" #: ../src/vikdemlayer.c:101 msgid "Absolute height" msgstr "Absoluuttinen korkeus" #: ../src/vikdemlayer.c:102 msgid "Height gradient" msgstr "Korkeuskaltevuus" #: ../src/vikdemlayer.c:118 msgid "DEM Files:" msgstr "DEM-tiedostot:" #: ../src/vikdemlayer.c:119 msgid "Download Source:" msgstr "Latauslähde:" #: ../src/vikdemlayer.c:120 msgid "Min Elev Color:" msgstr "Alimman korkeusaseman väri" #: ../src/vikdemlayer.c:121 msgid "Type:" msgstr "Tyyppi:" #: ../src/vikdemlayer.c:122 msgid "Min Elev:" msgstr "Alin korkeusasema:" #: ../src/vikdemlayer.c:123 msgid "Max Elev:" msgstr "Ylin korkeusasema:" #: ../src/vikdemlayer.c:134 msgid "_DEM Download" msgstr "" #: ../src/vikdemlayer.c:134 msgid "DEM Download" msgstr "" #: ../src/vikdemlayer.c:188 msgid "DEM" msgstr "" #: ../src/vikdemlayer.c:284 #, c-format msgid "Number of files: %d" msgstr "Tiedostojen lukumäärä: %d" #: ../src/vikdemlayer.c:385 msgid "DEM Loading" msgstr "DEM-lataus" #: ../src/vikdemlayer.c:889 #, c-format msgid "No SRTM data available for %f, %f" msgstr "SRTM-tietoja ei ole käytettävissä kohteelle %f, %f" #: ../src/vikdemlayer.c:1149 #, c-format msgid "Downloading DEM %s" msgstr "Ladataan DEM %s" #: ../src/vikfileentry.c:68 msgid "Browse..." msgstr "Selaa..." #: ../src/vikfileentry.c:96 msgid "Choose file" msgstr "Valitse tiedosto" #: ../src/vikfilelist.c:48 msgid "Choose file(s)" msgstr "Valitse tiedostot" #: ../src/vikfilelist.c:172 msgid "Add..." msgstr "Lisää..." #: ../src/vikfilelist.c:173 msgid "Delete" msgstr "Poista" #: ../src/vikgeoreflayer.c:70 msgid "_Georef Move Map" msgstr "" #: ../src/vikgeoreflayer.c:70 msgid "Georef Move Map" msgstr "Georef-siirtokartta" #: ../src/vikgeoreflayer.c:77 msgid "Georef Z_oom Tool" msgstr "" #: ../src/vikgeoreflayer.c:77 msgid "Georef Zoom Tool" msgstr "Georef-loitonnus-/lähennystyökalu" #: ../src/vikgeoreflayer.c:87 msgid "GeoRef Map" msgstr "" #: ../src/vikgeoreflayer.c:335 ../src/vikmapslayer.c:685 #, c-format msgid "Couldn't open image file: %s" msgstr "Kuvatiedoston avaus epäonnistui: %s" #: ../src/vikgeoreflayer.c:365 msgid "Unexpected end of file reading World file." msgstr "World-tiedoston lukemisen odottamaton loppu." #: ../src/vikgeoreflayer.c:381 ../src/vikgeoreflayer.c:426 msgid "Choose World file" msgstr "Valitse World-tiedosto" #: ../src/vikgeoreflayer.c:394 msgid "The World file you requested could not be opened for reading." msgstr "Pyytämäsi World-tiedoston avaus lukemista varten epäonnistui." #: ../src/vikgeoreflayer.c:439 msgid "The file you requested could not be opened for writing." msgstr "Pyytämäsi tiedoston avaus kirjoittamista varten epäonnistui." #: ../src/vikgeoreflayer.c:456 ../src/viklayer.c:480 msgid "Layer Properties" msgstr "Kerrosominaisuudet" #: ../src/vikgeoreflayer.c:478 msgid "World File Parameters:" msgstr "Loitonna/lähennä (metriä per pikseli):" #: ../src/vikgeoreflayer.c:479 msgid "Load From File..." msgstr "Lataa tiedostosta..." #: ../src/vikgeoreflayer.c:484 msgid "Corner pixel easting:" msgstr "Kulmapikselin itäinen pituusaste:" #: ../src/vikgeoreflayer.c:486 msgid "the UTM \"easting\" value of the upper-right corner pixel of the map" msgstr "Kartan oikean yläkulman pikselin UTM ”itäistä pituutta”-arvo" #: ../src/vikgeoreflayer.c:488 msgid "Corner pixel northing:" msgstr "Kulmapikselin pohjoinen leveysaste:" #: ../src/vikgeoreflayer.c:490 msgid "the UTM \"northing\" value of the upper-right corner pixel of the map" msgstr "Kartan oikean yläkulman pikselin UTM ”pohjoista leveyttä”-arvo" #: ../src/vikgeoreflayer.c:492 msgid "X (easting) scale (mpp): " msgstr "X (itäistä pituutta)-skaala (mpp): " #: ../src/vikgeoreflayer.c:493 msgid "Y (northing) scale (mpp): " msgstr "Y (pohjoista leveyttä)-skaala (mpp): " #: ../src/vikgeoreflayer.c:496 msgid "the scale of the map in the X direction (meters per pixel)" msgstr "karttaskaala X-suunnassa (metriä per pikseli)" #: ../src/vikgeoreflayer.c:498 msgid "the scale of the map in the Y direction (meters per pixel)" msgstr "karttaskaala Y-suunnassa (metriä per pikseli)" #: ../src/vikgeoreflayer.c:500 msgid "Map Image:" msgstr "Karttakuva:" #. Now with icons #: ../src/vikgeoreflayer.c:608 msgid "_Zoom to Fit Map" msgstr "_Loitonna/Lähennä sopimaan karttaan" #: ../src/vikgeoreflayer.c:614 msgid "_Goto Map Center" msgstr "_Siirry karttakeskustaan" #: ../src/vikgeoreflayer.c:620 msgid "_Export to World File" msgstr "_World-tiedoston vienti" #: ../src/vikgoto.c:75 msgid "No goto tool available." msgstr "Siirtymistyökalua ei ole käytettävissä." #: ../src/vikgoto.c:88 ../src/vikgoto.c:107 msgid "goto" msgstr "siirry" #: ../src/vikgoto.c:90 msgid "I don't know that place. Do you want another goto?" msgstr "En tunne paikkaa. Haluatko siirtyä muualle?" #: ../src/vikgoto.c:109 msgid "goto provider:" msgstr "siirtymistarjoaja:" #: ../src/vikgoto.c:124 msgid "Enter address or place name:" msgstr "Kirjoita osoite tai paikan nimi:" #: ../src/vikgpslayer.c:127 msgid "Data Mode" msgstr "" #: ../src/vikgpslayer.c:129 msgid "Realtime Tracking Mode" msgstr "" #: ../src/vikgpslayer.c:137 msgid "Keep vehicle at center" msgstr "" #: ../src/vikgpslayer.c:138 msgid "Keep vehicle on screen" msgstr "" #: ../src/vikgpslayer.c:139 msgid "Disable" msgstr "" #: ../src/vikgpslayer.c:152 msgid "Download Tracks:" msgstr "Lataa reitit:" #: ../src/vikgpslayer.c:153 msgid "Upload Tracks:" msgstr "Kopioi reitit palvelimelle:" #: ../src/vikgpslayer.c:154 msgid "Download Routes:" msgstr "" #: ../src/vikgpslayer.c:155 msgid "Upload Routes:" msgstr "" #: ../src/vikgpslayer.c:156 msgid "Download Waypoints:" msgstr "Lataa välietapit:" #: ../src/vikgpslayer.c:157 msgid "Upload Waypoints:" msgstr "Kopioi välietapit palvelimelle:" #: ../src/vikgpslayer.c:159 msgid "Recording tracks" msgstr "Tallennetaan reittejä" #: ../src/vikgpslayer.c:160 msgid "Jump to current position on start" msgstr "Hyppää alussa nykyiseen sijaintiin" #: ../src/vikgpslayer.c:161 msgid "Moving Map Method:" msgstr "Siirretään kartta-menetelmä:" #: ../src/vikgpslayer.c:162 msgid "Gpsd Host:" msgstr "Gpsd-tietokone:" #: ../src/vikgpslayer.c:163 msgid "Gpsd Port:" msgstr "Gpsd-portti:" #: ../src/vikgpslayer.c:164 msgid "Gpsd Retry Interval (seconds):" msgstr "Gpsd-toistoväli (sekuntia):" #: ../src/vikgpslayer.c:179 msgid "GPS" msgstr "" #: ../src/vikgpslayer.c:242 ../src/vikgpslayer.c:1258 msgid "GPS Download" msgstr "GPS-lataus" #: ../src/vikgpslayer.c:242 ../src/vikgpslayer.c:1258 #: ../src/viktrwlayer.c:3094 msgid "GPS Upload" msgstr "GPS-kopiointi palvelimelle" #: ../src/vikgpslayer.c:244 msgid "GPS Realtime Tracking" msgstr "GPS-tosiaikareititys" #: ../src/vikgpslayer.c:451 msgid "Unknown GPS Protocol" msgstr "Tuntematon GPS-yhteyskäytäntö" #: ../src/vikgpslayer.c:469 msgid "Unknown serial port device" msgstr "Tuntematon sarjaporttilaite" #: ../src/vikgpslayer.c:572 #, c-format msgid "%s: unknown parameter" msgstr "%s: tuntematon parametri" #. Now with icons #: ../src/vikgpslayer.c:693 msgid "_Upload to GPS" msgstr "Kopioi_daan GPS-palvelimelle" #: ../src/vikgpslayer.c:699 msgid "Download from _GPS" msgstr "Lataa _GPS:stä" #: ../src/vikgpslayer.c:720 msgid "Empty _Realtime" msgstr "Tyhje_nna tosiaika" #: ../src/vikgpslayer.c:727 msgid "E_mpty Upload" msgstr "Tyhjennä _kopioiminen palvelimelle" #: ../src/vikgpslayer.c:733 msgid "_Empty Download" msgstr "Ty_hjennä lataus" #: ../src/vikgpslayer.c:739 msgid "Empty _All" msgstr "Tyhjennä K_aikki" #. #. NB It's not fatal if this gives 2 for example! Hence removal of the g_assert #. This happens when copied GPS layer is deleted (not sure why the number_handlers would be 2) #. I don't think there's any side effects and certainly better than the program just aborting #. #: ../src/vikgpslayer.c:756 #, c-format msgid "Unexpected number of disconnected handlers: %d" msgstr "Odottamaton irtikytkettyjen käsittelijöiden lukumäärä: %d" #: ../src/vikgpslayer.c:898 #, c-format msgid "Uploading %d waypoint..." msgid_plural "Uploading %d waypoints..." msgstr[0] "Kopioidaan %d välietappi palvelimelle..." msgstr[1] "Kopioidaan %d välietappia palvelimelle..." #: ../src/vikgpslayer.c:899 #, c-format msgid "Uploading %d trackpoint..." msgid_plural "Uploading %d trackpoints..." msgstr[0] "Kopioidaan %d reittipiste palvelimelle..." msgstr[1] "Kopioidaan %d reittipistettä palvelimelle..." #: ../src/vikgpslayer.c:900 #, c-format msgid "Uploading %d routepoint..." msgid_plural "Uploading %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:925 #, c-format msgid "Downloaded %d out of %d waypoint..." msgid_plural "Downloaded %d out of %d waypoints..." msgstr[0] "Ladattu %d / %d välietappi..." msgstr[1] "Ladattu %d / %d välietappia..." #: ../src/vikgpslayer.c:926 #, c-format msgid "Downloaded %d out of %d trackpoint..." msgid_plural "Downloaded %d out of %d trackpoints..." msgstr[0] "Ladattu %d / %d reittipiste..." msgstr[1] "Ladattu %d / %d reittipistettä..." #: ../src/vikgpslayer.c:927 #, c-format msgid "Downloaded %d out of %d routepoint..." msgid_plural "Downloaded %d out of %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:932 #, c-format msgid "Uploaded %d out of %d waypoint..." msgid_plural "Uploaded %d out of %d waypoints..." msgstr[0] "Kopioitu %d / %d välietappi palvelimelle..." msgstr[1] "Kopioitu %d / %d välietappia palvelimelle..." #: ../src/vikgpslayer.c:933 #, c-format msgid "Uploaded %d out of %d trackpoint..." msgid_plural "Uploaded %d out of %d trackpoints..." msgstr[0] "Kopioitu %d / %d reittipiste palvelimelle..." msgstr[1] "Kopioitu %d / %d reittipistettä palvelimelle..." #: ../src/vikgpslayer.c:934 #, c-format msgid "Uploaded %d out of %d routepoint..." msgid_plural "Uploaded %d out of %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:942 #, c-format msgid "Downloaded %d waypoint" msgid_plural "Downloaded %d waypoints" msgstr[0] "Ladattiin %d välietappi" msgstr[1] "Ladattiin %d välietappia" #: ../src/vikgpslayer.c:943 #, c-format msgid "Downloaded %d trackpoint" msgid_plural "Downloaded %d trackpoints" msgstr[0] "Ladattiin %d reittipiste" msgstr[1] "Ladattiin %d reittipistettä" #: ../src/vikgpslayer.c:944 #, c-format msgid "Downloaded %d routepoint" msgid_plural "Downloaded %d routepoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:949 #, c-format msgid "Uploaded %d waypoint" msgid_plural "Uploaded %d waypoints" msgstr[0] "Kopioitu %d välietappi palvelimelle" msgstr[1] "Kopioitu %d välietappia palvelimelle" #: ../src/vikgpslayer.c:950 #, c-format msgid "Uploaded %d trackpoint" msgid_plural "Uploaded %d trackpoints" msgstr[0] "Kopioitu %d reittipiste palvelimelle" msgstr[1] "Kopioitu %d reittipistettä palvelimelle" #: ../src/vikgpslayer.c:951 #, c-format msgid "Uploaded %d routepoint" msgid_plural "Uploaded %d routepoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:1180 msgid "Error: couldn't find gpsbabel." msgstr "Virhe: ohjelman gpsbabel löytyminen epäonnistui." #: ../src/vikgpslayer.c:1269 msgid "Warning - GPS Upload items may overwrite each other" msgstr "" #: ../src/vikgpslayer.c:1301 msgid "Status: detecting gpsbabel" msgstr "Tila: havaittiin gpsbabel" #: ../src/vikgpslayer.c:1332 msgid "No GPS items selected for transfer." msgstr "" #: ../src/vikgpslayer.c:1347 msgid "Could not turn off device." msgstr "" #: ../src/vikgpslayer.c:1385 msgid "Are you sure you want to delete GPS Upload data?" msgstr "Oletko varma, että haluat poistaa palvelimelle kopioidut GPS-tiedot?" #: ../src/vikgpslayer.c:1398 msgid "Are you sure you want to delete GPS Download data?" msgstr "Oletko varma, että haluat poistaa GPS-ladatut tiedot?" #: ../src/vikgpslayer.c:1412 msgid "Are you sure you want to delete GPS Realtime data?" msgstr "Oletko varma, että haluat poistaa GPS-tosiaikatiedot?" #: ../src/vikgpslayer.c:1425 msgid "Are you sure you want to delete All GPS data?" msgstr "Oletko varma, että haluat poistaa kaikki GPS-tiedot?" #: ../src/viklayerspanel.c:55 msgid "/C_ut" msgstr "/L_eikkaa" #: ../src/viklayerspanel.c:56 msgid "/_Copy" msgstr "/K_opioi" #: ../src/viklayerspanel.c:57 msgid "/_Paste" msgstr "/_Liitä" #: ../src/viklayerspanel.c:58 msgid "/_Delete" msgstr "/_Poista" #: ../src/viklayerspanel.c:59 msgid "/New Layer" msgstr "/Uusi kerros" #: ../src/viklayerspanel.c:127 msgid "Top Layer" msgstr "Ylin kerros" #: ../src/viklayerspanel.c:143 msgid "Add new layer" msgstr "Lisää uusi kerros" #: ../src/viklayerspanel.c:150 msgid "Remove selected layer" msgstr "Siirrä valittu kerros" #: ../src/viklayerspanel.c:157 msgid "Move selected layer up" msgstr "Siirrä valittua kerrosta ylöspäin" #: ../src/viklayerspanel.c:164 msgid "Move selected layer down" msgstr "Siirrä valittua kerrosta alaspäin" #: ../src/viklayerspanel.c:171 msgid "Cut selected layer" msgstr "Leikkaa valittu kerros" #: ../src/viklayerspanel.c:178 msgid "Copy selected layer" msgstr "Kopioi valittu kerros" #: ../src/viklayerspanel.c:185 msgid "Paste layer below selected layer" msgstr "Liitä kerros valitun kerroksen alapuolelle" #. TODO: FIXME: if name has a '/' in it it will get all messed up. why not have an itemfactory field with #. name, icon, shortcut, etc.? #: ../src/viklayerspanel.c:204 ../src/vikwindow.c:3292 #, c-format msgid "New _%s Layer" msgstr "" #: ../src/viklayerspanel.c:511 msgid "Aggregate Layers have no settable properties." msgstr "Aggregate-kerroksissa ei ole asetettavia ominaisuuksia." #: ../src/viklayerspanel.c:555 msgid "You cannot cut the Top Layer." msgstr "Et voi leikata ylintä kerrosta." #: ../src/viklayerspanel.c:600 #, c-format msgid "Are you sure you want to delete %s?" msgstr "Oletko varma, että haluat poistaa kohteen %s?" #: ../src/viklayerspanel.c:617 msgid "You cannot delete the Top Layer." msgstr "Et voi poistaa ylintä kerrosta." #: ../src/viklayerspanel.c:701 msgid "Are you sure you wish to delete all layers?" msgstr "Oletko varma, että haluat poistaa kaikki kerrokset?" #. ******* MAPZOOMS ******** #: ../src/vikmapslayer.c:91 msgid "Use Viking Zoom Level" msgstr "Käytä Viking-loitonnus-/lähentämistasoa" #: ../src/vikmapslayer.c:124 msgid "Map Type:" msgstr "Karttatyyppi:" #: ../src/vikmapslayer.c:125 msgid "Maps Directory:" msgstr "Karttahakemisto:" #: ../src/vikmapslayer.c:126 msgid "Alpha:" msgstr "Alfa:" #: ../src/vikmapslayer.c:127 msgid "Control the Alpha value for transparency effects" msgstr "" #: ../src/vikmapslayer.c:128 msgid "Autodownload maps:" msgstr "Lataa kartat automaattisesti:" #: ../src/vikmapslayer.c:129 msgid "Autodownload Only Gets Missing Maps:" msgstr "" #: ../src/vikmapslayer.c:130 msgid "" "Using this option avoids attempting to update already acquired tiles. This " "can be useful if you want to restrict the network usage, without having to " "resort to manual control. Only applies when 'Autodownload Maps' is on." msgstr "" #: ../src/vikmapslayer.c:131 msgid "Zoom Level:" msgstr "Loitonnus-/lähentämistaso:" #: ../src/vikmapslayer.c:132 msgid "" "Determines the method of displaying map tiles for the current zoom level. " "'Viking Zoom Level' uses the best matching level, otherwise setting a fixed " "value will always use map tiles of the specified value regardless of the " "actual zoom level." msgstr "" #: ../src/vikmapslayer.c:146 msgid "_Maps Download" msgstr "" #: ../src/vikmapslayer.c:146 msgid "Maps Download" msgstr "Kartat ladattu" #: ../src/vikmapslayer.c:161 msgid "Map" msgstr "Kartta" #: ../src/vikmapslayer.c:249 msgid "Default maplayer directory:" msgstr "Karttakerrosoletushakemisto:" #: ../src/vikmapslayer.c:249 msgid "Choose a directory to store cached Map tiles for this layer" msgstr "" #: ../src/vikmapslayer.c:505 msgid "Unknown map type" msgstr "Tuntematon karttatyyppi" #: ../src/vikmapslayer.c:516 msgid "Unknown Map Zoom" msgstr "Tuntematon karttaloitonnus/-lähennys" #: ../src/vikmapslayer.c:589 #, c-format msgid "" "New map cannot be displayed in the current drawmode.\n" "Select \"%s\" from View menu to view it." msgstr "" "Uutta karttaa ei voida näyttää nykyisessä piirrostilassa.\n" "Valitse ”%s” Näkymä-valikosta sen katsomiseksi." #: ../src/vikmapslayer.c:753 #, c-format msgid "" "Cowardly refusing to draw tiles or existence of tiles beyond %d zoom out " "factor" msgstr "" "Raukkamaisesti kieltäydytään tiilien piirtämisestä tai tiilien esiintyminen " "on loitonnus-/lähentämistekijän %d takana" #: ../src/vikmapslayer.c:1157 #, c-format msgid "Redownloading up to %d %s map..." msgid_plural "Redownloading up to %d %s maps..." msgstr[0] "Ladataan uudelleen korkeintaan %d %s kartta..." msgstr[1] "Ladataan uudelleen kokeintaan %d %s karttaa..." #: ../src/vikmapslayer.c:1159 #, c-format msgid "Redownloading %d %s map..." msgid_plural "Redownloading %d %s maps..." msgstr[0] "Ladataan uudelleen %d %s kartta..." msgstr[1] "Ladataan uudelleen %d %s karttaa..." #: ../src/vikmapslayer.c:1163 ../src/vikmapslayer.c:1238 #, c-format msgid "Downloading %d %s map..." msgid_plural "Downloading %d %s maps..." msgstr[0] "Ladataan %d %s kartta..." msgstr[1] "Ladataan %d %s karttaa..." #: ../src/vikmapslayer.c:1311 #, c-format msgid "" "\n" "Source: %s\n" "\n" "Tile File: %s\n" "Tile File Timestamp: %s" msgstr "" #: ../src/vikmapslayer.c:1318 #, c-format msgid "" "Source: %s\n" "\n" "No Tile File!" msgstr "" #: ../src/vikmapslayer.c:1356 msgid "Redownload _Bad Map(s)" msgstr "Lataa uu_delleen huonot kartat" #: ../src/vikmapslayer.c:1360 msgid "Redownload _New Map(s)" msgstr "Lataa uudelleen _uudet kartat" #: ../src/vikmapslayer.c:1364 msgid "Redownload _All Map(s)" msgstr "Lataa _uudelleen kaikki kartat" #: ../src/vikmapslayer.c:1368 msgid "_Show Tile Information" msgstr "" #: ../src/vikmapslayer.c:1449 #, c-format msgid "" "Wrong drawmode for this map.\n" "Select \"%s\" from View menu and try again." msgstr "" "Väärä piirrostila tälle kartalle.\n" "Valitse ”%s” Näkymä-valikosta ja yritä uudelleen." #: ../src/vikmapslayer.c:1454 msgid "Wrong zoom level for this map." msgstr "Väärä loitonnus-/lähennystaso tälle kartalle." #. Now with icons #: ../src/vikmapslayer.c:1485 msgid "Download _Missing Onscreen Maps" msgstr "Lataa _puuttuva näytön kartat" #: ../src/vikmapslayer.c:1492 msgid "Download _New Onscreen Maps" msgstr "Lataa uu_det näytön kartat" #: ../src/vikmapslayer.c:1499 msgid "Reload _All Onscreen Maps" msgstr "Lat_aa uudelleen kaikki näytön kartat" #: ../src/viktreeview.c:263 msgid "Layer Name" msgstr "Kerrosnimi" #: ../src/viktreeview.c:742 #, c-format msgid "delete data from %s\n" msgstr "poista tiedot kohteesta %s\n" #: ../src/viktrwlayer.c:377 msgid "Create _Waypoint" msgstr "" #: ../src/viktrwlayer.c:377 msgid "Create Waypoint" msgstr "Luo välietappi" #: ../src/viktrwlayer.c:383 msgid "Create _Track" msgstr "" #: ../src/viktrwlayer.c:383 msgid "Create Track" msgstr "Luo reitti" #: ../src/viktrwlayer.c:392 msgid "Create _Route" msgstr "" #: ../src/viktrwlayer.c:392 msgid "Create Route" msgstr "" #: ../src/viktrwlayer.c:401 msgid "_Edit Waypoint" msgstr "" #: ../src/viktrwlayer.c:401 msgid "Edit Waypoint" msgstr "Muokkaa välietappia" #: ../src/viktrwlayer.c:409 msgid "Edit Trac_kpoint" msgstr "" #: ../src/viktrwlayer.c:409 msgid "Edit Trackpoint" msgstr "Muokkaa reittipistettä" #: ../src/viktrwlayer.c:417 msgid "Show P_icture" msgstr "" #: ../src/viktrwlayer.c:417 msgid "Show Picture" msgstr "Näytä kuva" #: ../src/viktrwlayer.c:424 msgid "Route _Finder" msgstr "" #: ../src/viktrwlayer.c:424 msgid "Route Finder" msgstr "Reittietsijä" #. ***** PARAMETERS ***** #: ../src/viktrwlayer.c:447 ../src/viktrwlayer.c:1942 #: ../src/viktrwlayer.c:1944 msgid "Waypoints" msgstr "Välietapit" #: ../src/viktrwlayer.c:447 ../src/viktrwlayer.c:1933 #: ../src/viktrwlayer.c:1935 msgid "Tracks" msgstr "Reitit" #: ../src/viktrwlayer.c:447 msgid "Waypoint Images" msgstr "Välietappikuvat" #: ../src/viktrwlayer.c:450 msgid "Draw by Track" msgstr "Piirrä reitin mukaan" #: ../src/viktrwlayer.c:450 msgid "Draw by Speed" msgstr "" #: ../src/viktrwlayer.c:450 msgid "All Tracks Same Color" msgstr "" #: ../src/viktrwlayer.c:451 msgid "Filled Square" msgstr "Täytetty nelikulmio" #: ../src/viktrwlayer.c:451 msgid "Square" msgstr "Nelikulmio" #: ../src/viktrwlayer.c:451 msgid "Circle" msgstr "Ympyrä" #: ../src/viktrwlayer.c:451 msgid "X" msgstr "X" #: ../src/viktrwlayer.c:477 msgid "Extra Extra Small" msgstr "" #: ../src/viktrwlayer.c:478 msgid "Extra Small" msgstr "" #: ../src/viktrwlayer.c:479 msgid "Small" msgstr "" #: ../src/viktrwlayer.c:480 msgid "Medium" msgstr "" #: ../src/viktrwlayer.c:481 msgid "Large" msgstr "" #: ../src/viktrwlayer.c:482 msgid "Extra Large" msgstr "" #: ../src/viktrwlayer.c:483 msgid "Extra Extra Large" msgstr "" #: ../src/viktrwlayer.c:491 msgid "Track Drawing Mode:" msgstr "Reittipiirrostila:" #: ../src/viktrwlayer.c:492 msgid "All Tracks Color:" msgstr "" #: ../src/viktrwlayer.c:493 msgid "The color used when 'All Tracks Same Color' drawing mode is selected" msgstr "" #: ../src/viktrwlayer.c:494 msgid "Draw Track Lines" msgstr "Piirrä reittiviivat" #: ../src/viktrwlayer.c:495 msgid "Track Thickness:" msgstr "Reittipaksuus:" #: ../src/viktrwlayer.c:496 msgid "Draw Track Direction" msgstr "" #: ../src/viktrwlayer.c:497 msgid "Direction Size:" msgstr "" #: ../src/viktrwlayer.c:498 msgid "Draw Trackpoints" msgstr "Piirrä reittipisteet" #: ../src/viktrwlayer.c:499 msgid "Trackpoint Size:" msgstr "" #: ../src/viktrwlayer.c:500 msgid "Draw Elevation" msgstr "Piirrä korkeusasema" #: ../src/viktrwlayer.c:501 msgid "Draw Elevation Height %:" msgstr "Piirrä korkeusaseman korkeus %:" #: ../src/viktrwlayer.c:503 msgid "Draw Stops" msgstr "Piirrä pysähdykset" #: ../src/viktrwlayer.c:504 msgid "" "Whether to draw a marker when trackpoints are at the same position but over " "the minimum stop length apart in time" msgstr "" #: ../src/viktrwlayer.c:505 msgid "Min Stop Length (seconds):" msgstr "Pienin pysähdyspituus (sekunteina):" #: ../src/viktrwlayer.c:507 msgid "Track BG Thickness:" msgstr "Reitin taustapaksuus:" #: ../src/viktrwlayer.c:508 msgid "Track Background Color" msgstr "Reitin taustaväri" #: ../src/viktrwlayer.c:509 msgid "Draw by Speed Factor (%):" msgstr "" #: ../src/viktrwlayer.c:510 msgid "" "The percentage factor away from the average speed determining the color used" msgstr "" #: ../src/viktrwlayer.c:512 msgid "Draw Labels" msgstr "Piirrä nimiöt" #: ../src/viktrwlayer.c:513 msgid "Waypoint Font Size:" msgstr "" #: ../src/viktrwlayer.c:514 msgid "Waypoint Color:" msgstr "Välietapin väri:" #: ../src/viktrwlayer.c:515 msgid "Waypoint Text:" msgstr "Välietappiteksti:" #: ../src/viktrwlayer.c:516 msgid "Background:" msgstr "Tausta:" #: ../src/viktrwlayer.c:517 msgid "Fake BG Color Translucency:" msgstr "Teeskennelty taustavärin ĺäpikuultavuus:" #: ../src/viktrwlayer.c:518 msgid "Waypoint marker:" msgstr "Välietappimerkki:" #: ../src/viktrwlayer.c:519 msgid "Waypoint size:" msgstr "Välietapin koko:" #: ../src/viktrwlayer.c:520 msgid "Draw Waypoint Symbols:" msgstr "Piirrä välietappisymbolit:" #: ../src/viktrwlayer.c:522 msgid "Draw Waypoint Images" msgstr "Piirrä välietappikuvat" #: ../src/viktrwlayer.c:523 msgid "Image Size (pixels):" msgstr "Kuvakoko (pikseliä):" #: ../src/viktrwlayer.c:524 msgid "Image Alpha:" msgstr "Kuva-alfa:" #: ../src/viktrwlayer.c:525 msgid "Image Memory Cache Size:" msgstr "Kuvamuistin välimuistikoko:" #: ../src/viktrwlayer.c:610 msgid "TrackWaypoint" msgstr "" #: ../src/viktrwlayer.c:1951 ../src/viktrwlayer.c:1953 msgid "Routes" msgstr "" #: ../src/viktrwlayer.c:2144 #, c-format msgid " in %d:%02d hrs:mins" msgstr " ajassa %d:%02d tuntia:minuuttia" #: ../src/viktrwlayer.c:2148 #, c-format msgid "" "\n" "%sTotal Length %.1f %s%s" msgstr "" "\n" "%sKokonaispituus %.1f %s%s" #: ../src/viktrwlayer.c:2154 #, c-format msgid "Tracks: %d - Waypoints: %d - Routes: %d%s" msgstr "" #: ../src/viktrwlayer.c:2174 #, c-format msgid "Tracks: %d" msgstr "" #: ../src/viktrwlayer.c:2184 #, c-format msgid "Routes: %d" msgstr "" #: ../src/viktrwlayer.c:2215 #, c-format msgid "- %d:%02d hrs:mins" msgstr "- %d:%02d tuntia:minuuttia" #: ../src/viktrwlayer.c:2223 #, c-format msgid "%s%.1f km %s" msgstr "%s%.1f km %s" #: ../src/viktrwlayer.c:2226 #, c-format msgid "%s%.1f miles %s" msgstr "%s%.1f mailia %s" #: ../src/viktrwlayer.c:2240 #, c-format msgid "Waypoints: %d" msgstr "" #: ../src/viktrwlayer.c:2266 #, c-format msgid "Trkpt: Alt %dft" msgstr "Trkpt: Alt %d jalkaa" #. VIK_UNITS_HEIGHT_METRES: #: ../src/viktrwlayer.c:2270 #, c-format msgid "Trkpt: Alt %dm" msgstr "Trkpt: Alt %d m" #. Compact date time format #: ../src/viktrwlayer.c:2277 #, c-format msgid " | Time %x %X" msgstr " | Aika %x %X" #: ../src/viktrwlayer.c:2295 #, c-format msgid " | Track: %s" msgstr " | Reitti: %s" #. Combine parts to make overall message #: ../src/viktrwlayer.c:2299 #, c-format msgid "%s%s | %s %s %s" msgstr "%s%s | %s %s %s" #: ../src/viktrwlayer.c:2314 #, c-format msgid "Wpt: Alt %dft" msgstr "Wpt: Korkeus %d jalkaa" #. VIK_UNITS_HEIGHT_METRES: #: ../src/viktrwlayer.c:2318 #, c-format msgid "Wpt: Alt %dm" msgstr "Wpt: Korkeus %d m" #. Add comment if available #: ../src/viktrwlayer.c:2333 #, c-format msgid "%s | %s %s | Comment: %s" msgstr "%s | %s %s | Kommentti: %s" #: ../src/viktrwlayer.c:2335 #, c-format msgid "%s | %s %s" msgstr "%s | %s %s" #: ../src/viktrwlayer.c:2563 ../src/viktrwlayer.c:2634 msgid "This layer has no waypoints or trackpoints." msgstr "Tässä kerroksessa ei ole välietappeja tai reittipisteitä." #: ../src/viktrwlayer.c:2661 ../src/vikwindow.c:2407 ../src/vikwindow.c:2848 #, c-format msgid "The file \"%s\" exists, do you wish to overwrite it?" msgstr "Tiedosto ”%s” on olemassa, haluatko korvata sen?" #: ../src/viktrwlayer.c:2671 ../src/vikwindow.c:2429 msgid "The filename you requested could not be opened for writing." msgstr "Pyytämäsi tiedostonimen avaus kirjoittamista varten epäonnistui." #: ../src/viktrwlayer.c:2676 ../src/viktrwlayer.c:2681 #: ../src/viktrwlayer.c:2691 ../src/viktrwlayer.c:2703 msgid "Export Layer" msgstr "Vie kerros" #: ../src/viktrwlayer.c:2720 msgid "Could not create temporary file for export." msgstr "Tilapäisen tiedoston luominen vientiä varten epäonnistui." #: ../src/viktrwlayer.c:2729 #, c-format msgid "Could not launch %s." msgstr "Kohteen %s käynnistäminen epäonnistui." #: ../src/viktrwlayer.c:2773 msgid "Export Track as GPX" msgstr "Vie reitti GPX:nä" #: ../src/viktrwlayer.c:2795 msgid "Find" msgstr "Etsi" #: ../src/viktrwlayer.c:2805 msgid "Waypoint Name:" msgstr "Välietapin nimi:" #: ../src/viktrwlayer.c:2822 msgid "Waypoint not found in this layer." msgstr "Välietappia ei löytynyt tässä kerroksessa." #: ../src/viktrwlayer.c:3090 msgid "Can not upload invisible track." msgstr "" #: ../src/viktrwlayer.c:3192 ../src/viktrwlayer.c:7785 msgid "Track" msgstr "Reitti" #: ../src/viktrwlayer.c:3215 ../src/viktrwlayer.c:7817 msgid "Route" msgstr "" #: ../src/viktrwlayer.c:3296 ../src/viktrwlayer.c:6265 #: ../src/viktrwlayer.c:6314 msgid "_Finish Route" msgstr "" #: ../src/viktrwlayer.c:3298 ../src/viktrwlayer.c:6223 #: ../src/viktrwlayer.c:6312 msgid "_Finish Track" msgstr "" #. Now with icons #: ../src/viktrwlayer.c:3310 msgid "_View Layer" msgstr "_Näkymäkerros" #: ../src/viktrwlayer.c:3317 msgid "V_iew" msgstr "" #: ../src/viktrwlayer.c:3323 msgid "View All _Tracks" msgstr "" #: ../src/viktrwlayer.c:3328 msgid "View All _Routes" msgstr "" #: ../src/viktrwlayer.c:3333 msgid "View All _Waypoints" msgstr "" #: ../src/viktrwlayer.c:3338 msgid "_Goto Center of Layer" msgstr "Sii_rry kerroksen keskustaan" #: ../src/viktrwlayer.c:3344 ../src/viktrwlayer.c:6199 msgid "Goto _Waypoint..." msgstr "Siirry _välietappiin..." #: ../src/viktrwlayer.c:3350 msgid "_Export Layer" msgstr "_Vie kerros" #: ../src/viktrwlayer.c:3356 msgid "Export as GPS_Point..." msgstr "Vie tyyppinä GPS_Point..." #: ../src/viktrwlayer.c:3361 msgid "Export as GPS_Mapper..." msgstr "Vie tyyppinä GPS_Mapper..." #: ../src/viktrwlayer.c:3366 msgid "Export as _GPX..." msgstr "Vie tyyppinä _GPX..." #: ../src/viktrwlayer.c:3371 msgid "Export as _KML..." msgstr "Vie tyyppinä _KML..." #: ../src/viktrwlayer.c:3376 msgid "Open with External Program_1: " msgstr "Avaa ulkoisella ohjelmalla Program_1: " #: ../src/viktrwlayer.c:3383 msgid "Open with External Program_2: " msgstr "Avaa ulkoisella ohjelmalla Program_2: " #: ../src/viktrwlayer.c:3391 ../src/vikwindow.c:3145 msgid "_New" msgstr "_Uusi" #: ../src/viktrwlayer.c:3397 msgid "New _Waypoint..." msgstr "" #: ../src/viktrwlayer.c:3403 msgid "New _Track" msgstr "" #: ../src/viktrwlayer.c:3411 msgid "New _Route" msgstr "" #: ../src/viktrwlayer.c:3420 ../src/viktrwlayer.c:6597 msgid "Geotag _Images..." msgstr "Geotag-_kuvat..." #: ../src/viktrwlayer.c:3427 msgid "_Acquire" msgstr "" #: ../src/viktrwlayer.c:3433 ../src/vikwindow.c:3150 msgid "From _GPS..." msgstr "_GPS:stä..." #: ../src/viktrwlayer.c:3439 msgid "From Google _Directions..." msgstr "" #: ../src/viktrwlayer.c:3446 msgid "From _OSM Traces..." msgstr "_OSM-jäljistä..." #: ../src/viktrwlayer.c:3451 msgid "From _My OSM Traces..." msgstr "" #: ../src/viktrwlayer.c:3459 ../src/vikwindow.c:3166 msgid "From _Wikipedia Waypoints" msgstr "" #: ../src/viktrwlayer.c:3465 msgid "Within _Layer Bounds" msgstr "Kerr_osrajojen sisällä" #: ../src/viktrwlayer.c:3471 msgid "Within _Current View" msgstr "Nykyisen nä_kymän sisällä" #: ../src/viktrwlayer.c:3479 msgid "From Geo_caching..." msgstr "Geo_kätköistä..." #: ../src/viktrwlayer.c:3486 ../src/vikwindow.c:3163 msgid "From Geotagged _Images..." msgstr "Geotagged-_kuvista..." #: ../src/viktrwlayer.c:3492 msgid "From _File..." msgstr "" #: ../src/viktrwlayer.c:3498 ../src/viktrwlayer.c:6542 msgid "_Upload" msgstr "" #: ../src/viktrwlayer.c:3504 msgid "Upload to _GPS..." msgstr "" #: ../src/viktrwlayer.c:3511 ../src/viktrwlayer.c:6570 msgid "Upload to _OSM..." msgstr "Kopioi _OSM-palvelimelle..." #: ../src/viktrwlayer.c:3519 msgid "De_lete" msgstr "Po_ista" #: ../src/viktrwlayer.c:3525 msgid "Delete All _Tracks" msgstr "Poista kaikki _reitit" #: ../src/viktrwlayer.c:3531 msgid "Delete Tracks _From Selection..." msgstr "_Poista reitit valinnasta..." #: ../src/viktrwlayer.c:3537 ../src/viktrwlayer.c:6290 msgid "Delete _All Routes" msgstr "" #: ../src/viktrwlayer.c:3543 ../src/viktrwlayer.c:6296 msgid "_Delete Routes From Selection..." msgstr "" #: ../src/viktrwlayer.c:3549 msgid "Delete All _Waypoints" msgstr "Poista _kaikki välietapit" #: ../src/viktrwlayer.c:3555 msgid "Delete Waypoints From _Selection..." msgstr "Poista _välietapit valinnasta..." #: ../src/viktrwlayer.c:4128 #, c-format msgid "Are you sure you want to delete all tracks in %s?" msgstr "Oletko varma, että haluat poistaa kaikki reitit kohteessa %s?" #: ../src/viktrwlayer.c:4138 #, c-format msgid "Are you sure you want to delete all routes in %s?" msgstr "" #: ../src/viktrwlayer.c:4148 #, c-format msgid "Are you sure you want to delete all waypoints in %s?" msgstr "Oletko varma, että haluat poistaa kaikki välietapit kohteessa %s?" #: ../src/viktrwlayer.c:4165 #, c-format msgid "Are you sure you want to delete the waypoint \"%s\"" msgstr "Oletko varma, että haluat poistaa välietapin ”%s”?" #: ../src/viktrwlayer.c:4178 #, c-format msgid "Are you sure you want to delete the track \"%s\"" msgstr "Oletko varma, että haluat poistaa reitin ”%s”" #: ../src/viktrwlayer.c:4191 #, c-format msgid "Are you sure you want to delete the route \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4351 ../src/viktrwlayer.c:4922 msgid "" "Converting a track to a route removes extra track data such as segments, " "timestamps, etc...\n" "Do you want to continue?" msgstr "" #: ../src/viktrwlayer.c:4711 msgid "Failed. No other tracks with timestamps in this layer found" msgstr "Epäonnistui. Tästä kerroksesta ei löytynyt reittejä aikaleimoilla" #: ../src/viktrwlayer.c:4713 msgid "Failed. No other tracks without timestamps in this layer found" msgstr "" "Epäonnistui. Tästä kerroksesta ei löytynyt muita reittejä ilman aikaleimoja" #: ../src/viktrwlayer.c:4732 msgid "Merge with..." msgstr "Yhdistetty kohteeseen..." #: ../src/viktrwlayer.c:4733 msgid "Select route to merge with" msgstr "" #: ../src/viktrwlayer.c:4733 msgid "Select track to merge with" msgstr "Valitse reitti, joka yhdistetään" #: ../src/viktrwlayer.c:4818 ../src/viktrwlayer.c:4895 msgid "Append Route" msgstr "" #: ../src/viktrwlayer.c:4818 ../src/viktrwlayer.c:4895 msgid "Append Track" msgstr "" #: ../src/viktrwlayer.c:4819 msgid "Select the route to append after the current route" msgstr "" #: ../src/viktrwlayer.c:4820 msgid "Select the track to append after the current track" msgstr "" #: ../src/viktrwlayer.c:4896 msgid "Select the track to append after the current route" msgstr "" #: ../src/viktrwlayer.c:4897 msgid "Select the route to append after the current track" msgstr "" #: ../src/viktrwlayer.c:4957 #, c-format msgid "%d segment merged" msgid_plural "%d segments merged" msgstr[0] "" msgstr[1] "" #: ../src/viktrwlayer.c:4973 msgid "Failed. This track does not have timestamp" msgstr "Epäonnistui. Tällä reitillä ei ole aikaleimaa" #: ../src/viktrwlayer.c:4985 msgid "Failed. No other track in this layer has timestamp" msgstr "" "Epäonnistui. Millään muulla reitillä tässä kerroksessa ei ole aikaleimaa" #: ../src/viktrwlayer.c:4992 msgid "Merge Threshold..." msgstr "Yhdistämiskynnys..." #: ../src/viktrwlayer.c:4993 msgid "Merge when time between tracks less than:" msgstr "Yhdistä, kun aika reittien välillä on pienempi kuin:" #: ../src/viktrwlayer.c:5128 msgid "Split Threshold..." msgstr "Halkaise kynnys..." #: ../src/viktrwlayer.c:5129 msgid "Split when time between trackpoints exceeds:" msgstr "Jaa kahtia kun reittipisteiden välinen aika ylittää:" #: ../src/viktrwlayer.c:5205 msgid "Split Every Nth Point" msgstr "Jaa osiin joka N. piste" #: ../src/viktrwlayer.c:5206 msgid "Split on every Nth point:" msgstr "Jaa osiin joka N. pisteellä:" #: ../src/viktrwlayer.c:5312 msgid "Can not split track as it has no segments" msgstr "" #: ../src/viktrwlayer.c:5340 ../src/viktrwlayer.c:5370 #, c-format msgid "Deleted %ld point" msgid_plural "Deleted %ld points" msgstr[0] "" msgstr[1] "" #: ../src/viktrwlayer.c:5531 msgid "Internal Error in vik_trw_layer_uniquify_tracks" msgstr "" #: ../src/viktrwlayer.c:5588 ../src/viktrwlayer.c:5635 #: ../src/viktrwlayer.c:5814 msgid "" "Multiple entries with the same name exist. This method only works with " "unique names. Force unique names now?" msgstr "" #: ../src/viktrwlayer.c:5599 msgid "No tracks found" msgstr "Reittejä ei löytynyt" #: ../src/viktrwlayer.c:5607 ../src/viktrwlayer.c:5654 #: ../src/viktrwlayer.c:5834 msgid "Delete Selection" msgstr "Poista valinta" #: ../src/viktrwlayer.c:5608 msgid "Select tracks to delete" msgstr "Valitse poistettavat reitit" #: ../src/viktrwlayer.c:5646 msgid "No routes found" msgstr "" #: ../src/viktrwlayer.c:5655 msgid "Select routes to delete" msgstr "" #: ../src/viktrwlayer.c:5761 msgid "Internal Error in vik_trw_layer_uniquify_waypoints" msgstr "" #: ../src/viktrwlayer.c:5824 msgid "No waypoints found" msgstr "Välietappeja ei löytynyt" #: ../src/viktrwlayer.c:5835 msgid "Select waypoints to delete" msgstr "Valitse poistettavat välietapit" #: ../src/viktrwlayer.c:5896 #, c-format msgid "" "A waypoint with the name \"%s\" already exists. Really rename to the same " "name?" msgstr "" #: ../src/viktrwlayer.c:5926 #, c-format msgid "" "A track with the name \"%s\" already exists. Really rename to the same name?" msgstr "" #: ../src/viktrwlayer.c:5963 #, c-format msgid "" "A route with the name \"%s\" already exists. Really rename to the same name?" msgstr "" #: ../src/viktrwlayer.c:6085 ../src/viktrwlayer.c:6337 msgid "_Goto" msgstr "_Siirry" #: ../src/viktrwlayer.c:6104 msgid "_Visit Geocache Webpage" msgstr "_Vieraile Geocache-webbisivulla" #: ../src/viktrwlayer.c:6123 msgid "_Show Picture..." msgstr "Näytä k_uva" #: ../src/viktrwlayer.c:6131 msgid "Update Geotag on _Image" msgstr "Päivitä Geotag-tunnistetta _kuvassa" #: ../src/viktrwlayer.c:6137 msgid "_Update" msgstr "_Päivitä" #: ../src/viktrwlayer.c:6142 msgid "Update and _Keep File Timestamp" msgstr "Päivitä ja pidä tiedostoaikaleima" #: ../src/viktrwlayer.c:6153 msgid "Visit _Webpage" msgstr "" #: ../src/viktrwlayer.c:6184 msgid "_New Waypoint..." msgstr "_Uusi välietappi..." #: ../src/viktrwlayer.c:6193 msgid "_View All Waypoints" msgstr "Ka_tso kaikkia välietappeja" #: ../src/viktrwlayer.c:6205 msgid "Delete _All Waypoints" msgstr "Poist_a kaikki välietapit" #: ../src/viktrwlayer.c:6211 msgid "_Delete Waypoints From Selection..." msgstr "_Poista välietapit valinnasta..." #: ../src/viktrwlayer.c:6233 msgid "_View All Tracks" msgstr "Katso kaikk_ia reittejä" #: ../src/viktrwlayer.c:6239 msgid "_New Track" msgstr "" #: ../src/viktrwlayer.c:6247 msgid "Delete _All Tracks" msgstr "Poi_sta kaikki reitit" #: ../src/viktrwlayer.c:6253 msgid "_Delete Tracks From Selection..." msgstr "_Poista reitit valinnasta..." #: ../src/viktrwlayer.c:6276 msgid "_View All Routes" msgstr "" #: ../src/viktrwlayer.c:6282 msgid "_New Route" msgstr "" #: ../src/viktrwlayer.c:6327 msgid "_View Track" msgstr "Näkymä_reitti" #: ../src/viktrwlayer.c:6329 msgid "_View Route" msgstr "" #: ../src/viktrwlayer.c:6343 msgid "_Startpoint" msgstr "_Alkupiste" #: ../src/viktrwlayer.c:6349 msgid "\"_Center\"" msgstr "”_Keskipiste”" #: ../src/viktrwlayer.c:6355 msgid "_Endpoint" msgstr "L_oppupiste" #: ../src/viktrwlayer.c:6361 msgid "_Highest Altitude" msgstr "Korkein ko_hta" #: ../src/viktrwlayer.c:6367 msgid "_Lowest Altitude" msgstr "Ali_n kohta" #: ../src/viktrwlayer.c:6375 msgid "_Maximum Speed" msgstr "_Enimmäisnopeus" #: ../src/viktrwlayer.c:6384 msgid "Co_mbine" msgstr "" #: ../src/viktrwlayer.c:6392 msgid "_Merge By Time..." msgstr "Y_hdistä ajan perusteella..." #: ../src/viktrwlayer.c:6397 msgid "Merge _Segments" msgstr "" #: ../src/viktrwlayer.c:6403 msgid "Merge _With Other Tracks..." msgstr "Yhdistä _muiden reittien kanssa..." #: ../src/viktrwlayer.c:6409 msgid "_Append Track..." msgstr "" #: ../src/viktrwlayer.c:6411 msgid "_Append Route..." msgstr "" #: ../src/viktrwlayer.c:6417 msgid "Append _Route..." msgstr "" #: ../src/viktrwlayer.c:6419 msgid "Append _Track..." msgstr "" #: ../src/viktrwlayer.c:6426 msgid "_Split" msgstr "" #: ../src/viktrwlayer.c:6434 msgid "_Split By Time..." msgstr "_Jaa osiin ajan mukaan..." #. ATM always enable this entry - don't want to have to analyse the track before displaying the menu - to keep the menu speedy #: ../src/viktrwlayer.c:6440 msgid "Split Se_gments" msgstr "" #: ../src/viktrwlayer.c:6446 msgid "Split By _Number of Points..." msgstr "J_aa osiin pisteiden määrän mukaan..." #: ../src/viktrwlayer.c:6451 msgid "Split at _Trackpoint" msgstr "" #: ../src/viktrwlayer.c:6460 msgid "Delete Poi_nts" msgstr "" #: ../src/viktrwlayer.c:6466 msgid "Delete Points With The Same _Position" msgstr "" #: ../src/viktrwlayer.c:6471 msgid "Delete Points With The Same _Time" msgstr "" #: ../src/viktrwlayer.c:6477 msgid "_Reverse Track" msgstr "Kään_teinen reitti" #: ../src/viktrwlayer.c:6479 msgid "_Reverse Route" msgstr "" #: ../src/viktrwlayer.c:6488 msgid "Down_load Maps Along Track..." msgstr "_Lataa kartat reitin varrelta..." #: ../src/viktrwlayer.c:6490 msgid "Down_load Maps Along Route..." msgstr "" #: ../src/viktrwlayer.c:6497 msgid "_Apply DEM Data" msgstr "_Käytä DEM-tietoja" #: ../src/viktrwlayer.c:6504 msgid "_Export Track as GPX..." msgstr "" #: ../src/viktrwlayer.c:6506 msgid "_Export Route as GPX..." msgstr "" #: ../src/viktrwlayer.c:6513 msgid "E_xtend Track End" msgstr "Laaj_enna reitin loppu" #: ../src/viktrwlayer.c:6515 msgid "E_xtend Route End" msgstr "" #: ../src/viktrwlayer.c:6522 msgid "C_onvert to a Route" msgstr "" #: ../src/viktrwlayer.c:6524 msgid "C_onvert to a Track" msgstr "" #: ../src/viktrwlayer.c:6532 msgid "Extend _Using Route Finder" msgstr "Laaj_enna käyttäen reittietsijää" #: ../src/viktrwlayer.c:6548 msgid "_Upload to GPS..." msgstr "" #: ../src/viktrwlayer.c:6559 msgid "_View Google Directions" msgstr "_Katso Google-ajo-ohjeita" #: ../src/viktrwlayer.c:6579 msgid "Use with _Filter" msgstr "Käytä suo_dattimen kera" #: ../src/viktrwlayer.c:6612 msgid "_Edit Trackpoint" msgstr "M_uokkaa reittipistettä" #: ../src/viktrwlayer.c:7524 #, c-format msgid " - Gain %dm:Loss %dm" msgstr " - Hyöty %d m:Tappio %d m" #: ../src/viktrwlayer.c:7526 #, c-format msgid " - Gain %dft:Loss %dft" msgstr " - Hyöty %d jalkaa:Tappio %d jalkaa" #: ../src/viktrwlayer.c:7531 #, c-format msgid " - Bearing %3.1f° - Step %s" msgstr "" #: ../src/viktrwlayer.c:8124 #, c-format msgid "Could not launch %s to open file." msgstr "Kohteen %s käynnistäminen tiedoston avaamiseksi epäonnistui." #: ../src/viktrwlayer.c:8205 #, c-format msgid "Creating %d Image Thumbnails..." msgstr "Luodaan %d pienoiskuvaa..." #: ../src/viktrwlayer.c:8524 msgid "No map layer in use. Create one first" msgstr "Yhtään karttakerrosta ei ole käytössä. Luo ensin yksi" #: ../src/viktrwlayer_propwin.c:898 ../src/viktrwlayer_propwin.c:1155 #, c-format msgid "%.1f kph" msgstr "%.1f km/h" #: ../src/viktrwlayer_propwin.c:901 ../src/viktrwlayer_propwin.c:1158 #, c-format msgid "%.1f mph" msgstr "%.1f mph" #: ../src/viktrwlayer_propwin.c:904 ../src/viktrwlayer_propwin.c:1161 #, c-format msgid "%.1f knots" msgstr "%.1f solmua" #. VIK_UNITS_SPEED_METRES_PER_SECOND: #: ../src/viktrwlayer_propwin.c:908 ../src/viktrwlayer_propwin.c:1165 #, c-format msgid "%.1f m/s" msgstr "%.1f m/s" #: ../src/viktrwlayer_propwin.c:1745 #, c-format msgid "%.1f miles" msgstr "%.1f mailia" #: ../src/viktrwlayer_propwin.c:1747 #, c-format msgid "%.1f km" msgstr "%.1f km" #: ../src/viktrwlayer_propwin.c:2681 msgid "Failed spliting track. Track unchanged" msgstr "Reitin jakaminen osiin epäonnistui. Reitti on muuttumaton" #: ../src/viktrwlayer_propwin.c:2779 ../src/viktrwlayer_propwin.c:3178 #, c-format msgid "%s - Track Properties" msgstr "%s - Reittiominaisuudet" #: ../src/viktrwlayer_propwin.c:2784 msgid "Split at _Marker" msgstr "Jaa osiin _merkitsijän kohdalta" #: ../src/viktrwlayer_propwin.c:2785 msgid "Split _Segments" msgstr "Jaa osiin se_gmentit" #: ../src/viktrwlayer_propwin.c:2786 msgid "_Reverse" msgstr "Kää_nteinen" #: ../src/viktrwlayer_propwin.c:2787 msgid "_Delete Dupl." msgstr "Po_ista kaksoiskappale" #: ../src/viktrwlayer_propwin.c:2813 msgid "Comment:" msgstr "Kommentti:" #: ../src/viktrwlayer_propwin.c:2814 msgid "Description:" msgstr "" #: ../src/viktrwlayer_propwin.c:2815 msgid "Track Length:" msgstr "Reittipituus:" #: ../src/viktrwlayer_propwin.c:2816 msgid "Trackpoints:" msgstr "Reittipisteet:" #: ../src/viktrwlayer_propwin.c:2817 msgid "Segments:" msgstr "Segmentit:" #: ../src/viktrwlayer_propwin.c:2818 msgid "Duplicate Points:" msgstr "Pisteiden kaksoiskappaleet:" #: ../src/viktrwlayer_propwin.c:2819 msgid "Max Speed:" msgstr "Enimmäisnopeus:" #: ../src/viktrwlayer_propwin.c:2820 msgid "Avg. Speed:" msgstr "Keskinopeus:" #: ../src/viktrwlayer_propwin.c:2821 msgid "Moving Avg. Speed:" msgstr "Siirrytään keskinopeudella:" #: ../src/viktrwlayer_propwin.c:2822 msgid "Avg. Dist. Between TPs:" msgstr "Keskimääräinen etäisyys reittipisteiden välillä" #: ../src/viktrwlayer_propwin.c:2823 msgid "Elevation Range:" msgstr "Korkeusasema-alue:" #: ../src/viktrwlayer_propwin.c:2824 msgid "Total Elevation Gain/Loss:" msgstr "Kokonaiskorkeusaseman hyöty/tappio:" #: ../src/viktrwlayer_propwin.c:2825 msgid "Start:" msgstr "Alku:" #: ../src/viktrwlayer_propwin.c:2826 msgid "End:" msgstr "Loppu:" #: ../src/viktrwlayer_propwin.c:2827 msgid "Duration:" msgstr "Kesto:" #: ../src/viktrwlayer_propwin.c:2828 msgid "Color:" msgstr "" #: ../src/viktrwlayer_propwin.c:2877 ../src/viktrwlayer_propwin.c:2901 #: ../src/viktrwlayer_propwin.c:2929 ../src/viktrwlayer_propwin.c:2966 #: ../src/viktrwlayer_propwin.c:2984 ../src/viktrwlayer_propwin.c:3034 #: ../src/viktrwlayer_propwin.c:3035 ../src/viktrwlayer_propwin.c:3036 #: ../src/viktrwlayer_propwin.c:3062 ../src/viktrwlayer_propwin.c:3063 #: ../src/viktrwlayer_propwin.c:3078 ../src/viktrwlayer_propwin.c:3079 #: ../src/viktrwlayer_propwin.c:3092 ../src/viktrwlayer_propwin.c:3093 #: ../src/viktrwlayer_propwin.c:3106 ../src/viktrwlayer_propwin.c:3107 #: ../src/viktrwlayer_propwin.c:3120 ../src/viktrwlayer_propwin.c:3121 #: ../src/viktrwlayer_propwin.c:3134 ../src/viktrwlayer_propwin.c:3135 #, c-format msgid "No Data" msgstr "Ei tietoja" #: ../src/viktrwlayer_propwin.c:3031 #, c-format msgid "%d minutes" msgstr "%d minuuttia" #: ../src/viktrwlayer_propwin.c:3058 msgid "Statistics" msgstr "Tilastot" #: ../src/viktrwlayer_propwin.c:3064 msgid "Show D_EM" msgstr "Näytä D_EM" #: ../src/viktrwlayer_propwin.c:3065 ../src/viktrwlayer_propwin.c:3080 #: ../src/viktrwlayer_propwin.c:3094 ../src/viktrwlayer_propwin.c:3136 msgid "Show _GPS Speed" msgstr "Näytä _GPS-nopeus" #: ../src/viktrwlayer_propwin.c:3067 ../src/viktrwlayer_propwin.c:3082 #: ../src/viktrwlayer_propwin.c:3110 ../src/viktrwlayer_propwin.c:3138 msgid "Track Distance:" msgstr "Reittietäisyys:" #: ../src/viktrwlayer_propwin.c:3068 ../src/viktrwlayer_propwin.c:3125 msgid "Track Height:" msgstr "Reittikorkeus:" #: ../src/viktrwlayer_propwin.c:3073 msgid "Elevation-distance" msgstr "Korkeusasema-etäisyys" #: ../src/viktrwlayer_propwin.c:3083 msgid "Track Gradient:" msgstr "" #: ../src/viktrwlayer_propwin.c:3087 msgid "Gradient-distance" msgstr "" #: ../src/viktrwlayer_propwin.c:3096 ../src/viktrwlayer_propwin.c:3111 #: ../src/viktrwlayer_propwin.c:3124 msgid "Track Time:" msgstr "Reittiaika:" #: ../src/viktrwlayer_propwin.c:3097 ../src/viktrwlayer_propwin.c:3139 msgid "Track Speed:" msgstr "Reittinopeus:" #: ../src/viktrwlayer_propwin.c:3101 msgid "Speed-time" msgstr "Nopeusaika" #: ../src/viktrwlayer_propwin.c:3108 ../src/viktrwlayer_propwin.c:3122 msgid "Show S_peed" msgstr "Näytä no_peus" #: ../src/viktrwlayer_propwin.c:3115 msgid "Distance-time" msgstr "Etäisyysaika" #: ../src/viktrwlayer_propwin.c:3129 msgid "Elevation-time" msgstr "Korkeusasema-aika" #: ../src/viktrwlayer_propwin.c:3143 msgid "Speed-distance" msgstr "Nopeusetäisyys" #: ../src/viktrwlayer_tpwin.c:118 msgid "Part of Track:" msgstr "Reitin osa:" #: ../src/viktrwlayer_tpwin.c:119 msgid "Latitude:" msgstr "Leveysaste:" #: ../src/viktrwlayer_tpwin.c:120 msgid "Longitude:" msgstr "Pituusaste:" #: ../src/viktrwlayer_tpwin.c:121 msgid "Altitude:" msgstr "Korkeus:" #: ../src/viktrwlayer_tpwin.c:122 msgid "Timestamp:" msgstr "Aikaleima:" #: ../src/viktrwlayer_tpwin.c:123 msgid "Time:" msgstr "Aika:" #: ../src/viktrwlayer_tpwin.c:124 msgid "Distance Difference:" msgstr "Etäisyysero:" #: ../src/viktrwlayer_tpwin.c:125 msgid "Time Difference:" msgstr "Aikaero:" #: ../src/viktrwlayer_tpwin.c:126 msgid "\"Speed\" Between:" msgstr "”Nopeus” välillä:" #: ../src/viktrwlayer_tpwin.c:127 msgid "VDOP:" msgstr "VDOP:" #: ../src/viktrwlayer_tpwin.c:128 msgid "HDOP:" msgstr "HDOP:" #: ../src/viktrwlayer_tpwin.c:129 msgid "PDOP:" msgstr "PDOP:" #: ../src/viktrwlayer_tpwin.c:130 msgid "SAT/FIX:" msgstr "SAT/FIX:" #: ../src/viktrwlayer_tpwin.c:139 msgid "Trackpoint" msgstr "Reittipiste" #: ../src/viktrwlayer_tpwin.c:142 msgid "_Insert After" msgstr "L_isää jälkeen" #: ../src/viktrwlayer_tpwin.c:144 msgid "Split Here" msgstr "Jaa osiin tässä" #: ../src/viktrwlayer_geotag.c:446 #, c-format msgid "Geotagging %d Images..." msgstr "Merkitään Geotageilla %d kuvaa..." #: ../src/viktrwlayer_geotag.c:510 msgid "Geotag Images" msgstr "Geotag-kuvat" #: ../src/viktrwlayer_geotag.c:516 msgid "Images" msgstr "Kuvat" #: ../src/viktrwlayer_geotag.c:520 msgid "Overwrite Existing Waypoints:" msgstr "" #: ../src/viktrwlayer_geotag.c:523 msgid "Overwrite Existing GPS Information:" msgstr "Korvaa olemassa olevat GPS-tiedot:" #: ../src/viktrwlayer_geotag.c:525 msgid "Keep File Modification Timestamp:" msgstr "Säilytä tiedoston muokkausaikaleima:" #: ../src/viktrwlayer_geotag.c:555 msgid "Create Waypoints:" msgstr "Luo välietapit:" #: ../src/viktrwlayer_geotag.c:563 msgid "Write EXIF:" msgstr "Kirjoita EXIF:" #: ../src/viktrwlayer_geotag.c:575 msgid "Interpolate Between Track Segments:" msgstr "Interpoloidaan reittisegmenttien välillä:" #: ../src/viktrwlayer_geotag.c:579 msgid "Image Time Offset (Seconds):" msgstr "Kuva-aikasiirros (sekuntia):" #: ../src/viktrwlayer_geotag.c:581 msgid "" "The number of seconds to ADD to the photos time to make it match the GPS " "data. Calculate this with (GPS - Photo). Can be negative or positive. Useful " "to adjust times when a camera's timestamp was incorrect." msgstr "" "Sekuntimäärä, joka täytyy LISÄTÄ valokuvan aikaa, jotta se täsmää GPS-" "tietoihin. Laske tämä (GPS-Photo)-ohjelmalla. Lukema voi olla negatiivinen " "tai positiivinen. Se on hyödyllinen säädettäessa aikoja, kun kameran " "aikaleima on virheellinen." #: ../src/viktrwlayer_geotag.c:584 msgid "Image Timezone:" msgstr "Kuvan aikavyöhyke:" #: ../src/viktrwlayer_geotag.c:586 msgid "" "The timezone that was used when the images were created. For example, if a " "camera is set to AWST or +8:00 hours. Enter +8:00 here so that the correct " "adjustment to the images' time can be made. GPS data is always in UTC." msgstr "" "Aikavyöhyke, jota käytettiin kuvia luotaessa. Esimerkiksi, jos kameraan on " "asetettu AWST tai +8:00 tuntia, Kirjoita +8:00 tänne, jotta kuvien aikaan " "voidaan tehdä oikea säätö. GPS-tiedot ovat aina UTC-ajassa." #: ../src/viktrwlayer_geotag.c:590 #, c-format msgid "Using track: %s" msgstr "Käytetään reittiä: %s" #: ../src/viktrwlayer_geotag.c:592 #, c-format msgid "Using all tracks in: %s" msgstr "Käytetään kaikki reitit kohteessa: %s" #: ../src/vikstatus.c:105 msgid "Current zoom level. Click to select a new one." msgstr "" #: ../src/vikwaypoint.c:34 msgid "Waypoint" msgstr "" #. TODO get rid of this as this is unnecessary duplication... #: ../src/vikwindow.c:221 msgid "Pan" msgstr "Vaakavieritä" #: ../src/vikwindow.c:221 msgid "Zoom" msgstr "Loitonna/lähennä" #: ../src/vikwindow.c:221 msgid "Ruler" msgstr "Viivotin" #: ../src/vikwindow.c:221 msgid "Select" msgstr "Valitse" #. Create tooltip #: ../src/vikwindow.c:440 msgid "Select zoom level" msgstr "" #: ../src/vikwindow.c:645 #, c-format msgid "" "Do you want to save the changes you made to the document \"%s\"?\n" "\n" "Your changes will be lost if you don't save them." msgstr "" "Haluatko tallentaa asiakirjaan ”%s” tehdyt muutokset?\n" "\n" "Muutoksesi katoavat, jos et tallenna niitä." #: ../src/vikwindow.c:649 msgid "Don't Save" msgstr "Älä tallenna" #: ../src/vikwindow.c:696 msgid "mpp" msgstr "mpp" #: ../src/vikwindow.c:696 msgid "pixelfact" msgstr "pikselitieto" #: ../src/vikwindow.c:861 #, c-format msgid "%s %s %dm" msgstr "%s %s %d m" #: ../src/vikwindow.c:863 #, c-format msgid "%s %s %dft" msgstr "%s %s %d jalkaa" #: ../src/vikwindow.c:866 #, c-format msgid "%s %s" msgstr "%s %s" #. NB Ctrl+Shift+R is used for Refresh (deemed more important), so use 'U' instead #: ../src/vikwindow.c:1254 msgid "_Ruler" msgstr "V_iivotin" #: ../src/vikwindow.c:1254 msgid "Ruler Tool" msgstr "Viivotintyökalu" #: ../src/vikwindow.c:1502 ../src/vikwindow.c:3138 msgid "_Zoom" msgstr "_Loitonna/lähennä" #: ../src/vikwindow.c:1502 msgid "Zoom Tool" msgstr "Suurennuslasi" #: ../src/vikwindow.c:1547 ../src/vikwindow.c:3139 msgid "_Pan" msgstr "_Vaakavieritä" #: ../src/vikwindow.c:1547 msgid "Pan Tool" msgstr "Vaakavieritystyökalu" #: ../src/vikwindow.c:1664 msgid "_Select" msgstr "Valit_se" #: ../src/vikwindow.c:1664 msgid "Select Tool" msgstr "Valintatyökalu" #: ../src/vikwindow.c:1809 msgid "You must select a layer to show its properties." msgstr "Kerros on valittava sen ominaisuuksien näyttämiseksi." #. No error to show, so unlikely this will get called #: ../src/vikwindow.c:1824 msgid "The help system is not available." msgstr "" #. Main error path #: ../src/vikwindow.c:1827 #, c-format msgid "" "Help is not available because: %s.\n" "Ensure a Mime Type ghelp handler program is installed (e.g. yelp)." msgstr "" #: ../src/vikwindow.c:1850 msgid "You must select a layer to delete." msgstr "Kerros on valittava poistamista varten." #: ../src/vikwindow.c:2087 msgid "Untitled" msgstr "Otsikoton" #: ../src/vikwindow.c:2194 #, c-format msgid "Unable to add '%s' to the list of recently used documents" msgstr "" "Asiakirjan ’%s’ lisääminen äskettäin käytettyjen asiakirjojen luetteloon " "epäonnistui" #: ../src/vikwindow.c:2208 msgid "The file you requested could not be opened." msgstr "Pyytämäsi tiedoston avaaminen epäonnistui." #: ../src/vikwindow.c:2211 msgid "" "GPSBabel is required to load files of this type or GPSBabel encountered " "problems." msgstr "" "GPSBabel tarvitaan tämän tyyppisten tiedostojen lataamiseen tai GPSBabel " "kohtasi pulmia." #: ../src/vikwindow.c:2214 #, c-format msgid "Unable to load malformed GPX file %s" msgstr "" #: ../src/vikwindow.c:2217 #, c-format msgid "Unsupported file type for %s" msgstr "Tukematon tiedostotyyppi kohteelle %s" #. Since we can process .vik files with issues just show a warning in the status bar #. Not that a user can do much about it... or tells them what this issue is yet... #: ../src/vikwindow.c:2223 #, c-format msgid "WARNING: issues encountered loading %s" msgstr "" #: ../src/vikwindow.c:2278 msgid "Please select a GPS data file to open. " msgstr "Valitse avattava GPS-datatiedosto. " #: ../src/vikwindow.c:2288 msgid "Geocaching" msgstr "Geokätkyily" #: ../src/vikwindow.c:2294 msgid "Google Earth" msgstr "Google Earth" #: ../src/vikwindow.c:2299 msgid "GPX" msgstr "GPX" #: ../src/vikwindow.c:2304 ../src/vikwindow.c:2387 #: ../src/viking.desktop.in.h:1 msgid "Viking" msgstr "Viikinki" #: ../src/vikwindow.c:2374 msgid "Save as Viking File." msgstr "Tallenna Viking-tiedostona." #. Try harder... #: ../src/vikwindow.c:2619 ../src/vikwindow.c:2625 msgid "Generating image file..." msgstr "" #: ../src/vikwindow.c:2647 msgid "" "Failed to generate internal image.\n" "\n" "Try creating a smaller image." msgstr "" #: ../src/vikwindow.c:2655 msgid "Failed to generate image file." msgstr "" #. Success #: ../src/vikwindow.c:2660 msgid "Image file generated." msgstr "" #: ../src/vikwindow.c:2764 msgid "" "Viewable region outside allowable pixel size bounds for image. Clipping " "width/height values." msgstr "" "Katsottava alue kuvan sallittavan pikselikokorajojen ulkopuolella. Leikataan " "leveys/korkeus-arvoja." #: ../src/vikwindow.c:2789 #, c-format msgid "Total area: %ldm x %ldm (%.3f sq. km)" msgstr "Kokonaisalue: %ldm x %ldm (%.3f neliökilometriä)" #: ../src/vikwindow.c:2792 #, c-format msgid "Total area: %ldm x %ldm (%.3f sq. miles)" msgstr "Kokonaisalue: %ldm x %ldm (%.3f neliömailia)" #: ../src/vikwindow.c:2813 msgid "Save Image" msgstr "Tallenna kuva" #: ../src/vikwindow.c:2834 msgid "PNG" msgstr "" #: ../src/vikwindow.c:2857 msgid "You must be in UTM mode to use this feature" msgstr "Tätä ominaisuutta voi käyttää vain UTM-tilassa" #: ../src/vikwindow.c:2862 msgid "Choose a directory to hold images" msgstr "Valitse hakemisto kuvien säilyttämiseen" #. todo: default for answers inside VikWindow or static (thruout instance) #: ../src/vikwindow.c:2883 msgid "Save to Image File" msgstr "Tallenna kuvatiedostoon" #: ../src/vikwindow.c:2900 msgid "Width (pixels):" msgstr "Leveys (pikseliä):" #: ../src/vikwindow.c:2902 msgid "Height (pixels):" msgstr "Korkeus (pikseliä):" #: ../src/vikwindow.c:2905 msgid "" "WARNING: USING LARGE IMAGES OVER 10000x10000\n" "MAY CRASH THE PROGRAM!" msgstr "" #: ../src/vikwindow.c:2907 msgid "Zoom (meters per pixel):" msgstr "Loitonna/lähennä (metriä per pikseli):" #: ../src/vikwindow.c:2921 msgid "Area in current viewable window" msgstr "Alue nykyisin katsottavassa ikkunassa" #: ../src/vikwindow.c:2931 msgid "Save as PNG" msgstr "Tallenna PNG-tiedostona" #: ../src/vikwindow.c:2932 msgid "Save as JPEG" msgstr "Tallenna JPEG-tiedostona" #: ../src/vikwindow.c:2954 msgid "East-west image tiles:" msgstr "Itä-länsi-kuvatiilit:" #: ../src/vikwindow.c:2956 msgid "North-south image tiles:" msgstr "Pohjois-etelä-kuvatiilit:" #: ../src/vikwindow.c:3097 msgid "Choose a background color" msgstr "Valitse taustaväri" #: ../src/vikwindow.c:3113 msgid "Choose a track highlight color" msgstr "Valitse reitin korotustväri" #: ../src/vikwindow.c:3134 msgid "_File" msgstr "_Tiedosto" #: ../src/vikwindow.c:3135 msgid "_Edit" msgstr "_Muokkaa" #: ../src/vikwindow.c:3136 msgid "_View" msgstr "_Näkymä" #: ../src/vikwindow.c:3137 msgid "_Show" msgstr "_Näytä" #: ../src/vikwindow.c:3140 msgid "_Layers" msgstr "_Kerrokset" #: ../src/vikwindow.c:3141 msgid "_Tools" msgstr "_Työkalut" #: ../src/vikwindow.c:3142 msgid "_Webtools" msgstr "_Webbityökalut" #: ../src/vikwindow.c:3143 ../src/vikwindow.c:3206 msgid "_Help" msgstr "_Opaste" #: ../src/vikwindow.c:3145 msgid "New file" msgstr "Uusi tiedosto" #: ../src/vikwindow.c:3146 msgid "_Open..." msgstr "_Avaa..." #: ../src/vikwindow.c:3146 msgid "Open a file" msgstr "Avaa tiedosto" #: ../src/vikwindow.c:3147 msgid "Open _Recent File" msgstr "A_vaa äskeinen tiedosto" #: ../src/vikwindow.c:3148 msgid "Append _File..." msgstr "Liitä tie_dosto..." #: ../src/vikwindow.c:3148 msgid "Append data from a different file" msgstr "Liitä tietoja eri tiedostosta" #: ../src/vikwindow.c:3149 msgid "A_cquire" msgstr "H_anki" #: ../src/vikwindow.c:3150 msgid "Transfer data from a GPS device" msgstr "Siirrä tietoa GPS-laitteesta" #: ../src/vikwindow.c:3151 msgid "Import File With GPS_Babel..." msgstr "Tuo tiedosto ohjelmalla GPS_Babel..." #: ../src/vikwindow.c:3151 msgid "Import file via GPSBabel converter" msgstr "Tuo tiedosto GPSBabel-muuntimen kautta" #: ../src/vikwindow.c:3153 msgid "Google _Directions..." msgstr "Google _Ajo-ohjeet..." #: ../src/vikwindow.c:3153 msgid "Get driving directions from Google" msgstr "Hae ajo-ohjeita Googlelta" #: ../src/vikwindow.c:3156 msgid "_OSM Traces..." msgstr "_OSM-jäljet..." #: ../src/vikwindow.c:3156 msgid "Get traces from OpenStreetMap" msgstr "Hae jäljet ohjelmasta OpenStreetMap" #: ../src/vikwindow.c:3157 msgid "_My OSM Traces..." msgstr "" #: ../src/vikwindow.c:3157 msgid "Get Your Own Traces from OpenStreetMap" msgstr "" #: ../src/vikwindow.c:3160 msgid "Geo_caches..." msgstr "Geo_kätköt..." #: ../src/vikwindow.c:3160 msgid "Get Geocaches from geocaching.com" msgstr "Hae geokätköt osoitteesta geocaching.com" #: ../src/vikwindow.c:3163 msgid "Create waypoints from geotagged images" msgstr "Luo välietapit geotagged-kuvista" #: ../src/vikwindow.c:3166 msgid "Create waypoints from Wikipedia items in the current view" msgstr "" #: ../src/vikwindow.c:3168 msgid "_Save" msgstr "Talle_nna" #: ../src/vikwindow.c:3168 msgid "Save the file" msgstr "Tallenna tiedosto" #: ../src/vikwindow.c:3169 msgid "Save _As..." msgstr "Tall_enna nimellä..." #: ../src/vikwindow.c:3169 msgid "Save the file under different name" msgstr "Tallenna tiedosto eri nimellä" #: ../src/vikwindow.c:3170 msgid "_Generate Image File..." msgstr "T_uota kuvatiedosto..." #: ../src/vikwindow.c:3170 msgid "Save a snapshot of the workspace into a file" msgstr "Tallenna työtilan kuvakaappaus tiedostoon" #: ../src/vikwindow.c:3171 msgid "Generate _Directory of Images..." msgstr "Tuota ku_vahakemisto..." #: ../src/vikwindow.c:3171 msgid "FIXME:IMGDIR" msgstr "KORJAAMINUT:IMGDIR" #: ../src/vikwindow.c:3174 msgid "_Print..." msgstr "_Tulosta..." #: ../src/vikwindow.c:3174 msgid "Print maps" msgstr "Tulosta karttoja" #: ../src/vikwindow.c:3177 msgid "E_xit" msgstr "P_oistu" #: ../src/vikwindow.c:3177 msgid "Exit the program" msgstr "Poistu ohjelmasta" #: ../src/vikwindow.c:3178 msgid "Save and Exit" msgstr "Tallenna ja poistu" #: ../src/vikwindow.c:3178 msgid "Save and Exit the program" msgstr "Tallenna ja poistu ohjelmasta" #: ../src/vikwindow.c:3180 msgid "Go to the _Default Location" msgstr "Siirry _oletusijaintiin" #: ../src/vikwindow.c:3180 msgid "Go to the default location" msgstr "Siirry oletussijaintiin" #: ../src/vikwindow.c:3181 msgid "Go to _Location..." msgstr "_Siirry sijaintiin..." #: ../src/vikwindow.c:3181 msgid "Go to address/place using text search" msgstr "Siirry osoitteesen/paikkaan käyttäen tekstihakua" #: ../src/vikwindow.c:3182 msgid "_Go to Lat/Lon..." msgstr "_Siirry leveyspiirille/pituuspiirille..." #: ../src/vikwindow.c:3182 msgid "Go to arbitrary lat/lon coordinate" msgstr "Siirry satunnaiseen leveysp./pituusp. koordinaattiin" #: ../src/vikwindow.c:3183 msgid "Go to UTM..." msgstr "Siirry UTM:ään..." #: ../src/vikwindow.c:3183 msgid "Go to arbitrary UTM coordinate" msgstr "Siirry satunnaiseen UTM-koordinaattiin" #: ../src/vikwindow.c:3184 msgid "_Refresh" msgstr "" #: ../src/vikwindow.c:3184 msgid "Refresh any maps displayed" msgstr "" #: ../src/vikwindow.c:3185 msgid "Set _Highlight Color..." msgstr "Aseta _korostusväri..." #: ../src/vikwindow.c:3186 msgid "Set Bac_kground Color..." msgstr "Aseta tausta_väri..." #: ../src/vikwindow.c:3187 msgid "Zoom _In" msgstr "Lä_hennä" #: ../src/vikwindow.c:3188 msgid "Zoom _Out" msgstr "Loi_tonna" #: ../src/vikwindow.c:3189 msgid "Zoom _To..." msgstr "Loitonna/lähennä _kohteeseen..." #: ../src/vikwindow.c:3190 msgid "Pan _North" msgstr "V_ieritä pohjoiseen" #: ../src/vikwindow.c:3191 msgid "Pan _East" msgstr "Vi_eritä itään" #: ../src/vikwindow.c:3192 msgid "Pan _South" msgstr "Vieri_tä etelään" #: ../src/vikwindow.c:3193 msgid "Pan _West" msgstr "Vieritä _länteen" #: ../src/vikwindow.c:3194 msgid "Background _Jobs" msgstr "Ta_ustatyöt" #: ../src/vikwindow.c:3196 msgid "Cu_t" msgstr "Leikk_aa" #: ../src/vikwindow.c:3197 msgid "_Copy" msgstr "Kop_ioi" #: ../src/vikwindow.c:3198 msgid "_Paste" msgstr "_Liitä" #: ../src/vikwindow.c:3199 msgid "_Delete" msgstr "_Poista" #: ../src/vikwindow.c:3200 msgid "Delete All" msgstr "Poista kaikki" #: ../src/vikwindow.c:3201 msgid "_Flush Map Cache" msgstr "_Tyhjennä karttavälimuisti" #: ../src/vikwindow.c:3202 msgid "_Set the Default Location" msgstr "_Aseta oletussijainti" #: ../src/vikwindow.c:3202 msgid "Set the Default Location to the current position" msgstr "Aseta oletussijainniksi nykyinen sijainti" #: ../src/vikwindow.c:3203 msgid "_Preferences" msgstr "A_setukset" #: ../src/vikwindow.c:3204 msgid "_Properties" msgstr "Ominaisuu_det" #: ../src/vikwindow.c:3207 msgid "_About" msgstr "O_hjelmasta" #: ../src/vikwindow.c:3213 msgid "_UTM Mode" msgstr "_UTM-tila" #: ../src/vikwindow.c:3214 msgid "_Expedia Mode" msgstr "_Expedia-tila" #: ../src/vikwindow.c:3215 msgid "_Mercator Mode" msgstr "_Mercator-tila" #: ../src/vikwindow.c:3216 msgid "Lat_/Lon Mode" msgstr "Le_veysaste-/pituuastetila" #: ../src/vikwindow.c:3220 msgid "Show _Scale" msgstr "Näytä _skaala" #: ../src/vikwindow.c:3220 msgid "Show Scale" msgstr "Näytä skaala" #: ../src/vikwindow.c:3221 msgid "Show _Center Mark" msgstr "Näytä k_eskusmerkki" #: ../src/vikwindow.c:3221 msgid "Show Center Mark" msgstr "Näytä keskusmerkki" #: ../src/vikwindow.c:3222 msgid "Show _Highlight" msgstr "Näytä _korostus" #: ../src/vikwindow.c:3222 msgid "Show Highlight" msgstr "Näytä korostus" #: ../src/vikwindow.c:3223 msgid "_Full Screen" msgstr "K_okonäyttö" #: ../src/vikwindow.c:3223 msgid "Activate full screen mode" msgstr "Aktivoi kokonäyttötila" #: ../src/vikwindow.c:3224 msgid "Show Side _Panel" msgstr "Näytä siv_upaneeli" #: ../src/vikwindow.c:3224 msgid "Show Side Panel" msgstr "Näytä sivupaneeli" #: ../src/vikwindow.c:3225 msgid "Show Status_bar" msgstr "Näytä tilapal_kki" #: ../src/vikwindow.c:3225 msgid "Show Statusbar" msgstr "Näytä tilapalkki" #: ../src/vikwindow.c:3226 msgid "Show _Toolbar" msgstr "Näytä _työkalupalkki" #: ../src/vikwindow.c:3226 msgid "Show Toolbar" msgstr "Näytä työkalupalkki" #: ../src/vikwindow.c:3227 msgid "Show _Menu" msgstr "Näytä _Valikko" #: ../src/vikwindow.c:3227 msgid "Show Menu" msgstr "Näytä valikko" #: ../src/viking.desktop.in.h:2 msgid "GPS Data Manager" msgstr "GPS-tietohallinta" #: ../src/viking.desktop.in.h:3 msgid "Map Based GPS Data Manager (live data capable)." msgstr "Karttaperustaienn GPS-datahallinta (livetietokykyinen)." #: ../src/libjpeg/jpeg-data.c:206 msgid "Data does not follow JPEG specification." msgstr "Tiedot eivät noudata JPEF-määrittelyä." #: ../src/libjpeg/jpeg-data.c:291 #, c-format msgid "Path '%s' invalid." msgstr "Polku ’%s’ on virheellinen." #: ../src/libjpeg/jpeg-data.c:309 #, c-format msgid "Could not read '%s'." msgstr "Kohteen ’%s’ lukeminen epäonnistui." viking-1.4.2/po/lv.po0000644000175000017500000021412712175546146011347 00000000000000# Latvian translation for viking # Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008 # This file is distributed under the same license as the viking package. # FIRST AUTHOR , 2008. # msgid "" msgstr "" "Project-Id-Version: viking\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-02-04 23:29+0100\n" "PO-Revision-Date: 2008-09-30 12:59+0000\n" "Last-Translator: Viesturs Zariņš \n" "Language-Team: Latvian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2;\n" "X-Launchpad-Export-Date: 2013-03-23 17:12+0000\n" "X-Generator: Launchpad (build 16540)\n" "Language: lv\n" #: ../src/acquire.c:103 ../src/vikgpslayer.c:1185 msgid "Done." msgstr "Gatavs." #: ../src/acquire.c:114 msgid "No data." msgstr "" #: ../src/acquire.c:154 ../src/acquire.c:404 msgid "Error: acquisition failed." msgstr "Kļūda: iegūšana neizdevās." #: ../src/acquire.c:341 msgid "Working..." msgstr "Strādā..." #. This shouldn't happen... #: ../src/acquire.c:394 msgid "" "Unable to create command\n" "Acquire method failed." msgstr "" #: ../src/acquire.c:486 msgid "_Filter" msgstr "" #: ../src/acquire.c:501 #, c-format msgid "Filter with %s" msgstr "" #: ../src/acquire.c:518 msgid "Filter" msgstr "" #: ../src/background.c:52 #, c-format msgid "%d items" msgstr "%d ieraksti" #: ../src/background.c:248 msgid "Job" msgstr "Darbs" #: ../src/background.c:252 msgid "Progress" msgstr "Progress" #: ../src/background.c:268 msgid "Viking Background Jobs" msgstr "Viking fona darbi" #: ../src/bing.c:47 msgid "Bing" msgstr "" #. VIK_GTK_WINDOW_FROM_WIDGET(vp) #: ../src/bingmapsource.c:445 msgid "Bing attribution Loading" msgstr "" #: ../src/clipboard.c:95 msgid "paste failed" msgstr "neizdevās ielīmēt" #: ../src/clipboard.c:105 msgid "wrong clipboard data size" msgstr "nepareizs starpliktuves datu izmērs" #: ../src/clipboard.c:124 #, c-format msgid "" "The clipboard contains sublayer data for %s layers. You must select a layer " "of this type to paste the clipboard data." msgstr "" #: ../src/clipboard.c:236 msgid "" "In order to paste a waypoint, please select an appropriate layer to paste " "into." msgstr "" #: ../src/dialog.c:52 msgid "Go to Lat/Lon" msgstr "" #: ../src/dialog.c:64 ../src/dialog.c:251 msgid "Latitude:" msgstr "" #: ../src/dialog.c:70 ../src/dialog.c:256 msgid "Longitude:" msgstr "" #: ../src/dialog.c:102 msgid "Go to UTM" msgstr "" #: ../src/dialog.c:115 msgid "Northing:" msgstr "" #: ../src/dialog.c:121 msgid "Easting:" msgstr "" #: ../src/dialog.c:128 msgid "Zone:" msgstr "" #: ../src/dialog.c:131 msgid "Letter:" msgstr "" #: ../src/dialog.c:199 msgid "Waypoint Properties" msgstr "" #: ../src/dialog.c:233 msgid "Name:" msgstr "" #: ../src/dialog.c:261 msgid "Altitude:" msgstr "" #: ../src/dialog.c:266 msgid "Comment:" msgstr "" #: ../src/dialog.c:274 ../src/osm-traces.c:437 msgid "Description:" msgstr "" #: ../src/dialog.c:277 msgid "Image:" msgstr "" #: ../src/dialog.c:282 msgid "Symbol:" msgstr "" #: ../src/dialog.c:291 msgid "(none)" msgstr "" #. TODO: other checks (isalpha or whatever ) #: ../src/dialog.c:356 msgid "Please enter a name for the waypoint." msgstr "" #: ../src/dialog.c:529 ../src/geonamessearch.c:243 #: ../src/datasource_osm_my_traces.c:507 msgid "Nothing was selected" msgstr "" #: ../src/dialog.c:537 msgid "Add Route" msgstr "" #: ../src/dialog.c:537 msgid "Add Track" msgstr "" #: ../src/dialog.c:545 msgid "Route Name:" msgstr "" #: ../src/dialog.c:545 msgid "Track Name:" msgstr "" #: ../src/dialog.c:565 msgid "Please enter a name for the track." msgstr "" #: ../src/dialog.c:623 msgid "Zoom Factors..." msgstr "" #: ../src/dialog.c:637 msgid "Zoom factor (in meters per pixel):" msgstr "" #: ../src/dialog.c:638 msgid "X (easting): " msgstr "" #: ../src/dialog.c:639 msgid "Y (northing): " msgstr "" #: ../src/dialog.c:644 msgid "X and Y zoom factors must be equal" msgstr "" #: ../src/dialog.c:699 msgid "1 min" msgstr "" #: ../src/dialog.c:700 msgid "1 hour" msgstr "" #: ../src/dialog.c:701 msgid "1 day" msgstr "" #: ../src/dialog.c:702 msgid "Custom (in minutes):" msgstr "" #: ../src/dialog.c:808 msgid "GPS Data and Topo Analyzer, Explorer, and Manager." msgstr "" #: ../src/dialog.c:809 msgid "" "This program is free software; you can redistribute it and/or modify it " "under the terms of the GNU General Public License as published by the Free " "Software Foundation; either version 2 of the License, or (at your option) " "any later version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT " "ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or " "FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for " "more details.\n" "\n" "You should have received a copy of the GNU General Public License along with " "this program; if not, write to the Free Software Foundation, Inc., 59 Temple " "Place, Suite 330, Boston, MA 02111-1307, USA" msgstr "" #: ../src/dialog.c:837 msgid "Translation is coordinated on http://launchpad.net/viking" msgstr "" #: ../src/dialog.c:845 msgid "Download along track" msgstr "" #: ../src/dialog.c:851 msgid "Map type:" msgstr "" #: ../src/dialog.c:856 msgid "Zoom level:" msgstr "" #: ../src/dialog.c:896 #, c-format msgid "The map data is licensed: %s." msgstr "" #: ../src/dialog.c:899 #, c-format msgid "" "The data provided by '%s' are licensed under the following license: " "%s.\n" "Please, read the license before continuing." msgstr "" #: ../src/dialog.c:904 msgid "Open license" msgstr "" #: ../src/expedia.c:53 msgid "Expedia Street Maps" msgstr "" #: ../src/expedia.c:81 msgid "Invalid expedia altitude" msgstr "" #: ../src/expedia.c:112 #, c-format msgid "" "Couldn't open EXPEDIA image file (right after successful download! Please " "report and delete image file!): %s" msgstr "" #: ../src/expedia.c:125 #, c-format msgid "" "Couldn't save EXPEDIA image file (right after successful download! Please " "report and delete image file!): %s" msgstr "" #. * #. * See http://www.geonames.org/export/wikipedia-webservice.html#wikipediaBoundingBox #. #. Translators may wish to change this setting as appropriate to get Wikipedia articles in that language #: ../src/geonamessearch.c:46 msgid "en" msgstr "" #: ../src/geonamessearch.c:121 msgid "Search" msgstr "" #: ../src/geonamessearch.c:123 msgid "No entries found!" msgstr "" #. NB could allow columns to be shifted around by doing this after each new #. gtk_tree_view_column_set_reorderable ( column, TRUE ); #. However I don't think is that useful, so I haven't put it in #: ../src/geonamessearch.c:177 ../src/datasource_osm_my_traces.c:425 msgid "Name" msgstr "" #: ../src/geonamessearch.c:182 msgid "Feature" msgstr "" #: ../src/geonamessearch.c:187 ../src/datasource_osm_my_traces.c:440 msgid "Lat/Lon" msgstr "" #: ../src/geonamessearch.c:269 ../src/googlesearch.c:100 msgid "couldn't map temp file" msgstr "" #: ../src/globals.c:44 msgid "Degree format:" msgstr "" #: ../src/globals.c:48 msgid "Distance units:" msgstr "" #: ../src/globals.c:52 msgid "Speed units:" msgstr "" #: ../src/globals.c:56 msgid "Height units:" msgstr "" #: ../src/globals.c:60 msgid "Use large waypoint icons:" msgstr "" #: ../src/globals.c:64 msgid "Default latitude:" msgstr "" #: ../src/globals.c:67 msgid "Default longitude:" msgstr "" #: ../src/globals.c:73 msgid "Alphabetical" msgstr "" #: ../src/globals.c:73 ../src/datasource_osm_my_traces.c:435 msgid "Time" msgstr "" #: ../src/globals.c:76 msgid "KML File Export Units:" msgstr "" #: ../src/globals.c:77 msgid "GPX Track Order:" msgstr "" #: ../src/globals.c:82 msgid "Image Viewer:" msgstr "" #: ../src/globals.c:87 msgid "External GPX Program 1:" msgstr "" #: ../src/globals.c:88 msgid "External GPX Program 2:" msgstr "" #. Defaults for the options are setup here #: ../src/globals.c:96 msgid "General" msgstr "" #. New Tab #: ../src/globals.c:121 msgid "Export/External" msgstr "" #. Webtools #: ../src/google.c:36 msgid "Google" msgstr "" #: ../src/datasource_file.c:59 msgid "Import file with GPSBabel" msgstr "" #: ../src/datasource_file.c:60 msgid "Imported file" msgstr "" #. The file selector #: ../src/datasource_file.c:133 msgid "File:" msgstr "" #: ../src/datasource_file.c:134 msgid "File to import" msgstr "" #: ../src/datasource_file.c:141 msgid "All files" msgstr "" #. The file format selector #: ../src/datasource_file.c:148 msgid "File type:" msgstr "" #: ../src/datasource_file.c:193 #, c-format msgid "using babel args '%s' and file '%s'" msgstr "" #: ../src/datasource_gc.c:66 msgid "Download Geocaches" msgstr "" #: ../src/datasource_gc.c:67 msgid "Geocaching.com Caches" msgstr "" #: ../src/datasource_gc.c:84 msgid "geocaching.com username:" msgstr "" #: ../src/datasource_gc.c:85 msgid "geocaching.com password:" msgstr "" #: ../src/datasource_gc.c:126 #, c-format msgid "" "Can't find %s or %s in path! Check that you have installed it correctly." msgstr "" #: ../src/datasource_gc.c:188 msgid "Number geocaches:" msgstr "" #: ../src/datasource_gc.c:190 msgid "Centered around:" msgstr "" #: ../src/datasource_gc.c:226 msgid "Broken input - using some defaults" msgstr "" #: ../src/datasource_geotag.c:51 msgid "Create Waypoints from Geotagged Images" msgstr "" #: ../src/datasource_geotag.c:52 msgid "Geotagged Images" msgstr "" #: ../src/datasource_geotag.c:102 ../src/vikwindow.c:2314 #: ../src/vikwindow.c:2382 ../src/vikwindow.c:2824 msgid "All" msgstr "" #: ../src/datasource_geotag.c:107 ../src/vikwindow.c:2829 msgid "JPG" msgstr "" #: ../src/datasource_geotag.c:165 #, c-format msgid "Unable to create waypoint from %s" msgstr "" #: ../src/datasource_google.c:49 ../src/datasource_google.c:50 msgid "Google Directions" msgstr "" #: ../src/datasource_google.c:77 msgid "From:" msgstr "" #: ../src/datasource_google.c:79 msgid "To:" msgstr "" #: ../src/datasource_gps.c:57 msgid "Acquire from GPS" msgstr "" #: ../src/datasource_gps.c:58 msgid "Acquired from GPS" msgstr "" #: ../src/datasource_gps.c:221 #, c-format msgid "using cmdline '%s' and file '%s'\n" msgstr "" #: ../src/datasource_gps.c:297 ../src/vikgpslayer.c:884 #, c-format msgid "Downloading %d waypoint..." msgid_plural "Downloading %d waypoints..." msgstr[0] "" msgstr[1] "" #: ../src/datasource_gps.c:298 ../src/vikgpslayer.c:885 #, c-format msgid "Downloading %d trackpoint..." msgid_plural "Downloading %d trackpoints..." msgstr[0] "" msgstr[1] "" #: ../src/datasource_gps.c:303 ../src/vikgpslayer.c:890 #, c-format msgid "Downloading %d routepoint..." msgid_plural "Downloading %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/datasource_gps.c:325 ../src/datasource_gps.c:326 #: ../src/datasource_gps.c:327 #, c-format msgid "Downloaded %d out of %d %s..." msgstr "" #: ../src/datasource_gps.c:331 ../src/datasource_gps.c:332 #: ../src/datasource_gps.c:333 #, c-format msgid "Downloaded %d %s." msgstr "" #: ../src/datasource_gps.c:347 ../src/vikgpslayer.c:968 #, c-format msgid "GPS Device: %s" msgstr "" #: ../src/datasource_gps.c:370 ../src/vikgpslayer.c:1042 #: ../src/vikgpslayer.c:1110 msgid "Status: Working..." msgstr "" #: ../src/datasource_gps.c:469 ../src/vikgpslayer.c:150 msgid "GPS Protocol:" msgstr "" #. List now assigned at runtime #: ../src/datasource_gps.c:488 ../src/vikgpslayer.c:151 msgid "Serial Port:" msgstr "" #: ../src/datasource_gps.c:509 msgid "" "Turn Off After Transfer\n" "(Garmin/NAViLink Only)" msgstr "" #: ../src/datasource_gps.c:512 msgid "Tracks:" msgstr "" #: ../src/datasource_gps.c:516 msgid "Routes:" msgstr "" #: ../src/datasource_gps.c:520 msgid "Waypoints:" msgstr "" #: ../src/datasource_gps.c:594 ../src/vikgpslayer.c:1305 msgid "GPS device: N/A" msgstr "" #: ../src/datasource_osm.c:52 ../src/datasource_osm.c:53 msgid "OSM traces" msgstr "" #: ../src/datasource_osm.c:80 msgid "Page number:" msgstr "" #: ../src/datasource_osm_my_traces.c:63 ../src/datasource_osm_my_traces.c:64 msgid "OSM My Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:108 msgid "Username:" msgstr "" #: ../src/datasource_osm_my_traces.c:113 msgid "The email or username used to login to OSM" msgstr "" #: ../src/datasource_osm_my_traces.c:115 ../src/osm-traces.c:413 msgid "Password:" msgstr "" #: ../src/datasource_osm_my_traces.c:120 msgid "The password used to login to OSM" msgstr "" #: ../src/datasource_osm_my_traces.c:430 msgid "Description" msgstr "" #: ../src/datasource_osm_my_traces.c:445 msgid "Privacy" msgstr "" #: ../src/datasource_osm_my_traces.c:452 msgid "Within Current View" msgstr "" #: ../src/datasource_osm_my_traces.c:518 msgid "GPS Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:520 msgid "None found!" msgstr "" #: ../src/datasource_osm_my_traces.c:629 msgid "My OSM Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:645 #, c-format msgid "Unable to get trace: %s" msgstr "" #: ../src/datasource_wikipedia.c:32 msgid "Create Waypoints from Wikipedia Articles" msgstr "" #: ../src/datasource_wikipedia.c:33 msgid "Wikipedia Waypoints" msgstr "" #: ../src/dem.c:65 ../src/dem.c:79 msgid "Invalid DEM" msgstr "" #: ../src/dem.c:121 msgid "Invalid DEM header" msgstr "" #: ../src/dem.c:190 ../src/dem.c:203 msgid "Incorrect DEM Class B record: expected 1" msgstr "" #: ../src/dem.c:360 #, c-format msgid "Couldn't map file %s: %s" msgstr "" #: ../src/download.c:112 msgid "Tile age (s):" msgstr "" #: ../src/download.c:233 #, c-format msgid "Download error: %s" msgstr "" #: ../src/download.c:313 msgid "couldn't open temp file" msgstr "" #: ../src/file.c:456 ../src/file.c:461 #, c-format msgid "Draw mode '%s' no more supported" msgstr "" #: ../src/geotag_exif.c:433 msgid "Not enough memory." msgstr "" #: ../src/geotag_exif.c:451 msgid "Setting a value for this tag is unsupported!" msgstr "" #: ../src/geotag_exif.c:470 #, c-format msgid "Too few components specified (need %d, found %d)\n" msgstr "" #: ../src/geotag_exif.c:474 msgid "Numeric value expected\n" msgstr "" #: ../src/geotag_exif.c:482 msgid "This shouldn't happen!" msgstr "" #: ../src/geotag_exif.c:552 msgid "Not yet implemented!" msgstr "" #: ../src/geotag_exif.c:565 msgid "Warning; Too many components specified!" msgstr "" #: ../src/osm-traces.c:73 msgid "Identifiable (public w/ timestamps)" msgstr "" #: ../src/osm-traces.c:74 msgid "Trackable (private w/ timestamps)" msgstr "" #: ../src/osm-traces.c:75 msgid "Public" msgstr "" #: ../src/osm-traces.c:76 msgid "Private" msgstr "" #: ../src/osm-traces.c:93 msgid "OSM username:" msgstr "" #: ../src/osm-traces.c:94 msgid "OSM password:" msgstr "" #. Preferences #: ../src/osm-traces.c:151 msgid "OpenStreetMap Traces" msgstr "" #: ../src/osm-traces.c:234 #, c-format msgid "failed to upload data: HTTP response is %ld" msgstr "" #: ../src/osm-traces.c:239 #, c-format msgid "curl_easy_getinfo failed: %d" msgstr "" #: ../src/osm-traces.c:244 #, c-format msgid "curl request failed: %s" msgstr "" #: ../src/osm-traces.c:275 #, c-format msgid "failed to open temporary file: %s" msgstr "" #. Success #: ../src/osm-traces.c:328 msgid "Uploaded to OSM" msgstr "" #: ../src/osm-traces.c:332 msgid "FAILED TO UPLOAD DATA TO OSM - CURL PROBLEM" msgstr "" #: ../src/osm-traces.c:335 msgid "FAILED TO UPLOAD DATA TO OSM" msgstr "" #: ../src/osm-traces.c:335 msgid "HTTP response code" msgstr "" #: ../src/osm-traces.c:348 #, c-format msgid "failed to unlink temporary file: %s" msgstr "" #: ../src/osm-traces.c:387 msgid "OSM upload" msgstr "" #: ../src/osm-traces.c:405 msgid "Email:" msgstr "" #: ../src/osm-traces.c:410 msgid "" "The email used as login\n" "Enter the email you use to login into www.openstreetmap.org." msgstr "" #: ../src/osm-traces.c:418 msgid "" "The password used to login\n" "Enter the password you use to login into " "www.openstreetmap.org." msgstr "" #: ../src/osm-traces.c:423 msgid "File's name:" msgstr "" #: ../src/osm-traces.c:433 msgid "" "The name of the file on OSM\n" "This is the name of the file created on the server.This is not the " "name of the local file." msgstr "" #: ../src/osm-traces.c:442 msgid "The description of the trace" msgstr "" #: ../src/osm-traces.c:444 msgid "Tags:" msgstr "" #: ../src/osm-traces.c:449 msgid "The tags associated to the trace" msgstr "" #: ../src/osm-traces.c:482 #, c-format msgid "Uploading %s to OSM" msgstr "" #: ../src/mapcache.c:61 msgid "Map cache memory size (MB):" msgstr "" #: ../src/print.c:53 msgid "None" msgstr "" #: ../src/print.c:54 msgid "Horizontally" msgstr "" #: ../src/print.c:55 msgid "Vertically" msgstr "" #: ../src/print.c:56 msgid "Both" msgstr "" #: ../src/print.c:120 msgid "Image Settings" msgstr "" #: ../src/print.c:546 msgid "done" msgstr "" #. Page Size #: ../src/print.c:575 msgid "_Adjust Page Size and Orientation" msgstr "" #: ../src/print.c:591 msgid "C_enter:" msgstr "" #. ignore page margins #: ../src/print.c:609 msgid "Ignore Page _Margins" msgstr "" #: ../src/print.c:628 msgid "Image S_ize:" msgstr "" #: ../src/util.c:81 msgid "Could not launch web browser." msgstr "" #: ../src/util.c:92 msgid "Could not create new email." msgstr "" #: ../src/vikcoordlayer.c:46 msgid "Color:" msgstr "" #: ../src/vikcoordlayer.c:47 msgid "Minutes Width:" msgstr "" #: ../src/vikcoordlayer.c:48 msgid "Line Thickness:" msgstr "" #: ../src/vikcoordlayer.c:56 msgid "Coordinate" msgstr "" #: ../src/datasource_bfilter.c:46 msgid "Max number of points:" msgstr "" #: ../src/datasource_bfilter.c:60 msgid "Simplify All Tracks..." msgstr "" #: ../src/datasource_bfilter.c:61 msgid "Simplified Tracks" msgstr "" #: ../src/datasource_bfilter.c:96 ../src/datasource_bfilter.c:97 msgid "Remove Duplicate Waypoints" msgstr "" #: ../src/datasource_bfilter.c:129 msgid "Waypoints Inside This" msgstr "" #: ../src/datasource_bfilter.c:130 msgid "Polygonized Layer" msgstr "" #: ../src/datasource_bfilter.c:165 msgid "Waypoints Outside This" msgstr "" #: ../src/datasource_bfilter.c:166 msgid "Polygonzied Layer" msgstr "" #: ../src/main.c:89 #, c-format msgid "Ignoring Xlib error: error code %d request code %d\n" msgstr "" #: ../src/main.c:102 msgid "Enable debug output" msgstr "" #: ../src/main.c:103 msgid "Enable verbose output" msgstr "" #: ../src/main.c:104 msgid "Show version" msgstr "" #: ../src/osm.c:106 msgid "On Disk OSM Tile Format" msgstr "" #: ../src/osm.c:121 msgid "OSM (view)" msgstr "" #: ../src/osm.c:125 msgid "OSM (edit)" msgstr "" #: ../src/osm.c:129 msgid "OSM (render)" msgstr "" #. Example: http://127.0.0.1:8111/load_and_zoom?left=8.19&right=8.20&top=48.605&bottom=48.590&select=node413602999 #. JOSM or merkaartor must already be running with remote interface enabled #: ../src/osm.c:136 msgid "Local port 8111 (eg JOSM)" msgstr "" #: ../src/preferences.c:285 msgid "Preferences" msgstr "" #: ../src/uibuilder.c:147 msgid "Take care that this password will be stored clearly in a plain file." msgstr "" #: ../src/vikaggregatelayer.c:37 msgid "Aggregate" msgstr "" #: ../src/vikdemlayer.c:101 msgid "Absolute height" msgstr "" #: ../src/vikdemlayer.c:102 msgid "Height gradient" msgstr "" #: ../src/vikdemlayer.c:118 msgid "DEM Files:" msgstr "" #: ../src/vikdemlayer.c:119 msgid "Download Source:" msgstr "" #: ../src/vikdemlayer.c:120 msgid "Min Elev Color:" msgstr "" #: ../src/vikdemlayer.c:121 msgid "Type:" msgstr "" #: ../src/vikdemlayer.c:122 msgid "Min Elev:" msgstr "" #: ../src/vikdemlayer.c:123 msgid "Max Elev:" msgstr "" #: ../src/vikdemlayer.c:134 msgid "_DEM Download" msgstr "" #: ../src/vikdemlayer.c:134 msgid "DEM Download" msgstr "" #: ../src/vikdemlayer.c:188 msgid "DEM" msgstr "" #: ../src/vikdemlayer.c:284 #, c-format msgid "Number of files: %d" msgstr "" #: ../src/vikdemlayer.c:385 msgid "DEM Loading" msgstr "" #: ../src/vikdemlayer.c:889 #, c-format msgid "No SRTM data available for %f, %f" msgstr "" #: ../src/vikdemlayer.c:1149 #, c-format msgid "Downloading DEM %s" msgstr "" #: ../src/vikfileentry.c:68 msgid "Browse..." msgstr "" #: ../src/vikfileentry.c:96 msgid "Choose file" msgstr "" #: ../src/vikfilelist.c:48 msgid "Choose file(s)" msgstr "" #: ../src/vikfilelist.c:172 msgid "Add..." msgstr "" #: ../src/vikfilelist.c:173 msgid "Delete" msgstr "" #: ../src/vikgeoreflayer.c:70 msgid "_Georef Move Map" msgstr "" #: ../src/vikgeoreflayer.c:70 msgid "Georef Move Map" msgstr "" #: ../src/vikgeoreflayer.c:77 msgid "Georef Z_oom Tool" msgstr "" #: ../src/vikgeoreflayer.c:77 msgid "Georef Zoom Tool" msgstr "" #: ../src/vikgeoreflayer.c:87 msgid "GeoRef Map" msgstr "" #: ../src/vikgeoreflayer.c:335 ../src/vikmapslayer.c:685 #, c-format msgid "Couldn't open image file: %s" msgstr "" #: ../src/vikgeoreflayer.c:365 msgid "Unexpected end of file reading World file." msgstr "" #: ../src/vikgeoreflayer.c:381 ../src/vikgeoreflayer.c:426 msgid "Choose World file" msgstr "" #: ../src/vikgeoreflayer.c:394 msgid "The World file you requested could not be opened for reading." msgstr "" #: ../src/vikgeoreflayer.c:439 msgid "The file you requested could not be opened for writing." msgstr "" #: ../src/vikgeoreflayer.c:456 ../src/viklayer.c:480 msgid "Layer Properties" msgstr "" #: ../src/vikgeoreflayer.c:478 msgid "World File Parameters:" msgstr "" #: ../src/vikgeoreflayer.c:479 msgid "Load From File..." msgstr "" #: ../src/vikgeoreflayer.c:484 msgid "Corner pixel easting:" msgstr "" #: ../src/vikgeoreflayer.c:486 msgid "the UTM \"easting\" value of the upper-right corner pixel of the map" msgstr "" #: ../src/vikgeoreflayer.c:488 msgid "Corner pixel northing:" msgstr "" #: ../src/vikgeoreflayer.c:490 msgid "the UTM \"northing\" value of the upper-right corner pixel of the map" msgstr "" #: ../src/vikgeoreflayer.c:492 msgid "X (easting) scale (mpp): " msgstr "" #: ../src/vikgeoreflayer.c:493 msgid "Y (northing) scale (mpp): " msgstr "" #: ../src/vikgeoreflayer.c:496 msgid "the scale of the map in the X direction (meters per pixel)" msgstr "" #: ../src/vikgeoreflayer.c:498 msgid "the scale of the map in the Y direction (meters per pixel)" msgstr "" #: ../src/vikgeoreflayer.c:500 msgid "Map Image:" msgstr "" #. Now with icons #: ../src/vikgeoreflayer.c:608 msgid "_Zoom to Fit Map" msgstr "" #: ../src/vikgeoreflayer.c:614 msgid "_Goto Map Center" msgstr "" #: ../src/vikgeoreflayer.c:620 msgid "_Export to World File" msgstr "" #: ../src/vikgoto.c:75 msgid "No goto tool available." msgstr "" #: ../src/vikgoto.c:88 ../src/vikgoto.c:107 msgid "goto" msgstr "" #: ../src/vikgoto.c:90 msgid "I don't know that place. Do you want another goto?" msgstr "" #: ../src/vikgoto.c:109 msgid "goto provider:" msgstr "" #: ../src/vikgoto.c:124 msgid "Enter address or place name:" msgstr "" #: ../src/vikgpslayer.c:127 msgid "Data Mode" msgstr "" #: ../src/vikgpslayer.c:129 msgid "Realtime Tracking Mode" msgstr "" #: ../src/vikgpslayer.c:137 msgid "Keep vehicle at center" msgstr "" #: ../src/vikgpslayer.c:138 msgid "Keep vehicle on screen" msgstr "" #: ../src/vikgpslayer.c:139 msgid "Disable" msgstr "" #: ../src/vikgpslayer.c:152 msgid "Download Tracks:" msgstr "" #: ../src/vikgpslayer.c:153 msgid "Upload Tracks:" msgstr "" #: ../src/vikgpslayer.c:154 msgid "Download Routes:" msgstr "" #: ../src/vikgpslayer.c:155 msgid "Upload Routes:" msgstr "" #: ../src/vikgpslayer.c:156 msgid "Download Waypoints:" msgstr "" #: ../src/vikgpslayer.c:157 msgid "Upload Waypoints:" msgstr "" #: ../src/vikgpslayer.c:159 msgid "Recording tracks" msgstr "" #: ../src/vikgpslayer.c:160 msgid "Jump to current position on start" msgstr "" #: ../src/vikgpslayer.c:161 msgid "Moving Map Method:" msgstr "" #: ../src/vikgpslayer.c:162 msgid "Gpsd Host:" msgstr "" #: ../src/vikgpslayer.c:163 msgid "Gpsd Port:" msgstr "" #: ../src/vikgpslayer.c:164 msgid "Gpsd Retry Interval (seconds):" msgstr "" #: ../src/vikgpslayer.c:179 msgid "GPS" msgstr "" #: ../src/vikgpslayer.c:242 ../src/vikgpslayer.c:1258 msgid "GPS Download" msgstr "" #: ../src/vikgpslayer.c:242 ../src/vikgpslayer.c:1258 #: ../src/viktrwlayer.c:3094 msgid "GPS Upload" msgstr "" #: ../src/vikgpslayer.c:244 msgid "GPS Realtime Tracking" msgstr "" #: ../src/vikgpslayer.c:451 msgid "Unknown GPS Protocol" msgstr "" #: ../src/vikgpslayer.c:469 msgid "Unknown serial port device" msgstr "" #: ../src/vikgpslayer.c:572 #, c-format msgid "%s: unknown parameter" msgstr "" #. Now with icons #: ../src/vikgpslayer.c:693 msgid "_Upload to GPS" msgstr "" #: ../src/vikgpslayer.c:699 msgid "Download from _GPS" msgstr "" #: ../src/vikgpslayer.c:720 msgid "Empty _Realtime" msgstr "" #: ../src/vikgpslayer.c:727 msgid "E_mpty Upload" msgstr "" #: ../src/vikgpslayer.c:733 msgid "_Empty Download" msgstr "" #: ../src/vikgpslayer.c:739 msgid "Empty _All" msgstr "" #. #. NB It's not fatal if this gives 2 for example! Hence removal of the g_assert #. This happens when copied GPS layer is deleted (not sure why the number_handlers would be 2) #. I don't think there's any side effects and certainly better than the program just aborting #. #: ../src/vikgpslayer.c:756 #, c-format msgid "Unexpected number of disconnected handlers: %d" msgstr "" #: ../src/vikgpslayer.c:898 #, c-format msgid "Uploading %d waypoint..." msgid_plural "Uploading %d waypoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:899 #, c-format msgid "Uploading %d trackpoint..." msgid_plural "Uploading %d trackpoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:900 #, c-format msgid "Uploading %d routepoint..." msgid_plural "Uploading %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:925 #, c-format msgid "Downloaded %d out of %d waypoint..." msgid_plural "Downloaded %d out of %d waypoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:926 #, c-format msgid "Downloaded %d out of %d trackpoint..." msgid_plural "Downloaded %d out of %d trackpoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:927 #, c-format msgid "Downloaded %d out of %d routepoint..." msgid_plural "Downloaded %d out of %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:932 #, c-format msgid "Uploaded %d out of %d waypoint..." msgid_plural "Uploaded %d out of %d waypoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:933 #, c-format msgid "Uploaded %d out of %d trackpoint..." msgid_plural "Uploaded %d out of %d trackpoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:934 #, c-format msgid "Uploaded %d out of %d routepoint..." msgid_plural "Uploaded %d out of %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:942 #, c-format msgid "Downloaded %d waypoint" msgid_plural "Downloaded %d waypoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:943 #, c-format msgid "Downloaded %d trackpoint" msgid_plural "Downloaded %d trackpoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:944 #, c-format msgid "Downloaded %d routepoint" msgid_plural "Downloaded %d routepoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:949 #, c-format msgid "Uploaded %d waypoint" msgid_plural "Uploaded %d waypoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:950 #, c-format msgid "Uploaded %d trackpoint" msgid_plural "Uploaded %d trackpoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:951 #, c-format msgid "Uploaded %d routepoint" msgid_plural "Uploaded %d routepoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:1180 msgid "Error: couldn't find gpsbabel." msgstr "" #: ../src/vikgpslayer.c:1269 msgid "Warning - GPS Upload items may overwrite each other" msgstr "" #: ../src/vikgpslayer.c:1301 msgid "Status: detecting gpsbabel" msgstr "Statuss: nosaka gpsbabel" #: ../src/vikgpslayer.c:1332 msgid "No GPS items selected for transfer." msgstr "" #: ../src/vikgpslayer.c:1347 msgid "Could not turn off device." msgstr "" #: ../src/vikgpslayer.c:1385 msgid "Are you sure you want to delete GPS Upload data?" msgstr "" #: ../src/vikgpslayer.c:1398 msgid "Are you sure you want to delete GPS Download data?" msgstr "" #: ../src/vikgpslayer.c:1412 msgid "Are you sure you want to delete GPS Realtime data?" msgstr "" #: ../src/vikgpslayer.c:1425 msgid "Are you sure you want to delete All GPS data?" msgstr "" #: ../src/viklayerspanel.c:55 msgid "/C_ut" msgstr "" #: ../src/viklayerspanel.c:56 msgid "/_Copy" msgstr "" #: ../src/viklayerspanel.c:57 msgid "/_Paste" msgstr "" #: ../src/viklayerspanel.c:58 msgid "/_Delete" msgstr "" #: ../src/viklayerspanel.c:59 msgid "/New Layer" msgstr "" #: ../src/viklayerspanel.c:127 msgid "Top Layer" msgstr "" #: ../src/viklayerspanel.c:143 msgid "Add new layer" msgstr "" #: ../src/viklayerspanel.c:150 msgid "Remove selected layer" msgstr "" #: ../src/viklayerspanel.c:157 msgid "Move selected layer up" msgstr "" #: ../src/viklayerspanel.c:164 msgid "Move selected layer down" msgstr "" #: ../src/viklayerspanel.c:171 msgid "Cut selected layer" msgstr "" #: ../src/viklayerspanel.c:178 msgid "Copy selected layer" msgstr "" #: ../src/viklayerspanel.c:185 msgid "Paste layer below selected layer" msgstr "" #. TODO: FIXME: if name has a '/' in it it will get all messed up. why not have an itemfactory field with #. name, icon, shortcut, etc.? #: ../src/viklayerspanel.c:204 ../src/vikwindow.c:3292 #, c-format msgid "New _%s Layer" msgstr "" #: ../src/viklayerspanel.c:511 msgid "Aggregate Layers have no settable properties." msgstr "" #: ../src/viklayerspanel.c:555 msgid "You cannot cut the Top Layer." msgstr "" #: ../src/viklayerspanel.c:600 #, c-format msgid "Are you sure you want to delete %s?" msgstr "" #: ../src/viklayerspanel.c:617 msgid "You cannot delete the Top Layer." msgstr "" #: ../src/viklayerspanel.c:701 msgid "Are you sure you wish to delete all layers?" msgstr "" #. ******* MAPZOOMS ******** #: ../src/vikmapslayer.c:91 msgid "Use Viking Zoom Level" msgstr "" #: ../src/vikmapslayer.c:124 msgid "Map Type:" msgstr "" #: ../src/vikmapslayer.c:125 msgid "Maps Directory:" msgstr "" #: ../src/vikmapslayer.c:126 msgid "Alpha:" msgstr "" #: ../src/vikmapslayer.c:127 msgid "Control the Alpha value for transparency effects" msgstr "" #: ../src/vikmapslayer.c:128 msgid "Autodownload maps:" msgstr "" #: ../src/vikmapslayer.c:129 msgid "Autodownload Only Gets Missing Maps:" msgstr "" #: ../src/vikmapslayer.c:130 msgid "" "Using this option avoids attempting to update already acquired tiles. This " "can be useful if you want to restrict the network usage, without having to " "resort to manual control. Only applies when 'Autodownload Maps' is on." msgstr "" #: ../src/vikmapslayer.c:131 msgid "Zoom Level:" msgstr "" #: ../src/vikmapslayer.c:132 msgid "" "Determines the method of displaying map tiles for the current zoom level. " "'Viking Zoom Level' uses the best matching level, otherwise setting a fixed " "value will always use map tiles of the specified value regardless of the " "actual zoom level." msgstr "" #: ../src/vikmapslayer.c:146 msgid "_Maps Download" msgstr "" #: ../src/vikmapslayer.c:146 msgid "Maps Download" msgstr "" #: ../src/vikmapslayer.c:161 msgid "Map" msgstr "" #: ../src/vikmapslayer.c:249 msgid "Default maplayer directory:" msgstr "" #: ../src/vikmapslayer.c:249 msgid "Choose a directory to store cached Map tiles for this layer" msgstr "" #: ../src/vikmapslayer.c:505 msgid "Unknown map type" msgstr "" #: ../src/vikmapslayer.c:516 msgid "Unknown Map Zoom" msgstr "" #: ../src/vikmapslayer.c:589 #, c-format msgid "" "New map cannot be displayed in the current drawmode.\n" "Select \"%s\" from View menu to view it." msgstr "" #: ../src/vikmapslayer.c:753 #, c-format msgid "" "Cowardly refusing to draw tiles or existence of tiles beyond %d zoom out " "factor" msgstr "" #: ../src/vikmapslayer.c:1157 #, c-format msgid "Redownloading up to %d %s map..." msgid_plural "Redownloading up to %d %s maps..." msgstr[0] "" msgstr[1] "" #: ../src/vikmapslayer.c:1159 #, c-format msgid "Redownloading %d %s map..." msgid_plural "Redownloading %d %s maps..." msgstr[0] "" msgstr[1] "" #: ../src/vikmapslayer.c:1163 ../src/vikmapslayer.c:1238 #, c-format msgid "Downloading %d %s map..." msgid_plural "Downloading %d %s maps..." msgstr[0] "" msgstr[1] "" #: ../src/vikmapslayer.c:1311 #, c-format msgid "" "\n" "Source: %s\n" "\n" "Tile File: %s\n" "Tile File Timestamp: %s" msgstr "" #: ../src/vikmapslayer.c:1318 #, c-format msgid "" "Source: %s\n" "\n" "No Tile File!" msgstr "" #: ../src/vikmapslayer.c:1356 msgid "Redownload _Bad Map(s)" msgstr "" #: ../src/vikmapslayer.c:1360 msgid "Redownload _New Map(s)" msgstr "" #: ../src/vikmapslayer.c:1364 msgid "Redownload _All Map(s)" msgstr "" #: ../src/vikmapslayer.c:1368 msgid "_Show Tile Information" msgstr "" #: ../src/vikmapslayer.c:1449 #, c-format msgid "" "Wrong drawmode for this map.\n" "Select \"%s\" from View menu and try again." msgstr "" #: ../src/vikmapslayer.c:1454 msgid "Wrong zoom level for this map." msgstr "" #. Now with icons #: ../src/vikmapslayer.c:1485 msgid "Download _Missing Onscreen Maps" msgstr "" #: ../src/vikmapslayer.c:1492 msgid "Download _New Onscreen Maps" msgstr "" #: ../src/vikmapslayer.c:1499 msgid "Reload _All Onscreen Maps" msgstr "" #: ../src/viktreeview.c:263 msgid "Layer Name" msgstr "" #: ../src/viktreeview.c:742 #, c-format msgid "delete data from %s\n" msgstr "" #: ../src/viktrwlayer.c:377 msgid "Create _Waypoint" msgstr "" #: ../src/viktrwlayer.c:377 msgid "Create Waypoint" msgstr "" #: ../src/viktrwlayer.c:383 msgid "Create _Track" msgstr "" #: ../src/viktrwlayer.c:383 msgid "Create Track" msgstr "" #: ../src/viktrwlayer.c:392 msgid "Create _Route" msgstr "" #: ../src/viktrwlayer.c:392 msgid "Create Route" msgstr "" #: ../src/viktrwlayer.c:401 msgid "_Edit Waypoint" msgstr "" #: ../src/viktrwlayer.c:401 msgid "Edit Waypoint" msgstr "" #: ../src/viktrwlayer.c:409 msgid "Edit Trac_kpoint" msgstr "" #: ../src/viktrwlayer.c:409 msgid "Edit Trackpoint" msgstr "" #: ../src/viktrwlayer.c:417 msgid "Show P_icture" msgstr "" #: ../src/viktrwlayer.c:417 msgid "Show Picture" msgstr "" #: ../src/viktrwlayer.c:424 msgid "Route _Finder" msgstr "" #: ../src/viktrwlayer.c:424 msgid "Route Finder" msgstr "" #. ***** PARAMETERS ***** #: ../src/viktrwlayer.c:447 ../src/viktrwlayer.c:1942 #: ../src/viktrwlayer.c:1944 msgid "Waypoints" msgstr "" #: ../src/viktrwlayer.c:447 ../src/viktrwlayer.c:1933 #: ../src/viktrwlayer.c:1935 msgid "Tracks" msgstr "" #: ../src/viktrwlayer.c:447 msgid "Waypoint Images" msgstr "" #: ../src/viktrwlayer.c:450 msgid "Draw by Track" msgstr "" #: ../src/viktrwlayer.c:450 msgid "Draw by Speed" msgstr "" #: ../src/viktrwlayer.c:450 msgid "All Tracks Same Color" msgstr "" #: ../src/viktrwlayer.c:451 msgid "Filled Square" msgstr "" #: ../src/viktrwlayer.c:451 msgid "Square" msgstr "" #: ../src/viktrwlayer.c:451 msgid "Circle" msgstr "" #: ../src/viktrwlayer.c:451 msgid "X" msgstr "" #: ../src/viktrwlayer.c:477 msgid "Extra Extra Small" msgstr "" #: ../src/viktrwlayer.c:478 msgid "Extra Small" msgstr "" #: ../src/viktrwlayer.c:479 msgid "Small" msgstr "" #: ../src/viktrwlayer.c:480 msgid "Medium" msgstr "" #: ../src/viktrwlayer.c:481 msgid "Large" msgstr "" #: ../src/viktrwlayer.c:482 msgid "Extra Large" msgstr "" #: ../src/viktrwlayer.c:483 msgid "Extra Extra Large" msgstr "" #: ../src/viktrwlayer.c:491 msgid "Track Drawing Mode:" msgstr "" #: ../src/viktrwlayer.c:492 msgid "All Tracks Color:" msgstr "" #: ../src/viktrwlayer.c:493 msgid "The color used when 'All Tracks Same Color' drawing mode is selected" msgstr "" #: ../src/viktrwlayer.c:494 msgid "Draw Track Lines" msgstr "" #: ../src/viktrwlayer.c:495 msgid "Track Thickness:" msgstr "" #: ../src/viktrwlayer.c:496 msgid "Draw Track Direction" msgstr "" #: ../src/viktrwlayer.c:497 msgid "Direction Size:" msgstr "" #: ../src/viktrwlayer.c:498 msgid "Draw Trackpoints" msgstr "" #: ../src/viktrwlayer.c:499 msgid "Trackpoint Size:" msgstr "" #: ../src/viktrwlayer.c:500 msgid "Draw Elevation" msgstr "" #: ../src/viktrwlayer.c:501 msgid "Draw Elevation Height %:" msgstr "" #: ../src/viktrwlayer.c:503 msgid "Draw Stops" msgstr "" #: ../src/viktrwlayer.c:504 msgid "" "Whether to draw a marker when trackpoints are at the same position but over " "the minimum stop length apart in time" msgstr "" #: ../src/viktrwlayer.c:505 msgid "Min Stop Length (seconds):" msgstr "" #: ../src/viktrwlayer.c:507 msgid "Track BG Thickness:" msgstr "" #: ../src/viktrwlayer.c:508 msgid "Track Background Color" msgstr "" #: ../src/viktrwlayer.c:509 msgid "Draw by Speed Factor (%):" msgstr "" #: ../src/viktrwlayer.c:510 msgid "" "The percentage factor away from the average speed determining the color used" msgstr "" #: ../src/viktrwlayer.c:512 msgid "Draw Labels" msgstr "" #: ../src/viktrwlayer.c:513 msgid "Waypoint Font Size:" msgstr "" #: ../src/viktrwlayer.c:514 msgid "Waypoint Color:" msgstr "" #: ../src/viktrwlayer.c:515 msgid "Waypoint Text:" msgstr "" #: ../src/viktrwlayer.c:516 msgid "Background:" msgstr "" #: ../src/viktrwlayer.c:517 msgid "Fake BG Color Translucency:" msgstr "" #: ../src/viktrwlayer.c:518 msgid "Waypoint marker:" msgstr "" #: ../src/viktrwlayer.c:519 msgid "Waypoint size:" msgstr "" #: ../src/viktrwlayer.c:520 msgid "Draw Waypoint Symbols:" msgstr "" #: ../src/viktrwlayer.c:522 msgid "Draw Waypoint Images" msgstr "" #: ../src/viktrwlayer.c:523 msgid "Image Size (pixels):" msgstr "" #: ../src/viktrwlayer.c:524 msgid "Image Alpha:" msgstr "" #: ../src/viktrwlayer.c:525 msgid "Image Memory Cache Size:" msgstr "" #: ../src/viktrwlayer.c:610 msgid "TrackWaypoint" msgstr "" #: ../src/viktrwlayer.c:1951 ../src/viktrwlayer.c:1953 msgid "Routes" msgstr "" #: ../src/viktrwlayer.c:2144 #, c-format msgid " in %d:%02d hrs:mins" msgstr "" #: ../src/viktrwlayer.c:2148 #, c-format msgid "" "\n" "%sTotal Length %.1f %s%s" msgstr "" #: ../src/viktrwlayer.c:2154 #, c-format msgid "Tracks: %d - Waypoints: %d - Routes: %d%s" msgstr "" #: ../src/viktrwlayer.c:2174 #, c-format msgid "Tracks: %d" msgstr "" #: ../src/viktrwlayer.c:2184 #, c-format msgid "Routes: %d" msgstr "" #: ../src/viktrwlayer.c:2215 #, c-format msgid "- %d:%02d hrs:mins" msgstr "" #: ../src/viktrwlayer.c:2223 #, c-format msgid "%s%.1f km %s" msgstr "" #: ../src/viktrwlayer.c:2226 #, c-format msgid "%s%.1f miles %s" msgstr "" #: ../src/viktrwlayer.c:2240 #, c-format msgid "Waypoints: %d" msgstr "" #: ../src/viktrwlayer.c:2266 #, c-format msgid "Trkpt: Alt %dft" msgstr "" #. VIK_UNITS_HEIGHT_METRES: #: ../src/viktrwlayer.c:2270 #, c-format msgid "Trkpt: Alt %dm" msgstr "" #. Compact date time format #: ../src/viktrwlayer.c:2277 #, c-format msgid " | Time %x %X" msgstr "" #: ../src/viktrwlayer.c:2295 #, c-format msgid " | Track: %s" msgstr "" #. Combine parts to make overall message #: ../src/viktrwlayer.c:2299 #, c-format msgid "%s%s | %s %s %s" msgstr "" #: ../src/viktrwlayer.c:2314 #, c-format msgid "Wpt: Alt %dft" msgstr "" #. VIK_UNITS_HEIGHT_METRES: #: ../src/viktrwlayer.c:2318 #, c-format msgid "Wpt: Alt %dm" msgstr "" #. Add comment if available #: ../src/viktrwlayer.c:2333 #, c-format msgid "%s | %s %s | Comment: %s" msgstr "" #: ../src/viktrwlayer.c:2335 #, c-format msgid "%s | %s %s" msgstr "" #: ../src/viktrwlayer.c:2563 ../src/viktrwlayer.c:2634 msgid "This layer has no waypoints or trackpoints." msgstr "" #: ../src/viktrwlayer.c:2661 ../src/vikwindow.c:2407 ../src/vikwindow.c:2848 #, c-format msgid "The file \"%s\" exists, do you wish to overwrite it?" msgstr "" #: ../src/viktrwlayer.c:2671 ../src/vikwindow.c:2429 msgid "The filename you requested could not be opened for writing." msgstr "" #: ../src/viktrwlayer.c:2676 ../src/viktrwlayer.c:2681 #: ../src/viktrwlayer.c:2691 ../src/viktrwlayer.c:2703 msgid "Export Layer" msgstr "" #: ../src/viktrwlayer.c:2720 msgid "Could not create temporary file for export." msgstr "" #: ../src/viktrwlayer.c:2729 #, c-format msgid "Could not launch %s." msgstr "" #: ../src/viktrwlayer.c:2773 msgid "Export Track as GPX" msgstr "" #: ../src/viktrwlayer.c:2795 msgid "Find" msgstr "" #: ../src/viktrwlayer.c:2805 msgid "Waypoint Name:" msgstr "" #: ../src/viktrwlayer.c:2822 msgid "Waypoint not found in this layer." msgstr "" #: ../src/viktrwlayer.c:3090 msgid "Can not upload invisible track." msgstr "" #: ../src/viktrwlayer.c:3192 ../src/viktrwlayer.c:7785 msgid "Track" msgstr "" #: ../src/viktrwlayer.c:3215 ../src/viktrwlayer.c:7817 msgid "Route" msgstr "" #: ../src/viktrwlayer.c:3296 ../src/viktrwlayer.c:6265 #: ../src/viktrwlayer.c:6314 msgid "_Finish Route" msgstr "" #: ../src/viktrwlayer.c:3298 ../src/viktrwlayer.c:6223 #: ../src/viktrwlayer.c:6312 msgid "_Finish Track" msgstr "" #. Now with icons #: ../src/viktrwlayer.c:3310 msgid "_View Layer" msgstr "" #: ../src/viktrwlayer.c:3317 msgid "V_iew" msgstr "" #: ../src/viktrwlayer.c:3323 msgid "View All _Tracks" msgstr "" #: ../src/viktrwlayer.c:3328 msgid "View All _Routes" msgstr "" #: ../src/viktrwlayer.c:3333 msgid "View All _Waypoints" msgstr "" #: ../src/viktrwlayer.c:3338 msgid "_Goto Center of Layer" msgstr "" #: ../src/viktrwlayer.c:3344 ../src/viktrwlayer.c:6199 msgid "Goto _Waypoint..." msgstr "" #: ../src/viktrwlayer.c:3350 msgid "_Export Layer" msgstr "" #: ../src/viktrwlayer.c:3356 msgid "Export as GPS_Point..." msgstr "" #: ../src/viktrwlayer.c:3361 msgid "Export as GPS_Mapper..." msgstr "" #: ../src/viktrwlayer.c:3366 msgid "Export as _GPX..." msgstr "" #: ../src/viktrwlayer.c:3371 msgid "Export as _KML..." msgstr "" #: ../src/viktrwlayer.c:3376 msgid "Open with External Program_1: " msgstr "" #: ../src/viktrwlayer.c:3383 msgid "Open with External Program_2: " msgstr "" #: ../src/viktrwlayer.c:3391 ../src/vikwindow.c:3145 msgid "_New" msgstr "" #: ../src/viktrwlayer.c:3397 msgid "New _Waypoint..." msgstr "" #: ../src/viktrwlayer.c:3403 msgid "New _Track" msgstr "" #: ../src/viktrwlayer.c:3411 msgid "New _Route" msgstr "" #: ../src/viktrwlayer.c:3420 ../src/viktrwlayer.c:6597 msgid "Geotag _Images..." msgstr "" #: ../src/viktrwlayer.c:3427 msgid "_Acquire" msgstr "" #: ../src/viktrwlayer.c:3433 ../src/vikwindow.c:3150 msgid "From _GPS..." msgstr "" #: ../src/viktrwlayer.c:3439 msgid "From Google _Directions..." msgstr "" #: ../src/viktrwlayer.c:3446 msgid "From _OSM Traces..." msgstr "" #: ../src/viktrwlayer.c:3451 msgid "From _My OSM Traces..." msgstr "" #: ../src/viktrwlayer.c:3459 ../src/vikwindow.c:3166 msgid "From _Wikipedia Waypoints" msgstr "" #: ../src/viktrwlayer.c:3465 msgid "Within _Layer Bounds" msgstr "" #: ../src/viktrwlayer.c:3471 msgid "Within _Current View" msgstr "" #: ../src/viktrwlayer.c:3479 msgid "From Geo_caching..." msgstr "" #: ../src/viktrwlayer.c:3486 ../src/vikwindow.c:3163 msgid "From Geotagged _Images..." msgstr "" #: ../src/viktrwlayer.c:3492 msgid "From _File..." msgstr "" #: ../src/viktrwlayer.c:3498 ../src/viktrwlayer.c:6542 msgid "_Upload" msgstr "" #: ../src/viktrwlayer.c:3504 msgid "Upload to _GPS..." msgstr "" #: ../src/viktrwlayer.c:3511 ../src/viktrwlayer.c:6570 msgid "Upload to _OSM..." msgstr "" #: ../src/viktrwlayer.c:3519 msgid "De_lete" msgstr "" #: ../src/viktrwlayer.c:3525 msgid "Delete All _Tracks" msgstr "" #: ../src/viktrwlayer.c:3531 msgid "Delete Tracks _From Selection..." msgstr "" #: ../src/viktrwlayer.c:3537 ../src/viktrwlayer.c:6290 msgid "Delete _All Routes" msgstr "" #: ../src/viktrwlayer.c:3543 ../src/viktrwlayer.c:6296 msgid "_Delete Routes From Selection..." msgstr "" #: ../src/viktrwlayer.c:3549 msgid "Delete All _Waypoints" msgstr "" #: ../src/viktrwlayer.c:3555 msgid "Delete Waypoints From _Selection..." msgstr "" #: ../src/viktrwlayer.c:4128 #, c-format msgid "Are you sure you want to delete all tracks in %s?" msgstr "" #: ../src/viktrwlayer.c:4138 #, c-format msgid "Are you sure you want to delete all routes in %s?" msgstr "" #: ../src/viktrwlayer.c:4148 #, c-format msgid "Are you sure you want to delete all waypoints in %s?" msgstr "" #: ../src/viktrwlayer.c:4165 #, c-format msgid "Are you sure you want to delete the waypoint \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4178 #, c-format msgid "Are you sure you want to delete the track \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4191 #, c-format msgid "Are you sure you want to delete the route \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4351 ../src/viktrwlayer.c:4922 msgid "" "Converting a track to a route removes extra track data such as segments, " "timestamps, etc...\n" "Do you want to continue?" msgstr "" #: ../src/viktrwlayer.c:4711 msgid "Failed. No other tracks with timestamps in this layer found" msgstr "" #: ../src/viktrwlayer.c:4713 msgid "Failed. No other tracks without timestamps in this layer found" msgstr "" #: ../src/viktrwlayer.c:4732 msgid "Merge with..." msgstr "" #: ../src/viktrwlayer.c:4733 msgid "Select route to merge with" msgstr "" #: ../src/viktrwlayer.c:4733 msgid "Select track to merge with" msgstr "" #: ../src/viktrwlayer.c:4818 ../src/viktrwlayer.c:4895 msgid "Append Route" msgstr "" #: ../src/viktrwlayer.c:4818 ../src/viktrwlayer.c:4895 msgid "Append Track" msgstr "" #: ../src/viktrwlayer.c:4819 msgid "Select the route to append after the current route" msgstr "" #: ../src/viktrwlayer.c:4820 msgid "Select the track to append after the current track" msgstr "" #: ../src/viktrwlayer.c:4896 msgid "Select the track to append after the current route" msgstr "" #: ../src/viktrwlayer.c:4897 msgid "Select the route to append after the current track" msgstr "" #: ../src/viktrwlayer.c:4957 #, c-format msgid "%d segment merged" msgid_plural "%d segments merged" msgstr[0] "" msgstr[1] "" #: ../src/viktrwlayer.c:4973 msgid "Failed. This track does not have timestamp" msgstr "" #: ../src/viktrwlayer.c:4985 msgid "Failed. No other track in this layer has timestamp" msgstr "" #: ../src/viktrwlayer.c:4992 msgid "Merge Threshold..." msgstr "" #: ../src/viktrwlayer.c:4993 msgid "Merge when time between tracks less than:" msgstr "" #: ../src/viktrwlayer.c:5128 msgid "Split Threshold..." msgstr "" #: ../src/viktrwlayer.c:5129 msgid "Split when time between trackpoints exceeds:" msgstr "" #: ../src/viktrwlayer.c:5205 msgid "Split Every Nth Point" msgstr "" #: ../src/viktrwlayer.c:5206 msgid "Split on every Nth point:" msgstr "" #: ../src/viktrwlayer.c:5312 msgid "Can not split track as it has no segments" msgstr "" #: ../src/viktrwlayer.c:5340 ../src/viktrwlayer.c:5370 #, c-format msgid "Deleted %ld point" msgid_plural "Deleted %ld points" msgstr[0] "" msgstr[1] "" #: ../src/viktrwlayer.c:5531 msgid "Internal Error in vik_trw_layer_uniquify_tracks" msgstr "" #: ../src/viktrwlayer.c:5588 ../src/viktrwlayer.c:5635 #: ../src/viktrwlayer.c:5814 msgid "" "Multiple entries with the same name exist. This method only works with " "unique names. Force unique names now?" msgstr "" #: ../src/viktrwlayer.c:5599 msgid "No tracks found" msgstr "" #: ../src/viktrwlayer.c:5607 ../src/viktrwlayer.c:5654 #: ../src/viktrwlayer.c:5834 msgid "Delete Selection" msgstr "" #: ../src/viktrwlayer.c:5608 msgid "Select tracks to delete" msgstr "" #: ../src/viktrwlayer.c:5646 msgid "No routes found" msgstr "" #: ../src/viktrwlayer.c:5655 msgid "Select routes to delete" msgstr "" #: ../src/viktrwlayer.c:5761 msgid "Internal Error in vik_trw_layer_uniquify_waypoints" msgstr "" #: ../src/viktrwlayer.c:5824 msgid "No waypoints found" msgstr "" #: ../src/viktrwlayer.c:5835 msgid "Select waypoints to delete" msgstr "" #: ../src/viktrwlayer.c:5896 #, c-format msgid "" "A waypoint with the name \"%s\" already exists. Really rename to the same " "name?" msgstr "" #: ../src/viktrwlayer.c:5926 #, c-format msgid "" "A track with the name \"%s\" already exists. Really rename to the same name?" msgstr "" #: ../src/viktrwlayer.c:5963 #, c-format msgid "" "A route with the name \"%s\" already exists. Really rename to the same name?" msgstr "" #: ../src/viktrwlayer.c:6085 ../src/viktrwlayer.c:6337 msgid "_Goto" msgstr "" #: ../src/viktrwlayer.c:6104 msgid "_Visit Geocache Webpage" msgstr "" #: ../src/viktrwlayer.c:6123 msgid "_Show Picture..." msgstr "" #: ../src/viktrwlayer.c:6131 msgid "Update Geotag on _Image" msgstr "" #: ../src/viktrwlayer.c:6137 msgid "_Update" msgstr "" #: ../src/viktrwlayer.c:6142 msgid "Update and _Keep File Timestamp" msgstr "" #: ../src/viktrwlayer.c:6153 msgid "Visit _Webpage" msgstr "" #: ../src/viktrwlayer.c:6184 msgid "_New Waypoint..." msgstr "" #: ../src/viktrwlayer.c:6193 msgid "_View All Waypoints" msgstr "" #: ../src/viktrwlayer.c:6205 msgid "Delete _All Waypoints" msgstr "" #: ../src/viktrwlayer.c:6211 msgid "_Delete Waypoints From Selection..." msgstr "" #: ../src/viktrwlayer.c:6233 msgid "_View All Tracks" msgstr "" #: ../src/viktrwlayer.c:6239 msgid "_New Track" msgstr "" #: ../src/viktrwlayer.c:6247 msgid "Delete _All Tracks" msgstr "" #: ../src/viktrwlayer.c:6253 msgid "_Delete Tracks From Selection..." msgstr "" #: ../src/viktrwlayer.c:6276 msgid "_View All Routes" msgstr "" #: ../src/viktrwlayer.c:6282 msgid "_New Route" msgstr "" #: ../src/viktrwlayer.c:6327 msgid "_View Track" msgstr "" #: ../src/viktrwlayer.c:6329 msgid "_View Route" msgstr "" #: ../src/viktrwlayer.c:6343 msgid "_Startpoint" msgstr "" #: ../src/viktrwlayer.c:6349 msgid "\"_Center\"" msgstr "" #: ../src/viktrwlayer.c:6355 msgid "_Endpoint" msgstr "" #: ../src/viktrwlayer.c:6361 msgid "_Highest Altitude" msgstr "" #: ../src/viktrwlayer.c:6367 msgid "_Lowest Altitude" msgstr "" #: ../src/viktrwlayer.c:6375 msgid "_Maximum Speed" msgstr "" #: ../src/viktrwlayer.c:6384 msgid "Co_mbine" msgstr "" #: ../src/viktrwlayer.c:6392 msgid "_Merge By Time..." msgstr "" #: ../src/viktrwlayer.c:6397 msgid "Merge _Segments" msgstr "" #: ../src/viktrwlayer.c:6403 msgid "Merge _With Other Tracks..." msgstr "" #: ../src/viktrwlayer.c:6409 msgid "_Append Track..." msgstr "" #: ../src/viktrwlayer.c:6411 msgid "_Append Route..." msgstr "" #: ../src/viktrwlayer.c:6417 msgid "Append _Route..." msgstr "" #: ../src/viktrwlayer.c:6419 msgid "Append _Track..." msgstr "" #: ../src/viktrwlayer.c:6426 msgid "_Split" msgstr "" #: ../src/viktrwlayer.c:6434 msgid "_Split By Time..." msgstr "" #. ATM always enable this entry - don't want to have to analyse the track before displaying the menu - to keep the menu speedy #: ../src/viktrwlayer.c:6440 msgid "Split Se_gments" msgstr "" #: ../src/viktrwlayer.c:6446 msgid "Split By _Number of Points..." msgstr "" #: ../src/viktrwlayer.c:6451 msgid "Split at _Trackpoint" msgstr "" #: ../src/viktrwlayer.c:6460 msgid "Delete Poi_nts" msgstr "" #: ../src/viktrwlayer.c:6466 msgid "Delete Points With The Same _Position" msgstr "" #: ../src/viktrwlayer.c:6471 msgid "Delete Points With The Same _Time" msgstr "" #: ../src/viktrwlayer.c:6477 msgid "_Reverse Track" msgstr "" #: ../src/viktrwlayer.c:6479 msgid "_Reverse Route" msgstr "" #: ../src/viktrwlayer.c:6488 msgid "Down_load Maps Along Track..." msgstr "" #: ../src/viktrwlayer.c:6490 msgid "Down_load Maps Along Route..." msgstr "" #: ../src/viktrwlayer.c:6497 msgid "_Apply DEM Data" msgstr "" #: ../src/viktrwlayer.c:6504 msgid "_Export Track as GPX..." msgstr "" #: ../src/viktrwlayer.c:6506 msgid "_Export Route as GPX..." msgstr "" #: ../src/viktrwlayer.c:6513 msgid "E_xtend Track End" msgstr "" #: ../src/viktrwlayer.c:6515 msgid "E_xtend Route End" msgstr "" #: ../src/viktrwlayer.c:6522 msgid "C_onvert to a Route" msgstr "" #: ../src/viktrwlayer.c:6524 msgid "C_onvert to a Track" msgstr "" #: ../src/viktrwlayer.c:6532 msgid "Extend _Using Route Finder" msgstr "" #: ../src/viktrwlayer.c:6548 msgid "_Upload to GPS..." msgstr "" #: ../src/viktrwlayer.c:6559 msgid "_View Google Directions" msgstr "" #: ../src/viktrwlayer.c:6579 msgid "Use with _Filter" msgstr "" #: ../src/viktrwlayer.c:6612 msgid "_Edit Trackpoint" msgstr "" #: ../src/viktrwlayer.c:7524 #, c-format msgid " - Gain %dm:Loss %dm" msgstr "" #: ../src/viktrwlayer.c:7526 #, c-format msgid " - Gain %dft:Loss %dft" msgstr "" #: ../src/viktrwlayer.c:7531 #, c-format msgid " - Bearing %3.1f° - Step %s" msgstr "" #: ../src/viktrwlayer.c:8124 #, c-format msgid "Could not launch %s to open file." msgstr "" #: ../src/viktrwlayer.c:8205 #, c-format msgid "Creating %d Image Thumbnails..." msgstr "" #: ../src/viktrwlayer.c:8524 msgid "No map layer in use. Create one first" msgstr "" #: ../src/viktrwlayer_propwin.c:898 ../src/viktrwlayer_propwin.c:1155 #, c-format msgid "%.1f kph" msgstr "" #: ../src/viktrwlayer_propwin.c:901 ../src/viktrwlayer_propwin.c:1158 #, c-format msgid "%.1f mph" msgstr "" #: ../src/viktrwlayer_propwin.c:904 ../src/viktrwlayer_propwin.c:1161 #, c-format msgid "%.1f knots" msgstr "" #. VIK_UNITS_SPEED_METRES_PER_SECOND: #: ../src/viktrwlayer_propwin.c:908 ../src/viktrwlayer_propwin.c:1165 #, c-format msgid "%.1f m/s" msgstr "" #: ../src/viktrwlayer_propwin.c:1745 #, c-format msgid "%.1f miles" msgstr "" #: ../src/viktrwlayer_propwin.c:1747 #, c-format msgid "%.1f km" msgstr "" #: ../src/viktrwlayer_propwin.c:2681 msgid "Failed spliting track. Track unchanged" msgstr "" #: ../src/viktrwlayer_propwin.c:2779 ../src/viktrwlayer_propwin.c:3178 #, c-format msgid "%s - Track Properties" msgstr "" #: ../src/viktrwlayer_propwin.c:2784 msgid "Split at _Marker" msgstr "" #: ../src/viktrwlayer_propwin.c:2785 msgid "Split _Segments" msgstr "" #: ../src/viktrwlayer_propwin.c:2786 msgid "_Reverse" msgstr "" #: ../src/viktrwlayer_propwin.c:2787 msgid "_Delete Dupl." msgstr "" #: ../src/viktrwlayer_propwin.c:2813 msgid "Comment:" msgstr "" #: ../src/viktrwlayer_propwin.c:2814 msgid "Description:" msgstr "" #: ../src/viktrwlayer_propwin.c:2815 msgid "Track Length:" msgstr "" #: ../src/viktrwlayer_propwin.c:2816 msgid "Trackpoints:" msgstr "" #: ../src/viktrwlayer_propwin.c:2817 msgid "Segments:" msgstr "" #: ../src/viktrwlayer_propwin.c:2818 msgid "Duplicate Points:" msgstr "" #: ../src/viktrwlayer_propwin.c:2819 msgid "Max Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:2820 msgid "Avg. Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:2821 msgid "Moving Avg. Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:2822 msgid "Avg. Dist. Between TPs:" msgstr "" #: ../src/viktrwlayer_propwin.c:2823 msgid "Elevation Range:" msgstr "" #: ../src/viktrwlayer_propwin.c:2824 msgid "Total Elevation Gain/Loss:" msgstr "" #: ../src/viktrwlayer_propwin.c:2825 msgid "Start:" msgstr "" #: ../src/viktrwlayer_propwin.c:2826 msgid "End:" msgstr "" #: ../src/viktrwlayer_propwin.c:2827 msgid "Duration:" msgstr "" #: ../src/viktrwlayer_propwin.c:2828 msgid "Color:" msgstr "" #: ../src/viktrwlayer_propwin.c:2877 ../src/viktrwlayer_propwin.c:2901 #: ../src/viktrwlayer_propwin.c:2929 ../src/viktrwlayer_propwin.c:2966 #: ../src/viktrwlayer_propwin.c:2984 ../src/viktrwlayer_propwin.c:3034 #: ../src/viktrwlayer_propwin.c:3035 ../src/viktrwlayer_propwin.c:3036 #: ../src/viktrwlayer_propwin.c:3062 ../src/viktrwlayer_propwin.c:3063 #: ../src/viktrwlayer_propwin.c:3078 ../src/viktrwlayer_propwin.c:3079 #: ../src/viktrwlayer_propwin.c:3092 ../src/viktrwlayer_propwin.c:3093 #: ../src/viktrwlayer_propwin.c:3106 ../src/viktrwlayer_propwin.c:3107 #: ../src/viktrwlayer_propwin.c:3120 ../src/viktrwlayer_propwin.c:3121 #: ../src/viktrwlayer_propwin.c:3134 ../src/viktrwlayer_propwin.c:3135 #, c-format msgid "No Data" msgstr "" #: ../src/viktrwlayer_propwin.c:3031 #, c-format msgid "%d minutes" msgstr "" #: ../src/viktrwlayer_propwin.c:3058 msgid "Statistics" msgstr "" #: ../src/viktrwlayer_propwin.c:3064 msgid "Show D_EM" msgstr "" #: ../src/viktrwlayer_propwin.c:3065 ../src/viktrwlayer_propwin.c:3080 #: ../src/viktrwlayer_propwin.c:3094 ../src/viktrwlayer_propwin.c:3136 msgid "Show _GPS Speed" msgstr "" #: ../src/viktrwlayer_propwin.c:3067 ../src/viktrwlayer_propwin.c:3082 #: ../src/viktrwlayer_propwin.c:3110 ../src/viktrwlayer_propwin.c:3138 msgid "Track Distance:" msgstr "" #: ../src/viktrwlayer_propwin.c:3068 ../src/viktrwlayer_propwin.c:3125 msgid "Track Height:" msgstr "" #: ../src/viktrwlayer_propwin.c:3073 msgid "Elevation-distance" msgstr "" #: ../src/viktrwlayer_propwin.c:3083 msgid "Track Gradient:" msgstr "" #: ../src/viktrwlayer_propwin.c:3087 msgid "Gradient-distance" msgstr "" #: ../src/viktrwlayer_propwin.c:3096 ../src/viktrwlayer_propwin.c:3111 #: ../src/viktrwlayer_propwin.c:3124 msgid "Track Time:" msgstr "" #: ../src/viktrwlayer_propwin.c:3097 ../src/viktrwlayer_propwin.c:3139 msgid "Track Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:3101 msgid "Speed-time" msgstr "" #: ../src/viktrwlayer_propwin.c:3108 ../src/viktrwlayer_propwin.c:3122 msgid "Show S_peed" msgstr "" #: ../src/viktrwlayer_propwin.c:3115 msgid "Distance-time" msgstr "" #: ../src/viktrwlayer_propwin.c:3129 msgid "Elevation-time" msgstr "" #: ../src/viktrwlayer_propwin.c:3143 msgid "Speed-distance" msgstr "" #: ../src/viktrwlayer_tpwin.c:118 msgid "Part of Track:" msgstr "" #: ../src/viktrwlayer_tpwin.c:119 msgid "Latitude:" msgstr "" #: ../src/viktrwlayer_tpwin.c:120 msgid "Longitude:" msgstr "" #: ../src/viktrwlayer_tpwin.c:121 msgid "Altitude:" msgstr "" #: ../src/viktrwlayer_tpwin.c:122 msgid "Timestamp:" msgstr "" #: ../src/viktrwlayer_tpwin.c:123 msgid "Time:" msgstr "" #: ../src/viktrwlayer_tpwin.c:124 msgid "Distance Difference:" msgstr "" #: ../src/viktrwlayer_tpwin.c:125 msgid "Time Difference:" msgstr "" #: ../src/viktrwlayer_tpwin.c:126 msgid "\"Speed\" Between:" msgstr "" #: ../src/viktrwlayer_tpwin.c:127 msgid "VDOP:" msgstr "" #: ../src/viktrwlayer_tpwin.c:128 msgid "HDOP:" msgstr "" #: ../src/viktrwlayer_tpwin.c:129 msgid "PDOP:" msgstr "" #: ../src/viktrwlayer_tpwin.c:130 msgid "SAT/FIX:" msgstr "" #: ../src/viktrwlayer_tpwin.c:139 msgid "Trackpoint" msgstr "" #: ../src/viktrwlayer_tpwin.c:142 msgid "_Insert After" msgstr "" #: ../src/viktrwlayer_tpwin.c:144 msgid "Split Here" msgstr "" #: ../src/viktrwlayer_geotag.c:446 #, c-format msgid "Geotagging %d Images..." msgstr "" #: ../src/viktrwlayer_geotag.c:510 msgid "Geotag Images" msgstr "" #: ../src/viktrwlayer_geotag.c:516 msgid "Images" msgstr "" #: ../src/viktrwlayer_geotag.c:520 msgid "Overwrite Existing Waypoints:" msgstr "" #: ../src/viktrwlayer_geotag.c:523 msgid "Overwrite Existing GPS Information:" msgstr "" #: ../src/viktrwlayer_geotag.c:525 msgid "Keep File Modification Timestamp:" msgstr "" #: ../src/viktrwlayer_geotag.c:555 msgid "Create Waypoints:" msgstr "" #: ../src/viktrwlayer_geotag.c:563 msgid "Write EXIF:" msgstr "" #: ../src/viktrwlayer_geotag.c:575 msgid "Interpolate Between Track Segments:" msgstr "" #: ../src/viktrwlayer_geotag.c:579 msgid "Image Time Offset (Seconds):" msgstr "" #: ../src/viktrwlayer_geotag.c:581 msgid "" "The number of seconds to ADD to the photos time to make it match the GPS " "data. Calculate this with (GPS - Photo). Can be negative or positive. Useful " "to adjust times when a camera's timestamp was incorrect." msgstr "" #: ../src/viktrwlayer_geotag.c:584 msgid "Image Timezone:" msgstr "" #: ../src/viktrwlayer_geotag.c:586 msgid "" "The timezone that was used when the images were created. For example, if a " "camera is set to AWST or +8:00 hours. Enter +8:00 here so that the correct " "adjustment to the images' time can be made. GPS data is always in UTC." msgstr "" #: ../src/viktrwlayer_geotag.c:590 #, c-format msgid "Using track: %s" msgstr "" #: ../src/viktrwlayer_geotag.c:592 #, c-format msgid "Using all tracks in: %s" msgstr "" #: ../src/vikstatus.c:105 msgid "Current zoom level. Click to select a new one." msgstr "" #: ../src/vikwaypoint.c:34 msgid "Waypoint" msgstr "" #. TODO get rid of this as this is unnecessary duplication... #: ../src/vikwindow.c:221 msgid "Pan" msgstr "" #: ../src/vikwindow.c:221 msgid "Zoom" msgstr "" #: ../src/vikwindow.c:221 msgid "Ruler" msgstr "" #: ../src/vikwindow.c:221 msgid "Select" msgstr "" #. Create tooltip #: ../src/vikwindow.c:440 msgid "Select zoom level" msgstr "" #: ../src/vikwindow.c:645 #, c-format msgid "" "Do you want to save the changes you made to the document \"%s\"?\n" "\n" "Your changes will be lost if you don't save them." msgstr "" #: ../src/vikwindow.c:649 msgid "Don't Save" msgstr "" #: ../src/vikwindow.c:696 msgid "mpp" msgstr "" #: ../src/vikwindow.c:696 msgid "pixelfact" msgstr "" #: ../src/vikwindow.c:861 #, c-format msgid "%s %s %dm" msgstr "" #: ../src/vikwindow.c:863 #, c-format msgid "%s %s %dft" msgstr "" #: ../src/vikwindow.c:866 #, c-format msgid "%s %s" msgstr "" #. NB Ctrl+Shift+R is used for Refresh (deemed more important), so use 'U' instead #: ../src/vikwindow.c:1254 msgid "_Ruler" msgstr "" #: ../src/vikwindow.c:1254 msgid "Ruler Tool" msgstr "" #: ../src/vikwindow.c:1502 ../src/vikwindow.c:3138 msgid "_Zoom" msgstr "" #: ../src/vikwindow.c:1502 msgid "Zoom Tool" msgstr "" #: ../src/vikwindow.c:1547 ../src/vikwindow.c:3139 msgid "_Pan" msgstr "" #: ../src/vikwindow.c:1547 msgid "Pan Tool" msgstr "" #: ../src/vikwindow.c:1664 msgid "_Select" msgstr "" #: ../src/vikwindow.c:1664 msgid "Select Tool" msgstr "" #: ../src/vikwindow.c:1809 msgid "You must select a layer to show its properties." msgstr "" #. No error to show, so unlikely this will get called #: ../src/vikwindow.c:1824 msgid "The help system is not available." msgstr "" #. Main error path #: ../src/vikwindow.c:1827 #, c-format msgid "" "Help is not available because: %s.\n" "Ensure a Mime Type ghelp handler program is installed (e.g. yelp)." msgstr "" #: ../src/vikwindow.c:1850 msgid "You must select a layer to delete." msgstr "" #: ../src/vikwindow.c:2087 msgid "Untitled" msgstr "" #: ../src/vikwindow.c:2194 #, c-format msgid "Unable to add '%s' to the list of recently used documents" msgstr "" #: ../src/vikwindow.c:2208 msgid "The file you requested could not be opened." msgstr "" #: ../src/vikwindow.c:2211 msgid "" "GPSBabel is required to load files of this type or GPSBabel encountered " "problems." msgstr "" #: ../src/vikwindow.c:2214 #, c-format msgid "Unable to load malformed GPX file %s" msgstr "" #: ../src/vikwindow.c:2217 #, c-format msgid "Unsupported file type for %s" msgstr "" #. Since we can process .vik files with issues just show a warning in the status bar #. Not that a user can do much about it... or tells them what this issue is yet... #: ../src/vikwindow.c:2223 #, c-format msgid "WARNING: issues encountered loading %s" msgstr "" #: ../src/vikwindow.c:2278 msgid "Please select a GPS data file to open. " msgstr "" #: ../src/vikwindow.c:2288 msgid "Geocaching" msgstr "" #: ../src/vikwindow.c:2294 msgid "Google Earth" msgstr "" #: ../src/vikwindow.c:2299 msgid "GPX" msgstr "" #: ../src/vikwindow.c:2304 ../src/vikwindow.c:2387 #: ../src/viking.desktop.in.h:1 msgid "Viking" msgstr "" #: ../src/vikwindow.c:2374 msgid "Save as Viking File." msgstr "" #. Try harder... #: ../src/vikwindow.c:2619 ../src/vikwindow.c:2625 msgid "Generating image file..." msgstr "" #: ../src/vikwindow.c:2647 msgid "" "Failed to generate internal image.\n" "\n" "Try creating a smaller image." msgstr "" #: ../src/vikwindow.c:2655 msgid "Failed to generate image file." msgstr "" #. Success #: ../src/vikwindow.c:2660 msgid "Image file generated." msgstr "" #: ../src/vikwindow.c:2764 msgid "" "Viewable region outside allowable pixel size bounds for image. Clipping " "width/height values." msgstr "" #: ../src/vikwindow.c:2789 #, c-format msgid "Total area: %ldm x %ldm (%.3f sq. km)" msgstr "" #: ../src/vikwindow.c:2792 #, c-format msgid "Total area: %ldm x %ldm (%.3f sq. miles)" msgstr "" #: ../src/vikwindow.c:2813 msgid "Save Image" msgstr "" #: ../src/vikwindow.c:2834 msgid "PNG" msgstr "" #: ../src/vikwindow.c:2857 msgid "You must be in UTM mode to use this feature" msgstr "" #: ../src/vikwindow.c:2862 msgid "Choose a directory to hold images" msgstr "" #. todo: default for answers inside VikWindow or static (thruout instance) #: ../src/vikwindow.c:2883 msgid "Save to Image File" msgstr "" #: ../src/vikwindow.c:2900 msgid "Width (pixels):" msgstr "" #: ../src/vikwindow.c:2902 msgid "Height (pixels):" msgstr "" #: ../src/vikwindow.c:2905 msgid "" "WARNING: USING LARGE IMAGES OVER 10000x10000\n" "MAY CRASH THE PROGRAM!" msgstr "" #: ../src/vikwindow.c:2907 msgid "Zoom (meters per pixel):" msgstr "" #: ../src/vikwindow.c:2921 msgid "Area in current viewable window" msgstr "" #: ../src/vikwindow.c:2931 msgid "Save as PNG" msgstr "" #: ../src/vikwindow.c:2932 msgid "Save as JPEG" msgstr "" #: ../src/vikwindow.c:2954 msgid "East-west image tiles:" msgstr "" #: ../src/vikwindow.c:2956 msgid "North-south image tiles:" msgstr "" #: ../src/vikwindow.c:3097 msgid "Choose a background color" msgstr "" #: ../src/vikwindow.c:3113 msgid "Choose a track highlight color" msgstr "" #: ../src/vikwindow.c:3134 msgid "_File" msgstr "" #: ../src/vikwindow.c:3135 msgid "_Edit" msgstr "" #: ../src/vikwindow.c:3136 msgid "_View" msgstr "" #: ../src/vikwindow.c:3137 msgid "_Show" msgstr "" #: ../src/vikwindow.c:3140 msgid "_Layers" msgstr "" #: ../src/vikwindow.c:3141 msgid "_Tools" msgstr "" #: ../src/vikwindow.c:3142 msgid "_Webtools" msgstr "" #: ../src/vikwindow.c:3143 ../src/vikwindow.c:3206 msgid "_Help" msgstr "" #: ../src/vikwindow.c:3145 msgid "New file" msgstr "" #: ../src/vikwindow.c:3146 msgid "_Open..." msgstr "" #: ../src/vikwindow.c:3146 msgid "Open a file" msgstr "" #: ../src/vikwindow.c:3147 msgid "Open _Recent File" msgstr "" #: ../src/vikwindow.c:3148 msgid "Append _File..." msgstr "" #: ../src/vikwindow.c:3148 msgid "Append data from a different file" msgstr "" #: ../src/vikwindow.c:3149 msgid "A_cquire" msgstr "" #: ../src/vikwindow.c:3150 msgid "Transfer data from a GPS device" msgstr "" #: ../src/vikwindow.c:3151 msgid "Import File With GPS_Babel..." msgstr "" #: ../src/vikwindow.c:3151 msgid "Import file via GPSBabel converter" msgstr "" #: ../src/vikwindow.c:3153 msgid "Google _Directions..." msgstr "" #: ../src/vikwindow.c:3153 msgid "Get driving directions from Google" msgstr "" #: ../src/vikwindow.c:3156 msgid "_OSM Traces..." msgstr "" #: ../src/vikwindow.c:3156 msgid "Get traces from OpenStreetMap" msgstr "" #: ../src/vikwindow.c:3157 msgid "_My OSM Traces..." msgstr "" #: ../src/vikwindow.c:3157 msgid "Get Your Own Traces from OpenStreetMap" msgstr "" #: ../src/vikwindow.c:3160 msgid "Geo_caches..." msgstr "" #: ../src/vikwindow.c:3160 msgid "Get Geocaches from geocaching.com" msgstr "" #: ../src/vikwindow.c:3163 msgid "Create waypoints from geotagged images" msgstr "" #: ../src/vikwindow.c:3166 msgid "Create waypoints from Wikipedia items in the current view" msgstr "" #: ../src/vikwindow.c:3168 msgid "_Save" msgstr "" #: ../src/vikwindow.c:3168 msgid "Save the file" msgstr "" #: ../src/vikwindow.c:3169 msgid "Save _As..." msgstr "" #: ../src/vikwindow.c:3169 msgid "Save the file under different name" msgstr "" #: ../src/vikwindow.c:3170 msgid "_Generate Image File..." msgstr "" #: ../src/vikwindow.c:3170 msgid "Save a snapshot of the workspace into a file" msgstr "" #: ../src/vikwindow.c:3171 msgid "Generate _Directory of Images..." msgstr "" #: ../src/vikwindow.c:3171 msgid "FIXME:IMGDIR" msgstr "" #: ../src/vikwindow.c:3174 msgid "_Print..." msgstr "" #: ../src/vikwindow.c:3174 msgid "Print maps" msgstr "" #: ../src/vikwindow.c:3177 msgid "E_xit" msgstr "" #: ../src/vikwindow.c:3177 msgid "Exit the program" msgstr "" #: ../src/vikwindow.c:3178 msgid "Save and Exit" msgstr "" #: ../src/vikwindow.c:3178 msgid "Save and Exit the program" msgstr "" #: ../src/vikwindow.c:3180 msgid "Go to the _Default Location" msgstr "" #: ../src/vikwindow.c:3180 msgid "Go to the default location" msgstr "" #: ../src/vikwindow.c:3181 msgid "Go to _Location..." msgstr "" #: ../src/vikwindow.c:3181 msgid "Go to address/place using text search" msgstr "" #: ../src/vikwindow.c:3182 msgid "_Go to Lat/Lon..." msgstr "" #: ../src/vikwindow.c:3182 msgid "Go to arbitrary lat/lon coordinate" msgstr "" #: ../src/vikwindow.c:3183 msgid "Go to UTM..." msgstr "" #: ../src/vikwindow.c:3183 msgid "Go to arbitrary UTM coordinate" msgstr "" #: ../src/vikwindow.c:3184 msgid "_Refresh" msgstr "" #: ../src/vikwindow.c:3184 msgid "Refresh any maps displayed" msgstr "" #: ../src/vikwindow.c:3185 msgid "Set _Highlight Color..." msgstr "" #: ../src/vikwindow.c:3186 msgid "Set Bac_kground Color..." msgstr "" #: ../src/vikwindow.c:3187 msgid "Zoom _In" msgstr "" #: ../src/vikwindow.c:3188 msgid "Zoom _Out" msgstr "" #: ../src/vikwindow.c:3189 msgid "Zoom _To..." msgstr "" #: ../src/vikwindow.c:3190 msgid "Pan _North" msgstr "" #: ../src/vikwindow.c:3191 msgid "Pan _East" msgstr "" #: ../src/vikwindow.c:3192 msgid "Pan _South" msgstr "" #: ../src/vikwindow.c:3193 msgid "Pan _West" msgstr "" #: ../src/vikwindow.c:3194 msgid "Background _Jobs" msgstr "" #: ../src/vikwindow.c:3196 msgid "Cu_t" msgstr "" #: ../src/vikwindow.c:3197 msgid "_Copy" msgstr "" #: ../src/vikwindow.c:3198 msgid "_Paste" msgstr "" #: ../src/vikwindow.c:3199 msgid "_Delete" msgstr "" #: ../src/vikwindow.c:3200 msgid "Delete All" msgstr "" #: ../src/vikwindow.c:3201 msgid "_Flush Map Cache" msgstr "" #: ../src/vikwindow.c:3202 msgid "_Set the Default Location" msgstr "" #: ../src/vikwindow.c:3202 msgid "Set the Default Location to the current position" msgstr "" #: ../src/vikwindow.c:3203 msgid "_Preferences" msgstr "" #: ../src/vikwindow.c:3204 msgid "_Properties" msgstr "" #: ../src/vikwindow.c:3207 msgid "_About" msgstr "" #: ../src/vikwindow.c:3213 msgid "_UTM Mode" msgstr "" #: ../src/vikwindow.c:3214 msgid "_Expedia Mode" msgstr "" #: ../src/vikwindow.c:3215 msgid "_Mercator Mode" msgstr "" #: ../src/vikwindow.c:3216 msgid "Lat_/Lon Mode" msgstr "" #: ../src/vikwindow.c:3220 msgid "Show _Scale" msgstr "" #: ../src/vikwindow.c:3220 msgid "Show Scale" msgstr "" #: ../src/vikwindow.c:3221 msgid "Show _Center Mark" msgstr "" #: ../src/vikwindow.c:3221 msgid "Show Center Mark" msgstr "" #: ../src/vikwindow.c:3222 msgid "Show _Highlight" msgstr "" #: ../src/vikwindow.c:3222 msgid "Show Highlight" msgstr "" #: ../src/vikwindow.c:3223 msgid "_Full Screen" msgstr "" #: ../src/vikwindow.c:3223 msgid "Activate full screen mode" msgstr "" #: ../src/vikwindow.c:3224 msgid "Show Side _Panel" msgstr "" #: ../src/vikwindow.c:3224 msgid "Show Side Panel" msgstr "" #: ../src/vikwindow.c:3225 msgid "Show Status_bar" msgstr "" #: ../src/vikwindow.c:3225 msgid "Show Statusbar" msgstr "" #: ../src/vikwindow.c:3226 msgid "Show _Toolbar" msgstr "" #: ../src/vikwindow.c:3226 msgid "Show Toolbar" msgstr "" #: ../src/vikwindow.c:3227 msgid "Show _Menu" msgstr "" #: ../src/vikwindow.c:3227 msgid "Show Menu" msgstr "" #: ../src/viking.desktop.in.h:2 msgid "GPS Data Manager" msgstr "" #: ../src/viking.desktop.in.h:3 msgid "Map Based GPS Data Manager (live data capable)." msgstr "" #: ../src/libjpeg/jpeg-data.c:206 msgid "Data does not follow JPEG specification." msgstr "" #: ../src/libjpeg/jpeg-data.c:291 #, c-format msgid "Path '%s' invalid." msgstr "" #: ../src/libjpeg/jpeg-data.c:309 #, c-format msgid "Could not read '%s'." msgstr "" viking-1.4.2/po/it.po0000644000175000017500000026206112175546146011342 00000000000000# Italian translation for viking # Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008 # This file is distributed under the same license as the viking package. # FIRST AUTHOR , 2008. # msgid "" msgstr "" "Project-Id-Version: viking\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-02-04 23:29+0100\n" "PO-Revision-Date: 2012-11-07 01:17+0000\n" "Last-Translator: Wonderfulheart \n" "Language-Team: Italian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2013-03-23 17:12+0000\n" "X-Generator: Launchpad (build 16540)\n" #: ../src/acquire.c:103 ../src/vikgpslayer.c:1185 msgid "Done." msgstr "Fatto." #: ../src/acquire.c:114 msgid "No data." msgstr "Nessun dato." #: ../src/acquire.c:154 ../src/acquire.c:404 msgid "Error: acquisition failed." msgstr "Errore: acquisizione non riuscita." #: ../src/acquire.c:341 msgid "Working..." msgstr "In esecuzione..." #. This shouldn't happen... #: ../src/acquire.c:394 msgid "" "Unable to create command\n" "Acquire method failed." msgstr "" #: ../src/acquire.c:486 msgid "_Filter" msgstr "" #: ../src/acquire.c:501 #, c-format msgid "Filter with %s" msgstr "" #: ../src/acquire.c:518 msgid "Filter" msgstr "" #: ../src/background.c:52 #, c-format msgid "%d items" msgstr "%d elementi" #: ../src/background.c:248 msgid "Job" msgstr "Lavoro" #: ../src/background.c:252 msgid "Progress" msgstr "Avanzamento" #: ../src/background.c:268 msgid "Viking Background Jobs" msgstr "Processi in background di Viking" #: ../src/bing.c:47 msgid "Bing" msgstr "Bing" #. VIK_GTK_WINDOW_FROM_WIDGET(vp) #: ../src/bingmapsource.c:445 msgid "Bing attribution Loading" msgstr "Caricamento attributi di Bing" #: ../src/clipboard.c:95 msgid "paste failed" msgstr "Impossibile incollare" #: ../src/clipboard.c:105 msgid "wrong clipboard data size" msgstr "dimensione dei dati negli appunti sbagliata" #: ../src/clipboard.c:124 #, c-format msgid "" "The clipboard contains sublayer data for %s layers. You must select a layer " "of this type to paste the clipboard data." msgstr "" "La clipboard contiene dati di sottolivello per i livelli %s. Devi " "selezionare un livello di questo tipo per incollare i dati della clipboard." #: ../src/clipboard.c:236 msgid "" "In order to paste a waypoint, please select an appropriate layer to paste " "into." msgstr "" "Per incollare un waypoint, selezionare un livello appropriato in cui " "incollarlo." #: ../src/dialog.c:52 msgid "Go to Lat/Lon" msgstr "Vai a Lat/Lon" #: ../src/dialog.c:64 ../src/dialog.c:251 msgid "Latitude:" msgstr "Latitudine:" #: ../src/dialog.c:70 ../src/dialog.c:256 msgid "Longitude:" msgstr "Longitudine:" #: ../src/dialog.c:102 msgid "Go to UTM" msgstr "Vai a UTM" #: ../src/dialog.c:115 msgid "Northing:" msgstr "" "Copy text \t\r\n" "Northing:" #: ../src/dialog.c:121 msgid "Easting:" msgstr "Easting:" #: ../src/dialog.c:128 msgid "Zone:" msgstr "Zona:" #: ../src/dialog.c:131 msgid "Letter:" msgstr "Lettera:" #: ../src/dialog.c:199 msgid "Waypoint Properties" msgstr "Proprietà Waypoint" #: ../src/dialog.c:233 msgid "Name:" msgstr "Nome:" #: ../src/dialog.c:261 msgid "Altitude:" msgstr "Altitudine:" #: ../src/dialog.c:266 msgid "Comment:" msgstr "Commento:" #: ../src/dialog.c:274 ../src/osm-traces.c:437 msgid "Description:" msgstr "Descrizione:" #: ../src/dialog.c:277 msgid "Image:" msgstr "Immagine:" #: ../src/dialog.c:282 msgid "Symbol:" msgstr "Simbolo:" #: ../src/dialog.c:291 msgid "(none)" msgstr "(nessuno)" #. TODO: other checks (isalpha or whatever ) #: ../src/dialog.c:356 msgid "Please enter a name for the waypoint." msgstr "Inserire un nome per il waypoint." #: ../src/dialog.c:529 ../src/geonamessearch.c:243 #: ../src/datasource_osm_my_traces.c:507 msgid "Nothing was selected" msgstr "Niente di selezionato" #: ../src/dialog.c:537 msgid "Add Route" msgstr "" #: ../src/dialog.c:537 msgid "Add Track" msgstr "Aggiungi traccia" #: ../src/dialog.c:545 msgid "Route Name:" msgstr "" #: ../src/dialog.c:545 msgid "Track Name:" msgstr "Nome traccia:" #: ../src/dialog.c:565 msgid "Please enter a name for the track." msgstr "Inserire un nome per la traccia." #: ../src/dialog.c:623 msgid "Zoom Factors..." msgstr "Fattori di zoom..." #: ../src/dialog.c:637 msgid "Zoom factor (in meters per pixel):" msgstr "Fattore di ingrandimento (in merti per pixel):" #: ../src/dialog.c:638 msgid "X (easting): " msgstr "X (easting) " #: ../src/dialog.c:639 msgid "Y (northing): " msgstr "Y (northing): " #: ../src/dialog.c:644 msgid "X and Y zoom factors must be equal" msgstr "I fattori di zoom di X e Y devono essere uguali" #: ../src/dialog.c:699 msgid "1 min" msgstr "1 min" #: ../src/dialog.c:700 msgid "1 hour" msgstr "1 ora" #: ../src/dialog.c:701 msgid "1 day" msgstr "1 giorno" #: ../src/dialog.c:702 msgid "Custom (in minutes):" msgstr "Personalizzato (in minuti)" #: ../src/dialog.c:808 msgid "GPS Data and Topo Analyzer, Explorer, and Manager." msgstr "Gestione, esplorazione, analisi topografica e GPS." #: ../src/dialog.c:809 msgid "" "This program is free software; you can redistribute it and/or modify it " "under the terms of the GNU General Public License as published by the Free " "Software Foundation; either version 2 of the License, or (at your option) " "any later version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT " "ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or " "FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for " "more details.\n" "\n" "You should have received a copy of the GNU General Public License along with " "this program; if not, write to the Free Software Foundation, Inc., 59 Temple " "Place, Suite 330, Boston, MA 02111-1307, USA" msgstr "" "This program is free software; you can redistribute it and/or modify it " "under the terms of the GNU General Public License as published by the Free " "Software Foundation; either version 2 of the License, or (at your option) " "any later version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT " "ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or " "FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for " "more details.\n" "\n" "You should have received a copy of the GNU General Public License along with " "this program; if not, write to the Free Software Foundation, Inc., 59 Temple " "Place, Suite 330, Boston, MA 02111-1307, USA" #: ../src/dialog.c:837 msgid "Translation is coordinated on http://launchpad.net/viking" msgstr "Le traduzioni vengono coordinate su http://launchpad.net/viking" #: ../src/dialog.c:845 msgid "Download along track" msgstr "Scarica lungo il tracciato" #: ../src/dialog.c:851 msgid "Map type:" msgstr "Tipo di mappa:" #: ../src/dialog.c:856 msgid "Zoom level:" msgstr "Livello di ingrandimento:" #: ../src/dialog.c:896 #, c-format msgid "The map data is licensed: %s." msgstr "La mappa dei dati è protetta da licenza: %s." #: ../src/dialog.c:899 #, c-format msgid "" "The data provided by '%s' are licensed under the following license: " "%s.\n" "Please, read the license before continuing." msgstr "" "I dati forniti da \"%s\" hanno la seguente licenza: %s.\n" "Leggere la licenza prima di continuare." #: ../src/dialog.c:904 msgid "Open license" msgstr "Apri licenza" #: ../src/expedia.c:53 msgid "Expedia Street Maps" msgstr "Mappe stradali di Expedia" #: ../src/expedia.c:81 msgid "Invalid expedia altitude" msgstr "Altitudine di expedia non valida" #: ../src/expedia.c:112 #, c-format msgid "" "Couldn't open EXPEDIA image file (right after successful download! Please " "report and delete image file!): %s" msgstr "" "Impossibile aprire il file immagine di EXPEDIA (successivamente ad un " "download corretto! Se pregato di segnalarci questo fatto e di cancellare il " "file!): %s" #: ../src/expedia.c:125 #, c-format msgid "" "Couldn't save EXPEDIA image file (right after successful download! Please " "report and delete image file!): %s" msgstr "" "Impossibile salvare il file immagine di EXPEDIA (successivamente ad un " "download corretto! Se pregato di segnalarci questo fatto e di cancellare il " "file!): %s" #. * #. * See http://www.geonames.org/export/wikipedia-webservice.html#wikipediaBoundingBox #. #. Translators may wish to change this setting as appropriate to get Wikipedia articles in that language #: ../src/geonamessearch.c:46 msgid "en" msgstr "" #: ../src/geonamessearch.c:121 msgid "Search" msgstr "Cerca" #: ../src/geonamessearch.c:123 msgid "No entries found!" msgstr "Nessuna voce trovata!" #. NB could allow columns to be shifted around by doing this after each new #. gtk_tree_view_column_set_reorderable ( column, TRUE ); #. However I don't think is that useful, so I haven't put it in #: ../src/geonamessearch.c:177 ../src/datasource_osm_my_traces.c:425 msgid "Name" msgstr "" #: ../src/geonamessearch.c:182 msgid "Feature" msgstr "" #: ../src/geonamessearch.c:187 ../src/datasource_osm_my_traces.c:440 msgid "Lat/Lon" msgstr "" #: ../src/geonamessearch.c:269 ../src/googlesearch.c:100 msgid "couldn't map temp file" msgstr "Imopssibile mappare il file temporaneo" #: ../src/globals.c:44 msgid "Degree format:" msgstr "Formato gradi:" #: ../src/globals.c:48 msgid "Distance units:" msgstr "Unità di distanza:" #: ../src/globals.c:52 msgid "Speed units:" msgstr "Unità di velocità:" #: ../src/globals.c:56 msgid "Height units:" msgstr "Unità di altezza:" #: ../src/globals.c:60 msgid "Use large waypoint icons:" msgstr "Usa icone grandi per i waypoint:" #: ../src/globals.c:64 msgid "Default latitude:" msgstr "Latitudine predefinita:" #: ../src/globals.c:67 msgid "Default longitude:" msgstr "Longitudine predefinita:" #: ../src/globals.c:73 msgid "Alphabetical" msgstr "" #: ../src/globals.c:73 ../src/datasource_osm_my_traces.c:435 msgid "Time" msgstr "" #: ../src/globals.c:76 msgid "KML File Export Units:" msgstr "Unità di Esportazione dei file KML:" #: ../src/globals.c:77 msgid "GPX Track Order:" msgstr "" #: ../src/globals.c:82 msgid "Image Viewer:" msgstr "Visualizzatore di immagine:" #: ../src/globals.c:87 msgid "External GPX Program 1:" msgstr "Programma GPX esterno 1:" #: ../src/globals.c:88 msgid "External GPX Program 2:" msgstr "Programma GPX esterno 2:" #. Defaults for the options are setup here #: ../src/globals.c:96 msgid "General" msgstr "Generale" #. New Tab #: ../src/globals.c:121 msgid "Export/External" msgstr "Esporta/Esterno" #. Webtools #: ../src/google.c:36 msgid "Google" msgstr "Google" #: ../src/datasource_file.c:59 msgid "Import file with GPSBabel" msgstr "Importa file con GPBBabel" #: ../src/datasource_file.c:60 msgid "Imported file" msgstr "File importato" #. The file selector #: ../src/datasource_file.c:133 msgid "File:" msgstr "File:" #: ../src/datasource_file.c:134 msgid "File to import" msgstr "File da importare" #: ../src/datasource_file.c:141 msgid "All files" msgstr "Tutti i file" #. The file format selector #: ../src/datasource_file.c:148 msgid "File type:" msgstr "Tipo di file:" #: ../src/datasource_file.c:193 #, c-format msgid "using babel args '%s' and file '%s'" msgstr "uso degli argomenti babel '%s' e file '%s'" #: ../src/datasource_gc.c:66 msgid "Download Geocaches" msgstr "Scarica Geocache" #: ../src/datasource_gc.c:67 msgid "Geocaching.com Caches" msgstr "Cache di Geocaching.com" #: ../src/datasource_gc.c:84 msgid "geocaching.com username:" msgstr "Nome utente di geocaching.com:" #: ../src/datasource_gc.c:85 msgid "geocaching.com password:" msgstr "Password di geocaching.com:" #: ../src/datasource_gc.c:126 #, c-format msgid "" "Can't find %s or %s in path! Check that you have installed it correctly." msgstr "" "Impossibile trovare %s o %s nel percorso! Controlla siano installati " "correttamente." #: ../src/datasource_gc.c:188 msgid "Number geocaches:" msgstr "Numero geocache:" #: ../src/datasource_gc.c:190 msgid "Centered around:" msgstr "Centrata su:" #: ../src/datasource_gc.c:226 msgid "Broken input - using some defaults" msgstr "Input corrotto - uso quelli predefiniti" #: ../src/datasource_geotag.c:51 msgid "Create Waypoints from Geotagged Images" msgstr "Crea Punti di Transito da Immagini Georeferenziate" #: ../src/datasource_geotag.c:52 msgid "Geotagged Images" msgstr "Immagini Georeferenziate" #: ../src/datasource_geotag.c:102 ../src/vikwindow.c:2314 #: ../src/vikwindow.c:2382 ../src/vikwindow.c:2824 msgid "All" msgstr "Tutti" #: ../src/datasource_geotag.c:107 ../src/vikwindow.c:2829 msgid "JPG" msgstr "JPG" #: ../src/datasource_geotag.c:165 #, c-format msgid "Unable to create waypoint from %s" msgstr "Impossibile creare il punto di transito da %s" #: ../src/datasource_google.c:49 ../src/datasource_google.c:50 msgid "Google Directions" msgstr "Indicazioni da Google" #: ../src/datasource_google.c:77 msgid "From:" msgstr "Da:" #: ../src/datasource_google.c:79 msgid "To:" msgstr "A:" #: ../src/datasource_gps.c:57 msgid "Acquire from GPS" msgstr "Acquisisci dal GPS" #: ../src/datasource_gps.c:58 msgid "Acquired from GPS" msgstr "Aquisiti dal GPS" #: ../src/datasource_gps.c:221 #, c-format msgid "using cmdline '%s' and file '%s'\n" msgstr "Sto utilizzando cmdline '%s' e file '%s'\n" #: ../src/datasource_gps.c:297 ../src/vikgpslayer.c:884 #, c-format msgid "Downloading %d waypoint..." msgid_plural "Downloading %d waypoints..." msgstr[0] "Download in corso di %d waypoint" msgstr[1] "Download in corso di %d waypoint" #: ../src/datasource_gps.c:298 ../src/vikgpslayer.c:885 #, c-format msgid "Downloading %d trackpoint..." msgid_plural "Downloading %d trackpoints..." msgstr[0] "Download in corso di %d trackpoint" msgstr[1] "Download in corso di %d trackpoint" #: ../src/datasource_gps.c:303 ../src/vikgpslayer.c:890 #, c-format msgid "Downloading %d routepoint..." msgid_plural "Downloading %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/datasource_gps.c:325 ../src/datasource_gps.c:326 #: ../src/datasource_gps.c:327 #, c-format msgid "Downloaded %d out of %d %s..." msgstr "Scaricati %d di %d %s" #: ../src/datasource_gps.c:331 ../src/datasource_gps.c:332 #: ../src/datasource_gps.c:333 #, c-format msgid "Downloaded %d %s." msgstr "Scaricati %d %s." #: ../src/datasource_gps.c:347 ../src/vikgpslayer.c:968 #, c-format msgid "GPS Device: %s" msgstr "Dispositivo GPS: %s" #: ../src/datasource_gps.c:370 ../src/vikgpslayer.c:1042 #: ../src/vikgpslayer.c:1110 msgid "Status: Working..." msgstr "" #: ../src/datasource_gps.c:469 ../src/vikgpslayer.c:150 msgid "GPS Protocol:" msgstr "Protocollo GPS:" #. List now assigned at runtime #: ../src/datasource_gps.c:488 ../src/vikgpslayer.c:151 msgid "Serial Port:" msgstr "Porta seriale:" #: ../src/datasource_gps.c:509 msgid "" "Turn Off After Transfer\n" "(Garmin/NAViLink Only)" msgstr "" "Spegni al termine del trasferimento\n" "(solo Garmin/NAViLink)" #: ../src/datasource_gps.c:512 msgid "Tracks:" msgstr "Tracciati:" #: ../src/datasource_gps.c:516 msgid "Routes:" msgstr "" #: ../src/datasource_gps.c:520 msgid "Waypoints:" msgstr "Punti di Transito:" #: ../src/datasource_gps.c:594 ../src/vikgpslayer.c:1305 msgid "GPS device: N/A" msgstr "Dipositivo GPS: N/D" #: ../src/datasource_osm.c:52 ../src/datasource_osm.c:53 msgid "OSM traces" msgstr "Tracce OSM" #: ../src/datasource_osm.c:80 msgid "Page number:" msgstr "Numero della pagina:" #: ../src/datasource_osm_my_traces.c:63 ../src/datasource_osm_my_traces.c:64 msgid "OSM My Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:108 msgid "Username:" msgstr "" #: ../src/datasource_osm_my_traces.c:113 msgid "The email or username used to login to OSM" msgstr "" #: ../src/datasource_osm_my_traces.c:115 ../src/osm-traces.c:413 msgid "Password:" msgstr "Password:" #: ../src/datasource_osm_my_traces.c:120 msgid "The password used to login to OSM" msgstr "" #: ../src/datasource_osm_my_traces.c:430 msgid "Description" msgstr "" #: ../src/datasource_osm_my_traces.c:445 msgid "Privacy" msgstr "" #: ../src/datasource_osm_my_traces.c:452 msgid "Within Current View" msgstr "" #: ../src/datasource_osm_my_traces.c:518 msgid "GPS Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:520 msgid "None found!" msgstr "" #: ../src/datasource_osm_my_traces.c:629 msgid "My OSM Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:645 #, c-format msgid "Unable to get trace: %s" msgstr "" #: ../src/datasource_wikipedia.c:32 msgid "Create Waypoints from Wikipedia Articles" msgstr "" #: ../src/datasource_wikipedia.c:33 msgid "Wikipedia Waypoints" msgstr "" #: ../src/dem.c:65 ../src/dem.c:79 msgid "Invalid DEM" msgstr "DEM non valido" #: ../src/dem.c:121 msgid "Invalid DEM header" msgstr "Header DEM non valido" #: ../src/dem.c:190 ../src/dem.c:203 msgid "Incorrect DEM Class B record: expected 1" msgstr "DEM Classe B non corretta: attesa 1" #: ../src/dem.c:360 #, c-format msgid "Couldn't map file %s: %s" msgstr "Impossibile mappare il file %s: %s" #: ../src/download.c:112 msgid "Tile age (s):" msgstr "" #: ../src/download.c:233 #, c-format msgid "Download error: %s" msgstr "Errore durante il download: %s" #: ../src/download.c:313 msgid "couldn't open temp file" msgstr "Impossibile aprire il file temporaneo" #: ../src/file.c:456 ../src/file.c:461 #, c-format msgid "Draw mode '%s' no more supported" msgstr "Modalità '%s' non più supportata" #: ../src/geotag_exif.c:433 msgid "Not enough memory." msgstr "Memoria insufficiente." #: ../src/geotag_exif.c:451 msgid "Setting a value for this tag is unsupported!" msgstr "L'impostazione di un valore per questo tag non è supportato!" #: ../src/geotag_exif.c:470 #, c-format msgid "Too few components specified (need %d, found %d)\n" msgstr "Troppo pochi componenti specificati (necessari %d, trovati %d)\n" #: ../src/geotag_exif.c:474 msgid "Numeric value expected\n" msgstr "Valore numerico atteso\n" #: ../src/geotag_exif.c:482 msgid "This shouldn't happen!" msgstr "Questo non dovrebbe accadere!" #: ../src/geotag_exif.c:552 msgid "Not yet implemented!" msgstr "Non ancora implementato" #: ../src/geotag_exif.c:565 msgid "Warning; Too many components specified!" msgstr "Attenzione; Troppi componenti specificati!" #: ../src/osm-traces.c:73 msgid "Identifiable (public w/ timestamps)" msgstr "Identificabili (strada pubblica/ marcatori temporali)" #: ../src/osm-traces.c:74 msgid "Trackable (private w/ timestamps)" msgstr "Tracciabile (strada privata/ marcatori temporali)" #: ../src/osm-traces.c:75 msgid "Public" msgstr "Pubblico" #: ../src/osm-traces.c:76 msgid "Private" msgstr "Privato" #: ../src/osm-traces.c:93 msgid "OSM username:" msgstr "Username OSM:" #: ../src/osm-traces.c:94 msgid "OSM password:" msgstr "Password OSM:" #. Preferences #: ../src/osm-traces.c:151 msgid "OpenStreetMap Traces" msgstr "Tracce OpenStreetMap" #: ../src/osm-traces.c:234 #, c-format msgid "failed to upload data: HTTP response is %ld" msgstr "Impossibile effettuare l'upload: la risposta HTTP è %ld" #: ../src/osm-traces.c:239 #, c-format msgid "curl_easy_getinfo failed: %d" msgstr "errore di curl_easy_getinfo: %d" #: ../src/osm-traces.c:244 #, c-format msgid "curl request failed: %s" msgstr "Errore di curl request: %s" #: ../src/osm-traces.c:275 #, c-format msgid "failed to open temporary file: %s" msgstr "Apertura del file temporaneo %s fallita." #. Success #: ../src/osm-traces.c:328 msgid "Uploaded to OSM" msgstr "Caricato su OSM" #: ../src/osm-traces.c:332 msgid "FAILED TO UPLOAD DATA TO OSM - CURL PROBLEM" msgstr "CARICAMENTO DEI DATI ALL'OSM NON RIUSCITA - PROBLEMA CURL" #: ../src/osm-traces.c:335 msgid "FAILED TO UPLOAD DATA TO OSM" msgstr "CARICAMENTO DEI DATI ALL'OSM NON RIUSCITO" #: ../src/osm-traces.c:335 msgid "HTTP response code" msgstr "Codice di risposta HTTP" #: ../src/osm-traces.c:348 #, c-format msgid "failed to unlink temporary file: %s" msgstr "Impossibile eseguire l'unlink del file temporaneo: %s" #: ../src/osm-traces.c:387 msgid "OSM upload" msgstr "upload OSM" #: ../src/osm-traces.c:405 msgid "Email:" msgstr "Email:" #: ../src/osm-traces.c:410 msgid "" "The email used as login\n" "Enter the email you use to login into www.openstreetmap.org." msgstr "" "L'indirizzo email utilizzata per effettuare il login\n" "Inserisci l'indirizzo email utilizzato per effettuare il login di " "www.openstreetmap.org." #: ../src/osm-traces.c:418 msgid "" "The password used to login\n" "Enter the password you use to login into " "www.openstreetmap.org." msgstr "" "La password utilizzata per effettuare il login\n" "Inserisci la password che utilizzi per effettuare il login su " "www.openstreetmap.org." #: ../src/osm-traces.c:423 msgid "File's name:" msgstr "Nome del file:" #: ../src/osm-traces.c:433 msgid "" "The name of the file on OSM\n" "This is the name of the file created on the server.This is not the " "name of the local file." msgstr "" "Il nome del file su OSM\n" "Questo è il nome del file creato sul server. Questo non è il nome del " "file in locale" #: ../src/osm-traces.c:442 msgid "The description of the trace" msgstr "La descrizione della traccia" #: ../src/osm-traces.c:444 msgid "Tags:" msgstr "Tag:" #: ../src/osm-traces.c:449 msgid "The tags associated to the trace" msgstr "I tag associati alla traccia" #: ../src/osm-traces.c:482 #, c-format msgid "Uploading %s to OSM" msgstr "Caricamento di %s su OSM" #: ../src/mapcache.c:61 msgid "Map cache memory size (MB):" msgstr "" #: ../src/print.c:53 msgid "None" msgstr "Nessuno" #: ../src/print.c:54 msgid "Horizontally" msgstr "Orizzontalmente" #: ../src/print.c:55 msgid "Vertically" msgstr "Verticalmente" #: ../src/print.c:56 msgid "Both" msgstr "Entrambi" #: ../src/print.c:120 msgid "Image Settings" msgstr "Impostazioni dell'immagine" #: ../src/print.c:546 msgid "done" msgstr "fatto" #. Page Size #: ../src/print.c:575 msgid "_Adjust Page Size and Orientation" msgstr "Regol_a la dimensione e l'orientamento pagina" #: ../src/print.c:591 msgid "C_enter:" msgstr "C_entro:" #. ignore page margins #: ../src/print.c:609 msgid "Ignore Page _Margins" msgstr "Ignora i _margini della pagina" #: ../src/print.c:628 msgid "Image S_ize:" msgstr "Dimen_sione immagine:" #: ../src/util.c:81 msgid "Could not launch web browser." msgstr "Impossibile avviare il browser web." #: ../src/util.c:92 msgid "Could not create new email." msgstr "Impossibile creare una nuova email." #: ../src/vikcoordlayer.c:46 msgid "Color:" msgstr "Colore:" #: ../src/vikcoordlayer.c:47 msgid "Minutes Width:" msgstr "Larghezza minuti:" #: ../src/vikcoordlayer.c:48 msgid "Line Thickness:" msgstr "Spessore della linea:" #: ../src/vikcoordlayer.c:56 msgid "Coordinate" msgstr "" #: ../src/datasource_bfilter.c:46 msgid "Max number of points:" msgstr "Numero massimo di punti:" #: ../src/datasource_bfilter.c:60 msgid "Simplify All Tracks..." msgstr "Semplifica Tutti i Tracciati..." #: ../src/datasource_bfilter.c:61 msgid "Simplified Tracks" msgstr "Tracciati Semplificati" #: ../src/datasource_bfilter.c:96 ../src/datasource_bfilter.c:97 msgid "Remove Duplicate Waypoints" msgstr "Rimuovi waypoint doppi" #: ../src/datasource_bfilter.c:129 msgid "Waypoints Inside This" msgstr "Waypoint all'interno di questo" #: ../src/datasource_bfilter.c:130 msgid "Polygonized Layer" msgstr "Livelli Poligonizzati" #: ../src/datasource_bfilter.c:165 msgid "Waypoints Outside This" msgstr "Waypoint all'esterno di questo" #: ../src/datasource_bfilter.c:166 msgid "Polygonzied Layer" msgstr "Strato a poligoni" #: ../src/main.c:89 #, c-format msgid "Ignoring Xlib error: error code %d request code %d\n" msgstr "" #: ../src/main.c:102 msgid "Enable debug output" msgstr "Abilita output di debug" #: ../src/main.c:103 msgid "Enable verbose output" msgstr "Abilita output prolisso" #: ../src/main.c:104 msgid "Show version" msgstr "Mostra versione" #: ../src/osm.c:106 msgid "On Disk OSM Tile Format" msgstr "" #: ../src/osm.c:121 msgid "OSM (view)" msgstr "OSM (visualizza)" #: ../src/osm.c:125 msgid "OSM (edit)" msgstr "OSM (modifica)" #: ../src/osm.c:129 msgid "OSM (render)" msgstr "OSM (disegna)" #. Example: http://127.0.0.1:8111/load_and_zoom?left=8.19&right=8.20&top=48.605&bottom=48.590&select=node413602999 #. JOSM or merkaartor must already be running with remote interface enabled #: ../src/osm.c:136 msgid "Local port 8111 (eg JOSM)" msgstr "Porta locale 8111 (per esempio JOSM)" #: ../src/preferences.c:285 msgid "Preferences" msgstr "Preferenze" #: ../src/uibuilder.c:147 msgid "Take care that this password will be stored clearly in a plain file." msgstr "" "Attenzione, questa password verrà memorizzata in chiaro in un file di testo." #: ../src/vikaggregatelayer.c:37 msgid "Aggregate" msgstr "" #: ../src/vikdemlayer.c:101 msgid "Absolute height" msgstr "Altezza assoluta" #: ../src/vikdemlayer.c:102 msgid "Height gradient" msgstr "Gradiente di altezza" #: ../src/vikdemlayer.c:118 msgid "DEM Files:" msgstr "File DEM:" #: ../src/vikdemlayer.c:119 msgid "Download Source:" msgstr "Fonte di scaricamento:" #: ../src/vikdemlayer.c:120 msgid "Min Elev Color:" msgstr "Colore elevazione minima:" #: ../src/vikdemlayer.c:121 msgid "Type:" msgstr "Tipo:" #: ../src/vikdemlayer.c:122 msgid "Min Elev:" msgstr "Elev. minima:" #: ../src/vikdemlayer.c:123 msgid "Max Elev:" msgstr "Elev. massima:" #: ../src/vikdemlayer.c:134 msgid "_DEM Download" msgstr "" #: ../src/vikdemlayer.c:134 msgid "DEM Download" msgstr "" #: ../src/vikdemlayer.c:188 msgid "DEM" msgstr "" #: ../src/vikdemlayer.c:284 #, c-format msgid "Number of files: %d" msgstr "Numero di file: %d" #: ../src/vikdemlayer.c:385 msgid "DEM Loading" msgstr "Caricamento DEM" #: ../src/vikdemlayer.c:889 #, c-format msgid "No SRTM data available for %f, %f" msgstr "Dati SRTM non disponibili per %f, %f" #: ../src/vikdemlayer.c:1149 #, c-format msgid "Downloading DEM %s" msgstr "Download di DEM %s in corso" #: ../src/vikfileentry.c:68 msgid "Browse..." msgstr "Sfoglia..." #: ../src/vikfileentry.c:96 msgid "Choose file" msgstr "Selezionare il file" #: ../src/vikfilelist.c:48 msgid "Choose file(s)" msgstr "Selezionare file" #: ../src/vikfilelist.c:172 msgid "Add..." msgstr "Aggiungi..." #: ../src/vikfilelist.c:173 msgid "Delete" msgstr "Elimina" #: ../src/vikgeoreflayer.c:70 msgid "_Georef Move Map" msgstr "" #: ../src/vikgeoreflayer.c:70 msgid "Georef Move Map" msgstr "Sposta mappa Georef" #: ../src/vikgeoreflayer.c:77 msgid "Georef Z_oom Tool" msgstr "" #: ../src/vikgeoreflayer.c:77 msgid "Georef Zoom Tool" msgstr "Strumento di Zoom Georef" #: ../src/vikgeoreflayer.c:87 msgid "GeoRef Map" msgstr "" #: ../src/vikgeoreflayer.c:335 ../src/vikmapslayer.c:685 #, c-format msgid "Couldn't open image file: %s" msgstr "Impossibile aprire il file immagine: %s" #: ../src/vikgeoreflayer.c:365 msgid "Unexpected end of file reading World file." msgstr "Fine del file inattesa durante la lettura del World File." #: ../src/vikgeoreflayer.c:381 ../src/vikgeoreflayer.c:426 msgid "Choose World file" msgstr "Seleziona \"World File\"" #: ../src/vikgeoreflayer.c:394 msgid "The World file you requested could not be opened for reading." msgstr "Il World File richiesto non può essere aperto per la lettura." #: ../src/vikgeoreflayer.c:439 msgid "The file you requested could not be opened for writing." msgstr "" "Non è stato possibile aprire il file richiesto in modalità di scrittura" #: ../src/vikgeoreflayer.c:456 ../src/viklayer.c:480 msgid "Layer Properties" msgstr "Proprietà del livello" #: ../src/vikgeoreflayer.c:478 msgid "World File Parameters:" msgstr "Parametri del World File:" #: ../src/vikgeoreflayer.c:479 msgid "Load From File..." msgstr "Carica da file..." #: ../src/vikgeoreflayer.c:484 msgid "Corner pixel easting:" msgstr "Allineamento angolo verso est in pixel:" #: ../src/vikgeoreflayer.c:486 msgid "the UTM \"easting\" value of the upper-right corner pixel of the map" msgstr "" "Il valore dell'UTM \"percorso verso est\" del pixel nell'angolo in alto a " "destra della mappa" #: ../src/vikgeoreflayer.c:488 msgid "Corner pixel northing:" msgstr "Allineamento angolo verso nord in pixel:" #: ../src/vikgeoreflayer.c:490 msgid "the UTM \"northing\" value of the upper-right corner pixel of the map" msgstr "" "Il valore dell'UTM \"percorso verso nord\" del pixel nell'angolo in alto a " "destra della mappa" #: ../src/vikgeoreflayer.c:492 msgid "X (easting) scale (mpp): " msgstr "scala X (easting) (mpp): " #: ../src/vikgeoreflayer.c:493 msgid "Y (northing) scale (mpp): " msgstr "Scala Y (northing mpp): " #: ../src/vikgeoreflayer.c:496 msgid "the scale of the map in the X direction (meters per pixel)" msgstr "Scala della mappa nella direxione X (metri per pixel)" #: ../src/vikgeoreflayer.c:498 msgid "the scale of the map in the Y direction (meters per pixel)" msgstr "Scala della mappa nella direxione Y (metri per pixel)" #: ../src/vikgeoreflayer.c:500 msgid "Map Image:" msgstr "Immagine della mappa:" #. Now with icons #: ../src/vikgeoreflayer.c:608 msgid "_Zoom to Fit Map" msgstr "_Zoom per adattare la mappa" #: ../src/vikgeoreflayer.c:614 msgid "_Goto Map Center" msgstr "_Va al _centro della mappa" #: ../src/vikgeoreflayer.c:620 msgid "_Export to World File" msgstr "_Esporta al File del Mondo" #: ../src/vikgoto.c:75 msgid "No goto tool available." msgstr "Non è disponibile alcuno strumento \"vai a\"." #: ../src/vikgoto.c:88 ../src/vikgoto.c:107 msgid "goto" msgstr "Vai a" #: ../src/vikgoto.c:90 msgid "I don't know that place. Do you want another goto?" msgstr "Non conosco quel posto. Vuoi andare in un altro?" #: ../src/vikgoto.c:109 msgid "goto provider:" msgstr "vai al fornitore:" #: ../src/vikgoto.c:124 msgid "Enter address or place name:" msgstr "Digita l'indirizzo oppure il nome di un luogo" #: ../src/vikgpslayer.c:127 msgid "Data Mode" msgstr "" #: ../src/vikgpslayer.c:129 msgid "Realtime Tracking Mode" msgstr "" #: ../src/vikgpslayer.c:137 msgid "Keep vehicle at center" msgstr "" #: ../src/vikgpslayer.c:138 msgid "Keep vehicle on screen" msgstr "" #: ../src/vikgpslayer.c:139 msgid "Disable" msgstr "" #: ../src/vikgpslayer.c:152 msgid "Download Tracks:" msgstr "Scarica i Tracciati:" #: ../src/vikgpslayer.c:153 msgid "Upload Tracks:" msgstr "Carica i Tracciati:" #: ../src/vikgpslayer.c:154 msgid "Download Routes:" msgstr "" #: ../src/vikgpslayer.c:155 msgid "Upload Routes:" msgstr "" #: ../src/vikgpslayer.c:156 msgid "Download Waypoints:" msgstr "Scarica i Punti di Transito:" #: ../src/vikgpslayer.c:157 msgid "Upload Waypoints:" msgstr "Carica i Punti di Transito:" #: ../src/vikgpslayer.c:159 msgid "Recording tracks" msgstr "Registra i tracciati" #: ../src/vikgpslayer.c:160 msgid "Jump to current position on start" msgstr "All'avvio salta alla posizione corrente" #: ../src/vikgpslayer.c:161 msgid "Moving Map Method:" msgstr "Metodo di spostamento mappa:" #: ../src/vikgpslayer.c:162 msgid "Gpsd Host:" msgstr "Host Gpsd:" #: ../src/vikgpslayer.c:163 msgid "Gpsd Port:" msgstr "Porta di Gpsd:" #: ../src/vikgpslayer.c:164 msgid "Gpsd Retry Interval (seconds):" msgstr "Intervallo di Prova Gpsd (secondi):" #: ../src/vikgpslayer.c:179 msgid "GPS" msgstr "" #: ../src/vikgpslayer.c:242 ../src/vikgpslayer.c:1258 msgid "GPS Download" msgstr "Download GPS" #: ../src/vikgpslayer.c:242 ../src/vikgpslayer.c:1258 #: ../src/viktrwlayer.c:3094 msgid "GPS Upload" msgstr "Upload GPS" #: ../src/vikgpslayer.c:244 msgid "GPS Realtime Tracking" msgstr "Tracciamento GPS in Tempo Reale" #: ../src/vikgpslayer.c:451 msgid "Unknown GPS Protocol" msgstr "Protocollo GPS sconosciuto" #: ../src/vikgpslayer.c:469 msgid "Unknown serial port device" msgstr "Porta seriale del dispositivo sconosciuta" #: ../src/vikgpslayer.c:572 #, c-format msgid "%s: unknown parameter" msgstr "%s: parametro sconosciuto" #. Now with icons #: ../src/vikgpslayer.c:693 msgid "_Upload to GPS" msgstr "Carica al GPS (_U)" #: ../src/vikgpslayer.c:699 msgid "Download from _GPS" msgstr "Scarica dal _GPS" #: ../src/vikgpslayer.c:720 msgid "Empty _Realtime" msgstr "Svuota Tempo _Reale" #: ../src/vikgpslayer.c:727 msgid "E_mpty Upload" msgstr "Svuota il Carica_mento" #: ../src/vikgpslayer.c:733 msgid "_Empty Download" msgstr "Svuota lo Scaricamento (_E)" #: ../src/vikgpslayer.c:739 msgid "Empty _All" msgstr "Svuota Tutto (_A)" #. #. NB It's not fatal if this gives 2 for example! Hence removal of the g_assert #. This happens when copied GPS layer is deleted (not sure why the number_handlers would be 2) #. I don't think there's any side effects and certainly better than the program just aborting #. #: ../src/vikgpslayer.c:756 #, c-format msgid "Unexpected number of disconnected handlers: %d" msgstr "Numero inatteso di gestori disconnessi: %d" #: ../src/vikgpslayer.c:898 #, c-format msgid "Uploading %d waypoint..." msgid_plural "Uploading %d waypoints..." msgstr[0] "Upload di %d waypoint in corso..." msgstr[1] "Upload di %d waypoint in corso..." #: ../src/vikgpslayer.c:899 #, c-format msgid "Uploading %d trackpoint..." msgid_plural "Uploading %d trackpoints..." msgstr[0] "Caricamento di %d punto del tracciato in corso..." msgstr[1] "Caricamento di %d punti del tracciato in corso..." #: ../src/vikgpslayer.c:900 #, c-format msgid "Uploading %d routepoint..." msgid_plural "Uploading %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:925 #, c-format msgid "Downloaded %d out of %d waypoint..." msgid_plural "Downloaded %d out of %d waypoints..." msgstr[0] "Scaricati %d waypoint su %d..." msgstr[1] "Scaricati %d waypoint su %d..." #: ../src/vikgpslayer.c:926 #, c-format msgid "Downloaded %d out of %d trackpoint..." msgid_plural "Downloaded %d out of %d trackpoints..." msgstr[0] "Scaricato %d punto del tracciato su %d..." msgstr[1] "Scaricati %d punti del tracciato su %d..." #: ../src/vikgpslayer.c:927 #, c-format msgid "Downloaded %d out of %d routepoint..." msgid_plural "Downloaded %d out of %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:932 #, c-format msgid "Uploaded %d out of %d waypoint..." msgid_plural "Uploaded %d out of %d waypoints..." msgstr[0] "Caricati %d di %d waypoint..." msgstr[1] "Caricati %d di of %d waypoint..." #: ../src/vikgpslayer.c:933 #, c-format msgid "Uploaded %d out of %d trackpoint..." msgid_plural "Uploaded %d out of %d trackpoints..." msgstr[0] "Caricato %d di %d punto del tracciato..." msgstr[1] "Caricati %d di %d punti del tracciato..." #: ../src/vikgpslayer.c:934 #, c-format msgid "Uploaded %d out of %d routepoint..." msgid_plural "Uploaded %d out of %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:942 #, c-format msgid "Downloaded %d waypoint" msgid_plural "Downloaded %d waypoints" msgstr[0] "Scaricati %d waypoint" msgstr[1] "Scaricati %d waypoint" #: ../src/vikgpslayer.c:943 #, c-format msgid "Downloaded %d trackpoint" msgid_plural "Downloaded %d trackpoints" msgstr[0] "Scaricato %d punto del tracciato" msgstr[1] "Scaricati %d punti del tracciato" #: ../src/vikgpslayer.c:944 #, c-format msgid "Downloaded %d routepoint" msgid_plural "Downloaded %d routepoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:949 #, c-format msgid "Uploaded %d waypoint" msgid_plural "Uploaded %d waypoints" msgstr[0] "Caricati %d waypoint" msgstr[1] "Caricati %d waypoint" #: ../src/vikgpslayer.c:950 #, c-format msgid "Uploaded %d trackpoint" msgid_plural "Uploaded %d trackpoints" msgstr[0] "Caricato %d punto del tracciato" msgstr[1] "Caricati %d punti del tracciato" #: ../src/vikgpslayer.c:951 #, c-format msgid "Uploaded %d routepoint" msgid_plural "Uploaded %d routepoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:1180 msgid "Error: couldn't find gpsbabel." msgstr "Errore: impossibile trovare gpsbabel." #: ../src/vikgpslayer.c:1269 msgid "Warning - GPS Upload items may overwrite each other" msgstr "" #: ../src/vikgpslayer.c:1301 msgid "Status: detecting gpsbabel" msgstr "Stato: rilevazione di gpsbabel in corso" #: ../src/vikgpslayer.c:1332 msgid "No GPS items selected for transfer." msgstr "" #: ../src/vikgpslayer.c:1347 msgid "Could not turn off device." msgstr "" #: ../src/vikgpslayer.c:1385 msgid "Are you sure you want to delete GPS Upload data?" msgstr "Sei sicuro di voler eliminare i dati GPS Caricati?" #: ../src/vikgpslayer.c:1398 msgid "Are you sure you want to delete GPS Download data?" msgstr "Sei sicuro di voler eliminare i dati GPS Scaricati?" #: ../src/vikgpslayer.c:1412 msgid "Are you sure you want to delete GPS Realtime data?" msgstr "Sei sicuro di voler eliminare i dati GPS in Tempo Reale?" #: ../src/vikgpslayer.c:1425 msgid "Are you sure you want to delete All GPS data?" msgstr "Sei sicuro di voler eliminare Tutti i dati GPS?" #: ../src/viklayerspanel.c:55 msgid "/C_ut" msgstr "/T_aglia" #: ../src/viklayerspanel.c:56 msgid "/_Copy" msgstr "/_Copia" #: ../src/viklayerspanel.c:57 msgid "/_Paste" msgstr "/_Incolla" #: ../src/viklayerspanel.c:58 msgid "/_Delete" msgstr "/_Elimina" #: ../src/viklayerspanel.c:59 msgid "/New Layer" msgstr "/Nuovo Livello" #: ../src/viklayerspanel.c:127 msgid "Top Layer" msgstr "Livello superiore" #: ../src/viklayerspanel.c:143 msgid "Add new layer" msgstr "Aggiunge un nuovo livelle" #: ../src/viklayerspanel.c:150 msgid "Remove selected layer" msgstr "Elimina livello selezionato" #: ../src/viklayerspanel.c:157 msgid "Move selected layer up" msgstr "Sposta il livello selezionato in su" #: ../src/viklayerspanel.c:164 msgid "Move selected layer down" msgstr "Sposta il livello selezionato in giù" #: ../src/viklayerspanel.c:171 msgid "Cut selected layer" msgstr "Taglia il livello selezionato" #: ../src/viklayerspanel.c:178 msgid "Copy selected layer" msgstr "Copia il livello selezionato" #: ../src/viklayerspanel.c:185 msgid "Paste layer below selected layer" msgstr "Incolla il livello sotto al livello selezionato" #. TODO: FIXME: if name has a '/' in it it will get all messed up. why not have an itemfactory field with #. name, icon, shortcut, etc.? #: ../src/viklayerspanel.c:204 ../src/vikwindow.c:3292 #, c-format msgid "New _%s Layer" msgstr "" #: ../src/viklayerspanel.c:511 msgid "Aggregate Layers have no settable properties." msgstr "I livelli aggregati non hanno proprietà modificabili." #: ../src/viklayerspanel.c:555 msgid "You cannot cut the Top Layer." msgstr "Impossibile tagliare il livello superiore." #: ../src/viklayerspanel.c:600 #, c-format msgid "Are you sure you want to delete %s?" msgstr "Sei sicuro di voler eliminare %s?" #: ../src/viklayerspanel.c:617 msgid "You cannot delete the Top Layer." msgstr "Impossibile eliminare il livello superiore." #: ../src/viklayerspanel.c:701 msgid "Are you sure you wish to delete all layers?" msgstr "Desideri veramente eliminare tutti i livelli?" #. ******* MAPZOOMS ******** #: ../src/vikmapslayer.c:91 msgid "Use Viking Zoom Level" msgstr "Usa il livello di Zoom di Viking" #: ../src/vikmapslayer.c:124 msgid "Map Type:" msgstr "Tipo di mappa:" #: ../src/vikmapslayer.c:125 msgid "Maps Directory:" msgstr "Cartella delle mappe" #: ../src/vikmapslayer.c:126 msgid "Alpha:" msgstr "Alpha:" #: ../src/vikmapslayer.c:127 msgid "Control the Alpha value for transparency effects" msgstr "" #: ../src/vikmapslayer.c:128 msgid "Autodownload maps:" msgstr "Scarica le mappe automaticamente:" #: ../src/vikmapslayer.c:129 msgid "Autodownload Only Gets Missing Maps:" msgstr "" #: ../src/vikmapslayer.c:130 msgid "" "Using this option avoids attempting to update already acquired tiles. This " "can be useful if you want to restrict the network usage, without having to " "resort to manual control. Only applies when 'Autodownload Maps' is on." msgstr "" #: ../src/vikmapslayer.c:131 msgid "Zoom Level:" msgstr "Livello di Zoom:" #: ../src/vikmapslayer.c:132 msgid "" "Determines the method of displaying map tiles for the current zoom level. " "'Viking Zoom Level' uses the best matching level, otherwise setting a fixed " "value will always use map tiles of the specified value regardless of the " "actual zoom level." msgstr "" #: ../src/vikmapslayer.c:146 msgid "_Maps Download" msgstr "" #: ../src/vikmapslayer.c:146 msgid "Maps Download" msgstr "Scarica mappe" #: ../src/vikmapslayer.c:161 msgid "Map" msgstr "Mappa" #: ../src/vikmapslayer.c:249 msgid "Default maplayer directory:" msgstr "Cartella predefinita del livello mappa" #: ../src/vikmapslayer.c:249 msgid "Choose a directory to store cached Map tiles for this layer" msgstr "" #: ../src/vikmapslayer.c:505 msgid "Unknown map type" msgstr "Tipo di mappa sconosciuto" #: ../src/vikmapslayer.c:516 msgid "Unknown Map Zoom" msgstr "Zoom di mappa sconosciuto" #: ../src/vikmapslayer.c:589 #, c-format msgid "" "New map cannot be displayed in the current drawmode.\n" "Select \"%s\" from View menu to view it." msgstr "" "La nuova mappa non può essere visualizzata nella modalità di disegno " "corrente.\n" "Seleziona \"%s\" dal menu Visualizza per visualizzarla." #: ../src/vikmapslayer.c:753 #, c-format msgid "" "Cowardly refusing to draw tiles or existence of tiles beyond %d zoom out " "factor" msgstr "" "Rappresentazione o esistenza di celle impossibile oltre il fattore di zoom %d" #: ../src/vikmapslayer.c:1157 #, c-format msgid "Redownloading up to %d %s map..." msgid_plural "Redownloading up to %d %s maps..." msgstr[0] "Sto scaricando nuovamente fino a %d %s mappa..." msgstr[1] "Sto scaricando nuovamente fino a %d %s mappe..." #: ../src/vikmapslayer.c:1159 #, c-format msgid "Redownloading %d %s map..." msgid_plural "Redownloading %d %s maps..." msgstr[0] "Sto scaricando nuovamente fino a %d %s mappa..." msgstr[1] "Sto scaricando nuovamente fino a %d %s mappe..." #: ../src/vikmapslayer.c:1163 ../src/vikmapslayer.c:1238 #, c-format msgid "Downloading %d %s map..." msgid_plural "Downloading %d %s maps..." msgstr[0] "Scaricamento %d %s mappa..." msgstr[1] "Scaricamento %d %s mappe..." #: ../src/vikmapslayer.c:1311 #, c-format msgid "" "\n" "Source: %s\n" "\n" "Tile File: %s\n" "Tile File Timestamp: %s" msgstr "" #: ../src/vikmapslayer.c:1318 #, c-format msgid "" "Source: %s\n" "\n" "No Tile File!" msgstr "" #: ../src/vikmapslayer.c:1356 msgid "Redownload _Bad Map(s)" msgstr "Riscarica la(e) Mappa(e) Difettosa(e) (_B)" #: ../src/vikmapslayer.c:1360 msgid "Redownload _New Map(s)" msgstr "Riscarica la(e) _Nuova(e) Mappa(e)" #: ../src/vikmapslayer.c:1364 msgid "Redownload _All Map(s)" msgstr "Riscarica Tutta(e) la(e) Mappa(e) (_A)" #: ../src/vikmapslayer.c:1368 msgid "_Show Tile Information" msgstr "" #: ../src/vikmapslayer.c:1449 #, c-format msgid "" "Wrong drawmode for this map.\n" "Select \"%s\" from View menu and try again." msgstr "" "Modalità di disegno non valida per questa mappa.\n" "Seleziona \"%s\" dal menu Visualizza e riprova." #: ../src/vikmapslayer.c:1454 msgid "Wrong zoom level for this map." msgstr "Livello di zoom errato per questa mappa." #. Now with icons #: ../src/vikmapslayer.c:1485 msgid "Download _Missing Onscreen Maps" msgstr "Scarica le Mappe _Mancanti a Schermo" #: ../src/vikmapslayer.c:1492 msgid "Download _New Onscreen Maps" msgstr "Scarica Nuove Mappe a Schermo" #: ../src/vikmapslayer.c:1499 msgid "Reload _All Onscreen Maps" msgstr "Ricarica Tutte le Mappe a Schermo (_A)" #: ../src/viktreeview.c:263 msgid "Layer Name" msgstr "Nome del livello" #: ../src/viktreeview.c:742 #, c-format msgid "delete data from %s\n" msgstr "Elimina dati da %s\n" #: ../src/viktrwlayer.c:377 msgid "Create _Waypoint" msgstr "" #: ../src/viktrwlayer.c:377 msgid "Create Waypoint" msgstr "Crea Waypoint" #: ../src/viktrwlayer.c:383 msgid "Create _Track" msgstr "" #: ../src/viktrwlayer.c:383 msgid "Create Track" msgstr "Crea il Tracciato" #: ../src/viktrwlayer.c:392 msgid "Create _Route" msgstr "" #: ../src/viktrwlayer.c:392 msgid "Create Route" msgstr "" #: ../src/viktrwlayer.c:401 msgid "_Edit Waypoint" msgstr "" #: ../src/viktrwlayer.c:401 msgid "Edit Waypoint" msgstr "Modifica Waypoint" #: ../src/viktrwlayer.c:409 msgid "Edit Trac_kpoint" msgstr "" #: ../src/viktrwlayer.c:409 msgid "Edit Trackpoint" msgstr "Modifica il Punto del Tracciato" #: ../src/viktrwlayer.c:417 msgid "Show P_icture" msgstr "" #: ../src/viktrwlayer.c:417 msgid "Show Picture" msgstr "Visualizza immagine" #: ../src/viktrwlayer.c:424 msgid "Route _Finder" msgstr "" #: ../src/viktrwlayer.c:424 msgid "Route Finder" msgstr "Trova Percorso" #. ***** PARAMETERS ***** #: ../src/viktrwlayer.c:447 ../src/viktrwlayer.c:1942 #: ../src/viktrwlayer.c:1944 msgid "Waypoints" msgstr "Waypoint" #: ../src/viktrwlayer.c:447 ../src/viktrwlayer.c:1933 #: ../src/viktrwlayer.c:1935 msgid "Tracks" msgstr "Tracciati" #: ../src/viktrwlayer.c:447 msgid "Waypoint Images" msgstr "Immagini dei Waypoint" #: ../src/viktrwlayer.c:450 msgid "Draw by Track" msgstr "Disegna da Traccia" #: ../src/viktrwlayer.c:450 msgid "Draw by Speed" msgstr "" #: ../src/viktrwlayer.c:450 msgid "All Tracks Same Color" msgstr "" #: ../src/viktrwlayer.c:451 msgid "Filled Square" msgstr "Quadrato riempito" #: ../src/viktrwlayer.c:451 msgid "Square" msgstr "Quadrato" #: ../src/viktrwlayer.c:451 msgid "Circle" msgstr "Cerchio" #: ../src/viktrwlayer.c:451 msgid "X" msgstr "X" #: ../src/viktrwlayer.c:477 msgid "Extra Extra Small" msgstr "" #: ../src/viktrwlayer.c:478 msgid "Extra Small" msgstr "" #: ../src/viktrwlayer.c:479 msgid "Small" msgstr "" #: ../src/viktrwlayer.c:480 msgid "Medium" msgstr "" #: ../src/viktrwlayer.c:481 msgid "Large" msgstr "" #: ../src/viktrwlayer.c:482 msgid "Extra Large" msgstr "" #: ../src/viktrwlayer.c:483 msgid "Extra Extra Large" msgstr "" #: ../src/viktrwlayer.c:491 msgid "Track Drawing Mode:" msgstr "Modalità di Disegno del Tracciato:" #: ../src/viktrwlayer.c:492 msgid "All Tracks Color:" msgstr "" #: ../src/viktrwlayer.c:493 msgid "The color used when 'All Tracks Same Color' drawing mode is selected" msgstr "" #: ../src/viktrwlayer.c:494 msgid "Draw Track Lines" msgstr "Disegna le Linee del Tracciato" #: ../src/viktrwlayer.c:495 msgid "Track Thickness:" msgstr "Spessore del Tracciato:" #: ../src/viktrwlayer.c:496 msgid "Draw Track Direction" msgstr "" #: ../src/viktrwlayer.c:497 msgid "Direction Size:" msgstr "" #: ../src/viktrwlayer.c:498 msgid "Draw Trackpoints" msgstr "Disegna i Punti del Tracciato" #: ../src/viktrwlayer.c:499 msgid "Trackpoint Size:" msgstr "" #: ../src/viktrwlayer.c:500 msgid "Draw Elevation" msgstr "Disegna elevazione" #: ../src/viktrwlayer.c:501 msgid "Draw Elevation Height %:" msgstr "Disegna altezza dell'elevazione %:" #: ../src/viktrwlayer.c:503 msgid "Draw Stops" msgstr "Disegna stop" #: ../src/viktrwlayer.c:504 msgid "" "Whether to draw a marker when trackpoints are at the same position but over " "the minimum stop length apart in time" msgstr "" #: ../src/viktrwlayer.c:505 msgid "Min Stop Length (seconds):" msgstr "Lunghezza Minima Stop (secondi):" #: ../src/viktrwlayer.c:507 msgid "Track BG Thickness:" msgstr "Spessore dello Sfondo del Tracciato:" #: ../src/viktrwlayer.c:508 msgid "Track Background Color" msgstr "Colore di Sfondo del Tracciato" #: ../src/viktrwlayer.c:509 msgid "Draw by Speed Factor (%):" msgstr "" #: ../src/viktrwlayer.c:510 msgid "" "The percentage factor away from the average speed determining the color used" msgstr "" #: ../src/viktrwlayer.c:512 msgid "Draw Labels" msgstr "Disegna Etichette" #: ../src/viktrwlayer.c:513 msgid "Waypoint Font Size:" msgstr "" #: ../src/viktrwlayer.c:514 msgid "Waypoint Color:" msgstr "Colore del Waypoint:" #: ../src/viktrwlayer.c:515 msgid "Waypoint Text:" msgstr "Testo del Waypoint:" #: ../src/viktrwlayer.c:516 msgid "Background:" msgstr "Sfondo:" #: ../src/viktrwlayer.c:517 msgid "Fake BG Color Translucency:" msgstr "Trasparenza del colore di sfondo finta" #: ../src/viktrwlayer.c:518 msgid "Waypoint marker:" msgstr "Marker waypoint:" #: ../src/viktrwlayer.c:519 msgid "Waypoint size:" msgstr "Dimensione del Waypoint:" #: ../src/viktrwlayer.c:520 msgid "Draw Waypoint Symbols:" msgstr "Disegna simboli dei Waypoint:" #: ../src/viktrwlayer.c:522 msgid "Draw Waypoint Images" msgstr "Disegna immagini del Waypoint" #: ../src/viktrwlayer.c:523 msgid "Image Size (pixels):" msgstr "Dimensione immagine (pixel):" #: ../src/viktrwlayer.c:524 msgid "Image Alpha:" msgstr "Alpha immagine:" #: ../src/viktrwlayer.c:525 msgid "Image Memory Cache Size:" msgstr "Dimensione della memoria cache per l'immagine:" #: ../src/viktrwlayer.c:610 msgid "TrackWaypoint" msgstr "" #: ../src/viktrwlayer.c:1951 ../src/viktrwlayer.c:1953 msgid "Routes" msgstr "" #: ../src/viktrwlayer.c:2144 #, c-format msgid " in %d:%02d hrs:mins" msgstr " in %d:%02d ore:minuti" #: ../src/viktrwlayer.c:2148 #, c-format msgid "" "\n" "%sTotal Length %.1f %s%s" msgstr "" "\n" "%sLunghezza totale %.1f %s%s" #: ../src/viktrwlayer.c:2154 #, c-format msgid "Tracks: %d - Waypoints: %d - Routes: %d%s" msgstr "" #: ../src/viktrwlayer.c:2174 #, c-format msgid "Tracks: %d" msgstr "" #: ../src/viktrwlayer.c:2184 #, c-format msgid "Routes: %d" msgstr "" #: ../src/viktrwlayer.c:2215 #, c-format msgid "- %d:%02d hrs:mins" msgstr "- %d:%02d ore:minuti" #: ../src/viktrwlayer.c:2223 #, c-format msgid "%s%.1f km %s" msgstr "%s%.1f km %s" #: ../src/viktrwlayer.c:2226 #, c-format msgid "%s%.1f miles %s" msgstr "%s%.1f miglia %s" #: ../src/viktrwlayer.c:2240 #, c-format msgid "Waypoints: %d" msgstr "" #: ../src/viktrwlayer.c:2266 #, c-format msgid "Trkpt: Alt %dft" msgstr "Punto del tracciato: Altitudine %dft" #. VIK_UNITS_HEIGHT_METRES: #: ../src/viktrwlayer.c:2270 #, c-format msgid "Trkpt: Alt %dm" msgstr "Punto del tracciato: Altitudine %dm" #. Compact date time format #: ../src/viktrwlayer.c:2277 #, c-format msgid " | Time %x %X" msgstr " | Orario %x %X" #: ../src/viktrwlayer.c:2295 #, c-format msgid " | Track: %s" msgstr " | Tracciato: %s" #. Combine parts to make overall message #: ../src/viktrwlayer.c:2299 #, c-format msgid "%s%s | %s %s %s" msgstr "%s%s | %s %s %s" #: ../src/viktrwlayer.c:2314 #, c-format msgid "Wpt: Alt %dft" msgstr "Punto panoramico: Altitudine %dft" #. VIK_UNITS_HEIGHT_METRES: #: ../src/viktrwlayer.c:2318 #, c-format msgid "Wpt: Alt %dm" msgstr "Punto panoramico: Altitudine %dm" #. Add comment if available #: ../src/viktrwlayer.c:2333 #, c-format msgid "%s | %s %s | Comment: %s" msgstr "%s | %s %s | Commento: %s" #: ../src/viktrwlayer.c:2335 #, c-format msgid "%s | %s %s" msgstr "" #: ../src/viktrwlayer.c:2563 ../src/viktrwlayer.c:2634 msgid "This layer has no waypoints or trackpoints." msgstr "Questo livello non ha punti di transito o punti del tracciato." #: ../src/viktrwlayer.c:2661 ../src/vikwindow.c:2407 ../src/vikwindow.c:2848 #, c-format msgid "The file \"%s\" exists, do you wish to overwrite it?" msgstr "Il file \"%s\" esiste già; sovrascriverlo?" #: ../src/viktrwlayer.c:2671 ../src/vikwindow.c:2429 msgid "The filename you requested could not be opened for writing." msgstr "Non è stato possibile aprire il file richiesto in scrittura." #: ../src/viktrwlayer.c:2676 ../src/viktrwlayer.c:2681 #: ../src/viktrwlayer.c:2691 ../src/viktrwlayer.c:2703 msgid "Export Layer" msgstr "Esporta livello" #: ../src/viktrwlayer.c:2720 msgid "Could not create temporary file for export." msgstr "Impossibile creare il file temporaneo per l'esportazione." #: ../src/viktrwlayer.c:2729 #, c-format msgid "Could not launch %s." msgstr "Impossibile lanciare %s." #: ../src/viktrwlayer.c:2773 msgid "Export Track as GPX" msgstr "Esporta il Tracciato come GPX" #: ../src/viktrwlayer.c:2795 msgid "Find" msgstr "Trova" #: ../src/viktrwlayer.c:2805 msgid "Waypoint Name:" msgstr "Nome del Waypoint:" #: ../src/viktrwlayer.c:2822 msgid "Waypoint not found in this layer." msgstr "Waypoint non trovato in questo livello." #: ../src/viktrwlayer.c:3090 msgid "Can not upload invisible track." msgstr "" #: ../src/viktrwlayer.c:3192 ../src/viktrwlayer.c:7785 msgid "Track" msgstr "Tracciato" #: ../src/viktrwlayer.c:3215 ../src/viktrwlayer.c:7817 msgid "Route" msgstr "" #: ../src/viktrwlayer.c:3296 ../src/viktrwlayer.c:6265 #: ../src/viktrwlayer.c:6314 msgid "_Finish Route" msgstr "" #: ../src/viktrwlayer.c:3298 ../src/viktrwlayer.c:6223 #: ../src/viktrwlayer.c:6312 msgid "_Finish Track" msgstr "" #. Now with icons #: ../src/viktrwlayer.c:3310 msgid "_View Layer" msgstr "_Visualizza Livello" #: ../src/viktrwlayer.c:3317 msgid "V_iew" msgstr "" #: ../src/viktrwlayer.c:3323 msgid "View All _Tracks" msgstr "" #: ../src/viktrwlayer.c:3328 msgid "View All _Routes" msgstr "" #: ../src/viktrwlayer.c:3333 msgid "View All _Waypoints" msgstr "" #: ../src/viktrwlayer.c:3338 msgid "_Goto Center of Layer" msgstr "" #: ../src/viktrwlayer.c:3344 ../src/viktrwlayer.c:6199 msgid "Goto _Waypoint..." msgstr "Vai al Punto di Transito... (_W)" #: ../src/viktrwlayer.c:3350 msgid "_Export Layer" msgstr "_Esporta livello" #: ../src/viktrwlayer.c:3356 msgid "Export as GPS_Point..." msgstr "Esporta come GPS_Point..." #: ../src/viktrwlayer.c:3361 msgid "Export as GPS_Mapper..." msgstr "Esporta come GPS_Mapper..." #: ../src/viktrwlayer.c:3366 msgid "Export as _GPX..." msgstr "Esporta come _GPX..." #: ../src/viktrwlayer.c:3371 msgid "Export as _KML..." msgstr "Esporta come _KML..." #: ../src/viktrwlayer.c:3376 msgid "Open with External Program_1: " msgstr "Apri con Programma Esterno_1: " #: ../src/viktrwlayer.c:3383 msgid "Open with External Program_2: " msgstr "Apri con Programma Esterno_2: " #: ../src/viktrwlayer.c:3391 ../src/vikwindow.c:3145 msgid "_New" msgstr "_Nuovo" #: ../src/viktrwlayer.c:3397 msgid "New _Waypoint..." msgstr "" #: ../src/viktrwlayer.c:3403 msgid "New _Track" msgstr "" #: ../src/viktrwlayer.c:3411 msgid "New _Route" msgstr "" #: ../src/viktrwlayer.c:3420 ../src/viktrwlayer.c:6597 msgid "Geotag _Images..." msgstr "_Immagini Georeferenziate..." #: ../src/viktrwlayer.c:3427 msgid "_Acquire" msgstr "" #: ../src/viktrwlayer.c:3433 ../src/vikwindow.c:3150 msgid "From _GPS..." msgstr "Da _GPS..." #: ../src/viktrwlayer.c:3439 msgid "From Google _Directions..." msgstr "" #: ../src/viktrwlayer.c:3446 msgid "From _OSM Traces..." msgstr "Dalle Tracce _OSM..." #: ../src/viktrwlayer.c:3451 msgid "From _My OSM Traces..." msgstr "" #: ../src/viktrwlayer.c:3459 ../src/vikwindow.c:3166 msgid "From _Wikipedia Waypoints" msgstr "" #: ../src/viktrwlayer.c:3465 msgid "Within _Layer Bounds" msgstr "Dentro i Confini dei _Livelli" #: ../src/viktrwlayer.c:3471 msgid "Within _Current View" msgstr "Dentro la Vista _Corrente" #: ../src/viktrwlayer.c:3479 msgid "From Geo_caching..." msgstr "Da Geo_caching..." #: ../src/viktrwlayer.c:3486 ../src/vikwindow.c:3163 msgid "From Geotagged _Images..." msgstr "Dalle _Immagini Georeferenziate..." #: ../src/viktrwlayer.c:3492 msgid "From _File..." msgstr "" #: ../src/viktrwlayer.c:3498 ../src/viktrwlayer.c:6542 msgid "_Upload" msgstr "" #: ../src/viktrwlayer.c:3504 msgid "Upload to _GPS..." msgstr "" #: ../src/viktrwlayer.c:3511 ../src/viktrwlayer.c:6570 msgid "Upload to _OSM..." msgstr "" #: ../src/viktrwlayer.c:3519 msgid "De_lete" msgstr "E_limina" #: ../src/viktrwlayer.c:3525 msgid "Delete All _Tracks" msgstr "Elimina Tutti i _Tracciati" #: ../src/viktrwlayer.c:3531 msgid "Delete Tracks _From Selection..." msgstr "Elimina Tutti i _Tracciati dalla Selezione..." #: ../src/viktrwlayer.c:3537 ../src/viktrwlayer.c:6290 msgid "Delete _All Routes" msgstr "" #: ../src/viktrwlayer.c:3543 ../src/viktrwlayer.c:6296 msgid "_Delete Routes From Selection..." msgstr "" #: ../src/viktrwlayer.c:3549 msgid "Delete All _Waypoints" msgstr "Elimina Tutti i Punti di Transito (_W)" #: ../src/viktrwlayer.c:3555 msgid "Delete Waypoints From _Selection..." msgstr "Elimina i Punti di Transito dalla _Selezione..." #: ../src/viktrwlayer.c:4128 #, c-format msgid "Are you sure you want to delete all tracks in %s?" msgstr "Sei sicuro di voler eliminare tutti i tracciati in %s?" #: ../src/viktrwlayer.c:4138 #, c-format msgid "Are you sure you want to delete all routes in %s?" msgstr "" #: ../src/viktrwlayer.c:4148 #, c-format msgid "Are you sure you want to delete all waypoints in %s?" msgstr "Sei sicuro di voler eliminare tutti i punti di transito in %s?" #: ../src/viktrwlayer.c:4165 #, c-format msgid "Are you sure you want to delete the waypoint \"%s\"" msgstr "Sei sicuro di voler eliminare il punto di transito \"%s\"" #: ../src/viktrwlayer.c:4178 #, c-format msgid "Are you sure you want to delete the track \"%s\"" msgstr "Sei sicuro di voler eliminare il tracciato \"%s\"" #: ../src/viktrwlayer.c:4191 #, c-format msgid "Are you sure you want to delete the route \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4351 ../src/viktrwlayer.c:4922 msgid "" "Converting a track to a route removes extra track data such as segments, " "timestamps, etc...\n" "Do you want to continue?" msgstr "" #: ../src/viktrwlayer.c:4711 msgid "Failed. No other tracks with timestamps in this layer found" msgstr "" "Non riuscito. Non sono stati trovati altri tracciati con le marcature " "temporali in questo livello" #: ../src/viktrwlayer.c:4713 msgid "Failed. No other tracks without timestamps in this layer found" msgstr "" "Non riuscito. Non sono stati trovati altri tracciati senza le marcature " "temporali in questo livello" #: ../src/viktrwlayer.c:4732 msgid "Merge with..." msgstr "Unisci con..." #: ../src/viktrwlayer.c:4733 msgid "Select route to merge with" msgstr "" #: ../src/viktrwlayer.c:4733 msgid "Select track to merge with" msgstr "Selezionare il tracciato con cui unire" #: ../src/viktrwlayer.c:4818 ../src/viktrwlayer.c:4895 msgid "Append Route" msgstr "" #: ../src/viktrwlayer.c:4818 ../src/viktrwlayer.c:4895 msgid "Append Track" msgstr "" #: ../src/viktrwlayer.c:4819 msgid "Select the route to append after the current route" msgstr "" #: ../src/viktrwlayer.c:4820 msgid "Select the track to append after the current track" msgstr "" #: ../src/viktrwlayer.c:4896 msgid "Select the track to append after the current route" msgstr "" #: ../src/viktrwlayer.c:4897 msgid "Select the route to append after the current track" msgstr "" #: ../src/viktrwlayer.c:4957 #, c-format msgid "%d segment merged" msgid_plural "%d segments merged" msgstr[0] "" msgstr[1] "" #: ../src/viktrwlayer.c:4973 msgid "Failed. This track does not have timestamp" msgstr "Fallito. Questo tracciato non ha un timestamp" #: ../src/viktrwlayer.c:4985 msgid "Failed. No other track in this layer has timestamp" msgstr "Fallito. Nessun altro tracciato in questo livello ha un timestamp" #: ../src/viktrwlayer.c:4992 msgid "Merge Threshold..." msgstr "Soglia di unione..." #: ../src/viktrwlayer.c:4993 msgid "Merge when time between tracks less than:" msgstr "Unisci quando il tempo tra i tracciati è minore di:" #: ../src/viktrwlayer.c:5128 msgid "Split Threshold..." msgstr "Soglia di divisione..." #: ../src/viktrwlayer.c:5129 msgid "Split when time between trackpoints exceeds:" msgstr "Dividi quando il tempo tra i trackpoint supera i:" #: ../src/viktrwlayer.c:5205 msgid "Split Every Nth Point" msgstr "Dividi Ogni Punto Nord" #: ../src/viktrwlayer.c:5206 msgid "Split on every Nth point:" msgstr "Dividi su Ogni Punto Nord:" #: ../src/viktrwlayer.c:5312 msgid "Can not split track as it has no segments" msgstr "" #: ../src/viktrwlayer.c:5340 ../src/viktrwlayer.c:5370 #, c-format msgid "Deleted %ld point" msgid_plural "Deleted %ld points" msgstr[0] "" msgstr[1] "" #: ../src/viktrwlayer.c:5531 msgid "Internal Error in vik_trw_layer_uniquify_tracks" msgstr "" #: ../src/viktrwlayer.c:5588 ../src/viktrwlayer.c:5635 #: ../src/viktrwlayer.c:5814 msgid "" "Multiple entries with the same name exist. This method only works with " "unique names. Force unique names now?" msgstr "" #: ../src/viktrwlayer.c:5599 msgid "No tracks found" msgstr "Nessun tracciato trovato" #: ../src/viktrwlayer.c:5607 ../src/viktrwlayer.c:5654 #: ../src/viktrwlayer.c:5834 msgid "Delete Selection" msgstr "Elimina Selezione" #: ../src/viktrwlayer.c:5608 msgid "Select tracks to delete" msgstr "Seleziona i tracciati da eliminare" #: ../src/viktrwlayer.c:5646 msgid "No routes found" msgstr "" #: ../src/viktrwlayer.c:5655 msgid "Select routes to delete" msgstr "" #: ../src/viktrwlayer.c:5761 msgid "Internal Error in vik_trw_layer_uniquify_waypoints" msgstr "" #: ../src/viktrwlayer.c:5824 msgid "No waypoints found" msgstr "Waypoint non trovati" #: ../src/viktrwlayer.c:5835 msgid "Select waypoints to delete" msgstr "Seleziona i punti di transito da eliminare" #: ../src/viktrwlayer.c:5896 #, c-format msgid "" "A waypoint with the name \"%s\" already exists. Really rename to the same " "name?" msgstr "" #: ../src/viktrwlayer.c:5926 #, c-format msgid "" "A track with the name \"%s\" already exists. Really rename to the same name?" msgstr "" #: ../src/viktrwlayer.c:5963 #, c-format msgid "" "A route with the name \"%s\" already exists. Really rename to the same name?" msgstr "" #: ../src/viktrwlayer.c:6085 ../src/viktrwlayer.c:6337 msgid "_Goto" msgstr "V_ai a" #: ../src/viktrwlayer.c:6104 msgid "_Visit Geocache Webpage" msgstr "_Visita la pagina Web di Geocache" #: ../src/viktrwlayer.c:6123 msgid "_Show Picture..." msgstr "Mostra Fotografia... (_S)" #: ../src/viktrwlayer.c:6131 msgid "Update Geotag on _Image" msgstr "Aggiorna Georeferenza sull'_Immagine" #: ../src/viktrwlayer.c:6137 msgid "_Update" msgstr "Aggiorna (_U)" #: ../src/viktrwlayer.c:6142 msgid "Update and _Keep File Timestamp" msgstr "Aggiorna e Mantieni il File dell'Orario Impresso (_K)" #: ../src/viktrwlayer.c:6153 msgid "Visit _Webpage" msgstr "" #: ../src/viktrwlayer.c:6184 msgid "_New Waypoint..." msgstr "_Nuovo Punto di Transito..." #: ../src/viktrwlayer.c:6193 msgid "_View All Waypoints" msgstr "_Visualizza Tutti i Punti di Transito" #: ../src/viktrwlayer.c:6205 msgid "Delete _All Waypoints" msgstr "Elmina Tutti i Waypoint (_A)" #: ../src/viktrwlayer.c:6211 msgid "_Delete Waypoints From Selection..." msgstr "Elimina (_D) i Punti di Transito dalla Selezione..." #: ../src/viktrwlayer.c:6233 msgid "_View All Tracks" msgstr "_Visualizza Tutti i Tracciati" #: ../src/viktrwlayer.c:6239 msgid "_New Track" msgstr "" #: ../src/viktrwlayer.c:6247 msgid "Delete _All Tracks" msgstr "Elimina Tutti i Tracciati (_A)" #: ../src/viktrwlayer.c:6253 msgid "_Delete Tracks From Selection..." msgstr "Elimina (_D) i Tracciati dalla Selezione..." #: ../src/viktrwlayer.c:6276 msgid "_View All Routes" msgstr "" #: ../src/viktrwlayer.c:6282 msgid "_New Route" msgstr "" #: ../src/viktrwlayer.c:6327 msgid "_View Track" msgstr "_Visualizza tracciato" #: ../src/viktrwlayer.c:6329 msgid "_View Route" msgstr "" #: ../src/viktrwlayer.c:6343 msgid "_Startpoint" msgstr "Punto _iniziale" #: ../src/viktrwlayer.c:6349 msgid "\"_Center\"" msgstr "\"_Centra\"" #: ../src/viktrwlayer.c:6355 msgid "_Endpoint" msgstr "Punto _finale" #: ../src/viktrwlayer.c:6361 msgid "_Highest Altitude" msgstr "Altitudine Più Alta (_H)" #: ../src/viktrwlayer.c:6367 msgid "_Lowest Altitude" msgstr "Altitudine Più Bassa (_L)" #: ../src/viktrwlayer.c:6375 msgid "_Maximum Speed" msgstr "Velocità _massima" #: ../src/viktrwlayer.c:6384 msgid "Co_mbine" msgstr "" #: ../src/viktrwlayer.c:6392 msgid "_Merge By Time..." msgstr "Unisci per Orario... (_M)" #: ../src/viktrwlayer.c:6397 msgid "Merge _Segments" msgstr "" #: ../src/viktrwlayer.c:6403 msgid "Merge _With Other Tracks..." msgstr "Unisci Con (_W) Altri Tracciati..." #: ../src/viktrwlayer.c:6409 msgid "_Append Track..." msgstr "" #: ../src/viktrwlayer.c:6411 msgid "_Append Route..." msgstr "" #: ../src/viktrwlayer.c:6417 msgid "Append _Route..." msgstr "" #: ../src/viktrwlayer.c:6419 msgid "Append _Track..." msgstr "" #: ../src/viktrwlayer.c:6426 msgid "_Split" msgstr "" #: ../src/viktrwlayer.c:6434 msgid "_Split By Time..." msgstr "Dividi per Orario... (_S)" #. ATM always enable this entry - don't want to have to analyse the track before displaying the menu - to keep the menu speedy #: ../src/viktrwlayer.c:6440 msgid "Split Se_gments" msgstr "" #: ../src/viktrwlayer.c:6446 msgid "Split By _Number of Points..." msgstr "Dividi per _Numero di Punti..." #: ../src/viktrwlayer.c:6451 msgid "Split at _Trackpoint" msgstr "" #: ../src/viktrwlayer.c:6460 msgid "Delete Poi_nts" msgstr "" #: ../src/viktrwlayer.c:6466 msgid "Delete Points With The Same _Position" msgstr "" #: ../src/viktrwlayer.c:6471 msgid "Delete Points With The Same _Time" msgstr "" #: ../src/viktrwlayer.c:6477 msgid "_Reverse Track" msgstr "Inverti il Tracciato (_R)" #: ../src/viktrwlayer.c:6479 msgid "_Reverse Route" msgstr "" #: ../src/viktrwlayer.c:6488 msgid "Down_load Maps Along Track..." msgstr "Scarica _le Mappe Lungo il Tracciato..." #: ../src/viktrwlayer.c:6490 msgid "Down_load Maps Along Route..." msgstr "" #: ../src/viktrwlayer.c:6497 msgid "_Apply DEM Data" msgstr "_Applica dati DEM" #: ../src/viktrwlayer.c:6504 msgid "_Export Track as GPX..." msgstr "" #: ../src/viktrwlayer.c:6506 msgid "_Export Route as GPX..." msgstr "" #: ../src/viktrwlayer.c:6513 msgid "E_xtend Track End" msgstr "Estendi il Tracciato fino al Termine (_x)" #: ../src/viktrwlayer.c:6515 msgid "E_xtend Route End" msgstr "" #: ../src/viktrwlayer.c:6522 msgid "C_onvert to a Route" msgstr "" #: ../src/viktrwlayer.c:6524 msgid "C_onvert to a Track" msgstr "" #: ../src/viktrwlayer.c:6532 msgid "Extend _Using Route Finder" msgstr "Estendi _Usando il Percorso di Ricerca" #: ../src/viktrwlayer.c:6548 msgid "_Upload to GPS..." msgstr "" #: ../src/viktrwlayer.c:6559 msgid "_View Google Directions" msgstr "_Visualizza Direzioni Google" #: ../src/viktrwlayer.c:6579 msgid "Use with _Filter" msgstr "Utilizza con _filtro" #: ../src/viktrwlayer.c:6612 msgid "_Edit Trackpoint" msgstr "Modifica il Punto del Tracciato (_E)" #: ../src/viktrwlayer.c:7524 #, c-format msgid " - Gain %dm:Loss %dm" msgstr " - Miglioramento %dm:Perdita %dm" #: ../src/viktrwlayer.c:7526 #, c-format msgid " - Gain %dft:Loss %dft" msgstr " - Miglioramento %dft:Perdita %dft" #: ../src/viktrwlayer.c:7531 #, c-format msgid " - Bearing %3.1f° - Step %s" msgstr "" #: ../src/viktrwlayer.c:8124 #, c-format msgid "Could not launch %s to open file." msgstr "Impossibile lanciare %s per aprire il file." #: ../src/viktrwlayer.c:8205 #, c-format msgid "Creating %d Image Thumbnails..." msgstr "Creazione di %d miniature..." #: ../src/viktrwlayer.c:8524 msgid "No map layer in use. Create one first" msgstr "Nessun livello di mappa in uso. Creane uno prima" #: ../src/viktrwlayer_propwin.c:898 ../src/viktrwlayer_propwin.c:1155 #, c-format msgid "%.1f kph" msgstr "%.1f km/h" #: ../src/viktrwlayer_propwin.c:901 ../src/viktrwlayer_propwin.c:1158 #, c-format msgid "%.1f mph" msgstr "%.1f miglia/h" #: ../src/viktrwlayer_propwin.c:904 ../src/viktrwlayer_propwin.c:1161 #, c-format msgid "%.1f knots" msgstr "%.1f nodi" #. VIK_UNITS_SPEED_METRES_PER_SECOND: #: ../src/viktrwlayer_propwin.c:908 ../src/viktrwlayer_propwin.c:1165 #, c-format msgid "%.1f m/s" msgstr "%.1f m/s" #: ../src/viktrwlayer_propwin.c:1745 #, c-format msgid "%.1f miles" msgstr "%.1f miglia" #: ../src/viktrwlayer_propwin.c:1747 #, c-format msgid "%.1f km" msgstr "%.1f km" #: ../src/viktrwlayer_propwin.c:2681 msgid "Failed spliting track. Track unchanged" msgstr "Divisione del tracciato non riuscita. Tracciato invariato" #: ../src/viktrwlayer_propwin.c:2779 ../src/viktrwlayer_propwin.c:3178 #, c-format msgid "%s - Track Properties" msgstr "%s - Proprietà del tracciato" #: ../src/viktrwlayer_propwin.c:2784 msgid "Split at _Marker" msgstr "Dividi al _Marcatore" #: ../src/viktrwlayer_propwin.c:2785 msgid "Split _Segments" msgstr "Dividi _Segmenti" #: ../src/viktrwlayer_propwin.c:2786 msgid "_Reverse" msgstr "Inverti (_R)" #: ../src/viktrwlayer_propwin.c:2787 msgid "_Delete Dupl." msgstr "Elimina _Duplicati" #: ../src/viktrwlayer_propwin.c:2813 msgid "Comment:" msgstr "Commento:" #: ../src/viktrwlayer_propwin.c:2814 msgid "Description:" msgstr "" #: ../src/viktrwlayer_propwin.c:2815 msgid "Track Length:" msgstr "Lunghezza tracciato:" #: ../src/viktrwlayer_propwin.c:2816 msgid "Trackpoints:" msgstr "Trackpoints:" #: ../src/viktrwlayer_propwin.c:2817 msgid "Segments:" msgstr "Segmenti:" #: ../src/viktrwlayer_propwin.c:2818 msgid "Duplicate Points:" msgstr "Punti duplicati:" #: ../src/viktrwlayer_propwin.c:2819 msgid "Max Speed:" msgstr "Velocità massima:" #: ../src/viktrwlayer_propwin.c:2820 msgid "Avg. Speed:" msgstr "Velocità media:" #: ../src/viktrwlayer_propwin.c:2821 msgid "Moving Avg. Speed:" msgstr "Velocità Media di Spostamento:" #: ../src/viktrwlayer_propwin.c:2822 msgid "Avg. Dist. Between TPs:" msgstr "Distanza media fra TrackPoint:" #: ../src/viktrwlayer_propwin.c:2823 msgid "Elevation Range:" msgstr "Intervallo di quota:" #: ../src/viktrwlayer_propwin.c:2824 msgid "Total Elevation Gain/Loss:" msgstr "Dislivello totale/Perdita:" #: ../src/viktrwlayer_propwin.c:2825 msgid "Start:" msgstr "Inizio:" #: ../src/viktrwlayer_propwin.c:2826 msgid "End:" msgstr "Fine:" #: ../src/viktrwlayer_propwin.c:2827 msgid "Duration:" msgstr "Durata:" #: ../src/viktrwlayer_propwin.c:2828 msgid "Color:" msgstr "" #: ../src/viktrwlayer_propwin.c:2877 ../src/viktrwlayer_propwin.c:2901 #: ../src/viktrwlayer_propwin.c:2929 ../src/viktrwlayer_propwin.c:2966 #: ../src/viktrwlayer_propwin.c:2984 ../src/viktrwlayer_propwin.c:3034 #: ../src/viktrwlayer_propwin.c:3035 ../src/viktrwlayer_propwin.c:3036 #: ../src/viktrwlayer_propwin.c:3062 ../src/viktrwlayer_propwin.c:3063 #: ../src/viktrwlayer_propwin.c:3078 ../src/viktrwlayer_propwin.c:3079 #: ../src/viktrwlayer_propwin.c:3092 ../src/viktrwlayer_propwin.c:3093 #: ../src/viktrwlayer_propwin.c:3106 ../src/viktrwlayer_propwin.c:3107 #: ../src/viktrwlayer_propwin.c:3120 ../src/viktrwlayer_propwin.c:3121 #: ../src/viktrwlayer_propwin.c:3134 ../src/viktrwlayer_propwin.c:3135 #, c-format msgid "No Data" msgstr "Nessun dato" #: ../src/viktrwlayer_propwin.c:3031 #, c-format msgid "%d minutes" msgstr "%d minuti" #: ../src/viktrwlayer_propwin.c:3058 msgid "Statistics" msgstr "Statistiche" #: ../src/viktrwlayer_propwin.c:3064 msgid "Show D_EM" msgstr "Mostra D_EM" #: ../src/viktrwlayer_propwin.c:3065 ../src/viktrwlayer_propwin.c:3080 #: ../src/viktrwlayer_propwin.c:3094 ../src/viktrwlayer_propwin.c:3136 msgid "Show _GPS Speed" msgstr "Mostra la Velocità _GPS" #: ../src/viktrwlayer_propwin.c:3067 ../src/viktrwlayer_propwin.c:3082 #: ../src/viktrwlayer_propwin.c:3110 ../src/viktrwlayer_propwin.c:3138 msgid "Track Distance:" msgstr "Distanza tracciato:" #: ../src/viktrwlayer_propwin.c:3068 ../src/viktrwlayer_propwin.c:3125 msgid "Track Height:" msgstr "Altezza del Tracciato:" #: ../src/viktrwlayer_propwin.c:3073 msgid "Elevation-distance" msgstr "Elevazione-distanza" #: ../src/viktrwlayer_propwin.c:3083 msgid "Track Gradient:" msgstr "" #: ../src/viktrwlayer_propwin.c:3087 msgid "Gradient-distance" msgstr "" #: ../src/viktrwlayer_propwin.c:3096 ../src/viktrwlayer_propwin.c:3111 #: ../src/viktrwlayer_propwin.c:3124 msgid "Track Time:" msgstr "Durata tracciato:" #: ../src/viktrwlayer_propwin.c:3097 ../src/viktrwlayer_propwin.c:3139 msgid "Track Speed:" msgstr "Velocità del Tracciato:" #: ../src/viktrwlayer_propwin.c:3101 msgid "Speed-time" msgstr "Velocità-tempo" #: ../src/viktrwlayer_propwin.c:3108 ../src/viktrwlayer_propwin.c:3122 msgid "Show S_peed" msgstr "Mostra la Velocità (_p)" #: ../src/viktrwlayer_propwin.c:3115 msgid "Distance-time" msgstr "" #: ../src/viktrwlayer_propwin.c:3129 msgid "Elevation-time" msgstr "" #: ../src/viktrwlayer_propwin.c:3143 msgid "Speed-distance" msgstr "" #: ../src/viktrwlayer_tpwin.c:118 msgid "Part of Track:" msgstr "Parte del tracciato:" #: ../src/viktrwlayer_tpwin.c:119 msgid "Latitude:" msgstr "Latitudine:" #: ../src/viktrwlayer_tpwin.c:120 msgid "Longitude:" msgstr "Longitudine:" #: ../src/viktrwlayer_tpwin.c:121 msgid "Altitude:" msgstr "Altitudine:" #: ../src/viktrwlayer_tpwin.c:122 msgid "Timestamp:" msgstr "Timestamp:" #: ../src/viktrwlayer_tpwin.c:123 msgid "Time:" msgstr "Tempo:" #: ../src/viktrwlayer_tpwin.c:124 msgid "Distance Difference:" msgstr "Differenza di distanza:" #: ../src/viktrwlayer_tpwin.c:125 msgid "Time Difference:" msgstr "Differenza di tempo:" #: ../src/viktrwlayer_tpwin.c:126 msgid "\"Speed\" Between:" msgstr "\"Velocità\" tra:" #: ../src/viktrwlayer_tpwin.c:127 msgid "VDOP:" msgstr "VDOP:" #: ../src/viktrwlayer_tpwin.c:128 msgid "HDOP:" msgstr "HDOP:" #: ../src/viktrwlayer_tpwin.c:129 msgid "PDOP:" msgstr "PDOP:" #: ../src/viktrwlayer_tpwin.c:130 msgid "SAT/FIX:" msgstr "SAT/FIX:" #: ../src/viktrwlayer_tpwin.c:139 msgid "Trackpoint" msgstr "Trackpoint" #: ../src/viktrwlayer_tpwin.c:142 msgid "_Insert After" msgstr "_Inserisci dopo" #: ../src/viktrwlayer_tpwin.c:144 msgid "Split Here" msgstr "Suddividi qui" #: ../src/viktrwlayer_geotag.c:446 #, c-format msgid "Geotagging %d Images..." msgstr "Georeferenziate %d immagini..." #: ../src/viktrwlayer_geotag.c:510 msgid "Geotag Images" msgstr "Georeferenzia le Immagini" #: ../src/viktrwlayer_geotag.c:516 msgid "Images" msgstr "Immagini" #: ../src/viktrwlayer_geotag.c:520 msgid "Overwrite Existing Waypoints:" msgstr "" #: ../src/viktrwlayer_geotag.c:523 msgid "Overwrite Existing GPS Information:" msgstr "Sovrascrivi le Informazioni GPS Esistenti:" #: ../src/viktrwlayer_geotag.c:525 msgid "Keep File Modification Timestamp:" msgstr "Mantieni il File di Modifica dell'Ora Impressa" #: ../src/viktrwlayer_geotag.c:555 msgid "Create Waypoints:" msgstr "Crea i Punti di Transito:" #: ../src/viktrwlayer_geotag.c:563 msgid "Write EXIF:" msgstr "Scrittura EXIF:" #: ../src/viktrwlayer_geotag.c:575 msgid "Interpolate Between Track Segments:" msgstr "Interpolazione Tra i Segmenti del Tracciato:" #: ../src/viktrwlayer_geotag.c:579 msgid "Image Time Offset (Seconds):" msgstr "" #: ../src/viktrwlayer_geotag.c:581 msgid "" "The number of seconds to ADD to the photos time to make it match the GPS " "data. Calculate this with (GPS - Photo). Can be negative or positive. Useful " "to adjust times when a camera's timestamp was incorrect." msgstr "" "Il numero di secondi da aggiungere all'orario delle foto in modo che " "corrisponda ai dati GPS. Questo è calcolato con (GPS - Photo). Può essere " "positivo o negativo. Utile per regolare gli orari quando quelli impressi da " "una fotocamera non erano corretti." #: ../src/viktrwlayer_geotag.c:584 msgid "Image Timezone:" msgstr "Fuso Orario dell'Immagine:" #: ../src/viktrwlayer_geotag.c:586 msgid "" "The timezone that was used when the images were created. For example, if a " "camera is set to AWST or +8:00 hours. Enter +8:00 here so that the correct " "adjustment to the images' time can be made. GPS data is always in UTC." msgstr "" "Il fuso orario che è stato utilizzato quando le immagini sono state create. " "Ad esempio, se una fotocamera è impostata su AWST o +8:00 ore. Inserisci qui " "+8:00 in modo che possa essere fatta la corretta regolazione sull'ora delle " "immagini. I dati GPS sono sempre in UTC." #: ../src/viktrwlayer_geotag.c:590 #, c-format msgid "Using track: %s" msgstr "Utilizza il tracciato: %s" #: ../src/viktrwlayer_geotag.c:592 #, c-format msgid "Using all tracks in: %s" msgstr "Utilizza tutti i tracciati: %s" #: ../src/vikstatus.c:105 msgid "Current zoom level. Click to select a new one." msgstr "" #: ../src/vikwaypoint.c:34 msgid "Waypoint" msgstr "" #. TODO get rid of this as this is unnecessary duplication... #: ../src/vikwindow.c:221 msgid "Pan" msgstr "Scorri" #: ../src/vikwindow.c:221 msgid "Zoom" msgstr "Zoom" #: ../src/vikwindow.c:221 msgid "Ruler" msgstr "Righello" #: ../src/vikwindow.c:221 msgid "Select" msgstr "Seleziona" #. Create tooltip #: ../src/vikwindow.c:440 msgid "Select zoom level" msgstr "" #: ../src/vikwindow.c:645 #, c-format msgid "" "Do you want to save the changes you made to the document \"%s\"?\n" "\n" "Your changes will be lost if you don't save them." msgstr "" "Desideri salvare le modifiche effettuate al documento \"%s\"?\n" "\n" "Le modifiche effettuate saranno perse se non salvate." #: ../src/vikwindow.c:649 msgid "Don't Save" msgstr "Non salvare" #: ../src/vikwindow.c:696 msgid "mpp" msgstr "mpp" #: ../src/vikwindow.c:696 msgid "pixelfact" msgstr "pixelfact" #: ../src/vikwindow.c:861 #, c-format msgid "%s %s %dm" msgstr "%s %s %dm" #: ../src/vikwindow.c:863 #, c-format msgid "%s %s %dft" msgstr "%s %s %dft" #: ../src/vikwindow.c:866 #, c-format msgid "%s %s" msgstr "%s %s" #. NB Ctrl+Shift+R is used for Refresh (deemed more important), so use 'U' instead #: ../src/vikwindow.c:1254 msgid "_Ruler" msgstr "_Righello" #: ../src/vikwindow.c:1254 msgid "Ruler Tool" msgstr "Strumento righello" #: ../src/vikwindow.c:1502 ../src/vikwindow.c:3138 msgid "_Zoom" msgstr "_Zoom" #: ../src/vikwindow.c:1502 msgid "Zoom Tool" msgstr "Strumento di Zoom" #: ../src/vikwindow.c:1547 ../src/vikwindow.c:3139 msgid "_Pan" msgstr "_Scorri" #: ../src/vikwindow.c:1547 msgid "Pan Tool" msgstr "Strumento di scorrimento" #: ../src/vikwindow.c:1664 msgid "_Select" msgstr "_Seleziona" #: ../src/vikwindow.c:1664 msgid "Select Tool" msgstr "Strumento di Selezione" #: ../src/vikwindow.c:1809 msgid "You must select a layer to show its properties." msgstr "Selezionare un livello per vederne le proprietà." #. No error to show, so unlikely this will get called #: ../src/vikwindow.c:1824 msgid "The help system is not available." msgstr "" #. Main error path #: ../src/vikwindow.c:1827 #, c-format msgid "" "Help is not available because: %s.\n" "Ensure a Mime Type ghelp handler program is installed (e.g. yelp)." msgstr "" #: ../src/vikwindow.c:1850 msgid "You must select a layer to delete." msgstr "Selezionare un livello per l'eliminazione." #: ../src/vikwindow.c:2087 msgid "Untitled" msgstr "Senza titolo" #: ../src/vikwindow.c:2194 #, c-format msgid "Unable to add '%s' to the list of recently used documents" msgstr "Impossibile aggiungere \"%s\" alla lista dei documenti recenti." #: ../src/vikwindow.c:2208 msgid "The file you requested could not be opened." msgstr "Il file richiesto non può essere aperto." #: ../src/vikwindow.c:2211 msgid "" "GPSBabel is required to load files of this type or GPSBabel encountered " "problems." msgstr "" "Per caricare i file di questo tipo è richiesto GPSBabel oppure GPSBabel ha " "rilevato dei problemi." #: ../src/vikwindow.c:2214 #, c-format msgid "Unable to load malformed GPX file %s" msgstr "" #: ../src/vikwindow.c:2217 #, c-format msgid "Unsupported file type for %s" msgstr "Tipo di file non supportato per %s" #. Since we can process .vik files with issues just show a warning in the status bar #. Not that a user can do much about it... or tells them what this issue is yet... #: ../src/vikwindow.c:2223 #, c-format msgid "WARNING: issues encountered loading %s" msgstr "" #: ../src/vikwindow.c:2278 msgid "Please select a GPS data file to open. " msgstr "Selezionare un archivio GPS da aprire. " #: ../src/vikwindow.c:2288 msgid "Geocaching" msgstr "Geocaching" #: ../src/vikwindow.c:2294 msgid "Google Earth" msgstr "Google Earth" #: ../src/vikwindow.c:2299 msgid "GPX" msgstr "GPX" #: ../src/vikwindow.c:2304 ../src/vikwindow.c:2387 #: ../src/viking.desktop.in.h:1 msgid "Viking" msgstr "Viking" #: ../src/vikwindow.c:2374 msgid "Save as Viking File." msgstr "Salva come file di Viking." #. Try harder... #: ../src/vikwindow.c:2619 ../src/vikwindow.c:2625 msgid "Generating image file..." msgstr "" #: ../src/vikwindow.c:2647 msgid "" "Failed to generate internal image.\n" "\n" "Try creating a smaller image." msgstr "" #: ../src/vikwindow.c:2655 msgid "Failed to generate image file." msgstr "" #. Success #: ../src/vikwindow.c:2660 msgid "Image file generated." msgstr "" #: ../src/vikwindow.c:2764 msgid "" "Viewable region outside allowable pixel size bounds for image. Clipping " "width/height values." msgstr "" "Regione visibile fuori dal bordo della dimensione pixel consentita per " "l'immagine. Regolazione dei valori larghezza/altezza." #: ../src/vikwindow.c:2789 #, c-format msgid "Total area: %ldm x %ldm (%.3f sq. km)" msgstr "Area Totale: %ldm x %ldm (%.3f kmq)" #: ../src/vikwindow.c:2792 #, c-format msgid "Total area: %ldm x %ldm (%.3f sq. miles)" msgstr "Area totale: %ldm x %ldm (%.3f miglia quadrate)" #: ../src/vikwindow.c:2813 msgid "Save Image" msgstr "Salva immagine" #: ../src/vikwindow.c:2834 msgid "PNG" msgstr "" #: ../src/vikwindow.c:2857 msgid "You must be in UTM mode to use this feature" msgstr "Si deve essere in modalità UTM per utilizzare questa funzione" #: ../src/vikwindow.c:2862 msgid "Choose a directory to hold images" msgstr "Selezionare una cartella dove conservare le immagini" #. todo: default for answers inside VikWindow or static (thruout instance) #: ../src/vikwindow.c:2883 msgid "Save to Image File" msgstr "Salva come file immagine" #: ../src/vikwindow.c:2900 msgid "Width (pixels):" msgstr "Larghezza (pixel):" #: ../src/vikwindow.c:2902 msgid "Height (pixels):" msgstr "Altezza (pixel):" #: ../src/vikwindow.c:2905 msgid "" "WARNING: USING LARGE IMAGES OVER 10000x10000\n" "MAY CRASH THE PROGRAM!" msgstr "" #: ../src/vikwindow.c:2907 msgid "Zoom (meters per pixel):" msgstr "Zoom (metri per pixel):" #: ../src/vikwindow.c:2921 msgid "Area in current viewable window" msgstr "Area nella finestra visibile" #: ../src/vikwindow.c:2931 msgid "Save as PNG" msgstr "Salva come PNG" #: ../src/vikwindow.c:2932 msgid "Save as JPEG" msgstr "Salva come JPEG" #: ../src/vikwindow.c:2954 msgid "East-west image tiles:" msgstr "Celle dell'immagine est-ovest:" #: ../src/vikwindow.c:2956 msgid "North-south image tiles:" msgstr "Celle dell'immagine nord-sud:" #: ../src/vikwindow.c:3097 msgid "Choose a background color" msgstr "Selezionare un colore di sfondo" #: ../src/vikwindow.c:3113 msgid "Choose a track highlight color" msgstr "Scegli un colore di evidenziazione del tracciato" #: ../src/vikwindow.c:3134 msgid "_File" msgstr "_File" #: ../src/vikwindow.c:3135 msgid "_Edit" msgstr "_Modifica" #: ../src/vikwindow.c:3136 msgid "_View" msgstr "_Visualizza" #: ../src/vikwindow.c:3137 msgid "_Show" msgstr "Mo_stra" #: ../src/vikwindow.c:3140 msgid "_Layers" msgstr "_Livelli" #: ../src/vikwindow.c:3141 msgid "_Tools" msgstr "S_trumenti" #: ../src/vikwindow.c:3142 msgid "_Webtools" msgstr "_Strumenti Web" #: ../src/vikwindow.c:3143 ../src/vikwindow.c:3206 msgid "_Help" msgstr "Aiuto (_H)" #: ../src/vikwindow.c:3145 msgid "New file" msgstr "Nuovo file" #: ../src/vikwindow.c:3146 msgid "_Open..." msgstr "_Apri..." #: ../src/vikwindow.c:3146 msgid "Open a file" msgstr "Apri un file" #: ../src/vikwindow.c:3147 msgid "Open _Recent File" msgstr "Apri file _recente" #: ../src/vikwindow.c:3148 msgid "Append _File..." msgstr "A_ppendi file..." #: ../src/vikwindow.c:3148 msgid "Append data from a different file" msgstr "Appende i dati da un file differente" #: ../src/vikwindow.c:3149 msgid "A_cquire" msgstr "A_cquisisci" #: ../src/vikwindow.c:3150 msgid "Transfer data from a GPS device" msgstr "Trasferisce i dati da un dispositivo GPS" #: ../src/vikwindow.c:3151 msgid "Import File With GPS_Babel..." msgstr "Importa il File con GPS_Babel..." #: ../src/vikwindow.c:3151 msgid "Import file via GPSBabel converter" msgstr "Importa il file con il convertitore GPSBabel" #: ../src/vikwindow.c:3153 msgid "Google _Directions..." msgstr "Percorsi _di Google..." #: ../src/vikwindow.c:3153 msgid "Get driving directions from Google" msgstr "Ottiene indicazioni di guida da Google" #: ../src/vikwindow.c:3156 msgid "_OSM Traces..." msgstr "Tracce _OSM" #: ../src/vikwindow.c:3156 msgid "Get traces from OpenStreetMap" msgstr "Ottieni tracce da OpenStreetMap" #: ../src/vikwindow.c:3157 msgid "_My OSM Traces..." msgstr "" #: ../src/vikwindow.c:3157 msgid "Get Your Own Traces from OpenStreetMap" msgstr "" #: ../src/vikwindow.c:3160 msgid "Geo_caches..." msgstr "Geo_caches" #: ../src/vikwindow.c:3160 msgid "Get Geocaches from geocaching.com" msgstr "Ottieni Geocaches da geocaching.com" #: ../src/vikwindow.c:3163 msgid "Create waypoints from geotagged images" msgstr "Crea i punti di transito dalle immagini georeferenziate" #: ../src/vikwindow.c:3166 msgid "Create waypoints from Wikipedia items in the current view" msgstr "" #: ../src/vikwindow.c:3168 msgid "_Save" msgstr "_Salva" #: ../src/vikwindow.c:3168 msgid "Save the file" msgstr "Salva il file" #: ../src/vikwindow.c:3169 msgid "Save _As..." msgstr "S_alva con nome..." #: ../src/vikwindow.c:3169 msgid "Save the file under different name" msgstr "Salva il file con un nome differente" #: ../src/vikwindow.c:3170 msgid "_Generate Image File..." msgstr "_Genera file immagine..." #: ../src/vikwindow.c:3170 msgid "Save a snapshot of the workspace into a file" msgstr "Salva una schermata della pagina in un file" #: ../src/vikwindow.c:3171 msgid "Generate _Directory of Images..." msgstr "Genera _cartella di immagini..." #: ../src/vikwindow.c:3171 msgid "FIXME:IMGDIR" msgstr "FIXME:IMGDIR" #: ../src/vikwindow.c:3174 msgid "_Print..." msgstr "Stam_pa" #: ../src/vikwindow.c:3174 msgid "Print maps" msgstr "Stampa mappe" #: ../src/vikwindow.c:3177 msgid "E_xit" msgstr "_Esci" #: ../src/vikwindow.c:3177 msgid "Exit the program" msgstr "Esce dal programma" #: ../src/vikwindow.c:3178 msgid "Save and Exit" msgstr "Salva ed esci" #: ../src/vikwindow.c:3178 msgid "Save and Exit the program" msgstr "Salva ed esce dal programma" #: ../src/vikwindow.c:3180 msgid "Go to the _Default Location" msgstr "Vai alla posizione pre_definita" #: ../src/vikwindow.c:3180 msgid "Go to the default location" msgstr "Va alla posizione predefinita" #: ../src/vikwindow.c:3181 msgid "Go to _Location..." msgstr "Vai alla _posizione..." #: ../src/vikwindow.c:3181 msgid "Go to address/place using text search" msgstr "Va all'indirizzo/posizione usando la ricerca testuale" #: ../src/vikwindow.c:3182 msgid "_Go to Lat/Lon..." msgstr "_Vai a Lat/Lon..." #: ../src/vikwindow.c:3182 msgid "Go to arbitrary lat/lon coordinate" msgstr "Va alle coordinate lat/lon arbitrarie" #: ../src/vikwindow.c:3183 msgid "Go to UTM..." msgstr "Vai a UTM..." #: ../src/vikwindow.c:3183 msgid "Go to arbitrary UTM coordinate" msgstr "Va alle coordinate UTM arbitrarie" #: ../src/vikwindow.c:3184 msgid "_Refresh" msgstr "" #: ../src/vikwindow.c:3184 msgid "Refresh any maps displayed" msgstr "" #: ../src/vikwindow.c:3185 msgid "Set _Highlight Color..." msgstr "Imposta il Colore di Evidenziazione (_H)..." #: ../src/vikwindow.c:3186 msgid "Set Bac_kground Color..." msgstr "Imposta colore dello s_fondo" #: ../src/vikwindow.c:3187 msgid "Zoom _In" msgstr "Aumenta _ingrandimento" #: ../src/vikwindow.c:3188 msgid "Zoom _Out" msgstr "Riduci ingrandiment_o" #: ../src/vikwindow.c:3189 msgid "Zoom _To..." msgstr "Ingran_disci a..." #: ../src/vikwindow.c:3190 msgid "Pan _North" msgstr "Pan _Nord" #: ../src/vikwindow.c:3191 msgid "Pan _East" msgstr "Pan _Est" #: ../src/vikwindow.c:3192 msgid "Pan _South" msgstr "Pan _Sud" #: ../src/vikwindow.c:3193 msgid "Pan _West" msgstr "Pan Ovest (_W)" #: ../src/vikwindow.c:3194 msgid "Background _Jobs" msgstr "_Lavori in background" #: ../src/vikwindow.c:3196 msgid "Cu_t" msgstr "_Taglia" #: ../src/vikwindow.c:3197 msgid "_Copy" msgstr "_Copia" #: ../src/vikwindow.c:3198 msgid "_Paste" msgstr "Inco_lla" #: ../src/vikwindow.c:3199 msgid "_Delete" msgstr "_Elimina" #: ../src/vikwindow.c:3200 msgid "Delete All" msgstr "Elimina tutto" #: ../src/vikwindow.c:3201 msgid "_Flush Map Cache" msgstr "Aggiorna la cache della mappe" #: ../src/vikwindow.c:3202 msgid "_Set the Default Location" msgstr "Imposta la posizione p_redefinita" #: ../src/vikwindow.c:3202 msgid "Set the Default Location to the current position" msgstr "Imposta la posizione predefinita alla posizione corrente" #: ../src/vikwindow.c:3203 msgid "_Preferences" msgstr "_Preferenze" #: ../src/vikwindow.c:3204 msgid "_Properties" msgstr "_Proprietà" #: ../src/vikwindow.c:3207 msgid "_About" msgstr "Inform_azioni" #: ../src/vikwindow.c:3213 msgid "_UTM Mode" msgstr "Modalità _UTM" #: ../src/vikwindow.c:3214 msgid "_Expedia Mode" msgstr "Modalità _Expedia" #: ../src/vikwindow.c:3215 msgid "_Mercator Mode" msgstr "Modalità _Mercatore" #: ../src/vikwindow.c:3216 msgid "Lat_/Lon Mode" msgstr "Modalità Lat_/Lon" #: ../src/vikwindow.c:3220 msgid "Show _Scale" msgstr "Mostra _scala" #: ../src/vikwindow.c:3220 msgid "Show Scale" msgstr "Mostra la scala" #: ../src/vikwindow.c:3221 msgid "Show _Center Mark" msgstr "Mostra il Marcatore _Centrale" #: ../src/vikwindow.c:3221 msgid "Show Center Mark" msgstr "Mostra segnale centrale" #: ../src/vikwindow.c:3222 msgid "Show _Highlight" msgstr "Mostra Evidenziazione (_H)" #: ../src/vikwindow.c:3222 msgid "Show Highlight" msgstr "Mostra Evidenziazione" #: ../src/vikwindow.c:3223 msgid "_Full Screen" msgstr "Sc_hermo intero" #: ../src/vikwindow.c:3223 msgid "Activate full screen mode" msgstr "Attiva la modalità a schermo intero" #: ../src/vikwindow.c:3224 msgid "Show Side _Panel" msgstr "Mostra _pannello laterale" #: ../src/vikwindow.c:3224 msgid "Show Side Panel" msgstr "Mostra il pannello laterale" #: ../src/vikwindow.c:3225 msgid "Show Status_bar" msgstr "Mostra _barra di stato" #: ../src/vikwindow.c:3225 msgid "Show Statusbar" msgstr "Mostra la barra di stato" #: ../src/vikwindow.c:3226 msgid "Show _Toolbar" msgstr "Mostra barra s_trumenti" #: ../src/vikwindow.c:3226 msgid "Show Toolbar" msgstr "Mostra la barra degli strumenti" #: ../src/vikwindow.c:3227 msgid "Show _Menu" msgstr "Mostra _menu" #: ../src/vikwindow.c:3227 msgid "Show Menu" msgstr "Mostra il menu" #: ../src/viking.desktop.in.h:2 msgid "GPS Data Manager" msgstr "Gestore dati GPS" #: ../src/viking.desktop.in.h:3 msgid "Map Based GPS Data Manager (live data capable)." msgstr "Gestore dati GPS basato su mappa (dati in tempo reale)." #: ../src/libjpeg/jpeg-data.c:206 msgid "Data does not follow JPEG specification." msgstr "Il dato non segue la specifica JPEG." #: ../src/libjpeg/jpeg-data.c:291 #, c-format msgid "Path '%s' invalid." msgstr "Percorso '%s' non valido." #: ../src/libjpeg/jpeg-data.c:309 #, c-format msgid "Could not read '%s'." msgstr "Impossibile leggere '%s'." viking-1.4.2/po/zh_TW.po0000644000175000017500000022220512175546146011755 00000000000000msgid "" msgstr "" "Project-Id-Version: Viking\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-02-04 23:29+0100\n" "PO-Revision-Date: 2010-11-17 22:50+0000\n" "Last-Translator: Guilhem Bonnefille \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Launchpad-Export-Date: 2013-03-23 17:12+0000\n" "X-Generator: Launchpad (build 16540)\n" "X-Poedit-Language: Traditional Chinese\n" #: ../src/acquire.c:103 ../src/vikgpslayer.c:1185 msgid "Done." msgstr "完成." #: ../src/acquire.c:114 msgid "No data." msgstr "" #: ../src/acquire.c:154 ../src/acquire.c:404 msgid "Error: acquisition failed." msgstr "" #: ../src/acquire.c:341 msgid "Working..." msgstr "工作中..." #. This shouldn't happen... #: ../src/acquire.c:394 msgid "" "Unable to create command\n" "Acquire method failed." msgstr "" #: ../src/acquire.c:486 msgid "_Filter" msgstr "" #: ../src/acquire.c:501 #, c-format msgid "Filter with %s" msgstr "" #: ../src/acquire.c:518 msgid "Filter" msgstr "" #: ../src/background.c:52 #, c-format msgid "%d items" msgstr "%d 項目" #: ../src/background.c:248 msgid "Job" msgstr "工作" #: ../src/background.c:252 msgid "Progress" msgstr "程式" #: ../src/background.c:268 msgid "Viking Background Jobs" msgstr "Viking 背景工作" #: ../src/bing.c:47 msgid "Bing" msgstr "" #. VIK_GTK_WINDOW_FROM_WIDGET(vp) #: ../src/bingmapsource.c:445 msgid "Bing attribution Loading" msgstr "" #: ../src/clipboard.c:95 msgid "paste failed" msgstr "黏貼失敗" #: ../src/clipboard.c:105 msgid "wrong clipboard data size" msgstr "剪貼版資料大小錯誤" #: ../src/clipboard.c:124 #, c-format msgid "" "The clipboard contains sublayer data for %s layers. You must select a layer " "of this type to paste the clipboard data." msgstr "" #: ../src/clipboard.c:236 msgid "" "In order to paste a waypoint, please select an appropriate layer to paste " "into." msgstr "" #: ../src/dialog.c:52 msgid "Go to Lat/Lon" msgstr "" #: ../src/dialog.c:64 ../src/dialog.c:251 msgid "Latitude:" msgstr "緯度 :" #: ../src/dialog.c:70 ../src/dialog.c:256 msgid "Longitude:" msgstr "經度 :" #: ../src/dialog.c:102 msgid "Go to UTM" msgstr "" #: ../src/dialog.c:115 msgid "Northing:" msgstr "Northing :" #: ../src/dialog.c:121 msgid "Easting:" msgstr "Easting :" #: ../src/dialog.c:128 msgid "Zone:" msgstr "Zone :" #: ../src/dialog.c:131 msgid "Letter:" msgstr "Lettre :" #: ../src/dialog.c:199 msgid "Waypoint Properties" msgstr "" #: ../src/dialog.c:233 msgid "Name:" msgstr "名稱:" #: ../src/dialog.c:261 msgid "Altitude:" msgstr "海拔:" #: ../src/dialog.c:266 msgid "Comment:" msgstr "註釋:" #: ../src/dialog.c:274 ../src/osm-traces.c:437 msgid "Description:" msgstr "Description :" #: ../src/dialog.c:277 msgid "Image:" msgstr "圖片:" #: ../src/dialog.c:282 msgid "Symbol:" msgstr "象徵式:" #: ../src/dialog.c:291 msgid "(none)" msgstr "(無)" #. TODO: other checks (isalpha or whatever ) #: ../src/dialog.c:356 msgid "Please enter a name for the waypoint." msgstr "請為該航點匯入一個名字." #: ../src/dialog.c:529 ../src/geonamessearch.c:243 #: ../src/datasource_osm_my_traces.c:507 msgid "Nothing was selected" msgstr "" #: ../src/dialog.c:537 msgid "Add Route" msgstr "" #: ../src/dialog.c:537 msgid "Add Track" msgstr "添加軌迹:" #: ../src/dialog.c:545 msgid "Route Name:" msgstr "" #: ../src/dialog.c:545 msgid "Track Name:" msgstr "軌迹名稱:" #: ../src/dialog.c:565 msgid "Please enter a name for the track." msgstr "請為該軌迹匯入一個名字." #: ../src/dialog.c:623 msgid "Zoom Factors..." msgstr "縮放引數..." #: ../src/dialog.c:637 msgid "Zoom factor (in meters per pixel):" msgstr "" #: ../src/dialog.c:638 msgid "X (easting): " msgstr "X (東方): " #: ../src/dialog.c:639 msgid "Y (northing): " msgstr "Y (北方): " #: ../src/dialog.c:644 msgid "X and Y zoom factors must be equal" msgstr "X和Y縮放引數必須相等" #: ../src/dialog.c:699 msgid "1 min" msgstr "1 分鐘" #: ../src/dialog.c:700 msgid "1 hour" msgstr "1 小時" #: ../src/dialog.c:701 msgid "1 day" msgstr "1 天" #: ../src/dialog.c:702 msgid "Custom (in minutes):" msgstr "" #: ../src/dialog.c:808 msgid "GPS Data and Topo Analyzer, Explorer, and Manager." msgstr "GPS 資料和拓撲解析、瀏覧、管理工具." #: ../src/dialog.c:809 msgid "" "This program is free software; you can redistribute it and/or modify it " "under the terms of the GNU General Public License as published by the Free " "Software Foundation; either version 2 of the License, or (at your option) " "any later version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT " "ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or " "FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for " "more details.\n" "\n" "You should have received a copy of the GNU General Public License along with " "this program; if not, write to the Free Software Foundation, Inc., 59 Temple " "Place, Suite 330, Boston, MA 02111-1307, USA" msgstr "" #: ../src/dialog.c:837 msgid "Translation is coordinated on http://launchpad.net/viking" msgstr "" #: ../src/dialog.c:845 msgid "Download along track" msgstr "沿着軌迹下載" #: ../src/dialog.c:851 msgid "Map type:" msgstr "地圖類別:" #: ../src/dialog.c:856 msgid "Zoom level:" msgstr "縮放程度:" #: ../src/dialog.c:896 #, c-format msgid "The map data is licensed: %s." msgstr "" #: ../src/dialog.c:899 #, c-format msgid "" "The data provided by '%s' are licensed under the following license: " "%s.\n" "Please, read the license before continuing." msgstr "" #: ../src/dialog.c:904 msgid "Open license" msgstr "" #: ../src/expedia.c:53 msgid "Expedia Street Maps" msgstr "Expedia 街道地圖" #: ../src/expedia.c:81 msgid "Invalid expedia altitude" msgstr "無效的Expedia高度" #: ../src/expedia.c:112 #, c-format msgid "" "Couldn't open EXPEDIA image file (right after successful download! Please " "report and delete image file!): %s" msgstr "" #: ../src/expedia.c:125 #, c-format msgid "" "Couldn't save EXPEDIA image file (right after successful download! Please " "report and delete image file!): %s" msgstr "" #. * #. * See http://www.geonames.org/export/wikipedia-webservice.html#wikipediaBoundingBox #. #. Translators may wish to change this setting as appropriate to get Wikipedia articles in that language #: ../src/geonamessearch.c:46 msgid "en" msgstr "" #: ../src/geonamessearch.c:121 msgid "Search" msgstr "搜索" #: ../src/geonamessearch.c:123 msgid "No entries found!" msgstr "" #. NB could allow columns to be shifted around by doing this after each new #. gtk_tree_view_column_set_reorderable ( column, TRUE ); #. However I don't think is that useful, so I haven't put it in #: ../src/geonamessearch.c:177 ../src/datasource_osm_my_traces.c:425 msgid "Name" msgstr "" #: ../src/geonamessearch.c:182 msgid "Feature" msgstr "" #: ../src/geonamessearch.c:187 ../src/datasource_osm_my_traces.c:440 msgid "Lat/Lon" msgstr "" #: ../src/geonamessearch.c:269 ../src/googlesearch.c:100 msgid "couldn't map temp file" msgstr "" #: ../src/globals.c:44 msgid "Degree format:" msgstr "" #: ../src/globals.c:48 msgid "Distance units:" msgstr "" #: ../src/globals.c:52 msgid "Speed units:" msgstr "" #: ../src/globals.c:56 msgid "Height units:" msgstr "" #: ../src/globals.c:60 msgid "Use large waypoint icons:" msgstr "" #: ../src/globals.c:64 msgid "Default latitude:" msgstr "" #: ../src/globals.c:67 msgid "Default longitude:" msgstr "" #: ../src/globals.c:73 msgid "Alphabetical" msgstr "" #: ../src/globals.c:73 ../src/datasource_osm_my_traces.c:435 msgid "Time" msgstr "" #: ../src/globals.c:76 msgid "KML File Export Units:" msgstr "" #: ../src/globals.c:77 msgid "GPX Track Order:" msgstr "" #: ../src/globals.c:82 msgid "Image Viewer:" msgstr "" #: ../src/globals.c:87 msgid "External GPX Program 1:" msgstr "" #: ../src/globals.c:88 msgid "External GPX Program 2:" msgstr "" #. Defaults for the options are setup here #: ../src/globals.c:96 msgid "General" msgstr "" #. New Tab #: ../src/globals.c:121 msgid "Export/External" msgstr "" #. Webtools #: ../src/google.c:36 msgid "Google" msgstr "" #: ../src/datasource_file.c:59 msgid "Import file with GPSBabel" msgstr "" #: ../src/datasource_file.c:60 msgid "Imported file" msgstr "" #. The file selector #: ../src/datasource_file.c:133 msgid "File:" msgstr "" #: ../src/datasource_file.c:134 msgid "File to import" msgstr "" #: ../src/datasource_file.c:141 msgid "All files" msgstr "" #. The file format selector #: ../src/datasource_file.c:148 msgid "File type:" msgstr "" #: ../src/datasource_file.c:193 #, c-format msgid "using babel args '%s' and file '%s'" msgstr "" #: ../src/datasource_gc.c:66 msgid "Download Geocaches" msgstr "下載 Geocaches" #: ../src/datasource_gc.c:67 msgid "Geocaching.com Caches" msgstr "Geocaching.com 緩衝區" #: ../src/datasource_gc.c:84 msgid "geocaching.com username:" msgstr "geocaching.com 用户名:" #: ../src/datasource_gc.c:85 msgid "geocaching.com password:" msgstr "geocaching.com 密碼:" #: ../src/datasource_gc.c:126 #, c-format msgid "" "Can't find %s or %s in path! Check that you have installed it correctly." msgstr "" #: ../src/datasource_gc.c:188 msgid "Number geocaches:" msgstr "" #: ../src/datasource_gc.c:190 msgid "Centered around:" msgstr "" #: ../src/datasource_gc.c:226 msgid "Broken input - using some defaults" msgstr "" #: ../src/datasource_geotag.c:51 msgid "Create Waypoints from Geotagged Images" msgstr "" #: ../src/datasource_geotag.c:52 msgid "Geotagged Images" msgstr "" #: ../src/datasource_geotag.c:102 ../src/vikwindow.c:2314 #: ../src/vikwindow.c:2382 ../src/vikwindow.c:2824 msgid "All" msgstr "" #: ../src/datasource_geotag.c:107 ../src/vikwindow.c:2829 msgid "JPG" msgstr "" #: ../src/datasource_geotag.c:165 #, c-format msgid "Unable to create waypoint from %s" msgstr "" #: ../src/datasource_google.c:49 ../src/datasource_google.c:50 msgid "Google Directions" msgstr "Google 方位" #: ../src/datasource_google.c:77 msgid "From:" msgstr "從 :" #: ../src/datasource_google.c:79 msgid "To:" msgstr "至 :" #: ../src/datasource_gps.c:57 msgid "Acquire from GPS" msgstr "從GPS抓取" #: ../src/datasource_gps.c:58 msgid "Acquired from GPS" msgstr "已從GPS抓取的" #: ../src/datasource_gps.c:221 #, c-format msgid "using cmdline '%s' and file '%s'\n" msgstr "使用指令行 '%s' 和檔案 '%s'\n" #: ../src/datasource_gps.c:297 ../src/vikgpslayer.c:884 #, c-format msgid "Downloading %d waypoint..." msgid_plural "Downloading %d waypoints..." msgstr[0] "" msgstr[1] "" #: ../src/datasource_gps.c:298 ../src/vikgpslayer.c:885 #, c-format msgid "Downloading %d trackpoint..." msgid_plural "Downloading %d trackpoints..." msgstr[0] "" msgstr[1] "" #: ../src/datasource_gps.c:303 ../src/vikgpslayer.c:890 #, c-format msgid "Downloading %d routepoint..." msgid_plural "Downloading %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/datasource_gps.c:325 ../src/datasource_gps.c:326 #: ../src/datasource_gps.c:327 #, c-format msgid "Downloaded %d out of %d %s..." msgstr "" #: ../src/datasource_gps.c:331 ../src/datasource_gps.c:332 #: ../src/datasource_gps.c:333 #, c-format msgid "Downloaded %d %s." msgstr "" #: ../src/datasource_gps.c:347 ../src/vikgpslayer.c:968 #, c-format msgid "GPS Device: %s" msgstr "GPS裝置: %s" #: ../src/datasource_gps.c:370 ../src/vikgpslayer.c:1042 #: ../src/vikgpslayer.c:1110 msgid "Status: Working..." msgstr "" #: ../src/datasource_gps.c:469 ../src/vikgpslayer.c:150 msgid "GPS Protocol:" msgstr "GPS 協定:" #. List now assigned at runtime #: ../src/datasource_gps.c:488 ../src/vikgpslayer.c:151 msgid "Serial Port:" msgstr "序列埠:" #: ../src/datasource_gps.c:509 msgid "" "Turn Off After Transfer\n" "(Garmin/NAViLink Only)" msgstr "" #: ../src/datasource_gps.c:512 msgid "Tracks:" msgstr "" #: ../src/datasource_gps.c:516 msgid "Routes:" msgstr "" #: ../src/datasource_gps.c:520 msgid "Waypoints:" msgstr "" #: ../src/datasource_gps.c:594 ../src/vikgpslayer.c:1305 msgid "GPS device: N/A" msgstr "GPS裝置: 無" #: ../src/datasource_osm.c:52 ../src/datasource_osm.c:53 msgid "OSM traces" msgstr "" #: ../src/datasource_osm.c:80 msgid "Page number:" msgstr "" #: ../src/datasource_osm_my_traces.c:63 ../src/datasource_osm_my_traces.c:64 msgid "OSM My Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:108 msgid "Username:" msgstr "" #: ../src/datasource_osm_my_traces.c:113 msgid "The email or username used to login to OSM" msgstr "" #: ../src/datasource_osm_my_traces.c:115 ../src/osm-traces.c:413 msgid "Password:" msgstr "密碼:" #: ../src/datasource_osm_my_traces.c:120 msgid "The password used to login to OSM" msgstr "" #: ../src/datasource_osm_my_traces.c:430 msgid "Description" msgstr "" #: ../src/datasource_osm_my_traces.c:445 msgid "Privacy" msgstr "" #: ../src/datasource_osm_my_traces.c:452 msgid "Within Current View" msgstr "" #: ../src/datasource_osm_my_traces.c:518 msgid "GPS Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:520 msgid "None found!" msgstr "" #: ../src/datasource_osm_my_traces.c:629 msgid "My OSM Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:645 #, c-format msgid "Unable to get trace: %s" msgstr "" #: ../src/datasource_wikipedia.c:32 msgid "Create Waypoints from Wikipedia Articles" msgstr "" #: ../src/datasource_wikipedia.c:33 msgid "Wikipedia Waypoints" msgstr "" #: ../src/dem.c:65 ../src/dem.c:79 msgid "Invalid DEM" msgstr "" #: ../src/dem.c:121 msgid "Invalid DEM header" msgstr "" #: ../src/dem.c:190 ../src/dem.c:203 msgid "Incorrect DEM Class B record: expected 1" msgstr "" #: ../src/dem.c:360 #, c-format msgid "Couldn't map file %s: %s" msgstr "" #: ../src/download.c:112 msgid "Tile age (s):" msgstr "" #: ../src/download.c:233 #, c-format msgid "Download error: %s" msgstr "下載錯誤: %s" #: ../src/download.c:313 msgid "couldn't open temp file" msgstr "無法開啟暫存檔" #: ../src/file.c:456 ../src/file.c:461 #, c-format msgid "Draw mode '%s' no more supported" msgstr "" #: ../src/geotag_exif.c:433 msgid "Not enough memory." msgstr "" #: ../src/geotag_exif.c:451 msgid "Setting a value for this tag is unsupported!" msgstr "" #: ../src/geotag_exif.c:470 #, c-format msgid "Too few components specified (need %d, found %d)\n" msgstr "" #: ../src/geotag_exif.c:474 msgid "Numeric value expected\n" msgstr "" #: ../src/geotag_exif.c:482 msgid "This shouldn't happen!" msgstr "" #: ../src/geotag_exif.c:552 msgid "Not yet implemented!" msgstr "" #: ../src/geotag_exif.c:565 msgid "Warning; Too many components specified!" msgstr "" #: ../src/osm-traces.c:73 msgid "Identifiable (public w/ timestamps)" msgstr "" #: ../src/osm-traces.c:74 msgid "Trackable (private w/ timestamps)" msgstr "" #: ../src/osm-traces.c:75 msgid "Public" msgstr "Public" #: ../src/osm-traces.c:76 msgid "Private" msgstr "" #: ../src/osm-traces.c:93 msgid "OSM username:" msgstr "" #: ../src/osm-traces.c:94 msgid "OSM password:" msgstr "" #. Preferences #: ../src/osm-traces.c:151 msgid "OpenStreetMap Traces" msgstr "" #: ../src/osm-traces.c:234 #, c-format msgid "failed to upload data: HTTP response is %ld" msgstr "" #: ../src/osm-traces.c:239 #, c-format msgid "curl_easy_getinfo failed: %d" msgstr "" #: ../src/osm-traces.c:244 #, c-format msgid "curl request failed: %s" msgstr "" #: ../src/osm-traces.c:275 #, c-format msgid "failed to open temporary file: %s" msgstr "" #. Success #: ../src/osm-traces.c:328 msgid "Uploaded to OSM" msgstr "" #: ../src/osm-traces.c:332 msgid "FAILED TO UPLOAD DATA TO OSM - CURL PROBLEM" msgstr "" #: ../src/osm-traces.c:335 msgid "FAILED TO UPLOAD DATA TO OSM" msgstr "" #: ../src/osm-traces.c:335 msgid "HTTP response code" msgstr "" #: ../src/osm-traces.c:348 #, c-format msgid "failed to unlink temporary file: %s" msgstr "" #: ../src/osm-traces.c:387 msgid "OSM upload" msgstr "" #: ../src/osm-traces.c:405 msgid "Email:" msgstr "電子郵箱 :" #: ../src/osm-traces.c:410 msgid "" "The email used as login\n" "Enter the email you use to login into www.openstreetmap.org." msgstr "" #: ../src/osm-traces.c:418 msgid "" "The password used to login\n" "Enter the password you use to login into " "www.openstreetmap.org." msgstr "" #: ../src/osm-traces.c:423 msgid "File's name:" msgstr "檔名稱:" #: ../src/osm-traces.c:433 msgid "" "The name of the file on OSM\n" "This is the name of the file created on the server.This is not the " "name of the local file." msgstr "" #: ../src/osm-traces.c:442 msgid "The description of the trace" msgstr "" #: ../src/osm-traces.c:444 msgid "Tags:" msgstr "" #: ../src/osm-traces.c:449 msgid "The tags associated to the trace" msgstr "" #: ../src/osm-traces.c:482 #, c-format msgid "Uploading %s to OSM" msgstr "上傳 %s 到 OSM" #: ../src/mapcache.c:61 msgid "Map cache memory size (MB):" msgstr "" #: ../src/print.c:53 msgid "None" msgstr "無" #: ../src/print.c:54 msgid "Horizontally" msgstr "水平的" #: ../src/print.c:55 msgid "Vertically" msgstr "垂直的" #: ../src/print.c:56 msgid "Both" msgstr "" #: ../src/print.c:120 msgid "Image Settings" msgstr "影像設定" #: ../src/print.c:546 msgid "done" msgstr "完成" #. Page Size #: ../src/print.c:575 msgid "_Adjust Page Size and Orientation" msgstr "" #: ../src/print.c:591 msgid "C_enter:" msgstr "C_entrer :" #. ignore page margins #: ../src/print.c:609 msgid "Ignore Page _Margins" msgstr "" #: ../src/print.c:628 msgid "Image S_ize:" msgstr "" #: ../src/util.c:81 msgid "Could not launch web browser." msgstr "" #: ../src/util.c:92 msgid "Could not create new email." msgstr "" #: ../src/vikcoordlayer.c:46 msgid "Color:" msgstr "" #: ../src/vikcoordlayer.c:47 msgid "Minutes Width:" msgstr "" #: ../src/vikcoordlayer.c:48 msgid "Line Thickness:" msgstr "" #: ../src/vikcoordlayer.c:56 msgid "Coordinate" msgstr "" #: ../src/datasource_bfilter.c:46 msgid "Max number of points:" msgstr "" #: ../src/datasource_bfilter.c:60 msgid "Simplify All Tracks..." msgstr "" #: ../src/datasource_bfilter.c:61 msgid "Simplified Tracks" msgstr "" #: ../src/datasource_bfilter.c:96 ../src/datasource_bfilter.c:97 msgid "Remove Duplicate Waypoints" msgstr "" #: ../src/datasource_bfilter.c:129 msgid "Waypoints Inside This" msgstr "" #: ../src/datasource_bfilter.c:130 msgid "Polygonized Layer" msgstr "" #: ../src/datasource_bfilter.c:165 msgid "Waypoints Outside This" msgstr "" #: ../src/datasource_bfilter.c:166 msgid "Polygonzied Layer" msgstr "" #: ../src/main.c:89 #, c-format msgid "Ignoring Xlib error: error code %d request code %d\n" msgstr "" #: ../src/main.c:102 msgid "Enable debug output" msgstr "" #: ../src/main.c:103 msgid "Enable verbose output" msgstr "" #: ../src/main.c:104 msgid "Show version" msgstr "察看版本" #: ../src/osm.c:106 msgid "On Disk OSM Tile Format" msgstr "" #: ../src/osm.c:121 msgid "OSM (view)" msgstr "" #: ../src/osm.c:125 msgid "OSM (edit)" msgstr "" #: ../src/osm.c:129 msgid "OSM (render)" msgstr "" #. Example: http://127.0.0.1:8111/load_and_zoom?left=8.19&right=8.20&top=48.605&bottom=48.590&select=node413602999 #. JOSM or merkaartor must already be running with remote interface enabled #: ../src/osm.c:136 msgid "Local port 8111 (eg JOSM)" msgstr "" #: ../src/preferences.c:285 msgid "Preferences" msgstr "" #: ../src/uibuilder.c:147 msgid "Take care that this password will be stored clearly in a plain file." msgstr "" #: ../src/vikaggregatelayer.c:37 msgid "Aggregate" msgstr "" #: ../src/vikdemlayer.c:101 msgid "Absolute height" msgstr "" #: ../src/vikdemlayer.c:102 msgid "Height gradient" msgstr "" #: ../src/vikdemlayer.c:118 msgid "DEM Files:" msgstr "DEM 檔案:" #: ../src/vikdemlayer.c:119 msgid "Download Source:" msgstr "下載源:" #: ../src/vikdemlayer.c:120 msgid "Min Elev Color:" msgstr "" #: ../src/vikdemlayer.c:121 msgid "Type:" msgstr "" #: ../src/vikdemlayer.c:122 msgid "Min Elev:" msgstr "最低高度:" #: ../src/vikdemlayer.c:123 msgid "Max Elev:" msgstr "最高高度:" #: ../src/vikdemlayer.c:134 msgid "_DEM Download" msgstr "" #: ../src/vikdemlayer.c:134 msgid "DEM Download" msgstr "" #: ../src/vikdemlayer.c:188 msgid "DEM" msgstr "" #: ../src/vikdemlayer.c:284 #, c-format msgid "Number of files: %d" msgstr "" #: ../src/vikdemlayer.c:385 msgid "DEM Loading" msgstr "" #: ../src/vikdemlayer.c:889 #, c-format msgid "No SRTM data available for %f, %f" msgstr "没有可以的SRTM資料給 %f, %f" #: ../src/vikdemlayer.c:1149 #, c-format msgid "Downloading DEM %s" msgstr "正在下載 DEM %s" #: ../src/vikfileentry.c:68 msgid "Browse..." msgstr "瀏覧 ..." #: ../src/vikfileentry.c:96 msgid "Choose file" msgstr "選取一個檔案" #: ../src/vikfilelist.c:48 msgid "Choose file(s)" msgstr "選取檔案" #: ../src/vikfilelist.c:172 msgid "Add..." msgstr "添加 ..." #: ../src/vikfilelist.c:173 msgid "Delete" msgstr "移除" #: ../src/vikgeoreflayer.c:70 msgid "_Georef Move Map" msgstr "" #: ../src/vikgeoreflayer.c:70 msgid "Georef Move Map" msgstr "" #: ../src/vikgeoreflayer.c:77 msgid "Georef Z_oom Tool" msgstr "" #: ../src/vikgeoreflayer.c:77 msgid "Georef Zoom Tool" msgstr "" #: ../src/vikgeoreflayer.c:87 msgid "GeoRef Map" msgstr "" #: ../src/vikgeoreflayer.c:335 ../src/vikmapslayer.c:685 #, c-format msgid "Couldn't open image file: %s" msgstr "" #: ../src/vikgeoreflayer.c:365 msgid "Unexpected end of file reading World file." msgstr "" #: ../src/vikgeoreflayer.c:381 ../src/vikgeoreflayer.c:426 msgid "Choose World file" msgstr "" #: ../src/vikgeoreflayer.c:394 msgid "The World file you requested could not be opened for reading." msgstr "" #: ../src/vikgeoreflayer.c:439 msgid "The file you requested could not be opened for writing." msgstr "" #: ../src/vikgeoreflayer.c:456 ../src/viklayer.c:480 msgid "Layer Properties" msgstr "" #: ../src/vikgeoreflayer.c:478 msgid "World File Parameters:" msgstr "" #: ../src/vikgeoreflayer.c:479 msgid "Load From File..." msgstr "" #: ../src/vikgeoreflayer.c:484 msgid "Corner pixel easting:" msgstr "" #: ../src/vikgeoreflayer.c:486 msgid "the UTM \"easting\" value of the upper-right corner pixel of the map" msgstr "" #: ../src/vikgeoreflayer.c:488 msgid "Corner pixel northing:" msgstr "" #: ../src/vikgeoreflayer.c:490 msgid "the UTM \"northing\" value of the upper-right corner pixel of the map" msgstr "" #: ../src/vikgeoreflayer.c:492 msgid "X (easting) scale (mpp): " msgstr "" #: ../src/vikgeoreflayer.c:493 msgid "Y (northing) scale (mpp): " msgstr "" #: ../src/vikgeoreflayer.c:496 msgid "the scale of the map in the X direction (meters per pixel)" msgstr "" #: ../src/vikgeoreflayer.c:498 msgid "the scale of the map in the Y direction (meters per pixel)" msgstr "" #: ../src/vikgeoreflayer.c:500 msgid "Map Image:" msgstr "地圖圖片:" #. Now with icons #: ../src/vikgeoreflayer.c:608 msgid "_Zoom to Fit Map" msgstr "" #: ../src/vikgeoreflayer.c:614 msgid "_Goto Map Center" msgstr "" #: ../src/vikgeoreflayer.c:620 msgid "_Export to World File" msgstr "" #: ../src/vikgoto.c:75 msgid "No goto tool available." msgstr "" #: ../src/vikgoto.c:88 ../src/vikgoto.c:107 msgid "goto" msgstr "" #: ../src/vikgoto.c:90 msgid "I don't know that place. Do you want another goto?" msgstr "" #: ../src/vikgoto.c:109 msgid "goto provider:" msgstr "" #: ../src/vikgoto.c:124 msgid "Enter address or place name:" msgstr "匯入位址或者地點名稱:" #: ../src/vikgpslayer.c:127 msgid "Data Mode" msgstr "" #: ../src/vikgpslayer.c:129 msgid "Realtime Tracking Mode" msgstr "" #: ../src/vikgpslayer.c:137 msgid "Keep vehicle at center" msgstr "" #: ../src/vikgpslayer.c:138 msgid "Keep vehicle on screen" msgstr "" #: ../src/vikgpslayer.c:139 msgid "Disable" msgstr "" #: ../src/vikgpslayer.c:152 msgid "Download Tracks:" msgstr "" #: ../src/vikgpslayer.c:153 msgid "Upload Tracks:" msgstr "" #: ../src/vikgpslayer.c:154 msgid "Download Routes:" msgstr "" #: ../src/vikgpslayer.c:155 msgid "Upload Routes:" msgstr "" #: ../src/vikgpslayer.c:156 msgid "Download Waypoints:" msgstr "" #: ../src/vikgpslayer.c:157 msgid "Upload Waypoints:" msgstr "" #: ../src/vikgpslayer.c:159 msgid "Recording tracks" msgstr "正在紀録軌迹" #: ../src/vikgpslayer.c:160 msgid "Jump to current position on start" msgstr "在開始時跳到目前位置" #: ../src/vikgpslayer.c:161 msgid "Moving Map Method:" msgstr "" #: ../src/vikgpslayer.c:162 msgid "Gpsd Host:" msgstr "Gpsd 主機:" #: ../src/vikgpslayer.c:163 msgid "Gpsd Port:" msgstr "Gpsd 通訊埠:" #: ../src/vikgpslayer.c:164 msgid "Gpsd Retry Interval (seconds):" msgstr "" #: ../src/vikgpslayer.c:179 msgid "GPS" msgstr "" #: ../src/vikgpslayer.c:242 ../src/vikgpslayer.c:1258 msgid "GPS Download" msgstr "GPS 下載" #: ../src/vikgpslayer.c:242 ../src/vikgpslayer.c:1258 #: ../src/viktrwlayer.c:3094 msgid "GPS Upload" msgstr "GPS 上傳" #: ../src/vikgpslayer.c:244 msgid "GPS Realtime Tracking" msgstr "GPS實時追蹤" #: ../src/vikgpslayer.c:451 msgid "Unknown GPS Protocol" msgstr "未知的GPS協定" #: ../src/vikgpslayer.c:469 msgid "Unknown serial port device" msgstr "未知的序列埠裝置" #: ../src/vikgpslayer.c:572 #, c-format msgid "%s: unknown parameter" msgstr "%s: 未知的引數" #. Now with icons #: ../src/vikgpslayer.c:693 msgid "_Upload to GPS" msgstr "" #: ../src/vikgpslayer.c:699 msgid "Download from _GPS" msgstr "" #: ../src/vikgpslayer.c:720 msgid "Empty _Realtime" msgstr "" #: ../src/vikgpslayer.c:727 msgid "E_mpty Upload" msgstr "" #: ../src/vikgpslayer.c:733 msgid "_Empty Download" msgstr "" #: ../src/vikgpslayer.c:739 msgid "Empty _All" msgstr "" #. #. NB It's not fatal if this gives 2 for example! Hence removal of the g_assert #. This happens when copied GPS layer is deleted (not sure why the number_handlers would be 2) #. I don't think there's any side effects and certainly better than the program just aborting #. #: ../src/vikgpslayer.c:756 #, c-format msgid "Unexpected number of disconnected handlers: %d" msgstr "" #: ../src/vikgpslayer.c:898 #, c-format msgid "Uploading %d waypoint..." msgid_plural "Uploading %d waypoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:899 #, c-format msgid "Uploading %d trackpoint..." msgid_plural "Uploading %d trackpoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:900 #, c-format msgid "Uploading %d routepoint..." msgid_plural "Uploading %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:925 #, c-format msgid "Downloaded %d out of %d waypoint..." msgid_plural "Downloaded %d out of %d waypoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:926 #, c-format msgid "Downloaded %d out of %d trackpoint..." msgid_plural "Downloaded %d out of %d trackpoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:927 #, c-format msgid "Downloaded %d out of %d routepoint..." msgid_plural "Downloaded %d out of %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:932 #, c-format msgid "Uploaded %d out of %d waypoint..." msgid_plural "Uploaded %d out of %d waypoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:933 #, c-format msgid "Uploaded %d out of %d trackpoint..." msgid_plural "Uploaded %d out of %d trackpoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:934 #, c-format msgid "Uploaded %d out of %d routepoint..." msgid_plural "Uploaded %d out of %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:942 #, c-format msgid "Downloaded %d waypoint" msgid_plural "Downloaded %d waypoints" msgstr[0] "下載的 %d 航點" #: ../src/vikgpslayer.c:943 #, c-format msgid "Downloaded %d trackpoint" msgid_plural "Downloaded %d trackpoints" msgstr[0] "下載的 %d 軌迹點" #: ../src/vikgpslayer.c:944 #, c-format msgid "Downloaded %d routepoint" msgid_plural "Downloaded %d routepoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:949 #, c-format msgid "Uploaded %d waypoint" msgid_plural "Uploaded %d waypoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:950 #, c-format msgid "Uploaded %d trackpoint" msgid_plural "Uploaded %d trackpoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:951 #, c-format msgid "Uploaded %d routepoint" msgid_plural "Uploaded %d routepoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:1180 msgid "Error: couldn't find gpsbabel." msgstr "錯誤: 没有發現 gpsbabel." #: ../src/vikgpslayer.c:1269 msgid "Warning - GPS Upload items may overwrite each other" msgstr "" #: ../src/vikgpslayer.c:1301 msgid "Status: detecting gpsbabel" msgstr "狀態 : 偵測 gpsbabel" #: ../src/vikgpslayer.c:1332 msgid "No GPS items selected for transfer." msgstr "" #: ../src/vikgpslayer.c:1347 msgid "Could not turn off device." msgstr "" #: ../src/vikgpslayer.c:1385 msgid "Are you sure you want to delete GPS Upload data?" msgstr "" #: ../src/vikgpslayer.c:1398 msgid "Are you sure you want to delete GPS Download data?" msgstr "" #: ../src/vikgpslayer.c:1412 msgid "Are you sure you want to delete GPS Realtime data?" msgstr "" #: ../src/vikgpslayer.c:1425 msgid "Are you sure you want to delete All GPS data?" msgstr "" #: ../src/viklayerspanel.c:55 msgid "/C_ut" msgstr "/_u 剪取" #: ../src/viklayerspanel.c:56 msgid "/_Copy" msgstr "/_C 拷貝" #: ../src/viklayerspanel.c:57 msgid "/_Paste" msgstr "/_P 黏貼" #: ../src/viklayerspanel.c:58 msgid "/_Delete" msgstr "/_D 移除" #: ../src/viklayerspanel.c:59 msgid "/New Layer" msgstr "/新圖層" #: ../src/viklayerspanel.c:127 msgid "Top Layer" msgstr "頂層" #: ../src/viklayerspanel.c:143 msgid "Add new layer" msgstr "" #: ../src/viklayerspanel.c:150 msgid "Remove selected layer" msgstr "" #: ../src/viklayerspanel.c:157 msgid "Move selected layer up" msgstr "" #: ../src/viklayerspanel.c:164 msgid "Move selected layer down" msgstr "" #: ../src/viklayerspanel.c:171 msgid "Cut selected layer" msgstr "" #: ../src/viklayerspanel.c:178 msgid "Copy selected layer" msgstr "" #: ../src/viklayerspanel.c:185 msgid "Paste layer below selected layer" msgstr "" #. TODO: FIXME: if name has a '/' in it it will get all messed up. why not have an itemfactory field with #. name, icon, shortcut, etc.? #: ../src/viklayerspanel.c:204 ../src/vikwindow.c:3292 #, c-format msgid "New _%s Layer" msgstr "" #: ../src/viklayerspanel.c:511 msgid "Aggregate Layers have no settable properties." msgstr "" #: ../src/viklayerspanel.c:555 msgid "You cannot cut the Top Layer." msgstr "您無法剪取掉頂層" #: ../src/viklayerspanel.c:600 #, c-format msgid "Are you sure you want to delete %s?" msgstr "" #: ../src/viklayerspanel.c:617 msgid "You cannot delete the Top Layer." msgstr "您無法移除頂層" #: ../src/viklayerspanel.c:701 msgid "Are you sure you wish to delete all layers?" msgstr "您真的確認要移除所有的圖層?" #. ******* MAPZOOMS ******** #: ../src/vikmapslayer.c:91 msgid "Use Viking Zoom Level" msgstr "" #: ../src/vikmapslayer.c:124 msgid "Map Type:" msgstr "地圖類別:" #: ../src/vikmapslayer.c:125 msgid "Maps Directory:" msgstr "" #: ../src/vikmapslayer.c:126 msgid "Alpha:" msgstr "Alpha:" #: ../src/vikmapslayer.c:127 msgid "Control the Alpha value for transparency effects" msgstr "" #: ../src/vikmapslayer.c:128 msgid "Autodownload maps:" msgstr "自動下載地圖:" #: ../src/vikmapslayer.c:129 msgid "Autodownload Only Gets Missing Maps:" msgstr "" #: ../src/vikmapslayer.c:130 msgid "" "Using this option avoids attempting to update already acquired tiles. This " "can be useful if you want to restrict the network usage, without having to " "resort to manual control. Only applies when 'Autodownload Maps' is on." msgstr "" #: ../src/vikmapslayer.c:131 msgid "Zoom Level:" msgstr "縮放程度 :" #: ../src/vikmapslayer.c:132 msgid "" "Determines the method of displaying map tiles for the current zoom level. " "'Viking Zoom Level' uses the best matching level, otherwise setting a fixed " "value will always use map tiles of the specified value regardless of the " "actual zoom level." msgstr "" #: ../src/vikmapslayer.c:146 msgid "_Maps Download" msgstr "" #: ../src/vikmapslayer.c:146 msgid "Maps Download" msgstr "地圖下載" #: ../src/vikmapslayer.c:161 msgid "Map" msgstr "地圖" #: ../src/vikmapslayer.c:249 msgid "Default maplayer directory:" msgstr "" #: ../src/vikmapslayer.c:249 msgid "Choose a directory to store cached Map tiles for this layer" msgstr "" #: ../src/vikmapslayer.c:505 msgid "Unknown map type" msgstr "未知的地圖類別" #: ../src/vikmapslayer.c:516 msgid "Unknown Map Zoom" msgstr "" #: ../src/vikmapslayer.c:589 #, c-format msgid "" "New map cannot be displayed in the current drawmode.\n" "Select \"%s\" from View menu to view it." msgstr "" #: ../src/vikmapslayer.c:753 #, c-format msgid "" "Cowardly refusing to draw tiles or existence of tiles beyond %d zoom out " "factor" msgstr "" #: ../src/vikmapslayer.c:1157 #, c-format msgid "Redownloading up to %d %s map..." msgid_plural "Redownloading up to %d %s maps..." msgstr[0] "" msgstr[1] "" #: ../src/vikmapslayer.c:1159 #, c-format msgid "Redownloading %d %s map..." msgid_plural "Redownloading %d %s maps..." msgstr[0] "" msgstr[1] "" #: ../src/vikmapslayer.c:1163 ../src/vikmapslayer.c:1238 #, c-format msgid "Downloading %d %s map..." msgid_plural "Downloading %d %s maps..." msgstr[0] "正在下載 %d %s 地圖..." #: ../src/vikmapslayer.c:1311 #, c-format msgid "" "\n" "Source: %s\n" "\n" "Tile File: %s\n" "Tile File Timestamp: %s" msgstr "" #: ../src/vikmapslayer.c:1318 #, c-format msgid "" "Source: %s\n" "\n" "No Tile File!" msgstr "" #: ../src/vikmapslayer.c:1356 msgid "Redownload _Bad Map(s)" msgstr "" #: ../src/vikmapslayer.c:1360 msgid "Redownload _New Map(s)" msgstr "" #: ../src/vikmapslayer.c:1364 msgid "Redownload _All Map(s)" msgstr "" #: ../src/vikmapslayer.c:1368 msgid "_Show Tile Information" msgstr "" #: ../src/vikmapslayer.c:1449 #, c-format msgid "" "Wrong drawmode for this map.\n" "Select \"%s\" from View menu and try again." msgstr "" #: ../src/vikmapslayer.c:1454 msgid "Wrong zoom level for this map." msgstr "此地圖無此縮放程度" #. Now with icons #: ../src/vikmapslayer.c:1485 msgid "Download _Missing Onscreen Maps" msgstr "" #: ../src/vikmapslayer.c:1492 msgid "Download _New Onscreen Maps" msgstr "" #: ../src/vikmapslayer.c:1499 msgid "Reload _All Onscreen Maps" msgstr "" #: ../src/viktreeview.c:263 msgid "Layer Name" msgstr "圖層名字" #: ../src/viktreeview.c:742 #, c-format msgid "delete data from %s\n" msgstr "從 %s 移除資料\n" #: ../src/viktrwlayer.c:377 msgid "Create _Waypoint" msgstr "" #: ../src/viktrwlayer.c:377 msgid "Create Waypoint" msgstr "建立航點" #: ../src/viktrwlayer.c:383 msgid "Create _Track" msgstr "" #: ../src/viktrwlayer.c:383 msgid "Create Track" msgstr "建立軌迹" #: ../src/viktrwlayer.c:392 msgid "Create _Route" msgstr "" #: ../src/viktrwlayer.c:392 msgid "Create Route" msgstr "" #: ../src/viktrwlayer.c:401 msgid "_Edit Waypoint" msgstr "" #: ../src/viktrwlayer.c:401 msgid "Edit Waypoint" msgstr "編輯航點" #: ../src/viktrwlayer.c:409 msgid "Edit Trac_kpoint" msgstr "" #: ../src/viktrwlayer.c:409 msgid "Edit Trackpoint" msgstr "編輯軌迹點" #: ../src/viktrwlayer.c:417 msgid "Show P_icture" msgstr "" #: ../src/viktrwlayer.c:417 msgid "Show Picture" msgstr "察看圖片" #: ../src/viktrwlayer.c:424 msgid "Route _Finder" msgstr "" #: ../src/viktrwlayer.c:424 msgid "Route Finder" msgstr "" #. ***** PARAMETERS ***** #: ../src/viktrwlayer.c:447 ../src/viktrwlayer.c:1942 #: ../src/viktrwlayer.c:1944 msgid "Waypoints" msgstr "航點" #: ../src/viktrwlayer.c:447 ../src/viktrwlayer.c:1933 #: ../src/viktrwlayer.c:1935 msgid "Tracks" msgstr "軌迹" #: ../src/viktrwlayer.c:447 msgid "Waypoint Images" msgstr "航點圖片" #: ../src/viktrwlayer.c:450 msgid "Draw by Track" msgstr "以軌迹繪圖" #: ../src/viktrwlayer.c:450 msgid "Draw by Speed" msgstr "" #: ../src/viktrwlayer.c:450 msgid "All Tracks Same Color" msgstr "" #: ../src/viktrwlayer.c:451 msgid "Filled Square" msgstr "實心方塊" #: ../src/viktrwlayer.c:451 msgid "Square" msgstr "正方形" #: ../src/viktrwlayer.c:451 msgid "Circle" msgstr "圓形" #: ../src/viktrwlayer.c:451 msgid "X" msgstr "X" #: ../src/viktrwlayer.c:477 msgid "Extra Extra Small" msgstr "" #: ../src/viktrwlayer.c:478 msgid "Extra Small" msgstr "" #: ../src/viktrwlayer.c:479 msgid "Small" msgstr "" #: ../src/viktrwlayer.c:480 msgid "Medium" msgstr "" #: ../src/viktrwlayer.c:481 msgid "Large" msgstr "" #: ../src/viktrwlayer.c:482 msgid "Extra Large" msgstr "" #: ../src/viktrwlayer.c:483 msgid "Extra Extra Large" msgstr "" #: ../src/viktrwlayer.c:491 msgid "Track Drawing Mode:" msgstr "" #: ../src/viktrwlayer.c:492 msgid "All Tracks Color:" msgstr "" #: ../src/viktrwlayer.c:493 msgid "The color used when 'All Tracks Same Color' drawing mode is selected" msgstr "" #: ../src/viktrwlayer.c:494 msgid "Draw Track Lines" msgstr "" #: ../src/viktrwlayer.c:495 msgid "Track Thickness:" msgstr "" #: ../src/viktrwlayer.c:496 msgid "Draw Track Direction" msgstr "" #: ../src/viktrwlayer.c:497 msgid "Direction Size:" msgstr "" #: ../src/viktrwlayer.c:498 msgid "Draw Trackpoints" msgstr "" #: ../src/viktrwlayer.c:499 msgid "Trackpoint Size:" msgstr "" #: ../src/viktrwlayer.c:500 msgid "Draw Elevation" msgstr "" #: ../src/viktrwlayer.c:501 msgid "Draw Elevation Height %:" msgstr "" #: ../src/viktrwlayer.c:503 msgid "Draw Stops" msgstr "" #: ../src/viktrwlayer.c:504 msgid "" "Whether to draw a marker when trackpoints are at the same position but over " "the minimum stop length apart in time" msgstr "" #: ../src/viktrwlayer.c:505 msgid "Min Stop Length (seconds):" msgstr "" #: ../src/viktrwlayer.c:507 msgid "Track BG Thickness:" msgstr "" #: ../src/viktrwlayer.c:508 msgid "Track Background Color" msgstr "" #: ../src/viktrwlayer.c:509 msgid "Draw by Speed Factor (%):" msgstr "" #: ../src/viktrwlayer.c:510 msgid "" "The percentage factor away from the average speed determining the color used" msgstr "" #: ../src/viktrwlayer.c:512 msgid "Draw Labels" msgstr "描繪圖層" #: ../src/viktrwlayer.c:513 msgid "Waypoint Font Size:" msgstr "" #: ../src/viktrwlayer.c:514 msgid "Waypoint Color:" msgstr "航點色彩" #: ../src/viktrwlayer.c:515 msgid "Waypoint Text:" msgstr "航點文字:" #: ../src/viktrwlayer.c:516 msgid "Background:" msgstr "背景:" #: ../src/viktrwlayer.c:517 msgid "Fake BG Color Translucency:" msgstr "" #: ../src/viktrwlayer.c:518 msgid "Waypoint marker:" msgstr "航點標簽" #: ../src/viktrwlayer.c:519 msgid "Waypoint size:" msgstr "航點大小" #: ../src/viktrwlayer.c:520 msgid "Draw Waypoint Symbols:" msgstr "" #: ../src/viktrwlayer.c:522 msgid "Draw Waypoint Images" msgstr "" #: ../src/viktrwlayer.c:523 msgid "Image Size (pixels):" msgstr "圖片大小 (像素):" #: ../src/viktrwlayer.c:524 msgid "Image Alpha:" msgstr "圖片Alpha值:" #: ../src/viktrwlayer.c:525 msgid "Image Memory Cache Size:" msgstr "圖片記憶體緩衝區大小:" #: ../src/viktrwlayer.c:610 msgid "TrackWaypoint" msgstr "" #: ../src/viktrwlayer.c:1951 ../src/viktrwlayer.c:1953 msgid "Routes" msgstr "" #: ../src/viktrwlayer.c:2144 #, c-format msgid " in %d:%02d hrs:mins" msgstr "" #: ../src/viktrwlayer.c:2148 #, c-format msgid "" "\n" "%sTotal Length %.1f %s%s" msgstr "" #: ../src/viktrwlayer.c:2154 #, c-format msgid "Tracks: %d - Waypoints: %d - Routes: %d%s" msgstr "" #: ../src/viktrwlayer.c:2174 #, c-format msgid "Tracks: %d" msgstr "" #: ../src/viktrwlayer.c:2184 #, c-format msgid "Routes: %d" msgstr "" #: ../src/viktrwlayer.c:2215 #, c-format msgid "- %d:%02d hrs:mins" msgstr "" #: ../src/viktrwlayer.c:2223 #, c-format msgid "%s%.1f km %s" msgstr "" #: ../src/viktrwlayer.c:2226 #, c-format msgid "%s%.1f miles %s" msgstr "" #: ../src/viktrwlayer.c:2240 #, c-format msgid "Waypoints: %d" msgstr "" #: ../src/viktrwlayer.c:2266 #, c-format msgid "Trkpt: Alt %dft" msgstr "" #. VIK_UNITS_HEIGHT_METRES: #: ../src/viktrwlayer.c:2270 #, c-format msgid "Trkpt: Alt %dm" msgstr "" #. Compact date time format #: ../src/viktrwlayer.c:2277 #, c-format msgid " | Time %x %X" msgstr "" #: ../src/viktrwlayer.c:2295 #, c-format msgid " | Track: %s" msgstr "" #. Combine parts to make overall message #: ../src/viktrwlayer.c:2299 #, c-format msgid "%s%s | %s %s %s" msgstr "" #: ../src/viktrwlayer.c:2314 #, c-format msgid "Wpt: Alt %dft" msgstr "" #. VIK_UNITS_HEIGHT_METRES: #: ../src/viktrwlayer.c:2318 #, c-format msgid "Wpt: Alt %dm" msgstr "" #. Add comment if available #: ../src/viktrwlayer.c:2333 #, c-format msgid "%s | %s %s | Comment: %s" msgstr "" #: ../src/viktrwlayer.c:2335 #, c-format msgid "%s | %s %s" msgstr "" #: ../src/viktrwlayer.c:2563 ../src/viktrwlayer.c:2634 msgid "This layer has no waypoints or trackpoints." msgstr "" #: ../src/viktrwlayer.c:2661 ../src/vikwindow.c:2407 ../src/vikwindow.c:2848 #, c-format msgid "The file \"%s\" exists, do you wish to overwrite it?" msgstr "" #: ../src/viktrwlayer.c:2671 ../src/vikwindow.c:2429 msgid "The filename you requested could not be opened for writing." msgstr "" #: ../src/viktrwlayer.c:2676 ../src/viktrwlayer.c:2681 #: ../src/viktrwlayer.c:2691 ../src/viktrwlayer.c:2703 msgid "Export Layer" msgstr "匯出圖層" #: ../src/viktrwlayer.c:2720 msgid "Could not create temporary file for export." msgstr "" #: ../src/viktrwlayer.c:2729 #, c-format msgid "Could not launch %s." msgstr "" #: ../src/viktrwlayer.c:2773 msgid "Export Track as GPX" msgstr "" #: ../src/viktrwlayer.c:2795 msgid "Find" msgstr "" #: ../src/viktrwlayer.c:2805 msgid "Waypoint Name:" msgstr "航點名稱:" #: ../src/viktrwlayer.c:2822 msgid "Waypoint not found in this layer." msgstr "在此圖層中没有發現航點" #: ../src/viktrwlayer.c:3090 msgid "Can not upload invisible track." msgstr "" #: ../src/viktrwlayer.c:3192 ../src/viktrwlayer.c:7785 msgid "Track" msgstr "" #: ../src/viktrwlayer.c:3215 ../src/viktrwlayer.c:7817 msgid "Route" msgstr "" #: ../src/viktrwlayer.c:3296 ../src/viktrwlayer.c:6265 #: ../src/viktrwlayer.c:6314 msgid "_Finish Route" msgstr "" #: ../src/viktrwlayer.c:3298 ../src/viktrwlayer.c:6223 #: ../src/viktrwlayer.c:6312 msgid "_Finish Track" msgstr "" #. Now with icons #: ../src/viktrwlayer.c:3310 msgid "_View Layer" msgstr "" #: ../src/viktrwlayer.c:3317 msgid "V_iew" msgstr "" #: ../src/viktrwlayer.c:3323 msgid "View All _Tracks" msgstr "" #: ../src/viktrwlayer.c:3328 msgid "View All _Routes" msgstr "" #: ../src/viktrwlayer.c:3333 msgid "View All _Waypoints" msgstr "" #: ../src/viktrwlayer.c:3338 msgid "_Goto Center of Layer" msgstr "" #: ../src/viktrwlayer.c:3344 ../src/viktrwlayer.c:6199 msgid "Goto _Waypoint..." msgstr "" #: ../src/viktrwlayer.c:3350 msgid "_Export Layer" msgstr "" #: ../src/viktrwlayer.c:3356 msgid "Export as GPS_Point..." msgstr "" #: ../src/viktrwlayer.c:3361 msgid "Export as GPS_Mapper..." msgstr "" #: ../src/viktrwlayer.c:3366 msgid "Export as _GPX..." msgstr "" #: ../src/viktrwlayer.c:3371 msgid "Export as _KML..." msgstr "" #: ../src/viktrwlayer.c:3376 msgid "Open with External Program_1: " msgstr "" #: ../src/viktrwlayer.c:3383 msgid "Open with External Program_2: " msgstr "" #: ../src/viktrwlayer.c:3391 ../src/vikwindow.c:3145 msgid "_New" msgstr "_N 新建" #: ../src/viktrwlayer.c:3397 msgid "New _Waypoint..." msgstr "" #: ../src/viktrwlayer.c:3403 msgid "New _Track" msgstr "" #: ../src/viktrwlayer.c:3411 msgid "New _Route" msgstr "" #: ../src/viktrwlayer.c:3420 ../src/viktrwlayer.c:6597 msgid "Geotag _Images..." msgstr "" #: ../src/viktrwlayer.c:3427 msgid "_Acquire" msgstr "" #: ../src/viktrwlayer.c:3433 ../src/vikwindow.c:3150 msgid "From _GPS..." msgstr "_G 從GPS..." #: ../src/viktrwlayer.c:3439 msgid "From Google _Directions..." msgstr "" #: ../src/viktrwlayer.c:3446 msgid "From _OSM Traces..." msgstr "" #: ../src/viktrwlayer.c:3451 msgid "From _My OSM Traces..." msgstr "" #: ../src/viktrwlayer.c:3459 ../src/vikwindow.c:3166 msgid "From _Wikipedia Waypoints" msgstr "" #: ../src/viktrwlayer.c:3465 msgid "Within _Layer Bounds" msgstr "" #: ../src/viktrwlayer.c:3471 msgid "Within _Current View" msgstr "" #: ../src/viktrwlayer.c:3479 msgid "From Geo_caching..." msgstr "" #: ../src/viktrwlayer.c:3486 ../src/vikwindow.c:3163 msgid "From Geotagged _Images..." msgstr "" #: ../src/viktrwlayer.c:3492 msgid "From _File..." msgstr "" #: ../src/viktrwlayer.c:3498 ../src/viktrwlayer.c:6542 msgid "_Upload" msgstr "" #: ../src/viktrwlayer.c:3504 msgid "Upload to _GPS..." msgstr "" #: ../src/viktrwlayer.c:3511 ../src/viktrwlayer.c:6570 msgid "Upload to _OSM..." msgstr "" #: ../src/viktrwlayer.c:3519 msgid "De_lete" msgstr "" #: ../src/viktrwlayer.c:3525 msgid "Delete All _Tracks" msgstr "" #: ../src/viktrwlayer.c:3531 msgid "Delete Tracks _From Selection..." msgstr "" #: ../src/viktrwlayer.c:3537 ../src/viktrwlayer.c:6290 msgid "Delete _All Routes" msgstr "" #: ../src/viktrwlayer.c:3543 ../src/viktrwlayer.c:6296 msgid "_Delete Routes From Selection..." msgstr "" #: ../src/viktrwlayer.c:3549 msgid "Delete All _Waypoints" msgstr "" #: ../src/viktrwlayer.c:3555 msgid "Delete Waypoints From _Selection..." msgstr "" #: ../src/viktrwlayer.c:4128 #, c-format msgid "Are you sure you want to delete all tracks in %s?" msgstr "" #: ../src/viktrwlayer.c:4138 #, c-format msgid "Are you sure you want to delete all routes in %s?" msgstr "" #: ../src/viktrwlayer.c:4148 #, c-format msgid "Are you sure you want to delete all waypoints in %s?" msgstr "" #: ../src/viktrwlayer.c:4165 #, c-format msgid "Are you sure you want to delete the waypoint \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4178 #, c-format msgid "Are you sure you want to delete the track \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4191 #, c-format msgid "Are you sure you want to delete the route \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4351 ../src/viktrwlayer.c:4922 msgid "" "Converting a track to a route removes extra track data such as segments, " "timestamps, etc...\n" "Do you want to continue?" msgstr "" #: ../src/viktrwlayer.c:4711 msgid "Failed. No other tracks with timestamps in this layer found" msgstr "" #: ../src/viktrwlayer.c:4713 msgid "Failed. No other tracks without timestamps in this layer found" msgstr "" #: ../src/viktrwlayer.c:4732 msgid "Merge with..." msgstr "" #: ../src/viktrwlayer.c:4733 msgid "Select route to merge with" msgstr "" #: ../src/viktrwlayer.c:4733 msgid "Select track to merge with" msgstr "" #: ../src/viktrwlayer.c:4818 ../src/viktrwlayer.c:4895 msgid "Append Route" msgstr "" #: ../src/viktrwlayer.c:4818 ../src/viktrwlayer.c:4895 msgid "Append Track" msgstr "" #: ../src/viktrwlayer.c:4819 msgid "Select the route to append after the current route" msgstr "" #: ../src/viktrwlayer.c:4820 msgid "Select the track to append after the current track" msgstr "" #: ../src/viktrwlayer.c:4896 msgid "Select the track to append after the current route" msgstr "" #: ../src/viktrwlayer.c:4897 msgid "Select the route to append after the current track" msgstr "" #: ../src/viktrwlayer.c:4957 #, c-format msgid "%d segment merged" msgid_plural "%d segments merged" msgstr[0] "" msgstr[1] "" #: ../src/viktrwlayer.c:4973 msgid "Failed. This track does not have timestamp" msgstr "" #: ../src/viktrwlayer.c:4985 msgid "Failed. No other track in this layer has timestamp" msgstr "" #: ../src/viktrwlayer.c:4992 msgid "Merge Threshold..." msgstr "" #: ../src/viktrwlayer.c:4993 msgid "Merge when time between tracks less than:" msgstr "" #: ../src/viktrwlayer.c:5128 msgid "Split Threshold..." msgstr "" #: ../src/viktrwlayer.c:5129 msgid "Split when time between trackpoints exceeds:" msgstr "" #: ../src/viktrwlayer.c:5205 msgid "Split Every Nth Point" msgstr "" #: ../src/viktrwlayer.c:5206 msgid "Split on every Nth point:" msgstr "" #: ../src/viktrwlayer.c:5312 msgid "Can not split track as it has no segments" msgstr "" #: ../src/viktrwlayer.c:5340 ../src/viktrwlayer.c:5370 #, c-format msgid "Deleted %ld point" msgid_plural "Deleted %ld points" msgstr[0] "" msgstr[1] "" #: ../src/viktrwlayer.c:5531 msgid "Internal Error in vik_trw_layer_uniquify_tracks" msgstr "" #: ../src/viktrwlayer.c:5588 ../src/viktrwlayer.c:5635 #: ../src/viktrwlayer.c:5814 msgid "" "Multiple entries with the same name exist. This method only works with " "unique names. Force unique names now?" msgstr "" #: ../src/viktrwlayer.c:5599 msgid "No tracks found" msgstr "" #: ../src/viktrwlayer.c:5607 ../src/viktrwlayer.c:5654 #: ../src/viktrwlayer.c:5834 msgid "Delete Selection" msgstr "" #: ../src/viktrwlayer.c:5608 msgid "Select tracks to delete" msgstr "" #: ../src/viktrwlayer.c:5646 msgid "No routes found" msgstr "" #: ../src/viktrwlayer.c:5655 msgid "Select routes to delete" msgstr "" #: ../src/viktrwlayer.c:5761 msgid "Internal Error in vik_trw_layer_uniquify_waypoints" msgstr "" #: ../src/viktrwlayer.c:5824 msgid "No waypoints found" msgstr "" #: ../src/viktrwlayer.c:5835 msgid "Select waypoints to delete" msgstr "" #: ../src/viktrwlayer.c:5896 #, c-format msgid "" "A waypoint with the name \"%s\" already exists. Really rename to the same " "name?" msgstr "" #: ../src/viktrwlayer.c:5926 #, c-format msgid "" "A track with the name \"%s\" already exists. Really rename to the same name?" msgstr "" #: ../src/viktrwlayer.c:5963 #, c-format msgid "" "A route with the name \"%s\" already exists. Really rename to the same name?" msgstr "" #: ../src/viktrwlayer.c:6085 ../src/viktrwlayer.c:6337 msgid "_Goto" msgstr "" #: ../src/viktrwlayer.c:6104 msgid "_Visit Geocache Webpage" msgstr "" #: ../src/viktrwlayer.c:6123 msgid "_Show Picture..." msgstr "" #: ../src/viktrwlayer.c:6131 msgid "Update Geotag on _Image" msgstr "" #: ../src/viktrwlayer.c:6137 msgid "_Update" msgstr "" #: ../src/viktrwlayer.c:6142 msgid "Update and _Keep File Timestamp" msgstr "" #: ../src/viktrwlayer.c:6153 msgid "Visit _Webpage" msgstr "" #: ../src/viktrwlayer.c:6184 msgid "_New Waypoint..." msgstr "" #: ../src/viktrwlayer.c:6193 msgid "_View All Waypoints" msgstr "" #: ../src/viktrwlayer.c:6205 msgid "Delete _All Waypoints" msgstr "" #: ../src/viktrwlayer.c:6211 msgid "_Delete Waypoints From Selection..." msgstr "" #: ../src/viktrwlayer.c:6233 msgid "_View All Tracks" msgstr "" #: ../src/viktrwlayer.c:6239 msgid "_New Track" msgstr "" #: ../src/viktrwlayer.c:6247 msgid "Delete _All Tracks" msgstr "" #: ../src/viktrwlayer.c:6253 msgid "_Delete Tracks From Selection..." msgstr "" #: ../src/viktrwlayer.c:6276 msgid "_View All Routes" msgstr "" #: ../src/viktrwlayer.c:6282 msgid "_New Route" msgstr "" #: ../src/viktrwlayer.c:6327 msgid "_View Track" msgstr "" #: ../src/viktrwlayer.c:6329 msgid "_View Route" msgstr "" #: ../src/viktrwlayer.c:6343 msgid "_Startpoint" msgstr "" #: ../src/viktrwlayer.c:6349 msgid "\"_Center\"" msgstr "" #: ../src/viktrwlayer.c:6355 msgid "_Endpoint" msgstr "" #: ../src/viktrwlayer.c:6361 msgid "_Highest Altitude" msgstr "" #: ../src/viktrwlayer.c:6367 msgid "_Lowest Altitude" msgstr "" #: ../src/viktrwlayer.c:6375 msgid "_Maximum Speed" msgstr "" #: ../src/viktrwlayer.c:6384 msgid "Co_mbine" msgstr "" #: ../src/viktrwlayer.c:6392 msgid "_Merge By Time..." msgstr "" #: ../src/viktrwlayer.c:6397 msgid "Merge _Segments" msgstr "" #: ../src/viktrwlayer.c:6403 msgid "Merge _With Other Tracks..." msgstr "" #: ../src/viktrwlayer.c:6409 msgid "_Append Track..." msgstr "" #: ../src/viktrwlayer.c:6411 msgid "_Append Route..." msgstr "" #: ../src/viktrwlayer.c:6417 msgid "Append _Route..." msgstr "" #: ../src/viktrwlayer.c:6419 msgid "Append _Track..." msgstr "" #: ../src/viktrwlayer.c:6426 msgid "_Split" msgstr "" #: ../src/viktrwlayer.c:6434 msgid "_Split By Time..." msgstr "" #. ATM always enable this entry - don't want to have to analyse the track before displaying the menu - to keep the menu speedy #: ../src/viktrwlayer.c:6440 msgid "Split Se_gments" msgstr "" #: ../src/viktrwlayer.c:6446 msgid "Split By _Number of Points..." msgstr "" #: ../src/viktrwlayer.c:6451 msgid "Split at _Trackpoint" msgstr "" #: ../src/viktrwlayer.c:6460 msgid "Delete Poi_nts" msgstr "" #: ../src/viktrwlayer.c:6466 msgid "Delete Points With The Same _Position" msgstr "" #: ../src/viktrwlayer.c:6471 msgid "Delete Points With The Same _Time" msgstr "" #: ../src/viktrwlayer.c:6477 msgid "_Reverse Track" msgstr "" #: ../src/viktrwlayer.c:6479 msgid "_Reverse Route" msgstr "" #: ../src/viktrwlayer.c:6488 msgid "Down_load Maps Along Track..." msgstr "" #: ../src/viktrwlayer.c:6490 msgid "Down_load Maps Along Route..." msgstr "" #: ../src/viktrwlayer.c:6497 msgid "_Apply DEM Data" msgstr "" #: ../src/viktrwlayer.c:6504 msgid "_Export Track as GPX..." msgstr "" #: ../src/viktrwlayer.c:6506 msgid "_Export Route as GPX..." msgstr "" #: ../src/viktrwlayer.c:6513 msgid "E_xtend Track End" msgstr "" #: ../src/viktrwlayer.c:6515 msgid "E_xtend Route End" msgstr "" #: ../src/viktrwlayer.c:6522 msgid "C_onvert to a Route" msgstr "" #: ../src/viktrwlayer.c:6524 msgid "C_onvert to a Track" msgstr "" #: ../src/viktrwlayer.c:6532 msgid "Extend _Using Route Finder" msgstr "" #: ../src/viktrwlayer.c:6548 msgid "_Upload to GPS..." msgstr "" #: ../src/viktrwlayer.c:6559 msgid "_View Google Directions" msgstr "" #: ../src/viktrwlayer.c:6579 msgid "Use with _Filter" msgstr "" #: ../src/viktrwlayer.c:6612 msgid "_Edit Trackpoint" msgstr "" #: ../src/viktrwlayer.c:7524 #, c-format msgid " - Gain %dm:Loss %dm" msgstr "" #: ../src/viktrwlayer.c:7526 #, c-format msgid " - Gain %dft:Loss %dft" msgstr "" #: ../src/viktrwlayer.c:7531 #, c-format msgid " - Bearing %3.1f° - Step %s" msgstr "" #: ../src/viktrwlayer.c:8124 #, c-format msgid "Could not launch %s to open file." msgstr "" #: ../src/viktrwlayer.c:8205 #, c-format msgid "Creating %d Image Thumbnails..." msgstr "" #: ../src/viktrwlayer.c:8524 msgid "No map layer in use. Create one first" msgstr "" #: ../src/viktrwlayer_propwin.c:898 ../src/viktrwlayer_propwin.c:1155 #, c-format msgid "%.1f kph" msgstr "" #: ../src/viktrwlayer_propwin.c:901 ../src/viktrwlayer_propwin.c:1158 #, c-format msgid "%.1f mph" msgstr "" #: ../src/viktrwlayer_propwin.c:904 ../src/viktrwlayer_propwin.c:1161 #, c-format msgid "%.1f knots" msgstr "" #. VIK_UNITS_SPEED_METRES_PER_SECOND: #: ../src/viktrwlayer_propwin.c:908 ../src/viktrwlayer_propwin.c:1165 #, c-format msgid "%.1f m/s" msgstr "" #: ../src/viktrwlayer_propwin.c:1745 #, c-format msgid "%.1f miles" msgstr "" #: ../src/viktrwlayer_propwin.c:1747 #, c-format msgid "%.1f km" msgstr "" #: ../src/viktrwlayer_propwin.c:2681 msgid "Failed spliting track. Track unchanged" msgstr "" #: ../src/viktrwlayer_propwin.c:2779 ../src/viktrwlayer_propwin.c:3178 #, c-format msgid "%s - Track Properties" msgstr "" #: ../src/viktrwlayer_propwin.c:2784 msgid "Split at _Marker" msgstr "" #: ../src/viktrwlayer_propwin.c:2785 msgid "Split _Segments" msgstr "" #: ../src/viktrwlayer_propwin.c:2786 msgid "_Reverse" msgstr "" #: ../src/viktrwlayer_propwin.c:2787 msgid "_Delete Dupl." msgstr "" #: ../src/viktrwlayer_propwin.c:2813 msgid "Comment:" msgstr "説明:" #: ../src/viktrwlayer_propwin.c:2814 msgid "Description:" msgstr "" #: ../src/viktrwlayer_propwin.c:2815 msgid "Track Length:" msgstr "" #: ../src/viktrwlayer_propwin.c:2816 msgid "Trackpoints:" msgstr "" #: ../src/viktrwlayer_propwin.c:2817 msgid "Segments:" msgstr "" #: ../src/viktrwlayer_propwin.c:2818 msgid "Duplicate Points:" msgstr "" #: ../src/viktrwlayer_propwin.c:2819 msgid "Max Speed:" msgstr "最大速度:" #: ../src/viktrwlayer_propwin.c:2820 msgid "Avg. Speed:" msgstr "平均速度:" #: ../src/viktrwlayer_propwin.c:2821 msgid "Moving Avg. Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:2822 msgid "Avg. Dist. Between TPs:" msgstr "" #: ../src/viktrwlayer_propwin.c:2823 msgid "Elevation Range:" msgstr "高度範圍:" #: ../src/viktrwlayer_propwin.c:2824 msgid "Total Elevation Gain/Loss:" msgstr "" #: ../src/viktrwlayer_propwin.c:2825 msgid "Start:" msgstr "開始:" #: ../src/viktrwlayer_propwin.c:2826 msgid "End:" msgstr "結束:" #: ../src/viktrwlayer_propwin.c:2827 msgid "Duration:" msgstr "持續時間:" #: ../src/viktrwlayer_propwin.c:2828 msgid "Color:" msgstr "" #: ../src/viktrwlayer_propwin.c:2877 ../src/viktrwlayer_propwin.c:2901 #: ../src/viktrwlayer_propwin.c:2929 ../src/viktrwlayer_propwin.c:2966 #: ../src/viktrwlayer_propwin.c:2984 ../src/viktrwlayer_propwin.c:3034 #: ../src/viktrwlayer_propwin.c:3035 ../src/viktrwlayer_propwin.c:3036 #: ../src/viktrwlayer_propwin.c:3062 ../src/viktrwlayer_propwin.c:3063 #: ../src/viktrwlayer_propwin.c:3078 ../src/viktrwlayer_propwin.c:3079 #: ../src/viktrwlayer_propwin.c:3092 ../src/viktrwlayer_propwin.c:3093 #: ../src/viktrwlayer_propwin.c:3106 ../src/viktrwlayer_propwin.c:3107 #: ../src/viktrwlayer_propwin.c:3120 ../src/viktrwlayer_propwin.c:3121 #: ../src/viktrwlayer_propwin.c:3134 ../src/viktrwlayer_propwin.c:3135 #, c-format msgid "No Data" msgstr "没有資料" #: ../src/viktrwlayer_propwin.c:3031 #, c-format msgid "%d minutes" msgstr "%d 分鐘" #: ../src/viktrwlayer_propwin.c:3058 msgid "Statistics" msgstr "" #: ../src/viktrwlayer_propwin.c:3064 msgid "Show D_EM" msgstr "" #: ../src/viktrwlayer_propwin.c:3065 ../src/viktrwlayer_propwin.c:3080 #: ../src/viktrwlayer_propwin.c:3094 ../src/viktrwlayer_propwin.c:3136 msgid "Show _GPS Speed" msgstr "" #: ../src/viktrwlayer_propwin.c:3067 ../src/viktrwlayer_propwin.c:3082 #: ../src/viktrwlayer_propwin.c:3110 ../src/viktrwlayer_propwin.c:3138 msgid "Track Distance:" msgstr "" #: ../src/viktrwlayer_propwin.c:3068 ../src/viktrwlayer_propwin.c:3125 msgid "Track Height:" msgstr "" #: ../src/viktrwlayer_propwin.c:3073 msgid "Elevation-distance" msgstr "高度-距離" #: ../src/viktrwlayer_propwin.c:3083 msgid "Track Gradient:" msgstr "" #: ../src/viktrwlayer_propwin.c:3087 msgid "Gradient-distance" msgstr "" #: ../src/viktrwlayer_propwin.c:3096 ../src/viktrwlayer_propwin.c:3111 #: ../src/viktrwlayer_propwin.c:3124 msgid "Track Time:" msgstr "" #: ../src/viktrwlayer_propwin.c:3097 ../src/viktrwlayer_propwin.c:3139 msgid "Track Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:3101 msgid "Speed-time" msgstr "速度-時間" #: ../src/viktrwlayer_propwin.c:3108 ../src/viktrwlayer_propwin.c:3122 msgid "Show S_peed" msgstr "" #: ../src/viktrwlayer_propwin.c:3115 msgid "Distance-time" msgstr "" #: ../src/viktrwlayer_propwin.c:3129 msgid "Elevation-time" msgstr "" #: ../src/viktrwlayer_propwin.c:3143 msgid "Speed-distance" msgstr "" #: ../src/viktrwlayer_tpwin.c:118 msgid "Part of Track:" msgstr "" #: ../src/viktrwlayer_tpwin.c:119 msgid "Latitude:" msgstr "緯度 :" #: ../src/viktrwlayer_tpwin.c:120 msgid "Longitude:" msgstr "經度 :" #: ../src/viktrwlayer_tpwin.c:121 msgid "Altitude:" msgstr "高度 :" #: ../src/viktrwlayer_tpwin.c:122 msgid "Timestamp:" msgstr "" #: ../src/viktrwlayer_tpwin.c:123 msgid "Time:" msgstr "時間 :" #: ../src/viktrwlayer_tpwin.c:124 msgid "Distance Difference:" msgstr "" #: ../src/viktrwlayer_tpwin.c:125 msgid "Time Difference:" msgstr "" #: ../src/viktrwlayer_tpwin.c:126 msgid "\"Speed\" Between:" msgstr "" #: ../src/viktrwlayer_tpwin.c:127 msgid "VDOP:" msgstr "" #: ../src/viktrwlayer_tpwin.c:128 msgid "HDOP:" msgstr "" #: ../src/viktrwlayer_tpwin.c:129 msgid "PDOP:" msgstr "" #: ../src/viktrwlayer_tpwin.c:130 msgid "SAT/FIX:" msgstr "" #: ../src/viktrwlayer_tpwin.c:139 msgid "Trackpoint" msgstr "" #: ../src/viktrwlayer_tpwin.c:142 msgid "_Insert After" msgstr "" #: ../src/viktrwlayer_tpwin.c:144 msgid "Split Here" msgstr "" #: ../src/viktrwlayer_geotag.c:446 #, c-format msgid "Geotagging %d Images..." msgstr "" #: ../src/viktrwlayer_geotag.c:510 msgid "Geotag Images" msgstr "" #: ../src/viktrwlayer_geotag.c:516 msgid "Images" msgstr "" #: ../src/viktrwlayer_geotag.c:520 msgid "Overwrite Existing Waypoints:" msgstr "" #: ../src/viktrwlayer_geotag.c:523 msgid "Overwrite Existing GPS Information:" msgstr "" #: ../src/viktrwlayer_geotag.c:525 msgid "Keep File Modification Timestamp:" msgstr "" #: ../src/viktrwlayer_geotag.c:555 msgid "Create Waypoints:" msgstr "" #: ../src/viktrwlayer_geotag.c:563 msgid "Write EXIF:" msgstr "" #: ../src/viktrwlayer_geotag.c:575 msgid "Interpolate Between Track Segments:" msgstr "" #: ../src/viktrwlayer_geotag.c:579 msgid "Image Time Offset (Seconds):" msgstr "" #: ../src/viktrwlayer_geotag.c:581 msgid "" "The number of seconds to ADD to the photos time to make it match the GPS " "data. Calculate this with (GPS - Photo). Can be negative or positive. Useful " "to adjust times when a camera's timestamp was incorrect." msgstr "" #: ../src/viktrwlayer_geotag.c:584 msgid "Image Timezone:" msgstr "" #: ../src/viktrwlayer_geotag.c:586 msgid "" "The timezone that was used when the images were created. For example, if a " "camera is set to AWST or +8:00 hours. Enter +8:00 here so that the correct " "adjustment to the images' time can be made. GPS data is always in UTC." msgstr "" #: ../src/viktrwlayer_geotag.c:590 #, c-format msgid "Using track: %s" msgstr "" #: ../src/viktrwlayer_geotag.c:592 #, c-format msgid "Using all tracks in: %s" msgstr "" #: ../src/vikstatus.c:105 msgid "Current zoom level. Click to select a new one." msgstr "" #: ../src/vikwaypoint.c:34 msgid "Waypoint" msgstr "" #. TODO get rid of this as this is unnecessary duplication... #: ../src/vikwindow.c:221 msgid "Pan" msgstr "移動" #: ../src/vikwindow.c:221 msgid "Zoom" msgstr "縮放" #: ../src/vikwindow.c:221 msgid "Ruler" msgstr "測距" #: ../src/vikwindow.c:221 msgid "Select" msgstr "" #. Create tooltip #: ../src/vikwindow.c:440 msgid "Select zoom level" msgstr "" #: ../src/vikwindow.c:645 #, c-format msgid "" "Do you want to save the changes you made to the document \"%s\"?\n" "\n" "Your changes will be lost if you don't save them." msgstr "" #: ../src/vikwindow.c:649 msgid "Don't Save" msgstr "不儲存" #: ../src/vikwindow.c:696 msgid "mpp" msgstr "mpp" #: ../src/vikwindow.c:696 msgid "pixelfact" msgstr "pixelfact" #: ../src/vikwindow.c:861 #, c-format msgid "%s %s %dm" msgstr "" #: ../src/vikwindow.c:863 #, c-format msgid "%s %s %dft" msgstr "" #: ../src/vikwindow.c:866 #, c-format msgid "%s %s" msgstr "" #. NB Ctrl+Shift+R is used for Refresh (deemed more important), so use 'U' instead #: ../src/vikwindow.c:1254 msgid "_Ruler" msgstr "_R 測距" #: ../src/vikwindow.c:1254 msgid "Ruler Tool" msgstr "測距工具" #: ../src/vikwindow.c:1502 ../src/vikwindow.c:3138 msgid "_Zoom" msgstr "_Z 縮放" #: ../src/vikwindow.c:1502 msgid "Zoom Tool" msgstr "縮放工具" #: ../src/vikwindow.c:1547 ../src/vikwindow.c:3139 msgid "_Pan" msgstr "_P 平移" #: ../src/vikwindow.c:1547 msgid "Pan Tool" msgstr "" #: ../src/vikwindow.c:1664 msgid "_Select" msgstr "" #: ../src/vikwindow.c:1664 msgid "Select Tool" msgstr "" #: ../src/vikwindow.c:1809 msgid "You must select a layer to show its properties." msgstr "您必須選一個層才能察看它的屬性" #. No error to show, so unlikely this will get called #: ../src/vikwindow.c:1824 msgid "The help system is not available." msgstr "" #. Main error path #: ../src/vikwindow.c:1827 #, c-format msgid "" "Help is not available because: %s.\n" "Ensure a Mime Type ghelp handler program is installed (e.g. yelp)." msgstr "" #: ../src/vikwindow.c:1850 msgid "You must select a layer to delete." msgstr "您必須選一個層才可移除" #: ../src/vikwindow.c:2087 msgid "Untitled" msgstr "未命名的" #: ../src/vikwindow.c:2194 #, c-format msgid "Unable to add '%s' to the list of recently used documents" msgstr "" #: ../src/vikwindow.c:2208 msgid "The file you requested could not be opened." msgstr "您選的檔案無法被開啟" #: ../src/vikwindow.c:2211 msgid "" "GPSBabel is required to load files of this type or GPSBabel encountered " "problems." msgstr "" #: ../src/vikwindow.c:2214 #, c-format msgid "Unable to load malformed GPX file %s" msgstr "" #: ../src/vikwindow.c:2217 #, c-format msgid "Unsupported file type for %s" msgstr "" #. Since we can process .vik files with issues just show a warning in the status bar #. Not that a user can do much about it... or tells them what this issue is yet... #: ../src/vikwindow.c:2223 #, c-format msgid "WARNING: issues encountered loading %s" msgstr "" #: ../src/vikwindow.c:2278 msgid "Please select a GPS data file to open. " msgstr "請選取一個GPS資料檔案來開啟 " #: ../src/vikwindow.c:2288 msgid "Geocaching" msgstr "" #: ../src/vikwindow.c:2294 msgid "Google Earth" msgstr "" #: ../src/vikwindow.c:2299 msgid "GPX" msgstr "" #: ../src/vikwindow.c:2304 ../src/vikwindow.c:2387 #: ../src/viking.desktop.in.h:1 msgid "Viking" msgstr "" #: ../src/vikwindow.c:2374 msgid "Save as Viking File." msgstr "另存新檔Viking檔案." #. Try harder... #: ../src/vikwindow.c:2619 ../src/vikwindow.c:2625 msgid "Generating image file..." msgstr "" #: ../src/vikwindow.c:2647 msgid "" "Failed to generate internal image.\n" "\n" "Try creating a smaller image." msgstr "" #: ../src/vikwindow.c:2655 msgid "Failed to generate image file." msgstr "" #. Success #: ../src/vikwindow.c:2660 msgid "Image file generated." msgstr "" #: ../src/vikwindow.c:2764 msgid "" "Viewable region outside allowable pixel size bounds for image. Clipping " "width/height values." msgstr "" #: ../src/vikwindow.c:2789 #, c-format msgid "Total area: %ldm x %ldm (%.3f sq. km)" msgstr "全部區域: %ldm x %ldm (%.3f 平方公裡)" #: ../src/vikwindow.c:2792 #, c-format msgid "Total area: %ldm x %ldm (%.3f sq. miles)" msgstr "" #: ../src/vikwindow.c:2813 msgid "Save Image" msgstr "儲存影像" #: ../src/vikwindow.c:2834 msgid "PNG" msgstr "" #: ../src/vikwindow.c:2857 msgid "You must be in UTM mode to use this feature" msgstr "你必須在UTM型態中來使用這個特徴" #: ../src/vikwindow.c:2862 msgid "Choose a directory to hold images" msgstr "" #. todo: default for answers inside VikWindow or static (thruout instance) #: ../src/vikwindow.c:2883 msgid "Save to Image File" msgstr "儲存為圖片檔案" #: ../src/vikwindow.c:2900 msgid "Width (pixels):" msgstr "寬度 (像素) :" #: ../src/vikwindow.c:2902 msgid "Height (pixels):" msgstr "高度 (像素) :" #: ../src/vikwindow.c:2905 msgid "" "WARNING: USING LARGE IMAGES OVER 10000x10000\n" "MAY CRASH THE PROGRAM!" msgstr "" #: ../src/vikwindow.c:2907 msgid "Zoom (meters per pixel):" msgstr "縮放 (米/像素) :" #: ../src/vikwindow.c:2921 msgid "Area in current viewable window" msgstr "" #: ../src/vikwindow.c:2931 msgid "Save as PNG" msgstr "儲存為PNG" #: ../src/vikwindow.c:2932 msgid "Save as JPEG" msgstr "儲存為JPEG" #: ../src/vikwindow.c:2954 msgid "East-west image tiles:" msgstr "" #: ../src/vikwindow.c:2956 msgid "North-south image tiles:" msgstr "" #: ../src/vikwindow.c:3097 msgid "Choose a background color" msgstr "選取一個背景色" #: ../src/vikwindow.c:3113 msgid "Choose a track highlight color" msgstr "" #: ../src/vikwindow.c:3134 msgid "_File" msgstr "_F 檔案" #: ../src/vikwindow.c:3135 msgid "_Edit" msgstr "_E 編輯" #: ../src/vikwindow.c:3136 msgid "_View" msgstr "_V 檢視" #: ../src/vikwindow.c:3137 msgid "_Show" msgstr "" #: ../src/vikwindow.c:3140 msgid "_Layers" msgstr "_L 圖層" #: ../src/vikwindow.c:3141 msgid "_Tools" msgstr "_T 工具" #: ../src/vikwindow.c:3142 msgid "_Webtools" msgstr "" #: ../src/vikwindow.c:3143 ../src/vikwindow.c:3206 msgid "_Help" msgstr "_H 輔助說明" #: ../src/vikwindow.c:3145 msgid "New file" msgstr "新建檔案" #: ../src/vikwindow.c:3146 msgid "_Open..." msgstr "_O 開啟..." #: ../src/vikwindow.c:3146 msgid "Open a file" msgstr "開啟一個檔案" #: ../src/vikwindow.c:3147 msgid "Open _Recent File" msgstr "" #: ../src/vikwindow.c:3148 msgid "Append _File..." msgstr "_p 增加檔案..." #: ../src/vikwindow.c:3148 msgid "Append data from a different file" msgstr "從不同的檔案中追加資料" #: ../src/vikwindow.c:3149 msgid "A_cquire" msgstr "_c 抓取" #: ../src/vikwindow.c:3150 msgid "Transfer data from a GPS device" msgstr "從一個GPS接收器獲得資料" #: ../src/vikwindow.c:3151 msgid "Import File With GPS_Babel..." msgstr "" #: ../src/vikwindow.c:3151 msgid "Import file via GPSBabel converter" msgstr "" #: ../src/vikwindow.c:3153 msgid "Google _Directions..." msgstr "_D 榖歌方位..." #: ../src/vikwindow.c:3153 msgid "Get driving directions from Google" msgstr "從榖歌獲得駕駛方位" #: ../src/vikwindow.c:3156 msgid "_OSM Traces..." msgstr "" #: ../src/vikwindow.c:3156 msgid "Get traces from OpenStreetMap" msgstr "" #: ../src/vikwindow.c:3157 msgid "_My OSM Traces..." msgstr "" #: ../src/vikwindow.c:3157 msgid "Get Your Own Traces from OpenStreetMap" msgstr "" #: ../src/vikwindow.c:3160 msgid "Geo_caches..." msgstr "" #: ../src/vikwindow.c:3160 msgid "Get Geocaches from geocaching.com" msgstr "從geocaching.com獲得地理緩衝區資料" #: ../src/vikwindow.c:3163 msgid "Create waypoints from geotagged images" msgstr "" #: ../src/vikwindow.c:3166 msgid "Create waypoints from Wikipedia items in the current view" msgstr "" #: ../src/vikwindow.c:3168 msgid "_Save" msgstr "_S 儲存" #: ../src/vikwindow.c:3168 msgid "Save the file" msgstr "儲存這個檔案" #: ../src/vikwindow.c:3169 msgid "Save _As..." msgstr "_A 另存新檔..." #: ../src/vikwindow.c:3169 msgid "Save the file under different name" msgstr "儲存為其他名字的檔案" #: ../src/vikwindow.c:3170 msgid "_Generate Image File..." msgstr "_G 生成圖形檔案..." #: ../src/vikwindow.c:3170 msgid "Save a snapshot of the workspace into a file" msgstr "" #: ../src/vikwindow.c:3171 msgid "Generate _Directory of Images..." msgstr "_D 建立圖片的目録..." #: ../src/vikwindow.c:3171 msgid "FIXME:IMGDIR" msgstr "" #: ../src/vikwindow.c:3174 msgid "_Print..." msgstr "_P 列印" #: ../src/vikwindow.c:3174 msgid "Print maps" msgstr "列印地圖" #: ../src/vikwindow.c:3177 msgid "E_xit" msgstr "_x 結束" #: ../src/vikwindow.c:3177 msgid "Exit the program" msgstr "結束程式" #: ../src/vikwindow.c:3178 msgid "Save and Exit" msgstr "儲存并結束" #: ../src/vikwindow.c:3178 msgid "Save and Exit the program" msgstr "儲存并結束程式" #: ../src/vikwindow.c:3180 msgid "Go to the _Default Location" msgstr "" #: ../src/vikwindow.c:3180 msgid "Go to the default location" msgstr "" #: ../src/vikwindow.c:3181 msgid "Go to _Location..." msgstr "" #: ../src/vikwindow.c:3181 msgid "Go to address/place using text search" msgstr "" #: ../src/vikwindow.c:3182 msgid "_Go to Lat/Lon..." msgstr "_G 前往一個經緯度值..." #: ../src/vikwindow.c:3182 msgid "Go to arbitrary lat/lon coordinate" msgstr "前往任意的經緯度座標" #: ../src/vikwindow.c:3183 msgid "Go to UTM..." msgstr "前往UTM..." #: ../src/vikwindow.c:3183 msgid "Go to arbitrary UTM coordinate" msgstr "前往任意的UTM座標" #: ../src/vikwindow.c:3184 msgid "_Refresh" msgstr "" #: ../src/vikwindow.c:3184 msgid "Refresh any maps displayed" msgstr "" #: ../src/vikwindow.c:3185 msgid "Set _Highlight Color..." msgstr "" #: ../src/vikwindow.c:3186 msgid "Set Bac_kground Color..." msgstr "" #: ../src/vikwindow.c:3187 msgid "Zoom _In" msgstr "_I 縮小" #: ../src/vikwindow.c:3188 msgid "Zoom _Out" msgstr "_O 放大" #: ../src/vikwindow.c:3189 msgid "Zoom _To..." msgstr "_T 縮放到..." #: ../src/vikwindow.c:3190 msgid "Pan _North" msgstr "" #: ../src/vikwindow.c:3191 msgid "Pan _East" msgstr "" #: ../src/vikwindow.c:3192 msgid "Pan _South" msgstr "" #: ../src/vikwindow.c:3193 msgid "Pan _West" msgstr "" #: ../src/vikwindow.c:3194 msgid "Background _Jobs" msgstr "_J 背景工作" #: ../src/vikwindow.c:3196 msgid "Cu_t" msgstr "_t 剪取" #: ../src/vikwindow.c:3197 msgid "_Copy" msgstr "_C 拷貝" #: ../src/vikwindow.c:3198 msgid "_Paste" msgstr "_P 黏貼" #: ../src/vikwindow.c:3199 msgid "_Delete" msgstr "_D 移除" #: ../src/vikwindow.c:3200 msgid "Delete All" msgstr "全部移除" #: ../src/vikwindow.c:3201 msgid "_Flush Map Cache" msgstr "" #: ../src/vikwindow.c:3202 msgid "_Set the Default Location" msgstr "" #: ../src/vikwindow.c:3202 msgid "Set the Default Location to the current position" msgstr "" #: ../src/vikwindow.c:3203 msgid "_Preferences" msgstr "_P 個人偏好" #: ../src/vikwindow.c:3204 msgid "_Properties" msgstr "_P 屬性" #: ../src/vikwindow.c:3207 msgid "_About" msgstr "_A 關于" #: ../src/vikwindow.c:3213 msgid "_UTM Mode" msgstr "_UTM 型態" #: ../src/vikwindow.c:3214 msgid "_Expedia Mode" msgstr "_Expedia 型態" #: ../src/vikwindow.c:3215 msgid "_Mercator Mode" msgstr "" #: ../src/vikwindow.c:3216 msgid "Lat_/Lon Mode" msgstr "" #: ../src/vikwindow.c:3220 msgid "Show _Scale" msgstr "" #: ../src/vikwindow.c:3220 msgid "Show Scale" msgstr "察看比例尺" #: ../src/vikwindow.c:3221 msgid "Show _Center Mark" msgstr "" #: ../src/vikwindow.c:3221 msgid "Show Center Mark" msgstr "察看中心記號" #: ../src/vikwindow.c:3222 msgid "Show _Highlight" msgstr "" #: ../src/vikwindow.c:3222 msgid "Show Highlight" msgstr "" #: ../src/vikwindow.c:3223 msgid "_Full Screen" msgstr "全屏" #: ../src/vikwindow.c:3223 msgid "Activate full screen mode" msgstr "" #: ../src/vikwindow.c:3224 msgid "Show Side _Panel" msgstr "" #: ../src/vikwindow.c:3224 msgid "Show Side Panel" msgstr "" #: ../src/vikwindow.c:3225 msgid "Show Status_bar" msgstr "" #: ../src/vikwindow.c:3225 msgid "Show Statusbar" msgstr "" #: ../src/vikwindow.c:3226 msgid "Show _Toolbar" msgstr "" #: ../src/vikwindow.c:3226 msgid "Show Toolbar" msgstr "" #: ../src/vikwindow.c:3227 msgid "Show _Menu" msgstr "" #: ../src/vikwindow.c:3227 msgid "Show Menu" msgstr "" #: ../src/viking.desktop.in.h:2 msgid "GPS Data Manager" msgstr "" #: ../src/viking.desktop.in.h:3 msgid "Map Based GPS Data Manager (live data capable)." msgstr "" #: ../src/libjpeg/jpeg-data.c:206 msgid "Data does not follow JPEG specification." msgstr "" #: ../src/libjpeg/jpeg-data.c:291 #, c-format msgid "Path '%s' invalid." msgstr "" #: ../src/libjpeg/jpeg-data.c:309 #, c-format msgid "Could not read '%s'." msgstr "" viking-1.4.2/po/nb.po0000644000175000017500000022215012175546146011320 00000000000000# Norwegian Bokmal translation for viking # Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008 # This file is distributed under the same license as the viking package. # FIRST AUTHOR , 2008. # msgid "" msgstr "" "Project-Id-Version: viking\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-02-04 23:29+0100\n" "PO-Revision-Date: 2010-11-17 23:08+0000\n" "Last-Translator: Guilhem Bonnefille \n" "Language-Team: Norwegian Bokmal \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2013-03-23 17:12+0000\n" "X-Generator: Launchpad (build 16540)\n" "Language: nb\n" #: ../src/acquire.c:103 ../src/vikgpslayer.c:1185 msgid "Done." msgstr "Ferdig." #: ../src/acquire.c:114 msgid "No data." msgstr "" #: ../src/acquire.c:154 ../src/acquire.c:404 msgid "Error: acquisition failed." msgstr "" #: ../src/acquire.c:341 msgid "Working..." msgstr "Arbeider..." #. This shouldn't happen... #: ../src/acquire.c:394 msgid "" "Unable to create command\n" "Acquire method failed." msgstr "" #: ../src/acquire.c:486 msgid "_Filter" msgstr "" #: ../src/acquire.c:501 #, c-format msgid "Filter with %s" msgstr "" #: ../src/acquire.c:518 msgid "Filter" msgstr "" #: ../src/background.c:52 #, c-format msgid "%d items" msgstr "" #: ../src/background.c:248 msgid "Job" msgstr "Jobb" #: ../src/background.c:252 msgid "Progress" msgstr "Fremdrift" #: ../src/background.c:268 msgid "Viking Background Jobs" msgstr "" #: ../src/bing.c:47 msgid "Bing" msgstr "" #. VIK_GTK_WINDOW_FROM_WIDGET(vp) #: ../src/bingmapsource.c:445 msgid "Bing attribution Loading" msgstr "" #: ../src/clipboard.c:95 msgid "paste failed" msgstr "lim inn mislykktes" #: ../src/clipboard.c:105 msgid "wrong clipboard data size" msgstr "" #: ../src/clipboard.c:124 #, c-format msgid "" "The clipboard contains sublayer data for %s layers. You must select a layer " "of this type to paste the clipboard data." msgstr "" #: ../src/clipboard.c:236 msgid "" "In order to paste a waypoint, please select an appropriate layer to paste " "into." msgstr "" #: ../src/dialog.c:52 msgid "Go to Lat/Lon" msgstr "" #: ../src/dialog.c:64 ../src/dialog.c:251 msgid "Latitude:" msgstr "Breddegrad:" #: ../src/dialog.c:70 ../src/dialog.c:256 msgid "Longitude:" msgstr "Lengdegrad:" #: ../src/dialog.c:102 msgid "Go to UTM" msgstr "" #: ../src/dialog.c:115 msgid "Northing:" msgstr "" #: ../src/dialog.c:121 msgid "Easting:" msgstr "" #: ../src/dialog.c:128 msgid "Zone:" msgstr "Sone:" #: ../src/dialog.c:131 msgid "Letter:" msgstr "" #: ../src/dialog.c:199 msgid "Waypoint Properties" msgstr "" #: ../src/dialog.c:233 msgid "Name:" msgstr "Navn:" #: ../src/dialog.c:261 msgid "Altitude:" msgstr "Høyde:" #: ../src/dialog.c:266 msgid "Comment:" msgstr "Kommentar:" #: ../src/dialog.c:274 ../src/osm-traces.c:437 msgid "Description:" msgstr "Beskrivelse:" #: ../src/dialog.c:277 msgid "Image:" msgstr "Bilde:" #: ../src/dialog.c:282 msgid "Symbol:" msgstr "Symbol:" #: ../src/dialog.c:291 msgid "(none)" msgstr "" #. TODO: other checks (isalpha or whatever ) #: ../src/dialog.c:356 msgid "Please enter a name for the waypoint." msgstr "Angi navn for waypointen" #: ../src/dialog.c:529 ../src/geonamessearch.c:243 #: ../src/datasource_osm_my_traces.c:507 msgid "Nothing was selected" msgstr "" #: ../src/dialog.c:537 msgid "Add Route" msgstr "" #: ../src/dialog.c:537 msgid "Add Track" msgstr "Legg til spor" #: ../src/dialog.c:545 msgid "Route Name:" msgstr "" #: ../src/dialog.c:545 msgid "Track Name:" msgstr "Spornavn:" #: ../src/dialog.c:565 msgid "Please enter a name for the track." msgstr "Vennligst skriv inn et navn for sporet" #: ../src/dialog.c:623 msgid "Zoom Factors..." msgstr "" #: ../src/dialog.c:637 msgid "Zoom factor (in meters per pixel):" msgstr "" #: ../src/dialog.c:638 msgid "X (easting): " msgstr "" #: ../src/dialog.c:639 msgid "Y (northing): " msgstr "" #: ../src/dialog.c:644 msgid "X and Y zoom factors must be equal" msgstr "" #: ../src/dialog.c:699 msgid "1 min" msgstr "1 minutt" #: ../src/dialog.c:700 msgid "1 hour" msgstr "1 time" #: ../src/dialog.c:701 msgid "1 day" msgstr "1 dag" #: ../src/dialog.c:702 msgid "Custom (in minutes):" msgstr "Tilpasset (i minutter):" #: ../src/dialog.c:808 msgid "GPS Data and Topo Analyzer, Explorer, and Manager." msgstr "" #: ../src/dialog.c:809 msgid "" "This program is free software; you can redistribute it and/or modify it " "under the terms of the GNU General Public License as published by the Free " "Software Foundation; either version 2 of the License, or (at your option) " "any later version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT " "ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or " "FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for " "more details.\n" "\n" "You should have received a copy of the GNU General Public License along with " "this program; if not, write to the Free Software Foundation, Inc., 59 Temple " "Place, Suite 330, Boston, MA 02111-1307, USA" msgstr "" #: ../src/dialog.c:837 msgid "Translation is coordinated on http://launchpad.net/viking" msgstr "" #: ../src/dialog.c:845 msgid "Download along track" msgstr "" #: ../src/dialog.c:851 msgid "Map type:" msgstr "Karttype:" #: ../src/dialog.c:856 msgid "Zoom level:" msgstr "Zoomnivå:" #: ../src/dialog.c:896 #, c-format msgid "The map data is licensed: %s." msgstr "" #: ../src/dialog.c:899 #, c-format msgid "" "The data provided by '%s' are licensed under the following license: " "%s.\n" "Please, read the license before continuing." msgstr "" #: ../src/dialog.c:904 msgid "Open license" msgstr "" #: ../src/expedia.c:53 msgid "Expedia Street Maps" msgstr "" #: ../src/expedia.c:81 msgid "Invalid expedia altitude" msgstr "" #: ../src/expedia.c:112 #, c-format msgid "" "Couldn't open EXPEDIA image file (right after successful download! Please " "report and delete image file!): %s" msgstr "" #: ../src/expedia.c:125 #, c-format msgid "" "Couldn't save EXPEDIA image file (right after successful download! Please " "report and delete image file!): %s" msgstr "" #. * #. * See http://www.geonames.org/export/wikipedia-webservice.html#wikipediaBoundingBox #. #. Translators may wish to change this setting as appropriate to get Wikipedia articles in that language #: ../src/geonamessearch.c:46 msgid "en" msgstr "" #: ../src/geonamessearch.c:121 msgid "Search" msgstr "Søk" #: ../src/geonamessearch.c:123 msgid "No entries found!" msgstr "" #. NB could allow columns to be shifted around by doing this after each new #. gtk_tree_view_column_set_reorderable ( column, TRUE ); #. However I don't think is that useful, so I haven't put it in #: ../src/geonamessearch.c:177 ../src/datasource_osm_my_traces.c:425 msgid "Name" msgstr "" #: ../src/geonamessearch.c:182 msgid "Feature" msgstr "" #: ../src/geonamessearch.c:187 ../src/datasource_osm_my_traces.c:440 msgid "Lat/Lon" msgstr "" #: ../src/geonamessearch.c:269 ../src/googlesearch.c:100 msgid "couldn't map temp file" msgstr "" #: ../src/globals.c:44 msgid "Degree format:" msgstr "" #: ../src/globals.c:48 msgid "Distance units:" msgstr "" #: ../src/globals.c:52 msgid "Speed units:" msgstr "" #: ../src/globals.c:56 msgid "Height units:" msgstr "" #: ../src/globals.c:60 msgid "Use large waypoint icons:" msgstr "" #: ../src/globals.c:64 msgid "Default latitude:" msgstr "" #: ../src/globals.c:67 msgid "Default longitude:" msgstr "" #: ../src/globals.c:73 msgid "Alphabetical" msgstr "" #: ../src/globals.c:73 ../src/datasource_osm_my_traces.c:435 msgid "Time" msgstr "" #: ../src/globals.c:76 msgid "KML File Export Units:" msgstr "" #: ../src/globals.c:77 msgid "GPX Track Order:" msgstr "" #: ../src/globals.c:82 msgid "Image Viewer:" msgstr "" #: ../src/globals.c:87 msgid "External GPX Program 1:" msgstr "" #: ../src/globals.c:88 msgid "External GPX Program 2:" msgstr "" #. Defaults for the options are setup here #: ../src/globals.c:96 msgid "General" msgstr "" #. New Tab #: ../src/globals.c:121 msgid "Export/External" msgstr "" #. Webtools #: ../src/google.c:36 msgid "Google" msgstr "Google" #: ../src/datasource_file.c:59 msgid "Import file with GPSBabel" msgstr "" #: ../src/datasource_file.c:60 msgid "Imported file" msgstr "" #. The file selector #: ../src/datasource_file.c:133 msgid "File:" msgstr "" #: ../src/datasource_file.c:134 msgid "File to import" msgstr "" #: ../src/datasource_file.c:141 msgid "All files" msgstr "" #. The file format selector #: ../src/datasource_file.c:148 msgid "File type:" msgstr "" #: ../src/datasource_file.c:193 #, c-format msgid "using babel args '%s' and file '%s'" msgstr "" #: ../src/datasource_gc.c:66 msgid "Download Geocaches" msgstr "Laster ned Geocacher" #: ../src/datasource_gc.c:67 msgid "Geocaching.com Caches" msgstr "Geocaching.com Cacher" #: ../src/datasource_gc.c:84 msgid "geocaching.com username:" msgstr "geocaching.com-brukernavn:" #: ../src/datasource_gc.c:85 msgid "geocaching.com password:" msgstr "geocaching.com-passord:" #: ../src/datasource_gc.c:126 #, c-format msgid "" "Can't find %s or %s in path! Check that you have installed it correctly." msgstr "" #: ../src/datasource_gc.c:188 msgid "Number geocaches:" msgstr "Antall geocacher:" #: ../src/datasource_gc.c:190 msgid "Centered around:" msgstr "" #: ../src/datasource_gc.c:226 msgid "Broken input - using some defaults" msgstr "" #: ../src/datasource_geotag.c:51 msgid "Create Waypoints from Geotagged Images" msgstr "" #: ../src/datasource_geotag.c:52 msgid "Geotagged Images" msgstr "" #: ../src/datasource_geotag.c:102 ../src/vikwindow.c:2314 #: ../src/vikwindow.c:2382 ../src/vikwindow.c:2824 msgid "All" msgstr "" #: ../src/datasource_geotag.c:107 ../src/vikwindow.c:2829 msgid "JPG" msgstr "" #: ../src/datasource_geotag.c:165 #, c-format msgid "Unable to create waypoint from %s" msgstr "" #: ../src/datasource_google.c:49 ../src/datasource_google.c:50 msgid "Google Directions" msgstr "" #: ../src/datasource_google.c:77 msgid "From:" msgstr "Fra:" #: ../src/datasource_google.c:79 msgid "To:" msgstr "Til:" #: ../src/datasource_gps.c:57 msgid "Acquire from GPS" msgstr "Hent fra GPS" #: ../src/datasource_gps.c:58 msgid "Acquired from GPS" msgstr "Hentet fra GPS" #: ../src/datasource_gps.c:221 #, c-format msgid "using cmdline '%s' and file '%s'\n" msgstr "" #: ../src/datasource_gps.c:297 ../src/vikgpslayer.c:884 #, c-format msgid "Downloading %d waypoint..." msgid_plural "Downloading %d waypoints..." msgstr[0] "" msgstr[1] "" #: ../src/datasource_gps.c:298 ../src/vikgpslayer.c:885 #, c-format msgid "Downloading %d trackpoint..." msgid_plural "Downloading %d trackpoints..." msgstr[0] "" msgstr[1] "" #: ../src/datasource_gps.c:303 ../src/vikgpslayer.c:890 #, c-format msgid "Downloading %d routepoint..." msgid_plural "Downloading %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/datasource_gps.c:325 ../src/datasource_gps.c:326 #: ../src/datasource_gps.c:327 #, c-format msgid "Downloaded %d out of %d %s..." msgstr "Lastet ned %d av %d %s..." #: ../src/datasource_gps.c:331 ../src/datasource_gps.c:332 #: ../src/datasource_gps.c:333 #, c-format msgid "Downloaded %d %s." msgstr "Lastet ned %d %s." #: ../src/datasource_gps.c:347 ../src/vikgpslayer.c:968 #, c-format msgid "GPS Device: %s" msgstr "GPS-enhet: %s" #: ../src/datasource_gps.c:370 ../src/vikgpslayer.c:1042 #: ../src/vikgpslayer.c:1110 msgid "Status: Working..." msgstr "" #: ../src/datasource_gps.c:469 ../src/vikgpslayer.c:150 msgid "GPS Protocol:" msgstr "GPS-protokoll" #. List now assigned at runtime #: ../src/datasource_gps.c:488 ../src/vikgpslayer.c:151 msgid "Serial Port:" msgstr "" #: ../src/datasource_gps.c:509 msgid "" "Turn Off After Transfer\n" "(Garmin/NAViLink Only)" msgstr "" #: ../src/datasource_gps.c:512 msgid "Tracks:" msgstr "" #: ../src/datasource_gps.c:516 msgid "Routes:" msgstr "" #: ../src/datasource_gps.c:520 msgid "Waypoints:" msgstr "" #: ../src/datasource_gps.c:594 ../src/vikgpslayer.c:1305 msgid "GPS device: N/A" msgstr "" #: ../src/datasource_osm.c:52 ../src/datasource_osm.c:53 msgid "OSM traces" msgstr "" #: ../src/datasource_osm.c:80 msgid "Page number:" msgstr "" #: ../src/datasource_osm_my_traces.c:63 ../src/datasource_osm_my_traces.c:64 msgid "OSM My Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:108 msgid "Username:" msgstr "" #: ../src/datasource_osm_my_traces.c:113 msgid "The email or username used to login to OSM" msgstr "" #: ../src/datasource_osm_my_traces.c:115 ../src/osm-traces.c:413 msgid "Password:" msgstr "Passord:" #: ../src/datasource_osm_my_traces.c:120 msgid "The password used to login to OSM" msgstr "" #: ../src/datasource_osm_my_traces.c:430 msgid "Description" msgstr "" #: ../src/datasource_osm_my_traces.c:445 msgid "Privacy" msgstr "" #: ../src/datasource_osm_my_traces.c:452 msgid "Within Current View" msgstr "" #: ../src/datasource_osm_my_traces.c:518 msgid "GPS Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:520 msgid "None found!" msgstr "" #: ../src/datasource_osm_my_traces.c:629 msgid "My OSM Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:645 #, c-format msgid "Unable to get trace: %s" msgstr "" #: ../src/datasource_wikipedia.c:32 msgid "Create Waypoints from Wikipedia Articles" msgstr "" #: ../src/datasource_wikipedia.c:33 msgid "Wikipedia Waypoints" msgstr "" #: ../src/dem.c:65 ../src/dem.c:79 msgid "Invalid DEM" msgstr "Ugyldig DEM" #: ../src/dem.c:121 msgid "Invalid DEM header" msgstr "" #: ../src/dem.c:190 ../src/dem.c:203 msgid "Incorrect DEM Class B record: expected 1" msgstr "" #: ../src/dem.c:360 #, c-format msgid "Couldn't map file %s: %s" msgstr "" #: ../src/download.c:112 msgid "Tile age (s):" msgstr "" #: ../src/download.c:233 #, c-format msgid "Download error: %s" msgstr "Nedlastingsfeil: %s" #: ../src/download.c:313 msgid "couldn't open temp file" msgstr "kunne ikke åpne tempfil" #: ../src/file.c:456 ../src/file.c:461 #, c-format msgid "Draw mode '%s' no more supported" msgstr "" #: ../src/geotag_exif.c:433 msgid "Not enough memory." msgstr "" #: ../src/geotag_exif.c:451 msgid "Setting a value for this tag is unsupported!" msgstr "" #: ../src/geotag_exif.c:470 #, c-format msgid "Too few components specified (need %d, found %d)\n" msgstr "" #: ../src/geotag_exif.c:474 msgid "Numeric value expected\n" msgstr "" #: ../src/geotag_exif.c:482 msgid "This shouldn't happen!" msgstr "" #: ../src/geotag_exif.c:552 msgid "Not yet implemented!" msgstr "" #: ../src/geotag_exif.c:565 msgid "Warning; Too many components specified!" msgstr "" #: ../src/osm-traces.c:73 msgid "Identifiable (public w/ timestamps)" msgstr "" #: ../src/osm-traces.c:74 msgid "Trackable (private w/ timestamps)" msgstr "" #: ../src/osm-traces.c:75 msgid "Public" msgstr "Offentlig" #: ../src/osm-traces.c:76 msgid "Private" msgstr "" #: ../src/osm-traces.c:93 msgid "OSM username:" msgstr "OSM-brukernavn:" #: ../src/osm-traces.c:94 msgid "OSM password:" msgstr "OSM-passord:" #. Preferences #: ../src/osm-traces.c:151 msgid "OpenStreetMap Traces" msgstr "" #: ../src/osm-traces.c:234 #, c-format msgid "failed to upload data: HTTP response is %ld" msgstr "" #: ../src/osm-traces.c:239 #, c-format msgid "curl_easy_getinfo failed: %d" msgstr "" #: ../src/osm-traces.c:244 #, c-format msgid "curl request failed: %s" msgstr "" #: ../src/osm-traces.c:275 #, c-format msgid "failed to open temporary file: %s" msgstr "kunne ikke åpne midlertidig fil: %s" #. Success #: ../src/osm-traces.c:328 msgid "Uploaded to OSM" msgstr "" #: ../src/osm-traces.c:332 msgid "FAILED TO UPLOAD DATA TO OSM - CURL PROBLEM" msgstr "" #: ../src/osm-traces.c:335 msgid "FAILED TO UPLOAD DATA TO OSM" msgstr "" #: ../src/osm-traces.c:335 msgid "HTTP response code" msgstr "" #: ../src/osm-traces.c:348 #, c-format msgid "failed to unlink temporary file: %s" msgstr "" #: ../src/osm-traces.c:387 msgid "OSM upload" msgstr "OSM-opplasting" #: ../src/osm-traces.c:405 msgid "Email:" msgstr "E-post:" #: ../src/osm-traces.c:410 msgid "" "The email used as login\n" "Enter the email you use to login into www.openstreetmap.org." msgstr "" #: ../src/osm-traces.c:418 msgid "" "The password used to login\n" "Enter the password you use to login into " "www.openstreetmap.org." msgstr "" #: ../src/osm-traces.c:423 msgid "File's name:" msgstr "Filens navn:" #: ../src/osm-traces.c:433 msgid "" "The name of the file on OSM\n" "This is the name of the file created on the server.This is not the " "name of the local file." msgstr "" #: ../src/osm-traces.c:442 msgid "The description of the trace" msgstr "" #: ../src/osm-traces.c:444 msgid "Tags:" msgstr "" #: ../src/osm-traces.c:449 msgid "The tags associated to the trace" msgstr "" #: ../src/osm-traces.c:482 #, c-format msgid "Uploading %s to OSM" msgstr "Laster opp %s til OSM" #: ../src/mapcache.c:61 msgid "Map cache memory size (MB):" msgstr "" #: ../src/print.c:53 msgid "None" msgstr "Ingen" #: ../src/print.c:54 msgid "Horizontally" msgstr "Horisontalt" #: ../src/print.c:55 msgid "Vertically" msgstr "Vertikalt" #: ../src/print.c:56 msgid "Both" msgstr "Begge" #: ../src/print.c:120 msgid "Image Settings" msgstr "Bildeinnstillinger" #: ../src/print.c:546 msgid "done" msgstr "ferdig" #. Page Size #: ../src/print.c:575 msgid "_Adjust Page Size and Orientation" msgstr "" #: ../src/print.c:591 msgid "C_enter:" msgstr "" #. ignore page margins #: ../src/print.c:609 msgid "Ignore Page _Margins" msgstr "" #: ../src/print.c:628 msgid "Image S_ize:" msgstr "B_ildestørrelse:" #: ../src/util.c:81 msgid "Could not launch web browser." msgstr "Kunne ikke starte nettleser." #: ../src/util.c:92 msgid "Could not create new email." msgstr "" #: ../src/vikcoordlayer.c:46 msgid "Color:" msgstr "Farge:" #: ../src/vikcoordlayer.c:47 msgid "Minutes Width:" msgstr "" #: ../src/vikcoordlayer.c:48 msgid "Line Thickness:" msgstr "Linjetykkelse:" #: ../src/vikcoordlayer.c:56 msgid "Coordinate" msgstr "" #: ../src/datasource_bfilter.c:46 msgid "Max number of points:" msgstr "" #: ../src/datasource_bfilter.c:60 msgid "Simplify All Tracks..." msgstr "" #: ../src/datasource_bfilter.c:61 msgid "Simplified Tracks" msgstr "Forenklede spor" #: ../src/datasource_bfilter.c:96 ../src/datasource_bfilter.c:97 msgid "Remove Duplicate Waypoints" msgstr "" #: ../src/datasource_bfilter.c:129 msgid "Waypoints Inside This" msgstr "" #: ../src/datasource_bfilter.c:130 msgid "Polygonized Layer" msgstr "" #: ../src/datasource_bfilter.c:165 msgid "Waypoints Outside This" msgstr "" #: ../src/datasource_bfilter.c:166 msgid "Polygonzied Layer" msgstr "Polygoniserte lag" #: ../src/main.c:89 #, c-format msgid "Ignoring Xlib error: error code %d request code %d\n" msgstr "" #: ../src/main.c:102 msgid "Enable debug output" msgstr "Aktiver feilsøkingsutskrifter" #: ../src/main.c:103 msgid "Enable verbose output" msgstr "Slå på utfyllende utskrift" #: ../src/main.c:104 msgid "Show version" msgstr "Vis versjon" #: ../src/osm.c:106 msgid "On Disk OSM Tile Format" msgstr "" #: ../src/osm.c:121 msgid "OSM (view)" msgstr "" #: ../src/osm.c:125 msgid "OSM (edit)" msgstr "" #: ../src/osm.c:129 msgid "OSM (render)" msgstr "" #. Example: http://127.0.0.1:8111/load_and_zoom?left=8.19&right=8.20&top=48.605&bottom=48.590&select=node413602999 #. JOSM or merkaartor must already be running with remote interface enabled #: ../src/osm.c:136 msgid "Local port 8111 (eg JOSM)" msgstr "" #: ../src/preferences.c:285 msgid "Preferences" msgstr "" #: ../src/uibuilder.c:147 msgid "Take care that this password will be stored clearly in a plain file." msgstr "" #: ../src/vikaggregatelayer.c:37 msgid "Aggregate" msgstr "" #: ../src/vikdemlayer.c:101 msgid "Absolute height" msgstr "" #: ../src/vikdemlayer.c:102 msgid "Height gradient" msgstr "" #: ../src/vikdemlayer.c:118 msgid "DEM Files:" msgstr "DEM-filer:" #: ../src/vikdemlayer.c:119 msgid "Download Source:" msgstr "Last ned kilde:" #: ../src/vikdemlayer.c:120 msgid "Min Elev Color:" msgstr "" #: ../src/vikdemlayer.c:121 msgid "Type:" msgstr "" #: ../src/vikdemlayer.c:122 msgid "Min Elev:" msgstr "" #: ../src/vikdemlayer.c:123 msgid "Max Elev:" msgstr "" #: ../src/vikdemlayer.c:134 msgid "_DEM Download" msgstr "" #: ../src/vikdemlayer.c:134 msgid "DEM Download" msgstr "" #: ../src/vikdemlayer.c:188 msgid "DEM" msgstr "" #: ../src/vikdemlayer.c:284 #, c-format msgid "Number of files: %d" msgstr "" #: ../src/vikdemlayer.c:385 msgid "DEM Loading" msgstr "" #: ../src/vikdemlayer.c:889 #, c-format msgid "No SRTM data available for %f, %f" msgstr "Ingen SRTM-data tilgjengelig for %f, %f" #: ../src/vikdemlayer.c:1149 #, c-format msgid "Downloading DEM %s" msgstr "Laster ned DEM %s" #: ../src/vikfileentry.c:68 msgid "Browse..." msgstr "" #: ../src/vikfileentry.c:96 msgid "Choose file" msgstr "Velg fil" #: ../src/vikfilelist.c:48 msgid "Choose file(s)" msgstr "Velg fil(er)" #: ../src/vikfilelist.c:172 msgid "Add..." msgstr "Legg til..." #: ../src/vikfilelist.c:173 msgid "Delete" msgstr "Slett" #: ../src/vikgeoreflayer.c:70 msgid "_Georef Move Map" msgstr "" #: ../src/vikgeoreflayer.c:70 msgid "Georef Move Map" msgstr "" #: ../src/vikgeoreflayer.c:77 msgid "Georef Z_oom Tool" msgstr "" #: ../src/vikgeoreflayer.c:77 msgid "Georef Zoom Tool" msgstr "" #: ../src/vikgeoreflayer.c:87 msgid "GeoRef Map" msgstr "" #: ../src/vikgeoreflayer.c:335 ../src/vikmapslayer.c:685 #, c-format msgid "Couldn't open image file: %s" msgstr "Kunne ikke åpne bildefil: %s" #: ../src/vikgeoreflayer.c:365 msgid "Unexpected end of file reading World file." msgstr "" #: ../src/vikgeoreflayer.c:381 ../src/vikgeoreflayer.c:426 msgid "Choose World file" msgstr "Velg World-fil" #: ../src/vikgeoreflayer.c:394 msgid "The World file you requested could not be opened for reading." msgstr "Den World-filen du valgte kunne ikke åpnes for lesing." #: ../src/vikgeoreflayer.c:439 msgid "The file you requested could not be opened for writing." msgstr "Den World-filen du valgte kunne ikke åpnes for skriving." #: ../src/vikgeoreflayer.c:456 ../src/viklayer.c:480 msgid "Layer Properties" msgstr "Laginnstillinger" #: ../src/vikgeoreflayer.c:478 msgid "World File Parameters:" msgstr "" #: ../src/vikgeoreflayer.c:479 msgid "Load From File..." msgstr "Last inn fra fil..." #: ../src/vikgeoreflayer.c:484 msgid "Corner pixel easting:" msgstr "" #: ../src/vikgeoreflayer.c:486 msgid "the UTM \"easting\" value of the upper-right corner pixel of the map" msgstr "" #: ../src/vikgeoreflayer.c:488 msgid "Corner pixel northing:" msgstr "" #: ../src/vikgeoreflayer.c:490 msgid "the UTM \"northing\" value of the upper-right corner pixel of the map" msgstr "" #: ../src/vikgeoreflayer.c:492 msgid "X (easting) scale (mpp): " msgstr "" #: ../src/vikgeoreflayer.c:493 msgid "Y (northing) scale (mpp): " msgstr "" #: ../src/vikgeoreflayer.c:496 msgid "the scale of the map in the X direction (meters per pixel)" msgstr "" #: ../src/vikgeoreflayer.c:498 msgid "the scale of the map in the Y direction (meters per pixel)" msgstr "" #: ../src/vikgeoreflayer.c:500 msgid "Map Image:" msgstr "Kartbilde:" #. Now with icons #: ../src/vikgeoreflayer.c:608 msgid "_Zoom to Fit Map" msgstr "" #: ../src/vikgeoreflayer.c:614 msgid "_Goto Map Center" msgstr "" #: ../src/vikgeoreflayer.c:620 msgid "_Export to World File" msgstr "" #: ../src/vikgoto.c:75 msgid "No goto tool available." msgstr "" #: ../src/vikgoto.c:88 ../src/vikgoto.c:107 msgid "goto" msgstr "" #: ../src/vikgoto.c:90 msgid "I don't know that place. Do you want another goto?" msgstr "" #: ../src/vikgoto.c:109 msgid "goto provider:" msgstr "" #: ../src/vikgoto.c:124 msgid "Enter address or place name:" msgstr "Angi adresse eller stedsnavn:" #: ../src/vikgpslayer.c:127 msgid "Data Mode" msgstr "" #: ../src/vikgpslayer.c:129 msgid "Realtime Tracking Mode" msgstr "" #: ../src/vikgpslayer.c:137 msgid "Keep vehicle at center" msgstr "" #: ../src/vikgpslayer.c:138 msgid "Keep vehicle on screen" msgstr "" #: ../src/vikgpslayer.c:139 msgid "Disable" msgstr "" #: ../src/vikgpslayer.c:152 msgid "Download Tracks:" msgstr "" #: ../src/vikgpslayer.c:153 msgid "Upload Tracks:" msgstr "" #: ../src/vikgpslayer.c:154 msgid "Download Routes:" msgstr "" #: ../src/vikgpslayer.c:155 msgid "Upload Routes:" msgstr "" #: ../src/vikgpslayer.c:156 msgid "Download Waypoints:" msgstr "" #: ../src/vikgpslayer.c:157 msgid "Upload Waypoints:" msgstr "" #: ../src/vikgpslayer.c:159 msgid "Recording tracks" msgstr "" #: ../src/vikgpslayer.c:160 msgid "Jump to current position on start" msgstr "" #: ../src/vikgpslayer.c:161 msgid "Moving Map Method:" msgstr "" #: ../src/vikgpslayer.c:162 msgid "Gpsd Host:" msgstr "" #: ../src/vikgpslayer.c:163 msgid "Gpsd Port:" msgstr "" #: ../src/vikgpslayer.c:164 msgid "Gpsd Retry Interval (seconds):" msgstr "" #: ../src/vikgpslayer.c:179 msgid "GPS" msgstr "" #: ../src/vikgpslayer.c:242 ../src/vikgpslayer.c:1258 msgid "GPS Download" msgstr "GPS-nedlasting" #: ../src/vikgpslayer.c:242 ../src/vikgpslayer.c:1258 #: ../src/viktrwlayer.c:3094 msgid "GPS Upload" msgstr "GPS-opplasting" #: ../src/vikgpslayer.c:244 msgid "GPS Realtime Tracking" msgstr "" #: ../src/vikgpslayer.c:451 msgid "Unknown GPS Protocol" msgstr "Ukjent GPS-protokoll" #: ../src/vikgpslayer.c:469 msgid "Unknown serial port device" msgstr "" #: ../src/vikgpslayer.c:572 #, c-format msgid "%s: unknown parameter" msgstr "%s: ukjent parameter" #. Now with icons #: ../src/vikgpslayer.c:693 msgid "_Upload to GPS" msgstr "" #: ../src/vikgpslayer.c:699 msgid "Download from _GPS" msgstr "" #: ../src/vikgpslayer.c:720 msgid "Empty _Realtime" msgstr "" #: ../src/vikgpslayer.c:727 msgid "E_mpty Upload" msgstr "" #: ../src/vikgpslayer.c:733 msgid "_Empty Download" msgstr "" #: ../src/vikgpslayer.c:739 msgid "Empty _All" msgstr "" #. #. NB It's not fatal if this gives 2 for example! Hence removal of the g_assert #. This happens when copied GPS layer is deleted (not sure why the number_handlers would be 2) #. I don't think there's any side effects and certainly better than the program just aborting #. #: ../src/vikgpslayer.c:756 #, c-format msgid "Unexpected number of disconnected handlers: %d" msgstr "" #: ../src/vikgpslayer.c:898 #, c-format msgid "Uploading %d waypoint..." msgid_plural "Uploading %d waypoints..." msgstr[0] "Laster opp %d waypoint..." #: ../src/vikgpslayer.c:899 #, c-format msgid "Uploading %d trackpoint..." msgid_plural "Uploading %d trackpoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:900 #, c-format msgid "Uploading %d routepoint..." msgid_plural "Uploading %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:925 #, c-format msgid "Downloaded %d out of %d waypoint..." msgid_plural "Downloaded %d out of %d waypoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:926 #, c-format msgid "Downloaded %d out of %d trackpoint..." msgid_plural "Downloaded %d out of %d trackpoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:927 #, c-format msgid "Downloaded %d out of %d routepoint..." msgid_plural "Downloaded %d out of %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:932 #, c-format msgid "Uploaded %d out of %d waypoint..." msgid_plural "Uploaded %d out of %d waypoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:933 #, c-format msgid "Uploaded %d out of %d trackpoint..." msgid_plural "Uploaded %d out of %d trackpoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:934 #, c-format msgid "Uploaded %d out of %d routepoint..." msgid_plural "Uploaded %d out of %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:942 #, c-format msgid "Downloaded %d waypoint" msgid_plural "Downloaded %d waypoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:943 #, c-format msgid "Downloaded %d trackpoint" msgid_plural "Downloaded %d trackpoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:944 #, c-format msgid "Downloaded %d routepoint" msgid_plural "Downloaded %d routepoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:949 #, c-format msgid "Uploaded %d waypoint" msgid_plural "Uploaded %d waypoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:950 #, c-format msgid "Uploaded %d trackpoint" msgid_plural "Uploaded %d trackpoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:951 #, c-format msgid "Uploaded %d routepoint" msgid_plural "Uploaded %d routepoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:1180 msgid "Error: couldn't find gpsbabel." msgstr "" #: ../src/vikgpslayer.c:1269 msgid "Warning - GPS Upload items may overwrite each other" msgstr "" #: ../src/vikgpslayer.c:1301 msgid "Status: detecting gpsbabel" msgstr "" #: ../src/vikgpslayer.c:1332 msgid "No GPS items selected for transfer." msgstr "" #: ../src/vikgpslayer.c:1347 msgid "Could not turn off device." msgstr "" #: ../src/vikgpslayer.c:1385 msgid "Are you sure you want to delete GPS Upload data?" msgstr "" #: ../src/vikgpslayer.c:1398 msgid "Are you sure you want to delete GPS Download data?" msgstr "" #: ../src/vikgpslayer.c:1412 msgid "Are you sure you want to delete GPS Realtime data?" msgstr "" #: ../src/vikgpslayer.c:1425 msgid "Are you sure you want to delete All GPS data?" msgstr "" #: ../src/viklayerspanel.c:55 msgid "/C_ut" msgstr "" #: ../src/viklayerspanel.c:56 msgid "/_Copy" msgstr "/_Kopier" #: ../src/viklayerspanel.c:57 msgid "/_Paste" msgstr "/_Lim inn" #: ../src/viklayerspanel.c:58 msgid "/_Delete" msgstr "/_Slett" #: ../src/viklayerspanel.c:59 msgid "/New Layer" msgstr "/Nytt lag" #: ../src/viklayerspanel.c:127 msgid "Top Layer" msgstr "" #: ../src/viklayerspanel.c:143 msgid "Add new layer" msgstr "" #: ../src/viklayerspanel.c:150 msgid "Remove selected layer" msgstr "" #: ../src/viklayerspanel.c:157 msgid "Move selected layer up" msgstr "" #: ../src/viklayerspanel.c:164 msgid "Move selected layer down" msgstr "" #: ../src/viklayerspanel.c:171 msgid "Cut selected layer" msgstr "" #: ../src/viklayerspanel.c:178 msgid "Copy selected layer" msgstr "" #: ../src/viklayerspanel.c:185 msgid "Paste layer below selected layer" msgstr "" #. TODO: FIXME: if name has a '/' in it it will get all messed up. why not have an itemfactory field with #. name, icon, shortcut, etc.? #: ../src/viklayerspanel.c:204 ../src/vikwindow.c:3292 #, c-format msgid "New _%s Layer" msgstr "" #: ../src/viklayerspanel.c:511 msgid "Aggregate Layers have no settable properties." msgstr "" #: ../src/viklayerspanel.c:555 msgid "You cannot cut the Top Layer." msgstr "Du kan ikke klippe ut øverste lag" #: ../src/viklayerspanel.c:600 #, c-format msgid "Are you sure you want to delete %s?" msgstr "" #: ../src/viklayerspanel.c:617 msgid "You cannot delete the Top Layer." msgstr "Du kan ikke slette øverste lag" #: ../src/viklayerspanel.c:701 msgid "Are you sure you wish to delete all layers?" msgstr "Er du sikker på at du vil ta slette alle lagene?" #. ******* MAPZOOMS ******** #: ../src/vikmapslayer.c:91 msgid "Use Viking Zoom Level" msgstr "" #: ../src/vikmapslayer.c:124 msgid "Map Type:" msgstr "Karttype:" #: ../src/vikmapslayer.c:125 msgid "Maps Directory:" msgstr "" #: ../src/vikmapslayer.c:126 msgid "Alpha:" msgstr "Alfa:" #: ../src/vikmapslayer.c:127 msgid "Control the Alpha value for transparency effects" msgstr "" #: ../src/vikmapslayer.c:128 msgid "Autodownload maps:" msgstr "" #: ../src/vikmapslayer.c:129 msgid "Autodownload Only Gets Missing Maps:" msgstr "" #: ../src/vikmapslayer.c:130 msgid "" "Using this option avoids attempting to update already acquired tiles. This " "can be useful if you want to restrict the network usage, without having to " "resort to manual control. Only applies when 'Autodownload Maps' is on." msgstr "" #: ../src/vikmapslayer.c:131 msgid "Zoom Level:" msgstr "Zoomnivå:" #: ../src/vikmapslayer.c:132 msgid "" "Determines the method of displaying map tiles for the current zoom level. " "'Viking Zoom Level' uses the best matching level, otherwise setting a fixed " "value will always use map tiles of the specified value regardless of the " "actual zoom level." msgstr "" #: ../src/vikmapslayer.c:146 msgid "_Maps Download" msgstr "" #: ../src/vikmapslayer.c:146 msgid "Maps Download" msgstr "" #: ../src/vikmapslayer.c:161 msgid "Map" msgstr "Kart" #: ../src/vikmapslayer.c:249 msgid "Default maplayer directory:" msgstr "" #: ../src/vikmapslayer.c:249 msgid "Choose a directory to store cached Map tiles for this layer" msgstr "" #: ../src/vikmapslayer.c:505 msgid "Unknown map type" msgstr "Ukjent karttype" #: ../src/vikmapslayer.c:516 msgid "Unknown Map Zoom" msgstr "Ukjent kartzoom" #: ../src/vikmapslayer.c:589 #, c-format msgid "" "New map cannot be displayed in the current drawmode.\n" "Select \"%s\" from View menu to view it." msgstr "" #: ../src/vikmapslayer.c:753 #, c-format msgid "" "Cowardly refusing to draw tiles or existence of tiles beyond %d zoom out " "factor" msgstr "" #: ../src/vikmapslayer.c:1157 #, c-format msgid "Redownloading up to %d %s map..." msgid_plural "Redownloading up to %d %s maps..." msgstr[0] "" msgstr[1] "" #: ../src/vikmapslayer.c:1159 #, c-format msgid "Redownloading %d %s map..." msgid_plural "Redownloading %d %s maps..." msgstr[0] "" msgstr[1] "" #: ../src/vikmapslayer.c:1163 ../src/vikmapslayer.c:1238 #, c-format msgid "Downloading %d %s map..." msgid_plural "Downloading %d %s maps..." msgstr[0] "Laster ned %d %s kart..." #: ../src/vikmapslayer.c:1311 #, c-format msgid "" "\n" "Source: %s\n" "\n" "Tile File: %s\n" "Tile File Timestamp: %s" msgstr "" #: ../src/vikmapslayer.c:1318 #, c-format msgid "" "Source: %s\n" "\n" "No Tile File!" msgstr "" #: ../src/vikmapslayer.c:1356 msgid "Redownload _Bad Map(s)" msgstr "" #: ../src/vikmapslayer.c:1360 msgid "Redownload _New Map(s)" msgstr "" #: ../src/vikmapslayer.c:1364 msgid "Redownload _All Map(s)" msgstr "" #: ../src/vikmapslayer.c:1368 msgid "_Show Tile Information" msgstr "" #: ../src/vikmapslayer.c:1449 #, c-format msgid "" "Wrong drawmode for this map.\n" "Select \"%s\" from View menu and try again." msgstr "" #: ../src/vikmapslayer.c:1454 msgid "Wrong zoom level for this map." msgstr "Feil zoomnviå for dette kartet." #. Now with icons #: ../src/vikmapslayer.c:1485 msgid "Download _Missing Onscreen Maps" msgstr "" #: ../src/vikmapslayer.c:1492 msgid "Download _New Onscreen Maps" msgstr "" #: ../src/vikmapslayer.c:1499 msgid "Reload _All Onscreen Maps" msgstr "" #: ../src/viktreeview.c:263 msgid "Layer Name" msgstr "Navn på lag" #: ../src/viktreeview.c:742 #, c-format msgid "delete data from %s\n" msgstr "slett data fra %s\n" #: ../src/viktrwlayer.c:377 msgid "Create _Waypoint" msgstr "" #: ../src/viktrwlayer.c:377 msgid "Create Waypoint" msgstr "Opprett Waypoint" #: ../src/viktrwlayer.c:383 msgid "Create _Track" msgstr "" #: ../src/viktrwlayer.c:383 msgid "Create Track" msgstr "" #: ../src/viktrwlayer.c:392 msgid "Create _Route" msgstr "" #: ../src/viktrwlayer.c:392 msgid "Create Route" msgstr "" #: ../src/viktrwlayer.c:401 msgid "_Edit Waypoint" msgstr "" #: ../src/viktrwlayer.c:401 msgid "Edit Waypoint" msgstr "Rediger Waypoint" #: ../src/viktrwlayer.c:409 msgid "Edit Trac_kpoint" msgstr "" #: ../src/viktrwlayer.c:409 msgid "Edit Trackpoint" msgstr "" #: ../src/viktrwlayer.c:417 msgid "Show P_icture" msgstr "" #: ../src/viktrwlayer.c:417 msgid "Show Picture" msgstr "Vis bilde" #: ../src/viktrwlayer.c:424 msgid "Route _Finder" msgstr "" #: ../src/viktrwlayer.c:424 msgid "Route Finder" msgstr "" #. ***** PARAMETERS ***** #: ../src/viktrwlayer.c:447 ../src/viktrwlayer.c:1942 #: ../src/viktrwlayer.c:1944 msgid "Waypoints" msgstr "" #: ../src/viktrwlayer.c:447 ../src/viktrwlayer.c:1933 #: ../src/viktrwlayer.c:1935 msgid "Tracks" msgstr "" #: ../src/viktrwlayer.c:447 msgid "Waypoint Images" msgstr "" #: ../src/viktrwlayer.c:450 msgid "Draw by Track" msgstr "" #: ../src/viktrwlayer.c:450 msgid "Draw by Speed" msgstr "" #: ../src/viktrwlayer.c:450 msgid "All Tracks Same Color" msgstr "" #: ../src/viktrwlayer.c:451 msgid "Filled Square" msgstr "" #: ../src/viktrwlayer.c:451 msgid "Square" msgstr "" #: ../src/viktrwlayer.c:451 msgid "Circle" msgstr "Sirkel" #: ../src/viktrwlayer.c:451 msgid "X" msgstr "" #: ../src/viktrwlayer.c:477 msgid "Extra Extra Small" msgstr "" #: ../src/viktrwlayer.c:478 msgid "Extra Small" msgstr "" #: ../src/viktrwlayer.c:479 msgid "Small" msgstr "" #: ../src/viktrwlayer.c:480 msgid "Medium" msgstr "" #: ../src/viktrwlayer.c:481 msgid "Large" msgstr "" #: ../src/viktrwlayer.c:482 msgid "Extra Large" msgstr "" #: ../src/viktrwlayer.c:483 msgid "Extra Extra Large" msgstr "" #: ../src/viktrwlayer.c:491 msgid "Track Drawing Mode:" msgstr "" #: ../src/viktrwlayer.c:492 msgid "All Tracks Color:" msgstr "" #: ../src/viktrwlayer.c:493 msgid "The color used when 'All Tracks Same Color' drawing mode is selected" msgstr "" #: ../src/viktrwlayer.c:494 msgid "Draw Track Lines" msgstr "" #: ../src/viktrwlayer.c:495 msgid "Track Thickness:" msgstr "Sportykkelse:" #: ../src/viktrwlayer.c:496 msgid "Draw Track Direction" msgstr "" #: ../src/viktrwlayer.c:497 msgid "Direction Size:" msgstr "" #: ../src/viktrwlayer.c:498 msgid "Draw Trackpoints" msgstr "" #: ../src/viktrwlayer.c:499 msgid "Trackpoint Size:" msgstr "" #: ../src/viktrwlayer.c:500 msgid "Draw Elevation" msgstr "" #: ../src/viktrwlayer.c:501 msgid "Draw Elevation Height %:" msgstr "" #: ../src/viktrwlayer.c:503 msgid "Draw Stops" msgstr "" #: ../src/viktrwlayer.c:504 msgid "" "Whether to draw a marker when trackpoints are at the same position but over " "the minimum stop length apart in time" msgstr "" #: ../src/viktrwlayer.c:505 msgid "Min Stop Length (seconds):" msgstr "" #: ../src/viktrwlayer.c:507 msgid "Track BG Thickness:" msgstr "" #: ../src/viktrwlayer.c:508 msgid "Track Background Color" msgstr "Bakgrunnsfarge på spor" #: ../src/viktrwlayer.c:509 msgid "Draw by Speed Factor (%):" msgstr "" #: ../src/viktrwlayer.c:510 msgid "" "The percentage factor away from the average speed determining the color used" msgstr "" #: ../src/viktrwlayer.c:512 msgid "Draw Labels" msgstr "Tegn etiketter" #: ../src/viktrwlayer.c:513 msgid "Waypoint Font Size:" msgstr "" #: ../src/viktrwlayer.c:514 msgid "Waypoint Color:" msgstr "" #: ../src/viktrwlayer.c:515 msgid "Waypoint Text:" msgstr "" #: ../src/viktrwlayer.c:516 msgid "Background:" msgstr "Bakgrunn:" #: ../src/viktrwlayer.c:517 msgid "Fake BG Color Translucency:" msgstr "" #: ../src/viktrwlayer.c:518 msgid "Waypoint marker:" msgstr "" #: ../src/viktrwlayer.c:519 msgid "Waypoint size:" msgstr "" #: ../src/viktrwlayer.c:520 msgid "Draw Waypoint Symbols:" msgstr "" #: ../src/viktrwlayer.c:522 msgid "Draw Waypoint Images" msgstr "" #: ../src/viktrwlayer.c:523 msgid "Image Size (pixels):" msgstr "" #: ../src/viktrwlayer.c:524 msgid "Image Alpha:" msgstr "" #: ../src/viktrwlayer.c:525 msgid "Image Memory Cache Size:" msgstr "" #: ../src/viktrwlayer.c:610 msgid "TrackWaypoint" msgstr "" #: ../src/viktrwlayer.c:1951 ../src/viktrwlayer.c:1953 msgid "Routes" msgstr "" #: ../src/viktrwlayer.c:2144 #, c-format msgid " in %d:%02d hrs:mins" msgstr "" #: ../src/viktrwlayer.c:2148 #, c-format msgid "" "\n" "%sTotal Length %.1f %s%s" msgstr "" #: ../src/viktrwlayer.c:2154 #, c-format msgid "Tracks: %d - Waypoints: %d - Routes: %d%s" msgstr "" #: ../src/viktrwlayer.c:2174 #, c-format msgid "Tracks: %d" msgstr "" #: ../src/viktrwlayer.c:2184 #, c-format msgid "Routes: %d" msgstr "" #: ../src/viktrwlayer.c:2215 #, c-format msgid "- %d:%02d hrs:mins" msgstr "" #: ../src/viktrwlayer.c:2223 #, c-format msgid "%s%.1f km %s" msgstr "" #: ../src/viktrwlayer.c:2226 #, c-format msgid "%s%.1f miles %s" msgstr "" #: ../src/viktrwlayer.c:2240 #, c-format msgid "Waypoints: %d" msgstr "" #: ../src/viktrwlayer.c:2266 #, c-format msgid "Trkpt: Alt %dft" msgstr "" #. VIK_UNITS_HEIGHT_METRES: #: ../src/viktrwlayer.c:2270 #, c-format msgid "Trkpt: Alt %dm" msgstr "" #. Compact date time format #: ../src/viktrwlayer.c:2277 #, c-format msgid " | Time %x %X" msgstr "" #: ../src/viktrwlayer.c:2295 #, c-format msgid " | Track: %s" msgstr "" #. Combine parts to make overall message #: ../src/viktrwlayer.c:2299 #, c-format msgid "%s%s | %s %s %s" msgstr "" #: ../src/viktrwlayer.c:2314 #, c-format msgid "Wpt: Alt %dft" msgstr "" #. VIK_UNITS_HEIGHT_METRES: #: ../src/viktrwlayer.c:2318 #, c-format msgid "Wpt: Alt %dm" msgstr "" #. Add comment if available #: ../src/viktrwlayer.c:2333 #, c-format msgid "%s | %s %s | Comment: %s" msgstr "" #: ../src/viktrwlayer.c:2335 #, c-format msgid "%s | %s %s" msgstr "" #: ../src/viktrwlayer.c:2563 ../src/viktrwlayer.c:2634 msgid "This layer has no waypoints or trackpoints." msgstr "" #: ../src/viktrwlayer.c:2661 ../src/vikwindow.c:2407 ../src/vikwindow.c:2848 #, c-format msgid "The file \"%s\" exists, do you wish to overwrite it?" msgstr "Filen \"%s\" eksisterer. Vil du overskrive den?" #: ../src/viktrwlayer.c:2671 ../src/vikwindow.c:2429 msgid "The filename you requested could not be opened for writing." msgstr "" #: ../src/viktrwlayer.c:2676 ../src/viktrwlayer.c:2681 #: ../src/viktrwlayer.c:2691 ../src/viktrwlayer.c:2703 msgid "Export Layer" msgstr "Eksporter lag" #: ../src/viktrwlayer.c:2720 msgid "Could not create temporary file for export." msgstr "" #: ../src/viktrwlayer.c:2729 #, c-format msgid "Could not launch %s." msgstr "" #: ../src/viktrwlayer.c:2773 msgid "Export Track as GPX" msgstr "" #: ../src/viktrwlayer.c:2795 msgid "Find" msgstr "" #: ../src/viktrwlayer.c:2805 msgid "Waypoint Name:" msgstr "" #: ../src/viktrwlayer.c:2822 msgid "Waypoint not found in this layer." msgstr "" #: ../src/viktrwlayer.c:3090 msgid "Can not upload invisible track." msgstr "" #: ../src/viktrwlayer.c:3192 ../src/viktrwlayer.c:7785 msgid "Track" msgstr "" #: ../src/viktrwlayer.c:3215 ../src/viktrwlayer.c:7817 msgid "Route" msgstr "" #: ../src/viktrwlayer.c:3296 ../src/viktrwlayer.c:6265 #: ../src/viktrwlayer.c:6314 msgid "_Finish Route" msgstr "" #: ../src/viktrwlayer.c:3298 ../src/viktrwlayer.c:6223 #: ../src/viktrwlayer.c:6312 msgid "_Finish Track" msgstr "" #. Now with icons #: ../src/viktrwlayer.c:3310 msgid "_View Layer" msgstr "" #: ../src/viktrwlayer.c:3317 msgid "V_iew" msgstr "" #: ../src/viktrwlayer.c:3323 msgid "View All _Tracks" msgstr "" #: ../src/viktrwlayer.c:3328 msgid "View All _Routes" msgstr "" #: ../src/viktrwlayer.c:3333 msgid "View All _Waypoints" msgstr "" #: ../src/viktrwlayer.c:3338 msgid "_Goto Center of Layer" msgstr "" #: ../src/viktrwlayer.c:3344 ../src/viktrwlayer.c:6199 msgid "Goto _Waypoint..." msgstr "" #: ../src/viktrwlayer.c:3350 msgid "_Export Layer" msgstr "" #: ../src/viktrwlayer.c:3356 msgid "Export as GPS_Point..." msgstr "" #: ../src/viktrwlayer.c:3361 msgid "Export as GPS_Mapper..." msgstr "" #: ../src/viktrwlayer.c:3366 msgid "Export as _GPX..." msgstr "" #: ../src/viktrwlayer.c:3371 msgid "Export as _KML..." msgstr "" #: ../src/viktrwlayer.c:3376 msgid "Open with External Program_1: " msgstr "" #: ../src/viktrwlayer.c:3383 msgid "Open with External Program_2: " msgstr "" #: ../src/viktrwlayer.c:3391 ../src/vikwindow.c:3145 msgid "_New" msgstr "_Ny" #: ../src/viktrwlayer.c:3397 msgid "New _Waypoint..." msgstr "" #: ../src/viktrwlayer.c:3403 msgid "New _Track" msgstr "" #: ../src/viktrwlayer.c:3411 msgid "New _Route" msgstr "" #: ../src/viktrwlayer.c:3420 ../src/viktrwlayer.c:6597 msgid "Geotag _Images..." msgstr "" #: ../src/viktrwlayer.c:3427 msgid "_Acquire" msgstr "" #: ../src/viktrwlayer.c:3433 ../src/vikwindow.c:3150 msgid "From _GPS..." msgstr "Fra _GPS..." #: ../src/viktrwlayer.c:3439 msgid "From Google _Directions..." msgstr "" #: ../src/viktrwlayer.c:3446 msgid "From _OSM Traces..." msgstr "" #: ../src/viktrwlayer.c:3451 msgid "From _My OSM Traces..." msgstr "" #: ../src/viktrwlayer.c:3459 ../src/vikwindow.c:3166 msgid "From _Wikipedia Waypoints" msgstr "" #: ../src/viktrwlayer.c:3465 msgid "Within _Layer Bounds" msgstr "" #: ../src/viktrwlayer.c:3471 msgid "Within _Current View" msgstr "" #: ../src/viktrwlayer.c:3479 msgid "From Geo_caching..." msgstr "" #: ../src/viktrwlayer.c:3486 ../src/vikwindow.c:3163 msgid "From Geotagged _Images..." msgstr "" #: ../src/viktrwlayer.c:3492 msgid "From _File..." msgstr "" #: ../src/viktrwlayer.c:3498 ../src/viktrwlayer.c:6542 msgid "_Upload" msgstr "" #: ../src/viktrwlayer.c:3504 msgid "Upload to _GPS..." msgstr "" #: ../src/viktrwlayer.c:3511 ../src/viktrwlayer.c:6570 msgid "Upload to _OSM..." msgstr "" #: ../src/viktrwlayer.c:3519 msgid "De_lete" msgstr "" #: ../src/viktrwlayer.c:3525 msgid "Delete All _Tracks" msgstr "" #: ../src/viktrwlayer.c:3531 msgid "Delete Tracks _From Selection..." msgstr "" #: ../src/viktrwlayer.c:3537 ../src/viktrwlayer.c:6290 msgid "Delete _All Routes" msgstr "" #: ../src/viktrwlayer.c:3543 ../src/viktrwlayer.c:6296 msgid "_Delete Routes From Selection..." msgstr "" #: ../src/viktrwlayer.c:3549 msgid "Delete All _Waypoints" msgstr "" #: ../src/viktrwlayer.c:3555 msgid "Delete Waypoints From _Selection..." msgstr "" #: ../src/viktrwlayer.c:4128 #, c-format msgid "Are you sure you want to delete all tracks in %s?" msgstr "" #: ../src/viktrwlayer.c:4138 #, c-format msgid "Are you sure you want to delete all routes in %s?" msgstr "" #: ../src/viktrwlayer.c:4148 #, c-format msgid "Are you sure you want to delete all waypoints in %s?" msgstr "" #: ../src/viktrwlayer.c:4165 #, c-format msgid "Are you sure you want to delete the waypoint \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4178 #, c-format msgid "Are you sure you want to delete the track \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4191 #, c-format msgid "Are you sure you want to delete the route \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4351 ../src/viktrwlayer.c:4922 msgid "" "Converting a track to a route removes extra track data such as segments, " "timestamps, etc...\n" "Do you want to continue?" msgstr "" #: ../src/viktrwlayer.c:4711 msgid "Failed. No other tracks with timestamps in this layer found" msgstr "" #: ../src/viktrwlayer.c:4713 msgid "Failed. No other tracks without timestamps in this layer found" msgstr "" #: ../src/viktrwlayer.c:4732 msgid "Merge with..." msgstr "" #: ../src/viktrwlayer.c:4733 msgid "Select route to merge with" msgstr "" #: ../src/viktrwlayer.c:4733 msgid "Select track to merge with" msgstr "" #: ../src/viktrwlayer.c:4818 ../src/viktrwlayer.c:4895 msgid "Append Route" msgstr "" #: ../src/viktrwlayer.c:4818 ../src/viktrwlayer.c:4895 msgid "Append Track" msgstr "" #: ../src/viktrwlayer.c:4819 msgid "Select the route to append after the current route" msgstr "" #: ../src/viktrwlayer.c:4820 msgid "Select the track to append after the current track" msgstr "" #: ../src/viktrwlayer.c:4896 msgid "Select the track to append after the current route" msgstr "" #: ../src/viktrwlayer.c:4897 msgid "Select the route to append after the current track" msgstr "" #: ../src/viktrwlayer.c:4957 #, c-format msgid "%d segment merged" msgid_plural "%d segments merged" msgstr[0] "" msgstr[1] "" #: ../src/viktrwlayer.c:4973 msgid "Failed. This track does not have timestamp" msgstr "" #: ../src/viktrwlayer.c:4985 msgid "Failed. No other track in this layer has timestamp" msgstr "" #: ../src/viktrwlayer.c:4992 msgid "Merge Threshold..." msgstr "" #: ../src/viktrwlayer.c:4993 msgid "Merge when time between tracks less than:" msgstr "" #: ../src/viktrwlayer.c:5128 msgid "Split Threshold..." msgstr "" #: ../src/viktrwlayer.c:5129 msgid "Split when time between trackpoints exceeds:" msgstr "" #: ../src/viktrwlayer.c:5205 msgid "Split Every Nth Point" msgstr "" #: ../src/viktrwlayer.c:5206 msgid "Split on every Nth point:" msgstr "" #: ../src/viktrwlayer.c:5312 msgid "Can not split track as it has no segments" msgstr "" #: ../src/viktrwlayer.c:5340 ../src/viktrwlayer.c:5370 #, c-format msgid "Deleted %ld point" msgid_plural "Deleted %ld points" msgstr[0] "" msgstr[1] "" #: ../src/viktrwlayer.c:5531 msgid "Internal Error in vik_trw_layer_uniquify_tracks" msgstr "" #: ../src/viktrwlayer.c:5588 ../src/viktrwlayer.c:5635 #: ../src/viktrwlayer.c:5814 msgid "" "Multiple entries with the same name exist. This method only works with " "unique names. Force unique names now?" msgstr "" #: ../src/viktrwlayer.c:5599 msgid "No tracks found" msgstr "" #: ../src/viktrwlayer.c:5607 ../src/viktrwlayer.c:5654 #: ../src/viktrwlayer.c:5834 msgid "Delete Selection" msgstr "" #: ../src/viktrwlayer.c:5608 msgid "Select tracks to delete" msgstr "" #: ../src/viktrwlayer.c:5646 msgid "No routes found" msgstr "" #: ../src/viktrwlayer.c:5655 msgid "Select routes to delete" msgstr "" #: ../src/viktrwlayer.c:5761 msgid "Internal Error in vik_trw_layer_uniquify_waypoints" msgstr "" #: ../src/viktrwlayer.c:5824 msgid "No waypoints found" msgstr "" #: ../src/viktrwlayer.c:5835 msgid "Select waypoints to delete" msgstr "" #: ../src/viktrwlayer.c:5896 #, c-format msgid "" "A waypoint with the name \"%s\" already exists. Really rename to the same " "name?" msgstr "" #: ../src/viktrwlayer.c:5926 #, c-format msgid "" "A track with the name \"%s\" already exists. Really rename to the same name?" msgstr "" #: ../src/viktrwlayer.c:5963 #, c-format msgid "" "A route with the name \"%s\" already exists. Really rename to the same name?" msgstr "" #: ../src/viktrwlayer.c:6085 ../src/viktrwlayer.c:6337 msgid "_Goto" msgstr "" #: ../src/viktrwlayer.c:6104 msgid "_Visit Geocache Webpage" msgstr "" #: ../src/viktrwlayer.c:6123 msgid "_Show Picture..." msgstr "" #: ../src/viktrwlayer.c:6131 msgid "Update Geotag on _Image" msgstr "" #: ../src/viktrwlayer.c:6137 msgid "_Update" msgstr "" #: ../src/viktrwlayer.c:6142 msgid "Update and _Keep File Timestamp" msgstr "" #: ../src/viktrwlayer.c:6153 msgid "Visit _Webpage" msgstr "" #: ../src/viktrwlayer.c:6184 msgid "_New Waypoint..." msgstr "" #: ../src/viktrwlayer.c:6193 msgid "_View All Waypoints" msgstr "" #: ../src/viktrwlayer.c:6205 msgid "Delete _All Waypoints" msgstr "" #: ../src/viktrwlayer.c:6211 msgid "_Delete Waypoints From Selection..." msgstr "" #: ../src/viktrwlayer.c:6233 msgid "_View All Tracks" msgstr "" #: ../src/viktrwlayer.c:6239 msgid "_New Track" msgstr "" #: ../src/viktrwlayer.c:6247 msgid "Delete _All Tracks" msgstr "" #: ../src/viktrwlayer.c:6253 msgid "_Delete Tracks From Selection..." msgstr "" #: ../src/viktrwlayer.c:6276 msgid "_View All Routes" msgstr "" #: ../src/viktrwlayer.c:6282 msgid "_New Route" msgstr "" #: ../src/viktrwlayer.c:6327 msgid "_View Track" msgstr "" #: ../src/viktrwlayer.c:6329 msgid "_View Route" msgstr "" #: ../src/viktrwlayer.c:6343 msgid "_Startpoint" msgstr "" #: ../src/viktrwlayer.c:6349 msgid "\"_Center\"" msgstr "" #: ../src/viktrwlayer.c:6355 msgid "_Endpoint" msgstr "" #: ../src/viktrwlayer.c:6361 msgid "_Highest Altitude" msgstr "" #: ../src/viktrwlayer.c:6367 msgid "_Lowest Altitude" msgstr "" #: ../src/viktrwlayer.c:6375 msgid "_Maximum Speed" msgstr "" #: ../src/viktrwlayer.c:6384 msgid "Co_mbine" msgstr "" #: ../src/viktrwlayer.c:6392 msgid "_Merge By Time..." msgstr "" #: ../src/viktrwlayer.c:6397 msgid "Merge _Segments" msgstr "" #: ../src/viktrwlayer.c:6403 msgid "Merge _With Other Tracks..." msgstr "" #: ../src/viktrwlayer.c:6409 msgid "_Append Track..." msgstr "" #: ../src/viktrwlayer.c:6411 msgid "_Append Route..." msgstr "" #: ../src/viktrwlayer.c:6417 msgid "Append _Route..." msgstr "" #: ../src/viktrwlayer.c:6419 msgid "Append _Track..." msgstr "" #: ../src/viktrwlayer.c:6426 msgid "_Split" msgstr "" #: ../src/viktrwlayer.c:6434 msgid "_Split By Time..." msgstr "" #. ATM always enable this entry - don't want to have to analyse the track before displaying the menu - to keep the menu speedy #: ../src/viktrwlayer.c:6440 msgid "Split Se_gments" msgstr "" #: ../src/viktrwlayer.c:6446 msgid "Split By _Number of Points..." msgstr "" #: ../src/viktrwlayer.c:6451 msgid "Split at _Trackpoint" msgstr "" #: ../src/viktrwlayer.c:6460 msgid "Delete Poi_nts" msgstr "" #: ../src/viktrwlayer.c:6466 msgid "Delete Points With The Same _Position" msgstr "" #: ../src/viktrwlayer.c:6471 msgid "Delete Points With The Same _Time" msgstr "" #: ../src/viktrwlayer.c:6477 msgid "_Reverse Track" msgstr "" #: ../src/viktrwlayer.c:6479 msgid "_Reverse Route" msgstr "" #: ../src/viktrwlayer.c:6488 msgid "Down_load Maps Along Track..." msgstr "" #: ../src/viktrwlayer.c:6490 msgid "Down_load Maps Along Route..." msgstr "" #: ../src/viktrwlayer.c:6497 msgid "_Apply DEM Data" msgstr "" #: ../src/viktrwlayer.c:6504 msgid "_Export Track as GPX..." msgstr "" #: ../src/viktrwlayer.c:6506 msgid "_Export Route as GPX..." msgstr "" #: ../src/viktrwlayer.c:6513 msgid "E_xtend Track End" msgstr "" #: ../src/viktrwlayer.c:6515 msgid "E_xtend Route End" msgstr "" #: ../src/viktrwlayer.c:6522 msgid "C_onvert to a Route" msgstr "" #: ../src/viktrwlayer.c:6524 msgid "C_onvert to a Track" msgstr "" #: ../src/viktrwlayer.c:6532 msgid "Extend _Using Route Finder" msgstr "" #: ../src/viktrwlayer.c:6548 msgid "_Upload to GPS..." msgstr "" #: ../src/viktrwlayer.c:6559 msgid "_View Google Directions" msgstr "" #: ../src/viktrwlayer.c:6579 msgid "Use with _Filter" msgstr "" #: ../src/viktrwlayer.c:6612 msgid "_Edit Trackpoint" msgstr "" #: ../src/viktrwlayer.c:7524 #, c-format msgid " - Gain %dm:Loss %dm" msgstr "" #: ../src/viktrwlayer.c:7526 #, c-format msgid " - Gain %dft:Loss %dft" msgstr "" #: ../src/viktrwlayer.c:7531 #, c-format msgid " - Bearing %3.1f° - Step %s" msgstr "" #: ../src/viktrwlayer.c:8124 #, c-format msgid "Could not launch %s to open file." msgstr "" #: ../src/viktrwlayer.c:8205 #, c-format msgid "Creating %d Image Thumbnails..." msgstr "" #: ../src/viktrwlayer.c:8524 msgid "No map layer in use. Create one first" msgstr "Ingen kartlag i bruk. Opprett ett først" #: ../src/viktrwlayer_propwin.c:898 ../src/viktrwlayer_propwin.c:1155 #, c-format msgid "%.1f kph" msgstr "" #: ../src/viktrwlayer_propwin.c:901 ../src/viktrwlayer_propwin.c:1158 #, c-format msgid "%.1f mph" msgstr "" #: ../src/viktrwlayer_propwin.c:904 ../src/viktrwlayer_propwin.c:1161 #, c-format msgid "%.1f knots" msgstr "" #. VIK_UNITS_SPEED_METRES_PER_SECOND: #: ../src/viktrwlayer_propwin.c:908 ../src/viktrwlayer_propwin.c:1165 #, c-format msgid "%.1f m/s" msgstr "" #: ../src/viktrwlayer_propwin.c:1745 #, c-format msgid "%.1f miles" msgstr "" #: ../src/viktrwlayer_propwin.c:1747 #, c-format msgid "%.1f km" msgstr "" #: ../src/viktrwlayer_propwin.c:2681 msgid "Failed spliting track. Track unchanged" msgstr "Kunne ikke dele spor. Spor uendret" #: ../src/viktrwlayer_propwin.c:2779 ../src/viktrwlayer_propwin.c:3178 #, c-format msgid "%s - Track Properties" msgstr "%s - Sporegenskaper" #: ../src/viktrwlayer_propwin.c:2784 msgid "Split at _Marker" msgstr "" #: ../src/viktrwlayer_propwin.c:2785 msgid "Split _Segments" msgstr "" #: ../src/viktrwlayer_propwin.c:2786 msgid "_Reverse" msgstr "" #: ../src/viktrwlayer_propwin.c:2787 msgid "_Delete Dupl." msgstr "" #: ../src/viktrwlayer_propwin.c:2813 msgid "Comment:" msgstr "Kommentar:" #: ../src/viktrwlayer_propwin.c:2814 msgid "Description:" msgstr "" #: ../src/viktrwlayer_propwin.c:2815 msgid "Track Length:" msgstr "Sporlengde:" #: ../src/viktrwlayer_propwin.c:2816 msgid "Trackpoints:" msgstr "" #: ../src/viktrwlayer_propwin.c:2817 msgid "Segments:" msgstr "" #: ../src/viktrwlayer_propwin.c:2818 msgid "Duplicate Points:" msgstr "" #: ../src/viktrwlayer_propwin.c:2819 msgid "Max Speed:" msgstr "Høyeste hastighet" #: ../src/viktrwlayer_propwin.c:2820 msgid "Avg. Speed:" msgstr "Snitthastighet" #: ../src/viktrwlayer_propwin.c:2821 msgid "Moving Avg. Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:2822 msgid "Avg. Dist. Between TPs:" msgstr "" #: ../src/viktrwlayer_propwin.c:2823 msgid "Elevation Range:" msgstr "" #: ../src/viktrwlayer_propwin.c:2824 msgid "Total Elevation Gain/Loss:" msgstr "" #: ../src/viktrwlayer_propwin.c:2825 msgid "Start:" msgstr "Start:" #: ../src/viktrwlayer_propwin.c:2826 msgid "End:" msgstr "Slutt:" #: ../src/viktrwlayer_propwin.c:2827 msgid "Duration:" msgstr "Varighet:" #: ../src/viktrwlayer_propwin.c:2828 msgid "Color:" msgstr "" #: ../src/viktrwlayer_propwin.c:2877 ../src/viktrwlayer_propwin.c:2901 #: ../src/viktrwlayer_propwin.c:2929 ../src/viktrwlayer_propwin.c:2966 #: ../src/viktrwlayer_propwin.c:2984 ../src/viktrwlayer_propwin.c:3034 #: ../src/viktrwlayer_propwin.c:3035 ../src/viktrwlayer_propwin.c:3036 #: ../src/viktrwlayer_propwin.c:3062 ../src/viktrwlayer_propwin.c:3063 #: ../src/viktrwlayer_propwin.c:3078 ../src/viktrwlayer_propwin.c:3079 #: ../src/viktrwlayer_propwin.c:3092 ../src/viktrwlayer_propwin.c:3093 #: ../src/viktrwlayer_propwin.c:3106 ../src/viktrwlayer_propwin.c:3107 #: ../src/viktrwlayer_propwin.c:3120 ../src/viktrwlayer_propwin.c:3121 #: ../src/viktrwlayer_propwin.c:3134 ../src/viktrwlayer_propwin.c:3135 #, c-format msgid "No Data" msgstr "Ingen data" #: ../src/viktrwlayer_propwin.c:3031 #, c-format msgid "%d minutes" msgstr "%d minutter" #: ../src/viktrwlayer_propwin.c:3058 msgid "Statistics" msgstr "Statistikk" #: ../src/viktrwlayer_propwin.c:3064 msgid "Show D_EM" msgstr "" #: ../src/viktrwlayer_propwin.c:3065 ../src/viktrwlayer_propwin.c:3080 #: ../src/viktrwlayer_propwin.c:3094 ../src/viktrwlayer_propwin.c:3136 msgid "Show _GPS Speed" msgstr "" #: ../src/viktrwlayer_propwin.c:3067 ../src/viktrwlayer_propwin.c:3082 #: ../src/viktrwlayer_propwin.c:3110 ../src/viktrwlayer_propwin.c:3138 msgid "Track Distance:" msgstr "Spordistanse:" #: ../src/viktrwlayer_propwin.c:3068 ../src/viktrwlayer_propwin.c:3125 msgid "Track Height:" msgstr "" #: ../src/viktrwlayer_propwin.c:3073 msgid "Elevation-distance" msgstr "" #: ../src/viktrwlayer_propwin.c:3083 msgid "Track Gradient:" msgstr "" #: ../src/viktrwlayer_propwin.c:3087 msgid "Gradient-distance" msgstr "" #: ../src/viktrwlayer_propwin.c:3096 ../src/viktrwlayer_propwin.c:3111 #: ../src/viktrwlayer_propwin.c:3124 msgid "Track Time:" msgstr "Sportid:" #: ../src/viktrwlayer_propwin.c:3097 ../src/viktrwlayer_propwin.c:3139 msgid "Track Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:3101 msgid "Speed-time" msgstr "Hastighet-tid" #: ../src/viktrwlayer_propwin.c:3108 ../src/viktrwlayer_propwin.c:3122 msgid "Show S_peed" msgstr "" #: ../src/viktrwlayer_propwin.c:3115 msgid "Distance-time" msgstr "" #: ../src/viktrwlayer_propwin.c:3129 msgid "Elevation-time" msgstr "" #: ../src/viktrwlayer_propwin.c:3143 msgid "Speed-distance" msgstr "" #: ../src/viktrwlayer_tpwin.c:118 msgid "Part of Track:" msgstr "Del av spor:" #: ../src/viktrwlayer_tpwin.c:119 msgid "Latitude:" msgstr "" #: ../src/viktrwlayer_tpwin.c:120 msgid "Longitude:" msgstr "" #: ../src/viktrwlayer_tpwin.c:121 msgid "Altitude:" msgstr "" #: ../src/viktrwlayer_tpwin.c:122 msgid "Timestamp:" msgstr "Tidsstempel:" #: ../src/viktrwlayer_tpwin.c:123 msgid "Time:" msgstr "Tid:" #: ../src/viktrwlayer_tpwin.c:124 msgid "Distance Difference:" msgstr "Avstandsforskjell:" #: ../src/viktrwlayer_tpwin.c:125 msgid "Time Difference:" msgstr "Tidsforskjell:" #: ../src/viktrwlayer_tpwin.c:126 msgid "\"Speed\" Between:" msgstr "\"Hastighet\" mellom:" #: ../src/viktrwlayer_tpwin.c:127 msgid "VDOP:" msgstr "" #: ../src/viktrwlayer_tpwin.c:128 msgid "HDOP:" msgstr "" #: ../src/viktrwlayer_tpwin.c:129 msgid "PDOP:" msgstr "" #: ../src/viktrwlayer_tpwin.c:130 msgid "SAT/FIX:" msgstr "" #: ../src/viktrwlayer_tpwin.c:139 msgid "Trackpoint" msgstr "" #: ../src/viktrwlayer_tpwin.c:142 msgid "_Insert After" msgstr "" #: ../src/viktrwlayer_tpwin.c:144 msgid "Split Here" msgstr "Del her" #: ../src/viktrwlayer_geotag.c:446 #, c-format msgid "Geotagging %d Images..." msgstr "" #: ../src/viktrwlayer_geotag.c:510 msgid "Geotag Images" msgstr "" #: ../src/viktrwlayer_geotag.c:516 msgid "Images" msgstr "" #: ../src/viktrwlayer_geotag.c:520 msgid "Overwrite Existing Waypoints:" msgstr "" #: ../src/viktrwlayer_geotag.c:523 msgid "Overwrite Existing GPS Information:" msgstr "" #: ../src/viktrwlayer_geotag.c:525 msgid "Keep File Modification Timestamp:" msgstr "" #: ../src/viktrwlayer_geotag.c:555 msgid "Create Waypoints:" msgstr "" #: ../src/viktrwlayer_geotag.c:563 msgid "Write EXIF:" msgstr "" #: ../src/viktrwlayer_geotag.c:575 msgid "Interpolate Between Track Segments:" msgstr "" #: ../src/viktrwlayer_geotag.c:579 msgid "Image Time Offset (Seconds):" msgstr "" #: ../src/viktrwlayer_geotag.c:581 msgid "" "The number of seconds to ADD to the photos time to make it match the GPS " "data. Calculate this with (GPS - Photo). Can be negative or positive. Useful " "to adjust times when a camera's timestamp was incorrect." msgstr "" #: ../src/viktrwlayer_geotag.c:584 msgid "Image Timezone:" msgstr "" #: ../src/viktrwlayer_geotag.c:586 msgid "" "The timezone that was used when the images were created. For example, if a " "camera is set to AWST or +8:00 hours. Enter +8:00 here so that the correct " "adjustment to the images' time can be made. GPS data is always in UTC." msgstr "" #: ../src/viktrwlayer_geotag.c:590 #, c-format msgid "Using track: %s" msgstr "" #: ../src/viktrwlayer_geotag.c:592 #, c-format msgid "Using all tracks in: %s" msgstr "" #: ../src/vikstatus.c:105 msgid "Current zoom level. Click to select a new one." msgstr "" #: ../src/vikwaypoint.c:34 msgid "Waypoint" msgstr "" #. TODO get rid of this as this is unnecessary duplication... #: ../src/vikwindow.c:221 msgid "Pan" msgstr "Panorér" #: ../src/vikwindow.c:221 msgid "Zoom" msgstr "Zoom" #: ../src/vikwindow.c:221 msgid "Ruler" msgstr "Linjal" #: ../src/vikwindow.c:221 msgid "Select" msgstr "" #. Create tooltip #: ../src/vikwindow.c:440 msgid "Select zoom level" msgstr "" #: ../src/vikwindow.c:645 #, c-format msgid "" "Do you want to save the changes you made to the document \"%s\"?\n" "\n" "Your changes will be lost if you don't save them." msgstr "" "Vil du lagre endringene i dokumentet \"%s\"?\n" "\n" "Endringene vil gå tapt om du ikke lagrer dem." #: ../src/vikwindow.c:649 msgid "Don't Save" msgstr "Ikke lagre" #: ../src/vikwindow.c:696 msgid "mpp" msgstr "" #: ../src/vikwindow.c:696 msgid "pixelfact" msgstr "" #: ../src/vikwindow.c:861 #, c-format msgid "%s %s %dm" msgstr "" #: ../src/vikwindow.c:863 #, c-format msgid "%s %s %dft" msgstr "" #: ../src/vikwindow.c:866 #, c-format msgid "%s %s" msgstr "%s %s" #. NB Ctrl+Shift+R is used for Refresh (deemed more important), so use 'U' instead #: ../src/vikwindow.c:1254 msgid "_Ruler" msgstr "_Linjal" #: ../src/vikwindow.c:1254 msgid "Ruler Tool" msgstr "Linjalverktøy" #: ../src/vikwindow.c:1502 ../src/vikwindow.c:3138 msgid "_Zoom" msgstr "_Zoom" #: ../src/vikwindow.c:1502 msgid "Zoom Tool" msgstr "Zoomverktøy" #: ../src/vikwindow.c:1547 ../src/vikwindow.c:3139 msgid "_Pan" msgstr "" #: ../src/vikwindow.c:1547 msgid "Pan Tool" msgstr "" #: ../src/vikwindow.c:1664 msgid "_Select" msgstr "" #: ../src/vikwindow.c:1664 msgid "Select Tool" msgstr "" #: ../src/vikwindow.c:1809 msgid "You must select a layer to show its properties." msgstr "Du må velge et lag for å kunne se dets egenskaper." #. No error to show, so unlikely this will get called #: ../src/vikwindow.c:1824 msgid "The help system is not available." msgstr "" #. Main error path #: ../src/vikwindow.c:1827 #, c-format msgid "" "Help is not available because: %s.\n" "Ensure a Mime Type ghelp handler program is installed (e.g. yelp)." msgstr "" #: ../src/vikwindow.c:1850 msgid "You must select a layer to delete." msgstr "Du må velge et lag å slette." #: ../src/vikwindow.c:2087 msgid "Untitled" msgstr "Uten tittel" #: ../src/vikwindow.c:2194 #, c-format msgid "Unable to add '%s' to the list of recently used documents" msgstr "" #: ../src/vikwindow.c:2208 msgid "The file you requested could not be opened." msgstr "Filen du valgte kunne ikke åpnes." #: ../src/vikwindow.c:2211 msgid "" "GPSBabel is required to load files of this type or GPSBabel encountered " "problems." msgstr "" #: ../src/vikwindow.c:2214 #, c-format msgid "Unable to load malformed GPX file %s" msgstr "" #: ../src/vikwindow.c:2217 #, c-format msgid "Unsupported file type for %s" msgstr "" #. Since we can process .vik files with issues just show a warning in the status bar #. Not that a user can do much about it... or tells them what this issue is yet... #: ../src/vikwindow.c:2223 #, c-format msgid "WARNING: issues encountered loading %s" msgstr "" #: ../src/vikwindow.c:2278 msgid "Please select a GPS data file to open. " msgstr "Vennligst velg en GPS-datafil å åpne. " #: ../src/vikwindow.c:2288 msgid "Geocaching" msgstr "" #: ../src/vikwindow.c:2294 msgid "Google Earth" msgstr "" #: ../src/vikwindow.c:2299 msgid "GPX" msgstr "" #: ../src/vikwindow.c:2304 ../src/vikwindow.c:2387 #: ../src/viking.desktop.in.h:1 msgid "Viking" msgstr "Viking" #: ../src/vikwindow.c:2374 msgid "Save as Viking File." msgstr "Lagre som Viking-fil." #. Try harder... #: ../src/vikwindow.c:2619 ../src/vikwindow.c:2625 msgid "Generating image file..." msgstr "" #: ../src/vikwindow.c:2647 msgid "" "Failed to generate internal image.\n" "\n" "Try creating a smaller image." msgstr "" #: ../src/vikwindow.c:2655 msgid "Failed to generate image file." msgstr "" #. Success #: ../src/vikwindow.c:2660 msgid "Image file generated." msgstr "" #: ../src/vikwindow.c:2764 msgid "" "Viewable region outside allowable pixel size bounds for image. Clipping " "width/height values." msgstr "" #: ../src/vikwindow.c:2789 #, c-format msgid "Total area: %ldm x %ldm (%.3f sq. km)" msgstr "" #: ../src/vikwindow.c:2792 #, c-format msgid "Total area: %ldm x %ldm (%.3f sq. miles)" msgstr "" #: ../src/vikwindow.c:2813 msgid "Save Image" msgstr "Lagre bilde" #: ../src/vikwindow.c:2834 msgid "PNG" msgstr "" #: ../src/vikwindow.c:2857 msgid "You must be in UTM mode to use this feature" msgstr "Du må være i UTM-modus for å bruke denne funksjonen" #: ../src/vikwindow.c:2862 msgid "Choose a directory to hold images" msgstr "Velg en mappe til å lagre bilder" #. todo: default for answers inside VikWindow or static (thruout instance) #: ../src/vikwindow.c:2883 msgid "Save to Image File" msgstr "Lagre til bildefil" #: ../src/vikwindow.c:2900 msgid "Width (pixels):" msgstr "Bredde (piksler):" #: ../src/vikwindow.c:2902 msgid "Height (pixels):" msgstr "Høyde (piksler):" #: ../src/vikwindow.c:2905 msgid "" "WARNING: USING LARGE IMAGES OVER 10000x10000\n" "MAY CRASH THE PROGRAM!" msgstr "" #: ../src/vikwindow.c:2907 msgid "Zoom (meters per pixel):" msgstr "Zoom (meter pr pixel):" #: ../src/vikwindow.c:2921 msgid "Area in current viewable window" msgstr "" #: ../src/vikwindow.c:2931 msgid "Save as PNG" msgstr "Lagre som PNG" #: ../src/vikwindow.c:2932 msgid "Save as JPEG" msgstr "Lagre som JPEG" #: ../src/vikwindow.c:2954 msgid "East-west image tiles:" msgstr "" #: ../src/vikwindow.c:2956 msgid "North-south image tiles:" msgstr "" #: ../src/vikwindow.c:3097 msgid "Choose a background color" msgstr "Velg en bakgrunnsfarge" #: ../src/vikwindow.c:3113 msgid "Choose a track highlight color" msgstr "" #: ../src/vikwindow.c:3134 msgid "_File" msgstr "_Fil" #: ../src/vikwindow.c:3135 msgid "_Edit" msgstr "R_ediger" #: ../src/vikwindow.c:3136 msgid "_View" msgstr "_Vis" #: ../src/vikwindow.c:3137 msgid "_Show" msgstr "" #: ../src/vikwindow.c:3140 msgid "_Layers" msgstr "_Lag" #: ../src/vikwindow.c:3141 msgid "_Tools" msgstr "Verk_tøy" #: ../src/vikwindow.c:3142 msgid "_Webtools" msgstr "" #: ../src/vikwindow.c:3143 ../src/vikwindow.c:3206 msgid "_Help" msgstr "_Hjelp" #: ../src/vikwindow.c:3145 msgid "New file" msgstr "Ny fil" #: ../src/vikwindow.c:3146 msgid "_Open..." msgstr "_Åpne..." #: ../src/vikwindow.c:3146 msgid "Open a file" msgstr "Åpne en fil" #: ../src/vikwindow.c:3147 msgid "Open _Recent File" msgstr "" #: ../src/vikwindow.c:3148 msgid "Append _File..." msgstr "" #: ../src/vikwindow.c:3148 msgid "Append data from a different file" msgstr "" #: ../src/vikwindow.c:3149 msgid "A_cquire" msgstr "" #: ../src/vikwindow.c:3150 msgid "Transfer data from a GPS device" msgstr "Overfør data fra GPS-enhet" #: ../src/vikwindow.c:3151 msgid "Import File With GPS_Babel..." msgstr "" #: ../src/vikwindow.c:3151 msgid "Import file via GPSBabel converter" msgstr "" #: ../src/vikwindow.c:3153 msgid "Google _Directions..." msgstr "" #: ../src/vikwindow.c:3153 msgid "Get driving directions from Google" msgstr "Få kjøreanvisninger fra Google" #: ../src/vikwindow.c:3156 msgid "_OSM Traces..." msgstr "" #: ../src/vikwindow.c:3156 msgid "Get traces from OpenStreetMap" msgstr "" #: ../src/vikwindow.c:3157 msgid "_My OSM Traces..." msgstr "" #: ../src/vikwindow.c:3157 msgid "Get Your Own Traces from OpenStreetMap" msgstr "" #: ../src/vikwindow.c:3160 msgid "Geo_caches..." msgstr "" #: ../src/vikwindow.c:3160 msgid "Get Geocaches from geocaching.com" msgstr "Få Geocacher fra geocaching.com" #: ../src/vikwindow.c:3163 msgid "Create waypoints from geotagged images" msgstr "" #: ../src/vikwindow.c:3166 msgid "Create waypoints from Wikipedia items in the current view" msgstr "" #: ../src/vikwindow.c:3168 msgid "_Save" msgstr "" #: ../src/vikwindow.c:3168 msgid "Save the file" msgstr "Lagre filen" #: ../src/vikwindow.c:3169 msgid "Save _As..." msgstr "Lagre _som..." #: ../src/vikwindow.c:3169 msgid "Save the file under different name" msgstr "Lagre filen med et annet navn" #: ../src/vikwindow.c:3170 msgid "_Generate Image File..." msgstr "_Generer bildefil..." #: ../src/vikwindow.c:3170 msgid "Save a snapshot of the workspace into a file" msgstr "" #: ../src/vikwindow.c:3171 msgid "Generate _Directory of Images..." msgstr "" #: ../src/vikwindow.c:3171 msgid "FIXME:IMGDIR" msgstr "" #: ../src/vikwindow.c:3174 msgid "_Print..." msgstr "" #: ../src/vikwindow.c:3174 msgid "Print maps" msgstr "Skriv ut kart" #: ../src/vikwindow.c:3177 msgid "E_xit" msgstr "" #: ../src/vikwindow.c:3177 msgid "Exit the program" msgstr "Avslutt programmet" #: ../src/vikwindow.c:3178 msgid "Save and Exit" msgstr "Lagre og avslutt" #: ../src/vikwindow.c:3178 msgid "Save and Exit the program" msgstr "Lagre og avslutt programmet" #: ../src/vikwindow.c:3180 msgid "Go to the _Default Location" msgstr "" #: ../src/vikwindow.c:3180 msgid "Go to the default location" msgstr "" #: ../src/vikwindow.c:3181 msgid "Go to _Location..." msgstr "" #: ../src/vikwindow.c:3181 msgid "Go to address/place using text search" msgstr "" #: ../src/vikwindow.c:3182 msgid "_Go to Lat/Lon..." msgstr "" #: ../src/vikwindow.c:3182 msgid "Go to arbitrary lat/lon coordinate" msgstr "" #: ../src/vikwindow.c:3183 msgid "Go to UTM..." msgstr "Gå til UTM..." #: ../src/vikwindow.c:3183 msgid "Go to arbitrary UTM coordinate" msgstr "" #: ../src/vikwindow.c:3184 msgid "_Refresh" msgstr "" #: ../src/vikwindow.c:3184 msgid "Refresh any maps displayed" msgstr "" #: ../src/vikwindow.c:3185 msgid "Set _Highlight Color..." msgstr "" #: ../src/vikwindow.c:3186 msgid "Set Bac_kground Color..." msgstr "" #: ../src/vikwindow.c:3187 msgid "Zoom _In" msgstr "Zoom _inn" #: ../src/vikwindow.c:3188 msgid "Zoom _Out" msgstr "Zoom _ut" #: ../src/vikwindow.c:3189 msgid "Zoom _To..." msgstr "Zoom _til..." #: ../src/vikwindow.c:3190 msgid "Pan _North" msgstr "" #: ../src/vikwindow.c:3191 msgid "Pan _East" msgstr "" #: ../src/vikwindow.c:3192 msgid "Pan _South" msgstr "" #: ../src/vikwindow.c:3193 msgid "Pan _West" msgstr "" #: ../src/vikwindow.c:3194 msgid "Background _Jobs" msgstr "Bakgrunns_jobb" #: ../src/vikwindow.c:3196 msgid "Cu_t" msgstr "Klipp _ut" #: ../src/vikwindow.c:3197 msgid "_Copy" msgstr "_Kopier" #: ../src/vikwindow.c:3198 msgid "_Paste" msgstr "_Lim inn" #: ../src/vikwindow.c:3199 msgid "_Delete" msgstr "Sle_tt" #: ../src/vikwindow.c:3200 msgid "Delete All" msgstr "Slett alle" #: ../src/vikwindow.c:3201 msgid "_Flush Map Cache" msgstr "" #: ../src/vikwindow.c:3202 msgid "_Set the Default Location" msgstr "" #: ../src/vikwindow.c:3202 msgid "Set the Default Location to the current position" msgstr "" #: ../src/vikwindow.c:3203 msgid "_Preferences" msgstr "_Innstillinger" #: ../src/vikwindow.c:3204 msgid "_Properties" msgstr "_Egenskaper" #: ../src/vikwindow.c:3207 msgid "_About" msgstr "_Om" #: ../src/vikwindow.c:3213 msgid "_UTM Mode" msgstr "_UTM-modus" #: ../src/vikwindow.c:3214 msgid "_Expedia Mode" msgstr "_Expedia-modus" #: ../src/vikwindow.c:3215 msgid "_Mercator Mode" msgstr "_Mercator-modus" #: ../src/vikwindow.c:3216 msgid "Lat_/Lon Mode" msgstr "" #: ../src/vikwindow.c:3220 msgid "Show _Scale" msgstr "" #: ../src/vikwindow.c:3220 msgid "Show Scale" msgstr "" #: ../src/vikwindow.c:3221 msgid "Show _Center Mark" msgstr "" #: ../src/vikwindow.c:3221 msgid "Show Center Mark" msgstr "" #: ../src/vikwindow.c:3222 msgid "Show _Highlight" msgstr "" #: ../src/vikwindow.c:3222 msgid "Show Highlight" msgstr "" #: ../src/vikwindow.c:3223 msgid "_Full Screen" msgstr "Fullskjerm" #: ../src/vikwindow.c:3223 msgid "Activate full screen mode" msgstr "Aktiver fullskjerm" #: ../src/vikwindow.c:3224 msgid "Show Side _Panel" msgstr "" #: ../src/vikwindow.c:3224 msgid "Show Side Panel" msgstr "" #: ../src/vikwindow.c:3225 msgid "Show Status_bar" msgstr "" #: ../src/vikwindow.c:3225 msgid "Show Statusbar" msgstr "" #: ../src/vikwindow.c:3226 msgid "Show _Toolbar" msgstr "" #: ../src/vikwindow.c:3226 msgid "Show Toolbar" msgstr "" #: ../src/vikwindow.c:3227 msgid "Show _Menu" msgstr "" #: ../src/vikwindow.c:3227 msgid "Show Menu" msgstr "" #: ../src/viking.desktop.in.h:2 msgid "GPS Data Manager" msgstr "" #: ../src/viking.desktop.in.h:3 msgid "Map Based GPS Data Manager (live data capable)." msgstr "" #: ../src/libjpeg/jpeg-data.c:206 msgid "Data does not follow JPEG specification." msgstr "" #: ../src/libjpeg/jpeg-data.c:291 #, c-format msgid "Path '%s' invalid." msgstr "" #: ../src/libjpeg/jpeg-data.c:309 #, c-format msgid "Could not read '%s'." msgstr "" viking-1.4.2/po/Makefile.in.in0000644000175000017500000001604612170052156013024 00000000000000# Makefile for program source directory in GNU NLS utilities package. # Copyright (C) 1995, 1996, 1997 by Ulrich Drepper # Copyright (C) 2004-2008 Rodney Dawes # # This file may be copied and used freely without restrictions. It may # be used in projects which are not available under a GNU Public License, # but which still want to provide support for the GNU gettext functionality. # # - Modified by Owen Taylor to use GETTEXT_PACKAGE # instead of PACKAGE and to look for po2tbl in ./ not in intl/ # # - Modified by jacob berkman to install # Makefile.in.in and po2tbl.sed.in for use with glib-gettextize # # - Modified by Rodney Dawes for use with intltool # # We have the following line for use by intltoolize: # INTLTOOL_MAKEFILE GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ PACKAGE = @PACKAGE@ VERSION = @VERSION@ SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ top_builddir = @top_builddir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ datadir = @datadir@ datarootdir = @datarootdir@ libdir = @libdir@ DATADIRNAME = @DATADIRNAME@ itlocaledir = $(prefix)/$(DATADIRNAME)/locale subdir = po install_sh = @install_sh@ # Automake >= 1.8 provides @mkdir_p@. # Until it can be supposed, use the safe fallback: mkdir_p = $(install_sh) -d INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ GMSGFMT = @GMSGFMT@ MSGFMT = @MSGFMT@ XGETTEXT = @XGETTEXT@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ MSGMERGE = INTLTOOL_EXTRACT="$(INTLTOOL_EXTRACT)" XGETTEXT="$(XGETTEXT)" srcdir=$(srcdir) $(INTLTOOL_UPDATE) --gettext-package $(GETTEXT_PACKAGE) --dist GENPOT = INTLTOOL_EXTRACT="$(INTLTOOL_EXTRACT)" XGETTEXT="$(XGETTEXT)" srcdir=$(srcdir) $(INTLTOOL_UPDATE) --gettext-package $(GETTEXT_PACKAGE) --pot ALL_LINGUAS = @ALL_LINGUAS@ PO_LINGUAS=$(shell if test -r $(srcdir)/LINGUAS; then grep -v "^\#" $(srcdir)/LINGUAS; else echo "$(ALL_LINGUAS)"; fi) USER_LINGUAS=$(shell if test -n "$(LINGUAS)"; then LLINGUAS="$(LINGUAS)"; ALINGUAS="$(ALL_LINGUAS)"; for lang in $$LLINGUAS; do if test -n "`grep \^$$lang$$ $(srcdir)/LINGUAS 2>/dev/null`" -o -n "`echo $$ALINGUAS|tr ' ' '\n'|grep \^$$lang$$`"; then printf "$$lang "; fi; done; fi) USE_LINGUAS=$(shell if test -n "$(USER_LINGUAS)" -o -n "$(LINGUAS)"; then LLINGUAS="$(USER_LINGUAS)"; else if test -n "$(PO_LINGUAS)"; then LLINGUAS="$(PO_LINGUAS)"; else LLINGUAS="$(ALL_LINGUAS)"; fi; fi; for lang in $$LLINGUAS; do printf "$$lang "; done) POFILES=$(shell LINGUAS="$(PO_LINGUAS)"; for lang in $$LINGUAS; do printf "$$lang.po "; done) DISTFILES = Makefile.in.in POTFILES.in $(POFILES) EXTRA_DISTFILES = ChangeLog POTFILES.skip Makevars LINGUAS POTFILES = \ # This comment gets stripped out CATALOGS=$(shell LINGUAS="$(USE_LINGUAS)"; for lang in $$LINGUAS; do printf "$$lang.gmo "; done) .SUFFIXES: .SUFFIXES: .po .pox .gmo .mo .msg .cat AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ INTLTOOL_V_MSGFMT = $(INTLTOOL__v_MSGFMT_$(V)) INTLTOOL__v_MSGFMT_= $(INTLTOOL__v_MSGFMT_$(AM_DEFAULT_VERBOSITY)) INTLTOOL__v_MSGFMT_0 = @echo " MSGFMT" $@; .po.pox: $(MAKE) $(GETTEXT_PACKAGE).pot $(MSGMERGE) $< $(GETTEXT_PACKAGE).pot -o $*.pox .po.mo: $(INTLTOOL_V_MSGFMT)$(MSGFMT) -o $@ $< .po.gmo: $(INTLTOOL_V_MSGFMT)file=`echo $* | sed 's,.*/,,'`.gmo \ && rm -f $$file && $(GMSGFMT) -o $$file $< .po.cat: sed -f ../intl/po2msg.sed < $< > $*.msg \ && rm -f $@ && gencat $@ $*.msg all: all-@USE_NLS@ all-yes: $(CATALOGS) all-no: $(GETTEXT_PACKAGE).pot: $(POTFILES) $(GENPOT) install: install-data install-data: install-data-@USE_NLS@ install-data-no: all install-data-yes: all linguas="$(USE_LINGUAS)"; \ for lang in $$linguas; do \ dir=$(DESTDIR)$(itlocaledir)/$$lang/LC_MESSAGES; \ $(mkdir_p) $$dir; \ if test -r $$lang.gmo; then \ $(INSTALL_DATA) $$lang.gmo $$dir/$(GETTEXT_PACKAGE).mo; \ echo "installing $$lang.gmo as $$dir/$(GETTEXT_PACKAGE).mo"; \ else \ $(INSTALL_DATA) $(srcdir)/$$lang.gmo $$dir/$(GETTEXT_PACKAGE).mo; \ echo "installing $(srcdir)/$$lang.gmo as" \ "$$dir/$(GETTEXT_PACKAGE).mo"; \ fi; \ if test -r $$lang.gmo.m; then \ $(INSTALL_DATA) $$lang.gmo.m $$dir/$(GETTEXT_PACKAGE).mo.m; \ echo "installing $$lang.gmo.m as $$dir/$(GETTEXT_PACKAGE).mo.m"; \ else \ if test -r $(srcdir)/$$lang.gmo.m ; then \ $(INSTALL_DATA) $(srcdir)/$$lang.gmo.m \ $$dir/$(GETTEXT_PACKAGE).mo.m; \ echo "installing $(srcdir)/$$lang.gmo.m as" \ "$$dir/$(GETTEXT_PACKAGE).mo.m"; \ else \ true; \ fi; \ fi; \ done # Empty stubs to satisfy archaic automake needs dvi info ctags tags CTAGS TAGS ID: # Define this as empty until I found a useful application. install-exec installcheck: uninstall: linguas="$(USE_LINGUAS)"; \ for lang in $$linguas; do \ rm -f $(DESTDIR)$(itlocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE).mo; \ rm -f $(DESTDIR)$(itlocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE).mo.m; \ done check: all $(GETTEXT_PACKAGE).pot rm -f missing notexist srcdir=$(srcdir) $(INTLTOOL_UPDATE) -m if [ -r missing -o -r notexist ]; then \ exit 1; \ fi mostlyclean: rm -f *.pox $(GETTEXT_PACKAGE).pot *.old.po cat-id-tbl.tmp rm -f .intltool-merge-cache clean: mostlyclean distclean: clean rm -f Makefile Makefile.in POTFILES stamp-it rm -f *.mo *.msg *.cat *.cat.m *.gmo maintainer-clean: distclean @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." rm -f Makefile.in.in distdir = ../$(PACKAGE)-$(VERSION)/$(subdir) dist distdir: $(DISTFILES) dists="$(DISTFILES)"; \ extra_dists="$(EXTRA_DISTFILES)"; \ for file in $$extra_dists; do \ test -f $(srcdir)/$$file && dists="$$dists $(srcdir)/$$file"; \ done; \ for file in $$dists; do \ test -f $$file || file="$(srcdir)/$$file"; \ ln $$file $(distdir) 2> /dev/null \ || cp -p $$file $(distdir); \ done update-po: Makefile $(MAKE) $(GETTEXT_PACKAGE).pot tmpdir=`pwd`; \ linguas="$(USE_LINGUAS)"; \ for lang in $$linguas; do \ echo "$$lang:"; \ result="`$(MSGMERGE) -o $$tmpdir/$$lang.new.po $$lang`"; \ if $$result; then \ if cmp $(srcdir)/$$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ rm -f $$tmpdir/$$lang.new.po; \ else \ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ :; \ else \ echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ rm -f $$tmpdir/$$lang.new.po; \ exit 1; \ fi; \ fi; \ else \ echo "msgmerge for $$lang.gmo failed!"; \ rm -f $$tmpdir/$$lang.new.po; \ fi; \ done Makefile POTFILES: stamp-it @if test ! -f $@; then \ rm -f stamp-it; \ $(MAKE) stamp-it; \ fi stamp-it: Makefile.in.in $(top_builddir)/config.status POTFILES.in cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/Makefile.in CONFIG_HEADERS= CONFIG_LINKS= \ $(SHELL) ./config.status # Tell versions [3.59,3.63) of GNU make not to export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: viking-1.4.2/po/pt_BR.po0000644000175000017500000024543712175546146011744 00000000000000# Brazilian Portuguese translation for viking # Copyright (c) 2007 Rosetta Contributors and Canonical Ltd 2007 # This file is distributed under the same license as the viking package. # FIRST AUTHOR , 2007. # msgid "" msgstr "" "Project-Id-Version: viking\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-02-04 23:29+0100\n" "PO-Revision-Date: 2011-06-09 02:24+0000\n" "Last-Translator: Sam Samuels \n" "Language-Team: Brazilian Portuguese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Launchpad-Export-Date: 2013-03-23 17:12+0000\n" "X-Generator: Launchpad (build 16540)\n" "Language: pt_BR\n" #: ../src/acquire.c:103 ../src/vikgpslayer.c:1185 msgid "Done." msgstr "Concluído." #: ../src/acquire.c:114 msgid "No data." msgstr "Sem dados." #: ../src/acquire.c:154 ../src/acquire.c:404 msgid "Error: acquisition failed." msgstr "Erro: aquisição falhou." #: ../src/acquire.c:341 msgid "Working..." msgstr "Trabalhando..." #. This shouldn't happen... #: ../src/acquire.c:394 msgid "" "Unable to create command\n" "Acquire method failed." msgstr "" #: ../src/acquire.c:486 msgid "_Filter" msgstr "" #: ../src/acquire.c:501 #, c-format msgid "Filter with %s" msgstr "" #: ../src/acquire.c:518 msgid "Filter" msgstr "" #: ../src/background.c:52 #, c-format msgid "%d items" msgstr "%d itens" #: ../src/background.c:248 msgid "Job" msgstr "Trabalho" #: ../src/background.c:252 msgid "Progress" msgstr "Progresso" #: ../src/background.c:268 msgid "Viking Background Jobs" msgstr "Trabalhos em Segundo Plano do Viking" #: ../src/bing.c:47 msgid "Bing" msgstr "" #. VIK_GTK_WINDOW_FROM_WIDGET(vp) #: ../src/bingmapsource.c:445 msgid "Bing attribution Loading" msgstr "" #: ../src/clipboard.c:95 msgid "paste failed" msgstr "colar falhou" #: ../src/clipboard.c:105 msgid "wrong clipboard data size" msgstr "tamanho da área de transferência incorreto" #: ../src/clipboard.c:124 #, c-format msgid "" "The clipboard contains sublayer data for %s layers. You must select a layer " "of this type to paste the clipboard data." msgstr "" "A área de transferência contém dados para as camadas subcamada %s. Você deve " "selecionar uma camada desse tipo para colar os dados do clipboard." #: ../src/clipboard.c:236 msgid "" "In order to paste a waypoint, please select an appropriate layer to paste " "into." msgstr "" "Por favor selecione uma camada apropriada para colar o Caminho (Waypoint)." #: ../src/dialog.c:52 msgid "Go to Lat/Lon" msgstr "Ir para Lat/Long" #: ../src/dialog.c:64 ../src/dialog.c:251 msgid "Latitude:" msgstr "Latitude:" #: ../src/dialog.c:70 ../src/dialog.c:256 msgid "Longitude:" msgstr "Longitude:" #: ../src/dialog.c:102 msgid "Go to UTM" msgstr "Ir para UTM" #: ../src/dialog.c:115 msgid "Northing:" msgstr "Para o Norte:" #: ../src/dialog.c:121 msgid "Easting:" msgstr "Para o Oeste:" #: ../src/dialog.c:128 msgid "Zone:" msgstr "Zona:" #: ../src/dialog.c:131 msgid "Letter:" msgstr "Carta:" #: ../src/dialog.c:199 msgid "Waypoint Properties" msgstr "Propriedades de Waypoint" #: ../src/dialog.c:233 msgid "Name:" msgstr "Nome:" #: ../src/dialog.c:261 msgid "Altitude:" msgstr "Altitude:" #: ../src/dialog.c:266 msgid "Comment:" msgstr "Comentário:" #: ../src/dialog.c:274 ../src/osm-traces.c:437 msgid "Description:" msgstr "Descrição:" #: ../src/dialog.c:277 msgid "Image:" msgstr "Imagem:" #: ../src/dialog.c:282 msgid "Symbol:" msgstr "Símbolo:" #: ../src/dialog.c:291 msgid "(none)" msgstr "(vazio)" #. TODO: other checks (isalpha or whatever ) #: ../src/dialog.c:356 msgid "Please enter a name for the waypoint." msgstr "Por favor insira um nome para o waypoint." #: ../src/dialog.c:529 ../src/geonamessearch.c:243 #: ../src/datasource_osm_my_traces.c:507 msgid "Nothing was selected" msgstr "Nada foi selecionado" #: ../src/dialog.c:537 msgid "Add Route" msgstr "" #: ../src/dialog.c:537 msgid "Add Track" msgstr "Adicionar Trilha" #: ../src/dialog.c:545 msgid "Route Name:" msgstr "" #: ../src/dialog.c:545 msgid "Track Name:" msgstr "Nome da Trilha:" #: ../src/dialog.c:565 msgid "Please enter a name for the track." msgstr "Por favor insira um nome para a trilha." #: ../src/dialog.c:623 msgid "Zoom Factors..." msgstr "Fatores de Zoom ..." #: ../src/dialog.c:637 msgid "Zoom factor (in meters per pixel):" msgstr "Fator de zoom (em metros por pixel):" #: ../src/dialog.c:638 msgid "X (easting): " msgstr "X (Para o Oeste): " #: ../src/dialog.c:639 msgid "Y (northing): " msgstr "Y (para o norte): " #: ../src/dialog.c:644 msgid "X and Y zoom factors must be equal" msgstr "Fatore X e Y zoom devem ser iguais" #: ../src/dialog.c:699 msgid "1 min" msgstr "1 min" #: ../src/dialog.c:700 msgid "1 hour" msgstr "1 hora" #: ../src/dialog.c:701 msgid "1 day" msgstr "1 dia" #: ../src/dialog.c:702 msgid "Custom (in minutes):" msgstr "Personalizar (em minutos):" #: ../src/dialog.c:808 msgid "GPS Data and Topo Analyzer, Explorer, and Manager." msgstr "Dados de GPS e Analisador de Topo, Explorador, e Gerenciador." #: ../src/dialog.c:809 msgid "" "This program is free software; you can redistribute it and/or modify it " "under the terms of the GNU General Public License as published by the Free " "Software Foundation; either version 2 of the License, or (at your option) " "any later version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT " "ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or " "FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for " "more details.\n" "\n" "You should have received a copy of the GNU General Public License along with " "this program; if not, write to the Free Software Foundation, Inc., 59 Temple " "Place, Suite 330, Boston, MA 02111-1307, USA" msgstr "" "Este programa é um software livre, você pode redistribuí-lo e / ou modificá-" "lo sob os termos da GNU General Public License como publicado pela Free " "Software Foundation, tanto a versão 2 da Licença, ou (a seu critério) " "qualquer versão posterior.\n" "\n" "Este programa é distribuído na esperança de que seja útil, mas SEM QUALQUER " "GARANTIA, sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou ADEQUAÇÃO " "PARA UM DETERMINADO PROPÓSITO. Veja a GNU General Public License para mais " "detalhes.\n" "\n" "Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este " "programa, se não, escreva para a Free Software Foundation, Inc., 59 Temple " "Place, Suite 330, Boston, MA 02111-1307, EUA" #: ../src/dialog.c:837 msgid "Translation is coordinated on http://launchpad.net/viking" msgstr "A tradução é coordenada na http://launchpad.net/viking" #: ../src/dialog.c:845 msgid "Download along track" msgstr "Download da via" #: ../src/dialog.c:851 msgid "Map type:" msgstr "Tipo de mapa:" #: ../src/dialog.c:856 msgid "Zoom level:" msgstr "Nível de zoom:" #: ../src/dialog.c:896 #, c-format msgid "The map data is licensed: %s." msgstr "Os dados do mapa são licenciados: %s" #: ../src/dialog.c:899 #, c-format msgid "" "The data provided by '%s' are licensed under the following license: " "%s.\n" "Please, read the license before continuing." msgstr "" "Os dados fornecidos pela'%s' estão licenciados sob a seguinte " "licença: %s.\n" "Por favor, leia a licença antes de continuar." #: ../src/dialog.c:904 msgid "Open license" msgstr "Licença aberta" #: ../src/expedia.c:53 msgid "Expedia Street Maps" msgstr "Rua Expedia Mapas" #: ../src/expedia.c:81 msgid "Invalid expedia altitude" msgstr "Altitude expedia inválida" #: ../src/expedia.c:112 #, c-format msgid "" "Couldn't open EXPEDIA image file (right after successful download! Please " "report and delete image file!): %s" msgstr "" "Não foi possível abrir o arquivo de imagem EXPEDIA (logo após download " "concluído com sucesso! Por favor, informe e apague o arquivo da imagem!): %s" #: ../src/expedia.c:125 #, c-format msgid "" "Couldn't save EXPEDIA image file (right after successful download! Please " "report and delete image file!): %s" msgstr "" "Não foi possível salvar o arquivo de imagem EXPEDIA (logo após download " "concluído com sucesso! Por favor, informe e apague o arquivo da imagem!): %s" #. * #. * See http://www.geonames.org/export/wikipedia-webservice.html#wikipediaBoundingBox #. #. Translators may wish to change this setting as appropriate to get Wikipedia articles in that language #: ../src/geonamessearch.c:46 msgid "en" msgstr "" #: ../src/geonamessearch.c:121 msgid "Search" msgstr "Pesquisar" #: ../src/geonamessearch.c:123 msgid "No entries found!" msgstr "Entradas não encontradas!" #. NB could allow columns to be shifted around by doing this after each new #. gtk_tree_view_column_set_reorderable ( column, TRUE ); #. However I don't think is that useful, so I haven't put it in #: ../src/geonamessearch.c:177 ../src/datasource_osm_my_traces.c:425 msgid "Name" msgstr "" #: ../src/geonamessearch.c:182 msgid "Feature" msgstr "" #: ../src/geonamessearch.c:187 ../src/datasource_osm_my_traces.c:440 msgid "Lat/Lon" msgstr "" #: ../src/geonamessearch.c:269 ../src/googlesearch.c:100 msgid "couldn't map temp file" msgstr "não foi possível mapear arquivo temporário" #: ../src/globals.c:44 msgid "Degree format:" msgstr "Formato de grau" #: ../src/globals.c:48 msgid "Distance units:" msgstr "Unidade de distância:" #: ../src/globals.c:52 msgid "Speed units:" msgstr "Unidade de velocidade:" #: ../src/globals.c:56 msgid "Height units:" msgstr "Unidade de altura:" #: ../src/globals.c:60 msgid "Use large waypoint icons:" msgstr "Usar ícones grandes do waypoint:" #: ../src/globals.c:64 msgid "Default latitude:" msgstr "Latitude padrão" #: ../src/globals.c:67 msgid "Default longitude:" msgstr "Longitude padrão" #: ../src/globals.c:73 msgid "Alphabetical" msgstr "" #: ../src/globals.c:73 ../src/datasource_osm_my_traces.c:435 msgid "Time" msgstr "" #: ../src/globals.c:76 msgid "KML File Export Units:" msgstr "" #: ../src/globals.c:77 msgid "GPX Track Order:" msgstr "" #: ../src/globals.c:82 msgid "Image Viewer:" msgstr "" #: ../src/globals.c:87 msgid "External GPX Program 1:" msgstr "" #: ../src/globals.c:88 msgid "External GPX Program 2:" msgstr "" #. Defaults for the options are setup here #: ../src/globals.c:96 msgid "General" msgstr "" #. New Tab #: ../src/globals.c:121 msgid "Export/External" msgstr "" #. Webtools #: ../src/google.c:36 msgid "Google" msgstr "Google" #: ../src/datasource_file.c:59 msgid "Import file with GPSBabel" msgstr "" #: ../src/datasource_file.c:60 msgid "Imported file" msgstr "" #. The file selector #: ../src/datasource_file.c:133 msgid "File:" msgstr "" #: ../src/datasource_file.c:134 msgid "File to import" msgstr "" #: ../src/datasource_file.c:141 msgid "All files" msgstr "" #. The file format selector #: ../src/datasource_file.c:148 msgid "File type:" msgstr "" #: ../src/datasource_file.c:193 #, c-format msgid "using babel args '%s' and file '%s'" msgstr "" #: ../src/datasource_gc.c:66 msgid "Download Geocaches" msgstr "Baixar Geocaches" #: ../src/datasource_gc.c:67 msgid "Geocaching.com Caches" msgstr "Caches Geocaching.com" #: ../src/datasource_gc.c:84 msgid "geocaching.com username:" msgstr "nome de usuário geocaching.com:" #: ../src/datasource_gc.c:85 msgid "geocaching.com password:" msgstr "senha geocaching.com:" #: ../src/datasource_gc.c:126 #, c-format msgid "" "Can't find %s or %s in path! Check that you have installed it correctly." msgstr "" #: ../src/datasource_gc.c:188 msgid "Number geocaches:" msgstr "Número dos Geocaches:" #: ../src/datasource_gc.c:190 msgid "Centered around:" msgstr "Centralizado em torno de:" #: ../src/datasource_gc.c:226 msgid "Broken input - using some defaults" msgstr "" #: ../src/datasource_geotag.c:51 msgid "Create Waypoints from Geotagged Images" msgstr "" #: ../src/datasource_geotag.c:52 msgid "Geotagged Images" msgstr "" #: ../src/datasource_geotag.c:102 ../src/vikwindow.c:2314 #: ../src/vikwindow.c:2382 ../src/vikwindow.c:2824 msgid "All" msgstr "" #: ../src/datasource_geotag.c:107 ../src/vikwindow.c:2829 msgid "JPG" msgstr "" #: ../src/datasource_geotag.c:165 #, c-format msgid "Unable to create waypoint from %s" msgstr "" #: ../src/datasource_google.c:49 ../src/datasource_google.c:50 msgid "Google Directions" msgstr "Direções Google" #: ../src/datasource_google.c:77 msgid "From:" msgstr "De:" #: ../src/datasource_google.c:79 msgid "To:" msgstr "Para:" #: ../src/datasource_gps.c:57 msgid "Acquire from GPS" msgstr "Aquisição do GPS" #: ../src/datasource_gps.c:58 msgid "Acquired from GPS" msgstr "Adquiridos do GPS" #: ../src/datasource_gps.c:221 #, c-format msgid "using cmdline '%s' and file '%s'\n" msgstr "usandOp cmdline '%s' e arquivo '%s'\n" #: ../src/datasource_gps.c:297 ../src/vikgpslayer.c:884 #, c-format msgid "Downloading %d waypoint..." msgid_plural "Downloading %d waypoints..." msgstr[0] "Baixando %d waypoint..." msgstr[1] "baixando %d waypoints..." #: ../src/datasource_gps.c:298 ../src/vikgpslayer.c:885 #, c-format msgid "Downloading %d trackpoint..." msgid_plural "Downloading %d trackpoints..." msgstr[0] "Baixando %d trackpoint..." msgstr[1] "Baixando %d trackpoints..." #: ../src/datasource_gps.c:303 ../src/vikgpslayer.c:890 #, c-format msgid "Downloading %d routepoint..." msgid_plural "Downloading %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/datasource_gps.c:325 ../src/datasource_gps.c:326 #: ../src/datasource_gps.c:327 #, c-format msgid "Downloaded %d out of %d %s..." msgstr "Transferido %d de %d%s..." #: ../src/datasource_gps.c:331 ../src/datasource_gps.c:332 #: ../src/datasource_gps.c:333 #, c-format msgid "Downloaded %d %s." msgstr "Baixado %d %s" #: ../src/datasource_gps.c:347 ../src/vikgpslayer.c:968 #, c-format msgid "GPS Device: %s" msgstr "Dispositivo GPS: %s" #: ../src/datasource_gps.c:370 ../src/vikgpslayer.c:1042 #: ../src/vikgpslayer.c:1110 msgid "Status: Working..." msgstr "" #: ../src/datasource_gps.c:469 ../src/vikgpslayer.c:150 msgid "GPS Protocol:" msgstr "Protocolo GPS:" #. List now assigned at runtime #: ../src/datasource_gps.c:488 ../src/vikgpslayer.c:151 msgid "Serial Port:" msgstr "Porta Serial:" #: ../src/datasource_gps.c:509 msgid "" "Turn Off After Transfer\n" "(Garmin/NAViLink Only)" msgstr "" "Desligar Após Transferência\n" "(Apenas Garmin/NAViLink)" #: ../src/datasource_gps.c:512 msgid "Tracks:" msgstr "" #: ../src/datasource_gps.c:516 msgid "Routes:" msgstr "" #: ../src/datasource_gps.c:520 msgid "Waypoints:" msgstr "" #: ../src/datasource_gps.c:594 ../src/vikgpslayer.c:1305 msgid "GPS device: N/A" msgstr "Dispositivo GPS: N/D" #: ../src/datasource_osm.c:52 ../src/datasource_osm.c:53 msgid "OSM traces" msgstr "" #: ../src/datasource_osm.c:80 msgid "Page number:" msgstr "" #: ../src/datasource_osm_my_traces.c:63 ../src/datasource_osm_my_traces.c:64 msgid "OSM My Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:108 msgid "Username:" msgstr "" #: ../src/datasource_osm_my_traces.c:113 msgid "The email or username used to login to OSM" msgstr "" #: ../src/datasource_osm_my_traces.c:115 ../src/osm-traces.c:413 msgid "Password:" msgstr "Senha:" #: ../src/datasource_osm_my_traces.c:120 msgid "The password used to login to OSM" msgstr "" #: ../src/datasource_osm_my_traces.c:430 msgid "Description" msgstr "" #: ../src/datasource_osm_my_traces.c:445 msgid "Privacy" msgstr "" #: ../src/datasource_osm_my_traces.c:452 msgid "Within Current View" msgstr "" #: ../src/datasource_osm_my_traces.c:518 msgid "GPS Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:520 msgid "None found!" msgstr "" #: ../src/datasource_osm_my_traces.c:629 msgid "My OSM Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:645 #, c-format msgid "Unable to get trace: %s" msgstr "" #: ../src/datasource_wikipedia.c:32 msgid "Create Waypoints from Wikipedia Articles" msgstr "" #: ../src/datasource_wikipedia.c:33 msgid "Wikipedia Waypoints" msgstr "" #: ../src/dem.c:65 ../src/dem.c:79 msgid "Invalid DEM" msgstr "DEM Inválido" #: ../src/dem.c:121 msgid "Invalid DEM header" msgstr "Cabeçalho DEM inválido" #: ../src/dem.c:190 ../src/dem.c:203 msgid "Incorrect DEM Class B record: expected 1" msgstr "Registro Classe B Incorreta: 1 esperado" #: ../src/dem.c:360 #, c-format msgid "Couldn't map file %s: %s" msgstr "Não foi possível mapear o arquivo %s: %s" #: ../src/download.c:112 msgid "Tile age (s):" msgstr "Idade da Telha (s):" #: ../src/download.c:233 #, c-format msgid "Download error: %s" msgstr "Erro no Download: %s" #: ../src/download.c:313 msgid "couldn't open temp file" msgstr "não foi possível abrir o arquivo temporário" #: ../src/file.c:456 ../src/file.c:461 #, c-format msgid "Draw mode '%s' no more supported" msgstr "Modo de Empate '%s'' não é mais suportada" #: ../src/geotag_exif.c:433 msgid "Not enough memory." msgstr "" #: ../src/geotag_exif.c:451 msgid "Setting a value for this tag is unsupported!" msgstr "" #: ../src/geotag_exif.c:470 #, c-format msgid "Too few components specified (need %d, found %d)\n" msgstr "" #: ../src/geotag_exif.c:474 msgid "Numeric value expected\n" msgstr "" #: ../src/geotag_exif.c:482 msgid "This shouldn't happen!" msgstr "" #: ../src/geotag_exif.c:552 msgid "Not yet implemented!" msgstr "" #: ../src/geotag_exif.c:565 msgid "Warning; Too many components specified!" msgstr "" #: ../src/osm-traces.c:73 msgid "Identifiable (public w/ timestamps)" msgstr "Identificável (w público / data e hora)" #: ../src/osm-traces.c:74 msgid "Trackable (private w/ timestamps)" msgstr "Rastreável (w/ data e hora privados)" #: ../src/osm-traces.c:75 msgid "Public" msgstr "Público" #: ../src/osm-traces.c:76 msgid "Private" msgstr "Privado" #: ../src/osm-traces.c:93 msgid "OSM username:" msgstr "Nome de usuário OSM:" #: ../src/osm-traces.c:94 msgid "OSM password:" msgstr "Senha do OSM:" #. Preferences #: ../src/osm-traces.c:151 msgid "OpenStreetMap Traces" msgstr "" #: ../src/osm-traces.c:234 #, c-format msgid "failed to upload data: HTTP response is %ld" msgstr "falha no envio de dados: Resposta HTTP é %ld" #: ../src/osm-traces.c:239 #, c-format msgid "curl_easy_getinfo failed: %d" msgstr "curl_easy_getinfo falhou: %d" #: ../src/osm-traces.c:244 #, c-format msgid "curl request failed: %s" msgstr "pedido curl falhou: %s" #: ../src/osm-traces.c:275 #, c-format msgid "failed to open temporary file: %s" msgstr "Falha ao abrir o arquivo temporário: %s" #. Success #: ../src/osm-traces.c:328 msgid "Uploaded to OSM" msgstr "" #: ../src/osm-traces.c:332 msgid "FAILED TO UPLOAD DATA TO OSM - CURL PROBLEM" msgstr "" #: ../src/osm-traces.c:335 msgid "FAILED TO UPLOAD DATA TO OSM" msgstr "" #: ../src/osm-traces.c:335 msgid "HTTP response code" msgstr "" #: ../src/osm-traces.c:348 #, c-format msgid "failed to unlink temporary file: %s" msgstr "Falha ao desvincular o arquivo temporário: %s" #: ../src/osm-traces.c:387 msgid "OSM upload" msgstr "OSM upload" #: ../src/osm-traces.c:405 msgid "Email:" msgstr "Email:" #: ../src/osm-traces.c:410 msgid "" "The email used as login\n" "Enter the email you use to login into www.openstreetmap.org." msgstr "" "O e-mail utilizado como login\n" "Digite o e-mail que você usa para fazer login em " "www.openstreetmap.org." #: ../src/osm-traces.c:418 msgid "" "The password used to login\n" "Enter the password you use to login into " "www.openstreetmap.org." msgstr "" "A senha usada para entrar\n" "Digite a senha que você usa para entrar em www.openstreetmap.org." #: ../src/osm-traces.c:423 msgid "File's name:" msgstr "Nome do arquivo:" #: ../src/osm-traces.c:433 msgid "" "The name of the file on OSM\n" "This is the name of the file created on the server.This is not the " "name of the local file." msgstr "" "O nome do arquivo no OSM\n" "Este é o nome do arquivo criado no servidor. Este não é o nome do " "arquivo local." #: ../src/osm-traces.c:442 msgid "The description of the trace" msgstr "A descrição do rastreamento" #: ../src/osm-traces.c:444 msgid "Tags:" msgstr "Etiquetas:" #: ../src/osm-traces.c:449 msgid "The tags associated to the trace" msgstr "As marcas associadas ao rastreamento" #: ../src/osm-traces.c:482 #, c-format msgid "Uploading %s to OSM" msgstr "Uploading %s para OSM" #: ../src/mapcache.c:61 msgid "Map cache memory size (MB):" msgstr "" #: ../src/print.c:53 msgid "None" msgstr "Nenhum" #: ../src/print.c:54 msgid "Horizontally" msgstr "Horizontalmente" #: ../src/print.c:55 msgid "Vertically" msgstr "Verticalmente" #: ../src/print.c:56 msgid "Both" msgstr "Ambos" #: ../src/print.c:120 msgid "Image Settings" msgstr "Configurações de Imagem" #: ../src/print.c:546 msgid "done" msgstr "concluído" #. Page Size #: ../src/print.c:575 msgid "_Adjust Page Size and Orientation" msgstr "_Ajustar Tamanho e a Orientação da Página" #: ../src/print.c:591 msgid "C_enter:" msgstr "C_entro:" #. ignore page margins #: ../src/print.c:609 msgid "Ignore Page _Margins" msgstr "Ignorar _Margens da Página" #: ../src/print.c:628 msgid "Image S_ize:" msgstr "Tamanho da Imagem" #: ../src/util.c:81 msgid "Could not launch web browser." msgstr "Não foi possível iniciar o navegador de Internet." #: ../src/util.c:92 msgid "Could not create new email." msgstr "Não foi possível criar e-mail." #: ../src/vikcoordlayer.c:46 msgid "Color:" msgstr "Cor:" #: ../src/vikcoordlayer.c:47 msgid "Minutes Width:" msgstr "Largura da Ata:" #: ../src/vikcoordlayer.c:48 msgid "Line Thickness:" msgstr "Espessura da linha:" #: ../src/vikcoordlayer.c:56 msgid "Coordinate" msgstr "" #: ../src/datasource_bfilter.c:46 msgid "Max number of points:" msgstr "Número máximo de pontos" #: ../src/datasource_bfilter.c:60 msgid "Simplify All Tracks..." msgstr "" #: ../src/datasource_bfilter.c:61 msgid "Simplified Tracks" msgstr "Simplificar Lançamentos" #: ../src/datasource_bfilter.c:96 ../src/datasource_bfilter.c:97 msgid "Remove Duplicate Waypoints" msgstr "Remover Waypoints duplicados" #: ../src/datasource_bfilter.c:129 msgid "Waypoints Inside This" msgstr "Waypoints Dentro Este" #: ../src/datasource_bfilter.c:130 msgid "Polygonized Layer" msgstr "Camada Poligonizada" #: ../src/datasource_bfilter.c:165 msgid "Waypoints Outside This" msgstr "Os Waypoints fora deste" #: ../src/datasource_bfilter.c:166 msgid "Polygonzied Layer" msgstr "Camada Poligonizada" #: ../src/main.c:89 #, c-format msgid "Ignoring Xlib error: error code %d request code %d\n" msgstr "" #: ../src/main.c:102 msgid "Enable debug output" msgstr "Habilitar a saída de depuração" #: ../src/main.c:103 msgid "Enable verbose output" msgstr "Habilitar saída com mensagens detalhadas" #: ../src/main.c:104 msgid "Show version" msgstr "Mostrar versão" #: ../src/osm.c:106 msgid "On Disk OSM Tile Format" msgstr "" #: ../src/osm.c:121 msgid "OSM (view)" msgstr "OSM (vista)" #: ../src/osm.c:125 msgid "OSM (edit)" msgstr "OSM (editar)" #: ../src/osm.c:129 msgid "OSM (render)" msgstr "OSM (processar)" #. Example: http://127.0.0.1:8111/load_and_zoom?left=8.19&right=8.20&top=48.605&bottom=48.590&select=node413602999 #. JOSM or merkaartor must already be running with remote interface enabled #: ../src/osm.c:136 msgid "Local port 8111 (eg JOSM)" msgstr "" #: ../src/preferences.c:285 msgid "Preferences" msgstr "Preferências" #: ../src/uibuilder.c:147 msgid "Take care that this password will be stored clearly in a plain file." msgstr "" "Tome cuidado para que essa senha seja armazenada em meio a um simples " "arquivo." #: ../src/vikaggregatelayer.c:37 msgid "Aggregate" msgstr "" #: ../src/vikdemlayer.c:101 msgid "Absolute height" msgstr "Altura absoluta" #: ../src/vikdemlayer.c:102 msgid "Height gradient" msgstr "Gradiente de Altura" #: ../src/vikdemlayer.c:118 msgid "DEM Files:" msgstr "Arquivos DEM:" #: ../src/vikdemlayer.c:119 msgid "Download Source:" msgstr "Fonte do download:" #: ../src/vikdemlayer.c:120 msgid "Min Elev Color:" msgstr "Min Elev Color:" #: ../src/vikdemlayer.c:121 msgid "Type:" msgstr "Tipo:" #: ../src/vikdemlayer.c:122 msgid "Min Elev:" msgstr "Min Elev:" #: ../src/vikdemlayer.c:123 msgid "Max Elev:" msgstr "Max Elev:" #: ../src/vikdemlayer.c:134 msgid "_DEM Download" msgstr "" #: ../src/vikdemlayer.c:134 msgid "DEM Download" msgstr "" #: ../src/vikdemlayer.c:188 msgid "DEM" msgstr "" #: ../src/vikdemlayer.c:284 #, c-format msgid "Number of files: %d" msgstr "Número de arquivos: %d" #: ../src/vikdemlayer.c:385 msgid "DEM Loading" msgstr "DEM Carregando" #: ../src/vikdemlayer.c:889 #, c-format msgid "No SRTM data available for %f, %f" msgstr "Não há dados SRTM disponíveis para %f, %f" #: ../src/vikdemlayer.c:1149 #, c-format msgid "Downloading DEM %s" msgstr "Baixando DEM %s" #: ../src/vikfileentry.c:68 msgid "Browse..." msgstr "Navegar..." #: ../src/vikfileentry.c:96 msgid "Choose file" msgstr "Escolha o arquivo" #: ../src/vikfilelist.c:48 msgid "Choose file(s)" msgstr "Escolher arquivo (s)" #: ../src/vikfilelist.c:172 msgid "Add..." msgstr "Adicionar..." #: ../src/vikfilelist.c:173 msgid "Delete" msgstr "Excluir" #: ../src/vikgeoreflayer.c:70 msgid "_Georef Move Map" msgstr "" #: ../src/vikgeoreflayer.c:70 msgid "Georef Move Map" msgstr "GEOREF Mover Mapa" #: ../src/vikgeoreflayer.c:77 msgid "Georef Z_oom Tool" msgstr "" #: ../src/vikgeoreflayer.c:77 msgid "Georef Zoom Tool" msgstr "GEOREF Ferramenta de Zoom" #: ../src/vikgeoreflayer.c:87 msgid "GeoRef Map" msgstr "" #: ../src/vikgeoreflayer.c:335 ../src/vikmapslayer.c:685 #, c-format msgid "Couldn't open image file: %s" msgstr "Não foi possível abrir arquivo de imagem: %s" #: ../src/vikgeoreflayer.c:365 msgid "Unexpected end of file reading World file." msgstr "Fim de arquivo inesperado ao ler o arquivo Mundial." #: ../src/vikgeoreflayer.c:381 ../src/vikgeoreflayer.c:426 msgid "Choose World file" msgstr "Escolher arquivo Mundial" #: ../src/vikgeoreflayer.c:394 msgid "The World file you requested could not be opened for reading." msgstr "O arquivo Mundial solicitado não pôde ser aberto para leitura." #: ../src/vikgeoreflayer.c:439 msgid "The file you requested could not be opened for writing." msgstr "O arquivo solicitado não pôde ser aberto para escrita." #: ../src/vikgeoreflayer.c:456 ../src/viklayer.c:480 msgid "Layer Properties" msgstr "Propriedades da Camada" #: ../src/vikgeoreflayer.c:478 msgid "World File Parameters:" msgstr "Parâmetros do Arquivo Mundial:" #: ../src/vikgeoreflayer.c:479 msgid "Load From File..." msgstr "Carregar Do Arquivo..." #: ../src/vikgeoreflayer.c:484 msgid "Corner pixel easting:" msgstr "Pixel De canto Para o Oeste:" #: ../src/vikgeoreflayer.c:486 msgid "the UTM \"easting\" value of the upper-right corner pixel of the map" msgstr "UTM valor \"Para o Oeste\" do Pixel canto superior direito do mapa" #: ../src/vikgeoreflayer.c:488 msgid "Corner pixel northing:" msgstr "Pixel De canto Para o Norte:" #: ../src/vikgeoreflayer.c:490 msgid "the UTM \"northing\" value of the upper-right corner pixel of the map" msgstr "UTM valor \"Para o Norte\" do Pixel canto superior direito do mapa" #: ../src/vikgeoreflayer.c:492 msgid "X (easting) scale (mpp): " msgstr "X (easting) escala (mpp): " #: ../src/vikgeoreflayer.c:493 msgid "Y (northing) scale (mpp): " msgstr "Y (northing) escala (mpp): " #: ../src/vikgeoreflayer.c:496 msgid "the scale of the map in the X direction (meters per pixel)" msgstr "a escala do mapa na direção X (metros por Pixel)" #: ../src/vikgeoreflayer.c:498 msgid "the scale of the map in the Y direction (meters per pixel)" msgstr "a escala do mapa na direção Y (metros por pixel)" #: ../src/vikgeoreflayer.c:500 msgid "Map Image:" msgstr "Mapa de Imagem:" #. Now with icons #: ../src/vikgeoreflayer.c:608 msgid "_Zoom to Fit Map" msgstr "_Zoom para se adaptar ao Mapa" #: ../src/vikgeoreflayer.c:614 msgid "_Goto Map Center" msgstr "Centro Mapa _Goto" #: ../src/vikgeoreflayer.c:620 msgid "_Export to World File" msgstr "_Exportar para Arquivo Mundial" #: ../src/vikgoto.c:75 msgid "No goto tool available." msgstr "Nenhuma ferramenta goto disponível." #: ../src/vikgoto.c:88 ../src/vikgoto.c:107 msgid "goto" msgstr "goto" #: ../src/vikgoto.c:90 msgid "I don't know that place. Do you want another goto?" msgstr "Eu não sei esse lugar. Quer mais goto?" #: ../src/vikgoto.c:109 msgid "goto provider:" msgstr "provedor goto:" #: ../src/vikgoto.c:124 msgid "Enter address or place name:" msgstr "Informe o endereço ou o nome do local:" #: ../src/vikgpslayer.c:127 msgid "Data Mode" msgstr "" #: ../src/vikgpslayer.c:129 msgid "Realtime Tracking Mode" msgstr "" #: ../src/vikgpslayer.c:137 msgid "Keep vehicle at center" msgstr "" #: ../src/vikgpslayer.c:138 msgid "Keep vehicle on screen" msgstr "" #: ../src/vikgpslayer.c:139 msgid "Disable" msgstr "" #: ../src/vikgpslayer.c:152 msgid "Download Tracks:" msgstr "" #: ../src/vikgpslayer.c:153 msgid "Upload Tracks:" msgstr "" #: ../src/vikgpslayer.c:154 msgid "Download Routes:" msgstr "" #: ../src/vikgpslayer.c:155 msgid "Upload Routes:" msgstr "" #: ../src/vikgpslayer.c:156 msgid "Download Waypoints:" msgstr "" #: ../src/vikgpslayer.c:157 msgid "Upload Waypoints:" msgstr "" #: ../src/vikgpslayer.c:159 msgid "Recording tracks" msgstr "Gravação de faixas" #: ../src/vikgpslayer.c:160 msgid "Jump to current position on start" msgstr "Ir para a posição atual no início" #: ../src/vikgpslayer.c:161 msgid "Moving Map Method:" msgstr "Método Moving Map:" #: ../src/vikgpslayer.c:162 msgid "Gpsd Host:" msgstr "Anfitrião DSGP:" #: ../src/vikgpslayer.c:163 msgid "Gpsd Port:" msgstr "Porto DSGP:" #: ../src/vikgpslayer.c:164 msgid "Gpsd Retry Interval (seconds):" msgstr "Gpsd Repetir Intervalo (segundos):" #: ../src/vikgpslayer.c:179 msgid "GPS" msgstr "" #: ../src/vikgpslayer.c:242 ../src/vikgpslayer.c:1258 msgid "GPS Download" msgstr "GPS Download" #: ../src/vikgpslayer.c:242 ../src/vikgpslayer.c:1258 #: ../src/viktrwlayer.c:3094 msgid "GPS Upload" msgstr "GPS Upload" #: ../src/vikgpslayer.c:244 msgid "GPS Realtime Tracking" msgstr "GPS rastreamento em tempo real" #: ../src/vikgpslayer.c:451 msgid "Unknown GPS Protocol" msgstr "Protocolo GPS Desconhecido" #: ../src/vikgpslayer.c:469 msgid "Unknown serial port device" msgstr "Dispositivo de porta serial desconhecido." #: ../src/vikgpslayer.c:572 #, c-format msgid "%s: unknown parameter" msgstr "%s: parâmetro desconhecido" #. Now with icons #: ../src/vikgpslayer.c:693 msgid "_Upload to GPS" msgstr "_Upload para GPS" #: ../src/vikgpslayer.c:699 msgid "Download from _GPS" msgstr "Download para _GPS" #: ../src/vikgpslayer.c:720 msgid "Empty _Realtime" msgstr "Realtime_ Vazio" #: ../src/vikgpslayer.c:727 msgid "E_mpty Upload" msgstr "V_azio Upload" #: ../src/vikgpslayer.c:733 msgid "_Empty Download" msgstr "_Download Vazio" #: ../src/vikgpslayer.c:739 msgid "Empty _All" msgstr "Tudo_Vazio" #. #. NB It's not fatal if this gives 2 for example! Hence removal of the g_assert #. This happens when copied GPS layer is deleted (not sure why the number_handlers would be 2) #. I don't think there's any side effects and certainly better than the program just aborting #. #: ../src/vikgpslayer.c:756 #, c-format msgid "Unexpected number of disconnected handlers: %d" msgstr "Número inesperado de manipuladores desconectados: %d" #: ../src/vikgpslayer.c:898 #, c-format msgid "Uploading %d waypoint..." msgid_plural "Uploading %d waypoints..." msgstr[0] "Uploading %d waypoint..." msgstr[1] "Uploading %d waypoints..." #: ../src/vikgpslayer.c:899 #, c-format msgid "Uploading %d trackpoint..." msgid_plural "Uploading %d trackpoints..." msgstr[0] "Uploading %d trackpoint..." msgstr[1] "Uploading %d trackpoints..." #: ../src/vikgpslayer.c:900 #, c-format msgid "Uploading %d routepoint..." msgid_plural "Uploading %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:925 #, c-format msgid "Downloaded %d out of %d waypoint..." msgid_plural "Downloaded %d out of %d waypoints..." msgstr[0] "Transe rido %d de %d waypoint..." msgstr[1] "Tranferidos %d de %d waypoints..." #: ../src/vikgpslayer.c:926 #, c-format msgid "Downloaded %d out of %d trackpoint..." msgid_plural "Downloaded %d out of %d trackpoints..." msgstr[0] "Transferido %d de %d trackpoint..." msgstr[1] "Trans feridos %d de %d trackpoints..." #: ../src/vikgpslayer.c:927 #, c-format msgid "Downloaded %d out of %d routepoint..." msgid_plural "Downloaded %d out of %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:932 #, c-format msgid "Uploaded %d out of %d waypoint..." msgid_plural "Uploaded %d out of %d waypoints..." msgstr[0] "Uploaded %d de %d waypoint..." msgstr[1] "Uploaded %d de %d waypoints..." #: ../src/vikgpslayer.c:933 #, c-format msgid "Uploaded %d out of %d trackpoint..." msgid_plural "Uploaded %d out of %d trackpoints..." msgstr[0] "Uploaded %d de %d trackpoint..." msgstr[1] "Uploaded %d de %d trackpoints..." #: ../src/vikgpslayer.c:934 #, c-format msgid "Uploaded %d out of %d routepoint..." msgid_plural "Uploaded %d out of %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:942 #, c-format msgid "Downloaded %d waypoint" msgid_plural "Downloaded %d waypoints" msgstr[0] "Transferido %d waypoint" msgstr[1] "Transferidos %d waypoints" #: ../src/vikgpslayer.c:943 #, c-format msgid "Downloaded %d trackpoint" msgid_plural "Downloaded %d trackpoints" msgstr[0] "Transferido %d trackpoint" msgstr[1] "Transferidos %d trackpoints" #: ../src/vikgpslayer.c:944 #, c-format msgid "Downloaded %d routepoint" msgid_plural "Downloaded %d routepoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:949 #, c-format msgid "Uploaded %d waypoint" msgid_plural "Uploaded %d waypoints" msgstr[0] "Uploaded %d waypoint" msgstr[1] "Uploaded %d waypoints" #: ../src/vikgpslayer.c:950 #, c-format msgid "Uploaded %d trackpoint" msgid_plural "Uploaded %d trackpoints" msgstr[0] "Uploaded %d trackpoint" msgstr[1] "Uploaded %d trackpoints" #: ../src/vikgpslayer.c:951 #, c-format msgid "Uploaded %d routepoint" msgid_plural "Uploaded %d routepoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:1180 msgid "Error: couldn't find gpsbabel." msgstr "Erro: Não foi possível encontrar o gpsbabel." #: ../src/vikgpslayer.c:1269 msgid "Warning - GPS Upload items may overwrite each other" msgstr "" #: ../src/vikgpslayer.c:1301 msgid "Status: detecting gpsbabel" msgstr "Estado: detectando gpsbabel" #: ../src/vikgpslayer.c:1332 msgid "No GPS items selected for transfer." msgstr "" #: ../src/vikgpslayer.c:1347 msgid "Could not turn off device." msgstr "" #: ../src/vikgpslayer.c:1385 msgid "Are you sure you want to delete GPS Upload data?" msgstr "" #: ../src/vikgpslayer.c:1398 msgid "Are you sure you want to delete GPS Download data?" msgstr "" #: ../src/vikgpslayer.c:1412 msgid "Are you sure you want to delete GPS Realtime data?" msgstr "" #: ../src/vikgpslayer.c:1425 msgid "Are you sure you want to delete All GPS data?" msgstr "" #: ../src/viklayerspanel.c:55 msgid "/C_ut" msgstr "/C_ut" #: ../src/viklayerspanel.c:56 msgid "/_Copy" msgstr "/_Copiar" #: ../src/viklayerspanel.c:57 msgid "/_Paste" msgstr "/_Colar" #: ../src/viklayerspanel.c:58 msgid "/_Delete" msgstr "/_Excluir" #: ../src/viklayerspanel.c:59 msgid "/New Layer" msgstr "/Nova Camada" #: ../src/viklayerspanel.c:127 msgid "Top Layer" msgstr "Camada Top" #: ../src/viklayerspanel.c:143 msgid "Add new layer" msgstr "Adicionar nova camada" #: ../src/viklayerspanel.c:150 msgid "Remove selected layer" msgstr "Remover camada selecionada" #: ../src/viklayerspanel.c:157 msgid "Move selected layer up" msgstr "Mover camada selecionada para cima" #: ../src/viklayerspanel.c:164 msgid "Move selected layer down" msgstr "Mover camada selecionada para baixo" #: ../src/viklayerspanel.c:171 msgid "Cut selected layer" msgstr "Cortar camada selecionada" #: ../src/viklayerspanel.c:178 msgid "Copy selected layer" msgstr "Copiar camada selecionada" #: ../src/viklayerspanel.c:185 msgid "Paste layer below selected layer" msgstr "Colar camada abaixo da camada selecionada" #. TODO: FIXME: if name has a '/' in it it will get all messed up. why not have an itemfactory field with #. name, icon, shortcut, etc.? #: ../src/viklayerspanel.c:204 ../src/vikwindow.c:3292 #, c-format msgid "New _%s Layer" msgstr "" #: ../src/viklayerspanel.c:511 msgid "Aggregate Layers have no settable properties." msgstr "Camadas De agregação possuem propriedades configuráveis​​." #: ../src/viklayerspanel.c:555 msgid "You cannot cut the Top Layer." msgstr "Você não pode cortar a camada superior." #: ../src/viklayerspanel.c:600 #, c-format msgid "Are you sure you want to delete %s?" msgstr "" #: ../src/viklayerspanel.c:617 msgid "You cannot delete the Top Layer." msgstr "Você não pode excluir a camada superior." #: ../src/viklayerspanel.c:701 msgid "Are you sure you wish to delete all layers?" msgstr "Tem certeza que deseja apagar todas as camadas?" #. ******* MAPZOOMS ******** #: ../src/vikmapslayer.c:91 msgid "Use Viking Zoom Level" msgstr "Usar Nível de Zoom de Viking" #: ../src/vikmapslayer.c:124 msgid "Map Type:" msgstr "Tipo do Mapa:" #: ../src/vikmapslayer.c:125 msgid "Maps Directory:" msgstr "Lista de Mapas:" #: ../src/vikmapslayer.c:126 msgid "Alpha:" msgstr "Alfa:" #: ../src/vikmapslayer.c:127 msgid "Control the Alpha value for transparency effects" msgstr "" #: ../src/vikmapslayer.c:128 msgid "Autodownload maps:" msgstr "Baixar Mapas Automaticamente :" #: ../src/vikmapslayer.c:129 msgid "Autodownload Only Gets Missing Maps:" msgstr "" #: ../src/vikmapslayer.c:130 msgid "" "Using this option avoids attempting to update already acquired tiles. This " "can be useful if you want to restrict the network usage, without having to " "resort to manual control. Only applies when 'Autodownload Maps' is on." msgstr "" #: ../src/vikmapslayer.c:131 msgid "Zoom Level:" msgstr "Nível de Zoom:" #: ../src/vikmapslayer.c:132 msgid "" "Determines the method of displaying map tiles for the current zoom level. " "'Viking Zoom Level' uses the best matching level, otherwise setting a fixed " "value will always use map tiles of the specified value regardless of the " "actual zoom level." msgstr "" #: ../src/vikmapslayer.c:146 msgid "_Maps Download" msgstr "" #: ../src/vikmapslayer.c:146 msgid "Maps Download" msgstr "Baixar Mapas" #: ../src/vikmapslayer.c:161 msgid "Map" msgstr "Mapa" #: ../src/vikmapslayer.c:249 msgid "Default maplayer directory:" msgstr "Diretório padrão maplayer:" #: ../src/vikmapslayer.c:249 msgid "Choose a directory to store cached Map tiles for this layer" msgstr "" #: ../src/vikmapslayer.c:505 msgid "Unknown map type" msgstr "Tipo de mapa desconhecido" #: ../src/vikmapslayer.c:516 msgid "Unknown Map Zoom" msgstr "Mapa Zoom Desconhecido" #: ../src/vikmapslayer.c:589 #, c-format msgid "" "New map cannot be displayed in the current drawmode.\n" "Select \"%s\" from View menu to view it." msgstr "" "Novo mapa não pode ser exibido no DrawMode atual.\n" "Selecione \"%s\" no menu Exibir para visualizá-lo." #: ../src/vikmapslayer.c:753 #, c-format msgid "" "Cowardly refusing to draw tiles or existence of tiles beyond %d zoom out " "factor" msgstr "" "Recusando a tirar as telhas ou a existência de telhas além zoom factor %d" #: ../src/vikmapslayer.c:1157 #, c-format msgid "Redownloading up to %d %s map..." msgid_plural "Redownloading up to %d %s maps..." msgstr[0] "Baixar novamente até %d%s mapa..." msgstr[1] "Baixar novamente até %d%s mapas..." #: ../src/vikmapslayer.c:1159 #, c-format msgid "Redownloading %d %s map..." msgid_plural "Redownloading %d %s maps..." msgstr[0] "Baixar novamente %d%s mapa..." msgstr[1] "Baixar novamente %d%s mapas..." #: ../src/vikmapslayer.c:1163 ../src/vikmapslayer.c:1238 #, c-format msgid "Downloading %d %s map..." msgid_plural "Downloading %d %s maps..." msgstr[0] "Baixando %d%s mapa..." msgstr[1] "Baixando %d%s mapas..." #: ../src/vikmapslayer.c:1311 #, c-format msgid "" "\n" "Source: %s\n" "\n" "Tile File: %s\n" "Tile File Timestamp: %s" msgstr "" #: ../src/vikmapslayer.c:1318 #, c-format msgid "" "Source: %s\n" "\n" "No Tile File!" msgstr "" #: ../src/vikmapslayer.c:1356 msgid "Redownload _Bad Map(s)" msgstr "Fazer novo download de Mapa _Bad(s)" #: ../src/vikmapslayer.c:1360 msgid "Redownload _New Map(s)" msgstr "Fazer novo download de Novo (s) _Mapa(s)" #: ../src/vikmapslayer.c:1364 msgid "Redownload _All Map(s)" msgstr "Fazer novo download de _Todos os _Mapa(s)" #: ../src/vikmapslayer.c:1368 msgid "_Show Tile Information" msgstr "" #: ../src/vikmapslayer.c:1449 #, c-format msgid "" "Wrong drawmode for this map.\n" "Select \"%s\" from View menu and try again." msgstr "" "DrawMode errado para este mapa.\n" "Selecione \"%s\", no menu Exibir e tente novamente." #: ../src/vikmapslayer.c:1454 msgid "Wrong zoom level for this map." msgstr "Nível de zoom errado para este mapa." #. Now with icons #: ../src/vikmapslayer.c:1485 msgid "Download _Missing Onscreen Maps" msgstr "Baixar _Mapas Que Faltam na Tela" #: ../src/vikmapslayer.c:1492 msgid "Download _New Onscreen Maps" msgstr "Baixar Novo(s) _Mapas na Tela" #: ../src/vikmapslayer.c:1499 msgid "Reload _All Onscreen Maps" msgstr "Atualizar _Todos os Mapas na Tela" #: ../src/viktreeview.c:263 msgid "Layer Name" msgstr "Nome da Camada" #: ../src/viktreeview.c:742 #, c-format msgid "delete data from %s\n" msgstr "excluir dados de %s\n" #: ../src/viktrwlayer.c:377 msgid "Create _Waypoint" msgstr "" #: ../src/viktrwlayer.c:377 msgid "Create Waypoint" msgstr "Criar Waypoint" #: ../src/viktrwlayer.c:383 msgid "Create _Track" msgstr "" #: ../src/viktrwlayer.c:383 msgid "Create Track" msgstr "Criar Track" #: ../src/viktrwlayer.c:392 msgid "Create _Route" msgstr "" #: ../src/viktrwlayer.c:392 msgid "Create Route" msgstr "" #: ../src/viktrwlayer.c:401 msgid "_Edit Waypoint" msgstr "" #: ../src/viktrwlayer.c:401 msgid "Edit Waypoint" msgstr "Editar Waypoint" #: ../src/viktrwlayer.c:409 msgid "Edit Trac_kpoint" msgstr "" #: ../src/viktrwlayer.c:409 msgid "Edit Trackpoint" msgstr "Editar Trackpoint" #: ../src/viktrwlayer.c:417 msgid "Show P_icture" msgstr "" #: ../src/viktrwlayer.c:417 msgid "Show Picture" msgstr "Mostrar Imagem" #: ../src/viktrwlayer.c:424 msgid "Route _Finder" msgstr "" #: ../src/viktrwlayer.c:424 msgid "Route Finder" msgstr "" #. ***** PARAMETERS ***** #: ../src/viktrwlayer.c:447 ../src/viktrwlayer.c:1942 #: ../src/viktrwlayer.c:1944 msgid "Waypoints" msgstr "Waypoints" #: ../src/viktrwlayer.c:447 ../src/viktrwlayer.c:1933 #: ../src/viktrwlayer.c:1935 msgid "Tracks" msgstr "Faixas" #: ../src/viktrwlayer.c:447 msgid "Waypoint Images" msgstr "Imagens Waypoint" #: ../src/viktrwlayer.c:450 msgid "Draw by Track" msgstr "Empate por Faixa" #: ../src/viktrwlayer.c:450 msgid "Draw by Speed" msgstr "" #: ../src/viktrwlayer.c:450 msgid "All Tracks Same Color" msgstr "" #: ../src/viktrwlayer.c:451 msgid "Filled Square" msgstr "Quadrado Preenchido" #: ../src/viktrwlayer.c:451 msgid "Square" msgstr "Quadrado" #: ../src/viktrwlayer.c:451 msgid "Circle" msgstr "Círculo" #: ../src/viktrwlayer.c:451 msgid "X" msgstr "X" #: ../src/viktrwlayer.c:477 msgid "Extra Extra Small" msgstr "" #: ../src/viktrwlayer.c:478 msgid "Extra Small" msgstr "" #: ../src/viktrwlayer.c:479 msgid "Small" msgstr "" #: ../src/viktrwlayer.c:480 msgid "Medium" msgstr "" #: ../src/viktrwlayer.c:481 msgid "Large" msgstr "" #: ../src/viktrwlayer.c:482 msgid "Extra Large" msgstr "" #: ../src/viktrwlayer.c:483 msgid "Extra Extra Large" msgstr "" #: ../src/viktrwlayer.c:491 msgid "Track Drawing Mode:" msgstr "Modo Faixa de Desenho:" #: ../src/viktrwlayer.c:492 msgid "All Tracks Color:" msgstr "" #: ../src/viktrwlayer.c:493 msgid "The color used when 'All Tracks Same Color' drawing mode is selected" msgstr "" #: ../src/viktrwlayer.c:494 msgid "Draw Track Lines" msgstr "Desenhar Trajetórias de Busca" #: ../src/viktrwlayer.c:495 msgid "Track Thickness:" msgstr "Espessura da Faixa:" #: ../src/viktrwlayer.c:496 msgid "Draw Track Direction" msgstr "" #: ../src/viktrwlayer.c:497 msgid "Direction Size:" msgstr "" #: ../src/viktrwlayer.c:498 msgid "Draw Trackpoints" msgstr "Desenhar Trilhas" #: ../src/viktrwlayer.c:499 msgid "Trackpoint Size:" msgstr "" #: ../src/viktrwlayer.c:500 msgid "Draw Elevation" msgstr "Desenhar Elevação" #: ../src/viktrwlayer.c:501 msgid "Draw Elevation Height %:" msgstr "Desenhar Altura de Elevação" #: ../src/viktrwlayer.c:503 msgid "Draw Stops" msgstr "Desenhar Paradas" #: ../src/viktrwlayer.c:504 msgid "" "Whether to draw a marker when trackpoints are at the same position but over " "the minimum stop length apart in time" msgstr "" #: ../src/viktrwlayer.c:505 msgid "Min Stop Length (seconds):" msgstr "Parar Duração de Minutos (segundos):" #: ../src/viktrwlayer.c:507 msgid "Track BG Thickness:" msgstr "Faixa Espessura BG:" #: ../src/viktrwlayer.c:508 msgid "Track Background Color" msgstr "Cor de Fundo da Faixa" #: ../src/viktrwlayer.c:509 msgid "Draw by Speed Factor (%):" msgstr "" #: ../src/viktrwlayer.c:510 msgid "" "The percentage factor away from the average speed determining the color used" msgstr "" #: ../src/viktrwlayer.c:512 msgid "Draw Labels" msgstr "Desenhar Marcadores" #: ../src/viktrwlayer.c:513 msgid "Waypoint Font Size:" msgstr "" #: ../src/viktrwlayer.c:514 msgid "Waypoint Color:" msgstr "Cor do Waypoint:" #: ../src/viktrwlayer.c:515 msgid "Waypoint Text:" msgstr "Texto dos Waypoints:" #: ../src/viktrwlayer.c:516 msgid "Background:" msgstr "Segundo plano:" #: ../src/viktrwlayer.c:517 msgid "Fake BG Color Translucency:" msgstr "Falsos translucidez da cor de BG:" #: ../src/viktrwlayer.c:518 msgid "Waypoint marker:" msgstr "Marcador do Waypoint:" #: ../src/viktrwlayer.c:519 msgid "Waypoint size:" msgstr "Tamanho do Waypoint:" #: ../src/viktrwlayer.c:520 msgid "Draw Waypoint Symbols:" msgstr "Desenhar Símbolos do Waypoint:" #: ../src/viktrwlayer.c:522 msgid "Draw Waypoint Images" msgstr "Desenhar Imagens do Waypoint:" #: ../src/viktrwlayer.c:523 msgid "Image Size (pixels):" msgstr "Tamanho da Imagem (pixels):" #: ../src/viktrwlayer.c:524 msgid "Image Alpha:" msgstr "Imagem Alpha:" #: ../src/viktrwlayer.c:525 msgid "Image Memory Cache Size:" msgstr "Imagem de Tamanho do Cache de Memória:" #: ../src/viktrwlayer.c:610 msgid "TrackWaypoint" msgstr "" #: ../src/viktrwlayer.c:1951 ../src/viktrwlayer.c:1953 msgid "Routes" msgstr "" #: ../src/viktrwlayer.c:2144 #, c-format msgid " in %d:%02d hrs:mins" msgstr " em %d:%02d hrs:mins" #: ../src/viktrwlayer.c:2148 #, c-format msgid "" "\n" "%sTotal Length %.1f %s%s" msgstr "" "\n" "%sComprimento Total %.1f %s%s" #: ../src/viktrwlayer.c:2154 #, c-format msgid "Tracks: %d - Waypoints: %d - Routes: %d%s" msgstr "" #: ../src/viktrwlayer.c:2174 #, c-format msgid "Tracks: %d" msgstr "" #: ../src/viktrwlayer.c:2184 #, c-format msgid "Routes: %d" msgstr "" #: ../src/viktrwlayer.c:2215 #, c-format msgid "- %d:%02d hrs:mins" msgstr "- %d:%02d hrs:mins" #: ../src/viktrwlayer.c:2223 #, c-format msgid "%s%.1f km %s" msgstr "%s%.1f km %s" #: ../src/viktrwlayer.c:2226 #, c-format msgid "%s%.1f miles %s" msgstr "%s%.1f milhas %s" #: ../src/viktrwlayer.c:2240 #, c-format msgid "Waypoints: %d" msgstr "" #: ../src/viktrwlayer.c:2266 #, c-format msgid "Trkpt: Alt %dft" msgstr "" #. VIK_UNITS_HEIGHT_METRES: #: ../src/viktrwlayer.c:2270 #, c-format msgid "Trkpt: Alt %dm" msgstr "" #. Compact date time format #: ../src/viktrwlayer.c:2277 #, c-format msgid " | Time %x %X" msgstr "" #: ../src/viktrwlayer.c:2295 #, c-format msgid " | Track: %s" msgstr "" #. Combine parts to make overall message #: ../src/viktrwlayer.c:2299 #, c-format msgid "%s%s | %s %s %s" msgstr "" #: ../src/viktrwlayer.c:2314 #, c-format msgid "Wpt: Alt %dft" msgstr "" #. VIK_UNITS_HEIGHT_METRES: #: ../src/viktrwlayer.c:2318 #, c-format msgid "Wpt: Alt %dm" msgstr "" #. Add comment if available #: ../src/viktrwlayer.c:2333 #, c-format msgid "%s | %s %s | Comment: %s" msgstr "" #: ../src/viktrwlayer.c:2335 #, c-format msgid "%s | %s %s" msgstr "" #: ../src/viktrwlayer.c:2563 ../src/viktrwlayer.c:2634 msgid "This layer has no waypoints or trackpoints." msgstr "Essa camada não tem waypoints ou trackpoints." #: ../src/viktrwlayer.c:2661 ../src/vikwindow.c:2407 ../src/vikwindow.c:2848 #, c-format msgid "The file \"%s\" exists, do you wish to overwrite it?" msgstr "O arquivo \"%s\" já existe, deseja substituí-lo?" #: ../src/viktrwlayer.c:2671 ../src/vikwindow.c:2429 msgid "The filename you requested could not be opened for writing." msgstr "O nome do arquivo solicitado não pôde ser aberto para escrita." #: ../src/viktrwlayer.c:2676 ../src/viktrwlayer.c:2681 #: ../src/viktrwlayer.c:2691 ../src/viktrwlayer.c:2703 msgid "Export Layer" msgstr "Exportar Camada" #: ../src/viktrwlayer.c:2720 msgid "Could not create temporary file for export." msgstr "" #: ../src/viktrwlayer.c:2729 #, c-format msgid "Could not launch %s." msgstr "" #: ../src/viktrwlayer.c:2773 msgid "Export Track as GPX" msgstr "Exportar Faixa como GPX" #: ../src/viktrwlayer.c:2795 msgid "Find" msgstr "Buscar" #: ../src/viktrwlayer.c:2805 msgid "Waypoint Name:" msgstr "Nome de Waypoint:" #: ../src/viktrwlayer.c:2822 msgid "Waypoint not found in this layer." msgstr "Waypoint não encontrado nesta camada." #: ../src/viktrwlayer.c:3090 msgid "Can not upload invisible track." msgstr "" #: ../src/viktrwlayer.c:3192 ../src/viktrwlayer.c:7785 msgid "Track" msgstr "Faixa" #: ../src/viktrwlayer.c:3215 ../src/viktrwlayer.c:7817 msgid "Route" msgstr "" #: ../src/viktrwlayer.c:3296 ../src/viktrwlayer.c:6265 #: ../src/viktrwlayer.c:6314 msgid "_Finish Route" msgstr "" #: ../src/viktrwlayer.c:3298 ../src/viktrwlayer.c:6223 #: ../src/viktrwlayer.c:6312 msgid "_Finish Track" msgstr "" #. Now with icons #: ../src/viktrwlayer.c:3310 msgid "_View Layer" msgstr "_Ver Camada" #: ../src/viktrwlayer.c:3317 msgid "V_iew" msgstr "" #: ../src/viktrwlayer.c:3323 msgid "View All _Tracks" msgstr "" #: ../src/viktrwlayer.c:3328 msgid "View All _Routes" msgstr "" #: ../src/viktrwlayer.c:3333 msgid "View All _Waypoints" msgstr "" #: ../src/viktrwlayer.c:3338 msgid "_Goto Center of Layer" msgstr "Centro de Camada Goto" #: ../src/viktrwlayer.c:3344 ../src/viktrwlayer.c:6199 msgid "Goto _Waypoint..." msgstr "" #: ../src/viktrwlayer.c:3350 msgid "_Export Layer" msgstr "_Exportar Camada" #: ../src/viktrwlayer.c:3356 msgid "Export as GPS_Point..." msgstr "" #: ../src/viktrwlayer.c:3361 msgid "Export as GPS_Mapper..." msgstr "" #: ../src/viktrwlayer.c:3366 msgid "Export as _GPX..." msgstr "" #: ../src/viktrwlayer.c:3371 msgid "Export as _KML..." msgstr "" #: ../src/viktrwlayer.c:3376 msgid "Open with External Program_1: " msgstr "" #: ../src/viktrwlayer.c:3383 msgid "Open with External Program_2: " msgstr "" #: ../src/viktrwlayer.c:3391 ../src/vikwindow.c:3145 msgid "_New" msgstr "_Novo" #: ../src/viktrwlayer.c:3397 msgid "New _Waypoint..." msgstr "" #: ../src/viktrwlayer.c:3403 msgid "New _Track" msgstr "" #: ../src/viktrwlayer.c:3411 msgid "New _Route" msgstr "" #: ../src/viktrwlayer.c:3420 ../src/viktrwlayer.c:6597 msgid "Geotag _Images..." msgstr "" #: ../src/viktrwlayer.c:3427 msgid "_Acquire" msgstr "" #: ../src/viktrwlayer.c:3433 ../src/vikwindow.c:3150 msgid "From _GPS..." msgstr "De_GPS..." #: ../src/viktrwlayer.c:3439 msgid "From Google _Directions..." msgstr "" #: ../src/viktrwlayer.c:3446 msgid "From _OSM Traces..." msgstr "" #: ../src/viktrwlayer.c:3451 msgid "From _My OSM Traces..." msgstr "" #: ../src/viktrwlayer.c:3459 ../src/vikwindow.c:3166 msgid "From _Wikipedia Waypoints" msgstr "" #: ../src/viktrwlayer.c:3465 msgid "Within _Layer Bounds" msgstr "Dentro dos Limites da _Camada" #: ../src/viktrwlayer.c:3471 msgid "Within _Current View" msgstr "Dentro do_Modo de Exibição Atual" #: ../src/viktrwlayer.c:3479 msgid "From Geo_caching..." msgstr "" #: ../src/viktrwlayer.c:3486 ../src/vikwindow.c:3163 msgid "From Geotagged _Images..." msgstr "" #: ../src/viktrwlayer.c:3492 msgid "From _File..." msgstr "" #: ../src/viktrwlayer.c:3498 ../src/viktrwlayer.c:6542 msgid "_Upload" msgstr "" #: ../src/viktrwlayer.c:3504 msgid "Upload to _GPS..." msgstr "" #: ../src/viktrwlayer.c:3511 ../src/viktrwlayer.c:6570 msgid "Upload to _OSM..." msgstr "" #: ../src/viktrwlayer.c:3519 msgid "De_lete" msgstr "" #: ../src/viktrwlayer.c:3525 msgid "Delete All _Tracks" msgstr "" #: ../src/viktrwlayer.c:3531 msgid "Delete Tracks _From Selection..." msgstr "" #: ../src/viktrwlayer.c:3537 ../src/viktrwlayer.c:6290 msgid "Delete _All Routes" msgstr "" #: ../src/viktrwlayer.c:3543 ../src/viktrwlayer.c:6296 msgid "_Delete Routes From Selection..." msgstr "" #: ../src/viktrwlayer.c:3549 msgid "Delete All _Waypoints" msgstr "" #: ../src/viktrwlayer.c:3555 msgid "Delete Waypoints From _Selection..." msgstr "" #: ../src/viktrwlayer.c:4128 #, c-format msgid "Are you sure you want to delete all tracks in %s?" msgstr "" #: ../src/viktrwlayer.c:4138 #, c-format msgid "Are you sure you want to delete all routes in %s?" msgstr "" #: ../src/viktrwlayer.c:4148 #, c-format msgid "Are you sure you want to delete all waypoints in %s?" msgstr "" #: ../src/viktrwlayer.c:4165 #, c-format msgid "Are you sure you want to delete the waypoint \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4178 #, c-format msgid "Are you sure you want to delete the track \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4191 #, c-format msgid "Are you sure you want to delete the route \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4351 ../src/viktrwlayer.c:4922 msgid "" "Converting a track to a route removes extra track data such as segments, " "timestamps, etc...\n" "Do you want to continue?" msgstr "" #: ../src/viktrwlayer.c:4711 msgid "Failed. No other tracks with timestamps in this layer found" msgstr "" #: ../src/viktrwlayer.c:4713 msgid "Failed. No other tracks without timestamps in this layer found" msgstr "" #: ../src/viktrwlayer.c:4732 msgid "Merge with..." msgstr "Mesclar com..." #: ../src/viktrwlayer.c:4733 msgid "Select route to merge with" msgstr "" #: ../src/viktrwlayer.c:4733 msgid "Select track to merge with" msgstr "Selecionar a faixa de fusão com a" #: ../src/viktrwlayer.c:4818 ../src/viktrwlayer.c:4895 msgid "Append Route" msgstr "" #: ../src/viktrwlayer.c:4818 ../src/viktrwlayer.c:4895 msgid "Append Track" msgstr "" #: ../src/viktrwlayer.c:4819 msgid "Select the route to append after the current route" msgstr "" #: ../src/viktrwlayer.c:4820 msgid "Select the track to append after the current track" msgstr "" #: ../src/viktrwlayer.c:4896 msgid "Select the track to append after the current route" msgstr "" #: ../src/viktrwlayer.c:4897 msgid "Select the route to append after the current track" msgstr "" #: ../src/viktrwlayer.c:4957 #, c-format msgid "%d segment merged" msgid_plural "%d segments merged" msgstr[0] "" msgstr[1] "" #: ../src/viktrwlayer.c:4973 msgid "Failed. This track does not have timestamp" msgstr "Falhou. Esta faixa não tem hora" #: ../src/viktrwlayer.c:4985 msgid "Failed. No other track in this layer has timestamp" msgstr "Falhou. Nenhuma uma outra faixa nesta camada tem hora" #: ../src/viktrwlayer.c:4992 msgid "Merge Threshold..." msgstr "Limite de Mesclagem ..." #: ../src/viktrwlayer.c:4993 msgid "Merge when time between tracks less than:" msgstr "Mesclar quando o tempo entre as faixas for inferior a:" #: ../src/viktrwlayer.c:5128 msgid "Split Threshold..." msgstr "Dividir Limite ..." #: ../src/viktrwlayer.c:5129 msgid "Split when time between trackpoints exceeds:" msgstr "Dividir, quando o tempo entre os trackpoints exceder:" #: ../src/viktrwlayer.c:5205 msgid "Split Every Nth Point" msgstr "Cada ponto de divisão Nth" #: ../src/viktrwlayer.c:5206 msgid "Split on every Nth point:" msgstr "Dividir em todos os pontos Nth:" #: ../src/viktrwlayer.c:5312 msgid "Can not split track as it has no segments" msgstr "" #: ../src/viktrwlayer.c:5340 ../src/viktrwlayer.c:5370 #, c-format msgid "Deleted %ld point" msgid_plural "Deleted %ld points" msgstr[0] "" msgstr[1] "" #: ../src/viktrwlayer.c:5531 msgid "Internal Error in vik_trw_layer_uniquify_tracks" msgstr "" #: ../src/viktrwlayer.c:5588 ../src/viktrwlayer.c:5635 #: ../src/viktrwlayer.c:5814 msgid "" "Multiple entries with the same name exist. This method only works with " "unique names. Force unique names now?" msgstr "" #: ../src/viktrwlayer.c:5599 msgid "No tracks found" msgstr "" #: ../src/viktrwlayer.c:5607 ../src/viktrwlayer.c:5654 #: ../src/viktrwlayer.c:5834 msgid "Delete Selection" msgstr "" #: ../src/viktrwlayer.c:5608 msgid "Select tracks to delete" msgstr "" #: ../src/viktrwlayer.c:5646 msgid "No routes found" msgstr "" #: ../src/viktrwlayer.c:5655 msgid "Select routes to delete" msgstr "" #: ../src/viktrwlayer.c:5761 msgid "Internal Error in vik_trw_layer_uniquify_waypoints" msgstr "" #: ../src/viktrwlayer.c:5824 msgid "No waypoints found" msgstr "" #: ../src/viktrwlayer.c:5835 msgid "Select waypoints to delete" msgstr "" #: ../src/viktrwlayer.c:5896 #, c-format msgid "" "A waypoint with the name \"%s\" already exists. Really rename to the same " "name?" msgstr "" #: ../src/viktrwlayer.c:5926 #, c-format msgid "" "A track with the name \"%s\" already exists. Really rename to the same name?" msgstr "" #: ../src/viktrwlayer.c:5963 #, c-format msgid "" "A route with the name \"%s\" already exists. Really rename to the same name?" msgstr "" #: ../src/viktrwlayer.c:6085 ../src/viktrwlayer.c:6337 msgid "_Goto" msgstr "_Goto" #: ../src/viktrwlayer.c:6104 msgid "_Visit Geocache Webpage" msgstr "_Visite Geocache Webpage" #: ../src/viktrwlayer.c:6123 msgid "_Show Picture..." msgstr "" #: ../src/viktrwlayer.c:6131 msgid "Update Geotag on _Image" msgstr "" #: ../src/viktrwlayer.c:6137 msgid "_Update" msgstr "" #: ../src/viktrwlayer.c:6142 msgid "Update and _Keep File Timestamp" msgstr "" #: ../src/viktrwlayer.c:6153 msgid "Visit _Webpage" msgstr "" #: ../src/viktrwlayer.c:6184 msgid "_New Waypoint..." msgstr "" #: ../src/viktrwlayer.c:6193 msgid "_View All Waypoints" msgstr "" #: ../src/viktrwlayer.c:6205 msgid "Delete _All Waypoints" msgstr "" #: ../src/viktrwlayer.c:6211 msgid "_Delete Waypoints From Selection..." msgstr "" #: ../src/viktrwlayer.c:6233 msgid "_View All Tracks" msgstr "" #: ../src/viktrwlayer.c:6239 msgid "_New Track" msgstr "" #: ../src/viktrwlayer.c:6247 msgid "Delete _All Tracks" msgstr "" #: ../src/viktrwlayer.c:6253 msgid "_Delete Tracks From Selection..." msgstr "" #: ../src/viktrwlayer.c:6276 msgid "_View All Routes" msgstr "" #: ../src/viktrwlayer.c:6282 msgid "_New Route" msgstr "" #: ../src/viktrwlayer.c:6327 msgid "_View Track" msgstr "_Visualização de faixa" #: ../src/viktrwlayer.c:6329 msgid "_View Route" msgstr "" #: ../src/viktrwlayer.c:6343 msgid "_Startpoint" msgstr "_Ponto inicial" #: ../src/viktrwlayer.c:6349 msgid "\"_Center\"" msgstr "\"_Centro\"" #: ../src/viktrwlayer.c:6355 msgid "_Endpoint" msgstr "_Ponto final" #: ../src/viktrwlayer.c:6361 msgid "_Highest Altitude" msgstr "_Maior altitude" #: ../src/viktrwlayer.c:6367 msgid "_Lowest Altitude" msgstr "_Menor altitude" #: ../src/viktrwlayer.c:6375 msgid "_Maximum Speed" msgstr "_Velocidade máxima" #: ../src/viktrwlayer.c:6384 msgid "Co_mbine" msgstr "" #: ../src/viktrwlayer.c:6392 msgid "_Merge By Time..." msgstr "" #: ../src/viktrwlayer.c:6397 msgid "Merge _Segments" msgstr "" #: ../src/viktrwlayer.c:6403 msgid "Merge _With Other Tracks..." msgstr "Mesclar _Com Outras Faixas ..." #: ../src/viktrwlayer.c:6409 msgid "_Append Track..." msgstr "" #: ../src/viktrwlayer.c:6411 msgid "_Append Route..." msgstr "" #: ../src/viktrwlayer.c:6417 msgid "Append _Route..." msgstr "" #: ../src/viktrwlayer.c:6419 msgid "Append _Track..." msgstr "" #: ../src/viktrwlayer.c:6426 msgid "_Split" msgstr "" #: ../src/viktrwlayer.c:6434 msgid "_Split By Time..." msgstr "" #. ATM always enable this entry - don't want to have to analyse the track before displaying the menu - to keep the menu speedy #: ../src/viktrwlayer.c:6440 msgid "Split Se_gments" msgstr "" #: ../src/viktrwlayer.c:6446 msgid "Split By _Number of Points..." msgstr "" #: ../src/viktrwlayer.c:6451 msgid "Split at _Trackpoint" msgstr "" #: ../src/viktrwlayer.c:6460 msgid "Delete Poi_nts" msgstr "" #: ../src/viktrwlayer.c:6466 msgid "Delete Points With The Same _Position" msgstr "" #: ../src/viktrwlayer.c:6471 msgid "Delete Points With The Same _Time" msgstr "" #: ../src/viktrwlayer.c:6477 msgid "_Reverse Track" msgstr "" #: ../src/viktrwlayer.c:6479 msgid "_Reverse Route" msgstr "" #: ../src/viktrwlayer.c:6488 msgid "Down_load Maps Along Track..." msgstr "Mapas Trajetórias Down_load ..." #: ../src/viktrwlayer.c:6490 msgid "Down_load Maps Along Route..." msgstr "" #: ../src/viktrwlayer.c:6497 msgid "_Apply DEM Data" msgstr "Aplicar dados DEM" #: ../src/viktrwlayer.c:6504 msgid "_Export Track as GPX..." msgstr "" #: ../src/viktrwlayer.c:6506 msgid "_Export Route as GPX..." msgstr "" #: ../src/viktrwlayer.c:6513 msgid "E_xtend Track End" msgstr "Final E_xtendido de Faixa" #: ../src/viktrwlayer.c:6515 msgid "E_xtend Route End" msgstr "" #: ../src/viktrwlayer.c:6522 msgid "C_onvert to a Route" msgstr "" #: ../src/viktrwlayer.c:6524 msgid "C_onvert to a Track" msgstr "" #: ../src/viktrwlayer.c:6532 msgid "Extend _Using Route Finder" msgstr "" #: ../src/viktrwlayer.c:6548 msgid "_Upload to GPS..." msgstr "" #: ../src/viktrwlayer.c:6559 msgid "_View Google Directions" msgstr "_Exibir direções Google" #: ../src/viktrwlayer.c:6579 msgid "Use with _Filter" msgstr "Utilizar com _Filtro" #: ../src/viktrwlayer.c:6612 msgid "_Edit Trackpoint" msgstr "" #: ../src/viktrwlayer.c:7524 #, c-format msgid " - Gain %dm:Loss %dm" msgstr "" #: ../src/viktrwlayer.c:7526 #, c-format msgid " - Gain %dft:Loss %dft" msgstr "" #: ../src/viktrwlayer.c:7531 #, c-format msgid " - Bearing %3.1f° - Step %s" msgstr "" #: ../src/viktrwlayer.c:8124 #, c-format msgid "Could not launch %s to open file." msgstr "" #: ../src/viktrwlayer.c:8205 #, c-format msgid "Creating %d Image Thumbnails..." msgstr "Criação de Miniaturas de Imagem %d..." #: ../src/viktrwlayer.c:8524 msgid "No map layer in use. Create one first" msgstr "Mapa em uso sem camada. Criar uma primeiro" #: ../src/viktrwlayer_propwin.c:898 ../src/viktrwlayer_propwin.c:1155 #, c-format msgid "%.1f kph" msgstr "" #: ../src/viktrwlayer_propwin.c:901 ../src/viktrwlayer_propwin.c:1158 #, c-format msgid "%.1f mph" msgstr "" #: ../src/viktrwlayer_propwin.c:904 ../src/viktrwlayer_propwin.c:1161 #, c-format msgid "%.1f knots" msgstr "" #. VIK_UNITS_SPEED_METRES_PER_SECOND: #: ../src/viktrwlayer_propwin.c:908 ../src/viktrwlayer_propwin.c:1165 #, c-format msgid "%.1f m/s" msgstr "" #: ../src/viktrwlayer_propwin.c:1745 #, c-format msgid "%.1f miles" msgstr "" #: ../src/viktrwlayer_propwin.c:1747 #, c-format msgid "%.1f km" msgstr "" #: ../src/viktrwlayer_propwin.c:2681 msgid "Failed spliting track. Track unchanged" msgstr "Desmembramento da Faixa falhou. Faixa inalterada" #: ../src/viktrwlayer_propwin.c:2779 ../src/viktrwlayer_propwin.c:3178 #, c-format msgid "%s - Track Properties" msgstr "Propriedades da Faixa - %s" #: ../src/viktrwlayer_propwin.c:2784 msgid "Split at _Marker" msgstr "" #: ../src/viktrwlayer_propwin.c:2785 msgid "Split _Segments" msgstr "" #: ../src/viktrwlayer_propwin.c:2786 msgid "_Reverse" msgstr "" #: ../src/viktrwlayer_propwin.c:2787 msgid "_Delete Dupl." msgstr "" #: ../src/viktrwlayer_propwin.c:2813 msgid "Comment:" msgstr "Comentário:" #: ../src/viktrwlayer_propwin.c:2814 msgid "Description:" msgstr "" #: ../src/viktrwlayer_propwin.c:2815 msgid "Track Length:" msgstr " Duração da Trilha " #: ../src/viktrwlayer_propwin.c:2816 msgid "Trackpoints:" msgstr "Trackpoints:" #: ../src/viktrwlayer_propwin.c:2817 msgid "Segments:" msgstr "Segmentos:" #: ../src/viktrwlayer_propwin.c:2818 msgid "Duplicate Points:" msgstr "Pontos Duplicados:" #: ../src/viktrwlayer_propwin.c:2819 msgid "Max Speed:" msgstr "Velocidade Máxima:" #: ../src/viktrwlayer_propwin.c:2820 msgid "Avg. Speed:" msgstr "Velocidade Média:" #: ../src/viktrwlayer_propwin.c:2821 msgid "Moving Avg. Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:2822 msgid "Avg. Dist. Between TPs:" msgstr "Avg. Dist. Entre TPs:" #: ../src/viktrwlayer_propwin.c:2823 msgid "Elevation Range:" msgstr "Faixa de Elevação::" #: ../src/viktrwlayer_propwin.c:2824 msgid "Total Elevation Gain/Loss:" msgstr "Elevação Total Ganho/Prejuízo" #: ../src/viktrwlayer_propwin.c:2825 msgid "Start:" msgstr "Início:" #: ../src/viktrwlayer_propwin.c:2826 msgid "End:" msgstr "Fim:" #: ../src/viktrwlayer_propwin.c:2827 msgid "Duration:" msgstr "Duração:" #: ../src/viktrwlayer_propwin.c:2828 msgid "Color:" msgstr "" #: ../src/viktrwlayer_propwin.c:2877 ../src/viktrwlayer_propwin.c:2901 #: ../src/viktrwlayer_propwin.c:2929 ../src/viktrwlayer_propwin.c:2966 #: ../src/viktrwlayer_propwin.c:2984 ../src/viktrwlayer_propwin.c:3034 #: ../src/viktrwlayer_propwin.c:3035 ../src/viktrwlayer_propwin.c:3036 #: ../src/viktrwlayer_propwin.c:3062 ../src/viktrwlayer_propwin.c:3063 #: ../src/viktrwlayer_propwin.c:3078 ../src/viktrwlayer_propwin.c:3079 #: ../src/viktrwlayer_propwin.c:3092 ../src/viktrwlayer_propwin.c:3093 #: ../src/viktrwlayer_propwin.c:3106 ../src/viktrwlayer_propwin.c:3107 #: ../src/viktrwlayer_propwin.c:3120 ../src/viktrwlayer_propwin.c:3121 #: ../src/viktrwlayer_propwin.c:3134 ../src/viktrwlayer_propwin.c:3135 #, c-format msgid "No Data" msgstr "Sem Dados" #: ../src/viktrwlayer_propwin.c:3031 #, c-format msgid "%d minutes" msgstr "%d minutos" #: ../src/viktrwlayer_propwin.c:3058 msgid "Statistics" msgstr "Estatísticas" #: ../src/viktrwlayer_propwin.c:3064 msgid "Show D_EM" msgstr "" #: ../src/viktrwlayer_propwin.c:3065 ../src/viktrwlayer_propwin.c:3080 #: ../src/viktrwlayer_propwin.c:3094 ../src/viktrwlayer_propwin.c:3136 msgid "Show _GPS Speed" msgstr "" #: ../src/viktrwlayer_propwin.c:3067 ../src/viktrwlayer_propwin.c:3082 #: ../src/viktrwlayer_propwin.c:3110 ../src/viktrwlayer_propwin.c:3138 msgid "Track Distance:" msgstr "Distância da Trilha:" #: ../src/viktrwlayer_propwin.c:3068 ../src/viktrwlayer_propwin.c:3125 msgid "Track Height:" msgstr "" #: ../src/viktrwlayer_propwin.c:3073 msgid "Elevation-distance" msgstr "Elevação da distância" #: ../src/viktrwlayer_propwin.c:3083 msgid "Track Gradient:" msgstr "" #: ../src/viktrwlayer_propwin.c:3087 msgid "Gradient-distance" msgstr "" #: ../src/viktrwlayer_propwin.c:3096 ../src/viktrwlayer_propwin.c:3111 #: ../src/viktrwlayer_propwin.c:3124 msgid "Track Time:" msgstr "Tempo da Trilha::" #: ../src/viktrwlayer_propwin.c:3097 ../src/viktrwlayer_propwin.c:3139 msgid "Track Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:3101 msgid "Speed-time" msgstr "Velocidade em tempo" #: ../src/viktrwlayer_propwin.c:3108 ../src/viktrwlayer_propwin.c:3122 msgid "Show S_peed" msgstr "" #: ../src/viktrwlayer_propwin.c:3115 msgid "Distance-time" msgstr "" #: ../src/viktrwlayer_propwin.c:3129 msgid "Elevation-time" msgstr "" #: ../src/viktrwlayer_propwin.c:3143 msgid "Speed-distance" msgstr "" #: ../src/viktrwlayer_tpwin.c:118 msgid "Part of Track:" msgstr "Parte da Trilha" #: ../src/viktrwlayer_tpwin.c:119 msgid "Latitude:" msgstr "Latitude:" #: ../src/viktrwlayer_tpwin.c:120 msgid "Longitude:" msgstr "Longitude:" #: ../src/viktrwlayer_tpwin.c:121 msgid "Altitude:" msgstr "Altitude:" #: ../src/viktrwlayer_tpwin.c:122 msgid "Timestamp:" msgstr "Carimbo de hora:" #: ../src/viktrwlayer_tpwin.c:123 msgid "Time:" msgstr "Tempo:" #: ../src/viktrwlayer_tpwin.c:124 msgid "Distance Difference:" msgstr "Diferença da Distância:" #: ../src/viktrwlayer_tpwin.c:125 msgid "Time Difference:" msgstr "Diferença de Tempo:" #: ../src/viktrwlayer_tpwin.c:126 msgid "\"Speed\" Between:" msgstr "\"Speed\" Entre:" #: ../src/viktrwlayer_tpwin.c:127 msgid "VDOP:" msgstr "VDOP:" #: ../src/viktrwlayer_tpwin.c:128 msgid "HDOP:" msgstr "HDOP:" #: ../src/viktrwlayer_tpwin.c:129 msgid "PDOP:" msgstr "PDOP:" #: ../src/viktrwlayer_tpwin.c:130 msgid "SAT/FIX:" msgstr "SAT/FIX:" #: ../src/viktrwlayer_tpwin.c:139 msgid "Trackpoint" msgstr "Trackpoint" #: ../src/viktrwlayer_tpwin.c:142 msgid "_Insert After" msgstr "_Inserir Depois" #: ../src/viktrwlayer_tpwin.c:144 msgid "Split Here" msgstr "Dividir Aqui" #: ../src/viktrwlayer_geotag.c:446 #, c-format msgid "Geotagging %d Images..." msgstr "" #: ../src/viktrwlayer_geotag.c:510 msgid "Geotag Images" msgstr "" #: ../src/viktrwlayer_geotag.c:516 msgid "Images" msgstr "" #: ../src/viktrwlayer_geotag.c:520 msgid "Overwrite Existing Waypoints:" msgstr "" #: ../src/viktrwlayer_geotag.c:523 msgid "Overwrite Existing GPS Information:" msgstr "" #: ../src/viktrwlayer_geotag.c:525 msgid "Keep File Modification Timestamp:" msgstr "" #: ../src/viktrwlayer_geotag.c:555 msgid "Create Waypoints:" msgstr "" #: ../src/viktrwlayer_geotag.c:563 msgid "Write EXIF:" msgstr "" #: ../src/viktrwlayer_geotag.c:575 msgid "Interpolate Between Track Segments:" msgstr "" #: ../src/viktrwlayer_geotag.c:579 msgid "Image Time Offset (Seconds):" msgstr "" #: ../src/viktrwlayer_geotag.c:581 msgid "" "The number of seconds to ADD to the photos time to make it match the GPS " "data. Calculate this with (GPS - Photo). Can be negative or positive. Useful " "to adjust times when a camera's timestamp was incorrect." msgstr "" #: ../src/viktrwlayer_geotag.c:584 msgid "Image Timezone:" msgstr "" #: ../src/viktrwlayer_geotag.c:586 msgid "" "The timezone that was used when the images were created. For example, if a " "camera is set to AWST or +8:00 hours. Enter +8:00 here so that the correct " "adjustment to the images' time can be made. GPS data is always in UTC." msgstr "" #: ../src/viktrwlayer_geotag.c:590 #, c-format msgid "Using track: %s" msgstr "" #: ../src/viktrwlayer_geotag.c:592 #, c-format msgid "Using all tracks in: %s" msgstr "" #: ../src/vikstatus.c:105 msgid "Current zoom level. Click to select a new one." msgstr "" #: ../src/vikwaypoint.c:34 msgid "Waypoint" msgstr "" #. TODO get rid of this as this is unnecessary duplication... #: ../src/vikwindow.c:221 msgid "Pan" msgstr "Pan" #: ../src/vikwindow.c:221 msgid "Zoom" msgstr "Ampliar" #: ../src/vikwindow.c:221 msgid "Ruler" msgstr "Régua" #: ../src/vikwindow.c:221 msgid "Select" msgstr "" #. Create tooltip #: ../src/vikwindow.c:440 msgid "Select zoom level" msgstr "" #: ../src/vikwindow.c:645 #, c-format msgid "" "Do you want to save the changes you made to the document \"%s\"?\n" "\n" "Your changes will be lost if you don't save them." msgstr "" "Você deseja salvar as alterações feitas no documento \"%s\"?\n" "\n" "Suas alterações serão perdidas se você não salvá-las." #: ../src/vikwindow.c:649 msgid "Don't Save" msgstr "Não Salvar" #: ../src/vikwindow.c:696 msgid "mpp" msgstr "mpp" #: ../src/vikwindow.c:696 msgid "pixelfact" msgstr "pixelfact" #: ../src/vikwindow.c:861 #, c-format msgid "%s %s %dm" msgstr "%s %s %dm" #: ../src/vikwindow.c:863 #, c-format msgid "%s %s %dft" msgstr "%s %s %dft" #: ../src/vikwindow.c:866 #, c-format msgid "%s %s" msgstr "%s %s" #. NB Ctrl+Shift+R is used for Refresh (deemed more important), so use 'U' instead #: ../src/vikwindow.c:1254 msgid "_Ruler" msgstr "" #: ../src/vikwindow.c:1254 msgid "Ruler Tool" msgstr "Ferramenta Régua" #: ../src/vikwindow.c:1502 ../src/vikwindow.c:3138 msgid "_Zoom" msgstr "_Zoom" #: ../src/vikwindow.c:1502 msgid "Zoom Tool" msgstr "" #: ../src/vikwindow.c:1547 ../src/vikwindow.c:3139 msgid "_Pan" msgstr "_Panela" #: ../src/vikwindow.c:1547 msgid "Pan Tool" msgstr "" #: ../src/vikwindow.c:1664 msgid "_Select" msgstr "" #: ../src/vikwindow.c:1664 msgid "Select Tool" msgstr "" #: ../src/vikwindow.c:1809 msgid "You must select a layer to show its properties." msgstr "Você deve selecionar uma camada para mostrar suas propriedades." #. No error to show, so unlikely this will get called #: ../src/vikwindow.c:1824 msgid "The help system is not available." msgstr "" #. Main error path #: ../src/vikwindow.c:1827 #, c-format msgid "" "Help is not available because: %s.\n" "Ensure a Mime Type ghelp handler program is installed (e.g. yelp)." msgstr "" #: ../src/vikwindow.c:1850 msgid "You must select a layer to delete." msgstr "Você deve selecionar uma camada para excluir." #: ../src/vikwindow.c:2087 msgid "Untitled" msgstr "Sem Título" #: ../src/vikwindow.c:2194 #, c-format msgid "Unable to add '%s' to the list of recently used documents" msgstr "" "Não é possível adicionar \"%s\" para a lista de documentos usados " "​​recentemente" #: ../src/vikwindow.c:2208 msgid "The file you requested could not be opened." msgstr "O arquivo solicitado não pôde ser aberto." #: ../src/vikwindow.c:2211 msgid "" "GPSBabel is required to load files of this type or GPSBabel encountered " "problems." msgstr "" #: ../src/vikwindow.c:2214 #, c-format msgid "Unable to load malformed GPX file %s" msgstr "" #: ../src/vikwindow.c:2217 #, c-format msgid "Unsupported file type for %s" msgstr "" #. Since we can process .vik files with issues just show a warning in the status bar #. Not that a user can do much about it... or tells them what this issue is yet... #: ../src/vikwindow.c:2223 #, c-format msgid "WARNING: issues encountered loading %s" msgstr "" #: ../src/vikwindow.c:2278 msgid "Please select a GPS data file to open. " msgstr "Por favor selecione um arquivo de dados GPS para abrir. " #: ../src/vikwindow.c:2288 msgid "Geocaching" msgstr "" #: ../src/vikwindow.c:2294 msgid "Google Earth" msgstr "" #: ../src/vikwindow.c:2299 msgid "GPX" msgstr "" #: ../src/vikwindow.c:2304 ../src/vikwindow.c:2387 #: ../src/viking.desktop.in.h:1 msgid "Viking" msgstr "Viking" #: ../src/vikwindow.c:2374 msgid "Save as Viking File." msgstr "Salvar como Arquivo Viking." #. Try harder... #: ../src/vikwindow.c:2619 ../src/vikwindow.c:2625 msgid "Generating image file..." msgstr "" #: ../src/vikwindow.c:2647 msgid "" "Failed to generate internal image.\n" "\n" "Try creating a smaller image." msgstr "" #: ../src/vikwindow.c:2655 msgid "Failed to generate image file." msgstr "" #. Success #: ../src/vikwindow.c:2660 msgid "Image file generated." msgstr "" #: ../src/vikwindow.c:2764 msgid "" "Viewable region outside allowable pixel size bounds for image. Clipping " "width/height values." msgstr "" "Região visível fora dos limites admissíveis do tamanho do pixel de imagem. " "Largura de recorte valores/altura." #: ../src/vikwindow.c:2789 #, c-format msgid "Total area: %ldm x %ldm (%.3f sq. km)" msgstr "Área total: %ldm x %ldm (%.3f sq. km)" #: ../src/vikwindow.c:2792 #, c-format msgid "Total area: %ldm x %ldm (%.3f sq. miles)" msgstr "Área total: %ldm x %ldm (%.3f milhas quadrados)" #: ../src/vikwindow.c:2813 msgid "Save Image" msgstr "Salvar Imagem" #: ../src/vikwindow.c:2834 msgid "PNG" msgstr "" #: ../src/vikwindow.c:2857 msgid "You must be in UTM mode to use this feature" msgstr "Você deve estar no modo UTM para usar este recurso" #: ../src/vikwindow.c:2862 msgid "Choose a directory to hold images" msgstr "Escolha um diretório para armazenar as imagens" #. todo: default for answers inside VikWindow or static (thruout instance) #: ../src/vikwindow.c:2883 msgid "Save to Image File" msgstr "Salvar como Arquivo de Imagem." #: ../src/vikwindow.c:2900 msgid "Width (pixels):" msgstr "Largura (pixels):" #: ../src/vikwindow.c:2902 msgid "Height (pixels):" msgstr "Altura (pixels):" #: ../src/vikwindow.c:2905 msgid "" "WARNING: USING LARGE IMAGES OVER 10000x10000\n" "MAY CRASH THE PROGRAM!" msgstr "" #: ../src/vikwindow.c:2907 msgid "Zoom (meters per pixel):" msgstr "Zoom (metros por pixel):" #: ../src/vikwindow.c:2921 msgid "Area in current viewable window" msgstr "Área visível na janela atual" #: ../src/vikwindow.c:2931 msgid "Save as PNG" msgstr "Salvar como PNG" #: ../src/vikwindow.c:2932 msgid "Save as JPEG" msgstr "Salvar como JPEG" #: ../src/vikwindow.c:2954 msgid "East-west image tiles:" msgstr "Imagem telhas Leste-Oeste:" #: ../src/vikwindow.c:2956 msgid "North-south image tiles:" msgstr "Telhas de imagem Norte-Sul:" #: ../src/vikwindow.c:3097 msgid "Choose a background color" msgstr "Escolha uma cor de fundo" #: ../src/vikwindow.c:3113 msgid "Choose a track highlight color" msgstr "" #: ../src/vikwindow.c:3134 msgid "_File" msgstr "_Arquivo" #: ../src/vikwindow.c:3135 msgid "_Edit" msgstr "_Editar" #: ../src/vikwindow.c:3136 msgid "_View" msgstr "_Exibir" #: ../src/vikwindow.c:3137 msgid "_Show" msgstr "_Mostrar" #: ../src/vikwindow.c:3140 msgid "_Layers" msgstr "_Camadas" #: ../src/vikwindow.c:3141 msgid "_Tools" msgstr "_Ferramentas" #: ../src/vikwindow.c:3142 msgid "_Webtools" msgstr "_Ferramentas da Web" #: ../src/vikwindow.c:3143 ../src/vikwindow.c:3206 msgid "_Help" msgstr "_Ajuda" #: ../src/vikwindow.c:3145 msgid "New file" msgstr "Novo arquivo" #: ../src/vikwindow.c:3146 msgid "_Open..." msgstr "_Abrir..." #: ../src/vikwindow.c:3146 msgid "Open a file" msgstr "Abrir um arquivo" #: ../src/vikwindow.c:3147 msgid "Open _Recent File" msgstr "Abrir_ Arquivo Recente" #: ../src/vikwindow.c:3148 msgid "Append _File..." msgstr "Anexar _Arquivo ..." #: ../src/vikwindow.c:3148 msgid "Append data from a different file" msgstr "Acrescentar dados de um arquivo diferente" #: ../src/vikwindow.c:3149 msgid "A_cquire" msgstr "A_dquirir" #: ../src/vikwindow.c:3150 msgid "Transfer data from a GPS device" msgstr "Transferir de dados de um dispositivo GPS." #: ../src/vikwindow.c:3151 msgid "Import File With GPS_Babel..." msgstr "" #: ../src/vikwindow.c:3151 msgid "Import file via GPSBabel converter" msgstr "" #: ../src/vikwindow.c:3153 msgid "Google _Directions..." msgstr "Direcões_Google ..." #: ../src/vikwindow.c:3153 msgid "Get driving directions from Google" msgstr "Obter direcções de Google" #: ../src/vikwindow.c:3156 msgid "_OSM Traces..." msgstr "" #: ../src/vikwindow.c:3156 msgid "Get traces from OpenStreetMap" msgstr "" #: ../src/vikwindow.c:3157 msgid "_My OSM Traces..." msgstr "" #: ../src/vikwindow.c:3157 msgid "Get Your Own Traces from OpenStreetMap" msgstr "" #: ../src/vikwindow.c:3160 msgid "Geo_caches..." msgstr "Geo_caches..." #: ../src/vikwindow.c:3160 msgid "Get Geocaches from geocaching.com" msgstr "Obter Geocaches de geocaching.com" #: ../src/vikwindow.c:3163 msgid "Create waypoints from geotagged images" msgstr "" #: ../src/vikwindow.c:3166 msgid "Create waypoints from Wikipedia items in the current view" msgstr "" #: ../src/vikwindow.c:3168 msgid "_Save" msgstr "_Salvar" #: ../src/vikwindow.c:3168 msgid "Save the file" msgstr "Salve o arquivo" #: ../src/vikwindow.c:3169 msgid "Save _As..." msgstr "Salvar _Como..." #: ../src/vikwindow.c:3169 msgid "Save the file under different name" msgstr "Salve o arquivo com nome diferente" #: ../src/vikwindow.c:3170 msgid "_Generate Image File..." msgstr "_Gerar arquivo de imagem..." #: ../src/vikwindow.c:3170 msgid "Save a snapshot of the workspace into a file" msgstr "Salvar um snapshot da área de trabalho em um arquivo" #: ../src/vikwindow.c:3171 msgid "Generate _Directory of Images..." msgstr "Gerar _Lista de imagens..." #: ../src/vikwindow.c:3171 msgid "FIXME:IMGDIR" msgstr "FIXME:IMGDIR" #: ../src/vikwindow.c:3174 msgid "_Print..." msgstr "_Imprimir..." #: ../src/vikwindow.c:3174 msgid "Print maps" msgstr "Imprimir mapas" #: ../src/vikwindow.c:3177 msgid "E_xit" msgstr "S_air" #: ../src/vikwindow.c:3177 msgid "Exit the program" msgstr "Sair do programa" #: ../src/vikwindow.c:3178 msgid "Save and Exit" msgstr "Salvar e Sair" #: ../src/vikwindow.c:3178 msgid "Save and Exit the program" msgstr "Salvar e Sair do programa" #: ../src/vikwindow.c:3180 msgid "Go to the _Default Location" msgstr "Ir para o Local _Padrão" #: ../src/vikwindow.c:3180 msgid "Go to the default location" msgstr "Ir para o local padrão" #: ../src/vikwindow.c:3181 msgid "Go to _Location..." msgstr "Ir para _Local..." #: ../src/vikwindow.c:3181 msgid "Go to address/place using text search" msgstr "Ir para endereço/local usando a pesquisa de texto" #: ../src/vikwindow.c:3182 msgid "_Go to Lat/Lon..." msgstr "_Ir para Latitude/Longevitude..." #: ../src/vikwindow.c:3182 msgid "Go to arbitrary lat/lon coordinate" msgstr "Ir para latitude arbitrária/longitude coordenadas" #: ../src/vikwindow.c:3183 msgid "Go to UTM..." msgstr "Ir para UTM..." #: ../src/vikwindow.c:3183 msgid "Go to arbitrary UTM coordinate" msgstr "Ir para UTM arbitrário de coordenadas" #: ../src/vikwindow.c:3184 msgid "_Refresh" msgstr "" #: ../src/vikwindow.c:3184 msgid "Refresh any maps displayed" msgstr "" #: ../src/vikwindow.c:3185 msgid "Set _Highlight Color..." msgstr "" #: ../src/vikwindow.c:3186 msgid "Set Bac_kground Color..." msgstr "Definir cor _de fundo..." #: ../src/vikwindow.c:3187 msgid "Zoom _In" msgstr "_Ampliar" #: ../src/vikwindow.c:3188 msgid "Zoom _Out" msgstr "_Reduzir" #: ../src/vikwindow.c:3189 msgid "Zoom _To..." msgstr "_ Zoom para..." #: ../src/vikwindow.c:3190 msgid "Pan _North" msgstr "" #: ../src/vikwindow.c:3191 msgid "Pan _East" msgstr "" #: ../src/vikwindow.c:3192 msgid "Pan _South" msgstr "" #: ../src/vikwindow.c:3193 msgid "Pan _West" msgstr "" #: ../src/vikwindow.c:3194 msgid "Background _Jobs" msgstr "" #: ../src/vikwindow.c:3196 msgid "Cu_t" msgstr "" #: ../src/vikwindow.c:3197 msgid "_Copy" msgstr "" #: ../src/vikwindow.c:3198 msgid "_Paste" msgstr "" #: ../src/vikwindow.c:3199 msgid "_Delete" msgstr "" #: ../src/vikwindow.c:3200 msgid "Delete All" msgstr "Excluir tudo" #: ../src/vikwindow.c:3201 msgid "_Flush Map Cache" msgstr "" #: ../src/vikwindow.c:3202 msgid "_Set the Default Location" msgstr "" #: ../src/vikwindow.c:3202 msgid "Set the Default Location to the current position" msgstr "" #: ../src/vikwindow.c:3203 msgid "_Preferences" msgstr "" #: ../src/vikwindow.c:3204 msgid "_Properties" msgstr "" #: ../src/vikwindow.c:3207 msgid "_About" msgstr "" #: ../src/vikwindow.c:3213 msgid "_UTM Mode" msgstr "" #: ../src/vikwindow.c:3214 msgid "_Expedia Mode" msgstr "" #: ../src/vikwindow.c:3215 msgid "_Mercator Mode" msgstr "" #: ../src/vikwindow.c:3216 msgid "Lat_/Lon Mode" msgstr "" #: ../src/vikwindow.c:3220 msgid "Show _Scale" msgstr "" #: ../src/vikwindow.c:3220 msgid "Show Scale" msgstr "Mostrar Escala" #: ../src/vikwindow.c:3221 msgid "Show _Center Mark" msgstr "" #: ../src/vikwindow.c:3221 msgid "Show Center Mark" msgstr "" #: ../src/vikwindow.c:3222 msgid "Show _Highlight" msgstr "" #: ../src/vikwindow.c:3222 msgid "Show Highlight" msgstr "" #: ../src/vikwindow.c:3223 msgid "_Full Screen" msgstr "Во весь экран" #: ../src/vikwindow.c:3223 msgid "Activate full screen mode" msgstr "" #: ../src/vikwindow.c:3224 msgid "Show Side _Panel" msgstr "" #: ../src/vikwindow.c:3224 msgid "Show Side Panel" msgstr "Mostrar Painel Lateral" #: ../src/vikwindow.c:3225 msgid "Show Status_bar" msgstr "" #: ../src/vikwindow.c:3225 msgid "Show Statusbar" msgstr "" #: ../src/vikwindow.c:3226 msgid "Show _Toolbar" msgstr "" #: ../src/vikwindow.c:3226 msgid "Show Toolbar" msgstr "" #: ../src/vikwindow.c:3227 msgid "Show _Menu" msgstr "" #: ../src/vikwindow.c:3227 msgid "Show Menu" msgstr "" #: ../src/viking.desktop.in.h:2 msgid "GPS Data Manager" msgstr "Gerenciador de dados GPS" #: ../src/viking.desktop.in.h:3 msgid "Map Based GPS Data Manager (live data capable)." msgstr "" #: ../src/libjpeg/jpeg-data.c:206 msgid "Data does not follow JPEG specification." msgstr "" #: ../src/libjpeg/jpeg-data.c:291 #, c-format msgid "Path '%s' invalid." msgstr "" #: ../src/libjpeg/jpeg-data.c:309 #, c-format msgid "Could not read '%s'." msgstr "" viking-1.4.2/po/el.po0000644000175000017500000022253012175546146011323 00000000000000# Greek translation for viking # Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008 # This file is distributed under the same license as the viking package. # FIRST AUTHOR , 2008. # msgid "" msgstr "" "Project-Id-Version: viking\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-02-04 23:29+0100\n" "PO-Revision-Date: 2010-11-16 03:07+0000\n" "Last-Translator: Guilhem Bonnefille \n" "Language-Team: Greek \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2013-03-23 17:12+0000\n" "X-Generator: Launchpad (build 16540)\n" "Language: el\n" #: ../src/acquire.c:103 ../src/vikgpslayer.c:1185 msgid "Done." msgstr "Ολοκληρώθηκε." #: ../src/acquire.c:114 msgid "No data." msgstr "Χωρίς δεδομένα" #: ../src/acquire.c:154 ../src/acquire.c:404 msgid "Error: acquisition failed." msgstr "" #: ../src/acquire.c:341 msgid "Working..." msgstr "Εργασία..." #. This shouldn't happen... #: ../src/acquire.c:394 msgid "" "Unable to create command\n" "Acquire method failed." msgstr "" #: ../src/acquire.c:486 msgid "_Filter" msgstr "" #: ../src/acquire.c:501 #, c-format msgid "Filter with %s" msgstr "" #: ../src/acquire.c:518 msgid "Filter" msgstr "" #: ../src/background.c:52 #, c-format msgid "%d items" msgstr "" #: ../src/background.c:248 msgid "Job" msgstr "Εργασία" #: ../src/background.c:252 msgid "Progress" msgstr "Πρόοδος" #: ../src/background.c:268 msgid "Viking Background Jobs" msgstr "" #: ../src/bing.c:47 msgid "Bing" msgstr "" #. VIK_GTK_WINDOW_FROM_WIDGET(vp) #: ../src/bingmapsource.c:445 msgid "Bing attribution Loading" msgstr "" #: ../src/clipboard.c:95 msgid "paste failed" msgstr "η επικόλληση απέτυχε" #: ../src/clipboard.c:105 msgid "wrong clipboard data size" msgstr "" #: ../src/clipboard.c:124 #, c-format msgid "" "The clipboard contains sublayer data for %s layers. You must select a layer " "of this type to paste the clipboard data." msgstr "" #: ../src/clipboard.c:236 msgid "" "In order to paste a waypoint, please select an appropriate layer to paste " "into." msgstr "" #: ../src/dialog.c:52 msgid "Go to Lat/Lon" msgstr "" #: ../src/dialog.c:64 ../src/dialog.c:251 msgid "Latitude:" msgstr "Γεωγραφικό πλάτος:" #: ../src/dialog.c:70 ../src/dialog.c:256 msgid "Longitude:" msgstr "Γεωγραφικό μήκος:" #: ../src/dialog.c:102 msgid "Go to UTM" msgstr "" #: ../src/dialog.c:115 msgid "Northing:" msgstr "" #: ../src/dialog.c:121 msgid "Easting:" msgstr "" #: ../src/dialog.c:128 msgid "Zone:" msgstr "Ζώνη:" #: ../src/dialog.c:131 msgid "Letter:" msgstr "Επιστολή:" #: ../src/dialog.c:199 msgid "Waypoint Properties" msgstr "" #: ../src/dialog.c:233 msgid "Name:" msgstr "Όνομα:" #: ../src/dialog.c:261 msgid "Altitude:" msgstr "Υψόμετρο:" #: ../src/dialog.c:266 msgid "Comment:" msgstr "Σχόλιο:" #: ../src/dialog.c:274 ../src/osm-traces.c:437 msgid "Description:" msgstr "Περιγραφή:" #: ../src/dialog.c:277 msgid "Image:" msgstr "Εικόνα:" #: ../src/dialog.c:282 msgid "Symbol:" msgstr "Σύμβολο:" #: ../src/dialog.c:291 msgid "(none)" msgstr "(κανένα)" #. TODO: other checks (isalpha or whatever ) #: ../src/dialog.c:356 msgid "Please enter a name for the waypoint." msgstr "" #: ../src/dialog.c:529 ../src/geonamessearch.c:243 #: ../src/datasource_osm_my_traces.c:507 msgid "Nothing was selected" msgstr "Δεν επιλέχθηκε τίποτα" #: ../src/dialog.c:537 msgid "Add Route" msgstr "" #: ../src/dialog.c:537 msgid "Add Track" msgstr "Προσθήκη Ίχνους" #: ../src/dialog.c:545 msgid "Route Name:" msgstr "" #: ../src/dialog.c:545 msgid "Track Name:" msgstr "Όνομα Ίχνους" #: ../src/dialog.c:565 msgid "Please enter a name for the track." msgstr "Παρακαλώ εισάγετε ένα όνομα για το ίχνος" #: ../src/dialog.c:623 msgid "Zoom Factors..." msgstr "" #: ../src/dialog.c:637 msgid "Zoom factor (in meters per pixel):" msgstr "" #: ../src/dialog.c:638 msgid "X (easting): " msgstr "" #: ../src/dialog.c:639 msgid "Y (northing): " msgstr "" #: ../src/dialog.c:644 msgid "X and Y zoom factors must be equal" msgstr "" #: ../src/dialog.c:699 msgid "1 min" msgstr "" #: ../src/dialog.c:700 msgid "1 hour" msgstr "1 ώρα" #: ../src/dialog.c:701 msgid "1 day" msgstr "1 ημέρα" #: ../src/dialog.c:702 msgid "Custom (in minutes):" msgstr "" #: ../src/dialog.c:808 msgid "GPS Data and Topo Analyzer, Explorer, and Manager." msgstr "" #: ../src/dialog.c:809 msgid "" "This program is free software; you can redistribute it and/or modify it " "under the terms of the GNU General Public License as published by the Free " "Software Foundation; either version 2 of the License, or (at your option) " "any later version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT " "ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or " "FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for " "more details.\n" "\n" "You should have received a copy of the GNU General Public License along with " "this program; if not, write to the Free Software Foundation, Inc., 59 Temple " "Place, Suite 330, Boston, MA 02111-1307, USA" msgstr "" #: ../src/dialog.c:837 msgid "Translation is coordinated on http://launchpad.net/viking" msgstr "" #: ../src/dialog.c:845 msgid "Download along track" msgstr "" #: ../src/dialog.c:851 msgid "Map type:" msgstr "Τύπος χάρτη:" #: ../src/dialog.c:856 msgid "Zoom level:" msgstr "Επίπεδο εστίασης:" #: ../src/dialog.c:896 #, c-format msgid "The map data is licensed: %s." msgstr "" #: ../src/dialog.c:899 #, c-format msgid "" "The data provided by '%s' are licensed under the following license: " "%s.\n" "Please, read the license before continuing." msgstr "" #: ../src/dialog.c:904 msgid "Open license" msgstr "" #: ../src/expedia.c:53 msgid "Expedia Street Maps" msgstr "Χάρτες Δρόμων Expedia" #: ../src/expedia.c:81 msgid "Invalid expedia altitude" msgstr "" #: ../src/expedia.c:112 #, c-format msgid "" "Couldn't open EXPEDIA image file (right after successful download! Please " "report and delete image file!): %s" msgstr "" #: ../src/expedia.c:125 #, c-format msgid "" "Couldn't save EXPEDIA image file (right after successful download! Please " "report and delete image file!): %s" msgstr "" #. * #. * See http://www.geonames.org/export/wikipedia-webservice.html#wikipediaBoundingBox #. #. Translators may wish to change this setting as appropriate to get Wikipedia articles in that language #: ../src/geonamessearch.c:46 msgid "en" msgstr "" #: ../src/geonamessearch.c:121 msgid "Search" msgstr "Αναζήτηση" #: ../src/geonamessearch.c:123 msgid "No entries found!" msgstr "Δεν βρέθηκαν εγγραφές" #. NB could allow columns to be shifted around by doing this after each new #. gtk_tree_view_column_set_reorderable ( column, TRUE ); #. However I don't think is that useful, so I haven't put it in #: ../src/geonamessearch.c:177 ../src/datasource_osm_my_traces.c:425 msgid "Name" msgstr "" #: ../src/geonamessearch.c:182 msgid "Feature" msgstr "" #: ../src/geonamessearch.c:187 ../src/datasource_osm_my_traces.c:440 msgid "Lat/Lon" msgstr "" #: ../src/geonamessearch.c:269 ../src/googlesearch.c:100 msgid "couldn't map temp file" msgstr "Δεν μπορεί να χαρτογραφηθεί το αρχείο temp" #: ../src/globals.c:44 msgid "Degree format:" msgstr "" #: ../src/globals.c:48 msgid "Distance units:" msgstr "" #: ../src/globals.c:52 msgid "Speed units:" msgstr "" #: ../src/globals.c:56 msgid "Height units:" msgstr "" #: ../src/globals.c:60 msgid "Use large waypoint icons:" msgstr "" #: ../src/globals.c:64 msgid "Default latitude:" msgstr "" #: ../src/globals.c:67 msgid "Default longitude:" msgstr "" #: ../src/globals.c:73 msgid "Alphabetical" msgstr "" #: ../src/globals.c:73 ../src/datasource_osm_my_traces.c:435 msgid "Time" msgstr "" #: ../src/globals.c:76 msgid "KML File Export Units:" msgstr "" #: ../src/globals.c:77 msgid "GPX Track Order:" msgstr "" #: ../src/globals.c:82 msgid "Image Viewer:" msgstr "" #: ../src/globals.c:87 msgid "External GPX Program 1:" msgstr "" #: ../src/globals.c:88 msgid "External GPX Program 2:" msgstr "" #. Defaults for the options are setup here #: ../src/globals.c:96 msgid "General" msgstr "" #. New Tab #: ../src/globals.c:121 msgid "Export/External" msgstr "" #. Webtools #: ../src/google.c:36 msgid "Google" msgstr "" #: ../src/datasource_file.c:59 msgid "Import file with GPSBabel" msgstr "" #: ../src/datasource_file.c:60 msgid "Imported file" msgstr "" #. The file selector #: ../src/datasource_file.c:133 msgid "File:" msgstr "" #: ../src/datasource_file.c:134 msgid "File to import" msgstr "" #: ../src/datasource_file.c:141 msgid "All files" msgstr "" #. The file format selector #: ../src/datasource_file.c:148 msgid "File type:" msgstr "" #: ../src/datasource_file.c:193 #, c-format msgid "using babel args '%s' and file '%s'" msgstr "" #: ../src/datasource_gc.c:66 msgid "Download Geocaches" msgstr "" #: ../src/datasource_gc.c:67 msgid "Geocaching.com Caches" msgstr "" #: ../src/datasource_gc.c:84 msgid "geocaching.com username:" msgstr "geocachiing.com όνομα χρήστη:" #: ../src/datasource_gc.c:85 msgid "geocaching.com password:" msgstr "geocaching.com κωδικός:" #: ../src/datasource_gc.c:126 #, c-format msgid "" "Can't find %s or %s in path! Check that you have installed it correctly." msgstr "" #: ../src/datasource_gc.c:188 msgid "Number geocaches:" msgstr "" #: ../src/datasource_gc.c:190 msgid "Centered around:" msgstr "" #: ../src/datasource_gc.c:226 msgid "Broken input - using some defaults" msgstr "" #: ../src/datasource_geotag.c:51 msgid "Create Waypoints from Geotagged Images" msgstr "" #: ../src/datasource_geotag.c:52 msgid "Geotagged Images" msgstr "" #: ../src/datasource_geotag.c:102 ../src/vikwindow.c:2314 #: ../src/vikwindow.c:2382 ../src/vikwindow.c:2824 msgid "All" msgstr "" #: ../src/datasource_geotag.c:107 ../src/vikwindow.c:2829 msgid "JPG" msgstr "" #: ../src/datasource_geotag.c:165 #, c-format msgid "Unable to create waypoint from %s" msgstr "" #: ../src/datasource_google.c:49 ../src/datasource_google.c:50 msgid "Google Directions" msgstr "" #: ../src/datasource_google.c:77 msgid "From:" msgstr "Από:" #: ../src/datasource_google.c:79 msgid "To:" msgstr "Προς:" #: ../src/datasource_gps.c:57 msgid "Acquire from GPS" msgstr "" #: ../src/datasource_gps.c:58 msgid "Acquired from GPS" msgstr "" #: ../src/datasource_gps.c:221 #, c-format msgid "using cmdline '%s' and file '%s'\n" msgstr "" #: ../src/datasource_gps.c:297 ../src/vikgpslayer.c:884 #, c-format msgid "Downloading %d waypoint..." msgid_plural "Downloading %d waypoints..." msgstr[0] "" msgstr[1] "" #: ../src/datasource_gps.c:298 ../src/vikgpslayer.c:885 #, c-format msgid "Downloading %d trackpoint..." msgid_plural "Downloading %d trackpoints..." msgstr[0] "" msgstr[1] "" #: ../src/datasource_gps.c:303 ../src/vikgpslayer.c:890 #, c-format msgid "Downloading %d routepoint..." msgid_plural "Downloading %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/datasource_gps.c:325 ../src/datasource_gps.c:326 #: ../src/datasource_gps.c:327 #, c-format msgid "Downloaded %d out of %d %s..." msgstr "" #: ../src/datasource_gps.c:331 ../src/datasource_gps.c:332 #: ../src/datasource_gps.c:333 #, c-format msgid "Downloaded %d %s." msgstr "" #: ../src/datasource_gps.c:347 ../src/vikgpslayer.c:968 #, c-format msgid "GPS Device: %s" msgstr "" #: ../src/datasource_gps.c:370 ../src/vikgpslayer.c:1042 #: ../src/vikgpslayer.c:1110 msgid "Status: Working..." msgstr "" #: ../src/datasource_gps.c:469 ../src/vikgpslayer.c:150 msgid "GPS Protocol:" msgstr "Πρωτόκολλο GPS:" #. List now assigned at runtime #: ../src/datasource_gps.c:488 ../src/vikgpslayer.c:151 msgid "Serial Port:" msgstr "Σειριακή Θύρα:" #: ../src/datasource_gps.c:509 msgid "" "Turn Off After Transfer\n" "(Garmin/NAViLink Only)" msgstr "" #: ../src/datasource_gps.c:512 msgid "Tracks:" msgstr "" #: ../src/datasource_gps.c:516 msgid "Routes:" msgstr "" #: ../src/datasource_gps.c:520 msgid "Waypoints:" msgstr "" #: ../src/datasource_gps.c:594 ../src/vikgpslayer.c:1305 msgid "GPS device: N/A" msgstr "" #: ../src/datasource_osm.c:52 ../src/datasource_osm.c:53 msgid "OSM traces" msgstr "" #: ../src/datasource_osm.c:80 msgid "Page number:" msgstr "" #: ../src/datasource_osm_my_traces.c:63 ../src/datasource_osm_my_traces.c:64 msgid "OSM My Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:108 msgid "Username:" msgstr "" #: ../src/datasource_osm_my_traces.c:113 msgid "The email or username used to login to OSM" msgstr "" #: ../src/datasource_osm_my_traces.c:115 ../src/osm-traces.c:413 msgid "Password:" msgstr "Κωδικός:" #: ../src/datasource_osm_my_traces.c:120 msgid "The password used to login to OSM" msgstr "" #: ../src/datasource_osm_my_traces.c:430 msgid "Description" msgstr "" #: ../src/datasource_osm_my_traces.c:445 msgid "Privacy" msgstr "" #: ../src/datasource_osm_my_traces.c:452 msgid "Within Current View" msgstr "" #: ../src/datasource_osm_my_traces.c:518 msgid "GPS Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:520 msgid "None found!" msgstr "" #: ../src/datasource_osm_my_traces.c:629 msgid "My OSM Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:645 #, c-format msgid "Unable to get trace: %s" msgstr "" #: ../src/datasource_wikipedia.c:32 msgid "Create Waypoints from Wikipedia Articles" msgstr "" #: ../src/datasource_wikipedia.c:33 msgid "Wikipedia Waypoints" msgstr "" #: ../src/dem.c:65 ../src/dem.c:79 msgid "Invalid DEM" msgstr "Λανθασμένο DEM" #: ../src/dem.c:121 msgid "Invalid DEM header" msgstr "" #: ../src/dem.c:190 ../src/dem.c:203 msgid "Incorrect DEM Class B record: expected 1" msgstr "" #: ../src/dem.c:360 #, c-format msgid "Couldn't map file %s: %s" msgstr "" #: ../src/download.c:112 msgid "Tile age (s):" msgstr "" #: ../src/download.c:233 #, c-format msgid "Download error: %s" msgstr "" #: ../src/download.c:313 msgid "couldn't open temp file" msgstr "Δεν μπορεί να ανοιχτεί το αρχείο temp" #: ../src/file.c:456 ../src/file.c:461 #, c-format msgid "Draw mode '%s' no more supported" msgstr "" #: ../src/geotag_exif.c:433 msgid "Not enough memory." msgstr "" #: ../src/geotag_exif.c:451 msgid "Setting a value for this tag is unsupported!" msgstr "" #: ../src/geotag_exif.c:470 #, c-format msgid "Too few components specified (need %d, found %d)\n" msgstr "" #: ../src/geotag_exif.c:474 msgid "Numeric value expected\n" msgstr "" #: ../src/geotag_exif.c:482 msgid "This shouldn't happen!" msgstr "" #: ../src/geotag_exif.c:552 msgid "Not yet implemented!" msgstr "" #: ../src/geotag_exif.c:565 msgid "Warning; Too many components specified!" msgstr "" #: ../src/osm-traces.c:73 msgid "Identifiable (public w/ timestamps)" msgstr "" #: ../src/osm-traces.c:74 msgid "Trackable (private w/ timestamps)" msgstr "" #: ../src/osm-traces.c:75 msgid "Public" msgstr "" #: ../src/osm-traces.c:76 msgid "Private" msgstr "" #: ../src/osm-traces.c:93 msgid "OSM username:" msgstr "OSM όνομα χρήστη:" #: ../src/osm-traces.c:94 msgid "OSM password:" msgstr "OSM κωδικός:" #. Preferences #: ../src/osm-traces.c:151 msgid "OpenStreetMap Traces" msgstr "" #: ../src/osm-traces.c:234 #, c-format msgid "failed to upload data: HTTP response is %ld" msgstr "" #: ../src/osm-traces.c:239 #, c-format msgid "curl_easy_getinfo failed: %d" msgstr "" #: ../src/osm-traces.c:244 #, c-format msgid "curl request failed: %s" msgstr "" #: ../src/osm-traces.c:275 #, c-format msgid "failed to open temporary file: %s" msgstr "" #. Success #: ../src/osm-traces.c:328 msgid "Uploaded to OSM" msgstr "" #: ../src/osm-traces.c:332 msgid "FAILED TO UPLOAD DATA TO OSM - CURL PROBLEM" msgstr "" #: ../src/osm-traces.c:335 msgid "FAILED TO UPLOAD DATA TO OSM" msgstr "" #: ../src/osm-traces.c:335 msgid "HTTP response code" msgstr "" #: ../src/osm-traces.c:348 #, c-format msgid "failed to unlink temporary file: %s" msgstr "" #: ../src/osm-traces.c:387 msgid "OSM upload" msgstr "" #: ../src/osm-traces.c:405 msgid "Email:" msgstr "" #: ../src/osm-traces.c:410 msgid "" "The email used as login\n" "Enter the email you use to login into www.openstreetmap.org." msgstr "" #: ../src/osm-traces.c:418 msgid "" "The password used to login\n" "Enter the password you use to login into " "www.openstreetmap.org." msgstr "" #: ../src/osm-traces.c:423 msgid "File's name:" msgstr "Όνομα αρχείου:" #: ../src/osm-traces.c:433 msgid "" "The name of the file on OSM\n" "This is the name of the file created on the server.This is not the " "name of the local file." msgstr "" #: ../src/osm-traces.c:442 msgid "The description of the trace" msgstr "" #: ../src/osm-traces.c:444 msgid "Tags:" msgstr "Ετικέτες:" #: ../src/osm-traces.c:449 msgid "The tags associated to the trace" msgstr "" #: ../src/osm-traces.c:482 #, c-format msgid "Uploading %s to OSM" msgstr "" #: ../src/mapcache.c:61 msgid "Map cache memory size (MB):" msgstr "" #: ../src/print.c:53 msgid "None" msgstr "Κανένα" #: ../src/print.c:54 msgid "Horizontally" msgstr "Οριζόντια" #: ../src/print.c:55 msgid "Vertically" msgstr "Κατακόρυφα" #: ../src/print.c:56 msgid "Both" msgstr "Και τα δύο" #: ../src/print.c:120 msgid "Image Settings" msgstr "Ρυθμίσεις εικόνας" #: ../src/print.c:546 msgid "done" msgstr "ολοκληρώθηκε" #. Page Size #: ../src/print.c:575 msgid "_Adjust Page Size and Orientation" msgstr "" #: ../src/print.c:591 msgid "C_enter:" msgstr "Κ_έντρο" #. ignore page margins #: ../src/print.c:609 msgid "Ignore Page _Margins" msgstr "" #: ../src/print.c:628 msgid "Image S_ize:" msgstr "Μ_έγεθος Εικόνας:" #: ../src/util.c:81 msgid "Could not launch web browser." msgstr "Δεν μπορεί να ανοιχτεί ο περιηγητής." #: ../src/util.c:92 msgid "Could not create new email." msgstr "" #: ../src/vikcoordlayer.c:46 msgid "Color:" msgstr "Χρώμα:" #: ../src/vikcoordlayer.c:47 msgid "Minutes Width:" msgstr "" #: ../src/vikcoordlayer.c:48 msgid "Line Thickness:" msgstr "Πάχος γραμμής:" #: ../src/vikcoordlayer.c:56 msgid "Coordinate" msgstr "" #: ../src/datasource_bfilter.c:46 msgid "Max number of points:" msgstr "Μέγιστος αριθμός σημείων:" #: ../src/datasource_bfilter.c:60 msgid "Simplify All Tracks..." msgstr "" #: ../src/datasource_bfilter.c:61 msgid "Simplified Tracks" msgstr "" #: ../src/datasource_bfilter.c:96 ../src/datasource_bfilter.c:97 msgid "Remove Duplicate Waypoints" msgstr "" #: ../src/datasource_bfilter.c:129 msgid "Waypoints Inside This" msgstr "" #: ../src/datasource_bfilter.c:130 msgid "Polygonized Layer" msgstr "" #: ../src/datasource_bfilter.c:165 msgid "Waypoints Outside This" msgstr "" #: ../src/datasource_bfilter.c:166 msgid "Polygonzied Layer" msgstr "" #: ../src/main.c:89 #, c-format msgid "Ignoring Xlib error: error code %d request code %d\n" msgstr "" #: ../src/main.c:102 msgid "Enable debug output" msgstr "" #: ../src/main.c:103 msgid "Enable verbose output" msgstr "" #: ../src/main.c:104 msgid "Show version" msgstr "Προβολή έκδοσης" #: ../src/osm.c:106 msgid "On Disk OSM Tile Format" msgstr "" #: ../src/osm.c:121 msgid "OSM (view)" msgstr "" #: ../src/osm.c:125 msgid "OSM (edit)" msgstr "" #: ../src/osm.c:129 msgid "OSM (render)" msgstr "" #. Example: http://127.0.0.1:8111/load_and_zoom?left=8.19&right=8.20&top=48.605&bottom=48.590&select=node413602999 #. JOSM or merkaartor must already be running with remote interface enabled #: ../src/osm.c:136 msgid "Local port 8111 (eg JOSM)" msgstr "" #: ../src/preferences.c:285 msgid "Preferences" msgstr "" #: ../src/uibuilder.c:147 msgid "Take care that this password will be stored clearly in a plain file." msgstr "" #: ../src/vikaggregatelayer.c:37 msgid "Aggregate" msgstr "" #: ../src/vikdemlayer.c:101 msgid "Absolute height" msgstr "" #: ../src/vikdemlayer.c:102 msgid "Height gradient" msgstr "" #: ../src/vikdemlayer.c:118 msgid "DEM Files:" msgstr "Αρχεία DEM" #: ../src/vikdemlayer.c:119 msgid "Download Source:" msgstr "" #: ../src/vikdemlayer.c:120 msgid "Min Elev Color:" msgstr "" #: ../src/vikdemlayer.c:121 msgid "Type:" msgstr "Τύπος:" #: ../src/vikdemlayer.c:122 msgid "Min Elev:" msgstr "" #: ../src/vikdemlayer.c:123 msgid "Max Elev:" msgstr "" #: ../src/vikdemlayer.c:134 msgid "_DEM Download" msgstr "" #: ../src/vikdemlayer.c:134 msgid "DEM Download" msgstr "" #: ../src/vikdemlayer.c:188 msgid "DEM" msgstr "" #: ../src/vikdemlayer.c:284 #, c-format msgid "Number of files: %d" msgstr "" #: ../src/vikdemlayer.c:385 msgid "DEM Loading" msgstr "" #: ../src/vikdemlayer.c:889 #, c-format msgid "No SRTM data available for %f, %f" msgstr "" #: ../src/vikdemlayer.c:1149 #, c-format msgid "Downloading DEM %s" msgstr "" #: ../src/vikfileentry.c:68 msgid "Browse..." msgstr "" #: ../src/vikfileentry.c:96 msgid "Choose file" msgstr "Επιλογή αρχείου" #: ../src/vikfilelist.c:48 msgid "Choose file(s)" msgstr "Επιλογή αρχείου(ων)" #: ../src/vikfilelist.c:172 msgid "Add..." msgstr "Προσθήκη..." #: ../src/vikfilelist.c:173 msgid "Delete" msgstr "Διαγραφή" #: ../src/vikgeoreflayer.c:70 msgid "_Georef Move Map" msgstr "" #: ../src/vikgeoreflayer.c:70 msgid "Georef Move Map" msgstr "" #: ../src/vikgeoreflayer.c:77 msgid "Georef Z_oom Tool" msgstr "" #: ../src/vikgeoreflayer.c:77 msgid "Georef Zoom Tool" msgstr "" #: ../src/vikgeoreflayer.c:87 msgid "GeoRef Map" msgstr "" #: ../src/vikgeoreflayer.c:335 ../src/vikmapslayer.c:685 #, c-format msgid "Couldn't open image file: %s" msgstr "" #: ../src/vikgeoreflayer.c:365 msgid "Unexpected end of file reading World file." msgstr "" #: ../src/vikgeoreflayer.c:381 ../src/vikgeoreflayer.c:426 msgid "Choose World file" msgstr "Διαλέξτε αρχείο Κόσμου" #: ../src/vikgeoreflayer.c:394 msgid "The World file you requested could not be opened for reading." msgstr "Το αρχείο Κόσμου που επιλέξατε δεν μπορεί να διαβαστεί." #: ../src/vikgeoreflayer.c:439 msgid "The file you requested could not be opened for writing." msgstr "Το αρχείο που επιλέξατε δεν μπορεί να διαβαστεί." #: ../src/vikgeoreflayer.c:456 ../src/viklayer.c:480 msgid "Layer Properties" msgstr "Ιδιότητες επιπέδου" #: ../src/vikgeoreflayer.c:478 msgid "World File Parameters:" msgstr "" #: ../src/vikgeoreflayer.c:479 msgid "Load From File..." msgstr "" #: ../src/vikgeoreflayer.c:484 msgid "Corner pixel easting:" msgstr "" #: ../src/vikgeoreflayer.c:486 msgid "the UTM \"easting\" value of the upper-right corner pixel of the map" msgstr "" #: ../src/vikgeoreflayer.c:488 msgid "Corner pixel northing:" msgstr "" #: ../src/vikgeoreflayer.c:490 msgid "the UTM \"northing\" value of the upper-right corner pixel of the map" msgstr "" #: ../src/vikgeoreflayer.c:492 msgid "X (easting) scale (mpp): " msgstr "" #: ../src/vikgeoreflayer.c:493 msgid "Y (northing) scale (mpp): " msgstr "" #: ../src/vikgeoreflayer.c:496 msgid "the scale of the map in the X direction (meters per pixel)" msgstr "" #: ../src/vikgeoreflayer.c:498 msgid "the scale of the map in the Y direction (meters per pixel)" msgstr "" #: ../src/vikgeoreflayer.c:500 msgid "Map Image:" msgstr "Εικόνα Χάρτη:" #. Now with icons #: ../src/vikgeoreflayer.c:608 msgid "_Zoom to Fit Map" msgstr "" #: ../src/vikgeoreflayer.c:614 msgid "_Goto Map Center" msgstr "" #: ../src/vikgeoreflayer.c:620 msgid "_Export to World File" msgstr "" #: ../src/vikgoto.c:75 msgid "No goto tool available." msgstr "" #: ../src/vikgoto.c:88 ../src/vikgoto.c:107 msgid "goto" msgstr "Μετάβαση" #: ../src/vikgoto.c:90 msgid "I don't know that place. Do you want another goto?" msgstr "" #: ../src/vikgoto.c:109 msgid "goto provider:" msgstr "" #: ../src/vikgoto.c:124 msgid "Enter address or place name:" msgstr "Εισάγετε διεύθυνση ή όνομα μέρους:" #: ../src/vikgpslayer.c:127 msgid "Data Mode" msgstr "" #: ../src/vikgpslayer.c:129 msgid "Realtime Tracking Mode" msgstr "" #: ../src/vikgpslayer.c:137 msgid "Keep vehicle at center" msgstr "" #: ../src/vikgpslayer.c:138 msgid "Keep vehicle on screen" msgstr "" #: ../src/vikgpslayer.c:139 msgid "Disable" msgstr "" #: ../src/vikgpslayer.c:152 msgid "Download Tracks:" msgstr "" #: ../src/vikgpslayer.c:153 msgid "Upload Tracks:" msgstr "" #: ../src/vikgpslayer.c:154 msgid "Download Routes:" msgstr "" #: ../src/vikgpslayer.c:155 msgid "Upload Routes:" msgstr "" #: ../src/vikgpslayer.c:156 msgid "Download Waypoints:" msgstr "" #: ../src/vikgpslayer.c:157 msgid "Upload Waypoints:" msgstr "" #: ../src/vikgpslayer.c:159 msgid "Recording tracks" msgstr "" #: ../src/vikgpslayer.c:160 msgid "Jump to current position on start" msgstr "" #: ../src/vikgpslayer.c:161 msgid "Moving Map Method:" msgstr "" #: ../src/vikgpslayer.c:162 msgid "Gpsd Host:" msgstr "" #: ../src/vikgpslayer.c:163 msgid "Gpsd Port:" msgstr "Gpsd θύρα:" #: ../src/vikgpslayer.c:164 msgid "Gpsd Retry Interval (seconds):" msgstr "" #: ../src/vikgpslayer.c:179 msgid "GPS" msgstr "" #: ../src/vikgpslayer.c:242 ../src/vikgpslayer.c:1258 msgid "GPS Download" msgstr "" #: ../src/vikgpslayer.c:242 ../src/vikgpslayer.c:1258 #: ../src/viktrwlayer.c:3094 msgid "GPS Upload" msgstr "" #: ../src/vikgpslayer.c:244 msgid "GPS Realtime Tracking" msgstr "" #: ../src/vikgpslayer.c:451 msgid "Unknown GPS Protocol" msgstr "Άγνωστο Πρωτόκολλο GPS" #: ../src/vikgpslayer.c:469 msgid "Unknown serial port device" msgstr "Άγνωστη συσκευή στην σειριακή θύρα" #: ../src/vikgpslayer.c:572 #, c-format msgid "%s: unknown parameter" msgstr "%s: Αγνωστη παράμετρος" #. Now with icons #: ../src/vikgpslayer.c:693 msgid "_Upload to GPS" msgstr "" #: ../src/vikgpslayer.c:699 msgid "Download from _GPS" msgstr "" #: ../src/vikgpslayer.c:720 msgid "Empty _Realtime" msgstr "" #: ../src/vikgpslayer.c:727 msgid "E_mpty Upload" msgstr "" #: ../src/vikgpslayer.c:733 msgid "_Empty Download" msgstr "" #: ../src/vikgpslayer.c:739 msgid "Empty _All" msgstr "" #. #. NB It's not fatal if this gives 2 for example! Hence removal of the g_assert #. This happens when copied GPS layer is deleted (not sure why the number_handlers would be 2) #. I don't think there's any side effects and certainly better than the program just aborting #. #: ../src/vikgpslayer.c:756 #, c-format msgid "Unexpected number of disconnected handlers: %d" msgstr "" #: ../src/vikgpslayer.c:898 #, c-format msgid "Uploading %d waypoint..." msgid_plural "Uploading %d waypoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:899 #, c-format msgid "Uploading %d trackpoint..." msgid_plural "Uploading %d trackpoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:900 #, c-format msgid "Uploading %d routepoint..." msgid_plural "Uploading %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:925 #, c-format msgid "Downloaded %d out of %d waypoint..." msgid_plural "Downloaded %d out of %d waypoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:926 #, c-format msgid "Downloaded %d out of %d trackpoint..." msgid_plural "Downloaded %d out of %d trackpoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:927 #, c-format msgid "Downloaded %d out of %d routepoint..." msgid_plural "Downloaded %d out of %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:932 #, c-format msgid "Uploaded %d out of %d waypoint..." msgid_plural "Uploaded %d out of %d waypoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:933 #, c-format msgid "Uploaded %d out of %d trackpoint..." msgid_plural "Uploaded %d out of %d trackpoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:934 #, c-format msgid "Uploaded %d out of %d routepoint..." msgid_plural "Uploaded %d out of %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:942 #, c-format msgid "Downloaded %d waypoint" msgid_plural "Downloaded %d waypoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:943 #, c-format msgid "Downloaded %d trackpoint" msgid_plural "Downloaded %d trackpoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:944 #, c-format msgid "Downloaded %d routepoint" msgid_plural "Downloaded %d routepoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:949 #, c-format msgid "Uploaded %d waypoint" msgid_plural "Uploaded %d waypoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:950 #, c-format msgid "Uploaded %d trackpoint" msgid_plural "Uploaded %d trackpoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:951 #, c-format msgid "Uploaded %d routepoint" msgid_plural "Uploaded %d routepoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:1180 msgid "Error: couldn't find gpsbabel." msgstr "" #: ../src/vikgpslayer.c:1269 msgid "Warning - GPS Upload items may overwrite each other" msgstr "" #: ../src/vikgpslayer.c:1301 msgid "Status: detecting gpsbabel" msgstr "Κατάσταση: εντοπισμός gpsbabel" #: ../src/vikgpslayer.c:1332 msgid "No GPS items selected for transfer." msgstr "" #: ../src/vikgpslayer.c:1347 msgid "Could not turn off device." msgstr "" #: ../src/vikgpslayer.c:1385 msgid "Are you sure you want to delete GPS Upload data?" msgstr "" #: ../src/vikgpslayer.c:1398 msgid "Are you sure you want to delete GPS Download data?" msgstr "" #: ../src/vikgpslayer.c:1412 msgid "Are you sure you want to delete GPS Realtime data?" msgstr "" #: ../src/vikgpslayer.c:1425 msgid "Are you sure you want to delete All GPS data?" msgstr "" #: ../src/viklayerspanel.c:55 msgid "/C_ut" msgstr "" #: ../src/viklayerspanel.c:56 msgid "/_Copy" msgstr "/_Αντιγραφή" #: ../src/viklayerspanel.c:57 msgid "/_Paste" msgstr "/_Επικόλληση" #: ../src/viklayerspanel.c:58 msgid "/_Delete" msgstr "/_Διαγραφή" #: ../src/viklayerspanel.c:59 msgid "/New Layer" msgstr "" #: ../src/viklayerspanel.c:127 msgid "Top Layer" msgstr "" #: ../src/viklayerspanel.c:143 msgid "Add new layer" msgstr "Προσθήκη νέου επιπέδου" #: ../src/viklayerspanel.c:150 msgid "Remove selected layer" msgstr "Αφαίρεση επιλεγμένου επιπέδου" #: ../src/viklayerspanel.c:157 msgid "Move selected layer up" msgstr "" #: ../src/viklayerspanel.c:164 msgid "Move selected layer down" msgstr "" #: ../src/viklayerspanel.c:171 msgid "Cut selected layer" msgstr "" #: ../src/viklayerspanel.c:178 msgid "Copy selected layer" msgstr "" #: ../src/viklayerspanel.c:185 msgid "Paste layer below selected layer" msgstr "" #. TODO: FIXME: if name has a '/' in it it will get all messed up. why not have an itemfactory field with #. name, icon, shortcut, etc.? #: ../src/viklayerspanel.c:204 ../src/vikwindow.c:3292 #, c-format msgid "New _%s Layer" msgstr "" #: ../src/viklayerspanel.c:511 msgid "Aggregate Layers have no settable properties." msgstr "" #: ../src/viklayerspanel.c:555 msgid "You cannot cut the Top Layer." msgstr "" #: ../src/viklayerspanel.c:600 #, c-format msgid "Are you sure you want to delete %s?" msgstr "" #: ../src/viklayerspanel.c:617 msgid "You cannot delete the Top Layer." msgstr "" #: ../src/viklayerspanel.c:701 msgid "Are you sure you wish to delete all layers?" msgstr "" #. ******* MAPZOOMS ******** #: ../src/vikmapslayer.c:91 msgid "Use Viking Zoom Level" msgstr "" #: ../src/vikmapslayer.c:124 msgid "Map Type:" msgstr "Τύπος Χάρτη:" #: ../src/vikmapslayer.c:125 msgid "Maps Directory:" msgstr "Κατάλογος Χαρτών:" #: ../src/vikmapslayer.c:126 msgid "Alpha:" msgstr "Άλφα:" #: ../src/vikmapslayer.c:127 msgid "Control the Alpha value for transparency effects" msgstr "" #: ../src/vikmapslayer.c:128 msgid "Autodownload maps:" msgstr "" #: ../src/vikmapslayer.c:129 msgid "Autodownload Only Gets Missing Maps:" msgstr "" #: ../src/vikmapslayer.c:130 msgid "" "Using this option avoids attempting to update already acquired tiles. This " "can be useful if you want to restrict the network usage, without having to " "resort to manual control. Only applies when 'Autodownload Maps' is on." msgstr "" #: ../src/vikmapslayer.c:131 msgid "Zoom Level:" msgstr "" #: ../src/vikmapslayer.c:132 msgid "" "Determines the method of displaying map tiles for the current zoom level. " "'Viking Zoom Level' uses the best matching level, otherwise setting a fixed " "value will always use map tiles of the specified value regardless of the " "actual zoom level." msgstr "" #: ../src/vikmapslayer.c:146 msgid "_Maps Download" msgstr "" #: ../src/vikmapslayer.c:146 msgid "Maps Download" msgstr "" #: ../src/vikmapslayer.c:161 msgid "Map" msgstr "Χάρτης" #: ../src/vikmapslayer.c:249 msgid "Default maplayer directory:" msgstr "" #: ../src/vikmapslayer.c:249 msgid "Choose a directory to store cached Map tiles for this layer" msgstr "" #: ../src/vikmapslayer.c:505 msgid "Unknown map type" msgstr "Αγνωστος τύπος χάρτη" #: ../src/vikmapslayer.c:516 msgid "Unknown Map Zoom" msgstr "" #: ../src/vikmapslayer.c:589 #, c-format msgid "" "New map cannot be displayed in the current drawmode.\n" "Select \"%s\" from View menu to view it." msgstr "" #: ../src/vikmapslayer.c:753 #, c-format msgid "" "Cowardly refusing to draw tiles or existence of tiles beyond %d zoom out " "factor" msgstr "" #: ../src/vikmapslayer.c:1157 #, c-format msgid "Redownloading up to %d %s map..." msgid_plural "Redownloading up to %d %s maps..." msgstr[0] "" msgstr[1] "" #: ../src/vikmapslayer.c:1159 #, c-format msgid "Redownloading %d %s map..." msgid_plural "Redownloading %d %s maps..." msgstr[0] "" msgstr[1] "" #: ../src/vikmapslayer.c:1163 ../src/vikmapslayer.c:1238 #, c-format msgid "Downloading %d %s map..." msgid_plural "Downloading %d %s maps..." msgstr[0] "" msgstr[1] "" #: ../src/vikmapslayer.c:1311 #, c-format msgid "" "\n" "Source: %s\n" "\n" "Tile File: %s\n" "Tile File Timestamp: %s" msgstr "" #: ../src/vikmapslayer.c:1318 #, c-format msgid "" "Source: %s\n" "\n" "No Tile File!" msgstr "" #: ../src/vikmapslayer.c:1356 msgid "Redownload _Bad Map(s)" msgstr "" #: ../src/vikmapslayer.c:1360 msgid "Redownload _New Map(s)" msgstr "" #: ../src/vikmapslayer.c:1364 msgid "Redownload _All Map(s)" msgstr "" #: ../src/vikmapslayer.c:1368 msgid "_Show Tile Information" msgstr "" #: ../src/vikmapslayer.c:1449 #, c-format msgid "" "Wrong drawmode for this map.\n" "Select \"%s\" from View menu and try again." msgstr "" #: ../src/vikmapslayer.c:1454 msgid "Wrong zoom level for this map." msgstr "" #. Now with icons #: ../src/vikmapslayer.c:1485 msgid "Download _Missing Onscreen Maps" msgstr "" #: ../src/vikmapslayer.c:1492 msgid "Download _New Onscreen Maps" msgstr "" #: ../src/vikmapslayer.c:1499 msgid "Reload _All Onscreen Maps" msgstr "" #: ../src/viktreeview.c:263 msgid "Layer Name" msgstr "Ονομα επιπέδου" #: ../src/viktreeview.c:742 #, c-format msgid "delete data from %s\n" msgstr "" #: ../src/viktrwlayer.c:377 msgid "Create _Waypoint" msgstr "" #: ../src/viktrwlayer.c:377 msgid "Create Waypoint" msgstr "" #: ../src/viktrwlayer.c:383 msgid "Create _Track" msgstr "" #: ../src/viktrwlayer.c:383 msgid "Create Track" msgstr "Δημιουργία Κομματιού" #: ../src/viktrwlayer.c:392 msgid "Create _Route" msgstr "" #: ../src/viktrwlayer.c:392 msgid "Create Route" msgstr "" #: ../src/viktrwlayer.c:401 msgid "_Edit Waypoint" msgstr "" #: ../src/viktrwlayer.c:401 msgid "Edit Waypoint" msgstr "" #: ../src/viktrwlayer.c:409 msgid "Edit Trac_kpoint" msgstr "" #: ../src/viktrwlayer.c:409 msgid "Edit Trackpoint" msgstr "" #: ../src/viktrwlayer.c:417 msgid "Show P_icture" msgstr "" #: ../src/viktrwlayer.c:417 msgid "Show Picture" msgstr "" #: ../src/viktrwlayer.c:424 msgid "Route _Finder" msgstr "" #: ../src/viktrwlayer.c:424 msgid "Route Finder" msgstr "" #. ***** PARAMETERS ***** #: ../src/viktrwlayer.c:447 ../src/viktrwlayer.c:1942 #: ../src/viktrwlayer.c:1944 msgid "Waypoints" msgstr "" #: ../src/viktrwlayer.c:447 ../src/viktrwlayer.c:1933 #: ../src/viktrwlayer.c:1935 msgid "Tracks" msgstr "" #: ../src/viktrwlayer.c:447 msgid "Waypoint Images" msgstr "" #: ../src/viktrwlayer.c:450 msgid "Draw by Track" msgstr "" #: ../src/viktrwlayer.c:450 msgid "Draw by Speed" msgstr "" #: ../src/viktrwlayer.c:450 msgid "All Tracks Same Color" msgstr "" #: ../src/viktrwlayer.c:451 msgid "Filled Square" msgstr "" #: ../src/viktrwlayer.c:451 msgid "Square" msgstr "Τετράγωνο" #: ../src/viktrwlayer.c:451 msgid "Circle" msgstr "Κύκλος" #: ../src/viktrwlayer.c:451 msgid "X" msgstr "X" #: ../src/viktrwlayer.c:477 msgid "Extra Extra Small" msgstr "" #: ../src/viktrwlayer.c:478 msgid "Extra Small" msgstr "" #: ../src/viktrwlayer.c:479 msgid "Small" msgstr "" #: ../src/viktrwlayer.c:480 msgid "Medium" msgstr "" #: ../src/viktrwlayer.c:481 msgid "Large" msgstr "" #: ../src/viktrwlayer.c:482 msgid "Extra Large" msgstr "" #: ../src/viktrwlayer.c:483 msgid "Extra Extra Large" msgstr "" #: ../src/viktrwlayer.c:491 msgid "Track Drawing Mode:" msgstr "" #: ../src/viktrwlayer.c:492 msgid "All Tracks Color:" msgstr "" #: ../src/viktrwlayer.c:493 msgid "The color used when 'All Tracks Same Color' drawing mode is selected" msgstr "" #: ../src/viktrwlayer.c:494 msgid "Draw Track Lines" msgstr "" #: ../src/viktrwlayer.c:495 msgid "Track Thickness:" msgstr "" #: ../src/viktrwlayer.c:496 msgid "Draw Track Direction" msgstr "" #: ../src/viktrwlayer.c:497 msgid "Direction Size:" msgstr "" #: ../src/viktrwlayer.c:498 msgid "Draw Trackpoints" msgstr "" #: ../src/viktrwlayer.c:499 msgid "Trackpoint Size:" msgstr "" #: ../src/viktrwlayer.c:500 msgid "Draw Elevation" msgstr "" #: ../src/viktrwlayer.c:501 msgid "Draw Elevation Height %:" msgstr "" #: ../src/viktrwlayer.c:503 msgid "Draw Stops" msgstr "" #: ../src/viktrwlayer.c:504 msgid "" "Whether to draw a marker when trackpoints are at the same position but over " "the minimum stop length apart in time" msgstr "" #: ../src/viktrwlayer.c:505 msgid "Min Stop Length (seconds):" msgstr "" #: ../src/viktrwlayer.c:507 msgid "Track BG Thickness:" msgstr "" #: ../src/viktrwlayer.c:508 msgid "Track Background Color" msgstr "" #: ../src/viktrwlayer.c:509 msgid "Draw by Speed Factor (%):" msgstr "" #: ../src/viktrwlayer.c:510 msgid "" "The percentage factor away from the average speed determining the color used" msgstr "" #: ../src/viktrwlayer.c:512 msgid "Draw Labels" msgstr "Σχεδιασμός ετικετών" #: ../src/viktrwlayer.c:513 msgid "Waypoint Font Size:" msgstr "" #: ../src/viktrwlayer.c:514 msgid "Waypoint Color:" msgstr "" #: ../src/viktrwlayer.c:515 msgid "Waypoint Text:" msgstr "" #: ../src/viktrwlayer.c:516 msgid "Background:" msgstr "Φόντο:" #: ../src/viktrwlayer.c:517 msgid "Fake BG Color Translucency:" msgstr "" #: ../src/viktrwlayer.c:518 msgid "Waypoint marker:" msgstr "" #: ../src/viktrwlayer.c:519 msgid "Waypoint size:" msgstr "" #: ../src/viktrwlayer.c:520 msgid "Draw Waypoint Symbols:" msgstr "" #: ../src/viktrwlayer.c:522 msgid "Draw Waypoint Images" msgstr "" #: ../src/viktrwlayer.c:523 msgid "Image Size (pixels):" msgstr "Μέγεθος Εικόνας (pixels):" #: ../src/viktrwlayer.c:524 msgid "Image Alpha:" msgstr "" #: ../src/viktrwlayer.c:525 msgid "Image Memory Cache Size:" msgstr "" #: ../src/viktrwlayer.c:610 msgid "TrackWaypoint" msgstr "" #: ../src/viktrwlayer.c:1951 ../src/viktrwlayer.c:1953 msgid "Routes" msgstr "" #: ../src/viktrwlayer.c:2144 #, c-format msgid " in %d:%02d hrs:mins" msgstr "" #: ../src/viktrwlayer.c:2148 #, c-format msgid "" "\n" "%sTotal Length %.1f %s%s" msgstr "" #: ../src/viktrwlayer.c:2154 #, c-format msgid "Tracks: %d - Waypoints: %d - Routes: %d%s" msgstr "" #: ../src/viktrwlayer.c:2174 #, c-format msgid "Tracks: %d" msgstr "" #: ../src/viktrwlayer.c:2184 #, c-format msgid "Routes: %d" msgstr "" #: ../src/viktrwlayer.c:2215 #, c-format msgid "- %d:%02d hrs:mins" msgstr "" #: ../src/viktrwlayer.c:2223 #, c-format msgid "%s%.1f km %s" msgstr "" #: ../src/viktrwlayer.c:2226 #, c-format msgid "%s%.1f miles %s" msgstr "" #: ../src/viktrwlayer.c:2240 #, c-format msgid "Waypoints: %d" msgstr "" #: ../src/viktrwlayer.c:2266 #, c-format msgid "Trkpt: Alt %dft" msgstr "" #. VIK_UNITS_HEIGHT_METRES: #: ../src/viktrwlayer.c:2270 #, c-format msgid "Trkpt: Alt %dm" msgstr "" #. Compact date time format #: ../src/viktrwlayer.c:2277 #, c-format msgid " | Time %x %X" msgstr "" #: ../src/viktrwlayer.c:2295 #, c-format msgid " | Track: %s" msgstr "" #. Combine parts to make overall message #: ../src/viktrwlayer.c:2299 #, c-format msgid "%s%s | %s %s %s" msgstr "" #: ../src/viktrwlayer.c:2314 #, c-format msgid "Wpt: Alt %dft" msgstr "" #. VIK_UNITS_HEIGHT_METRES: #: ../src/viktrwlayer.c:2318 #, c-format msgid "Wpt: Alt %dm" msgstr "" #. Add comment if available #: ../src/viktrwlayer.c:2333 #, c-format msgid "%s | %s %s | Comment: %s" msgstr "" #: ../src/viktrwlayer.c:2335 #, c-format msgid "%s | %s %s" msgstr "" #: ../src/viktrwlayer.c:2563 ../src/viktrwlayer.c:2634 msgid "This layer has no waypoints or trackpoints." msgstr "" #: ../src/viktrwlayer.c:2661 ../src/vikwindow.c:2407 ../src/vikwindow.c:2848 #, c-format msgid "The file \"%s\" exists, do you wish to overwrite it?" msgstr "" #: ../src/viktrwlayer.c:2671 ../src/vikwindow.c:2429 msgid "The filename you requested could not be opened for writing." msgstr "" #: ../src/viktrwlayer.c:2676 ../src/viktrwlayer.c:2681 #: ../src/viktrwlayer.c:2691 ../src/viktrwlayer.c:2703 msgid "Export Layer" msgstr "Εξαγωγή Επιπέδου" #: ../src/viktrwlayer.c:2720 msgid "Could not create temporary file for export." msgstr "" #: ../src/viktrwlayer.c:2729 #, c-format msgid "Could not launch %s." msgstr "" #: ../src/viktrwlayer.c:2773 msgid "Export Track as GPX" msgstr "" #: ../src/viktrwlayer.c:2795 msgid "Find" msgstr "" #: ../src/viktrwlayer.c:2805 msgid "Waypoint Name:" msgstr "" #: ../src/viktrwlayer.c:2822 msgid "Waypoint not found in this layer." msgstr "" #: ../src/viktrwlayer.c:3090 msgid "Can not upload invisible track." msgstr "" #: ../src/viktrwlayer.c:3192 ../src/viktrwlayer.c:7785 msgid "Track" msgstr "" #: ../src/viktrwlayer.c:3215 ../src/viktrwlayer.c:7817 msgid "Route" msgstr "" #: ../src/viktrwlayer.c:3296 ../src/viktrwlayer.c:6265 #: ../src/viktrwlayer.c:6314 msgid "_Finish Route" msgstr "" #: ../src/viktrwlayer.c:3298 ../src/viktrwlayer.c:6223 #: ../src/viktrwlayer.c:6312 msgid "_Finish Track" msgstr "" #. Now with icons #: ../src/viktrwlayer.c:3310 msgid "_View Layer" msgstr "" #: ../src/viktrwlayer.c:3317 msgid "V_iew" msgstr "" #: ../src/viktrwlayer.c:3323 msgid "View All _Tracks" msgstr "" #: ../src/viktrwlayer.c:3328 msgid "View All _Routes" msgstr "" #: ../src/viktrwlayer.c:3333 msgid "View All _Waypoints" msgstr "" #: ../src/viktrwlayer.c:3338 msgid "_Goto Center of Layer" msgstr "" #: ../src/viktrwlayer.c:3344 ../src/viktrwlayer.c:6199 msgid "Goto _Waypoint..." msgstr "" #: ../src/viktrwlayer.c:3350 msgid "_Export Layer" msgstr "" #: ../src/viktrwlayer.c:3356 msgid "Export as GPS_Point..." msgstr "" #: ../src/viktrwlayer.c:3361 msgid "Export as GPS_Mapper..." msgstr "" #: ../src/viktrwlayer.c:3366 msgid "Export as _GPX..." msgstr "" #: ../src/viktrwlayer.c:3371 msgid "Export as _KML..." msgstr "" #: ../src/viktrwlayer.c:3376 msgid "Open with External Program_1: " msgstr "" #: ../src/viktrwlayer.c:3383 msgid "Open with External Program_2: " msgstr "" #: ../src/viktrwlayer.c:3391 ../src/vikwindow.c:3145 msgid "_New" msgstr "_Νέο" #: ../src/viktrwlayer.c:3397 msgid "New _Waypoint..." msgstr "" #: ../src/viktrwlayer.c:3403 msgid "New _Track" msgstr "" #: ../src/viktrwlayer.c:3411 msgid "New _Route" msgstr "" #: ../src/viktrwlayer.c:3420 ../src/viktrwlayer.c:6597 msgid "Geotag _Images..." msgstr "" #: ../src/viktrwlayer.c:3427 msgid "_Acquire" msgstr "" #: ../src/viktrwlayer.c:3433 ../src/vikwindow.c:3150 msgid "From _GPS..." msgstr "" #: ../src/viktrwlayer.c:3439 msgid "From Google _Directions..." msgstr "" #: ../src/viktrwlayer.c:3446 msgid "From _OSM Traces..." msgstr "" #: ../src/viktrwlayer.c:3451 msgid "From _My OSM Traces..." msgstr "" #: ../src/viktrwlayer.c:3459 ../src/vikwindow.c:3166 msgid "From _Wikipedia Waypoints" msgstr "" #: ../src/viktrwlayer.c:3465 msgid "Within _Layer Bounds" msgstr "" #: ../src/viktrwlayer.c:3471 msgid "Within _Current View" msgstr "" #: ../src/viktrwlayer.c:3479 msgid "From Geo_caching..." msgstr "" #: ../src/viktrwlayer.c:3486 ../src/vikwindow.c:3163 msgid "From Geotagged _Images..." msgstr "" #: ../src/viktrwlayer.c:3492 msgid "From _File..." msgstr "" #: ../src/viktrwlayer.c:3498 ../src/viktrwlayer.c:6542 msgid "_Upload" msgstr "" #: ../src/viktrwlayer.c:3504 msgid "Upload to _GPS..." msgstr "" #: ../src/viktrwlayer.c:3511 ../src/viktrwlayer.c:6570 msgid "Upload to _OSM..." msgstr "" #: ../src/viktrwlayer.c:3519 msgid "De_lete" msgstr "" #: ../src/viktrwlayer.c:3525 msgid "Delete All _Tracks" msgstr "" #: ../src/viktrwlayer.c:3531 msgid "Delete Tracks _From Selection..." msgstr "" #: ../src/viktrwlayer.c:3537 ../src/viktrwlayer.c:6290 msgid "Delete _All Routes" msgstr "" #: ../src/viktrwlayer.c:3543 ../src/viktrwlayer.c:6296 msgid "_Delete Routes From Selection..." msgstr "" #: ../src/viktrwlayer.c:3549 msgid "Delete All _Waypoints" msgstr "" #: ../src/viktrwlayer.c:3555 msgid "Delete Waypoints From _Selection..." msgstr "" #: ../src/viktrwlayer.c:4128 #, c-format msgid "Are you sure you want to delete all tracks in %s?" msgstr "" #: ../src/viktrwlayer.c:4138 #, c-format msgid "Are you sure you want to delete all routes in %s?" msgstr "" #: ../src/viktrwlayer.c:4148 #, c-format msgid "Are you sure you want to delete all waypoints in %s?" msgstr "" #: ../src/viktrwlayer.c:4165 #, c-format msgid "Are you sure you want to delete the waypoint \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4178 #, c-format msgid "Are you sure you want to delete the track \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4191 #, c-format msgid "Are you sure you want to delete the route \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4351 ../src/viktrwlayer.c:4922 msgid "" "Converting a track to a route removes extra track data such as segments, " "timestamps, etc...\n" "Do you want to continue?" msgstr "" #: ../src/viktrwlayer.c:4711 msgid "Failed. No other tracks with timestamps in this layer found" msgstr "" #: ../src/viktrwlayer.c:4713 msgid "Failed. No other tracks without timestamps in this layer found" msgstr "" #: ../src/viktrwlayer.c:4732 msgid "Merge with..." msgstr "" #: ../src/viktrwlayer.c:4733 msgid "Select route to merge with" msgstr "" #: ../src/viktrwlayer.c:4733 msgid "Select track to merge with" msgstr "" #: ../src/viktrwlayer.c:4818 ../src/viktrwlayer.c:4895 msgid "Append Route" msgstr "" #: ../src/viktrwlayer.c:4818 ../src/viktrwlayer.c:4895 msgid "Append Track" msgstr "" #: ../src/viktrwlayer.c:4819 msgid "Select the route to append after the current route" msgstr "" #: ../src/viktrwlayer.c:4820 msgid "Select the track to append after the current track" msgstr "" #: ../src/viktrwlayer.c:4896 msgid "Select the track to append after the current route" msgstr "" #: ../src/viktrwlayer.c:4897 msgid "Select the route to append after the current track" msgstr "" #: ../src/viktrwlayer.c:4957 #, c-format msgid "%d segment merged" msgid_plural "%d segments merged" msgstr[0] "" msgstr[1] "" #: ../src/viktrwlayer.c:4973 msgid "Failed. This track does not have timestamp" msgstr "" #: ../src/viktrwlayer.c:4985 msgid "Failed. No other track in this layer has timestamp" msgstr "" #: ../src/viktrwlayer.c:4992 msgid "Merge Threshold..." msgstr "" #: ../src/viktrwlayer.c:4993 msgid "Merge when time between tracks less than:" msgstr "" #: ../src/viktrwlayer.c:5128 msgid "Split Threshold..." msgstr "" #: ../src/viktrwlayer.c:5129 msgid "Split when time between trackpoints exceeds:" msgstr "" #: ../src/viktrwlayer.c:5205 msgid "Split Every Nth Point" msgstr "" #: ../src/viktrwlayer.c:5206 msgid "Split on every Nth point:" msgstr "" #: ../src/viktrwlayer.c:5312 msgid "Can not split track as it has no segments" msgstr "" #: ../src/viktrwlayer.c:5340 ../src/viktrwlayer.c:5370 #, c-format msgid "Deleted %ld point" msgid_plural "Deleted %ld points" msgstr[0] "" msgstr[1] "" #: ../src/viktrwlayer.c:5531 msgid "Internal Error in vik_trw_layer_uniquify_tracks" msgstr "" #: ../src/viktrwlayer.c:5588 ../src/viktrwlayer.c:5635 #: ../src/viktrwlayer.c:5814 msgid "" "Multiple entries with the same name exist. This method only works with " "unique names. Force unique names now?" msgstr "" #: ../src/viktrwlayer.c:5599 msgid "No tracks found" msgstr "" #: ../src/viktrwlayer.c:5607 ../src/viktrwlayer.c:5654 #: ../src/viktrwlayer.c:5834 msgid "Delete Selection" msgstr "" #: ../src/viktrwlayer.c:5608 msgid "Select tracks to delete" msgstr "" #: ../src/viktrwlayer.c:5646 msgid "No routes found" msgstr "" #: ../src/viktrwlayer.c:5655 msgid "Select routes to delete" msgstr "" #: ../src/viktrwlayer.c:5761 msgid "Internal Error in vik_trw_layer_uniquify_waypoints" msgstr "" #: ../src/viktrwlayer.c:5824 msgid "No waypoints found" msgstr "" #: ../src/viktrwlayer.c:5835 msgid "Select waypoints to delete" msgstr "" #: ../src/viktrwlayer.c:5896 #, c-format msgid "" "A waypoint with the name \"%s\" already exists. Really rename to the same " "name?" msgstr "" #: ../src/viktrwlayer.c:5926 #, c-format msgid "" "A track with the name \"%s\" already exists. Really rename to the same name?" msgstr "" #: ../src/viktrwlayer.c:5963 #, c-format msgid "" "A route with the name \"%s\" already exists. Really rename to the same name?" msgstr "" #: ../src/viktrwlayer.c:6085 ../src/viktrwlayer.c:6337 msgid "_Goto" msgstr "" #: ../src/viktrwlayer.c:6104 msgid "_Visit Geocache Webpage" msgstr "" #: ../src/viktrwlayer.c:6123 msgid "_Show Picture..." msgstr "" #: ../src/viktrwlayer.c:6131 msgid "Update Geotag on _Image" msgstr "" #: ../src/viktrwlayer.c:6137 msgid "_Update" msgstr "" #: ../src/viktrwlayer.c:6142 msgid "Update and _Keep File Timestamp" msgstr "" #: ../src/viktrwlayer.c:6153 msgid "Visit _Webpage" msgstr "" #: ../src/viktrwlayer.c:6184 msgid "_New Waypoint..." msgstr "" #: ../src/viktrwlayer.c:6193 msgid "_View All Waypoints" msgstr "" #: ../src/viktrwlayer.c:6205 msgid "Delete _All Waypoints" msgstr "" #: ../src/viktrwlayer.c:6211 msgid "_Delete Waypoints From Selection..." msgstr "" #: ../src/viktrwlayer.c:6233 msgid "_View All Tracks" msgstr "" #: ../src/viktrwlayer.c:6239 msgid "_New Track" msgstr "" #: ../src/viktrwlayer.c:6247 msgid "Delete _All Tracks" msgstr "" #: ../src/viktrwlayer.c:6253 msgid "_Delete Tracks From Selection..." msgstr "" #: ../src/viktrwlayer.c:6276 msgid "_View All Routes" msgstr "" #: ../src/viktrwlayer.c:6282 msgid "_New Route" msgstr "" #: ../src/viktrwlayer.c:6327 msgid "_View Track" msgstr "" #: ../src/viktrwlayer.c:6329 msgid "_View Route" msgstr "" #: ../src/viktrwlayer.c:6343 msgid "_Startpoint" msgstr "" #: ../src/viktrwlayer.c:6349 msgid "\"_Center\"" msgstr "" #: ../src/viktrwlayer.c:6355 msgid "_Endpoint" msgstr "" #: ../src/viktrwlayer.c:6361 msgid "_Highest Altitude" msgstr "" #: ../src/viktrwlayer.c:6367 msgid "_Lowest Altitude" msgstr "" #: ../src/viktrwlayer.c:6375 msgid "_Maximum Speed" msgstr "" #: ../src/viktrwlayer.c:6384 msgid "Co_mbine" msgstr "" #: ../src/viktrwlayer.c:6392 msgid "_Merge By Time..." msgstr "" #: ../src/viktrwlayer.c:6397 msgid "Merge _Segments" msgstr "" #: ../src/viktrwlayer.c:6403 msgid "Merge _With Other Tracks..." msgstr "" #: ../src/viktrwlayer.c:6409 msgid "_Append Track..." msgstr "" #: ../src/viktrwlayer.c:6411 msgid "_Append Route..." msgstr "" #: ../src/viktrwlayer.c:6417 msgid "Append _Route..." msgstr "" #: ../src/viktrwlayer.c:6419 msgid "Append _Track..." msgstr "" #: ../src/viktrwlayer.c:6426 msgid "_Split" msgstr "" #: ../src/viktrwlayer.c:6434 msgid "_Split By Time..." msgstr "" #. ATM always enable this entry - don't want to have to analyse the track before displaying the menu - to keep the menu speedy #: ../src/viktrwlayer.c:6440 msgid "Split Se_gments" msgstr "" #: ../src/viktrwlayer.c:6446 msgid "Split By _Number of Points..." msgstr "" #: ../src/viktrwlayer.c:6451 msgid "Split at _Trackpoint" msgstr "" #: ../src/viktrwlayer.c:6460 msgid "Delete Poi_nts" msgstr "" #: ../src/viktrwlayer.c:6466 msgid "Delete Points With The Same _Position" msgstr "" #: ../src/viktrwlayer.c:6471 msgid "Delete Points With The Same _Time" msgstr "" #: ../src/viktrwlayer.c:6477 msgid "_Reverse Track" msgstr "" #: ../src/viktrwlayer.c:6479 msgid "_Reverse Route" msgstr "" #: ../src/viktrwlayer.c:6488 msgid "Down_load Maps Along Track..." msgstr "" #: ../src/viktrwlayer.c:6490 msgid "Down_load Maps Along Route..." msgstr "" #: ../src/viktrwlayer.c:6497 msgid "_Apply DEM Data" msgstr "" #: ../src/viktrwlayer.c:6504 msgid "_Export Track as GPX..." msgstr "" #: ../src/viktrwlayer.c:6506 msgid "_Export Route as GPX..." msgstr "" #: ../src/viktrwlayer.c:6513 msgid "E_xtend Track End" msgstr "" #: ../src/viktrwlayer.c:6515 msgid "E_xtend Route End" msgstr "" #: ../src/viktrwlayer.c:6522 msgid "C_onvert to a Route" msgstr "" #: ../src/viktrwlayer.c:6524 msgid "C_onvert to a Track" msgstr "" #: ../src/viktrwlayer.c:6532 msgid "Extend _Using Route Finder" msgstr "" #: ../src/viktrwlayer.c:6548 msgid "_Upload to GPS..." msgstr "" #: ../src/viktrwlayer.c:6559 msgid "_View Google Directions" msgstr "" #: ../src/viktrwlayer.c:6579 msgid "Use with _Filter" msgstr "" #: ../src/viktrwlayer.c:6612 msgid "_Edit Trackpoint" msgstr "" #: ../src/viktrwlayer.c:7524 #, c-format msgid " - Gain %dm:Loss %dm" msgstr "" #: ../src/viktrwlayer.c:7526 #, c-format msgid " - Gain %dft:Loss %dft" msgstr "" #: ../src/viktrwlayer.c:7531 #, c-format msgid " - Bearing %3.1f° - Step %s" msgstr "" #: ../src/viktrwlayer.c:8124 #, c-format msgid "Could not launch %s to open file." msgstr "" #: ../src/viktrwlayer.c:8205 #, c-format msgid "Creating %d Image Thumbnails..." msgstr "" #: ../src/viktrwlayer.c:8524 msgid "No map layer in use. Create one first" msgstr "" #: ../src/viktrwlayer_propwin.c:898 ../src/viktrwlayer_propwin.c:1155 #, c-format msgid "%.1f kph" msgstr "" #: ../src/viktrwlayer_propwin.c:901 ../src/viktrwlayer_propwin.c:1158 #, c-format msgid "%.1f mph" msgstr "" #: ../src/viktrwlayer_propwin.c:904 ../src/viktrwlayer_propwin.c:1161 #, c-format msgid "%.1f knots" msgstr "" #. VIK_UNITS_SPEED_METRES_PER_SECOND: #: ../src/viktrwlayer_propwin.c:908 ../src/viktrwlayer_propwin.c:1165 #, c-format msgid "%.1f m/s" msgstr "" #: ../src/viktrwlayer_propwin.c:1745 #, c-format msgid "%.1f miles" msgstr "" #: ../src/viktrwlayer_propwin.c:1747 #, c-format msgid "%.1f km" msgstr "" #: ../src/viktrwlayer_propwin.c:2681 msgid "Failed spliting track. Track unchanged" msgstr "" #: ../src/viktrwlayer_propwin.c:2779 ../src/viktrwlayer_propwin.c:3178 #, c-format msgid "%s - Track Properties" msgstr "" #: ../src/viktrwlayer_propwin.c:2784 msgid "Split at _Marker" msgstr "" #: ../src/viktrwlayer_propwin.c:2785 msgid "Split _Segments" msgstr "" #: ../src/viktrwlayer_propwin.c:2786 msgid "_Reverse" msgstr "" #: ../src/viktrwlayer_propwin.c:2787 msgid "_Delete Dupl." msgstr "" #: ../src/viktrwlayer_propwin.c:2813 msgid "Comment:" msgstr "Σχόλιο:" #: ../src/viktrwlayer_propwin.c:2814 msgid "Description:" msgstr "" #: ../src/viktrwlayer_propwin.c:2815 msgid "Track Length:" msgstr "" #: ../src/viktrwlayer_propwin.c:2816 msgid "Trackpoints:" msgstr "" #: ../src/viktrwlayer_propwin.c:2817 msgid "Segments:" msgstr "" #: ../src/viktrwlayer_propwin.c:2818 msgid "Duplicate Points:" msgstr "" #: ../src/viktrwlayer_propwin.c:2819 msgid "Max Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:2820 msgid "Avg. Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:2821 msgid "Moving Avg. Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:2822 msgid "Avg. Dist. Between TPs:" msgstr "" #: ../src/viktrwlayer_propwin.c:2823 msgid "Elevation Range:" msgstr "" #: ../src/viktrwlayer_propwin.c:2824 msgid "Total Elevation Gain/Loss:" msgstr "" #: ../src/viktrwlayer_propwin.c:2825 msgid "Start:" msgstr "" #: ../src/viktrwlayer_propwin.c:2826 msgid "End:" msgstr "" #: ../src/viktrwlayer_propwin.c:2827 msgid "Duration:" msgstr "Διάρκεια:" #: ../src/viktrwlayer_propwin.c:2828 msgid "Color:" msgstr "" #: ../src/viktrwlayer_propwin.c:2877 ../src/viktrwlayer_propwin.c:2901 #: ../src/viktrwlayer_propwin.c:2929 ../src/viktrwlayer_propwin.c:2966 #: ../src/viktrwlayer_propwin.c:2984 ../src/viktrwlayer_propwin.c:3034 #: ../src/viktrwlayer_propwin.c:3035 ../src/viktrwlayer_propwin.c:3036 #: ../src/viktrwlayer_propwin.c:3062 ../src/viktrwlayer_propwin.c:3063 #: ../src/viktrwlayer_propwin.c:3078 ../src/viktrwlayer_propwin.c:3079 #: ../src/viktrwlayer_propwin.c:3092 ../src/viktrwlayer_propwin.c:3093 #: ../src/viktrwlayer_propwin.c:3106 ../src/viktrwlayer_propwin.c:3107 #: ../src/viktrwlayer_propwin.c:3120 ../src/viktrwlayer_propwin.c:3121 #: ../src/viktrwlayer_propwin.c:3134 ../src/viktrwlayer_propwin.c:3135 #, c-format msgid "No Data" msgstr "Χωρίς δεδομένα" #: ../src/viktrwlayer_propwin.c:3031 #, c-format msgid "%d minutes" msgstr "%d λεπτά" #: ../src/viktrwlayer_propwin.c:3058 msgid "Statistics" msgstr "Στατιστικά" #: ../src/viktrwlayer_propwin.c:3064 msgid "Show D_EM" msgstr "" #: ../src/viktrwlayer_propwin.c:3065 ../src/viktrwlayer_propwin.c:3080 #: ../src/viktrwlayer_propwin.c:3094 ../src/viktrwlayer_propwin.c:3136 msgid "Show _GPS Speed" msgstr "" #: ../src/viktrwlayer_propwin.c:3067 ../src/viktrwlayer_propwin.c:3082 #: ../src/viktrwlayer_propwin.c:3110 ../src/viktrwlayer_propwin.c:3138 msgid "Track Distance:" msgstr "" #: ../src/viktrwlayer_propwin.c:3068 ../src/viktrwlayer_propwin.c:3125 msgid "Track Height:" msgstr "" #: ../src/viktrwlayer_propwin.c:3073 msgid "Elevation-distance" msgstr "" #: ../src/viktrwlayer_propwin.c:3083 msgid "Track Gradient:" msgstr "" #: ../src/viktrwlayer_propwin.c:3087 msgid "Gradient-distance" msgstr "" #: ../src/viktrwlayer_propwin.c:3096 ../src/viktrwlayer_propwin.c:3111 #: ../src/viktrwlayer_propwin.c:3124 msgid "Track Time:" msgstr "" #: ../src/viktrwlayer_propwin.c:3097 ../src/viktrwlayer_propwin.c:3139 msgid "Track Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:3101 msgid "Speed-time" msgstr "" #: ../src/viktrwlayer_propwin.c:3108 ../src/viktrwlayer_propwin.c:3122 msgid "Show S_peed" msgstr "" #: ../src/viktrwlayer_propwin.c:3115 msgid "Distance-time" msgstr "" #: ../src/viktrwlayer_propwin.c:3129 msgid "Elevation-time" msgstr "" #: ../src/viktrwlayer_propwin.c:3143 msgid "Speed-distance" msgstr "" #: ../src/viktrwlayer_tpwin.c:118 msgid "Part of Track:" msgstr "" #: ../src/viktrwlayer_tpwin.c:119 msgid "Latitude:" msgstr "" #: ../src/viktrwlayer_tpwin.c:120 msgid "Longitude:" msgstr "" #: ../src/viktrwlayer_tpwin.c:121 msgid "Altitude:" msgstr "" #: ../src/viktrwlayer_tpwin.c:122 msgid "Timestamp:" msgstr "" #: ../src/viktrwlayer_tpwin.c:123 msgid "Time:" msgstr "" #: ../src/viktrwlayer_tpwin.c:124 msgid "Distance Difference:" msgstr "" #: ../src/viktrwlayer_tpwin.c:125 msgid "Time Difference:" msgstr "" #: ../src/viktrwlayer_tpwin.c:126 msgid "\"Speed\" Between:" msgstr "" #: ../src/viktrwlayer_tpwin.c:127 msgid "VDOP:" msgstr "" #: ../src/viktrwlayer_tpwin.c:128 msgid "HDOP:" msgstr "" #: ../src/viktrwlayer_tpwin.c:129 msgid "PDOP:" msgstr "" #: ../src/viktrwlayer_tpwin.c:130 msgid "SAT/FIX:" msgstr "" #: ../src/viktrwlayer_tpwin.c:139 msgid "Trackpoint" msgstr "" #: ../src/viktrwlayer_tpwin.c:142 msgid "_Insert After" msgstr "" #: ../src/viktrwlayer_tpwin.c:144 msgid "Split Here" msgstr "Διαίρεση εδώ" #: ../src/viktrwlayer_geotag.c:446 #, c-format msgid "Geotagging %d Images..." msgstr "" #: ../src/viktrwlayer_geotag.c:510 msgid "Geotag Images" msgstr "" #: ../src/viktrwlayer_geotag.c:516 msgid "Images" msgstr "" #: ../src/viktrwlayer_geotag.c:520 msgid "Overwrite Existing Waypoints:" msgstr "" #: ../src/viktrwlayer_geotag.c:523 msgid "Overwrite Existing GPS Information:" msgstr "" #: ../src/viktrwlayer_geotag.c:525 msgid "Keep File Modification Timestamp:" msgstr "" #: ../src/viktrwlayer_geotag.c:555 msgid "Create Waypoints:" msgstr "" #: ../src/viktrwlayer_geotag.c:563 msgid "Write EXIF:" msgstr "" #: ../src/viktrwlayer_geotag.c:575 msgid "Interpolate Between Track Segments:" msgstr "" #: ../src/viktrwlayer_geotag.c:579 msgid "Image Time Offset (Seconds):" msgstr "" #: ../src/viktrwlayer_geotag.c:581 msgid "" "The number of seconds to ADD to the photos time to make it match the GPS " "data. Calculate this with (GPS - Photo). Can be negative or positive. Useful " "to adjust times when a camera's timestamp was incorrect." msgstr "" #: ../src/viktrwlayer_geotag.c:584 msgid "Image Timezone:" msgstr "" #: ../src/viktrwlayer_geotag.c:586 msgid "" "The timezone that was used when the images were created. For example, if a " "camera is set to AWST or +8:00 hours. Enter +8:00 here so that the correct " "adjustment to the images' time can be made. GPS data is always in UTC." msgstr "" #: ../src/viktrwlayer_geotag.c:590 #, c-format msgid "Using track: %s" msgstr "" #: ../src/viktrwlayer_geotag.c:592 #, c-format msgid "Using all tracks in: %s" msgstr "" #: ../src/vikstatus.c:105 msgid "Current zoom level. Click to select a new one." msgstr "" #: ../src/vikwaypoint.c:34 msgid "Waypoint" msgstr "" #. TODO get rid of this as this is unnecessary duplication... #: ../src/vikwindow.c:221 msgid "Pan" msgstr "" #: ../src/vikwindow.c:221 msgid "Zoom" msgstr "Εστίαση" #: ../src/vikwindow.c:221 msgid "Ruler" msgstr "Χάρακας" #: ../src/vikwindow.c:221 msgid "Select" msgstr "" #. Create tooltip #: ../src/vikwindow.c:440 msgid "Select zoom level" msgstr "" #: ../src/vikwindow.c:645 #, c-format msgid "" "Do you want to save the changes you made to the document \"%s\"?\n" "\n" "Your changes will be lost if you don't save them." msgstr "" #: ../src/vikwindow.c:649 msgid "Don't Save" msgstr "Να μη γίνει αποθήκευση" #: ../src/vikwindow.c:696 msgid "mpp" msgstr "" #: ../src/vikwindow.c:696 msgid "pixelfact" msgstr "" #: ../src/vikwindow.c:861 #, c-format msgid "%s %s %dm" msgstr "" #: ../src/vikwindow.c:863 #, c-format msgid "%s %s %dft" msgstr "" #: ../src/vikwindow.c:866 #, c-format msgid "%s %s" msgstr "" #. NB Ctrl+Shift+R is used for Refresh (deemed more important), so use 'U' instead #: ../src/vikwindow.c:1254 msgid "_Ruler" msgstr "" #: ../src/vikwindow.c:1254 msgid "Ruler Tool" msgstr "" #: ../src/vikwindow.c:1502 ../src/vikwindow.c:3138 msgid "_Zoom" msgstr "_Εστίαση" #: ../src/vikwindow.c:1502 msgid "Zoom Tool" msgstr "Εργαλείο Εστίασης" #: ../src/vikwindow.c:1547 ../src/vikwindow.c:3139 msgid "_Pan" msgstr "" #: ../src/vikwindow.c:1547 msgid "Pan Tool" msgstr "" #: ../src/vikwindow.c:1664 msgid "_Select" msgstr "" #: ../src/vikwindow.c:1664 msgid "Select Tool" msgstr "" #: ../src/vikwindow.c:1809 msgid "You must select a layer to show its properties." msgstr "" #. No error to show, so unlikely this will get called #: ../src/vikwindow.c:1824 msgid "The help system is not available." msgstr "" #. Main error path #: ../src/vikwindow.c:1827 #, c-format msgid "" "Help is not available because: %s.\n" "Ensure a Mime Type ghelp handler program is installed (e.g. yelp)." msgstr "" #: ../src/vikwindow.c:1850 msgid "You must select a layer to delete." msgstr "" #: ../src/vikwindow.c:2087 msgid "Untitled" msgstr "Ανώνυμο" #: ../src/vikwindow.c:2194 #, c-format msgid "Unable to add '%s' to the list of recently used documents" msgstr "" #: ../src/vikwindow.c:2208 msgid "The file you requested could not be opened." msgstr "" #: ../src/vikwindow.c:2211 msgid "" "GPSBabel is required to load files of this type or GPSBabel encountered " "problems." msgstr "" #: ../src/vikwindow.c:2214 #, c-format msgid "Unable to load malformed GPX file %s" msgstr "" #: ../src/vikwindow.c:2217 #, c-format msgid "Unsupported file type for %s" msgstr "" #. Since we can process .vik files with issues just show a warning in the status bar #. Not that a user can do much about it... or tells them what this issue is yet... #: ../src/vikwindow.c:2223 #, c-format msgid "WARNING: issues encountered loading %s" msgstr "" #: ../src/vikwindow.c:2278 msgid "Please select a GPS data file to open. " msgstr "" #: ../src/vikwindow.c:2288 msgid "Geocaching" msgstr "" #: ../src/vikwindow.c:2294 msgid "Google Earth" msgstr "" #: ../src/vikwindow.c:2299 msgid "GPX" msgstr "" #: ../src/vikwindow.c:2304 ../src/vikwindow.c:2387 #: ../src/viking.desktop.in.h:1 msgid "Viking" msgstr "" #: ../src/vikwindow.c:2374 msgid "Save as Viking File." msgstr "" #. Try harder... #: ../src/vikwindow.c:2619 ../src/vikwindow.c:2625 msgid "Generating image file..." msgstr "" #: ../src/vikwindow.c:2647 msgid "" "Failed to generate internal image.\n" "\n" "Try creating a smaller image." msgstr "" #: ../src/vikwindow.c:2655 msgid "Failed to generate image file." msgstr "" #. Success #: ../src/vikwindow.c:2660 msgid "Image file generated." msgstr "" #: ../src/vikwindow.c:2764 msgid "" "Viewable region outside allowable pixel size bounds for image. Clipping " "width/height values." msgstr "" #: ../src/vikwindow.c:2789 #, c-format msgid "Total area: %ldm x %ldm (%.3f sq. km)" msgstr "" #: ../src/vikwindow.c:2792 #, c-format msgid "Total area: %ldm x %ldm (%.3f sq. miles)" msgstr "" #: ../src/vikwindow.c:2813 msgid "Save Image" msgstr "Αποθήκευση Εικόνας" #: ../src/vikwindow.c:2834 msgid "PNG" msgstr "" #: ../src/vikwindow.c:2857 msgid "You must be in UTM mode to use this feature" msgstr "" #: ../src/vikwindow.c:2862 msgid "Choose a directory to hold images" msgstr "" #. todo: default for answers inside VikWindow or static (thruout instance) #: ../src/vikwindow.c:2883 msgid "Save to Image File" msgstr "" #: ../src/vikwindow.c:2900 msgid "Width (pixels):" msgstr "Πλάτος (εικονοστοιχεία):" #: ../src/vikwindow.c:2902 msgid "Height (pixels):" msgstr "Ύψος (εικονοστοιχεία):" #: ../src/vikwindow.c:2905 msgid "" "WARNING: USING LARGE IMAGES OVER 10000x10000\n" "MAY CRASH THE PROGRAM!" msgstr "" #: ../src/vikwindow.c:2907 msgid "Zoom (meters per pixel):" msgstr "" #: ../src/vikwindow.c:2921 msgid "Area in current viewable window" msgstr "" #: ../src/vikwindow.c:2931 msgid "Save as PNG" msgstr "Αποθήκευση ως PNG" #: ../src/vikwindow.c:2932 msgid "Save as JPEG" msgstr "Αποθήκευση ως JPEG" #: ../src/vikwindow.c:2954 msgid "East-west image tiles:" msgstr "" #: ../src/vikwindow.c:2956 msgid "North-south image tiles:" msgstr "" #: ../src/vikwindow.c:3097 msgid "Choose a background color" msgstr "" #: ../src/vikwindow.c:3113 msgid "Choose a track highlight color" msgstr "" #: ../src/vikwindow.c:3134 msgid "_File" msgstr "_Αρχείο" #: ../src/vikwindow.c:3135 msgid "_Edit" msgstr "Επε_ξεργασία" #: ../src/vikwindow.c:3136 msgid "_View" msgstr "Π_ροβολή" #: ../src/vikwindow.c:3137 msgid "_Show" msgstr "" #: ../src/vikwindow.c:3140 msgid "_Layers" msgstr "Ε_πίπεδα" #: ../src/vikwindow.c:3141 msgid "_Tools" msgstr "Εργα_λεία" #: ../src/vikwindow.c:3142 msgid "_Webtools" msgstr "" #: ../src/vikwindow.c:3143 ../src/vikwindow.c:3206 msgid "_Help" msgstr "Βο_ηθεια" #: ../src/vikwindow.c:3145 msgid "New file" msgstr "Νέο αρχείο" #: ../src/vikwindow.c:3146 msgid "_Open..." msgstr "Άν_οιγμα..." #: ../src/vikwindow.c:3146 msgid "Open a file" msgstr "Άνοιγμα αρχείου" #: ../src/vikwindow.c:3147 msgid "Open _Recent File" msgstr "" #: ../src/vikwindow.c:3148 msgid "Append _File..." msgstr "" #: ../src/vikwindow.c:3148 msgid "Append data from a different file" msgstr "" #: ../src/vikwindow.c:3149 msgid "A_cquire" msgstr "" #: ../src/vikwindow.c:3150 msgid "Transfer data from a GPS device" msgstr "" #: ../src/vikwindow.c:3151 msgid "Import File With GPS_Babel..." msgstr "" #: ../src/vikwindow.c:3151 msgid "Import file via GPSBabel converter" msgstr "" #: ../src/vikwindow.c:3153 msgid "Google _Directions..." msgstr "" #: ../src/vikwindow.c:3153 msgid "Get driving directions from Google" msgstr "" #: ../src/vikwindow.c:3156 msgid "_OSM Traces..." msgstr "" #: ../src/vikwindow.c:3156 msgid "Get traces from OpenStreetMap" msgstr "" #: ../src/vikwindow.c:3157 msgid "_My OSM Traces..." msgstr "" #: ../src/vikwindow.c:3157 msgid "Get Your Own Traces from OpenStreetMap" msgstr "" #: ../src/vikwindow.c:3160 msgid "Geo_caches..." msgstr "" #: ../src/vikwindow.c:3160 msgid "Get Geocaches from geocaching.com" msgstr "" #: ../src/vikwindow.c:3163 msgid "Create waypoints from geotagged images" msgstr "" #: ../src/vikwindow.c:3166 msgid "Create waypoints from Wikipedia items in the current view" msgstr "" #: ../src/vikwindow.c:3168 msgid "_Save" msgstr "Αποθή_κευση" #: ../src/vikwindow.c:3168 msgid "Save the file" msgstr "" #: ../src/vikwindow.c:3169 msgid "Save _As..." msgstr "Αποθήκευση _Ως..." #: ../src/vikwindow.c:3169 msgid "Save the file under different name" msgstr "" #: ../src/vikwindow.c:3170 msgid "_Generate Image File..." msgstr "" #: ../src/vikwindow.c:3170 msgid "Save a snapshot of the workspace into a file" msgstr "" #: ../src/vikwindow.c:3171 msgid "Generate _Directory of Images..." msgstr "" #: ../src/vikwindow.c:3171 msgid "FIXME:IMGDIR" msgstr "" #: ../src/vikwindow.c:3174 msgid "_Print..." msgstr "_Εκτύπωση..." #: ../src/vikwindow.c:3174 msgid "Print maps" msgstr "" #: ../src/vikwindow.c:3177 msgid "E_xit" msgstr "Έ_ξοδος" #: ../src/vikwindow.c:3177 msgid "Exit the program" msgstr "Έξοδος από το πρόγραμμα" #: ../src/vikwindow.c:3178 msgid "Save and Exit" msgstr "Αποθήκευση και Έξοδος" #: ../src/vikwindow.c:3178 msgid "Save and Exit the program" msgstr "" #: ../src/vikwindow.c:3180 msgid "Go to the _Default Location" msgstr "" #: ../src/vikwindow.c:3180 msgid "Go to the default location" msgstr "" #: ../src/vikwindow.c:3181 msgid "Go to _Location..." msgstr "" #: ../src/vikwindow.c:3181 msgid "Go to address/place using text search" msgstr "" #: ../src/vikwindow.c:3182 msgid "_Go to Lat/Lon..." msgstr "" #: ../src/vikwindow.c:3182 msgid "Go to arbitrary lat/lon coordinate" msgstr "" #: ../src/vikwindow.c:3183 msgid "Go to UTM..." msgstr "" #: ../src/vikwindow.c:3183 msgid "Go to arbitrary UTM coordinate" msgstr "" #: ../src/vikwindow.c:3184 msgid "_Refresh" msgstr "" #: ../src/vikwindow.c:3184 msgid "Refresh any maps displayed" msgstr "" #: ../src/vikwindow.c:3185 msgid "Set _Highlight Color..." msgstr "" #: ../src/vikwindow.c:3186 msgid "Set Bac_kground Color..." msgstr "" #: ../src/vikwindow.c:3187 msgid "Zoom _In" msgstr "Μεγέ_θυνση" #: ../src/vikwindow.c:3188 msgid "Zoom _Out" msgstr "Σ_μίκρυνση" #: ../src/vikwindow.c:3189 msgid "Zoom _To..." msgstr "" #: ../src/vikwindow.c:3190 msgid "Pan _North" msgstr "" #: ../src/vikwindow.c:3191 msgid "Pan _East" msgstr "" #: ../src/vikwindow.c:3192 msgid "Pan _South" msgstr "" #: ../src/vikwindow.c:3193 msgid "Pan _West" msgstr "" #: ../src/vikwindow.c:3194 msgid "Background _Jobs" msgstr "" #: ../src/vikwindow.c:3196 msgid "Cu_t" msgstr "Απ_οκοπή" #: ../src/vikwindow.c:3197 msgid "_Copy" msgstr "Αντι_γραφή" #: ../src/vikwindow.c:3198 msgid "_Paste" msgstr "Ε_πικόλληση" #: ../src/vikwindow.c:3199 msgid "_Delete" msgstr "_Διαγραφή" #: ../src/vikwindow.c:3200 msgid "Delete All" msgstr "Διαγραφή όλων" #: ../src/vikwindow.c:3201 msgid "_Flush Map Cache" msgstr "" #: ../src/vikwindow.c:3202 msgid "_Set the Default Location" msgstr "" #: ../src/vikwindow.c:3202 msgid "Set the Default Location to the current position" msgstr "" #: ../src/vikwindow.c:3203 msgid "_Preferences" msgstr "" #: ../src/vikwindow.c:3204 msgid "_Properties" msgstr "_Ιδιότητες" #: ../src/vikwindow.c:3207 msgid "_About" msgstr "_Περί" #: ../src/vikwindow.c:3213 msgid "_UTM Mode" msgstr "" #: ../src/vikwindow.c:3214 msgid "_Expedia Mode" msgstr "" #: ../src/vikwindow.c:3215 msgid "_Mercator Mode" msgstr "" #: ../src/vikwindow.c:3216 msgid "Lat_/Lon Mode" msgstr "" #: ../src/vikwindow.c:3220 msgid "Show _Scale" msgstr "" #: ../src/vikwindow.c:3220 msgid "Show Scale" msgstr "" #: ../src/vikwindow.c:3221 msgid "Show _Center Mark" msgstr "" #: ../src/vikwindow.c:3221 msgid "Show Center Mark" msgstr "" #: ../src/vikwindow.c:3222 msgid "Show _Highlight" msgstr "" #: ../src/vikwindow.c:3222 msgid "Show Highlight" msgstr "" #: ../src/vikwindow.c:3223 msgid "_Full Screen" msgstr "" #: ../src/vikwindow.c:3223 msgid "Activate full screen mode" msgstr "" #: ../src/vikwindow.c:3224 msgid "Show Side _Panel" msgstr "" #: ../src/vikwindow.c:3224 msgid "Show Side Panel" msgstr "" #: ../src/vikwindow.c:3225 msgid "Show Status_bar" msgstr "" #: ../src/vikwindow.c:3225 msgid "Show Statusbar" msgstr "" #: ../src/vikwindow.c:3226 msgid "Show _Toolbar" msgstr "" #: ../src/vikwindow.c:3226 msgid "Show Toolbar" msgstr "" #: ../src/vikwindow.c:3227 msgid "Show _Menu" msgstr "" #: ../src/vikwindow.c:3227 msgid "Show Menu" msgstr "" #: ../src/viking.desktop.in.h:2 msgid "GPS Data Manager" msgstr "" #: ../src/viking.desktop.in.h:3 msgid "Map Based GPS Data Manager (live data capable)." msgstr "" #: ../src/libjpeg/jpeg-data.c:206 msgid "Data does not follow JPEG specification." msgstr "" #: ../src/libjpeg/jpeg-data.c:291 #, c-format msgid "Path '%s' invalid." msgstr "" #: ../src/libjpeg/jpeg-data.c:309 #, c-format msgid "Could not read '%s'." msgstr "" viking-1.4.2/po/fr.po0000644000175000017500000025160412175546146011336 00000000000000# French translation for viking # msgid "" msgstr "" "Project-Id-Version: Viking\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-02-04 23:29+0100\n" "PO-Revision-Date: 2012-11-04 21:01+0000\n" "Last-Translator: Maxime Teixeira \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Launchpad-Export-Date: 2013-03-23 17:12+0000\n" "X-Generator: Launchpad (build 16540)\n" "Language: \n" "X-Poedit-Language: French\n" #: ../src/acquire.c:103 ../src/vikgpslayer.c:1185 msgid "Done." msgstr "Fait." #: ../src/acquire.c:114 msgid "No data." msgstr "Aucune donnée." #: ../src/acquire.c:154 ../src/acquire.c:404 msgid "Error: acquisition failed." msgstr "Erreur : échec d'acquisition" #: ../src/acquire.c:341 msgid "Working..." msgstr "Traitement..." #. This shouldn't happen... #: ../src/acquire.c:394 msgid "" "Unable to create command\n" "Acquire method failed." msgstr "" #: ../src/acquire.c:486 msgid "_Filter" msgstr "" #: ../src/acquire.c:501 #, c-format msgid "Filter with %s" msgstr "" #: ../src/acquire.c:518 msgid "Filter" msgstr "" #: ../src/background.c:52 #, c-format msgid "%d items" msgstr "%d éléments" #: ../src/background.c:248 msgid "Job" msgstr "Tâche" #: ../src/background.c:252 msgid "Progress" msgstr "Progression" #: ../src/background.c:268 msgid "Viking Background Jobs" msgstr "Tâches de fond" #: ../src/bing.c:47 msgid "Bing" msgstr "Bing" #. VIK_GTK_WINDOW_FROM_WIDGET(vp) #: ../src/bingmapsource.c:445 msgid "Bing attribution Loading" msgstr "" #: ../src/clipboard.c:95 msgid "paste failed" msgstr "collage échoué" #: ../src/clipboard.c:105 msgid "wrong clipboard data size" msgstr "taille du presse-papier incorrecte" #: ../src/clipboard.c:124 #, c-format msgid "" "The clipboard contains sublayer data for %s layers. You must select a layer " "of this type to paste the clipboard data." msgstr "" "Le presse-papier contient des données de sous-calque pour %s calques. Vous " "devez choisir un calque de ce type pour coller les données du presse-papier." #: ../src/clipboard.c:236 msgid "" "In order to paste a waypoint, please select an appropriate layer to paste " "into." msgstr "Pour copier un waypoint, sélectionner un calque approprié." #: ../src/dialog.c:52 msgid "Go to Lat/Lon" msgstr "Aller à Lat/Lon" #: ../src/dialog.c:64 ../src/dialog.c:251 msgid "Latitude:" msgstr "Latitude :" #: ../src/dialog.c:70 ../src/dialog.c:256 msgid "Longitude:" msgstr "Longitude :" #: ../src/dialog.c:102 msgid "Go to UTM" msgstr "Aller à une coordonnée UTM" #: ../src/dialog.c:115 msgid "Northing:" msgstr "Northing :" #: ../src/dialog.c:121 msgid "Easting:" msgstr "Easting :" #: ../src/dialog.c:128 msgid "Zone:" msgstr "Zone :" #: ../src/dialog.c:131 msgid "Letter:" msgstr "Lettre :" #: ../src/dialog.c:199 msgid "Waypoint Properties" msgstr "Propriétés du point d'intérêt" #: ../src/dialog.c:233 msgid "Name:" msgstr "Nom :" #: ../src/dialog.c:261 msgid "Altitude:" msgstr "Altitude :" #: ../src/dialog.c:266 msgid "Comment:" msgstr "Commentaire :" #: ../src/dialog.c:274 ../src/osm-traces.c:437 msgid "Description:" msgstr "Description :" #: ../src/dialog.c:277 msgid "Image:" msgstr "Image :" #: ../src/dialog.c:282 msgid "Symbol:" msgstr "Symbole :" #: ../src/dialog.c:291 msgid "(none)" msgstr "(aucun)" #. TODO: other checks (isalpha or whatever ) #: ../src/dialog.c:356 msgid "Please enter a name for the waypoint." msgstr "Entrez un nom pour le waypoint." #: ../src/dialog.c:529 ../src/geonamessearch.c:243 #: ../src/datasource_osm_my_traces.c:507 msgid "Nothing was selected" msgstr "Rien n'était sélectionné" #: ../src/dialog.c:537 msgid "Add Route" msgstr "" #: ../src/dialog.c:537 msgid "Add Track" msgstr "Ajouter une trace" #: ../src/dialog.c:545 msgid "Route Name:" msgstr "" #: ../src/dialog.c:545 msgid "Track Name:" msgstr "Nom de la trace :" #: ../src/dialog.c:565 msgid "Please enter a name for the track." msgstr "Entrez un nom pour la trace." #: ../src/dialog.c:623 msgid "Zoom Factors..." msgstr "Facteurs de zoom…" #: ../src/dialog.c:637 msgid "Zoom factor (in meters per pixel):" msgstr "Facteur de zoom (en mètres par pixel):" #: ../src/dialog.c:638 msgid "X (easting): " msgstr "X (est) " #: ../src/dialog.c:639 msgid "Y (northing): " msgstr "Y (nord) " #: ../src/dialog.c:644 msgid "X and Y zoom factors must be equal" msgstr "Les facteurs X et Y doivent être égaux" #: ../src/dialog.c:699 msgid "1 min" msgstr "1 minute" #: ../src/dialog.c:700 msgid "1 hour" msgstr "1 heure" #: ../src/dialog.c:701 msgid "1 day" msgstr "1 jour" #: ../src/dialog.c:702 msgid "Custom (in minutes):" msgstr "Personalisé (en minutes)" #: ../src/dialog.c:808 msgid "GPS Data and Topo Analyzer, Explorer, and Manager." msgstr "Analyse de topo, gestion de données GPS" #: ../src/dialog.c:809 msgid "" "This program is free software; you can redistribute it and/or modify it " "under the terms of the GNU General Public License as published by the Free " "Software Foundation; either version 2 of the License, or (at your option) " "any later version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT " "ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or " "FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for " "more details.\n" "\n" "You should have received a copy of the GNU General Public License along with " "this program; if not, write to the Free Software Foundation, Inc., 59 Temple " "Place, Suite 330, Boston, MA 02111-1307, USA" msgstr "" "Ce programme est un logiciel libre: vous pouvez le redistribuer et/ou le " "modifier selon les termes de la \"GNU General Public License\", tels que " "publiés par la \"Free Software Foundation\"; soit la version 2 de cette " "licence ou (à votre choix) toute version ultérieure.\n" "\n" "Ce programme est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE " "GARANTIE, ni explicite ni implicite; sans même les garanties de " "commercialisation ou d'adaptation dans un but spécifique.\n" "\n" "Se référer à la \"GNU General Public License\" pour plus de détails.\n" "\n" "Vous devriez avoir reçu une copie de la \"GNU General Public License\" en " "même temps que ce programme; sinon, écrivez a la \"Free Software Foundation, " "Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA\"" #: ../src/dialog.c:837 msgid "Translation is coordinated on http://launchpad.net/viking" msgstr "Les traductions sont coordonées sur http://launchpad.net/viking" #: ../src/dialog.c:845 msgid "Download along track" msgstr "Télécharger le long de la trace" #: ../src/dialog.c:851 msgid "Map type:" msgstr "Type de carte :" #: ../src/dialog.c:856 msgid "Zoom level:" msgstr "Niveau de zoom :" #: ../src/dialog.c:896 #, c-format msgid "The map data is licensed: %s." msgstr "La carte est soumise à licence : %s." #: ../src/dialog.c:899 #, c-format msgid "" "The data provided by '%s' are licensed under the following license: " "%s.\n" "Please, read the license before continuing." msgstr "" "Les données fournies par '%s' sont soumises à la licence %s.\n" "Merci de consulter la licence avant d'aller plus loin." #: ../src/dialog.c:904 msgid "Open license" msgstr "Ouvrir la licence" #: ../src/expedia.c:53 msgid "Expedia Street Maps" msgstr "Expedia Street Maps" #: ../src/expedia.c:81 msgid "Invalid expedia altitude" msgstr "Altitude invalide (expedia)" #: ../src/expedia.c:112 #, c-format msgid "" "Couldn't open EXPEDIA image file (right after successful download! Please " "report and delete image file!): %s" msgstr "" "Impossible d'ouvrir l'image EXPEDIA (juste après un téléchargement fructueux " "! Rapportez l'information et détruisez le fichier) : %s" #: ../src/expedia.c:125 #, c-format msgid "" "Couldn't save EXPEDIA image file (right after successful download! Please " "report and delete image file!): %s" msgstr "" "Impossible d'enregistrer l'image EXPEDIA (juste après un téléchargement " "fructueux ! Rapportez l'information et détruisez le fichier) : %s" #. * #. * See http://www.geonames.org/export/wikipedia-webservice.html#wikipediaBoundingBox #. #. Translators may wish to change this setting as appropriate to get Wikipedia articles in that language #: ../src/geonamessearch.c:46 msgid "en" msgstr "" #: ../src/geonamessearch.c:121 msgid "Search" msgstr "Rechercher" #: ../src/geonamessearch.c:123 msgid "No entries found!" msgstr "Aucune entrée trouvée !" #. NB could allow columns to be shifted around by doing this after each new #. gtk_tree_view_column_set_reorderable ( column, TRUE ); #. However I don't think is that useful, so I haven't put it in #: ../src/geonamessearch.c:177 ../src/datasource_osm_my_traces.c:425 msgid "Name" msgstr "" #: ../src/geonamessearch.c:182 msgid "Feature" msgstr "" #: ../src/geonamessearch.c:187 ../src/datasource_osm_my_traces.c:440 msgid "Lat/Lon" msgstr "" #: ../src/geonamessearch.c:269 ../src/googlesearch.c:100 msgid "couldn't map temp file" msgstr "Impossible d'ouvrir le fichier de carte" #: ../src/globals.c:44 msgid "Degree format:" msgstr "Format des degrées :" #: ../src/globals.c:48 msgid "Distance units:" msgstr "Unité de distance:" #: ../src/globals.c:52 msgid "Speed units:" msgstr "Unité de vitesse:" #: ../src/globals.c:56 msgid "Height units:" msgstr "Unité d'altitude:" #: ../src/globals.c:60 msgid "Use large waypoint icons:" msgstr "Utiliser de grandes icones pour les waypoints :" #: ../src/globals.c:64 msgid "Default latitude:" msgstr "Latitude par défaut:" #: ../src/globals.c:67 msgid "Default longitude:" msgstr "Longitude par défaut:" #: ../src/globals.c:73 msgid "Alphabetical" msgstr "" #: ../src/globals.c:73 ../src/datasource_osm_my_traces.c:435 msgid "Time" msgstr "" #: ../src/globals.c:76 msgid "KML File Export Units:" msgstr "" #: ../src/globals.c:77 msgid "GPX Track Order:" msgstr "" #: ../src/globals.c:82 msgid "Image Viewer:" msgstr "" #: ../src/globals.c:87 msgid "External GPX Program 1:" msgstr "" #: ../src/globals.c:88 msgid "External GPX Program 2:" msgstr "" #. Defaults for the options are setup here #: ../src/globals.c:96 msgid "General" msgstr "Général" #. New Tab #: ../src/globals.c:121 msgid "Export/External" msgstr "" #. Webtools #: ../src/google.c:36 msgid "Google" msgstr "Google" #: ../src/datasource_file.c:59 msgid "Import file with GPSBabel" msgstr "Importer un fichier avec GPSBabel" #: ../src/datasource_file.c:60 msgid "Imported file" msgstr "Fichier importé" #. The file selector #: ../src/datasource_file.c:133 msgid "File:" msgstr "Fichier :" #: ../src/datasource_file.c:134 msgid "File to import" msgstr "Fichier à importer" #: ../src/datasource_file.c:141 msgid "All files" msgstr "Tous les fichiers" #. The file format selector #: ../src/datasource_file.c:148 msgid "File type:" msgstr "Type de fichier :" #: ../src/datasource_file.c:193 #, c-format msgid "using babel args '%s' and file '%s'" msgstr "" #: ../src/datasource_gc.c:66 msgid "Download Geocaches" msgstr "Télécharger des Geocaches" #: ../src/datasource_gc.c:67 msgid "Geocaching.com Caches" msgstr "Caches geocaching.com" #: ../src/datasource_gc.c:84 msgid "geocaching.com username:" msgstr "Nom d'utilisateur geocaching.com :" #: ../src/datasource_gc.c:85 msgid "geocaching.com password:" msgstr "Mot de passe geocaching.com :" #: ../src/datasource_gc.c:126 #, c-format msgid "" "Can't find %s or %s in path! Check that you have installed it correctly." msgstr "" #: ../src/datasource_gc.c:188 msgid "Number geocaches:" msgstr "Nombre de geocaches :" #: ../src/datasource_gc.c:190 msgid "Centered around:" msgstr "Centré autour de :" #: ../src/datasource_gc.c:226 msgid "Broken input - using some defaults" msgstr "" #: ../src/datasource_geotag.c:51 msgid "Create Waypoints from Geotagged Images" msgstr "Créer des Waypoints à partir des images géolocalisées" #: ../src/datasource_geotag.c:52 msgid "Geotagged Images" msgstr "Images géolocalisées" #: ../src/datasource_geotag.c:102 ../src/vikwindow.c:2314 #: ../src/vikwindow.c:2382 ../src/vikwindow.c:2824 msgid "All" msgstr "Tous" #: ../src/datasource_geotag.c:107 ../src/vikwindow.c:2829 msgid "JPG" msgstr "JPG" #: ../src/datasource_geotag.c:165 #, c-format msgid "Unable to create waypoint from %s" msgstr "Impossible de créer de waypoint à partir de %s" #: ../src/datasource_google.c:49 ../src/datasource_google.c:50 msgid "Google Directions" msgstr "Directions Google" #: ../src/datasource_google.c:77 msgid "From:" msgstr "De :" #: ../src/datasource_google.c:79 msgid "To:" msgstr "À :" #: ../src/datasource_gps.c:57 msgid "Acquire from GPS" msgstr "Acquisition depuis le GPS" #: ../src/datasource_gps.c:58 msgid "Acquired from GPS" msgstr "Acquis depuis le GPS" #: ../src/datasource_gps.c:221 #, c-format msgid "using cmdline '%s' and file '%s'\n" msgstr "exécute la commande '%s' avec le fichier '%s'\n" #: ../src/datasource_gps.c:297 ../src/vikgpslayer.c:884 #, c-format msgid "Downloading %d waypoint..." msgid_plural "Downloading %d waypoints..." msgstr[0] "Téléchargement de %d point d'intérêt..." msgstr[1] "Téléchargement de %d points d'intérêt..." #: ../src/datasource_gps.c:298 ../src/vikgpslayer.c:885 #, c-format msgid "Downloading %d trackpoint..." msgid_plural "Downloading %d trackpoints..." msgstr[0] "Téléchargement de %d point de route..." msgstr[1] "Téléchargement de %d points de route..." #: ../src/datasource_gps.c:303 ../src/vikgpslayer.c:890 #, c-format msgid "Downloading %d routepoint..." msgid_plural "Downloading %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/datasource_gps.c:325 ../src/datasource_gps.c:326 #: ../src/datasource_gps.c:327 #, c-format msgid "Downloaded %d out of %d %s..." msgstr "%d sur %d %s téléchargés" #: ../src/datasource_gps.c:331 ../src/datasource_gps.c:332 #: ../src/datasource_gps.c:333 #, c-format msgid "Downloaded %d %s." msgstr "%d %s téléchargés" #: ../src/datasource_gps.c:347 ../src/vikgpslayer.c:968 #, c-format msgid "GPS Device: %s" msgstr "Appareil GPS : %s" #: ../src/datasource_gps.c:370 ../src/vikgpslayer.c:1042 #: ../src/vikgpslayer.c:1110 msgid "Status: Working..." msgstr "" #: ../src/datasource_gps.c:469 ../src/vikgpslayer.c:150 msgid "GPS Protocol:" msgstr "Protocole GPS :" #. List now assigned at runtime #: ../src/datasource_gps.c:488 ../src/vikgpslayer.c:151 msgid "Serial Port:" msgstr "Port série :" #: ../src/datasource_gps.c:509 msgid "" "Turn Off After Transfer\n" "(Garmin/NAViLink Only)" msgstr "" "Eteindre après transfert\n" "(Garmin/NAViLink seulement)" #: ../src/datasource_gps.c:512 msgid "Tracks:" msgstr "Tracks :" #: ../src/datasource_gps.c:516 msgid "Routes:" msgstr "" #: ../src/datasource_gps.c:520 msgid "Waypoints:" msgstr "Waypoints :" #: ../src/datasource_gps.c:594 ../src/vikgpslayer.c:1305 msgid "GPS device: N/A" msgstr "Appareil GPS : N/A" #: ../src/datasource_osm.c:52 ../src/datasource_osm.c:53 msgid "OSM traces" msgstr "Traces OSM" #: ../src/datasource_osm.c:80 msgid "Page number:" msgstr "Numéro de page :" #: ../src/datasource_osm_my_traces.c:63 ../src/datasource_osm_my_traces.c:64 msgid "OSM My Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:108 msgid "Username:" msgstr "" #: ../src/datasource_osm_my_traces.c:113 msgid "The email or username used to login to OSM" msgstr "" #: ../src/datasource_osm_my_traces.c:115 ../src/osm-traces.c:413 msgid "Password:" msgstr "Mot de passe :" #: ../src/datasource_osm_my_traces.c:120 msgid "The password used to login to OSM" msgstr "" #: ../src/datasource_osm_my_traces.c:430 msgid "Description" msgstr "" #: ../src/datasource_osm_my_traces.c:445 msgid "Privacy" msgstr "" #: ../src/datasource_osm_my_traces.c:452 msgid "Within Current View" msgstr "" #: ../src/datasource_osm_my_traces.c:518 msgid "GPS Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:520 msgid "None found!" msgstr "" #: ../src/datasource_osm_my_traces.c:629 msgid "My OSM Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:645 #, c-format msgid "Unable to get trace: %s" msgstr "" #: ../src/datasource_wikipedia.c:32 msgid "Create Waypoints from Wikipedia Articles" msgstr "" #: ../src/datasource_wikipedia.c:33 msgid "Wikipedia Waypoints" msgstr "" #: ../src/dem.c:65 ../src/dem.c:79 msgid "Invalid DEM" msgstr "DEM invalide" #: ../src/dem.c:121 msgid "Invalid DEM header" msgstr "Entête DEM invalide" #: ../src/dem.c:190 ../src/dem.c:203 msgid "Incorrect DEM Class B record: expected 1" msgstr "Enregistrement DEM Class B incorrect: la valeur devrait être 1" #: ../src/dem.c:360 #, c-format msgid "Couldn't map file %s: %s" msgstr "" #: ../src/download.c:112 msgid "Tile age (s):" msgstr "Ancienneté des tuiles (en secondes):" #: ../src/download.c:233 #, c-format msgid "Download error: %s" msgstr "Erreur de téléchargement : %s" #: ../src/download.c:313 msgid "couldn't open temp file" msgstr "Impossible d'ouvrir le fichier temporaire" #: ../src/file.c:456 ../src/file.c:461 #, c-format msgid "Draw mode '%s' no more supported" msgstr "Le mode d'affichage '%s' n'est plus supporté" #: ../src/geotag_exif.c:433 msgid "Not enough memory." msgstr "Mémoire insuffisante." #: ../src/geotag_exif.c:451 msgid "Setting a value for this tag is unsupported!" msgstr "" #: ../src/geotag_exif.c:470 #, c-format msgid "Too few components specified (need %d, found %d)\n" msgstr "" #: ../src/geotag_exif.c:474 msgid "Numeric value expected\n" msgstr "Valeur numérique attendue\n" #: ../src/geotag_exif.c:482 msgid "This shouldn't happen!" msgstr "" #: ../src/geotag_exif.c:552 msgid "Not yet implemented!" msgstr "Pas encore implémenté !" #: ../src/geotag_exif.c:565 msgid "Warning; Too many components specified!" msgstr "Attention; Trop de composants spécifiés !" #: ../src/osm-traces.c:73 msgid "Identifiable (public w/ timestamps)" msgstr "" "Identifiable (affiché dans la liste des traces et comme identifiable, points " "ordonnés avec les dates)" #: ../src/osm-traces.c:74 msgid "Trackable (private w/ timestamps)" msgstr "" "Pistable (partagé seulement anonymement, points ordonnés avec les dates)" #: ../src/osm-traces.c:75 msgid "Public" msgstr "Public" #: ../src/osm-traces.c:76 msgid "Private" msgstr "Privé" #: ../src/osm-traces.c:93 msgid "OSM username:" msgstr "Nom d'utilisateur OSM :" #: ../src/osm-traces.c:94 msgid "OSM password:" msgstr "Mot de passe OSM :" #. Preferences #: ../src/osm-traces.c:151 msgid "OpenStreetMap Traces" msgstr "Traces OpenStreetMap" #: ../src/osm-traces.c:234 #, c-format msgid "failed to upload data: HTTP response is %ld" msgstr "Impossible d'uploader : la réponse HTTP est %ld" #: ../src/osm-traces.c:239 #, c-format msgid "curl_easy_getinfo failed: %d" msgstr "curl_easy_getinfo a échoué : %d" #: ../src/osm-traces.c:244 #, c-format msgid "curl request failed: %s" msgstr "Échec lors de la requête curl : %s" #: ../src/osm-traces.c:275 #, c-format msgid "failed to open temporary file: %s" msgstr "Impossible d'ouvrir le fichier temporaire %s" #. Success #: ../src/osm-traces.c:328 msgid "Uploaded to OSM" msgstr "Envoyé à OSM" #: ../src/osm-traces.c:332 msgid "FAILED TO UPLOAD DATA TO OSM - CURL PROBLEM" msgstr "ERREUR D'ENVOI DES DONNEES VERS OSM - PROBLEME AVEC CURL" #: ../src/osm-traces.c:335 msgid "FAILED TO UPLOAD DATA TO OSM" msgstr "ERREUR D'ENVOI DES DONNEES VERS OSM" #: ../src/osm-traces.c:335 msgid "HTTP response code" msgstr "" #: ../src/osm-traces.c:348 #, c-format msgid "failed to unlink temporary file: %s" msgstr "Impossible de supprimer le fichier temporaire \"%s\"" #: ../src/osm-traces.c:387 msgid "OSM upload" msgstr "Émission vers OSM" #: ../src/osm-traces.c:405 msgid "Email:" msgstr "Email :" #: ../src/osm-traces.c:410 msgid "" "The email used as login\n" "Enter the email you use to login into www.openstreetmap.org." msgstr "" "Adresse e-mail ou nom d'utilisateur\n" "Entrer l'adresse e-mail ou le nom d'utilisateur que vous utilisez sur " "www.openstreetmap.org." #: ../src/osm-traces.c:418 msgid "" "The password used to login\n" "Enter the password you use to login into " "www.openstreetmap.org." msgstr "" "Mot de passe\n" "Entrer le mot de passe que vous utilisez sur " "www.openstreetmap.org." #: ../src/osm-traces.c:423 msgid "File's name:" msgstr "Nom du fichier :" #: ../src/osm-traces.c:433 msgid "" "The name of the file on OSM\n" "This is the name of the file created on the server.This is not the " "name of the local file." msgstr "" "Nom du fichier sur OSM\n" "Ceci est le nom du fichier créé sur le serveur OSM et non pas le nom " "du fichier local." #: ../src/osm-traces.c:442 msgid "The description of the trace" msgstr "Description de la trace" #: ../src/osm-traces.c:444 msgid "Tags:" msgstr "Étiquettes :" #: ../src/osm-traces.c:449 msgid "The tags associated to the trace" msgstr "Étiquettes associées à la trace" #: ../src/osm-traces.c:482 #, c-format msgid "Uploading %s to OSM" msgstr "Émission de %s vers OSM" #: ../src/mapcache.c:61 msgid "Map cache memory size (MB):" msgstr "" #: ../src/print.c:53 msgid "None" msgstr "Aucun" #: ../src/print.c:54 msgid "Horizontally" msgstr "Horizontalement" #: ../src/print.c:55 msgid "Vertically" msgstr "Verticalement" #: ../src/print.c:56 msgid "Both" msgstr "Les deux" #: ../src/print.c:120 msgid "Image Settings" msgstr "Paramètres de l'image" #: ../src/print.c:546 msgid "done" msgstr "terminé" #. Page Size #: ../src/print.c:575 msgid "_Adjust Page Size and Orientation" msgstr "_Ajuster la taille de l'orientation de la page" #: ../src/print.c:591 msgid "C_enter:" msgstr "C_entrer :" #. ignore page margins #: ../src/print.c:609 msgid "Ignore Page _Margins" msgstr "Ignorer les _marges de page" #: ../src/print.c:628 msgid "Image S_ize:" msgstr "Taille de l'_image :" #: ../src/util.c:81 msgid "Could not launch web browser." msgstr "Impossible de lancer le navigateur web." #: ../src/util.c:92 msgid "Could not create new email." msgstr "Impossible de créer un nouvel email." #: ../src/vikcoordlayer.c:46 msgid "Color:" msgstr "Couleur :" #: ../src/vikcoordlayer.c:47 msgid "Minutes Width:" msgstr "Écartement en minutes :" #: ../src/vikcoordlayer.c:48 msgid "Line Thickness:" msgstr "Épaisseur de la ligne :" #: ../src/vikcoordlayer.c:56 msgid "Coordinate" msgstr "" #: ../src/datasource_bfilter.c:46 msgid "Max number of points:" msgstr "Nombre maximum de points :" #: ../src/datasource_bfilter.c:60 msgid "Simplify All Tracks..." msgstr "Simplifie Toutes les Traces" #: ../src/datasource_bfilter.c:61 msgid "Simplified Tracks" msgstr "Simplifier les traces" #: ../src/datasource_bfilter.c:96 ../src/datasource_bfilter.c:97 msgid "Remove Duplicate Waypoints" msgstr "Supprimer les waypoints dupliqués" #: ../src/datasource_bfilter.c:129 msgid "Waypoints Inside This" msgstr "" #: ../src/datasource_bfilter.c:130 msgid "Polygonized Layer" msgstr "" #: ../src/datasource_bfilter.c:165 msgid "Waypoints Outside This" msgstr "" #: ../src/datasource_bfilter.c:166 msgid "Polygonzied Layer" msgstr "Calque polygonial" #: ../src/main.c:89 #, c-format msgid "Ignoring Xlib error: error code %d request code %d\n" msgstr "" #: ../src/main.c:102 msgid "Enable debug output" msgstr "Activer la sortie de débogage" #: ../src/main.c:103 msgid "Enable verbose output" msgstr "Autoriser le mode bavard sur la sortie" #: ../src/main.c:104 msgid "Show version" msgstr "Affiche la version" #: ../src/osm.c:106 msgid "On Disk OSM Tile Format" msgstr "" #: ../src/osm.c:121 msgid "OSM (view)" msgstr "OSM (voir)" #: ../src/osm.c:125 msgid "OSM (edit)" msgstr "OSM (éditer)" #: ../src/osm.c:129 msgid "OSM (render)" msgstr "OSM (recalculer)" #. Example: http://127.0.0.1:8111/load_and_zoom?left=8.19&right=8.20&top=48.605&bottom=48.590&select=node413602999 #. JOSM or merkaartor must already be running with remote interface enabled #: ../src/osm.c:136 msgid "Local port 8111 (eg JOSM)" msgstr "" #: ../src/preferences.c:285 msgid "Preferences" msgstr "Préférences" #: ../src/uibuilder.c:147 msgid "Take care that this password will be stored clearly in a plain file." msgstr "" "Attention, ce mot de passe sera stocké en clair dans un fichier teste." #: ../src/vikaggregatelayer.c:37 msgid "Aggregate" msgstr "" #: ../src/vikdemlayer.c:101 msgid "Absolute height" msgstr "Altitude absolue" #: ../src/vikdemlayer.c:102 msgid "Height gradient" msgstr "Gradient" #: ../src/vikdemlayer.c:118 msgid "DEM Files:" msgstr "Fichiers DEM :" #: ../src/vikdemlayer.c:119 msgid "Download Source:" msgstr "Télécharger à partir de :" #: ../src/vikdemlayer.c:120 msgid "Min Elev Color:" msgstr "Couleur Altitude minimale :" #: ../src/vikdemlayer.c:121 msgid "Type:" msgstr "Type:" #: ../src/vikdemlayer.c:122 msgid "Min Elev:" msgstr "Altitude minimale :" #: ../src/vikdemlayer.c:123 msgid "Max Elev:" msgstr "Altitude maximale :" #: ../src/vikdemlayer.c:134 msgid "_DEM Download" msgstr "" #: ../src/vikdemlayer.c:134 msgid "DEM Download" msgstr "" #: ../src/vikdemlayer.c:188 msgid "DEM" msgstr "" #: ../src/vikdemlayer.c:284 #, c-format msgid "Number of files: %d" msgstr "Nombre de fichiers : %d" #: ../src/vikdemlayer.c:385 msgid "DEM Loading" msgstr "Chargement DEM" #: ../src/vikdemlayer.c:889 #, c-format msgid "No SRTM data available for %f, %f" msgstr "Aucune donnée SRTM disponible pour %f, %f" #: ../src/vikdemlayer.c:1149 #, c-format msgid "Downloading DEM %s" msgstr "Téléchargement du DEM %s" #: ../src/vikfileentry.c:68 msgid "Browse..." msgstr "Parcourir…" #: ../src/vikfileentry.c:96 msgid "Choose file" msgstr "Sélectionner un fichier" #: ../src/vikfilelist.c:48 msgid "Choose file(s)" msgstr "Sélectionner un ou des fichiers" #: ../src/vikfilelist.c:172 msgid "Add..." msgstr "Ajouter…" #: ../src/vikfilelist.c:173 msgid "Delete" msgstr "Détruire" #: ../src/vikgeoreflayer.c:70 msgid "_Georef Move Map" msgstr "" #: ../src/vikgeoreflayer.c:70 msgid "Georef Move Map" msgstr "Déplacer la carte" #: ../src/vikgeoreflayer.c:77 msgid "Georef Z_oom Tool" msgstr "" #: ../src/vikgeoreflayer.c:77 msgid "Georef Zoom Tool" msgstr "Zoom" #: ../src/vikgeoreflayer.c:87 msgid "GeoRef Map" msgstr "" #: ../src/vikgeoreflayer.c:335 ../src/vikmapslayer.c:685 #, c-format msgid "Couldn't open image file: %s" msgstr "Impossible d'ouvrir le fichier : %s" #: ../src/vikgeoreflayer.c:365 msgid "Unexpected end of file reading World file." msgstr "Fin de fichier World inattendue." #: ../src/vikgeoreflayer.c:381 ../src/vikgeoreflayer.c:426 msgid "Choose World file" msgstr "Sélectionner un fichier World" #: ../src/vikgeoreflayer.c:394 msgid "The World file you requested could not be opened for reading." msgstr "Le fichier choisi ne peut être ouvert en lecture." #: ../src/vikgeoreflayer.c:439 msgid "The file you requested could not be opened for writing." msgstr "Le fichier choisi ne peut être ouvert en écriture." #: ../src/vikgeoreflayer.c:456 ../src/viklayer.c:480 msgid "Layer Properties" msgstr "Propriétés du calque" #: ../src/vikgeoreflayer.c:478 msgid "World File Parameters:" msgstr "Paramètres du fichier World :" #: ../src/vikgeoreflayer.c:479 msgid "Load From File..." msgstr "Chargement depuis un fichier…" #: ../src/vikgeoreflayer.c:484 msgid "Corner pixel easting:" msgstr "Pixel référence à l'est:" #: ../src/vikgeoreflayer.c:486 msgid "the UTM \"easting\" value of the upper-right corner pixel of the map" msgstr "Coordonnée UTM \"Est\" du pixel en haut à droite de la carte" #: ../src/vikgeoreflayer.c:488 msgid "Corner pixel northing:" msgstr "Pixel référence au nord:" #: ../src/vikgeoreflayer.c:490 msgid "the UTM \"northing\" value of the upper-right corner pixel of the map" msgstr "Coordonnée UTM \"Nord\" du pixel en haut à droite de la carte" #: ../src/vikgeoreflayer.c:492 msgid "X (easting) scale (mpp): " msgstr "Echelle X (est) (mpp) : " #: ../src/vikgeoreflayer.c:493 msgid "Y (northing) scale (mpp): " msgstr "Echelle Y (nord) (mètres par pixel): " #: ../src/vikgeoreflayer.c:496 msgid "the scale of the map in the X direction (meters per pixel)" msgstr "Echelle horizontale (X) de la carte (mètres par pixel):" #: ../src/vikgeoreflayer.c:498 msgid "the scale of the map in the Y direction (meters per pixel)" msgstr "Echelle verticale (Y) de la carte (mètres par pixel):" #: ../src/vikgeoreflayer.c:500 msgid "Map Image:" msgstr "Image carte :" #. Now with icons #: ../src/vikgeoreflayer.c:608 msgid "_Zoom to Fit Map" msgstr "_Zoomer sur la carte" #: ../src/vikgeoreflayer.c:614 msgid "_Goto Map Center" msgstr "_Aller au centre de la carte" #: ../src/vikgeoreflayer.c:620 msgid "_Export to World File" msgstr "_Exporter vers fichier World" #: ../src/vikgoto.c:75 msgid "No goto tool available." msgstr "Aucun outil Goto disponible." #: ../src/vikgoto.c:88 ../src/vikgoto.c:107 msgid "goto" msgstr "Aller à" #: ../src/vikgoto.c:90 msgid "I don't know that place. Do you want another goto?" msgstr "" "Je ne connais pas ce lieu. Souhaitez-vous faire une nouvelle recherche?" #: ../src/vikgoto.c:109 msgid "goto provider:" msgstr "Moteur de recherche:" #: ../src/vikgoto.c:124 msgid "Enter address or place name:" msgstr "Saisir une adresse ou un nom de lieu :" #: ../src/vikgpslayer.c:127 msgid "Data Mode" msgstr "" #: ../src/vikgpslayer.c:129 msgid "Realtime Tracking Mode" msgstr "" #: ../src/vikgpslayer.c:137 msgid "Keep vehicle at center" msgstr "" #: ../src/vikgpslayer.c:138 msgid "Keep vehicle on screen" msgstr "" #: ../src/vikgpslayer.c:139 msgid "Disable" msgstr "" #: ../src/vikgpslayer.c:152 msgid "Download Tracks:" msgstr "" #: ../src/vikgpslayer.c:153 msgid "Upload Tracks:" msgstr "" #: ../src/vikgpslayer.c:154 msgid "Download Routes:" msgstr "" #: ../src/vikgpslayer.c:155 msgid "Upload Routes:" msgstr "" #: ../src/vikgpslayer.c:156 msgid "Download Waypoints:" msgstr "" #: ../src/vikgpslayer.c:157 msgid "Upload Waypoints:" msgstr "" #: ../src/vikgpslayer.c:159 msgid "Recording tracks" msgstr "Enregistrement des traces" #: ../src/vikgpslayer.c:160 msgid "Jump to current position on start" msgstr "Avancer à la position courante au démarrage" #: ../src/vikgpslayer.c:161 msgid "Moving Map Method:" msgstr "Méthode de déplacement de la carte :" #: ../src/vikgpslayer.c:162 msgid "Gpsd Host:" msgstr "Hôte gpsd :" #: ../src/vikgpslayer.c:163 msgid "Gpsd Port:" msgstr "Port gpsd :" #: ../src/vikgpslayer.c:164 msgid "Gpsd Retry Interval (seconds):" msgstr "Interval de recherche de GPSD (secondes) :" #: ../src/vikgpslayer.c:179 msgid "GPS" msgstr "" #: ../src/vikgpslayer.c:242 ../src/vikgpslayer.c:1258 msgid "GPS Download" msgstr "Réception depuis GPS" #: ../src/vikgpslayer.c:242 ../src/vikgpslayer.c:1258 #: ../src/viktrwlayer.c:3094 msgid "GPS Upload" msgstr "Émission vers GPS" #: ../src/vikgpslayer.c:244 msgid "GPS Realtime Tracking" msgstr "Suivi en temps réel des traces GPS" #: ../src/vikgpslayer.c:451 msgid "Unknown GPS Protocol" msgstr "Protocole GPS inconnu" #: ../src/vikgpslayer.c:469 msgid "Unknown serial port device" msgstr "Port série inconnu" #: ../src/vikgpslayer.c:572 #, c-format msgid "%s: unknown parameter" msgstr "Paramètre inconnu : %s" #. Now with icons #: ../src/vikgpslayer.c:693 msgid "_Upload to GPS" msgstr "_Téléverser vers le GPS" #: ../src/vikgpslayer.c:699 msgid "Download from _GPS" msgstr "Télécharger depuis le _GPS" #: ../src/vikgpslayer.c:720 msgid "Empty _Realtime" msgstr "" #: ../src/vikgpslayer.c:727 msgid "E_mpty Upload" msgstr "Télé_versement vide" #: ../src/vikgpslayer.c:733 msgid "_Empty Download" msgstr "Ré_ception vide" #: ../src/vikgpslayer.c:739 msgid "Empty _All" msgstr "_Tout vider" #. #. NB It's not fatal if this gives 2 for example! Hence removal of the g_assert #. This happens when copied GPS layer is deleted (not sure why the number_handlers would be 2) #. I don't think there's any side effects and certainly better than the program just aborting #. #: ../src/vikgpslayer.c:756 #, c-format msgid "Unexpected number of disconnected handlers: %d" msgstr "" #: ../src/vikgpslayer.c:898 #, c-format msgid "Uploading %d waypoint..." msgid_plural "Uploading %d waypoints..." msgstr[0] "Envoie de %d point d'intérêt..." msgstr[1] "Envoie de %d points d'intérêt..." #: ../src/vikgpslayer.c:899 #, c-format msgid "Uploading %d trackpoint..." msgid_plural "Uploading %d trackpoints..." msgstr[0] "Envoie de %d point de route..." msgstr[1] "Envoie de %d points de route..." #: ../src/vikgpslayer.c:900 #, c-format msgid "Uploading %d routepoint..." msgid_plural "Uploading %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:925 #, c-format msgid "Downloaded %d out of %d waypoint..." msgid_plural "Downloaded %d out of %d waypoints..." msgstr[0] "%d sur %d position téléchargée…" msgstr[1] "%d sur %d positions téléchargées…" #: ../src/vikgpslayer.c:926 #, c-format msgid "Downloaded %d out of %d trackpoint..." msgid_plural "Downloaded %d out of %d trackpoints..." msgstr[0] "%d sur %d point de trace téléchargé…" msgstr[1] "%d sur %d points de trace téléchargés…" #: ../src/vikgpslayer.c:927 #, c-format msgid "Downloaded %d out of %d routepoint..." msgid_plural "Downloaded %d out of %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:932 #, c-format msgid "Uploaded %d out of %d waypoint..." msgid_plural "Uploaded %d out of %d waypoints..." msgstr[0] "%d sur %d waypoint émis…" msgstr[1] "%d sur %d waypoints émis…" #: ../src/vikgpslayer.c:933 #, c-format msgid "Uploaded %d out of %d trackpoint..." msgid_plural "Uploaded %d out of %d trackpoints..." msgstr[0] "%d sur %d point de trace émis…" msgstr[1] "%d sur %d points de trace émis…" #: ../src/vikgpslayer.c:934 #, c-format msgid "Uploaded %d out of %d routepoint..." msgid_plural "Uploaded %d out of %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:942 #, c-format msgid "Downloaded %d waypoint" msgid_plural "Downloaded %d waypoints" msgstr[0] "%d waypoint téléchargé" msgstr[1] "%d waypoints téléchargés" #: ../src/vikgpslayer.c:943 #, c-format msgid "Downloaded %d trackpoint" msgid_plural "Downloaded %d trackpoints" msgstr[0] "%d point de trace téléchargé" msgstr[1] "%d points de trace téléchargés" #: ../src/vikgpslayer.c:944 #, c-format msgid "Downloaded %d routepoint" msgid_plural "Downloaded %d routepoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:949 #, c-format msgid "Uploaded %d waypoint" msgid_plural "Uploaded %d waypoints" msgstr[0] "%d waypoint émis" msgstr[1] "%d waypoints émis" #: ../src/vikgpslayer.c:950 #, c-format msgid "Uploaded %d trackpoint" msgid_plural "Uploaded %d trackpoints" msgstr[0] "%d point de trace émis" msgstr[1] "%d points de trace émis" #: ../src/vikgpslayer.c:951 #, c-format msgid "Uploaded %d routepoint" msgid_plural "Uploaded %d routepoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:1180 msgid "Error: couldn't find gpsbabel." msgstr "Erreur: impossible de trouver gpsbabel." #: ../src/vikgpslayer.c:1269 msgid "Warning - GPS Upload items may overwrite each other" msgstr "" #: ../src/vikgpslayer.c:1301 msgid "Status: detecting gpsbabel" msgstr "Etat : détection gpsbabel en cours" #: ../src/vikgpslayer.c:1332 msgid "No GPS items selected for transfer." msgstr "" #: ../src/vikgpslayer.c:1347 msgid "Could not turn off device." msgstr "" #: ../src/vikgpslayer.c:1385 msgid "Are you sure you want to delete GPS Upload data?" msgstr "Etes-vous sûr de vouloir supprimer les données GPS envoyées ?" #: ../src/vikgpslayer.c:1398 msgid "Are you sure you want to delete GPS Download data?" msgstr "Etes-vous sûr de vouloir supprimer les données GPS téléchargées ?" #: ../src/vikgpslayer.c:1412 msgid "Are you sure you want to delete GPS Realtime data?" msgstr "Etes-vous sûr de vouloir supprimer les données GPS \"Realtime\" ?" #: ../src/vikgpslayer.c:1425 msgid "Are you sure you want to delete All GPS data?" msgstr "Etes-vous sûr de vouloir supprimer toutes les données GPS ?" #: ../src/viklayerspanel.c:55 msgid "/C_ut" msgstr "/Co_uper" #: ../src/viklayerspanel.c:56 msgid "/_Copy" msgstr "/Co_pier" #: ../src/viklayerspanel.c:57 msgid "/_Paste" msgstr "/C_oller" #: ../src/viklayerspanel.c:58 msgid "/_Delete" msgstr "/_Détruire" #: ../src/viklayerspanel.c:59 msgid "/New Layer" msgstr "/Nouveau calque" #: ../src/viklayerspanel.c:127 msgid "Top Layer" msgstr "Calque maître" #: ../src/viklayerspanel.c:143 msgid "Add new layer" msgstr "Ajouter un nouveau calque" #: ../src/viklayerspanel.c:150 msgid "Remove selected layer" msgstr "Supprimer le calque sélectionné" #: ../src/viklayerspanel.c:157 msgid "Move selected layer up" msgstr "Déplacer vers le haut le calque sélectionné" #: ../src/viklayerspanel.c:164 msgid "Move selected layer down" msgstr "Déplacer vers le bas le calque sélectionné" #: ../src/viklayerspanel.c:171 msgid "Cut selected layer" msgstr "Couper le calque sélectionné" #: ../src/viklayerspanel.c:178 msgid "Copy selected layer" msgstr "Copier le calque sélectionné" #: ../src/viklayerspanel.c:185 msgid "Paste layer below selected layer" msgstr "Coller le calque sous le calque sélectionné" #. TODO: FIXME: if name has a '/' in it it will get all messed up. why not have an itemfactory field with #. name, icon, shortcut, etc.? #: ../src/viklayerspanel.c:204 ../src/vikwindow.c:3292 #, c-format msgid "New _%s Layer" msgstr "" #: ../src/viklayerspanel.c:511 msgid "Aggregate Layers have no settable properties." msgstr "Les calques aggrégés n'ont pas de propriétés." #: ../src/viklayerspanel.c:555 msgid "You cannot cut the Top Layer." msgstr "Impossible de couper le calque maître" #: ../src/viklayerspanel.c:600 #, c-format msgid "Are you sure you want to delete %s?" msgstr "Êtes-vous sûr de vouloir supprimer %s ?" #: ../src/viklayerspanel.c:617 msgid "You cannot delete the Top Layer." msgstr "Impossible de supprimer le calque maître" #: ../src/viklayerspanel.c:701 msgid "Are you sure you wish to delete all layers?" msgstr "Voulez-vous vraiment supprimer tous les calques ?" #. ******* MAPZOOMS ******** #: ../src/vikmapslayer.c:91 msgid "Use Viking Zoom Level" msgstr "Utiliser le zoom courant" #: ../src/vikmapslayer.c:124 msgid "Map Type:" msgstr "Type de carte :" #: ../src/vikmapslayer.c:125 msgid "Maps Directory:" msgstr "Répertoire des cartes :" #: ../src/vikmapslayer.c:126 msgid "Alpha:" msgstr "Transparence :" #: ../src/vikmapslayer.c:127 msgid "Control the Alpha value for transparency effects" msgstr "" #: ../src/vikmapslayer.c:128 msgid "Autodownload maps:" msgstr "Téléchargement automatique :" #: ../src/vikmapslayer.c:129 msgid "Autodownload Only Gets Missing Maps:" msgstr "" #: ../src/vikmapslayer.c:130 msgid "" "Using this option avoids attempting to update already acquired tiles. This " "can be useful if you want to restrict the network usage, without having to " "resort to manual control. Only applies when 'Autodownload Maps' is on." msgstr "" #: ../src/vikmapslayer.c:131 msgid "Zoom Level:" msgstr "Zoom :" #: ../src/vikmapslayer.c:132 msgid "" "Determines the method of displaying map tiles for the current zoom level. " "'Viking Zoom Level' uses the best matching level, otherwise setting a fixed " "value will always use map tiles of the specified value regardless of the " "actual zoom level." msgstr "" #: ../src/vikmapslayer.c:146 msgid "_Maps Download" msgstr "" #: ../src/vikmapslayer.c:146 msgid "Maps Download" msgstr "Téléchargement des cartes" #: ../src/vikmapslayer.c:161 msgid "Map" msgstr "Carte" #: ../src/vikmapslayer.c:249 msgid "Default maplayer directory:" msgstr "Dossier contenant les cartes :" #: ../src/vikmapslayer.c:249 msgid "Choose a directory to store cached Map tiles for this layer" msgstr "" #: ../src/vikmapslayer.c:505 msgid "Unknown map type" msgstr "Type de carte inconnu" #: ../src/vikmapslayer.c:516 msgid "Unknown Map Zoom" msgstr "Zoom de carte inconnu" #: ../src/vikmapslayer.c:589 #, c-format msgid "" "New map cannot be displayed in the current drawmode.\n" "Select \"%s\" from View menu to view it." msgstr "" "La nouvelle carte ne peut pas être affichée avec le mode actuel.\n" "Sélectionner \"%s\" dans le menu Vue pour voir cette carte." #: ../src/vikmapslayer.c:753 #, c-format msgid "" "Cowardly refusing to draw tiles or existence of tiles beyond %d zoom out " "factor" msgstr "Impossible d'afficher des cases en dessous du facteur de zoom %d." #: ../src/vikmapslayer.c:1157 #, c-format msgid "Redownloading up to %d %s map..." msgid_plural "Redownloading up to %d %s maps..." msgstr[0] "" msgstr[1] "" #: ../src/vikmapslayer.c:1159 #, c-format msgid "Redownloading %d %s map..." msgid_plural "Redownloading %d %s maps..." msgstr[0] "" msgstr[1] "" #: ../src/vikmapslayer.c:1163 ../src/vikmapslayer.c:1238 #, c-format msgid "Downloading %d %s map..." msgid_plural "Downloading %d %s maps..." msgstr[0] "Téléchargement de %d carte %s…" msgstr[1] "Téléchargement de %d cartes %s…" #: ../src/vikmapslayer.c:1311 #, c-format msgid "" "\n" "Source: %s\n" "\n" "Tile File: %s\n" "Tile File Timestamp: %s" msgstr "" #: ../src/vikmapslayer.c:1318 #, c-format msgid "" "Source: %s\n" "\n" "No Tile File!" msgstr "" #: ../src/vikmapslayer.c:1356 msgid "Redownload _Bad Map(s)" msgstr "Retélécharger les _mauvaises cartes" #: ../src/vikmapslayer.c:1360 msgid "Redownload _New Map(s)" msgstr "Retélécharger les _nouvelles cartes" #: ../src/vikmapslayer.c:1364 msgid "Redownload _All Map(s)" msgstr "Retélécharger _toutes les cartes" #: ../src/vikmapslayer.c:1368 msgid "_Show Tile Information" msgstr "" #: ../src/vikmapslayer.c:1449 #, c-format msgid "" "Wrong drawmode for this map.\n" "Select \"%s\" from View menu and try again." msgstr "" "Mauvais mode d'affichage pour cette carte.\n" "Sélectionner \"%s\" dans le menu Vue et re-essayer." #: ../src/vikmapslayer.c:1454 msgid "Wrong zoom level for this map." msgstr "Mauvais niveau de zoom pour cette carte." #. Now with icons #: ../src/vikmapslayer.c:1485 msgid "Download _Missing Onscreen Maps" msgstr "Télécharger les cartes _manquantes à l'écran" #: ../src/vikmapslayer.c:1492 msgid "Download _New Onscreen Maps" msgstr "Télécharger les _nouvelles cartes à l'écran" #: ../src/vikmapslayer.c:1499 msgid "Reload _All Onscreen Maps" msgstr "R_afraîchir toutes les cartes à l'écran" #: ../src/viktreeview.c:263 msgid "Layer Name" msgstr "Nom du calque" #: ../src/viktreeview.c:742 #, c-format msgid "delete data from %s\n" msgstr "Suppression des données de %s\n" #: ../src/viktrwlayer.c:377 msgid "Create _Waypoint" msgstr "" #: ../src/viktrwlayer.c:377 msgid "Create Waypoint" msgstr "Créer un waypoint" #: ../src/viktrwlayer.c:383 msgid "Create _Track" msgstr "" #: ../src/viktrwlayer.c:383 msgid "Create Track" msgstr "Créer une trace" #: ../src/viktrwlayer.c:392 msgid "Create _Route" msgstr "" #: ../src/viktrwlayer.c:392 msgid "Create Route" msgstr "" #: ../src/viktrwlayer.c:401 msgid "_Edit Waypoint" msgstr "" #: ../src/viktrwlayer.c:401 msgid "Edit Waypoint" msgstr "Éditer un waypoint" #: ../src/viktrwlayer.c:409 msgid "Edit Trac_kpoint" msgstr "" #: ../src/viktrwlayer.c:409 msgid "Edit Trackpoint" msgstr "Éditer un point de trace" #: ../src/viktrwlayer.c:417 msgid "Show P_icture" msgstr "" #: ../src/viktrwlayer.c:417 msgid "Show Picture" msgstr "Afficher une image" #: ../src/viktrwlayer.c:424 msgid "Route _Finder" msgstr "" #: ../src/viktrwlayer.c:424 msgid "Route Finder" msgstr "" #. ***** PARAMETERS ***** #: ../src/viktrwlayer.c:447 ../src/viktrwlayer.c:1942 #: ../src/viktrwlayer.c:1944 msgid "Waypoints" msgstr "Waypoints" #: ../src/viktrwlayer.c:447 ../src/viktrwlayer.c:1933 #: ../src/viktrwlayer.c:1935 msgid "Tracks" msgstr "Traces" #: ../src/viktrwlayer.c:447 msgid "Waypoint Images" msgstr "Format des waypoints" #: ../src/viktrwlayer.c:450 msgid "Draw by Track" msgstr "Afficher par trace" #: ../src/viktrwlayer.c:450 msgid "Draw by Speed" msgstr "" #: ../src/viktrwlayer.c:450 msgid "All Tracks Same Color" msgstr "" #: ../src/viktrwlayer.c:451 msgid "Filled Square" msgstr "Carré plein" #: ../src/viktrwlayer.c:451 msgid "Square" msgstr "Carré" #: ../src/viktrwlayer.c:451 msgid "Circle" msgstr "Cercle" #: ../src/viktrwlayer.c:451 msgid "X" msgstr "X" #: ../src/viktrwlayer.c:477 msgid "Extra Extra Small" msgstr "" #: ../src/viktrwlayer.c:478 msgid "Extra Small" msgstr "" #: ../src/viktrwlayer.c:479 msgid "Small" msgstr "" #: ../src/viktrwlayer.c:480 msgid "Medium" msgstr "" #: ../src/viktrwlayer.c:481 msgid "Large" msgstr "" #: ../src/viktrwlayer.c:482 msgid "Extra Large" msgstr "" #: ../src/viktrwlayer.c:483 msgid "Extra Extra Large" msgstr "" #: ../src/viktrwlayer.c:491 msgid "Track Drawing Mode:" msgstr "Mode de tracé  :" #: ../src/viktrwlayer.c:492 msgid "All Tracks Color:" msgstr "" #: ../src/viktrwlayer.c:493 msgid "The color used when 'All Tracks Same Color' drawing mode is selected" msgstr "" #: ../src/viktrwlayer.c:494 msgid "Draw Track Lines" msgstr "Dessiner les lignes" #: ../src/viktrwlayer.c:495 msgid "Track Thickness:" msgstr "Épaisseur de la trace :" #: ../src/viktrwlayer.c:496 msgid "Draw Track Direction" msgstr "" #: ../src/viktrwlayer.c:497 msgid "Direction Size:" msgstr "" #: ../src/viktrwlayer.c:498 msgid "Draw Trackpoints" msgstr "Dessiner les points" #: ../src/viktrwlayer.c:499 msgid "Trackpoint Size:" msgstr "" #: ../src/viktrwlayer.c:500 msgid "Draw Elevation" msgstr "Représenter l'altitude" #: ../src/viktrwlayer.c:501 msgid "Draw Elevation Height %:" msgstr "%age de hauteur pour représenter l'altitude" #: ../src/viktrwlayer.c:503 msgid "Draw Stops" msgstr "Représenter les arrêts" #: ../src/viktrwlayer.c:504 msgid "" "Whether to draw a marker when trackpoints are at the same position but over " "the minimum stop length apart in time" msgstr "" #: ../src/viktrwlayer.c:505 msgid "Min Stop Length (seconds):" msgstr "Temps minimum d'arrêt (secondes) :" #: ../src/viktrwlayer.c:507 msgid "Track BG Thickness:" msgstr "Épaisseur de la ligne en arrière-plan :" #: ../src/viktrwlayer.c:508 msgid "Track Background Color" msgstr "Couleur de la ligne en arrière-plan" #: ../src/viktrwlayer.c:509 msgid "Draw by Speed Factor (%):" msgstr "" #: ../src/viktrwlayer.c:510 msgid "" "The percentage factor away from the average speed determining the color used" msgstr "" #: ../src/viktrwlayer.c:512 msgid "Draw Labels" msgstr "Dessiner les étiquettes" #: ../src/viktrwlayer.c:513 msgid "Waypoint Font Size:" msgstr "" #: ../src/viktrwlayer.c:514 msgid "Waypoint Color:" msgstr "Couleur :" #: ../src/viktrwlayer.c:515 msgid "Waypoint Text:" msgstr "Texte :" #: ../src/viktrwlayer.c:516 msgid "Background:" msgstr "Arrière-plan :" #: ../src/viktrwlayer.c:517 msgid "Fake BG Color Translucency:" msgstr "Transparence de la couleur d'arrière-plan :" #: ../src/viktrwlayer.c:518 msgid "Waypoint marker:" msgstr "Marqueur :" #: ../src/viktrwlayer.c:519 msgid "Waypoint size:" msgstr "Taille :" #: ../src/viktrwlayer.c:520 msgid "Draw Waypoint Symbols:" msgstr "Afficher les symboles :" #: ../src/viktrwlayer.c:522 msgid "Draw Waypoint Images" msgstr "Afficher les images :" #: ../src/viktrwlayer.c:523 msgid "Image Size (pixels):" msgstr "Taille de l'image (pixels) :" #: ../src/viktrwlayer.c:524 msgid "Image Alpha:" msgstr "Transparence :" #: ../src/viktrwlayer.c:525 msgid "Image Memory Cache Size:" msgstr "Taille du cache des images :" #: ../src/viktrwlayer.c:610 msgid "TrackWaypoint" msgstr "" #: ../src/viktrwlayer.c:1951 ../src/viktrwlayer.c:1953 msgid "Routes" msgstr "" #: ../src/viktrwlayer.c:2144 #, c-format msgid " in %d:%02d hrs:mins" msgstr " en %d:%02d h:min" #: ../src/viktrwlayer.c:2148 #, c-format msgid "" "\n" "%sTotal Length %.1f %s%s" msgstr "" #: ../src/viktrwlayer.c:2154 #, c-format msgid "Tracks: %d - Waypoints: %d - Routes: %d%s" msgstr "" #: ../src/viktrwlayer.c:2174 #, c-format msgid "Tracks: %d" msgstr "" #: ../src/viktrwlayer.c:2184 #, c-format msgid "Routes: %d" msgstr "" #: ../src/viktrwlayer.c:2215 #, c-format msgid "- %d:%02d hrs:mins" msgstr "" #: ../src/viktrwlayer.c:2223 #, c-format msgid "%s%.1f km %s" msgstr "" #: ../src/viktrwlayer.c:2226 #, c-format msgid "%s%.1f miles %s" msgstr "" #: ../src/viktrwlayer.c:2240 #, c-format msgid "Waypoints: %d" msgstr "" #: ../src/viktrwlayer.c:2266 #, c-format msgid "Trkpt: Alt %dft" msgstr "" #. VIK_UNITS_HEIGHT_METRES: #: ../src/viktrwlayer.c:2270 #, c-format msgid "Trkpt: Alt %dm" msgstr "" #. Compact date time format #: ../src/viktrwlayer.c:2277 #, c-format msgid " | Time %x %X" msgstr "" #: ../src/viktrwlayer.c:2295 #, c-format msgid " | Track: %s" msgstr "" #. Combine parts to make overall message #: ../src/viktrwlayer.c:2299 #, c-format msgid "%s%s | %s %s %s" msgstr "" #: ../src/viktrwlayer.c:2314 #, c-format msgid "Wpt: Alt %dft" msgstr "" #. VIK_UNITS_HEIGHT_METRES: #: ../src/viktrwlayer.c:2318 #, c-format msgid "Wpt: Alt %dm" msgstr "" #. Add comment if available #: ../src/viktrwlayer.c:2333 #, c-format msgid "%s | %s %s | Comment: %s" msgstr "" #: ../src/viktrwlayer.c:2335 #, c-format msgid "%s | %s %s" msgstr "" #: ../src/viktrwlayer.c:2563 ../src/viktrwlayer.c:2634 msgid "This layer has no waypoints or trackpoints." msgstr "Ce calque n'a pas de waypoints ou de traces." #: ../src/viktrwlayer.c:2661 ../src/vikwindow.c:2407 ../src/vikwindow.c:2848 #, c-format msgid "The file \"%s\" exists, do you wish to overwrite it?" msgstr "Le fichier \"%s\" existe déjà. Voulez-vous le remplacer ?" #: ../src/viktrwlayer.c:2671 ../src/vikwindow.c:2429 msgid "The filename you requested could not be opened for writing." msgstr "Le fichier choisi ne peut être ouvert en écriture." #: ../src/viktrwlayer.c:2676 ../src/viktrwlayer.c:2681 #: ../src/viktrwlayer.c:2691 ../src/viktrwlayer.c:2703 msgid "Export Layer" msgstr "Exporter le calque" #: ../src/viktrwlayer.c:2720 msgid "Could not create temporary file for export." msgstr "Impossible de créer de fichier temporaire pour l'export." #: ../src/viktrwlayer.c:2729 #, c-format msgid "Could not launch %s." msgstr "Impossible de charger %s." #: ../src/viktrwlayer.c:2773 msgid "Export Track as GPX" msgstr "Exporter la trace vers un fichier GPX" #: ../src/viktrwlayer.c:2795 msgid "Find" msgstr "Rechercher" #: ../src/viktrwlayer.c:2805 msgid "Waypoint Name:" msgstr "Nom du waypoint :" #: ../src/viktrwlayer.c:2822 msgid "Waypoint not found in this layer." msgstr "Aucun waypoint trouvé sur ce calque." #: ../src/viktrwlayer.c:3090 msgid "Can not upload invisible track." msgstr "" #: ../src/viktrwlayer.c:3192 ../src/viktrwlayer.c:7785 msgid "Track" msgstr "Trace" #: ../src/viktrwlayer.c:3215 ../src/viktrwlayer.c:7817 msgid "Route" msgstr "" #: ../src/viktrwlayer.c:3296 ../src/viktrwlayer.c:6265 #: ../src/viktrwlayer.c:6314 msgid "_Finish Route" msgstr "" #: ../src/viktrwlayer.c:3298 ../src/viktrwlayer.c:6223 #: ../src/viktrwlayer.c:6312 msgid "_Finish Track" msgstr "" #. Now with icons #: ../src/viktrwlayer.c:3310 msgid "_View Layer" msgstr "_Afficher Couche" #: ../src/viktrwlayer.c:3317 msgid "V_iew" msgstr "" #: ../src/viktrwlayer.c:3323 msgid "View All _Tracks" msgstr "" #: ../src/viktrwlayer.c:3328 msgid "View All _Routes" msgstr "" #: ../src/viktrwlayer.c:3333 msgid "View All _Waypoints" msgstr "" #: ../src/viktrwlayer.c:3338 msgid "_Goto Center of Layer" msgstr "_Aller au centre du calque" #: ../src/viktrwlayer.c:3344 ../src/viktrwlayer.c:6199 msgid "Goto _Waypoint..." msgstr "" #: ../src/viktrwlayer.c:3350 msgid "_Export Layer" msgstr "_Exporter le calque" #: ../src/viktrwlayer.c:3356 msgid "Export as GPS_Point..." msgstr "" #: ../src/viktrwlayer.c:3361 msgid "Export as GPS_Mapper..." msgstr "" #: ../src/viktrwlayer.c:3366 msgid "Export as _GPX..." msgstr "" #: ../src/viktrwlayer.c:3371 msgid "Export as _KML..." msgstr "" #: ../src/viktrwlayer.c:3376 msgid "Open with External Program_1: " msgstr "" #: ../src/viktrwlayer.c:3383 msgid "Open with External Program_2: " msgstr "" #: ../src/viktrwlayer.c:3391 ../src/vikwindow.c:3145 msgid "_New" msgstr "_Nouveau" #: ../src/viktrwlayer.c:3397 msgid "New _Waypoint..." msgstr "" #: ../src/viktrwlayer.c:3403 msgid "New _Track" msgstr "" #: ../src/viktrwlayer.c:3411 msgid "New _Route" msgstr "" #: ../src/viktrwlayer.c:3420 ../src/viktrwlayer.c:6597 msgid "Geotag _Images..." msgstr "" #: ../src/viktrwlayer.c:3427 msgid "_Acquire" msgstr "" #: ../src/viktrwlayer.c:3433 ../src/vikwindow.c:3150 msgid "From _GPS..." msgstr "À partir d'un _GPS..." #: ../src/viktrwlayer.c:3439 msgid "From Google _Directions..." msgstr "" #: ../src/viktrwlayer.c:3446 msgid "From _OSM Traces..." msgstr "" #: ../src/viktrwlayer.c:3451 msgid "From _My OSM Traces..." msgstr "" #: ../src/viktrwlayer.c:3459 ../src/vikwindow.c:3166 msgid "From _Wikipedia Waypoints" msgstr "" #: ../src/viktrwlayer.c:3465 msgid "Within _Layer Bounds" msgstr "A _l'intérieur du calque courant" #: ../src/viktrwlayer.c:3471 msgid "Within _Current View" msgstr "A l'intérieur de la vue _courrante" #: ../src/viktrwlayer.c:3479 msgid "From Geo_caching..." msgstr "" #: ../src/viktrwlayer.c:3486 ../src/vikwindow.c:3163 msgid "From Geotagged _Images..." msgstr "" #: ../src/viktrwlayer.c:3492 msgid "From _File..." msgstr "" #: ../src/viktrwlayer.c:3498 ../src/viktrwlayer.c:6542 msgid "_Upload" msgstr "" #: ../src/viktrwlayer.c:3504 msgid "Upload to _GPS..." msgstr "" #: ../src/viktrwlayer.c:3511 ../src/viktrwlayer.c:6570 msgid "Upload to _OSM..." msgstr "" #: ../src/viktrwlayer.c:3519 msgid "De_lete" msgstr "" #: ../src/viktrwlayer.c:3525 msgid "Delete All _Tracks" msgstr "" #: ../src/viktrwlayer.c:3531 msgid "Delete Tracks _From Selection..." msgstr "" #: ../src/viktrwlayer.c:3537 ../src/viktrwlayer.c:6290 msgid "Delete _All Routes" msgstr "" #: ../src/viktrwlayer.c:3543 ../src/viktrwlayer.c:6296 msgid "_Delete Routes From Selection..." msgstr "" #: ../src/viktrwlayer.c:3549 msgid "Delete All _Waypoints" msgstr "" #: ../src/viktrwlayer.c:3555 msgid "Delete Waypoints From _Selection..." msgstr "" #: ../src/viktrwlayer.c:4128 #, c-format msgid "Are you sure you want to delete all tracks in %s?" msgstr "" #: ../src/viktrwlayer.c:4138 #, c-format msgid "Are you sure you want to delete all routes in %s?" msgstr "" #: ../src/viktrwlayer.c:4148 #, c-format msgid "Are you sure you want to delete all waypoints in %s?" msgstr "" #: ../src/viktrwlayer.c:4165 #, c-format msgid "Are you sure you want to delete the waypoint \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4178 #, c-format msgid "Are you sure you want to delete the track \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4191 #, c-format msgid "Are you sure you want to delete the route \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4351 ../src/viktrwlayer.c:4922 msgid "" "Converting a track to a route removes extra track data such as segments, " "timestamps, etc...\n" "Do you want to continue?" msgstr "" #: ../src/viktrwlayer.c:4711 msgid "Failed. No other tracks with timestamps in this layer found" msgstr "" #: ../src/viktrwlayer.c:4713 msgid "Failed. No other tracks without timestamps in this layer found" msgstr "" #: ../src/viktrwlayer.c:4732 msgid "Merge with..." msgstr "Fusionner avec..." #: ../src/viktrwlayer.c:4733 msgid "Select route to merge with" msgstr "" #: ../src/viktrwlayer.c:4733 msgid "Select track to merge with" msgstr "Sélectionner la trace avec laquelle fusionner." #: ../src/viktrwlayer.c:4818 ../src/viktrwlayer.c:4895 msgid "Append Route" msgstr "" #: ../src/viktrwlayer.c:4818 ../src/viktrwlayer.c:4895 msgid "Append Track" msgstr "" #: ../src/viktrwlayer.c:4819 msgid "Select the route to append after the current route" msgstr "" #: ../src/viktrwlayer.c:4820 msgid "Select the track to append after the current track" msgstr "" #: ../src/viktrwlayer.c:4896 msgid "Select the track to append after the current route" msgstr "" #: ../src/viktrwlayer.c:4897 msgid "Select the route to append after the current track" msgstr "" #: ../src/viktrwlayer.c:4957 #, c-format msgid "%d segment merged" msgid_plural "%d segments merged" msgstr[0] "" msgstr[1] "" #: ../src/viktrwlayer.c:4973 msgid "Failed. This track does not have timestamp" msgstr "Echec. Cette trace n'a pas d'information de temps." #: ../src/viktrwlayer.c:4985 msgid "Failed. No other track in this layer has timestamp" msgstr "" "Echec. Aucune autre trace dans ce calque n'a d'information temporelle." #: ../src/viktrwlayer.c:4992 msgid "Merge Threshold..." msgstr "Distance de fusionnement…" #: ../src/viktrwlayer.c:4993 msgid "Merge when time between tracks less than:" msgstr "Fusionner quand le temps entre les points est moins que :" #: ../src/viktrwlayer.c:5128 msgid "Split Threshold..." msgstr "Distance de séparation…" #: ../src/viktrwlayer.c:5129 msgid "Split when time between trackpoints exceeds:" msgstr "Découper quand le temps entre les points dépasse :" #: ../src/viktrwlayer.c:5205 msgid "Split Every Nth Point" msgstr "" #: ../src/viktrwlayer.c:5206 msgid "Split on every Nth point:" msgstr "" #: ../src/viktrwlayer.c:5312 msgid "Can not split track as it has no segments" msgstr "" #: ../src/viktrwlayer.c:5340 ../src/viktrwlayer.c:5370 #, c-format msgid "Deleted %ld point" msgid_plural "Deleted %ld points" msgstr[0] "" msgstr[1] "" #: ../src/viktrwlayer.c:5531 msgid "Internal Error in vik_trw_layer_uniquify_tracks" msgstr "" #: ../src/viktrwlayer.c:5588 ../src/viktrwlayer.c:5635 #: ../src/viktrwlayer.c:5814 msgid "" "Multiple entries with the same name exist. This method only works with " "unique names. Force unique names now?" msgstr "" #: ../src/viktrwlayer.c:5599 msgid "No tracks found" msgstr "" #: ../src/viktrwlayer.c:5607 ../src/viktrwlayer.c:5654 #: ../src/viktrwlayer.c:5834 msgid "Delete Selection" msgstr "" #: ../src/viktrwlayer.c:5608 msgid "Select tracks to delete" msgstr "" #: ../src/viktrwlayer.c:5646 msgid "No routes found" msgstr "" #: ../src/viktrwlayer.c:5655 msgid "Select routes to delete" msgstr "" #: ../src/viktrwlayer.c:5761 msgid "Internal Error in vik_trw_layer_uniquify_waypoints" msgstr "" #: ../src/viktrwlayer.c:5824 msgid "No waypoints found" msgstr "" #: ../src/viktrwlayer.c:5835 msgid "Select waypoints to delete" msgstr "" #: ../src/viktrwlayer.c:5896 #, c-format msgid "" "A waypoint with the name \"%s\" already exists. Really rename to the same " "name?" msgstr "" #: ../src/viktrwlayer.c:5926 #, c-format msgid "" "A track with the name \"%s\" already exists. Really rename to the same name?" msgstr "" #: ../src/viktrwlayer.c:5963 #, c-format msgid "" "A route with the name \"%s\" already exists. Really rename to the same name?" msgstr "" #: ../src/viktrwlayer.c:6085 ../src/viktrwlayer.c:6337 msgid "_Goto" msgstr "_Aller à" #: ../src/viktrwlayer.c:6104 msgid "_Visit Geocache Webpage" msgstr "_Ouvrir la page web de Geocache" #: ../src/viktrwlayer.c:6123 msgid "_Show Picture..." msgstr "" #: ../src/viktrwlayer.c:6131 msgid "Update Geotag on _Image" msgstr "" #: ../src/viktrwlayer.c:6137 msgid "_Update" msgstr "" #: ../src/viktrwlayer.c:6142 msgid "Update and _Keep File Timestamp" msgstr "" #: ../src/viktrwlayer.c:6153 msgid "Visit _Webpage" msgstr "" #: ../src/viktrwlayer.c:6184 msgid "_New Waypoint..." msgstr "Nouveau Waypoint" #: ../src/viktrwlayer.c:6193 msgid "_View All Waypoints" msgstr "" #: ../src/viktrwlayer.c:6205 msgid "Delete _All Waypoints" msgstr "" #: ../src/viktrwlayer.c:6211 msgid "_Delete Waypoints From Selection..." msgstr "" #: ../src/viktrwlayer.c:6233 msgid "_View All Tracks" msgstr "" #: ../src/viktrwlayer.c:6239 msgid "_New Track" msgstr "" #: ../src/viktrwlayer.c:6247 msgid "Delete _All Tracks" msgstr "" #: ../src/viktrwlayer.c:6253 msgid "_Delete Tracks From Selection..." msgstr "" #: ../src/viktrwlayer.c:6276 msgid "_View All Routes" msgstr "" #: ../src/viktrwlayer.c:6282 msgid "_New Route" msgstr "" #: ../src/viktrwlayer.c:6327 msgid "_View Track" msgstr "_Voir Trace" #: ../src/viktrwlayer.c:6329 msgid "_View Route" msgstr "" #: ../src/viktrwlayer.c:6343 msgid "_Startpoint" msgstr "_Premier point" #: ../src/viktrwlayer.c:6349 msgid "\"_Center\"" msgstr "_Centre" #: ../src/viktrwlayer.c:6355 msgid "_Endpoint" msgstr "_Dernier point" #: ../src/viktrwlayer.c:6361 msgid "_Highest Altitude" msgstr "Plus _Haute Altitude" #: ../src/viktrwlayer.c:6367 msgid "_Lowest Altitude" msgstr "P_lus Basse Altitude" #: ../src/viktrwlayer.c:6375 msgid "_Maximum Speed" msgstr "Vitesse _Maximale" #: ../src/viktrwlayer.c:6384 msgid "Co_mbine" msgstr "" #: ../src/viktrwlayer.c:6392 msgid "_Merge By Time..." msgstr "" #: ../src/viktrwlayer.c:6397 msgid "Merge _Segments" msgstr "" #: ../src/viktrwlayer.c:6403 msgid "Merge _With Other Tracks..." msgstr "Fusionner _avec d'autre traces..." #: ../src/viktrwlayer.c:6409 msgid "_Append Track..." msgstr "" #: ../src/viktrwlayer.c:6411 msgid "_Append Route..." msgstr "" #: ../src/viktrwlayer.c:6417 msgid "Append _Route..." msgstr "" #: ../src/viktrwlayer.c:6419 msgid "Append _Track..." msgstr "" #: ../src/viktrwlayer.c:6426 msgid "_Split" msgstr "" #: ../src/viktrwlayer.c:6434 msgid "_Split By Time..." msgstr "" #. ATM always enable this entry - don't want to have to analyse the track before displaying the menu - to keep the menu speedy #: ../src/viktrwlayer.c:6440 msgid "Split Se_gments" msgstr "" #: ../src/viktrwlayer.c:6446 msgid "Split By _Number of Points..." msgstr "" #: ../src/viktrwlayer.c:6451 msgid "Split at _Trackpoint" msgstr "" #: ../src/viktrwlayer.c:6460 msgid "Delete Poi_nts" msgstr "" #: ../src/viktrwlayer.c:6466 msgid "Delete Points With The Same _Position" msgstr "" #: ../src/viktrwlayer.c:6471 msgid "Delete Points With The Same _Time" msgstr "" #: ../src/viktrwlayer.c:6477 msgid "_Reverse Track" msgstr "" #: ../src/viktrwlayer.c:6479 msgid "_Reverse Route" msgstr "" #: ../src/viktrwlayer.c:6488 msgid "Down_load Maps Along Track..." msgstr "Télécharger _les cartes le long de la trace…" #: ../src/viktrwlayer.c:6490 msgid "Down_load Maps Along Route..." msgstr "" #: ../src/viktrwlayer.c:6497 msgid "_Apply DEM Data" msgstr "_Appliquer les altitudes du DEM" #: ../src/viktrwlayer.c:6504 msgid "_Export Track as GPX..." msgstr "" #: ../src/viktrwlayer.c:6506 msgid "_Export Route as GPX..." msgstr "" #: ../src/viktrwlayer.c:6513 msgid "E_xtend Track End" msgstr "Etendre l'e_xtrémité de la trace" #: ../src/viktrwlayer.c:6515 msgid "E_xtend Route End" msgstr "" #: ../src/viktrwlayer.c:6522 msgid "C_onvert to a Route" msgstr "" #: ../src/viktrwlayer.c:6524 msgid "C_onvert to a Track" msgstr "" #: ../src/viktrwlayer.c:6532 msgid "Extend _Using Route Finder" msgstr "" #: ../src/viktrwlayer.c:6548 msgid "_Upload to GPS..." msgstr "" #: ../src/viktrwlayer.c:6559 msgid "_View Google Directions" msgstr "_Voir les indications de direction Google" #: ../src/viktrwlayer.c:6579 msgid "Use with _Filter" msgstr "Utiliser avec un _filtre" #: ../src/viktrwlayer.c:6612 msgid "_Edit Trackpoint" msgstr "" #: ../src/viktrwlayer.c:7524 #, c-format msgid " - Gain %dm:Loss %dm" msgstr "" #: ../src/viktrwlayer.c:7526 #, c-format msgid " - Gain %dft:Loss %dft" msgstr "" #: ../src/viktrwlayer.c:7531 #, c-format msgid " - Bearing %3.1f° - Step %s" msgstr "" #: ../src/viktrwlayer.c:8124 #, c-format msgid "Could not launch %s to open file." msgstr "" #: ../src/viktrwlayer.c:8205 #, c-format msgid "Creating %d Image Thumbnails..." msgstr "Création de %d miniatures…" #: ../src/viktrwlayer.c:8524 msgid "No map layer in use. Create one first" msgstr "Aucun calque de carte actif. Veuillez en créer un nouveau." #: ../src/viktrwlayer_propwin.c:898 ../src/viktrwlayer_propwin.c:1155 #, c-format msgid "%.1f kph" msgstr "" #: ../src/viktrwlayer_propwin.c:901 ../src/viktrwlayer_propwin.c:1158 #, c-format msgid "%.1f mph" msgstr "" #: ../src/viktrwlayer_propwin.c:904 ../src/viktrwlayer_propwin.c:1161 #, c-format msgid "%.1f knots" msgstr "" #. VIK_UNITS_SPEED_METRES_PER_SECOND: #: ../src/viktrwlayer_propwin.c:908 ../src/viktrwlayer_propwin.c:1165 #, c-format msgid "%.1f m/s" msgstr "" #: ../src/viktrwlayer_propwin.c:1745 #, c-format msgid "%.1f miles" msgstr "" #: ../src/viktrwlayer_propwin.c:1747 #, c-format msgid "%.1f km" msgstr "" #: ../src/viktrwlayer_propwin.c:2681 msgid "Failed spliting track. Track unchanged" msgstr "Impossible de séparer la trace, qui n'a pas été modifiée." #: ../src/viktrwlayer_propwin.c:2779 ../src/viktrwlayer_propwin.c:3178 #, c-format msgid "%s - Track Properties" msgstr "%s - Propriétés de la trace" #: ../src/viktrwlayer_propwin.c:2784 msgid "Split at _Marker" msgstr "" #: ../src/viktrwlayer_propwin.c:2785 msgid "Split _Segments" msgstr "" #: ../src/viktrwlayer_propwin.c:2786 msgid "_Reverse" msgstr "" #: ../src/viktrwlayer_propwin.c:2787 msgid "_Delete Dupl." msgstr "" #: ../src/viktrwlayer_propwin.c:2813 msgid "Comment:" msgstr "Commentaire :" #: ../src/viktrwlayer_propwin.c:2814 msgid "Description:" msgstr "" #: ../src/viktrwlayer_propwin.c:2815 msgid "Track Length:" msgstr "Longueur :" #: ../src/viktrwlayer_propwin.c:2816 msgid "Trackpoints:" msgstr "Nombre de points :" #: ../src/viktrwlayer_propwin.c:2817 msgid "Segments:" msgstr "Segments :" #: ../src/viktrwlayer_propwin.c:2818 msgid "Duplicate Points:" msgstr "Points dupliqués :" #: ../src/viktrwlayer_propwin.c:2819 msgid "Max Speed:" msgstr "Vitesse maximale :" #: ../src/viktrwlayer_propwin.c:2820 msgid "Avg. Speed:" msgstr "Vitesse moyenne :" #: ../src/viktrwlayer_propwin.c:2821 msgid "Moving Avg. Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:2822 msgid "Avg. Dist. Between TPs:" msgstr "Distance moyenne entre points :" #: ../src/viktrwlayer_propwin.c:2823 msgid "Elevation Range:" msgstr "Altitudes atteintes :" #: ../src/viktrwlayer_propwin.c:2824 msgid "Total Elevation Gain/Loss:" msgstr "Dénivelé total :" #: ../src/viktrwlayer_propwin.c:2825 msgid "Start:" msgstr "Départ :" #: ../src/viktrwlayer_propwin.c:2826 msgid "End:" msgstr "Arrivée :" #: ../src/viktrwlayer_propwin.c:2827 msgid "Duration:" msgstr "Durée :" #: ../src/viktrwlayer_propwin.c:2828 msgid "Color:" msgstr "" #: ../src/viktrwlayer_propwin.c:2877 ../src/viktrwlayer_propwin.c:2901 #: ../src/viktrwlayer_propwin.c:2929 ../src/viktrwlayer_propwin.c:2966 #: ../src/viktrwlayer_propwin.c:2984 ../src/viktrwlayer_propwin.c:3034 #: ../src/viktrwlayer_propwin.c:3035 ../src/viktrwlayer_propwin.c:3036 #: ../src/viktrwlayer_propwin.c:3062 ../src/viktrwlayer_propwin.c:3063 #: ../src/viktrwlayer_propwin.c:3078 ../src/viktrwlayer_propwin.c:3079 #: ../src/viktrwlayer_propwin.c:3092 ../src/viktrwlayer_propwin.c:3093 #: ../src/viktrwlayer_propwin.c:3106 ../src/viktrwlayer_propwin.c:3107 #: ../src/viktrwlayer_propwin.c:3120 ../src/viktrwlayer_propwin.c:3121 #: ../src/viktrwlayer_propwin.c:3134 ../src/viktrwlayer_propwin.c:3135 #, c-format msgid "No Data" msgstr "Pas de données" #: ../src/viktrwlayer_propwin.c:3031 #, c-format msgid "%d minutes" msgstr "%d minutes" #: ../src/viktrwlayer_propwin.c:3058 msgid "Statistics" msgstr "Statistiques" #: ../src/viktrwlayer_propwin.c:3064 msgid "Show D_EM" msgstr "" #: ../src/viktrwlayer_propwin.c:3065 ../src/viktrwlayer_propwin.c:3080 #: ../src/viktrwlayer_propwin.c:3094 ../src/viktrwlayer_propwin.c:3136 msgid "Show _GPS Speed" msgstr "" #: ../src/viktrwlayer_propwin.c:3067 ../src/viktrwlayer_propwin.c:3082 #: ../src/viktrwlayer_propwin.c:3110 ../src/viktrwlayer_propwin.c:3138 msgid "Track Distance:" msgstr "" "Copy text \t\r\n" "Distance de la trace :" #: ../src/viktrwlayer_propwin.c:3068 ../src/viktrwlayer_propwin.c:3125 msgid "Track Height:" msgstr "" #: ../src/viktrwlayer_propwin.c:3073 msgid "Elevation-distance" msgstr "Dénivelée/distance" #: ../src/viktrwlayer_propwin.c:3083 msgid "Track Gradient:" msgstr "" #: ../src/viktrwlayer_propwin.c:3087 msgid "Gradient-distance" msgstr "" #: ../src/viktrwlayer_propwin.c:3096 ../src/viktrwlayer_propwin.c:3111 #: ../src/viktrwlayer_propwin.c:3124 msgid "Track Time:" msgstr "Durée de la trace :" #: ../src/viktrwlayer_propwin.c:3097 ../src/viktrwlayer_propwin.c:3139 msgid "Track Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:3101 msgid "Speed-time" msgstr "Vitesse/temps" #: ../src/viktrwlayer_propwin.c:3108 ../src/viktrwlayer_propwin.c:3122 msgid "Show S_peed" msgstr "" #: ../src/viktrwlayer_propwin.c:3115 msgid "Distance-time" msgstr "" #: ../src/viktrwlayer_propwin.c:3129 msgid "Elevation-time" msgstr "" #: ../src/viktrwlayer_propwin.c:3143 msgid "Speed-distance" msgstr "" #: ../src/viktrwlayer_tpwin.c:118 msgid "Part of Track:" msgstr "Trace :" #: ../src/viktrwlayer_tpwin.c:119 msgid "Latitude:" msgstr "Latitude :" #: ../src/viktrwlayer_tpwin.c:120 msgid "Longitude:" msgstr "Longitude :" #: ../src/viktrwlayer_tpwin.c:121 msgid "Altitude:" msgstr "Altitude :" #: ../src/viktrwlayer_tpwin.c:122 msgid "Timestamp:" msgstr "Timestamp :" #: ../src/viktrwlayer_tpwin.c:123 msgid "Time:" msgstr "Heure :" #: ../src/viktrwlayer_tpwin.c:124 msgid "Distance Difference:" msgstr "Distance :" #: ../src/viktrwlayer_tpwin.c:125 msgid "Time Difference:" msgstr "Temps :" #: ../src/viktrwlayer_tpwin.c:126 msgid "\"Speed\" Between:" msgstr "Vitesse :" #: ../src/viktrwlayer_tpwin.c:127 msgid "VDOP:" msgstr "VDOP:" #: ../src/viktrwlayer_tpwin.c:128 msgid "HDOP:" msgstr "HDOP:" #: ../src/viktrwlayer_tpwin.c:129 msgid "PDOP:" msgstr "PDOP:" #: ../src/viktrwlayer_tpwin.c:130 msgid "SAT/FIX:" msgstr "SAT/FIX:" #: ../src/viktrwlayer_tpwin.c:139 msgid "Trackpoint" msgstr "Point de route" #: ../src/viktrwlayer_tpwin.c:142 msgid "_Insert After" msgstr "_Insérer Après" #: ../src/viktrwlayer_tpwin.c:144 msgid "Split Here" msgstr "Découper ici" #: ../src/viktrwlayer_geotag.c:446 #, c-format msgid "Geotagging %d Images..." msgstr "" #: ../src/viktrwlayer_geotag.c:510 msgid "Geotag Images" msgstr "" #: ../src/viktrwlayer_geotag.c:516 msgid "Images" msgstr "" #: ../src/viktrwlayer_geotag.c:520 msgid "Overwrite Existing Waypoints:" msgstr "" #: ../src/viktrwlayer_geotag.c:523 msgid "Overwrite Existing GPS Information:" msgstr "" #: ../src/viktrwlayer_geotag.c:525 msgid "Keep File Modification Timestamp:" msgstr "" #: ../src/viktrwlayer_geotag.c:555 msgid "Create Waypoints:" msgstr "" #: ../src/viktrwlayer_geotag.c:563 msgid "Write EXIF:" msgstr "" #: ../src/viktrwlayer_geotag.c:575 msgid "Interpolate Between Track Segments:" msgstr "" #: ../src/viktrwlayer_geotag.c:579 msgid "Image Time Offset (Seconds):" msgstr "" #: ../src/viktrwlayer_geotag.c:581 msgid "" "The number of seconds to ADD to the photos time to make it match the GPS " "data. Calculate this with (GPS - Photo). Can be negative or positive. Useful " "to adjust times when a camera's timestamp was incorrect." msgstr "" #: ../src/viktrwlayer_geotag.c:584 msgid "Image Timezone:" msgstr "" #: ../src/viktrwlayer_geotag.c:586 msgid "" "The timezone that was used when the images were created. For example, if a " "camera is set to AWST or +8:00 hours. Enter +8:00 here so that the correct " "adjustment to the images' time can be made. GPS data is always in UTC." msgstr "" #: ../src/viktrwlayer_geotag.c:590 #, c-format msgid "Using track: %s" msgstr "" #: ../src/viktrwlayer_geotag.c:592 #, c-format msgid "Using all tracks in: %s" msgstr "" #: ../src/vikstatus.c:105 msgid "Current zoom level. Click to select a new one." msgstr "" #: ../src/vikwaypoint.c:34 msgid "Waypoint" msgstr "" #. TODO get rid of this as this is unnecessary duplication... #: ../src/vikwindow.c:221 msgid "Pan" msgstr "Déplacer" #: ../src/vikwindow.c:221 msgid "Zoom" msgstr "Zoom" #: ../src/vikwindow.c:221 msgid "Ruler" msgstr "Règle" #: ../src/vikwindow.c:221 msgid "Select" msgstr "" #. Create tooltip #: ../src/vikwindow.c:440 msgid "Select zoom level" msgstr "" #: ../src/vikwindow.c:645 #, c-format msgid "" "Do you want to save the changes you made to the document \"%s\"?\n" "\n" "Your changes will be lost if you don't save them." msgstr "" "Voulez-vous enregistrer les changements fait au fichier \"%s\" ?\n" "\n" "Ces changements seront perdus si vous ne les enregistrez pas." #: ../src/vikwindow.c:649 msgid "Don't Save" msgstr "Ne pas enregistrer" #: ../src/vikwindow.c:696 msgid "mpp" msgstr "mètres par pixel" #: ../src/vikwindow.c:696 msgid "pixelfact" msgstr "" #: ../src/vikwindow.c:861 #, c-format msgid "%s %s %dm" msgstr "%s %s %dm" #: ../src/vikwindow.c:863 #, c-format msgid "%s %s %dft" msgstr "" #: ../src/vikwindow.c:866 #, c-format msgid "%s %s" msgstr "%s %s" #. NB Ctrl+Shift+R is used for Refresh (deemed more important), so use 'U' instead #: ../src/vikwindow.c:1254 msgid "_Ruler" msgstr "_Règle" #: ../src/vikwindow.c:1254 msgid "Ruler Tool" msgstr "Règle" #: ../src/vikwindow.c:1502 ../src/vikwindow.c:3138 msgid "_Zoom" msgstr "_Zoom" #: ../src/vikwindow.c:1502 msgid "Zoom Tool" msgstr "Outil de zoom" #: ../src/vikwindow.c:1547 ../src/vikwindow.c:3139 msgid "_Pan" msgstr "_Déplacer" #: ../src/vikwindow.c:1547 msgid "Pan Tool" msgstr "Outil de déplacement" #: ../src/vikwindow.c:1664 msgid "_Select" msgstr "" #: ../src/vikwindow.c:1664 msgid "Select Tool" msgstr "" #: ../src/vikwindow.c:1809 msgid "You must select a layer to show its properties." msgstr "Vous devez sélectionner un calque pour afficher ses propriétés" #. No error to show, so unlikely this will get called #: ../src/vikwindow.c:1824 msgid "The help system is not available." msgstr "" #. Main error path #: ../src/vikwindow.c:1827 #, c-format msgid "" "Help is not available because: %s.\n" "Ensure a Mime Type ghelp handler program is installed (e.g. yelp)." msgstr "" #: ../src/vikwindow.c:1850 msgid "You must select a layer to delete." msgstr "Vous devez sélectionner un calque à supprimer." #: ../src/vikwindow.c:2087 msgid "Untitled" msgstr "SansTitre" #: ../src/vikwindow.c:2194 #, c-format msgid "Unable to add '%s' to the list of recently used documents" msgstr "Impossible de rajouter '%s' à la liste des documents récents" #: ../src/vikwindow.c:2208 msgid "The file you requested could not be opened." msgstr "Le fichier choisi ne peut pas être ouvert." #: ../src/vikwindow.c:2211 msgid "" "GPSBabel is required to load files of this type or GPSBabel encountered " "problems." msgstr "" #: ../src/vikwindow.c:2214 #, c-format msgid "Unable to load malformed GPX file %s" msgstr "" #: ../src/vikwindow.c:2217 #, c-format msgid "Unsupported file type for %s" msgstr "" #. Since we can process .vik files with issues just show a warning in the status bar #. Not that a user can do much about it... or tells them what this issue is yet... #: ../src/vikwindow.c:2223 #, c-format msgid "WARNING: issues encountered loading %s" msgstr "" #: ../src/vikwindow.c:2278 msgid "Please select a GPS data file to open. " msgstr "Sélectionner un fichier GPS à ouvrir. " #: ../src/vikwindow.c:2288 msgid "Geocaching" msgstr "" #: ../src/vikwindow.c:2294 msgid "Google Earth" msgstr "" #: ../src/vikwindow.c:2299 msgid "GPX" msgstr "" #: ../src/vikwindow.c:2304 ../src/vikwindow.c:2387 #: ../src/viking.desktop.in.h:1 msgid "Viking" msgstr "Viking" #: ../src/vikwindow.c:2374 msgid "Save as Viking File." msgstr "Enregistrer en tant que fichier Viking." #. Try harder... #: ../src/vikwindow.c:2619 ../src/vikwindow.c:2625 msgid "Generating image file..." msgstr "" #: ../src/vikwindow.c:2647 msgid "" "Failed to generate internal image.\n" "\n" "Try creating a smaller image." msgstr "" #: ../src/vikwindow.c:2655 msgid "Failed to generate image file." msgstr "" #. Success #: ../src/vikwindow.c:2660 msgid "Image file generated." msgstr "" #: ../src/vikwindow.c:2764 msgid "" "Viewable region outside allowable pixel size bounds for image. Clipping " "width/height values." msgstr "" "La région visible est de taille supérieure à la taille maximale possible " "d'une image. La largeur et la longueur de l'image générée sont donc " "tronquées." #: ../src/vikwindow.c:2789 #, c-format msgid "Total area: %ldm x %ldm (%.3f sq. km)" msgstr "Surface totale %ldm x %ldm (%.3f km²)" #: ../src/vikwindow.c:2792 #, c-format msgid "Total area: %ldm x %ldm (%.3f sq. miles)" msgstr "" #: ../src/vikwindow.c:2813 msgid "Save Image" msgstr "Enregistrer l'image" #: ../src/vikwindow.c:2834 msgid "PNG" msgstr "" #: ../src/vikwindow.c:2857 msgid "You must be in UTM mode to use this feature" msgstr "Vous devez être en mode UTM pour utiliser cette fonctionalité" #: ../src/vikwindow.c:2862 msgid "Choose a directory to hold images" msgstr "Sélectionner un répertoire pour stocker les images" #. todo: default for answers inside VikWindow or static (thruout instance) #: ../src/vikwindow.c:2883 msgid "Save to Image File" msgstr "Enregistrer dans un fichier image" #: ../src/vikwindow.c:2900 msgid "Width (pixels):" msgstr "Largeur (pixels) :" #: ../src/vikwindow.c:2902 msgid "Height (pixels):" msgstr "Hauteur (pixels) :" #: ../src/vikwindow.c:2905 msgid "" "WARNING: USING LARGE IMAGES OVER 10000x10000\n" "MAY CRASH THE PROGRAM!" msgstr "" #: ../src/vikwindow.c:2907 msgid "Zoom (meters per pixel):" msgstr "Zoom (mètres par pixel) :" #: ../src/vikwindow.c:2921 msgid "Area in current viewable window" msgstr "Surface visible dans la fenêtre principale" #: ../src/vikwindow.c:2931 msgid "Save as PNG" msgstr "Enregistrer en tant que PNG" #: ../src/vikwindow.c:2932 msgid "Save as JPEG" msgstr "Enregistrer en tant que JPEG" #: ../src/vikwindow.c:2954 msgid "East-west image tiles:" msgstr "Nombre d'image est-ouest" #: ../src/vikwindow.c:2956 msgid "North-south image tiles:" msgstr "Nombre d'images nord-sud" #: ../src/vikwindow.c:3097 msgid "Choose a background color" msgstr "Choisir une couleur de fond" #: ../src/vikwindow.c:3113 msgid "Choose a track highlight color" msgstr "" #: ../src/vikwindow.c:3134 msgid "_File" msgstr "_Fichier" #: ../src/vikwindow.c:3135 msgid "_Edit" msgstr "É_dition" #: ../src/vikwindow.c:3136 msgid "_View" msgstr "_Vue" #: ../src/vikwindow.c:3137 msgid "_Show" msgstr "_Afficher" #: ../src/vikwindow.c:3140 msgid "_Layers" msgstr "_Calques" #: ../src/vikwindow.c:3141 msgid "_Tools" msgstr "_Outils" #: ../src/vikwindow.c:3142 msgid "_Webtools" msgstr "_Outils web" #: ../src/vikwindow.c:3143 ../src/vikwindow.c:3206 msgid "_Help" msgstr "Aid_e" #: ../src/vikwindow.c:3145 msgid "New file" msgstr "Nouveau fichier" #: ../src/vikwindow.c:3146 msgid "_Open..." msgstr "_Ouvrir..." #: ../src/vikwindow.c:3146 msgid "Open a file" msgstr "Ouvrir un fichier" #: ../src/vikwindow.c:3147 msgid "Open _Recent File" msgstr "Ouvrir un fichier _récent" #: ../src/vikwindow.c:3148 msgid "Append _File..." msgstr "Joindre un fichier..." #: ../src/vikwindow.c:3148 msgid "Append data from a different file" msgstr "Ajouter des données d'un autre fichier" #: ../src/vikwindow.c:3149 msgid "A_cquire" msgstr "_Récupérer" #: ../src/vikwindow.c:3150 msgid "Transfer data from a GPS device" msgstr "Récupérer des données d'un GPS" #: ../src/vikwindow.c:3151 msgid "Import File With GPS_Babel..." msgstr "" #: ../src/vikwindow.c:3151 msgid "Import file via GPSBabel converter" msgstr "" #: ../src/vikwindow.c:3153 msgid "Google _Directions..." msgstr "Itinéraires Google..." #: ../src/vikwindow.c:3153 msgid "Get driving directions from Google" msgstr "Obtenir des indications de conduite à partir de Google" #: ../src/vikwindow.c:3156 msgid "_OSM Traces..." msgstr "" #: ../src/vikwindow.c:3156 msgid "Get traces from OpenStreetMap" msgstr "" #: ../src/vikwindow.c:3157 msgid "_My OSM Traces..." msgstr "" #: ../src/vikwindow.c:3157 msgid "Get Your Own Traces from OpenStreetMap" msgstr "" #: ../src/vikwindow.c:3160 msgid "Geo_caches..." msgstr "" #: ../src/vikwindow.c:3160 msgid "Get Geocaches from geocaching.com" msgstr "Récupérer des Geocaches à partir de geocaching.com" #: ../src/vikwindow.c:3163 msgid "Create waypoints from geotagged images" msgstr "" #: ../src/vikwindow.c:3166 msgid "Create waypoints from Wikipedia items in the current view" msgstr "" #: ../src/vikwindow.c:3168 msgid "_Save" msgstr "_Enregistrer" #: ../src/vikwindow.c:3168 msgid "Save the file" msgstr "Enregistrer le fichier" #: ../src/vikwindow.c:3169 msgid "Save _As..." msgstr "Enregistrer _sous..." #: ../src/vikwindow.c:3169 msgid "Save the file under different name" msgstr "Enregistrer le fichier sous un nom différent" #: ../src/vikwindow.c:3170 msgid "_Generate Image File..." msgstr "Enregistrer dans un fichier _image..." #: ../src/vikwindow.c:3170 msgid "Save a snapshot of the workspace into a file" msgstr "Enregistre une copie d'écran dans un fichier" #: ../src/vikwindow.c:3171 msgid "Generate _Directory of Images..." msgstr "Générer un _répertoire d'images..." #: ../src/vikwindow.c:3171 msgid "FIXME:IMGDIR" msgstr "" #: ../src/vikwindow.c:3174 msgid "_Print..." msgstr "_Imprimer…" #: ../src/vikwindow.c:3174 msgid "Print maps" msgstr "Imprimer les cartes" #: ../src/vikwindow.c:3177 msgid "E_xit" msgstr "_Quitter" #: ../src/vikwindow.c:3177 msgid "Exit the program" msgstr "Quitter le programme" #: ../src/vikwindow.c:3178 msgid "Save and Exit" msgstr "Enregistrer et quitter" #: ../src/vikwindow.c:3178 msgid "Save and Exit the program" msgstr "Enregistrer et quitter le programme" #: ../src/vikwindow.c:3180 msgid "Go to the _Default Location" msgstr "Aller à la position par _défaut" #: ../src/vikwindow.c:3180 msgid "Go to the default location" msgstr "Aller à la position par _défaut" #: ../src/vikwindow.c:3181 msgid "Go to _Location..." msgstr "Aller à la _position..." #: ../src/vikwindow.c:3181 msgid "Go to address/place using text search" msgstr "Aller à une adresse/lieu en utilisant une recherche textuelle" #: ../src/vikwindow.c:3182 msgid "_Go to Lat/Lon..." msgstr "Choisir la _latitude/longitude…" #: ../src/vikwindow.c:3182 msgid "Go to arbitrary lat/lon coordinate" msgstr "Aller à une coordonnée lat/lon donnée" #: ../src/vikwindow.c:3183 msgid "Go to UTM..." msgstr "Choisir une coordonnée UTM…" #: ../src/vikwindow.c:3183 msgid "Go to arbitrary UTM coordinate" msgstr "Aller à une coordonnée UTM donnée" #: ../src/vikwindow.c:3184 msgid "_Refresh" msgstr "" #: ../src/vikwindow.c:3184 msgid "Refresh any maps displayed" msgstr "" #: ../src/vikwindow.c:3185 msgid "Set _Highlight Color..." msgstr "" #: ../src/vikwindow.c:3186 msgid "Set Bac_kground Color..." msgstr "Modifier la _couleur de fond…" #: ../src/vikwindow.c:3187 msgid "Zoom _In" msgstr "Zoom _avant" #: ../src/vikwindow.c:3188 msgid "Zoom _Out" msgstr "Zoom a_rrière" #: ../src/vikwindow.c:3189 msgid "Zoom _To..." msgstr "_Zoom…" #: ../src/vikwindow.c:3190 msgid "Pan _North" msgstr "Déplacer vers le _Nord" #: ../src/vikwindow.c:3191 msgid "Pan _East" msgstr "Déplacer vers l'_Est" #: ../src/vikwindow.c:3192 msgid "Pan _South" msgstr "Déplacer vers le _Sud" #: ../src/vikwindow.c:3193 msgid "Pan _West" msgstr "Déplacer vers l'_Ouest" #: ../src/vikwindow.c:3194 msgid "Background _Jobs" msgstr "Tâches de fond" #: ../src/vikwindow.c:3196 msgid "Cu_t" msgstr "Co_uper" #: ../src/vikwindow.c:3197 msgid "_Copy" msgstr "Co_pier" #: ../src/vikwindow.c:3198 msgid "_Paste" msgstr "C_oller" #: ../src/vikwindow.c:3199 msgid "_Delete" msgstr "_Effacer" #: ../src/vikwindow.c:3200 msgid "Delete All" msgstr "Tout effacer" #: ../src/vikwindow.c:3201 msgid "_Flush Map Cache" msgstr "Vider le cache des cartes" #: ../src/vikwindow.c:3202 msgid "_Set the Default Location" msgstr "_Fixer la position par défaut" #: ../src/vikwindow.c:3202 msgid "Set the Default Location to the current position" msgstr "Fixer la position par défaut à la position courante" #: ../src/vikwindow.c:3203 msgid "_Preferences" msgstr "_Préférences" #: ../src/vikwindow.c:3204 msgid "_Properties" msgstr "Propriétés" #: ../src/vikwindow.c:3207 msgid "_About" msgstr "À _propos" #: ../src/vikwindow.c:3213 msgid "_UTM Mode" msgstr "Mode _UTM" #: ../src/vikwindow.c:3214 msgid "_Expedia Mode" msgstr "Mode _Expedia" #: ../src/vikwindow.c:3215 msgid "_Mercator Mode" msgstr "Mode _Mercator" #: ../src/vikwindow.c:3216 msgid "Lat_/Lon Mode" msgstr "Mode Lat_/Lon" #: ../src/vikwindow.c:3220 msgid "Show _Scale" msgstr "Afficher _Echelle" #: ../src/vikwindow.c:3220 msgid "Show Scale" msgstr "Afficher l'échelle" #: ../src/vikwindow.c:3221 msgid "Show _Center Mark" msgstr "Afficher la croix _centrale" #: ../src/vikwindow.c:3221 msgid "Show Center Mark" msgstr "Afficher la croix centrale" #: ../src/vikwindow.c:3222 msgid "Show _Highlight" msgstr "" #: ../src/vikwindow.c:3222 msgid "Show Highlight" msgstr "" #: ../src/vikwindow.c:3223 msgid "_Full Screen" msgstr "_Plein écran" #: ../src/vikwindow.c:3223 msgid "Activate full screen mode" msgstr "Activer le mode plein écran" #: ../src/vikwindow.c:3224 msgid "Show Side _Panel" msgstr "Afficher _Panneau Latéral" #: ../src/vikwindow.c:3224 msgid "Show Side Panel" msgstr "Afficher le panneau latéral" #: ../src/vikwindow.c:3225 msgid "Show Status_bar" msgstr "Afficher la _barre de statut" #: ../src/vikwindow.c:3225 msgid "Show Statusbar" msgstr "Afficher la barre de statut" #: ../src/vikwindow.c:3226 msgid "Show _Toolbar" msgstr "" #: ../src/vikwindow.c:3226 msgid "Show Toolbar" msgstr "" #: ../src/vikwindow.c:3227 msgid "Show _Menu" msgstr "" #: ../src/vikwindow.c:3227 msgid "Show Menu" msgstr "" #: ../src/viking.desktop.in.h:2 msgid "GPS Data Manager" msgstr "Gestionnaire de données GPS" #: ../src/viking.desktop.in.h:3 msgid "Map Based GPS Data Manager (live data capable)." msgstr "" "Gestionnaire de données GPS basées sur des cartes (possibilité de données en " "direct)" #: ../src/libjpeg/jpeg-data.c:206 msgid "Data does not follow JPEG specification." msgstr "" #: ../src/libjpeg/jpeg-data.c:291 #, c-format msgid "Path '%s' invalid." msgstr "" #: ../src/libjpeg/jpeg-data.c:309 #, c-format msgid "Could not read '%s'." msgstr "" viking-1.4.2/po/ru.po0000644000175000017500000026667012175546146011366 00000000000000# Russian translation for viking # Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008 # This file is distributed under the same license as the viking package. # Dmitri Bogomolov <4glitch@gmail.com>, 2008-2011. # msgid "" msgstr "" "Project-Id-Version: viking\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-02-04 23:29+0100\n" "PO-Revision-Date: 2012-10-29 21:19+0000\n" "Last-Translator: Dmitri Bogomolov \n" "Language-Team: Russian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Launchpad-Export-Date: 2013-03-23 17:12+0000\n" "X-Generator: Launchpad (build 16540)\n" #: ../src/acquire.c:103 ../src/vikgpslayer.c:1185 msgid "Done." msgstr "Готово." #: ../src/acquire.c:114 msgid "No data." msgstr "Нет данных." #: ../src/acquire.c:154 ../src/acquire.c:404 msgid "Error: acquisition failed." msgstr "Ошибка: получение не удалось" #: ../src/acquire.c:341 msgid "Working..." msgstr "Выполняется..." #. This shouldn't happen... #: ../src/acquire.c:394 msgid "" "Unable to create command\n" "Acquire method failed." msgstr "" #: ../src/acquire.c:486 msgid "_Filter" msgstr "" #: ../src/acquire.c:501 #, c-format msgid "Filter with %s" msgstr "" #: ../src/acquire.c:518 msgid "Filter" msgstr "" #: ../src/background.c:52 #, c-format msgid "%d items" msgstr "%d элементов" #: ../src/background.c:248 msgid "Job" msgstr "Операция" #: ../src/background.c:252 msgid "Progress" msgstr "Ход выполнения" #: ../src/background.c:268 msgid "Viking Background Jobs" msgstr "Фоновые задачи" #: ../src/bing.c:47 msgid "Bing" msgstr "Bing" #. VIK_GTK_WINDOW_FROM_WIDGET(vp) #: ../src/bingmapsource.c:445 msgid "Bing attribution Loading" msgstr "" #: ../src/clipboard.c:95 msgid "paste failed" msgstr "ошибка вставки" #: ../src/clipboard.c:105 msgid "wrong clipboard data size" msgstr "неправильный размер буфера обмена" #: ../src/clipboard.c:124 #, c-format msgid "" "The clipboard contains sublayer data for %s layers. You must select a layer " "of this type to paste the clipboard data." msgstr "" "Буфер содержит данные подслоя для %s слоев. Вы должны выбрать слой этого " "типа, чтобы вставить данные из буфер обмена." #: ../src/clipboard.c:236 msgid "" "In order to paste a waypoint, please select an appropriate layer to paste " "into." msgstr "" "Для того, чтобы вставить точку, выберите соответствующий слой для вставки." #: ../src/dialog.c:52 msgid "Go to Lat/Lon" msgstr "Перейти к Широте/Долготе" #: ../src/dialog.c:64 ../src/dialog.c:251 msgid "Latitude:" msgstr "Широта:" #: ../src/dialog.c:70 ../src/dialog.c:256 msgid "Longitude:" msgstr "Долгота:" #: ../src/dialog.c:102 msgid "Go to UTM" msgstr "Перейти к UTM" #: ../src/dialog.c:115 msgid "Northing:" msgstr "Ничего:" #: ../src/dialog.c:121 msgid "Easting:" msgstr "Движение на восток:" #: ../src/dialog.c:128 msgid "Zone:" msgstr "Зона:" #: ../src/dialog.c:131 msgid "Letter:" msgstr "Письмо:" # Свойства пункта #: ../src/dialog.c:199 msgid "Waypoint Properties" msgstr "Свойства пункта" #: ../src/dialog.c:233 msgid "Name:" msgstr "Имя:" #: ../src/dialog.c:261 msgid "Altitude:" msgstr "Высота:" #: ../src/dialog.c:266 msgid "Comment:" msgstr "Комментарий:" #: ../src/dialog.c:274 ../src/osm-traces.c:437 msgid "Description:" msgstr "Описание:" #: ../src/dialog.c:277 msgid "Image:" msgstr "Изображение:" #: ../src/dialog.c:282 msgid "Symbol:" msgstr "Символ:" #: ../src/dialog.c:291 msgid "(none)" msgstr "(нет)" #. TODO: other checks (isalpha or whatever ) #: ../src/dialog.c:356 msgid "Please enter a name for the waypoint." msgstr "Введите имя для нового пункта." #: ../src/dialog.c:529 ../src/geonamessearch.c:243 #: ../src/datasource_osm_my_traces.c:507 msgid "Nothing was selected" msgstr "Ничего не выбрано" #: ../src/dialog.c:537 msgid "Add Route" msgstr "" #: ../src/dialog.c:537 msgid "Add Track" msgstr "Добавить маршрут" #: ../src/dialog.c:545 msgid "Route Name:" msgstr "" #: ../src/dialog.c:545 msgid "Track Name:" msgstr "Имя маршрута:" #: ../src/dialog.c:565 msgid "Please enter a name for the track." msgstr "Введите имя маршрута" #: ../src/dialog.c:623 msgid "Zoom Factors..." msgstr "Величины приближения..." #: ../src/dialog.c:637 msgid "Zoom factor (in meters per pixel):" msgstr "Величина приближения (в метрах на пиксел):" #: ../src/dialog.c:638 msgid "X (easting): " msgstr "X (восточнее): " #: ../src/dialog.c:639 msgid "Y (northing): " msgstr "Y (севернее): " #: ../src/dialog.c:644 msgid "X and Y zoom factors must be equal" msgstr "Величины приближения по X и по Y должны совпадать." #: ../src/dialog.c:699 msgid "1 min" msgstr "1 мин" #: ../src/dialog.c:700 msgid "1 hour" msgstr "1 час" #: ../src/dialog.c:701 msgid "1 day" msgstr "1 день" #: ../src/dialog.c:702 msgid "Custom (in minutes):" msgstr "Произвольно (в минутах)" #: ../src/dialog.c:808 msgid "GPS Data and Topo Analyzer, Explorer, and Manager." msgstr "Анализатор, обозреватель и менеджер данных GPS." #: ../src/dialog.c:809 msgid "" "This program is free software; you can redistribute it and/or modify it " "under the terms of the GNU General Public License as published by the Free " "Software Foundation; either version 2 of the License, or (at your option) " "any later version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT " "ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or " "FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for " "more details.\n" "\n" "You should have received a copy of the GNU General Public License along with " "this program; if not, write to the Free Software Foundation, Inc., 59 Temple " "Place, Suite 330, Boston, MA 02111-1307, USA" msgstr "" "Данная программа является свободным программным обеспечением; вы можете " "распространять и (или) изменять её в соответствии с условиями GNU General " "Public License, опубликованной Free Software Foundation; либо версии 2 " "лицензии, или (на ваш выбор) любой более поздней.\n" "\n" "Эта программа распространяется в надежде, что она будет полезной, но БЕЗ " "КАКИХ-ЛИБО ГАРАНТИЙ, даже без подразумеваемых гарантий КОММЕРЧЕСКОЙ ЦЕННОСТИ " "или ПРИГОДНОСТИ ДЛЯ КОНКРЕТНЫХ ЦЕЛЕЙ. См. GNU General Public License для " "более подробной информации.\n" "\n" "Вы должны были получить копию GNU General Public License вместе с этой " "программой; если нет, напишите в Free Software Foundation, Inc., 59 Temple " "Place, Suite 330, Boston, MA 02111-1307, USA" #: ../src/dialog.c:837 msgid "Translation is coordinated on http://launchpad.net/viking" msgstr "Перевод координируется http://launchpad.net/viking" #: ../src/dialog.c:845 msgid "Download along track" msgstr "Скачать вдоль пути" #: ../src/dialog.c:851 msgid "Map type:" msgstr "Тип карты:" #: ../src/dialog.c:856 msgid "Zoom level:" msgstr "Увеличение/уменьшение:" #: ../src/dialog.c:896 #, c-format msgid "The map data is licensed: %s." msgstr "Картографические данные лицензированы: %s." #: ../src/dialog.c:899 #, c-format msgid "" "The data provided by '%s' are licensed under the following license: " "%s.\n" "Please, read the license before continuing." msgstr "" "Данные, предоставленные '%s', по следующей лицензии: %s.\n" "Пожалуйста, прочтите лицензию перед тем, как продолжить." #: ../src/dialog.c:904 msgid "Open license" msgstr "Открытая лицензия" #: ../src/expedia.c:53 msgid "Expedia Street Maps" msgstr "Карты Expedia" #: ../src/expedia.c:81 msgid "Invalid expedia altitude" msgstr "Недопустимая высота для Expedia" #: ../src/expedia.c:112 #, c-format msgid "" "Couldn't open EXPEDIA image file (right after successful download! Please " "report and delete image file!): %s" msgstr "" "Не удалось загрузить графический файл EXPEDIA (сразу после удачного " "скачивания! Пожалуйста сообщите об ошибке и удалите файл!): %s" #: ../src/expedia.c:125 #, c-format msgid "" "Couldn't save EXPEDIA image file (right after successful download! Please " "report and delete image file!): %s" msgstr "" "Не удалось сохранить графический файл EXPEDIA (сразу после удачного " "скачивания! Пожалуйста сообщите об ошибке и удалите файл!): %s" #. * #. * See http://www.geonames.org/export/wikipedia-webservice.html#wikipediaBoundingBox #. #. Translators may wish to change this setting as appropriate to get Wikipedia articles in that language #: ../src/geonamessearch.c:46 msgid "en" msgstr "" #: ../src/geonamessearch.c:121 msgid "Search" msgstr "Поиск" #: ../src/geonamessearch.c:123 msgid "No entries found!" msgstr "Записи не найдены!" #. NB could allow columns to be shifted around by doing this after each new #. gtk_tree_view_column_set_reorderable ( column, TRUE ); #. However I don't think is that useful, so I haven't put it in #: ../src/geonamessearch.c:177 ../src/datasource_osm_my_traces.c:425 msgid "Name" msgstr "" #: ../src/geonamessearch.c:182 msgid "Feature" msgstr "" #: ../src/geonamessearch.c:187 ../src/datasource_osm_my_traces.c:440 msgid "Lat/Lon" msgstr "" #: ../src/geonamessearch.c:269 ../src/googlesearch.c:100 msgid "couldn't map temp file" msgstr "" #: ../src/globals.c:44 msgid "Degree format:" msgstr "Формат градусов:" #: ../src/globals.c:48 msgid "Distance units:" msgstr "Единица расстояния:" #: ../src/globals.c:52 msgid "Speed units:" msgstr "Единица скорости:" #: ../src/globals.c:56 msgid "Height units:" msgstr "Единица высоты:" #: ../src/globals.c:60 msgid "Use large waypoint icons:" msgstr "Большие иконки пунктов:" #: ../src/globals.c:64 msgid "Default latitude:" msgstr "Широта по умолчанию:" #: ../src/globals.c:67 msgid "Default longitude:" msgstr "Долгота по умолчанию:" #: ../src/globals.c:73 msgid "Alphabetical" msgstr "" #: ../src/globals.c:73 ../src/datasource_osm_my_traces.c:435 msgid "Time" msgstr "" #: ../src/globals.c:76 msgid "KML File Export Units:" msgstr "" #: ../src/globals.c:77 msgid "GPX Track Order:" msgstr "" #: ../src/globals.c:82 msgid "Image Viewer:" msgstr "" #: ../src/globals.c:87 msgid "External GPX Program 1:" msgstr "Внешняя GPX Программа 1:" #: ../src/globals.c:88 msgid "External GPX Program 2:" msgstr "Внешняя GPX Программа 2:" #. Defaults for the options are setup here #: ../src/globals.c:96 msgid "General" msgstr "Общие" #. New Tab #: ../src/globals.c:121 msgid "Export/External" msgstr "Экспорт/Внешний" #. Webtools #: ../src/google.c:36 msgid "Google" msgstr "Google" #: ../src/datasource_file.c:59 msgid "Import file with GPSBabel" msgstr "Импортировать с помощью GPSBabel" #: ../src/datasource_file.c:60 msgid "Imported file" msgstr "Импортированный файл" #. The file selector #: ../src/datasource_file.c:133 msgid "File:" msgstr "Файл:" #: ../src/datasource_file.c:134 msgid "File to import" msgstr "Файл для импорта" #: ../src/datasource_file.c:141 msgid "All files" msgstr "Все файлы" #. The file format selector #: ../src/datasource_file.c:148 msgid "File type:" msgstr "Тип файла:" #: ../src/datasource_file.c:193 #, c-format msgid "using babel args '%s' and file '%s'" msgstr "" #: ../src/datasource_gc.c:66 msgid "Download Geocaches" msgstr "Загрузить Геокэши" #: ../src/datasource_gc.c:67 msgid "Geocaching.com Caches" msgstr "Кэши geocaching.com" #: ../src/datasource_gc.c:84 msgid "geocaching.com username:" msgstr "Имя пользователя geocaching.com:" #: ../src/datasource_gc.c:85 msgid "geocaching.com password:" msgstr "Пароль пользователя geocaching.com:" #: ../src/datasource_gc.c:126 #, c-format msgid "" "Can't find %s or %s in path! Check that you have installed it correctly." msgstr "Невозможно найти %s или %s! Проверьте правильность установки." #: ../src/datasource_gc.c:188 msgid "Number geocaches:" msgstr "Количество геокешей:" #: ../src/datasource_gc.c:190 msgid "Centered around:" msgstr "Вокруг:" #: ../src/datasource_gc.c:226 msgid "Broken input - using some defaults" msgstr "" #: ../src/datasource_geotag.c:51 msgid "Create Waypoints from Geotagged Images" msgstr "" #: ../src/datasource_geotag.c:52 msgid "Geotagged Images" msgstr "Изображения с данными о местоположении" #: ../src/datasource_geotag.c:102 ../src/vikwindow.c:2314 #: ../src/vikwindow.c:2382 ../src/vikwindow.c:2824 msgid "All" msgstr "Все" #: ../src/datasource_geotag.c:107 ../src/vikwindow.c:2829 msgid "JPG" msgstr "JPG" #: ../src/datasource_geotag.c:165 #, c-format msgid "Unable to create waypoint from %s" msgstr "Не удаётся создать путевую точку из %s" #: ../src/datasource_google.c:49 ../src/datasource_google.c:50 msgid "Google Directions" msgstr "Проводник Google" #: ../src/datasource_google.c:77 msgid "From:" msgstr "Из:" #: ../src/datasource_google.c:79 msgid "To:" msgstr "в:" #: ../src/datasource_gps.c:57 msgid "Acquire from GPS" msgstr "Получить из GPS" #: ../src/datasource_gps.c:58 msgid "Acquired from GPS" msgstr "Получено из GPS" #: ../src/datasource_gps.c:221 #, c-format msgid "using cmdline '%s' and file '%s'\n" msgstr "используя команду '%s' и файл '%s'\n" #: ../src/datasource_gps.c:297 ../src/vikgpslayer.c:884 #, c-format msgid "Downloading %d waypoint..." msgid_plural "Downloading %d waypoints..." msgstr[0] "Скачивается %d пункт..." msgstr[1] "Скачивается %d пункта..." msgstr[2] "Скачивается %d пунктов..." #: ../src/datasource_gps.c:298 ../src/vikgpslayer.c:885 #, c-format msgid "Downloading %d trackpoint..." msgid_plural "Downloading %d trackpoints..." msgstr[0] "Скачивается %d узел..." msgstr[1] "Скачивается %d узла..." msgstr[2] "Скачивается %d узлов..." #: ../src/datasource_gps.c:303 ../src/vikgpslayer.c:890 #, c-format msgid "Downloading %d routepoint..." msgid_plural "Downloading %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/datasource_gps.c:325 ../src/datasource_gps.c:326 #: ../src/datasource_gps.c:327 #, c-format msgid "Downloaded %d out of %d %s..." msgstr "Скачано %d из %d %s..." #: ../src/datasource_gps.c:331 ../src/datasource_gps.c:332 #: ../src/datasource_gps.c:333 #, c-format msgid "Downloaded %d %s." msgstr "Скачано %d %s." #: ../src/datasource_gps.c:347 ../src/vikgpslayer.c:968 #, c-format msgid "GPS Device: %s" msgstr "GPS : %s" #: ../src/datasource_gps.c:370 ../src/vikgpslayer.c:1042 #: ../src/vikgpslayer.c:1110 msgid "Status: Working..." msgstr "" #: ../src/datasource_gps.c:469 ../src/vikgpslayer.c:150 msgid "GPS Protocol:" msgstr "GPS протокол:" #. List now assigned at runtime #: ../src/datasource_gps.c:488 ../src/vikgpslayer.c:151 msgid "Serial Port:" msgstr "Последовательный порт:" #: ../src/datasource_gps.c:509 msgid "" "Turn Off After Transfer\n" "(Garmin/NAViLink Only)" msgstr "" "Выключить после передачи\n" "(только для Garmin/NAViLink)" #: ../src/datasource_gps.c:512 msgid "Tracks:" msgstr "Маршруты" #: ../src/datasource_gps.c:516 msgid "Routes:" msgstr "" #: ../src/datasource_gps.c:520 msgid "Waypoints:" msgstr "Путевые точки:" #: ../src/datasource_gps.c:594 ../src/vikgpslayer.c:1305 msgid "GPS device: N/A" msgstr "GPS устройство: необнаружено" #: ../src/datasource_osm.c:52 ../src/datasource_osm.c:53 msgid "OSM traces" msgstr "Контуры OSM" #: ../src/datasource_osm.c:80 msgid "Page number:" msgstr "Номер страницы:" #: ../src/datasource_osm_my_traces.c:63 ../src/datasource_osm_my_traces.c:64 msgid "OSM My Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:108 msgid "Username:" msgstr "" #: ../src/datasource_osm_my_traces.c:113 msgid "The email or username used to login to OSM" msgstr "" #: ../src/datasource_osm_my_traces.c:115 ../src/osm-traces.c:413 msgid "Password:" msgstr "Пароль:" #: ../src/datasource_osm_my_traces.c:120 msgid "The password used to login to OSM" msgstr "" #: ../src/datasource_osm_my_traces.c:430 msgid "Description" msgstr "" #: ../src/datasource_osm_my_traces.c:445 msgid "Privacy" msgstr "" #: ../src/datasource_osm_my_traces.c:452 msgid "Within Current View" msgstr "" #: ../src/datasource_osm_my_traces.c:518 msgid "GPS Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:520 msgid "None found!" msgstr "" #: ../src/datasource_osm_my_traces.c:629 msgid "My OSM Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:645 #, c-format msgid "Unable to get trace: %s" msgstr "" #: ../src/datasource_wikipedia.c:32 msgid "Create Waypoints from Wikipedia Articles" msgstr "" #: ../src/datasource_wikipedia.c:33 msgid "Wikipedia Waypoints" msgstr "" #: ../src/dem.c:65 ../src/dem.c:79 msgid "Invalid DEM" msgstr "Неправильный DEM" #: ../src/dem.c:121 msgid "Invalid DEM header" msgstr "Неправильный DEM заголовок" #: ../src/dem.c:190 ../src/dem.c:203 msgid "Incorrect DEM Class B record: expected 1" msgstr "Неправильная запись DEM Class B: ожидается 1" #: ../src/dem.c:360 #, c-format msgid "Couldn't map file %s: %s" msgstr "" #: ../src/download.c:112 msgid "Tile age (s):" msgstr "" #: ../src/download.c:233 #, c-format msgid "Download error: %s" msgstr "Ошибка загрузки: %s" #: ../src/download.c:313 msgid "couldn't open temp file" msgstr "невозможно открыть временный файл" #: ../src/file.c:456 ../src/file.c:461 #, c-format msgid "Draw mode '%s' no more supported" msgstr "Режим отображения '%s' больше не поддерживается" #: ../src/geotag_exif.c:433 msgid "Not enough memory." msgstr "Не хватает памяти." #: ../src/geotag_exif.c:451 msgid "Setting a value for this tag is unsupported!" msgstr "Установка значения для этого тега не поддерживается!" #: ../src/geotag_exif.c:470 #, c-format msgid "Too few components specified (need %d, found %d)\n" msgstr "Слишком мало указанных компонентов (нужно %d, найдено %d)\n" #: ../src/geotag_exif.c:474 msgid "Numeric value expected\n" msgstr "Ожидаемые числовые значения\n" #: ../src/geotag_exif.c:482 msgid "This shouldn't happen!" msgstr "Это не должно случиться!" #: ../src/geotag_exif.c:552 msgid "Not yet implemented!" msgstr "Пока не реализовано!" #: ../src/geotag_exif.c:565 msgid "Warning; Too many components specified!" msgstr "Предупреждение: указано слишком много компонентов!" #: ../src/osm-traces.c:73 msgid "Identifiable (public w/ timestamps)" msgstr "" #: ../src/osm-traces.c:74 msgid "Trackable (private w/ timestamps)" msgstr "" #: ../src/osm-traces.c:75 msgid "Public" msgstr "Публичное" #: ../src/osm-traces.c:76 msgid "Private" msgstr "Частное" #: ../src/osm-traces.c:93 msgid "OSM username:" msgstr "OSM имя:" #: ../src/osm-traces.c:94 msgid "OSM password:" msgstr "OSM пароль:" #. Preferences #: ../src/osm-traces.c:151 msgid "OpenStreetMap Traces" msgstr "Контуры OpenStreetMap" #: ../src/osm-traces.c:234 #, c-format msgid "failed to upload data: HTTP response is %ld" msgstr "Не удалось загрузить данные: ответ HTTP %ld" #: ../src/osm-traces.c:239 #, c-format msgid "curl_easy_getinfo failed: %d" msgstr "curl_easy_getinfo не удалось: %d" #: ../src/osm-traces.c:244 #, c-format msgid "curl request failed: %s" msgstr "Неудачный запрос curl: %s" #: ../src/osm-traces.c:275 #, c-format msgid "failed to open temporary file: %s" msgstr "не удалось открыть временный файл: %s" #. Success #: ../src/osm-traces.c:328 msgid "Uploaded to OSM" msgstr "Загружено в OSM" #: ../src/osm-traces.c:332 msgid "FAILED TO UPLOAD DATA TO OSM - CURL PROBLEM" msgstr "Не удалось загрузить данные на OSM - проблема curl" #: ../src/osm-traces.c:335 msgid "FAILED TO UPLOAD DATA TO OSM" msgstr "НЕ УДАЛОСЬ ЗАГРУЗИТЬ ДАННЫЕ В OSM" #: ../src/osm-traces.c:335 msgid "HTTP response code" msgstr "код ответа HTTP" #: ../src/osm-traces.c:348 #, c-format msgid "failed to unlink temporary file: %s" msgstr "не удалось удалить временный файл: %s" #: ../src/osm-traces.c:387 msgid "OSM upload" msgstr "Загрузить на OSM" #: ../src/osm-traces.c:405 msgid "Email:" msgstr "Email:" #: ../src/osm-traces.c:410 msgid "" "The email used as login\n" "Enter the email you use to login into www.openstreetmap.org." msgstr "" "Email используется как имя для входа\n" "Введите email, который вы используете для " "www.openstreetmap.org." #: ../src/osm-traces.c:418 msgid "" "The password used to login\n" "Enter the password you use to login into " "www.openstreetmap.org." msgstr "" "Для входа нужен пароль\n" "Введите пароль, который вы используете для " "www.openstreetmap.org." #: ../src/osm-traces.c:423 msgid "File's name:" msgstr "Имя файла:" #: ../src/osm-traces.c:433 msgid "" "The name of the file on OSM\n" "This is the name of the file created on the server.This is not the " "name of the local file." msgstr "" "Имя файла в OSM\n" "Это имя для файла, созданного на сервере. Это не имя локального " "файла." #: ../src/osm-traces.c:442 msgid "The description of the trace" msgstr "Описание контура" #: ../src/osm-traces.c:444 msgid "Tags:" msgstr "Тэги:" #: ../src/osm-traces.c:449 msgid "The tags associated to the trace" msgstr "Метки, связанные с маршрутом" #: ../src/osm-traces.c:482 #, c-format msgid "Uploading %s to OSM" msgstr "%s загружается в OSM" #: ../src/mapcache.c:61 msgid "Map cache memory size (MB):" msgstr "" #: ../src/print.c:53 msgid "None" msgstr "Нет" #: ../src/print.c:54 msgid "Horizontally" msgstr "Горизонтально" #: ../src/print.c:55 msgid "Vertically" msgstr "Вертикально" #: ../src/print.c:56 msgid "Both" msgstr "Оба" #: ../src/print.c:120 msgid "Image Settings" msgstr "Настройки изображения" #: ../src/print.c:546 msgid "done" msgstr "завершено" #. Page Size #: ../src/print.c:575 msgid "_Adjust Page Size and Orientation" msgstr "Установить размер и ориентацию страницы" #: ../src/print.c:591 msgid "C_enter:" msgstr "Центр:" #. ignore page margins #: ../src/print.c:609 msgid "Ignore Page _Margins" msgstr "Игнорироват_ь края страницы" #: ../src/print.c:628 msgid "Image S_ize:" msgstr "Размер картинки:" #: ../src/util.c:81 msgid "Could not launch web browser." msgstr "Не удалось запустить веб-браузер." #: ../src/util.c:92 msgid "Could not create new email." msgstr "Не удалось создать новое эл. письмо." #: ../src/vikcoordlayer.c:46 msgid "Color:" msgstr "Цвет:" #: ../src/vikcoordlayer.c:47 msgid "Minutes Width:" msgstr "Широта, минут:" #: ../src/vikcoordlayer.c:48 msgid "Line Thickness:" msgstr "Толщина линий" #: ../src/vikcoordlayer.c:56 msgid "Coordinate" msgstr "" #: ../src/datasource_bfilter.c:46 msgid "Max number of points:" msgstr "Максимальное количество точек" #: ../src/datasource_bfilter.c:60 msgid "Simplify All Tracks..." msgstr "Упростить все маршруты" #: ../src/datasource_bfilter.c:61 msgid "Simplified Tracks" msgstr "Упрощенные маршруты" #: ../src/datasource_bfilter.c:96 ../src/datasource_bfilter.c:97 msgid "Remove Duplicate Waypoints" msgstr "Удалить повторяющиеся точки" #: ../src/datasource_bfilter.c:129 msgid "Waypoints Inside This" msgstr "" #: ../src/datasource_bfilter.c:130 msgid "Polygonized Layer" msgstr "" #: ../src/datasource_bfilter.c:165 msgid "Waypoints Outside This" msgstr "" # typo #: ../src/datasource_bfilter.c:166 msgid "Polygonzied Layer" msgstr "" #: ../src/main.c:89 #, c-format msgid "Ignoring Xlib error: error code %d request code %d\n" msgstr "" #: ../src/main.c:102 msgid "Enable debug output" msgstr "Включить отладочную выдачу" #: ../src/main.c:103 msgid "Enable verbose output" msgstr "Включить подробную выдачу" #: ../src/main.c:104 msgid "Show version" msgstr "Показать версию" #: ../src/osm.c:106 msgid "On Disk OSM Tile Format" msgstr "" #: ../src/osm.c:121 msgid "OSM (view)" msgstr "OSM (просмотр)" #: ../src/osm.c:125 msgid "OSM (edit)" msgstr "OSM (правка)" #: ../src/osm.c:129 msgid "OSM (render)" msgstr "OSM (отрисовка)" #. Example: http://127.0.0.1:8111/load_and_zoom?left=8.19&right=8.20&top=48.605&bottom=48.590&select=node413602999 #. JOSM or merkaartor must already be running with remote interface enabled #: ../src/osm.c:136 msgid "Local port 8111 (eg JOSM)" msgstr "" #: ../src/preferences.c:285 msgid "Preferences" msgstr "Предпочтения" #: ../src/uibuilder.c:147 msgid "Take care that this password will be stored clearly in a plain file." msgstr "Обратите внимание, что пароль сохраняется в файле открытым текстом." #: ../src/vikaggregatelayer.c:37 msgid "Aggregate" msgstr "" #: ../src/vikdemlayer.c:101 msgid "Absolute height" msgstr "Абсолютная высота" #: ../src/vikdemlayer.c:102 msgid "Height gradient" msgstr "" #: ../src/vikdemlayer.c:118 msgid "DEM Files:" msgstr "DEM Файлы:" #: ../src/vikdemlayer.c:119 msgid "Download Source:" msgstr "Источник загрузки:" #: ../src/vikdemlayer.c:120 msgid "Min Elev Color:" msgstr "" #: ../src/vikdemlayer.c:121 msgid "Type:" msgstr "Тип:" #: ../src/vikdemlayer.c:122 msgid "Min Elev:" msgstr "Мин. высота:" #: ../src/vikdemlayer.c:123 msgid "Max Elev:" msgstr "Макс. высота:" #: ../src/vikdemlayer.c:134 msgid "_DEM Download" msgstr "" #: ../src/vikdemlayer.c:134 msgid "DEM Download" msgstr "" #: ../src/vikdemlayer.c:188 msgid "DEM" msgstr "" #: ../src/vikdemlayer.c:284 #, c-format msgid "Number of files: %d" msgstr "Количество файлов: %d" #: ../src/vikdemlayer.c:385 msgid "DEM Loading" msgstr "Загрузка DEM" #: ../src/vikdemlayer.c:889 #, c-format msgid "No SRTM data available for %f, %f" msgstr "Нет данных SRTM для %f, %f" #: ../src/vikdemlayer.c:1149 #, c-format msgid "Downloading DEM %s" msgstr "Скачивание DEM %s" #: ../src/vikfileentry.c:68 msgid "Browse..." msgstr "Обзор..." #: ../src/vikfileentry.c:96 msgid "Choose file" msgstr "Выберите файл" #: ../src/vikfilelist.c:48 msgid "Choose file(s)" msgstr "Выберите файл(ы)" #: ../src/vikfilelist.c:172 msgid "Add..." msgstr "Добавить..." #: ../src/vikfilelist.c:173 msgid "Delete" msgstr "Удалить" #: ../src/vikgeoreflayer.c:70 msgid "_Georef Move Map" msgstr "" #: ../src/vikgeoreflayer.c:70 msgid "Georef Move Map" msgstr "" #: ../src/vikgeoreflayer.c:77 msgid "Georef Z_oom Tool" msgstr "" #: ../src/vikgeoreflayer.c:77 msgid "Georef Zoom Tool" msgstr "" #: ../src/vikgeoreflayer.c:87 msgid "GeoRef Map" msgstr "" #: ../src/vikgeoreflayer.c:335 ../src/vikmapslayer.c:685 #, c-format msgid "Couldn't open image file: %s" msgstr "Не удалось открыть графический файл: %s" #: ../src/vikgeoreflayer.c:365 msgid "Unexpected end of file reading World file." msgstr "Неожиданный конец во время чтения файла привязки." #: ../src/vikgeoreflayer.c:381 ../src/vikgeoreflayer.c:426 msgid "Choose World file" msgstr "Выберите файл привязки" #: ../src/vikgeoreflayer.c:394 msgid "The World file you requested could not be opened for reading." msgstr "Не удалось открыть для чтения выбранный файл привязки." #: ../src/vikgeoreflayer.c:439 msgid "The file you requested could not be opened for writing." msgstr "Выбранный вами файл невозможно открыть для записи." #: ../src/vikgeoreflayer.c:456 ../src/viklayer.c:480 msgid "Layer Properties" msgstr "Свойства слоя" #: ../src/vikgeoreflayer.c:478 msgid "World File Parameters:" msgstr "Параметры файла привязки:" #: ../src/vikgeoreflayer.c:479 msgid "Load From File..." msgstr "Загрузить из файла..." #: ../src/vikgeoreflayer.c:484 msgid "Corner pixel easting:" msgstr "" #: ../src/vikgeoreflayer.c:486 msgid "the UTM \"easting\" value of the upper-right corner pixel of the map" msgstr "" #: ../src/vikgeoreflayer.c:488 msgid "Corner pixel northing:" msgstr "" #: ../src/vikgeoreflayer.c:490 msgid "the UTM \"northing\" value of the upper-right corner pixel of the map" msgstr "" #: ../src/vikgeoreflayer.c:492 msgid "X (easting) scale (mpp): " msgstr "" #: ../src/vikgeoreflayer.c:493 msgid "Y (northing) scale (mpp): " msgstr "" #: ../src/vikgeoreflayer.c:496 msgid "the scale of the map in the X direction (meters per pixel)" msgstr "масштаб карты по оси X (метров на пиксел)" #: ../src/vikgeoreflayer.c:498 msgid "the scale of the map in the Y direction (meters per pixel)" msgstr "масштаб карты по оси Y (метров на пиксел)" #: ../src/vikgeoreflayer.c:500 msgid "Map Image:" msgstr "" #. Now with icons #: ../src/vikgeoreflayer.c:608 msgid "_Zoom to Fit Map" msgstr "Масштабировать к размеру карты" #: ../src/vikgeoreflayer.c:614 msgid "_Goto Map Center" msgstr "Перейти к центру карты" #: ../src/vikgeoreflayer.c:620 msgid "_Export to World File" msgstr "Экспортировать в файл привязки" #: ../src/vikgoto.c:75 msgid "No goto tool available." msgstr "Нет инструмента поиска." #: ../src/vikgoto.c:88 ../src/vikgoto.c:107 msgid "goto" msgstr "перейти" #: ../src/vikgoto.c:90 msgid "I don't know that place. Do you want another goto?" msgstr "Я не знаю такого места. Хотите выполнить новый поиск?" #: ../src/vikgoto.c:109 msgid "goto provider:" msgstr "поставщик поиска:" #: ../src/vikgoto.c:124 msgid "Enter address or place name:" msgstr "Введите адрес или название места:" #: ../src/vikgpslayer.c:127 msgid "Data Mode" msgstr "" #: ../src/vikgpslayer.c:129 msgid "Realtime Tracking Mode" msgstr "" #: ../src/vikgpslayer.c:137 msgid "Keep vehicle at center" msgstr "" #: ../src/vikgpslayer.c:138 msgid "Keep vehicle on screen" msgstr "" #: ../src/vikgpslayer.c:139 msgid "Disable" msgstr "" #: ../src/vikgpslayer.c:152 msgid "Download Tracks:" msgstr "Скачать маршруты:" #: ../src/vikgpslayer.c:153 msgid "Upload Tracks:" msgstr "Загрузить маршруты:" #: ../src/vikgpslayer.c:154 msgid "Download Routes:" msgstr "" #: ../src/vikgpslayer.c:155 msgid "Upload Routes:" msgstr "" #: ../src/vikgpslayer.c:156 msgid "Download Waypoints:" msgstr "Скачать пункты:" #: ../src/vikgpslayer.c:157 msgid "Upload Waypoints:" msgstr "Загрузить пункты:" #: ../src/vikgpslayer.c:159 msgid "Recording tracks" msgstr "Запись маршрутов" #: ../src/vikgpslayer.c:160 msgid "Jump to current position on start" msgstr "Перемещаться в текущее расположение при старте" #: ../src/vikgpslayer.c:161 msgid "Moving Map Method:" msgstr "" #: ../src/vikgpslayer.c:162 msgid "Gpsd Host:" msgstr "Узел gpsd:" #: ../src/vikgpslayer.c:163 msgid "Gpsd Port:" msgstr "Порт gpsd:" #: ../src/vikgpslayer.c:164 msgid "Gpsd Retry Interval (seconds):" msgstr "" #: ../src/vikgpslayer.c:179 msgid "GPS" msgstr "" #: ../src/vikgpslayer.c:242 ../src/vikgpslayer.c:1258 msgid "GPS Download" msgstr "" #: ../src/vikgpslayer.c:242 ../src/vikgpslayer.c:1258 #: ../src/viktrwlayer.c:3094 msgid "GPS Upload" msgstr "" #: ../src/vikgpslayer.c:244 msgid "GPS Realtime Tracking" msgstr "" #: ../src/vikgpslayer.c:451 msgid "Unknown GPS Protocol" msgstr "Неизвестный протокол GPS" #: ../src/vikgpslayer.c:469 msgid "Unknown serial port device" msgstr "Неизвестное устройство COM" #: ../src/vikgpslayer.c:572 #, c-format msgid "%s: unknown parameter" msgstr "%s: неизвестный параметр" #. Now with icons #: ../src/vikgpslayer.c:693 msgid "_Upload to GPS" msgstr "Загрузить в GPS" #: ../src/vikgpslayer.c:699 msgid "Download from _GPS" msgstr "Выгрузить из _GPS" #: ../src/vikgpslayer.c:720 msgid "Empty _Realtime" msgstr "" #: ../src/vikgpslayer.c:727 msgid "E_mpty Upload" msgstr "" #: ../src/vikgpslayer.c:733 msgid "_Empty Download" msgstr "" #: ../src/vikgpslayer.c:739 msgid "Empty _All" msgstr "Очистить все" #. #. NB It's not fatal if this gives 2 for example! Hence removal of the g_assert #. This happens when copied GPS layer is deleted (not sure why the number_handlers would be 2) #. I don't think there's any side effects and certainly better than the program just aborting #. #: ../src/vikgpslayer.c:756 #, c-format msgid "Unexpected number of disconnected handlers: %d" msgstr "" #: ../src/vikgpslayer.c:898 #, c-format msgid "Uploading %d waypoint..." msgid_plural "Uploading %d waypoints..." msgstr[0] "Загружается %d пункт..." msgstr[1] "Загружается %d пункта..." msgstr[2] "Загружается %d пунктов..." #: ../src/vikgpslayer.c:899 #, c-format msgid "Uploading %d trackpoint..." msgid_plural "Uploading %d trackpoints..." msgstr[0] "Загружается %d узел..." msgstr[1] "Загружается %d узла..." msgstr[2] "Загружается %d узлов..." #: ../src/vikgpslayer.c:900 #, c-format msgid "Uploading %d routepoint..." msgid_plural "Uploading %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:925 #, c-format msgid "Downloaded %d out of %d waypoint..." msgid_plural "Downloaded %d out of %d waypoints..." msgstr[0] "Скачано %d из %d пункта..." msgstr[1] "Скачано %d из %d пунктов..." msgstr[2] "Скачано %d из %d пунктов..." #: ../src/vikgpslayer.c:926 #, c-format msgid "Downloaded %d out of %d trackpoint..." msgid_plural "Downloaded %d out of %d trackpoints..." msgstr[0] "Скачано %d из %d узла..." msgstr[1] "Скачано %d из %d узлов..." msgstr[2] "Скачано %d из %d узлов..." #: ../src/vikgpslayer.c:927 #, c-format msgid "Downloaded %d out of %d routepoint..." msgid_plural "Downloaded %d out of %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:932 #, c-format msgid "Uploaded %d out of %d waypoint..." msgid_plural "Uploaded %d out of %d waypoints..." msgstr[0] "Загружено %d из %d пункта..." msgstr[1] "Загружено %d из %d пунктов..." msgstr[2] "Загружено %d из %d пунктов..." #: ../src/vikgpslayer.c:933 #, c-format msgid "Uploaded %d out of %d trackpoint..." msgid_plural "Uploaded %d out of %d trackpoints..." msgstr[0] "Загружено %d из %d узла..." msgstr[1] "Загружено %d из %d узлов..." msgstr[2] "Загружено %d из %d узлов..." #: ../src/vikgpslayer.c:934 #, c-format msgid "Uploaded %d out of %d routepoint..." msgid_plural "Uploaded %d out of %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:942 #, c-format msgid "Downloaded %d waypoint" msgid_plural "Downloaded %d waypoints" msgstr[0] "Скачан %d пункт" msgstr[1] "Скачано %d пункта" msgstr[2] "Скачано %d пунктов" #: ../src/vikgpslayer.c:943 #, c-format msgid "Downloaded %d trackpoint" msgid_plural "Downloaded %d trackpoints" msgstr[0] "Скачан %d узел" msgstr[1] "Скачано %d узла" msgstr[2] "Скачано %d узлов" #: ../src/vikgpslayer.c:944 #, c-format msgid "Downloaded %d routepoint" msgid_plural "Downloaded %d routepoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:949 #, c-format msgid "Uploaded %d waypoint" msgid_plural "Uploaded %d waypoints" msgstr[0] "Загружен %d узел" msgstr[1] "Загружено %d узла" msgstr[2] "Загружено %d узлов" #: ../src/vikgpslayer.c:950 #, c-format msgid "Uploaded %d trackpoint" msgid_plural "Uploaded %d trackpoints" msgstr[0] "Загружен %d пункт" msgstr[1] "Загружено %d пункта" msgstr[2] "Загружено %d пунктов" #: ../src/vikgpslayer.c:951 #, c-format msgid "Uploaded %d routepoint" msgid_plural "Uploaded %d routepoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:1180 msgid "Error: couldn't find gpsbabel." msgstr "Ошибка: gpsbabel не найден." #: ../src/vikgpslayer.c:1269 msgid "Warning - GPS Upload items may overwrite each other" msgstr "" #: ../src/vikgpslayer.c:1301 msgid "Status: detecting gpsbabel" msgstr "Статус: поиск gpsbabel" #: ../src/vikgpslayer.c:1332 msgid "No GPS items selected for transfer." msgstr "" #: ../src/vikgpslayer.c:1347 msgid "Could not turn off device." msgstr "" #: ../src/vikgpslayer.c:1385 msgid "Are you sure you want to delete GPS Upload data?" msgstr "" #: ../src/vikgpslayer.c:1398 msgid "Are you sure you want to delete GPS Download data?" msgstr "" #: ../src/vikgpslayer.c:1412 msgid "Are you sure you want to delete GPS Realtime data?" msgstr "" #: ../src/vikgpslayer.c:1425 msgid "Are you sure you want to delete All GPS data?" msgstr "" #: ../src/viklayerspanel.c:55 msgid "/C_ut" msgstr "/Вырезать" #: ../src/viklayerspanel.c:56 msgid "/_Copy" msgstr "/_Копировать" #: ../src/viklayerspanel.c:57 msgid "/_Paste" msgstr "/Вст_авить" #: ../src/viklayerspanel.c:58 msgid "/_Delete" msgstr "/_Удалить" #: ../src/viklayerspanel.c:59 msgid "/New Layer" msgstr "/Новый слой" #: ../src/viklayerspanel.c:127 msgid "Top Layer" msgstr "Верхний слой" #: ../src/viklayerspanel.c:143 msgid "Add new layer" msgstr "Добавить слой" #: ../src/viklayerspanel.c:150 msgid "Remove selected layer" msgstr "Удалить выбранный слой" #: ../src/viklayerspanel.c:157 msgid "Move selected layer up" msgstr "Переместить выбранный слой вверх" #: ../src/viklayerspanel.c:164 msgid "Move selected layer down" msgstr "Переместить выбранный слой вниз" #: ../src/viklayerspanel.c:171 msgid "Cut selected layer" msgstr "Вырезать выбранный слой" #: ../src/viklayerspanel.c:178 msgid "Copy selected layer" msgstr "Копировать выбранный слой" #: ../src/viklayerspanel.c:185 msgid "Paste layer below selected layer" msgstr "Вставить слой под выбранным" #. TODO: FIXME: if name has a '/' in it it will get all messed up. why not have an itemfactory field with #. name, icon, shortcut, etc.? #: ../src/viklayerspanel.c:204 ../src/vikwindow.c:3292 #, c-format msgid "New _%s Layer" msgstr "" #: ../src/viklayerspanel.c:511 msgid "Aggregate Layers have no settable properties." msgstr "У объединяющего слоя нет изменяемых свойств." #: ../src/viklayerspanel.c:555 msgid "You cannot cut the Top Layer." msgstr "Нельзя вырезать верхний слой." #: ../src/viklayerspanel.c:600 #, c-format msgid "Are you sure you want to delete %s?" msgstr "Вы уверены что хотите удалить %s?" #: ../src/viklayerspanel.c:617 msgid "You cannot delete the Top Layer." msgstr "Нельзя удалить верхний слой." #: ../src/viklayerspanel.c:701 msgid "Are you sure you wish to delete all layers?" msgstr "Вы уверены что хотите удалить все слои?" #. ******* MAPZOOMS ******** #: ../src/vikmapslayer.c:91 msgid "Use Viking Zoom Level" msgstr "" #: ../src/vikmapslayer.c:124 msgid "Map Type:" msgstr "Тип карты:" #: ../src/vikmapslayer.c:125 msgid "Maps Directory:" msgstr "Каталог карт:" #: ../src/vikmapslayer.c:126 msgid "Alpha:" msgstr "Прозрачность:" #: ../src/vikmapslayer.c:127 msgid "Control the Alpha value for transparency effects" msgstr "" #: ../src/vikmapslayer.c:128 msgid "Autodownload maps:" msgstr "Автоматически скачивать карты:" #: ../src/vikmapslayer.c:129 msgid "Autodownload Only Gets Missing Maps:" msgstr "" #: ../src/vikmapslayer.c:130 msgid "" "Using this option avoids attempting to update already acquired tiles. This " "can be useful if you want to restrict the network usage, without having to " "resort to manual control. Only applies when 'Autodownload Maps' is on." msgstr "" #: ../src/vikmapslayer.c:131 msgid "Zoom Level:" msgstr "Степень приближения:" #: ../src/vikmapslayer.c:132 msgid "" "Determines the method of displaying map tiles for the current zoom level. " "'Viking Zoom Level' uses the best matching level, otherwise setting a fixed " "value will always use map tiles of the specified value regardless of the " "actual zoom level." msgstr "" #: ../src/vikmapslayer.c:146 msgid "_Maps Download" msgstr "" #: ../src/vikmapslayer.c:146 msgid "Maps Download" msgstr "Загрузка карт" #: ../src/vikmapslayer.c:161 msgid "Map" msgstr "Карта" #: ../src/vikmapslayer.c:249 msgid "Default maplayer directory:" msgstr "" #: ../src/vikmapslayer.c:249 msgid "Choose a directory to store cached Map tiles for this layer" msgstr "" #: ../src/vikmapslayer.c:505 msgid "Unknown map type" msgstr "Неизвестный тип карты" #: ../src/vikmapslayer.c:516 msgid "Unknown Map Zoom" msgstr "" #: ../src/vikmapslayer.c:589 #, c-format msgid "" "New map cannot be displayed in the current drawmode.\n" "Select \"%s\" from View menu to view it." msgstr "" "Новая карта не может быть показана в текущем режиме отрисовки.\n" "Выберите \"%s\" из меню Вид для ее просмотра." #: ../src/vikmapslayer.c:753 #, c-format msgid "" "Cowardly refusing to draw tiles or existence of tiles beyond %d zoom out " "factor" msgstr "" #: ../src/vikmapslayer.c:1157 #, c-format msgid "Redownloading up to %d %s map..." msgid_plural "Redownloading up to %d %s maps..." msgstr[0] "" msgstr[1] "" #: ../src/vikmapslayer.c:1159 #, c-format msgid "Redownloading %d %s map..." msgid_plural "Redownloading %d %s maps..." msgstr[0] "Повторно скачивается %d %s карта..." msgstr[1] "Повторно скачивается %d %s карты..." msgstr[2] "Повторно скачивается %d %s карт..." #: ../src/vikmapslayer.c:1163 ../src/vikmapslayer.c:1238 #, c-format msgid "Downloading %d %s map..." msgid_plural "Downloading %d %s maps..." msgstr[0] "Скачивается %d %s карта..." msgstr[1] "Скачивается %d %s карты..." msgstr[2] "Скачивается %d %s карт..." #: ../src/vikmapslayer.c:1311 #, c-format msgid "" "\n" "Source: %s\n" "\n" "Tile File: %s\n" "Tile File Timestamp: %s" msgstr "" #: ../src/vikmapslayer.c:1318 #, c-format msgid "" "Source: %s\n" "\n" "No Tile File!" msgstr "" #: ../src/vikmapslayer.c:1356 msgid "Redownload _Bad Map(s)" msgstr "Заново скачать испорченные карты" #: ../src/vikmapslayer.c:1360 msgid "Redownload _New Map(s)" msgstr "Заново скачать новые карты" #: ../src/vikmapslayer.c:1364 msgid "Redownload _All Map(s)" msgstr "Заново скачать все карты" #: ../src/vikmapslayer.c:1368 msgid "_Show Tile Information" msgstr "" #: ../src/vikmapslayer.c:1449 #, c-format msgid "" "Wrong drawmode for this map.\n" "Select \"%s\" from View menu and try again." msgstr "" "Неподходящий режим отрисовки для этой карты.\n" "Выберите \"%s\" из меню вид и попробуйте снова." #: ../src/vikmapslayer.c:1454 msgid "Wrong zoom level for this map." msgstr "" #. Now with icons #: ../src/vikmapslayer.c:1485 msgid "Download _Missing Onscreen Maps" msgstr "Скачать отсутствующие экранные карты" #: ../src/vikmapslayer.c:1492 msgid "Download _New Onscreen Maps" msgstr "Скачать новые экранные карты" #: ../src/vikmapslayer.c:1499 msgid "Reload _All Onscreen Maps" msgstr "Скачать все экранные карты" #: ../src/viktreeview.c:263 msgid "Layer Name" msgstr "Имя слоя" #: ../src/viktreeview.c:742 #, c-format msgid "delete data from %s\n" msgstr "удалить данные %s\n" #: ../src/viktrwlayer.c:377 msgid "Create _Waypoint" msgstr "" #: ../src/viktrwlayer.c:377 msgid "Create Waypoint" msgstr "Создать пункт" #: ../src/viktrwlayer.c:383 msgid "Create _Track" msgstr "" #: ../src/viktrwlayer.c:383 msgid "Create Track" msgstr "Создать маршрут" #: ../src/viktrwlayer.c:392 msgid "Create _Route" msgstr "" #: ../src/viktrwlayer.c:392 msgid "Create Route" msgstr "" #: ../src/viktrwlayer.c:401 msgid "_Edit Waypoint" msgstr "" #: ../src/viktrwlayer.c:401 msgid "Edit Waypoint" msgstr "Редактироватаь пункт" #: ../src/viktrwlayer.c:409 msgid "Edit Trac_kpoint" msgstr "" #: ../src/viktrwlayer.c:409 msgid "Edit Trackpoint" msgstr "Редактировать узел" #: ../src/viktrwlayer.c:417 msgid "Show P_icture" msgstr "" #: ../src/viktrwlayer.c:417 msgid "Show Picture" msgstr "Показать картинку" #: ../src/viktrwlayer.c:424 msgid "Route _Finder" msgstr "" #: ../src/viktrwlayer.c:424 msgid "Route Finder" msgstr "" #. ***** PARAMETERS ***** #: ../src/viktrwlayer.c:447 ../src/viktrwlayer.c:1942 #: ../src/viktrwlayer.c:1944 msgid "Waypoints" msgstr "Пункты" #: ../src/viktrwlayer.c:447 ../src/viktrwlayer.c:1933 #: ../src/viktrwlayer.c:1935 msgid "Tracks" msgstr "Маршруты" #: ../src/viktrwlayer.c:447 msgid "Waypoint Images" msgstr "Картинки пунктов" #: ../src/viktrwlayer.c:450 msgid "Draw by Track" msgstr "" #: ../src/viktrwlayer.c:450 msgid "Draw by Speed" msgstr "" #: ../src/viktrwlayer.c:450 msgid "All Tracks Same Color" msgstr "" #: ../src/viktrwlayer.c:451 msgid "Filled Square" msgstr "Закрашенный квадрат" #: ../src/viktrwlayer.c:451 msgid "Square" msgstr "Квадрат" #: ../src/viktrwlayer.c:451 msgid "Circle" msgstr "Окружность" #: ../src/viktrwlayer.c:451 msgid "X" msgstr "X" #: ../src/viktrwlayer.c:477 msgid "Extra Extra Small" msgstr "" #: ../src/viktrwlayer.c:478 msgid "Extra Small" msgstr "" #: ../src/viktrwlayer.c:479 msgid "Small" msgstr "" #: ../src/viktrwlayer.c:480 msgid "Medium" msgstr "" #: ../src/viktrwlayer.c:481 msgid "Large" msgstr "" #: ../src/viktrwlayer.c:482 msgid "Extra Large" msgstr "" #: ../src/viktrwlayer.c:483 msgid "Extra Extra Large" msgstr "" #: ../src/viktrwlayer.c:491 msgid "Track Drawing Mode:" msgstr "Режим рисования маршрутов:" #: ../src/viktrwlayer.c:492 msgid "All Tracks Color:" msgstr "" #: ../src/viktrwlayer.c:493 msgid "The color used when 'All Tracks Same Color' drawing mode is selected" msgstr "" #: ../src/viktrwlayer.c:494 msgid "Draw Track Lines" msgstr "Нарисовать линии маршрута" #: ../src/viktrwlayer.c:495 msgid "Track Thickness:" msgstr "Толщина маршрута:" #: ../src/viktrwlayer.c:496 msgid "Draw Track Direction" msgstr "" #: ../src/viktrwlayer.c:497 msgid "Direction Size:" msgstr "" #: ../src/viktrwlayer.c:498 msgid "Draw Trackpoints" msgstr "Нарисовать узлы" #: ../src/viktrwlayer.c:499 msgid "Trackpoint Size:" msgstr "" #: ../src/viktrwlayer.c:500 msgid "Draw Elevation" msgstr "Нарисовать высоту" #: ../src/viktrwlayer.c:501 msgid "Draw Elevation Height %:" msgstr "Нарисовать % высоты:" #: ../src/viktrwlayer.c:503 msgid "Draw Stops" msgstr "Нарисовать остановки" #: ../src/viktrwlayer.c:504 msgid "" "Whether to draw a marker when trackpoints are at the same position but over " "the minimum stop length apart in time" msgstr "" #: ../src/viktrwlayer.c:505 msgid "Min Stop Length (seconds):" msgstr "Минимальная длина остановки (в секундах)" #: ../src/viktrwlayer.c:507 msgid "Track BG Thickness:" msgstr "Толщина фона маршрута:" #: ../src/viktrwlayer.c:508 msgid "Track Background Color" msgstr "Цвет фона маршрута" #: ../src/viktrwlayer.c:509 msgid "Draw by Speed Factor (%):" msgstr "" #: ../src/viktrwlayer.c:510 msgid "" "The percentage factor away from the average speed determining the color used" msgstr "" #: ../src/viktrwlayer.c:512 msgid "Draw Labels" msgstr "Нарисовать названия" #: ../src/viktrwlayer.c:513 msgid "Waypoint Font Size:" msgstr "" #: ../src/viktrwlayer.c:514 msgid "Waypoint Color:" msgstr "Цвет пунктов:" #: ../src/viktrwlayer.c:515 msgid "Waypoint Text:" msgstr "Текст пунктов:" #: ../src/viktrwlayer.c:516 msgid "Background:" msgstr "Фон:" #: ../src/viktrwlayer.c:517 msgid "Fake BG Color Translucency:" msgstr "" #: ../src/viktrwlayer.c:518 msgid "Waypoint marker:" msgstr "Маркер пункта:" #: ../src/viktrwlayer.c:519 msgid "Waypoint size:" msgstr "Размер пунктов:" #: ../src/viktrwlayer.c:520 msgid "Draw Waypoint Symbols:" msgstr "Рисовать символы пунктов:" #: ../src/viktrwlayer.c:522 msgid "Draw Waypoint Images" msgstr "Рисовать картинки пунктов" #: ../src/viktrwlayer.c:523 msgid "Image Size (pixels):" msgstr "Размер картинки (пикселы):" #: ../src/viktrwlayer.c:524 msgid "Image Alpha:" msgstr "Прозрачность картинки:" #: ../src/viktrwlayer.c:525 msgid "Image Memory Cache Size:" msgstr "Размер кэша для картинок:" #: ../src/viktrwlayer.c:610 msgid "TrackWaypoint" msgstr "" #: ../src/viktrwlayer.c:1951 ../src/viktrwlayer.c:1953 msgid "Routes" msgstr "" #: ../src/viktrwlayer.c:2144 #, c-format msgid " in %d:%02d hrs:mins" msgstr " в %d:%02d ч:мин" #: ../src/viktrwlayer.c:2148 #, c-format msgid "" "\n" "%sTotal Length %.1f %s%s" msgstr "" "\n" "%sОбщая длина %.1f %s%s" #: ../src/viktrwlayer.c:2154 #, c-format msgid "Tracks: %d - Waypoints: %d - Routes: %d%s" msgstr "" #: ../src/viktrwlayer.c:2174 #, c-format msgid "Tracks: %d" msgstr "" #: ../src/viktrwlayer.c:2184 #, c-format msgid "Routes: %d" msgstr "" #: ../src/viktrwlayer.c:2215 #, c-format msgid "- %d:%02d hrs:mins" msgstr "- %d:%02d ч:мин" #: ../src/viktrwlayer.c:2223 #, c-format msgid "%s%.1f km %s" msgstr "%s%.1f км %s" #: ../src/viktrwlayer.c:2226 #, c-format msgid "%s%.1f miles %s" msgstr "%s%.1f миль %s" #: ../src/viktrwlayer.c:2240 #, c-format msgid "Waypoints: %d" msgstr "" #: ../src/viktrwlayer.c:2266 #, c-format msgid "Trkpt: Alt %dft" msgstr "" #. VIK_UNITS_HEIGHT_METRES: #: ../src/viktrwlayer.c:2270 #, c-format msgid "Trkpt: Alt %dm" msgstr "" #. Compact date time format #: ../src/viktrwlayer.c:2277 #, c-format msgid " | Time %x %X" msgstr "" #: ../src/viktrwlayer.c:2295 #, c-format msgid " | Track: %s" msgstr "" #. Combine parts to make overall message #: ../src/viktrwlayer.c:2299 #, c-format msgid "%s%s | %s %s %s" msgstr "" #: ../src/viktrwlayer.c:2314 #, c-format msgid "Wpt: Alt %dft" msgstr "" #. VIK_UNITS_HEIGHT_METRES: #: ../src/viktrwlayer.c:2318 #, c-format msgid "Wpt: Alt %dm" msgstr "" #. Add comment if available #: ../src/viktrwlayer.c:2333 #, c-format msgid "%s | %s %s | Comment: %s" msgstr "" #: ../src/viktrwlayer.c:2335 #, c-format msgid "%s | %s %s" msgstr "" #: ../src/viktrwlayer.c:2563 ../src/viktrwlayer.c:2634 msgid "This layer has no waypoints or trackpoints." msgstr "В этом слое нет пунктов или маршрутных узлов." #: ../src/viktrwlayer.c:2661 ../src/vikwindow.c:2407 ../src/vikwindow.c:2848 #, c-format msgid "The file \"%s\" exists, do you wish to overwrite it?" msgstr "Файл \"%s\", хотите перезаписать?" #: ../src/viktrwlayer.c:2671 ../src/vikwindow.c:2429 msgid "The filename you requested could not be opened for writing." msgstr "Выбранный вами файл невозможно открыть для записи." #: ../src/viktrwlayer.c:2676 ../src/viktrwlayer.c:2681 #: ../src/viktrwlayer.c:2691 ../src/viktrwlayer.c:2703 msgid "Export Layer" msgstr "Экспортировать слой" #: ../src/viktrwlayer.c:2720 msgid "Could not create temporary file for export." msgstr "" #: ../src/viktrwlayer.c:2729 #, c-format msgid "Could not launch %s." msgstr "" #: ../src/viktrwlayer.c:2773 msgid "Export Track as GPX" msgstr "Экспортировать маршруты в GPX" #: ../src/viktrwlayer.c:2795 msgid "Find" msgstr "Найти" #: ../src/viktrwlayer.c:2805 msgid "Waypoint Name:" msgstr "Имя пункта:" #: ../src/viktrwlayer.c:2822 msgid "Waypoint not found in this layer." msgstr "Пункт не найден в этом слое." #: ../src/viktrwlayer.c:3090 msgid "Can not upload invisible track." msgstr "" #: ../src/viktrwlayer.c:3192 ../src/viktrwlayer.c:7785 msgid "Track" msgstr "Маршрут" #: ../src/viktrwlayer.c:3215 ../src/viktrwlayer.c:7817 msgid "Route" msgstr "" #: ../src/viktrwlayer.c:3296 ../src/viktrwlayer.c:6265 #: ../src/viktrwlayer.c:6314 msgid "_Finish Route" msgstr "" #: ../src/viktrwlayer.c:3298 ../src/viktrwlayer.c:6223 #: ../src/viktrwlayer.c:6312 msgid "_Finish Track" msgstr "" #. Now with icons #: ../src/viktrwlayer.c:3310 msgid "_View Layer" msgstr "" #: ../src/viktrwlayer.c:3317 msgid "V_iew" msgstr "" #: ../src/viktrwlayer.c:3323 msgid "View All _Tracks" msgstr "" #: ../src/viktrwlayer.c:3328 msgid "View All _Routes" msgstr "" #: ../src/viktrwlayer.c:3333 msgid "View All _Waypoints" msgstr "" #: ../src/viktrwlayer.c:3338 msgid "_Goto Center of Layer" msgstr "Перейти к центру слоя" #: ../src/viktrwlayer.c:3344 ../src/viktrwlayer.c:6199 msgid "Goto _Waypoint..." msgstr "" #: ../src/viktrwlayer.c:3350 msgid "_Export Layer" msgstr "Экспортировать слой" #: ../src/viktrwlayer.c:3356 msgid "Export as GPS_Point..." msgstr "" #: ../src/viktrwlayer.c:3361 msgid "Export as GPS_Mapper..." msgstr "" #: ../src/viktrwlayer.c:3366 msgid "Export as _GPX..." msgstr "" #: ../src/viktrwlayer.c:3371 msgid "Export as _KML..." msgstr "" #: ../src/viktrwlayer.c:3376 msgid "Open with External Program_1: " msgstr "" #: ../src/viktrwlayer.c:3383 msgid "Open with External Program_2: " msgstr "" #: ../src/viktrwlayer.c:3391 ../src/vikwindow.c:3145 msgid "_New" msgstr "Новый" #: ../src/viktrwlayer.c:3397 msgid "New _Waypoint..." msgstr "" #: ../src/viktrwlayer.c:3403 msgid "New _Track" msgstr "" #: ../src/viktrwlayer.c:3411 msgid "New _Route" msgstr "" #: ../src/viktrwlayer.c:3420 ../src/viktrwlayer.c:6597 msgid "Geotag _Images..." msgstr "" #: ../src/viktrwlayer.c:3427 msgid "_Acquire" msgstr "" #: ../src/viktrwlayer.c:3433 ../src/vikwindow.c:3150 msgid "From _GPS..." msgstr "Из _GPS..." #: ../src/viktrwlayer.c:3439 msgid "From Google _Directions..." msgstr "" #: ../src/viktrwlayer.c:3446 msgid "From _OSM Traces..." msgstr "" #: ../src/viktrwlayer.c:3451 msgid "From _My OSM Traces..." msgstr "" #: ../src/viktrwlayer.c:3459 ../src/vikwindow.c:3166 msgid "From _Wikipedia Waypoints" msgstr "" #: ../src/viktrwlayer.c:3465 msgid "Within _Layer Bounds" msgstr "В рамках слоя" #: ../src/viktrwlayer.c:3471 msgid "Within _Current View" msgstr "Внутри текущего вида" #: ../src/viktrwlayer.c:3479 msgid "From Geo_caching..." msgstr "" #: ../src/viktrwlayer.c:3486 ../src/vikwindow.c:3163 msgid "From Geotagged _Images..." msgstr "" #: ../src/viktrwlayer.c:3492 msgid "From _File..." msgstr "" #: ../src/viktrwlayer.c:3498 ../src/viktrwlayer.c:6542 msgid "_Upload" msgstr "" #: ../src/viktrwlayer.c:3504 msgid "Upload to _GPS..." msgstr "" #: ../src/viktrwlayer.c:3511 ../src/viktrwlayer.c:6570 msgid "Upload to _OSM..." msgstr "" #: ../src/viktrwlayer.c:3519 msgid "De_lete" msgstr "" #: ../src/viktrwlayer.c:3525 msgid "Delete All _Tracks" msgstr "" #: ../src/viktrwlayer.c:3531 msgid "Delete Tracks _From Selection..." msgstr "" #: ../src/viktrwlayer.c:3537 ../src/viktrwlayer.c:6290 msgid "Delete _All Routes" msgstr "" #: ../src/viktrwlayer.c:3543 ../src/viktrwlayer.c:6296 msgid "_Delete Routes From Selection..." msgstr "" #: ../src/viktrwlayer.c:3549 msgid "Delete All _Waypoints" msgstr "" #: ../src/viktrwlayer.c:3555 msgid "Delete Waypoints From _Selection..." msgstr "" #: ../src/viktrwlayer.c:4128 #, c-format msgid "Are you sure you want to delete all tracks in %s?" msgstr "" #: ../src/viktrwlayer.c:4138 #, c-format msgid "Are you sure you want to delete all routes in %s?" msgstr "" #: ../src/viktrwlayer.c:4148 #, c-format msgid "Are you sure you want to delete all waypoints in %s?" msgstr "" #: ../src/viktrwlayer.c:4165 #, c-format msgid "Are you sure you want to delete the waypoint \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4178 #, c-format msgid "Are you sure you want to delete the track \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4191 #, c-format msgid "Are you sure you want to delete the route \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4351 ../src/viktrwlayer.c:4922 msgid "" "Converting a track to a route removes extra track data such as segments, " "timestamps, etc...\n" "Do you want to continue?" msgstr "" #: ../src/viktrwlayer.c:4711 msgid "Failed. No other tracks with timestamps in this layer found" msgstr "" #: ../src/viktrwlayer.c:4713 msgid "Failed. No other tracks without timestamps in this layer found" msgstr "" #: ../src/viktrwlayer.c:4732 msgid "Merge with..." msgstr "Объединить с..." #: ../src/viktrwlayer.c:4733 msgid "Select route to merge with" msgstr "" #: ../src/viktrwlayer.c:4733 msgid "Select track to merge with" msgstr "Выберите маршрут для объединения" #: ../src/viktrwlayer.c:4818 ../src/viktrwlayer.c:4895 msgid "Append Route" msgstr "" #: ../src/viktrwlayer.c:4818 ../src/viktrwlayer.c:4895 msgid "Append Track" msgstr "" #: ../src/viktrwlayer.c:4819 msgid "Select the route to append after the current route" msgstr "" #: ../src/viktrwlayer.c:4820 msgid "Select the track to append after the current track" msgstr "" #: ../src/viktrwlayer.c:4896 msgid "Select the track to append after the current route" msgstr "" #: ../src/viktrwlayer.c:4897 msgid "Select the route to append after the current track" msgstr "" #: ../src/viktrwlayer.c:4957 #, c-format msgid "%d segment merged" msgid_plural "%d segments merged" msgstr[0] "" msgstr[1] "" #: ../src/viktrwlayer.c:4973 msgid "Failed. This track does not have timestamp" msgstr "Неудача. У этого маршрута нет отметки времени" #: ../src/viktrwlayer.c:4985 msgid "Failed. No other track in this layer has timestamp" msgstr "Неудача. В этом слое больше нет маршрутов с отметками времени" #: ../src/viktrwlayer.c:4992 msgid "Merge Threshold..." msgstr "Порог объединения..." #: ../src/viktrwlayer.c:4993 msgid "Merge when time between tracks less than:" msgstr "Объединить если время между маршрутами меньше:" #: ../src/viktrwlayer.c:5128 msgid "Split Threshold..." msgstr "Порог разделения..." #: ../src/viktrwlayer.c:5129 msgid "Split when time between trackpoints exceeds:" msgstr "Разделить, если время между узлами превышает:" #: ../src/viktrwlayer.c:5205 msgid "Split Every Nth Point" msgstr "" #: ../src/viktrwlayer.c:5206 msgid "Split on every Nth point:" msgstr "Разделить в каждой N-ой точке:" #: ../src/viktrwlayer.c:5312 msgid "Can not split track as it has no segments" msgstr "" #: ../src/viktrwlayer.c:5340 ../src/viktrwlayer.c:5370 #, c-format msgid "Deleted %ld point" msgid_plural "Deleted %ld points" msgstr[0] "" msgstr[1] "" #: ../src/viktrwlayer.c:5531 msgid "Internal Error in vik_trw_layer_uniquify_tracks" msgstr "" #: ../src/viktrwlayer.c:5588 ../src/viktrwlayer.c:5635 #: ../src/viktrwlayer.c:5814 msgid "" "Multiple entries with the same name exist. This method only works with " "unique names. Force unique names now?" msgstr "" #: ../src/viktrwlayer.c:5599 msgid "No tracks found" msgstr "" #: ../src/viktrwlayer.c:5607 ../src/viktrwlayer.c:5654 #: ../src/viktrwlayer.c:5834 msgid "Delete Selection" msgstr "" #: ../src/viktrwlayer.c:5608 msgid "Select tracks to delete" msgstr "" #: ../src/viktrwlayer.c:5646 msgid "No routes found" msgstr "" #: ../src/viktrwlayer.c:5655 msgid "Select routes to delete" msgstr "" #: ../src/viktrwlayer.c:5761 msgid "Internal Error in vik_trw_layer_uniquify_waypoints" msgstr "" #: ../src/viktrwlayer.c:5824 msgid "No waypoints found" msgstr "" #: ../src/viktrwlayer.c:5835 msgid "Select waypoints to delete" msgstr "" #: ../src/viktrwlayer.c:5896 #, c-format msgid "" "A waypoint with the name \"%s\" already exists. Really rename to the same " "name?" msgstr "" #: ../src/viktrwlayer.c:5926 #, c-format msgid "" "A track with the name \"%s\" already exists. Really rename to the same name?" msgstr "" #: ../src/viktrwlayer.c:5963 #, c-format msgid "" "A route with the name \"%s\" already exists. Really rename to the same name?" msgstr "" #: ../src/viktrwlayer.c:6085 ../src/viktrwlayer.c:6337 msgid "_Goto" msgstr "Перейти" #: ../src/viktrwlayer.c:6104 msgid "_Visit Geocache Webpage" msgstr "Посетить web-страницу геотайника" #: ../src/viktrwlayer.c:6123 msgid "_Show Picture..." msgstr "" #: ../src/viktrwlayer.c:6131 msgid "Update Geotag on _Image" msgstr "" #: ../src/viktrwlayer.c:6137 msgid "_Update" msgstr "" #: ../src/viktrwlayer.c:6142 msgid "Update and _Keep File Timestamp" msgstr "" #: ../src/viktrwlayer.c:6153 msgid "Visit _Webpage" msgstr "" #: ../src/viktrwlayer.c:6184 msgid "_New Waypoint..." msgstr "" #: ../src/viktrwlayer.c:6193 msgid "_View All Waypoints" msgstr "" #: ../src/viktrwlayer.c:6205 msgid "Delete _All Waypoints" msgstr "" #: ../src/viktrwlayer.c:6211 msgid "_Delete Waypoints From Selection..." msgstr "" #: ../src/viktrwlayer.c:6233 msgid "_View All Tracks" msgstr "" #: ../src/viktrwlayer.c:6239 msgid "_New Track" msgstr "" #: ../src/viktrwlayer.c:6247 msgid "Delete _All Tracks" msgstr "" #: ../src/viktrwlayer.c:6253 msgid "_Delete Tracks From Selection..." msgstr "" #: ../src/viktrwlayer.c:6276 msgid "_View All Routes" msgstr "" #: ../src/viktrwlayer.c:6282 msgid "_New Route" msgstr "" #: ../src/viktrwlayer.c:6327 msgid "_View Track" msgstr "" #: ../src/viktrwlayer.c:6329 msgid "_View Route" msgstr "" #: ../src/viktrwlayer.c:6343 msgid "_Startpoint" msgstr "Начало" #: ../src/viktrwlayer.c:6349 msgid "\"_Center\"" msgstr "\"Центр\"" #: ../src/viktrwlayer.c:6355 msgid "_Endpoint" msgstr "Конец" #: ../src/viktrwlayer.c:6361 msgid "_Highest Altitude" msgstr "Наибольшая высота" #: ../src/viktrwlayer.c:6367 msgid "_Lowest Altitude" msgstr "Наименьшая высота" #: ../src/viktrwlayer.c:6375 msgid "_Maximum Speed" msgstr "Максимальная скорость" #: ../src/viktrwlayer.c:6384 msgid "Co_mbine" msgstr "" #: ../src/viktrwlayer.c:6392 msgid "_Merge By Time..." msgstr "" #: ../src/viktrwlayer.c:6397 msgid "Merge _Segments" msgstr "" #: ../src/viktrwlayer.c:6403 msgid "Merge _With Other Tracks..." msgstr "Объединить с другими маршрутами..." #: ../src/viktrwlayer.c:6409 msgid "_Append Track..." msgstr "" #: ../src/viktrwlayer.c:6411 msgid "_Append Route..." msgstr "" #: ../src/viktrwlayer.c:6417 msgid "Append _Route..." msgstr "" #: ../src/viktrwlayer.c:6419 msgid "Append _Track..." msgstr "" #: ../src/viktrwlayer.c:6426 msgid "_Split" msgstr "" #: ../src/viktrwlayer.c:6434 msgid "_Split By Time..." msgstr "" #. ATM always enable this entry - don't want to have to analyse the track before displaying the menu - to keep the menu speedy #: ../src/viktrwlayer.c:6440 msgid "Split Se_gments" msgstr "" #: ../src/viktrwlayer.c:6446 msgid "Split By _Number of Points..." msgstr "" #: ../src/viktrwlayer.c:6451 msgid "Split at _Trackpoint" msgstr "" #: ../src/viktrwlayer.c:6460 msgid "Delete Poi_nts" msgstr "" #: ../src/viktrwlayer.c:6466 msgid "Delete Points With The Same _Position" msgstr "" #: ../src/viktrwlayer.c:6471 msgid "Delete Points With The Same _Time" msgstr "" #: ../src/viktrwlayer.c:6477 msgid "_Reverse Track" msgstr "" #: ../src/viktrwlayer.c:6479 msgid "_Reverse Route" msgstr "" #: ../src/viktrwlayer.c:6488 msgid "Down_load Maps Along Track..." msgstr "Скачать карты вдоль маршрута..." #: ../src/viktrwlayer.c:6490 msgid "Down_load Maps Along Route..." msgstr "" #: ../src/viktrwlayer.c:6497 msgid "_Apply DEM Data" msgstr "" #: ../src/viktrwlayer.c:6504 msgid "_Export Track as GPX..." msgstr "" #: ../src/viktrwlayer.c:6506 msgid "_Export Route as GPX..." msgstr "" #: ../src/viktrwlayer.c:6513 msgid "E_xtend Track End" msgstr "Продолжить конец маршрута" #: ../src/viktrwlayer.c:6515 msgid "E_xtend Route End" msgstr "" #: ../src/viktrwlayer.c:6522 msgid "C_onvert to a Route" msgstr "" #: ../src/viktrwlayer.c:6524 msgid "C_onvert to a Track" msgstr "" #: ../src/viktrwlayer.c:6532 msgid "Extend _Using Route Finder" msgstr "" #: ../src/viktrwlayer.c:6548 msgid "_Upload to GPS..." msgstr "" #: ../src/viktrwlayer.c:6559 msgid "_View Google Directions" msgstr "" #: ../src/viktrwlayer.c:6579 msgid "Use with _Filter" msgstr "" #: ../src/viktrwlayer.c:6612 msgid "_Edit Trackpoint" msgstr "" #: ../src/viktrwlayer.c:7524 #, c-format msgid " - Gain %dm:Loss %dm" msgstr "" #: ../src/viktrwlayer.c:7526 #, c-format msgid " - Gain %dft:Loss %dft" msgstr "" #: ../src/viktrwlayer.c:7531 #, c-format msgid " - Bearing %3.1f° - Step %s" msgstr "" #: ../src/viktrwlayer.c:8124 #, c-format msgid "Could not launch %s to open file." msgstr "" #: ../src/viktrwlayer.c:8205 #, c-format msgid "Creating %d Image Thumbnails..." msgstr "Создание %d картинок миниатюр..." #: ../src/viktrwlayer.c:8524 msgid "No map layer in use. Create one first" msgstr "Нет слоя карты. Создайте его сначала" #: ../src/viktrwlayer_propwin.c:898 ../src/viktrwlayer_propwin.c:1155 #, c-format msgid "%.1f kph" msgstr "" #: ../src/viktrwlayer_propwin.c:901 ../src/viktrwlayer_propwin.c:1158 #, c-format msgid "%.1f mph" msgstr "" #: ../src/viktrwlayer_propwin.c:904 ../src/viktrwlayer_propwin.c:1161 #, c-format msgid "%.1f knots" msgstr "" #. VIK_UNITS_SPEED_METRES_PER_SECOND: #: ../src/viktrwlayer_propwin.c:908 ../src/viktrwlayer_propwin.c:1165 #, c-format msgid "%.1f m/s" msgstr "" #: ../src/viktrwlayer_propwin.c:1745 #, c-format msgid "%.1f miles" msgstr "" #: ../src/viktrwlayer_propwin.c:1747 #, c-format msgid "%.1f km" msgstr "" #: ../src/viktrwlayer_propwin.c:2681 msgid "Failed spliting track. Track unchanged" msgstr "Не удалось разделить маршрут. Маршрут не изменен." #: ../src/viktrwlayer_propwin.c:2779 ../src/viktrwlayer_propwin.c:3178 #, c-format msgid "%s - Track Properties" msgstr "%s - свойства маршрута" #: ../src/viktrwlayer_propwin.c:2784 msgid "Split at _Marker" msgstr "" #: ../src/viktrwlayer_propwin.c:2785 msgid "Split _Segments" msgstr "" #: ../src/viktrwlayer_propwin.c:2786 msgid "_Reverse" msgstr "" #: ../src/viktrwlayer_propwin.c:2787 msgid "_Delete Dupl." msgstr "" #: ../src/viktrwlayer_propwin.c:2813 msgid "Comment:" msgstr "Комментарий:" #: ../src/viktrwlayer_propwin.c:2814 msgid "Description:" msgstr "" #: ../src/viktrwlayer_propwin.c:2815 msgid "Track Length:" msgstr "Длина маршрута:" #: ../src/viktrwlayer_propwin.c:2816 msgid "Trackpoints:" msgstr "Узлов:" #: ../src/viktrwlayer_propwin.c:2817 msgid "Segments:" msgstr "Сегментов:" #: ../src/viktrwlayer_propwin.c:2818 msgid "Duplicate Points:" msgstr "Повторяющихся точек:" #: ../src/viktrwlayer_propwin.c:2819 msgid "Max Speed:" msgstr "Максимальная скорость:" #: ../src/viktrwlayer_propwin.c:2820 msgid "Avg. Speed:" msgstr "Средняя скорость:" #: ../src/viktrwlayer_propwin.c:2821 msgid "Moving Avg. Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:2822 msgid "Avg. Dist. Between TPs:" msgstr "Ср. расст. между узлами:" #: ../src/viktrwlayer_propwin.c:2823 msgid "Elevation Range:" msgstr "Вертикальный диапазон:" #: ../src/viktrwlayer_propwin.c:2824 msgid "Total Elevation Gain/Loss:" msgstr "" #: ../src/viktrwlayer_propwin.c:2825 msgid "Start:" msgstr "Начало:" #: ../src/viktrwlayer_propwin.c:2826 msgid "End:" msgstr "Конец:" #: ../src/viktrwlayer_propwin.c:2827 msgid "Duration:" msgstr "Продолжительность:" #: ../src/viktrwlayer_propwin.c:2828 msgid "Color:" msgstr "" #: ../src/viktrwlayer_propwin.c:2877 ../src/viktrwlayer_propwin.c:2901 #: ../src/viktrwlayer_propwin.c:2929 ../src/viktrwlayer_propwin.c:2966 #: ../src/viktrwlayer_propwin.c:2984 ../src/viktrwlayer_propwin.c:3034 #: ../src/viktrwlayer_propwin.c:3035 ../src/viktrwlayer_propwin.c:3036 #: ../src/viktrwlayer_propwin.c:3062 ../src/viktrwlayer_propwin.c:3063 #: ../src/viktrwlayer_propwin.c:3078 ../src/viktrwlayer_propwin.c:3079 #: ../src/viktrwlayer_propwin.c:3092 ../src/viktrwlayer_propwin.c:3093 #: ../src/viktrwlayer_propwin.c:3106 ../src/viktrwlayer_propwin.c:3107 #: ../src/viktrwlayer_propwin.c:3120 ../src/viktrwlayer_propwin.c:3121 #: ../src/viktrwlayer_propwin.c:3134 ../src/viktrwlayer_propwin.c:3135 #, c-format msgid "No Data" msgstr "Нет данных" #: ../src/viktrwlayer_propwin.c:3031 #, c-format msgid "%d minutes" msgstr "%d минут" #: ../src/viktrwlayer_propwin.c:3058 msgid "Statistics" msgstr "Статистика" #: ../src/viktrwlayer_propwin.c:3064 msgid "Show D_EM" msgstr "" #: ../src/viktrwlayer_propwin.c:3065 ../src/viktrwlayer_propwin.c:3080 #: ../src/viktrwlayer_propwin.c:3094 ../src/viktrwlayer_propwin.c:3136 msgid "Show _GPS Speed" msgstr "" #: ../src/viktrwlayer_propwin.c:3067 ../src/viktrwlayer_propwin.c:3082 #: ../src/viktrwlayer_propwin.c:3110 ../src/viktrwlayer_propwin.c:3138 msgid "Track Distance:" msgstr "Длина маршрута:" #: ../src/viktrwlayer_propwin.c:3068 ../src/viktrwlayer_propwin.c:3125 msgid "Track Height:" msgstr "" #: ../src/viktrwlayer_propwin.c:3073 msgid "Elevation-distance" msgstr "Высота-расстояние" #: ../src/viktrwlayer_propwin.c:3083 msgid "Track Gradient:" msgstr "" #: ../src/viktrwlayer_propwin.c:3087 msgid "Gradient-distance" msgstr "" #: ../src/viktrwlayer_propwin.c:3096 ../src/viktrwlayer_propwin.c:3111 #: ../src/viktrwlayer_propwin.c:3124 msgid "Track Time:" msgstr "Время маршрута:" #: ../src/viktrwlayer_propwin.c:3097 ../src/viktrwlayer_propwin.c:3139 msgid "Track Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:3101 msgid "Speed-time" msgstr "Скорость-время" #: ../src/viktrwlayer_propwin.c:3108 ../src/viktrwlayer_propwin.c:3122 msgid "Show S_peed" msgstr "" #: ../src/viktrwlayer_propwin.c:3115 msgid "Distance-time" msgstr "" #: ../src/viktrwlayer_propwin.c:3129 msgid "Elevation-time" msgstr "" #: ../src/viktrwlayer_propwin.c:3143 msgid "Speed-distance" msgstr "" #: ../src/viktrwlayer_tpwin.c:118 msgid "Part of Track:" msgstr "Часть маршрута:" #: ../src/viktrwlayer_tpwin.c:119 msgid "Latitude:" msgstr "Широта:" #: ../src/viktrwlayer_tpwin.c:120 msgid "Longitude:" msgstr "Долгота:" #: ../src/viktrwlayer_tpwin.c:121 msgid "Altitude:" msgstr "Высота:" #: ../src/viktrwlayer_tpwin.c:122 msgid "Timestamp:" msgstr "Отметка времени:" #: ../src/viktrwlayer_tpwin.c:123 msgid "Time:" msgstr "Время:" #: ../src/viktrwlayer_tpwin.c:124 msgid "Distance Difference:" msgstr "Разница расстояния:" #: ../src/viktrwlayer_tpwin.c:125 msgid "Time Difference:" msgstr "Разность времени:" #: ../src/viktrwlayer_tpwin.c:126 msgid "\"Speed\" Between:" msgstr "" #: ../src/viktrwlayer_tpwin.c:127 msgid "VDOP:" msgstr "" #: ../src/viktrwlayer_tpwin.c:128 msgid "HDOP:" msgstr "" #: ../src/viktrwlayer_tpwin.c:129 msgid "PDOP:" msgstr "" #: ../src/viktrwlayer_tpwin.c:130 msgid "SAT/FIX:" msgstr "" #: ../src/viktrwlayer_tpwin.c:139 msgid "Trackpoint" msgstr "Узел" #: ../src/viktrwlayer_tpwin.c:142 msgid "_Insert After" msgstr "Вставить после" #: ../src/viktrwlayer_tpwin.c:144 msgid "Split Here" msgstr "Разделить здесь" #: ../src/viktrwlayer_geotag.c:446 #, c-format msgid "Geotagging %d Images..." msgstr "" #: ../src/viktrwlayer_geotag.c:510 msgid "Geotag Images" msgstr "" #: ../src/viktrwlayer_geotag.c:516 msgid "Images" msgstr "" #: ../src/viktrwlayer_geotag.c:520 msgid "Overwrite Existing Waypoints:" msgstr "" #: ../src/viktrwlayer_geotag.c:523 msgid "Overwrite Existing GPS Information:" msgstr "" #: ../src/viktrwlayer_geotag.c:525 msgid "Keep File Modification Timestamp:" msgstr "" #: ../src/viktrwlayer_geotag.c:555 msgid "Create Waypoints:" msgstr "" #: ../src/viktrwlayer_geotag.c:563 msgid "Write EXIF:" msgstr "" #: ../src/viktrwlayer_geotag.c:575 msgid "Interpolate Between Track Segments:" msgstr "" #: ../src/viktrwlayer_geotag.c:579 msgid "Image Time Offset (Seconds):" msgstr "" #: ../src/viktrwlayer_geotag.c:581 msgid "" "The number of seconds to ADD to the photos time to make it match the GPS " "data. Calculate this with (GPS - Photo). Can be negative or positive. Useful " "to adjust times when a camera's timestamp was incorrect." msgstr "" #: ../src/viktrwlayer_geotag.c:584 msgid "Image Timezone:" msgstr "" #: ../src/viktrwlayer_geotag.c:586 msgid "" "The timezone that was used when the images were created. For example, if a " "camera is set to AWST or +8:00 hours. Enter +8:00 here so that the correct " "adjustment to the images' time can be made. GPS data is always in UTC." msgstr "" #: ../src/viktrwlayer_geotag.c:590 #, c-format msgid "Using track: %s" msgstr "" #: ../src/viktrwlayer_geotag.c:592 #, c-format msgid "Using all tracks in: %s" msgstr "" #: ../src/vikstatus.c:105 msgid "Current zoom level. Click to select a new one." msgstr "" #: ../src/vikwaypoint.c:34 msgid "Waypoint" msgstr "" #. TODO get rid of this as this is unnecessary duplication... #: ../src/vikwindow.c:221 msgid "Pan" msgstr "Рука" #: ../src/vikwindow.c:221 msgid "Zoom" msgstr "Масштаб" #: ../src/vikwindow.c:221 msgid "Ruler" msgstr "Линейка" #: ../src/vikwindow.c:221 msgid "Select" msgstr "" #. Create tooltip #: ../src/vikwindow.c:440 msgid "Select zoom level" msgstr "" #: ../src/vikwindow.c:645 #, c-format msgid "" "Do you want to save the changes you made to the document \"%s\"?\n" "\n" "Your changes will be lost if you don't save them." msgstr "" "Вы хотите сохранить изменения, сделанные в документе \"%s\"?\n" "\n" "Если вы не сохраните изменения, они будут потеряны." #: ../src/vikwindow.c:649 msgid "Don't Save" msgstr "Не сохранять" #: ../src/vikwindow.c:696 msgid "mpp" msgstr "" #: ../src/vikwindow.c:696 msgid "pixelfact" msgstr "" #: ../src/vikwindow.c:861 #, c-format msgid "%s %s %dm" msgstr "" #: ../src/vikwindow.c:863 #, c-format msgid "%s %s %dft" msgstr "" #: ../src/vikwindow.c:866 #, c-format msgid "%s %s" msgstr "%s %s" #. NB Ctrl+Shift+R is used for Refresh (deemed more important), so use 'U' instead #: ../src/vikwindow.c:1254 msgid "_Ruler" msgstr "Линейка" #: ../src/vikwindow.c:1254 msgid "Ruler Tool" msgstr "Инструмент линейка" #: ../src/vikwindow.c:1502 ../src/vikwindow.c:3138 msgid "_Zoom" msgstr "Масштаб" #: ../src/vikwindow.c:1502 msgid "Zoom Tool" msgstr "Инструмент масштабирования" #: ../src/vikwindow.c:1547 ../src/vikwindow.c:3139 msgid "_Pan" msgstr "Рука" #: ../src/vikwindow.c:1547 msgid "Pan Tool" msgstr "Инструмент рука" #: ../src/vikwindow.c:1664 msgid "_Select" msgstr "" #: ../src/vikwindow.c:1664 msgid "Select Tool" msgstr "" #: ../src/vikwindow.c:1809 msgid "You must select a layer to show its properties." msgstr "Для просмотра свойств нужно выбрать слой." #. No error to show, so unlikely this will get called #: ../src/vikwindow.c:1824 msgid "The help system is not available." msgstr "" #. Main error path #: ../src/vikwindow.c:1827 #, c-format msgid "" "Help is not available because: %s.\n" "Ensure a Mime Type ghelp handler program is installed (e.g. yelp)." msgstr "" #: ../src/vikwindow.c:1850 msgid "You must select a layer to delete." msgstr "Для удаления нужно выбрать слой." #: ../src/vikwindow.c:2087 msgid "Untitled" msgstr "Безымянный" #: ../src/vikwindow.c:2194 #, c-format msgid "Unable to add '%s' to the list of recently used documents" msgstr "Не удалось добавить '%s' к списку недавно использованных документов" #: ../src/vikwindow.c:2208 msgid "The file you requested could not be opened." msgstr "Выбранный файл невозможно открыть." #: ../src/vikwindow.c:2211 msgid "" "GPSBabel is required to load files of this type or GPSBabel encountered " "problems." msgstr "" #: ../src/vikwindow.c:2214 #, c-format msgid "Unable to load malformed GPX file %s" msgstr "" #: ../src/vikwindow.c:2217 #, c-format msgid "Unsupported file type for %s" msgstr "" #. Since we can process .vik files with issues just show a warning in the status bar #. Not that a user can do much about it... or tells them what this issue is yet... #: ../src/vikwindow.c:2223 #, c-format msgid "WARNING: issues encountered loading %s" msgstr "" #: ../src/vikwindow.c:2278 msgid "Please select a GPS data file to open. " msgstr "Пожалуйста, выберите файл с данными GPS. " #: ../src/vikwindow.c:2288 msgid "Geocaching" msgstr "" #: ../src/vikwindow.c:2294 msgid "Google Earth" msgstr "" #: ../src/vikwindow.c:2299 msgid "GPX" msgstr "" #: ../src/vikwindow.c:2304 ../src/vikwindow.c:2387 #: ../src/viking.desktop.in.h:1 msgid "Viking" msgstr "Викинг" #: ../src/vikwindow.c:2374 msgid "Save as Viking File." msgstr "Сохранить файл Viking." #. Try harder... #: ../src/vikwindow.c:2619 ../src/vikwindow.c:2625 msgid "Generating image file..." msgstr "" #: ../src/vikwindow.c:2647 msgid "" "Failed to generate internal image.\n" "\n" "Try creating a smaller image." msgstr "" #: ../src/vikwindow.c:2655 msgid "Failed to generate image file." msgstr "" #. Success #: ../src/vikwindow.c:2660 msgid "Image file generated." msgstr "" #: ../src/vikwindow.c:2764 msgid "" "Viewable region outside allowable pixel size bounds for image. Clipping " "width/height values." msgstr "" #: ../src/vikwindow.c:2789 #, c-format msgid "Total area: %ldm x %ldm (%.3f sq. km)" msgstr "Общая площадь: %ldм x %ldм (%.3f кв. км)" #: ../src/vikwindow.c:2792 #, c-format msgid "Total area: %ldm x %ldm (%.3f sq. miles)" msgstr "Общая площадь: %ldм x %ldм (%.3f кв. миль)" #: ../src/vikwindow.c:2813 msgid "Save Image" msgstr "Сохранить изображение" #: ../src/vikwindow.c:2834 msgid "PNG" msgstr "" #: ../src/vikwindow.c:2857 msgid "You must be in UTM mode to use this feature" msgstr "Нужно перейти в режим UTM для использования этой возможности" #: ../src/vikwindow.c:2862 msgid "Choose a directory to hold images" msgstr "Выберите каталог для изображений" #. todo: default for answers inside VikWindow or static (thruout instance) #: ../src/vikwindow.c:2883 msgid "Save to Image File" msgstr "Сохранить как изображение" #: ../src/vikwindow.c:2900 msgid "Width (pixels):" msgstr "Ширина (в пикселах)" #: ../src/vikwindow.c:2902 msgid "Height (pixels):" msgstr "Высота (в пикселах)" #: ../src/vikwindow.c:2905 msgid "" "WARNING: USING LARGE IMAGES OVER 10000x10000\n" "MAY CRASH THE PROGRAM!" msgstr "" #: ../src/vikwindow.c:2907 msgid "Zoom (meters per pixel):" msgstr "Масштаб (метров на пиксел):" #: ../src/vikwindow.c:2921 msgid "Area in current viewable window" msgstr "Область в текущем видимом окне" #: ../src/vikwindow.c:2931 msgid "Save as PNG" msgstr "Сохранить в PNG" #: ../src/vikwindow.c:2932 msgid "Save as JPEG" msgstr "Сохранить в JPEG" #: ../src/vikwindow.c:2954 msgid "East-west image tiles:" msgstr "" #: ../src/vikwindow.c:2956 msgid "North-south image tiles:" msgstr "" #: ../src/vikwindow.c:3097 msgid "Choose a background color" msgstr "Выберите цвет фона" #: ../src/vikwindow.c:3113 msgid "Choose a track highlight color" msgstr "" #: ../src/vikwindow.c:3134 msgid "_File" msgstr "Файл" #: ../src/vikwindow.c:3135 msgid "_Edit" msgstr "Правка" #: ../src/vikwindow.c:3136 msgid "_View" msgstr "Просмотр" #: ../src/vikwindow.c:3137 msgid "_Show" msgstr "Показать" #: ../src/vikwindow.c:3140 msgid "_Layers" msgstr "Слои" #: ../src/vikwindow.c:3141 msgid "_Tools" msgstr "Инструменты" #: ../src/vikwindow.c:3142 msgid "_Webtools" msgstr "" #: ../src/vikwindow.c:3143 ../src/vikwindow.c:3206 msgid "_Help" msgstr "Помощь" #: ../src/vikwindow.c:3145 msgid "New file" msgstr "Новый файл" #: ../src/vikwindow.c:3146 msgid "_Open..." msgstr "Открыть..." #: ../src/vikwindow.c:3146 msgid "Open a file" msgstr "Открыть файл" #: ../src/vikwindow.c:3147 msgid "Open _Recent File" msgstr "Открыть недавний файл" #: ../src/vikwindow.c:3148 msgid "Append _File..." msgstr "Добавить файл" #: ../src/vikwindow.c:3148 msgid "Append data from a different file" msgstr "Добавить данные из другого файла" #: ../src/vikwindow.c:3149 msgid "A_cquire" msgstr "Получить" #: ../src/vikwindow.c:3150 msgid "Transfer data from a GPS device" msgstr "Передать данные из устройства GPS" #: ../src/vikwindow.c:3151 msgid "Import File With GPS_Babel..." msgstr "" #: ../src/vikwindow.c:3151 msgid "Import file via GPSBabel converter" msgstr "" #: ../src/vikwindow.c:3153 msgid "Google _Directions..." msgstr "Проводник Google..." #: ../src/vikwindow.c:3153 msgid "Get driving directions from Google" msgstr "Получить карту проезда от Google" #: ../src/vikwindow.c:3156 msgid "_OSM Traces..." msgstr "" #: ../src/vikwindow.c:3156 msgid "Get traces from OpenStreetMap" msgstr "" #: ../src/vikwindow.c:3157 msgid "_My OSM Traces..." msgstr "" #: ../src/vikwindow.c:3157 msgid "Get Your Own Traces from OpenStreetMap" msgstr "" #: ../src/vikwindow.c:3160 msgid "Geo_caches..." msgstr "Геотайники..." #: ../src/vikwindow.c:3160 msgid "Get Geocaches from geocaching.com" msgstr "Получить тайники с geocaching.com" #: ../src/vikwindow.c:3163 msgid "Create waypoints from geotagged images" msgstr "" #: ../src/vikwindow.c:3166 msgid "Create waypoints from Wikipedia items in the current view" msgstr "" #: ../src/vikwindow.c:3168 msgid "_Save" msgstr "Сохранить" #: ../src/vikwindow.c:3168 msgid "Save the file" msgstr "Сохранить файл" #: ../src/vikwindow.c:3169 msgid "Save _As..." msgstr "Сохранить как..." #: ../src/vikwindow.c:3169 msgid "Save the file under different name" msgstr "Сохранить файл под другим именем" #: ../src/vikwindow.c:3170 msgid "_Generate Image File..." msgstr "Создать файл изображения..." #: ../src/vikwindow.c:3170 msgid "Save a snapshot of the workspace into a file" msgstr "Сохранить снимок рабочей области в файл" #: ../src/vikwindow.c:3171 msgid "Generate _Directory of Images..." msgstr "Создать каталог с картинками..." #: ../src/vikwindow.c:3171 msgid "FIXME:IMGDIR" msgstr "" #: ../src/vikwindow.c:3174 msgid "_Print..." msgstr "Печать" #: ../src/vikwindow.c:3174 msgid "Print maps" msgstr "Печать карт" #: ../src/vikwindow.c:3177 msgid "E_xit" msgstr "Выйти" #: ../src/vikwindow.c:3177 msgid "Exit the program" msgstr "Выйти из программы" #: ../src/vikwindow.c:3178 msgid "Save and Exit" msgstr "Сохранить и выйти" #: ../src/vikwindow.c:3178 msgid "Save and Exit the program" msgstr "Сохранить и выйти из программы" #: ../src/vikwindow.c:3180 msgid "Go to the _Default Location" msgstr "Перейти к исходному пункту" #: ../src/vikwindow.c:3180 msgid "Go to the default location" msgstr "Перейти к исходному пункту" #: ../src/vikwindow.c:3181 msgid "Go to _Location..." msgstr "Перейти к Расположению..." #: ../src/vikwindow.c:3181 msgid "Go to address/place using text search" msgstr "Перейти к адресу/месту, используя поиск" #: ../src/vikwindow.c:3182 msgid "_Go to Lat/Lon..." msgstr "_Перейти к широте/долготе..." #: ../src/vikwindow.c:3182 msgid "Go to arbitrary lat/lon coordinate" msgstr "Перейти к заданной координате ш.,д." #: ../src/vikwindow.c:3183 msgid "Go to UTM..." msgstr "Перейти к UTM..." #: ../src/vikwindow.c:3183 msgid "Go to arbitrary UTM coordinate" msgstr "Перейти к заданной координате UTM" #: ../src/vikwindow.c:3184 msgid "_Refresh" msgstr "" #: ../src/vikwindow.c:3184 msgid "Refresh any maps displayed" msgstr "" #: ../src/vikwindow.c:3185 msgid "Set _Highlight Color..." msgstr "" #: ../src/vikwindow.c:3186 msgid "Set Bac_kground Color..." msgstr "Выбрать цвет фона..." #: ../src/vikwindow.c:3187 msgid "Zoom _In" msgstr "Приблизить" #: ../src/vikwindow.c:3188 msgid "Zoom _Out" msgstr "Отдалить" #: ../src/vikwindow.c:3189 msgid "Zoom _To..." msgstr "Масштабировать _к..." #: ../src/vikwindow.c:3190 msgid "Pan _North" msgstr "Сдвинуть к северу" #: ../src/vikwindow.c:3191 msgid "Pan _East" msgstr "Сдвинуть к востоку" #: ../src/vikwindow.c:3192 msgid "Pan _South" msgstr "Сдвинуть к югу" #: ../src/vikwindow.c:3193 msgid "Pan _West" msgstr "Сдвинуть к западу" #: ../src/vikwindow.c:3194 msgid "Background _Jobs" msgstr "Фоновые задачи" #: ../src/vikwindow.c:3196 msgid "Cu_t" msgstr "Вырезать" #: ../src/vikwindow.c:3197 msgid "_Copy" msgstr "Копировать" #: ../src/vikwindow.c:3198 msgid "_Paste" msgstr "Вставить" #: ../src/vikwindow.c:3199 msgid "_Delete" msgstr "Удалить" #: ../src/vikwindow.c:3200 msgid "Delete All" msgstr "Удалить все" #: ../src/vikwindow.c:3201 msgid "_Flush Map Cache" msgstr "Опустошить кэш карт" #: ../src/vikwindow.c:3202 msgid "_Set the Default Location" msgstr "Задать расположение по умолчанию" #: ../src/vikwindow.c:3202 msgid "Set the Default Location to the current position" msgstr "Сохранить текущее расположение, как расположение по умолчанию" #: ../src/vikwindow.c:3203 msgid "_Preferences" msgstr "Предпочтения" #: ../src/vikwindow.c:3204 msgid "_Properties" msgstr "Свойства" #: ../src/vikwindow.c:3207 msgid "_About" msgstr "О программе" #: ../src/vikwindow.c:3213 msgid "_UTM Mode" msgstr "Режим _UTM" #: ../src/vikwindow.c:3214 msgid "_Expedia Mode" msgstr "Режим _Expedia" #: ../src/vikwindow.c:3215 msgid "_Mercator Mode" msgstr "Режим _Mercator" #: ../src/vikwindow.c:3216 msgid "Lat_/Lon Mode" msgstr "Режим широта/долгота" #: ../src/vikwindow.c:3220 msgid "Show _Scale" msgstr "Показать масштаб" #: ../src/vikwindow.c:3220 msgid "Show Scale" msgstr "Паказать масштаб" #: ../src/vikwindow.c:3221 msgid "Show _Center Mark" msgstr "Показать отметку центра" #: ../src/vikwindow.c:3221 msgid "Show Center Mark" msgstr "Показать отметку центра" #: ../src/vikwindow.c:3222 msgid "Show _Highlight" msgstr "" #: ../src/vikwindow.c:3222 msgid "Show Highlight" msgstr "" #: ../src/vikwindow.c:3223 msgid "_Full Screen" msgstr "На весь экран" #: ../src/vikwindow.c:3223 msgid "Activate full screen mode" msgstr "Включить полноэкранный режим" #: ../src/vikwindow.c:3224 msgid "Show Side _Panel" msgstr "Показать боковую панель" #: ../src/vikwindow.c:3224 msgid "Show Side Panel" msgstr "Показать боковую панель" #: ../src/vikwindow.c:3225 msgid "Show Status_bar" msgstr "Показать строку состояния" #: ../src/vikwindow.c:3225 msgid "Show Statusbar" msgstr "Показать строку состояния" #: ../src/vikwindow.c:3226 msgid "Show _Toolbar" msgstr "Показать панель инструментов" #: ../src/vikwindow.c:3226 msgid "Show Toolbar" msgstr "Показать панель инструментов" #: ../src/vikwindow.c:3227 msgid "Show _Menu" msgstr "Показать меню" #: ../src/vikwindow.c:3227 msgid "Show Menu" msgstr "Показать меню" #: ../src/viking.desktop.in.h:2 msgid "GPS Data Manager" msgstr "Менеджер данных GPS" #: ../src/viking.desktop.in.h:3 msgid "Map Based GPS Data Manager (live data capable)." msgstr "" #: ../src/libjpeg/jpeg-data.c:206 msgid "Data does not follow JPEG specification." msgstr "" #: ../src/libjpeg/jpeg-data.c:291 #, c-format msgid "Path '%s' invalid." msgstr "" #: ../src/libjpeg/jpeg-data.c:309 #, c-format msgid "Could not read '%s'." msgstr "" viking-1.4.2/po/he.po0000644000175000017500000021357312175546146011326 00000000000000# Hebrew translation for viking # Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008 # This file is distributed under the same license as the viking package. # FIRST AUTHOR , 2008. # msgid "" msgstr "" "Project-Id-Version: viking\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-02-04 23:29+0100\n" "PO-Revision-Date: 2008-08-18 20:47+0000\n" "Last-Translator: Krylov Ilya \n" "Language-Team: Hebrew \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2013-03-23 17:12+0000\n" "X-Generator: Launchpad (build 16540)\n" "Language: he\n" #: ../src/acquire.c:103 ../src/vikgpslayer.c:1185 msgid "Done." msgstr "" #: ../src/acquire.c:114 msgid "No data." msgstr "" #: ../src/acquire.c:154 ../src/acquire.c:404 msgid "Error: acquisition failed." msgstr "" #: ../src/acquire.c:341 msgid "Working..." msgstr "עובד..." #. This shouldn't happen... #: ../src/acquire.c:394 msgid "" "Unable to create command\n" "Acquire method failed." msgstr "" #: ../src/acquire.c:486 msgid "_Filter" msgstr "" #: ../src/acquire.c:501 #, c-format msgid "Filter with %s" msgstr "" #: ../src/acquire.c:518 msgid "Filter" msgstr "" #: ../src/background.c:52 #, c-format msgid "%d items" msgstr "" #: ../src/background.c:248 msgid "Job" msgstr "" #: ../src/background.c:252 msgid "Progress" msgstr "" #: ../src/background.c:268 msgid "Viking Background Jobs" msgstr "" #: ../src/bing.c:47 msgid "Bing" msgstr "" #. VIK_GTK_WINDOW_FROM_WIDGET(vp) #: ../src/bingmapsource.c:445 msgid "Bing attribution Loading" msgstr "" #: ../src/clipboard.c:95 msgid "paste failed" msgstr "" #: ../src/clipboard.c:105 msgid "wrong clipboard data size" msgstr "" #: ../src/clipboard.c:124 #, c-format msgid "" "The clipboard contains sublayer data for %s layers. You must select a layer " "of this type to paste the clipboard data." msgstr "" #: ../src/clipboard.c:236 msgid "" "In order to paste a waypoint, please select an appropriate layer to paste " "into." msgstr "" #: ../src/dialog.c:52 msgid "Go to Lat/Lon" msgstr "" #: ../src/dialog.c:64 ../src/dialog.c:251 msgid "Latitude:" msgstr "" #: ../src/dialog.c:70 ../src/dialog.c:256 msgid "Longitude:" msgstr "" #: ../src/dialog.c:102 msgid "Go to UTM" msgstr "" #: ../src/dialog.c:115 msgid "Northing:" msgstr "" #: ../src/dialog.c:121 msgid "Easting:" msgstr "" #: ../src/dialog.c:128 msgid "Zone:" msgstr "" #: ../src/dialog.c:131 msgid "Letter:" msgstr "" #: ../src/dialog.c:199 msgid "Waypoint Properties" msgstr "" #: ../src/dialog.c:233 msgid "Name:" msgstr "" #: ../src/dialog.c:261 msgid "Altitude:" msgstr "" #: ../src/dialog.c:266 msgid "Comment:" msgstr "" #: ../src/dialog.c:274 ../src/osm-traces.c:437 msgid "Description:" msgstr "" #: ../src/dialog.c:277 msgid "Image:" msgstr "" #: ../src/dialog.c:282 msgid "Symbol:" msgstr "" #: ../src/dialog.c:291 msgid "(none)" msgstr "" #. TODO: other checks (isalpha or whatever ) #: ../src/dialog.c:356 msgid "Please enter a name for the waypoint." msgstr "" #: ../src/dialog.c:529 ../src/geonamessearch.c:243 #: ../src/datasource_osm_my_traces.c:507 msgid "Nothing was selected" msgstr "" #: ../src/dialog.c:537 msgid "Add Route" msgstr "" #: ../src/dialog.c:537 msgid "Add Track" msgstr "" #: ../src/dialog.c:545 msgid "Route Name:" msgstr "" #: ../src/dialog.c:545 msgid "Track Name:" msgstr "" #: ../src/dialog.c:565 msgid "Please enter a name for the track." msgstr "" #: ../src/dialog.c:623 msgid "Zoom Factors..." msgstr "" #: ../src/dialog.c:637 msgid "Zoom factor (in meters per pixel):" msgstr "" #: ../src/dialog.c:638 msgid "X (easting): " msgstr "" #: ../src/dialog.c:639 msgid "Y (northing): " msgstr "" #: ../src/dialog.c:644 msgid "X and Y zoom factors must be equal" msgstr "" #: ../src/dialog.c:699 msgid "1 min" msgstr "" #: ../src/dialog.c:700 msgid "1 hour" msgstr "" #: ../src/dialog.c:701 msgid "1 day" msgstr "" #: ../src/dialog.c:702 msgid "Custom (in minutes):" msgstr "" #: ../src/dialog.c:808 msgid "GPS Data and Topo Analyzer, Explorer, and Manager." msgstr "" #: ../src/dialog.c:809 msgid "" "This program is free software; you can redistribute it and/or modify it " "under the terms of the GNU General Public License as published by the Free " "Software Foundation; either version 2 of the License, or (at your option) " "any later version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT " "ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or " "FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for " "more details.\n" "\n" "You should have received a copy of the GNU General Public License along with " "this program; if not, write to the Free Software Foundation, Inc., 59 Temple " "Place, Suite 330, Boston, MA 02111-1307, USA" msgstr "" #: ../src/dialog.c:837 msgid "Translation is coordinated on http://launchpad.net/viking" msgstr "" #: ../src/dialog.c:845 msgid "Download along track" msgstr "" #: ../src/dialog.c:851 msgid "Map type:" msgstr "" #: ../src/dialog.c:856 msgid "Zoom level:" msgstr "" #: ../src/dialog.c:896 #, c-format msgid "The map data is licensed: %s." msgstr "" #: ../src/dialog.c:899 #, c-format msgid "" "The data provided by '%s' are licensed under the following license: " "%s.\n" "Please, read the license before continuing." msgstr "" #: ../src/dialog.c:904 msgid "Open license" msgstr "" #: ../src/expedia.c:53 msgid "Expedia Street Maps" msgstr "" #: ../src/expedia.c:81 msgid "Invalid expedia altitude" msgstr "" #: ../src/expedia.c:112 #, c-format msgid "" "Couldn't open EXPEDIA image file (right after successful download! Please " "report and delete image file!): %s" msgstr "" #: ../src/expedia.c:125 #, c-format msgid "" "Couldn't save EXPEDIA image file (right after successful download! Please " "report and delete image file!): %s" msgstr "" #. * #. * See http://www.geonames.org/export/wikipedia-webservice.html#wikipediaBoundingBox #. #. Translators may wish to change this setting as appropriate to get Wikipedia articles in that language #: ../src/geonamessearch.c:46 msgid "en" msgstr "" #: ../src/geonamessearch.c:121 msgid "Search" msgstr "" #: ../src/geonamessearch.c:123 msgid "No entries found!" msgstr "" #. NB could allow columns to be shifted around by doing this after each new #. gtk_tree_view_column_set_reorderable ( column, TRUE ); #. However I don't think is that useful, so I haven't put it in #: ../src/geonamessearch.c:177 ../src/datasource_osm_my_traces.c:425 msgid "Name" msgstr "" #: ../src/geonamessearch.c:182 msgid "Feature" msgstr "" #: ../src/geonamessearch.c:187 ../src/datasource_osm_my_traces.c:440 msgid "Lat/Lon" msgstr "" #: ../src/geonamessearch.c:269 ../src/googlesearch.c:100 msgid "couldn't map temp file" msgstr "" #: ../src/globals.c:44 msgid "Degree format:" msgstr "" #: ../src/globals.c:48 msgid "Distance units:" msgstr "" #: ../src/globals.c:52 msgid "Speed units:" msgstr "" #: ../src/globals.c:56 msgid "Height units:" msgstr "" #: ../src/globals.c:60 msgid "Use large waypoint icons:" msgstr "" #: ../src/globals.c:64 msgid "Default latitude:" msgstr "" #: ../src/globals.c:67 msgid "Default longitude:" msgstr "" #: ../src/globals.c:73 msgid "Alphabetical" msgstr "" #: ../src/globals.c:73 ../src/datasource_osm_my_traces.c:435 msgid "Time" msgstr "" #: ../src/globals.c:76 msgid "KML File Export Units:" msgstr "" #: ../src/globals.c:77 msgid "GPX Track Order:" msgstr "" #: ../src/globals.c:82 msgid "Image Viewer:" msgstr "" #: ../src/globals.c:87 msgid "External GPX Program 1:" msgstr "" #: ../src/globals.c:88 msgid "External GPX Program 2:" msgstr "" #. Defaults for the options are setup here #: ../src/globals.c:96 msgid "General" msgstr "" #. New Tab #: ../src/globals.c:121 msgid "Export/External" msgstr "" #. Webtools #: ../src/google.c:36 msgid "Google" msgstr "" #: ../src/datasource_file.c:59 msgid "Import file with GPSBabel" msgstr "" #: ../src/datasource_file.c:60 msgid "Imported file" msgstr "" #. The file selector #: ../src/datasource_file.c:133 msgid "File:" msgstr "" #: ../src/datasource_file.c:134 msgid "File to import" msgstr "" #: ../src/datasource_file.c:141 msgid "All files" msgstr "" #. The file format selector #: ../src/datasource_file.c:148 msgid "File type:" msgstr "" #: ../src/datasource_file.c:193 #, c-format msgid "using babel args '%s' and file '%s'" msgstr "" #: ../src/datasource_gc.c:66 msgid "Download Geocaches" msgstr "" #: ../src/datasource_gc.c:67 msgid "Geocaching.com Caches" msgstr "" #: ../src/datasource_gc.c:84 msgid "geocaching.com username:" msgstr "" #: ../src/datasource_gc.c:85 msgid "geocaching.com password:" msgstr "" #: ../src/datasource_gc.c:126 #, c-format msgid "" "Can't find %s or %s in path! Check that you have installed it correctly." msgstr "" #: ../src/datasource_gc.c:188 msgid "Number geocaches:" msgstr "" #: ../src/datasource_gc.c:190 msgid "Centered around:" msgstr "" #: ../src/datasource_gc.c:226 msgid "Broken input - using some defaults" msgstr "" #: ../src/datasource_geotag.c:51 msgid "Create Waypoints from Geotagged Images" msgstr "" #: ../src/datasource_geotag.c:52 msgid "Geotagged Images" msgstr "" #: ../src/datasource_geotag.c:102 ../src/vikwindow.c:2314 #: ../src/vikwindow.c:2382 ../src/vikwindow.c:2824 msgid "All" msgstr "" #: ../src/datasource_geotag.c:107 ../src/vikwindow.c:2829 msgid "JPG" msgstr "" #: ../src/datasource_geotag.c:165 #, c-format msgid "Unable to create waypoint from %s" msgstr "" #: ../src/datasource_google.c:49 ../src/datasource_google.c:50 msgid "Google Directions" msgstr "" #: ../src/datasource_google.c:77 msgid "From:" msgstr "" #: ../src/datasource_google.c:79 msgid "To:" msgstr "" #: ../src/datasource_gps.c:57 msgid "Acquire from GPS" msgstr "" #: ../src/datasource_gps.c:58 msgid "Acquired from GPS" msgstr "" #: ../src/datasource_gps.c:221 #, c-format msgid "using cmdline '%s' and file '%s'\n" msgstr "" #: ../src/datasource_gps.c:297 ../src/vikgpslayer.c:884 #, c-format msgid "Downloading %d waypoint..." msgid_plural "Downloading %d waypoints..." msgstr[0] "" msgstr[1] "" #: ../src/datasource_gps.c:298 ../src/vikgpslayer.c:885 #, c-format msgid "Downloading %d trackpoint..." msgid_plural "Downloading %d trackpoints..." msgstr[0] "" msgstr[1] "" #: ../src/datasource_gps.c:303 ../src/vikgpslayer.c:890 #, c-format msgid "Downloading %d routepoint..." msgid_plural "Downloading %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/datasource_gps.c:325 ../src/datasource_gps.c:326 #: ../src/datasource_gps.c:327 #, c-format msgid "Downloaded %d out of %d %s..." msgstr "" #: ../src/datasource_gps.c:331 ../src/datasource_gps.c:332 #: ../src/datasource_gps.c:333 #, c-format msgid "Downloaded %d %s." msgstr "" #: ../src/datasource_gps.c:347 ../src/vikgpslayer.c:968 #, c-format msgid "GPS Device: %s" msgstr "" #: ../src/datasource_gps.c:370 ../src/vikgpslayer.c:1042 #: ../src/vikgpslayer.c:1110 msgid "Status: Working..." msgstr "" #: ../src/datasource_gps.c:469 ../src/vikgpslayer.c:150 msgid "GPS Protocol:" msgstr "" #. List now assigned at runtime #: ../src/datasource_gps.c:488 ../src/vikgpslayer.c:151 msgid "Serial Port:" msgstr "" #: ../src/datasource_gps.c:509 msgid "" "Turn Off After Transfer\n" "(Garmin/NAViLink Only)" msgstr "" #: ../src/datasource_gps.c:512 msgid "Tracks:" msgstr "" #: ../src/datasource_gps.c:516 msgid "Routes:" msgstr "" #: ../src/datasource_gps.c:520 msgid "Waypoints:" msgstr "" #: ../src/datasource_gps.c:594 ../src/vikgpslayer.c:1305 msgid "GPS device: N/A" msgstr "" #: ../src/datasource_osm.c:52 ../src/datasource_osm.c:53 msgid "OSM traces" msgstr "" #: ../src/datasource_osm.c:80 msgid "Page number:" msgstr "" #: ../src/datasource_osm_my_traces.c:63 ../src/datasource_osm_my_traces.c:64 msgid "OSM My Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:108 msgid "Username:" msgstr "" #: ../src/datasource_osm_my_traces.c:113 msgid "The email or username used to login to OSM" msgstr "" #: ../src/datasource_osm_my_traces.c:115 ../src/osm-traces.c:413 msgid "Password:" msgstr "" #: ../src/datasource_osm_my_traces.c:120 msgid "The password used to login to OSM" msgstr "" #: ../src/datasource_osm_my_traces.c:430 msgid "Description" msgstr "" #: ../src/datasource_osm_my_traces.c:445 msgid "Privacy" msgstr "" #: ../src/datasource_osm_my_traces.c:452 msgid "Within Current View" msgstr "" #: ../src/datasource_osm_my_traces.c:518 msgid "GPS Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:520 msgid "None found!" msgstr "" #: ../src/datasource_osm_my_traces.c:629 msgid "My OSM Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:645 #, c-format msgid "Unable to get trace: %s" msgstr "" #: ../src/datasource_wikipedia.c:32 msgid "Create Waypoints from Wikipedia Articles" msgstr "" #: ../src/datasource_wikipedia.c:33 msgid "Wikipedia Waypoints" msgstr "" #: ../src/dem.c:65 ../src/dem.c:79 msgid "Invalid DEM" msgstr "" #: ../src/dem.c:121 msgid "Invalid DEM header" msgstr "" #: ../src/dem.c:190 ../src/dem.c:203 msgid "Incorrect DEM Class B record: expected 1" msgstr "" #: ../src/dem.c:360 #, c-format msgid "Couldn't map file %s: %s" msgstr "" #: ../src/download.c:112 msgid "Tile age (s):" msgstr "" #: ../src/download.c:233 #, c-format msgid "Download error: %s" msgstr "" #: ../src/download.c:313 msgid "couldn't open temp file" msgstr "" #: ../src/file.c:456 ../src/file.c:461 #, c-format msgid "Draw mode '%s' no more supported" msgstr "" #: ../src/geotag_exif.c:433 msgid "Not enough memory." msgstr "" #: ../src/geotag_exif.c:451 msgid "Setting a value for this tag is unsupported!" msgstr "" #: ../src/geotag_exif.c:470 #, c-format msgid "Too few components specified (need %d, found %d)\n" msgstr "" #: ../src/geotag_exif.c:474 msgid "Numeric value expected\n" msgstr "" #: ../src/geotag_exif.c:482 msgid "This shouldn't happen!" msgstr "" #: ../src/geotag_exif.c:552 msgid "Not yet implemented!" msgstr "" #: ../src/geotag_exif.c:565 msgid "Warning; Too many components specified!" msgstr "" #: ../src/osm-traces.c:73 msgid "Identifiable (public w/ timestamps)" msgstr "" #: ../src/osm-traces.c:74 msgid "Trackable (private w/ timestamps)" msgstr "" #: ../src/osm-traces.c:75 msgid "Public" msgstr "" #: ../src/osm-traces.c:76 msgid "Private" msgstr "" #: ../src/osm-traces.c:93 msgid "OSM username:" msgstr "" #: ../src/osm-traces.c:94 msgid "OSM password:" msgstr "" #. Preferences #: ../src/osm-traces.c:151 msgid "OpenStreetMap Traces" msgstr "" #: ../src/osm-traces.c:234 #, c-format msgid "failed to upload data: HTTP response is %ld" msgstr "" #: ../src/osm-traces.c:239 #, c-format msgid "curl_easy_getinfo failed: %d" msgstr "" #: ../src/osm-traces.c:244 #, c-format msgid "curl request failed: %s" msgstr "" #: ../src/osm-traces.c:275 #, c-format msgid "failed to open temporary file: %s" msgstr "" #. Success #: ../src/osm-traces.c:328 msgid "Uploaded to OSM" msgstr "" #: ../src/osm-traces.c:332 msgid "FAILED TO UPLOAD DATA TO OSM - CURL PROBLEM" msgstr "" #: ../src/osm-traces.c:335 msgid "FAILED TO UPLOAD DATA TO OSM" msgstr "" #: ../src/osm-traces.c:335 msgid "HTTP response code" msgstr "" #: ../src/osm-traces.c:348 #, c-format msgid "failed to unlink temporary file: %s" msgstr "" #: ../src/osm-traces.c:387 msgid "OSM upload" msgstr "" #: ../src/osm-traces.c:405 msgid "Email:" msgstr "" #: ../src/osm-traces.c:410 msgid "" "The email used as login\n" "Enter the email you use to login into www.openstreetmap.org." msgstr "" #: ../src/osm-traces.c:418 msgid "" "The password used to login\n" "Enter the password you use to login into " "www.openstreetmap.org." msgstr "" #: ../src/osm-traces.c:423 msgid "File's name:" msgstr "" #: ../src/osm-traces.c:433 msgid "" "The name of the file on OSM\n" "This is the name of the file created on the server.This is not the " "name of the local file." msgstr "" #: ../src/osm-traces.c:442 msgid "The description of the trace" msgstr "" #: ../src/osm-traces.c:444 msgid "Tags:" msgstr "" #: ../src/osm-traces.c:449 msgid "The tags associated to the trace" msgstr "" #: ../src/osm-traces.c:482 #, c-format msgid "Uploading %s to OSM" msgstr "" #: ../src/mapcache.c:61 msgid "Map cache memory size (MB):" msgstr "" #: ../src/print.c:53 msgid "None" msgstr "" #: ../src/print.c:54 msgid "Horizontally" msgstr "" #: ../src/print.c:55 msgid "Vertically" msgstr "" #: ../src/print.c:56 msgid "Both" msgstr "" #: ../src/print.c:120 msgid "Image Settings" msgstr "" #: ../src/print.c:546 msgid "done" msgstr "" #. Page Size #: ../src/print.c:575 msgid "_Adjust Page Size and Orientation" msgstr "" #: ../src/print.c:591 msgid "C_enter:" msgstr "" #. ignore page margins #: ../src/print.c:609 msgid "Ignore Page _Margins" msgstr "" #: ../src/print.c:628 msgid "Image S_ize:" msgstr "" #: ../src/util.c:81 msgid "Could not launch web browser." msgstr "" #: ../src/util.c:92 msgid "Could not create new email." msgstr "" #: ../src/vikcoordlayer.c:46 msgid "Color:" msgstr "" #: ../src/vikcoordlayer.c:47 msgid "Minutes Width:" msgstr "" #: ../src/vikcoordlayer.c:48 msgid "Line Thickness:" msgstr "" #: ../src/vikcoordlayer.c:56 msgid "Coordinate" msgstr "" #: ../src/datasource_bfilter.c:46 msgid "Max number of points:" msgstr "" #: ../src/datasource_bfilter.c:60 msgid "Simplify All Tracks..." msgstr "" #: ../src/datasource_bfilter.c:61 msgid "Simplified Tracks" msgstr "" #: ../src/datasource_bfilter.c:96 ../src/datasource_bfilter.c:97 msgid "Remove Duplicate Waypoints" msgstr "" #: ../src/datasource_bfilter.c:129 msgid "Waypoints Inside This" msgstr "" #: ../src/datasource_bfilter.c:130 msgid "Polygonized Layer" msgstr "" #: ../src/datasource_bfilter.c:165 msgid "Waypoints Outside This" msgstr "" #: ../src/datasource_bfilter.c:166 msgid "Polygonzied Layer" msgstr "" #: ../src/main.c:89 #, c-format msgid "Ignoring Xlib error: error code %d request code %d\n" msgstr "" #: ../src/main.c:102 msgid "Enable debug output" msgstr "" #: ../src/main.c:103 msgid "Enable verbose output" msgstr "" #: ../src/main.c:104 msgid "Show version" msgstr "" #: ../src/osm.c:106 msgid "On Disk OSM Tile Format" msgstr "" #: ../src/osm.c:121 msgid "OSM (view)" msgstr "" #: ../src/osm.c:125 msgid "OSM (edit)" msgstr "" #: ../src/osm.c:129 msgid "OSM (render)" msgstr "" #. Example: http://127.0.0.1:8111/load_and_zoom?left=8.19&right=8.20&top=48.605&bottom=48.590&select=node413602999 #. JOSM or merkaartor must already be running with remote interface enabled #: ../src/osm.c:136 msgid "Local port 8111 (eg JOSM)" msgstr "" #: ../src/preferences.c:285 msgid "Preferences" msgstr "" #: ../src/uibuilder.c:147 msgid "Take care that this password will be stored clearly in a plain file." msgstr "" #: ../src/vikaggregatelayer.c:37 msgid "Aggregate" msgstr "" #: ../src/vikdemlayer.c:101 msgid "Absolute height" msgstr "" #: ../src/vikdemlayer.c:102 msgid "Height gradient" msgstr "" #: ../src/vikdemlayer.c:118 msgid "DEM Files:" msgstr "" #: ../src/vikdemlayer.c:119 msgid "Download Source:" msgstr "" #: ../src/vikdemlayer.c:120 msgid "Min Elev Color:" msgstr "" #: ../src/vikdemlayer.c:121 msgid "Type:" msgstr "" #: ../src/vikdemlayer.c:122 msgid "Min Elev:" msgstr "" #: ../src/vikdemlayer.c:123 msgid "Max Elev:" msgstr "" #: ../src/vikdemlayer.c:134 msgid "_DEM Download" msgstr "" #: ../src/vikdemlayer.c:134 msgid "DEM Download" msgstr "" #: ../src/vikdemlayer.c:188 msgid "DEM" msgstr "" #: ../src/vikdemlayer.c:284 #, c-format msgid "Number of files: %d" msgstr "" #: ../src/vikdemlayer.c:385 msgid "DEM Loading" msgstr "" #: ../src/vikdemlayer.c:889 #, c-format msgid "No SRTM data available for %f, %f" msgstr "" #: ../src/vikdemlayer.c:1149 #, c-format msgid "Downloading DEM %s" msgstr "" #: ../src/vikfileentry.c:68 msgid "Browse..." msgstr "" #: ../src/vikfileentry.c:96 msgid "Choose file" msgstr "" #: ../src/vikfilelist.c:48 msgid "Choose file(s)" msgstr "" #: ../src/vikfilelist.c:172 msgid "Add..." msgstr "" #: ../src/vikfilelist.c:173 msgid "Delete" msgstr "" #: ../src/vikgeoreflayer.c:70 msgid "_Georef Move Map" msgstr "" #: ../src/vikgeoreflayer.c:70 msgid "Georef Move Map" msgstr "" #: ../src/vikgeoreflayer.c:77 msgid "Georef Z_oom Tool" msgstr "" #: ../src/vikgeoreflayer.c:77 msgid "Georef Zoom Tool" msgstr "" #: ../src/vikgeoreflayer.c:87 msgid "GeoRef Map" msgstr "" #: ../src/vikgeoreflayer.c:335 ../src/vikmapslayer.c:685 #, c-format msgid "Couldn't open image file: %s" msgstr "" #: ../src/vikgeoreflayer.c:365 msgid "Unexpected end of file reading World file." msgstr "" #: ../src/vikgeoreflayer.c:381 ../src/vikgeoreflayer.c:426 msgid "Choose World file" msgstr "" #: ../src/vikgeoreflayer.c:394 msgid "The World file you requested could not be opened for reading." msgstr "" #: ../src/vikgeoreflayer.c:439 msgid "The file you requested could not be opened for writing." msgstr "" #: ../src/vikgeoreflayer.c:456 ../src/viklayer.c:480 msgid "Layer Properties" msgstr "" #: ../src/vikgeoreflayer.c:478 msgid "World File Parameters:" msgstr "" #: ../src/vikgeoreflayer.c:479 msgid "Load From File..." msgstr "" #: ../src/vikgeoreflayer.c:484 msgid "Corner pixel easting:" msgstr "" #: ../src/vikgeoreflayer.c:486 msgid "the UTM \"easting\" value of the upper-right corner pixel of the map" msgstr "" #: ../src/vikgeoreflayer.c:488 msgid "Corner pixel northing:" msgstr "" #: ../src/vikgeoreflayer.c:490 msgid "the UTM \"northing\" value of the upper-right corner pixel of the map" msgstr "" #: ../src/vikgeoreflayer.c:492 msgid "X (easting) scale (mpp): " msgstr "" #: ../src/vikgeoreflayer.c:493 msgid "Y (northing) scale (mpp): " msgstr "" #: ../src/vikgeoreflayer.c:496 msgid "the scale of the map in the X direction (meters per pixel)" msgstr "" #: ../src/vikgeoreflayer.c:498 msgid "the scale of the map in the Y direction (meters per pixel)" msgstr "" #: ../src/vikgeoreflayer.c:500 msgid "Map Image:" msgstr "" #. Now with icons #: ../src/vikgeoreflayer.c:608 msgid "_Zoom to Fit Map" msgstr "" #: ../src/vikgeoreflayer.c:614 msgid "_Goto Map Center" msgstr "" #: ../src/vikgeoreflayer.c:620 msgid "_Export to World File" msgstr "" #: ../src/vikgoto.c:75 msgid "No goto tool available." msgstr "" #: ../src/vikgoto.c:88 ../src/vikgoto.c:107 msgid "goto" msgstr "" #: ../src/vikgoto.c:90 msgid "I don't know that place. Do you want another goto?" msgstr "" #: ../src/vikgoto.c:109 msgid "goto provider:" msgstr "" #: ../src/vikgoto.c:124 msgid "Enter address or place name:" msgstr "" #: ../src/vikgpslayer.c:127 msgid "Data Mode" msgstr "" #: ../src/vikgpslayer.c:129 msgid "Realtime Tracking Mode" msgstr "" #: ../src/vikgpslayer.c:137 msgid "Keep vehicle at center" msgstr "" #: ../src/vikgpslayer.c:138 msgid "Keep vehicle on screen" msgstr "" #: ../src/vikgpslayer.c:139 msgid "Disable" msgstr "" #: ../src/vikgpslayer.c:152 msgid "Download Tracks:" msgstr "" #: ../src/vikgpslayer.c:153 msgid "Upload Tracks:" msgstr "" #: ../src/vikgpslayer.c:154 msgid "Download Routes:" msgstr "" #: ../src/vikgpslayer.c:155 msgid "Upload Routes:" msgstr "" #: ../src/vikgpslayer.c:156 msgid "Download Waypoints:" msgstr "" #: ../src/vikgpslayer.c:157 msgid "Upload Waypoints:" msgstr "" #: ../src/vikgpslayer.c:159 msgid "Recording tracks" msgstr "" #: ../src/vikgpslayer.c:160 msgid "Jump to current position on start" msgstr "" #: ../src/vikgpslayer.c:161 msgid "Moving Map Method:" msgstr "" #: ../src/vikgpslayer.c:162 msgid "Gpsd Host:" msgstr "" #: ../src/vikgpslayer.c:163 msgid "Gpsd Port:" msgstr "" #: ../src/vikgpslayer.c:164 msgid "Gpsd Retry Interval (seconds):" msgstr "" #: ../src/vikgpslayer.c:179 msgid "GPS" msgstr "" #: ../src/vikgpslayer.c:242 ../src/vikgpslayer.c:1258 msgid "GPS Download" msgstr "" #: ../src/vikgpslayer.c:242 ../src/vikgpslayer.c:1258 #: ../src/viktrwlayer.c:3094 msgid "GPS Upload" msgstr "" #: ../src/vikgpslayer.c:244 msgid "GPS Realtime Tracking" msgstr "" #: ../src/vikgpslayer.c:451 msgid "Unknown GPS Protocol" msgstr "" #: ../src/vikgpslayer.c:469 msgid "Unknown serial port device" msgstr "" #: ../src/vikgpslayer.c:572 #, c-format msgid "%s: unknown parameter" msgstr "" #. Now with icons #: ../src/vikgpslayer.c:693 msgid "_Upload to GPS" msgstr "" #: ../src/vikgpslayer.c:699 msgid "Download from _GPS" msgstr "" #: ../src/vikgpslayer.c:720 msgid "Empty _Realtime" msgstr "" #: ../src/vikgpslayer.c:727 msgid "E_mpty Upload" msgstr "" #: ../src/vikgpslayer.c:733 msgid "_Empty Download" msgstr "" #: ../src/vikgpslayer.c:739 msgid "Empty _All" msgstr "" #. #. NB It's not fatal if this gives 2 for example! Hence removal of the g_assert #. This happens when copied GPS layer is deleted (not sure why the number_handlers would be 2) #. I don't think there's any side effects and certainly better than the program just aborting #. #: ../src/vikgpslayer.c:756 #, c-format msgid "Unexpected number of disconnected handlers: %d" msgstr "" #: ../src/vikgpslayer.c:898 #, c-format msgid "Uploading %d waypoint..." msgid_plural "Uploading %d waypoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:899 #, c-format msgid "Uploading %d trackpoint..." msgid_plural "Uploading %d trackpoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:900 #, c-format msgid "Uploading %d routepoint..." msgid_plural "Uploading %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:925 #, c-format msgid "Downloaded %d out of %d waypoint..." msgid_plural "Downloaded %d out of %d waypoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:926 #, c-format msgid "Downloaded %d out of %d trackpoint..." msgid_plural "Downloaded %d out of %d trackpoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:927 #, c-format msgid "Downloaded %d out of %d routepoint..." msgid_plural "Downloaded %d out of %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:932 #, c-format msgid "Uploaded %d out of %d waypoint..." msgid_plural "Uploaded %d out of %d waypoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:933 #, c-format msgid "Uploaded %d out of %d trackpoint..." msgid_plural "Uploaded %d out of %d trackpoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:934 #, c-format msgid "Uploaded %d out of %d routepoint..." msgid_plural "Uploaded %d out of %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:942 #, c-format msgid "Downloaded %d waypoint" msgid_plural "Downloaded %d waypoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:943 #, c-format msgid "Downloaded %d trackpoint" msgid_plural "Downloaded %d trackpoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:944 #, c-format msgid "Downloaded %d routepoint" msgid_plural "Downloaded %d routepoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:949 #, c-format msgid "Uploaded %d waypoint" msgid_plural "Uploaded %d waypoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:950 #, c-format msgid "Uploaded %d trackpoint" msgid_plural "Uploaded %d trackpoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:951 #, c-format msgid "Uploaded %d routepoint" msgid_plural "Uploaded %d routepoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:1180 msgid "Error: couldn't find gpsbabel." msgstr "" #: ../src/vikgpslayer.c:1269 msgid "Warning - GPS Upload items may overwrite each other" msgstr "" #: ../src/vikgpslayer.c:1301 msgid "Status: detecting gpsbabel" msgstr "" #: ../src/vikgpslayer.c:1332 msgid "No GPS items selected for transfer." msgstr "" #: ../src/vikgpslayer.c:1347 msgid "Could not turn off device." msgstr "" #: ../src/vikgpslayer.c:1385 msgid "Are you sure you want to delete GPS Upload data?" msgstr "" #: ../src/vikgpslayer.c:1398 msgid "Are you sure you want to delete GPS Download data?" msgstr "" #: ../src/vikgpslayer.c:1412 msgid "Are you sure you want to delete GPS Realtime data?" msgstr "" #: ../src/vikgpslayer.c:1425 msgid "Are you sure you want to delete All GPS data?" msgstr "" #: ../src/viklayerspanel.c:55 msgid "/C_ut" msgstr "" #: ../src/viklayerspanel.c:56 msgid "/_Copy" msgstr "" #: ../src/viklayerspanel.c:57 msgid "/_Paste" msgstr "" #: ../src/viklayerspanel.c:58 msgid "/_Delete" msgstr "" #: ../src/viklayerspanel.c:59 msgid "/New Layer" msgstr "" #: ../src/viklayerspanel.c:127 msgid "Top Layer" msgstr "" #: ../src/viklayerspanel.c:143 msgid "Add new layer" msgstr "" #: ../src/viklayerspanel.c:150 msgid "Remove selected layer" msgstr "" #: ../src/viklayerspanel.c:157 msgid "Move selected layer up" msgstr "" #: ../src/viklayerspanel.c:164 msgid "Move selected layer down" msgstr "" #: ../src/viklayerspanel.c:171 msgid "Cut selected layer" msgstr "" #: ../src/viklayerspanel.c:178 msgid "Copy selected layer" msgstr "" #: ../src/viklayerspanel.c:185 msgid "Paste layer below selected layer" msgstr "" #. TODO: FIXME: if name has a '/' in it it will get all messed up. why not have an itemfactory field with #. name, icon, shortcut, etc.? #: ../src/viklayerspanel.c:204 ../src/vikwindow.c:3292 #, c-format msgid "New _%s Layer" msgstr "" #: ../src/viklayerspanel.c:511 msgid "Aggregate Layers have no settable properties." msgstr "" #: ../src/viklayerspanel.c:555 msgid "You cannot cut the Top Layer." msgstr "" #: ../src/viklayerspanel.c:600 #, c-format msgid "Are you sure you want to delete %s?" msgstr "" #: ../src/viklayerspanel.c:617 msgid "You cannot delete the Top Layer." msgstr "" #: ../src/viklayerspanel.c:701 msgid "Are you sure you wish to delete all layers?" msgstr "" #. ******* MAPZOOMS ******** #: ../src/vikmapslayer.c:91 msgid "Use Viking Zoom Level" msgstr "" #: ../src/vikmapslayer.c:124 msgid "Map Type:" msgstr "" #: ../src/vikmapslayer.c:125 msgid "Maps Directory:" msgstr "" #: ../src/vikmapslayer.c:126 msgid "Alpha:" msgstr "" #: ../src/vikmapslayer.c:127 msgid "Control the Alpha value for transparency effects" msgstr "" #: ../src/vikmapslayer.c:128 msgid "Autodownload maps:" msgstr "" #: ../src/vikmapslayer.c:129 msgid "Autodownload Only Gets Missing Maps:" msgstr "" #: ../src/vikmapslayer.c:130 msgid "" "Using this option avoids attempting to update already acquired tiles. This " "can be useful if you want to restrict the network usage, without having to " "resort to manual control. Only applies when 'Autodownload Maps' is on." msgstr "" #: ../src/vikmapslayer.c:131 msgid "Zoom Level:" msgstr "" #: ../src/vikmapslayer.c:132 msgid "" "Determines the method of displaying map tiles for the current zoom level. " "'Viking Zoom Level' uses the best matching level, otherwise setting a fixed " "value will always use map tiles of the specified value regardless of the " "actual zoom level." msgstr "" #: ../src/vikmapslayer.c:146 msgid "_Maps Download" msgstr "" #: ../src/vikmapslayer.c:146 msgid "Maps Download" msgstr "" #: ../src/vikmapslayer.c:161 msgid "Map" msgstr "" #: ../src/vikmapslayer.c:249 msgid "Default maplayer directory:" msgstr "" #: ../src/vikmapslayer.c:249 msgid "Choose a directory to store cached Map tiles for this layer" msgstr "" #: ../src/vikmapslayer.c:505 msgid "Unknown map type" msgstr "" #: ../src/vikmapslayer.c:516 msgid "Unknown Map Zoom" msgstr "" #: ../src/vikmapslayer.c:589 #, c-format msgid "" "New map cannot be displayed in the current drawmode.\n" "Select \"%s\" from View menu to view it." msgstr "" #: ../src/vikmapslayer.c:753 #, c-format msgid "" "Cowardly refusing to draw tiles or existence of tiles beyond %d zoom out " "factor" msgstr "" #: ../src/vikmapslayer.c:1157 #, c-format msgid "Redownloading up to %d %s map..." msgid_plural "Redownloading up to %d %s maps..." msgstr[0] "" msgstr[1] "" #: ../src/vikmapslayer.c:1159 #, c-format msgid "Redownloading %d %s map..." msgid_plural "Redownloading %d %s maps..." msgstr[0] "" msgstr[1] "" #: ../src/vikmapslayer.c:1163 ../src/vikmapslayer.c:1238 #, c-format msgid "Downloading %d %s map..." msgid_plural "Downloading %d %s maps..." msgstr[0] "" msgstr[1] "" #: ../src/vikmapslayer.c:1311 #, c-format msgid "" "\n" "Source: %s\n" "\n" "Tile File: %s\n" "Tile File Timestamp: %s" msgstr "" #: ../src/vikmapslayer.c:1318 #, c-format msgid "" "Source: %s\n" "\n" "No Tile File!" msgstr "" #: ../src/vikmapslayer.c:1356 msgid "Redownload _Bad Map(s)" msgstr "" #: ../src/vikmapslayer.c:1360 msgid "Redownload _New Map(s)" msgstr "" #: ../src/vikmapslayer.c:1364 msgid "Redownload _All Map(s)" msgstr "" #: ../src/vikmapslayer.c:1368 msgid "_Show Tile Information" msgstr "" #: ../src/vikmapslayer.c:1449 #, c-format msgid "" "Wrong drawmode for this map.\n" "Select \"%s\" from View menu and try again." msgstr "" #: ../src/vikmapslayer.c:1454 msgid "Wrong zoom level for this map." msgstr "" #. Now with icons #: ../src/vikmapslayer.c:1485 msgid "Download _Missing Onscreen Maps" msgstr "" #: ../src/vikmapslayer.c:1492 msgid "Download _New Onscreen Maps" msgstr "" #: ../src/vikmapslayer.c:1499 msgid "Reload _All Onscreen Maps" msgstr "" #: ../src/viktreeview.c:263 msgid "Layer Name" msgstr "" #: ../src/viktreeview.c:742 #, c-format msgid "delete data from %s\n" msgstr "" #: ../src/viktrwlayer.c:377 msgid "Create _Waypoint" msgstr "" #: ../src/viktrwlayer.c:377 msgid "Create Waypoint" msgstr "" #: ../src/viktrwlayer.c:383 msgid "Create _Track" msgstr "" #: ../src/viktrwlayer.c:383 msgid "Create Track" msgstr "" #: ../src/viktrwlayer.c:392 msgid "Create _Route" msgstr "" #: ../src/viktrwlayer.c:392 msgid "Create Route" msgstr "" #: ../src/viktrwlayer.c:401 msgid "_Edit Waypoint" msgstr "" #: ../src/viktrwlayer.c:401 msgid "Edit Waypoint" msgstr "" #: ../src/viktrwlayer.c:409 msgid "Edit Trac_kpoint" msgstr "" #: ../src/viktrwlayer.c:409 msgid "Edit Trackpoint" msgstr "" #: ../src/viktrwlayer.c:417 msgid "Show P_icture" msgstr "" #: ../src/viktrwlayer.c:417 msgid "Show Picture" msgstr "" #: ../src/viktrwlayer.c:424 msgid "Route _Finder" msgstr "" #: ../src/viktrwlayer.c:424 msgid "Route Finder" msgstr "" #. ***** PARAMETERS ***** #: ../src/viktrwlayer.c:447 ../src/viktrwlayer.c:1942 #: ../src/viktrwlayer.c:1944 msgid "Waypoints" msgstr "" #: ../src/viktrwlayer.c:447 ../src/viktrwlayer.c:1933 #: ../src/viktrwlayer.c:1935 msgid "Tracks" msgstr "" #: ../src/viktrwlayer.c:447 msgid "Waypoint Images" msgstr "" #: ../src/viktrwlayer.c:450 msgid "Draw by Track" msgstr "" #: ../src/viktrwlayer.c:450 msgid "Draw by Speed" msgstr "" #: ../src/viktrwlayer.c:450 msgid "All Tracks Same Color" msgstr "" #: ../src/viktrwlayer.c:451 msgid "Filled Square" msgstr "" #: ../src/viktrwlayer.c:451 msgid "Square" msgstr "" #: ../src/viktrwlayer.c:451 msgid "Circle" msgstr "" #: ../src/viktrwlayer.c:451 msgid "X" msgstr "" #: ../src/viktrwlayer.c:477 msgid "Extra Extra Small" msgstr "" #: ../src/viktrwlayer.c:478 msgid "Extra Small" msgstr "" #: ../src/viktrwlayer.c:479 msgid "Small" msgstr "" #: ../src/viktrwlayer.c:480 msgid "Medium" msgstr "" #: ../src/viktrwlayer.c:481 msgid "Large" msgstr "" #: ../src/viktrwlayer.c:482 msgid "Extra Large" msgstr "" #: ../src/viktrwlayer.c:483 msgid "Extra Extra Large" msgstr "" #: ../src/viktrwlayer.c:491 msgid "Track Drawing Mode:" msgstr "" #: ../src/viktrwlayer.c:492 msgid "All Tracks Color:" msgstr "" #: ../src/viktrwlayer.c:493 msgid "The color used when 'All Tracks Same Color' drawing mode is selected" msgstr "" #: ../src/viktrwlayer.c:494 msgid "Draw Track Lines" msgstr "" #: ../src/viktrwlayer.c:495 msgid "Track Thickness:" msgstr "" #: ../src/viktrwlayer.c:496 msgid "Draw Track Direction" msgstr "" #: ../src/viktrwlayer.c:497 msgid "Direction Size:" msgstr "" #: ../src/viktrwlayer.c:498 msgid "Draw Trackpoints" msgstr "" #: ../src/viktrwlayer.c:499 msgid "Trackpoint Size:" msgstr "" #: ../src/viktrwlayer.c:500 msgid "Draw Elevation" msgstr "" #: ../src/viktrwlayer.c:501 msgid "Draw Elevation Height %:" msgstr "" #: ../src/viktrwlayer.c:503 msgid "Draw Stops" msgstr "" #: ../src/viktrwlayer.c:504 msgid "" "Whether to draw a marker when trackpoints are at the same position but over " "the minimum stop length apart in time" msgstr "" #: ../src/viktrwlayer.c:505 msgid "Min Stop Length (seconds):" msgstr "" #: ../src/viktrwlayer.c:507 msgid "Track BG Thickness:" msgstr "" #: ../src/viktrwlayer.c:508 msgid "Track Background Color" msgstr "" #: ../src/viktrwlayer.c:509 msgid "Draw by Speed Factor (%):" msgstr "" #: ../src/viktrwlayer.c:510 msgid "" "The percentage factor away from the average speed determining the color used" msgstr "" #: ../src/viktrwlayer.c:512 msgid "Draw Labels" msgstr "" #: ../src/viktrwlayer.c:513 msgid "Waypoint Font Size:" msgstr "" #: ../src/viktrwlayer.c:514 msgid "Waypoint Color:" msgstr "" #: ../src/viktrwlayer.c:515 msgid "Waypoint Text:" msgstr "" #: ../src/viktrwlayer.c:516 msgid "Background:" msgstr "" #: ../src/viktrwlayer.c:517 msgid "Fake BG Color Translucency:" msgstr "" #: ../src/viktrwlayer.c:518 msgid "Waypoint marker:" msgstr "" #: ../src/viktrwlayer.c:519 msgid "Waypoint size:" msgstr "" #: ../src/viktrwlayer.c:520 msgid "Draw Waypoint Symbols:" msgstr "" #: ../src/viktrwlayer.c:522 msgid "Draw Waypoint Images" msgstr "" #: ../src/viktrwlayer.c:523 msgid "Image Size (pixels):" msgstr "" #: ../src/viktrwlayer.c:524 msgid "Image Alpha:" msgstr "" #: ../src/viktrwlayer.c:525 msgid "Image Memory Cache Size:" msgstr "" #: ../src/viktrwlayer.c:610 msgid "TrackWaypoint" msgstr "" #: ../src/viktrwlayer.c:1951 ../src/viktrwlayer.c:1953 msgid "Routes" msgstr "" #: ../src/viktrwlayer.c:2144 #, c-format msgid " in %d:%02d hrs:mins" msgstr "" #: ../src/viktrwlayer.c:2148 #, c-format msgid "" "\n" "%sTotal Length %.1f %s%s" msgstr "" #: ../src/viktrwlayer.c:2154 #, c-format msgid "Tracks: %d - Waypoints: %d - Routes: %d%s" msgstr "" #: ../src/viktrwlayer.c:2174 #, c-format msgid "Tracks: %d" msgstr "" #: ../src/viktrwlayer.c:2184 #, c-format msgid "Routes: %d" msgstr "" #: ../src/viktrwlayer.c:2215 #, c-format msgid "- %d:%02d hrs:mins" msgstr "" #: ../src/viktrwlayer.c:2223 #, c-format msgid "%s%.1f km %s" msgstr "" #: ../src/viktrwlayer.c:2226 #, c-format msgid "%s%.1f miles %s" msgstr "" #: ../src/viktrwlayer.c:2240 #, c-format msgid "Waypoints: %d" msgstr "" #: ../src/viktrwlayer.c:2266 #, c-format msgid "Trkpt: Alt %dft" msgstr "" #. VIK_UNITS_HEIGHT_METRES: #: ../src/viktrwlayer.c:2270 #, c-format msgid "Trkpt: Alt %dm" msgstr "" #. Compact date time format #: ../src/viktrwlayer.c:2277 #, c-format msgid " | Time %x %X" msgstr "" #: ../src/viktrwlayer.c:2295 #, c-format msgid " | Track: %s" msgstr "" #. Combine parts to make overall message #: ../src/viktrwlayer.c:2299 #, c-format msgid "%s%s | %s %s %s" msgstr "" #: ../src/viktrwlayer.c:2314 #, c-format msgid "Wpt: Alt %dft" msgstr "" #. VIK_UNITS_HEIGHT_METRES: #: ../src/viktrwlayer.c:2318 #, c-format msgid "Wpt: Alt %dm" msgstr "" #. Add comment if available #: ../src/viktrwlayer.c:2333 #, c-format msgid "%s | %s %s | Comment: %s" msgstr "" #: ../src/viktrwlayer.c:2335 #, c-format msgid "%s | %s %s" msgstr "" #: ../src/viktrwlayer.c:2563 ../src/viktrwlayer.c:2634 msgid "This layer has no waypoints or trackpoints." msgstr "" #: ../src/viktrwlayer.c:2661 ../src/vikwindow.c:2407 ../src/vikwindow.c:2848 #, c-format msgid "The file \"%s\" exists, do you wish to overwrite it?" msgstr "" #: ../src/viktrwlayer.c:2671 ../src/vikwindow.c:2429 msgid "The filename you requested could not be opened for writing." msgstr "" #: ../src/viktrwlayer.c:2676 ../src/viktrwlayer.c:2681 #: ../src/viktrwlayer.c:2691 ../src/viktrwlayer.c:2703 msgid "Export Layer" msgstr "" #: ../src/viktrwlayer.c:2720 msgid "Could not create temporary file for export." msgstr "" #: ../src/viktrwlayer.c:2729 #, c-format msgid "Could not launch %s." msgstr "" #: ../src/viktrwlayer.c:2773 msgid "Export Track as GPX" msgstr "" #: ../src/viktrwlayer.c:2795 msgid "Find" msgstr "" #: ../src/viktrwlayer.c:2805 msgid "Waypoint Name:" msgstr "" #: ../src/viktrwlayer.c:2822 msgid "Waypoint not found in this layer." msgstr "" #: ../src/viktrwlayer.c:3090 msgid "Can not upload invisible track." msgstr "" #: ../src/viktrwlayer.c:3192 ../src/viktrwlayer.c:7785 msgid "Track" msgstr "" #: ../src/viktrwlayer.c:3215 ../src/viktrwlayer.c:7817 msgid "Route" msgstr "" #: ../src/viktrwlayer.c:3296 ../src/viktrwlayer.c:6265 #: ../src/viktrwlayer.c:6314 msgid "_Finish Route" msgstr "" #: ../src/viktrwlayer.c:3298 ../src/viktrwlayer.c:6223 #: ../src/viktrwlayer.c:6312 msgid "_Finish Track" msgstr "" #. Now with icons #: ../src/viktrwlayer.c:3310 msgid "_View Layer" msgstr "" #: ../src/viktrwlayer.c:3317 msgid "V_iew" msgstr "" #: ../src/viktrwlayer.c:3323 msgid "View All _Tracks" msgstr "" #: ../src/viktrwlayer.c:3328 msgid "View All _Routes" msgstr "" #: ../src/viktrwlayer.c:3333 msgid "View All _Waypoints" msgstr "" #: ../src/viktrwlayer.c:3338 msgid "_Goto Center of Layer" msgstr "" #: ../src/viktrwlayer.c:3344 ../src/viktrwlayer.c:6199 msgid "Goto _Waypoint..." msgstr "" #: ../src/viktrwlayer.c:3350 msgid "_Export Layer" msgstr "" #: ../src/viktrwlayer.c:3356 msgid "Export as GPS_Point..." msgstr "" #: ../src/viktrwlayer.c:3361 msgid "Export as GPS_Mapper..." msgstr "" #: ../src/viktrwlayer.c:3366 msgid "Export as _GPX..." msgstr "" #: ../src/viktrwlayer.c:3371 msgid "Export as _KML..." msgstr "" #: ../src/viktrwlayer.c:3376 msgid "Open with External Program_1: " msgstr "" #: ../src/viktrwlayer.c:3383 msgid "Open with External Program_2: " msgstr "" #: ../src/viktrwlayer.c:3391 ../src/vikwindow.c:3145 msgid "_New" msgstr "" #: ../src/viktrwlayer.c:3397 msgid "New _Waypoint..." msgstr "" #: ../src/viktrwlayer.c:3403 msgid "New _Track" msgstr "" #: ../src/viktrwlayer.c:3411 msgid "New _Route" msgstr "" #: ../src/viktrwlayer.c:3420 ../src/viktrwlayer.c:6597 msgid "Geotag _Images..." msgstr "" #: ../src/viktrwlayer.c:3427 msgid "_Acquire" msgstr "" #: ../src/viktrwlayer.c:3433 ../src/vikwindow.c:3150 msgid "From _GPS..." msgstr "" #: ../src/viktrwlayer.c:3439 msgid "From Google _Directions..." msgstr "" #: ../src/viktrwlayer.c:3446 msgid "From _OSM Traces..." msgstr "" #: ../src/viktrwlayer.c:3451 msgid "From _My OSM Traces..." msgstr "" #: ../src/viktrwlayer.c:3459 ../src/vikwindow.c:3166 msgid "From _Wikipedia Waypoints" msgstr "" #: ../src/viktrwlayer.c:3465 msgid "Within _Layer Bounds" msgstr "" #: ../src/viktrwlayer.c:3471 msgid "Within _Current View" msgstr "" #: ../src/viktrwlayer.c:3479 msgid "From Geo_caching..." msgstr "" #: ../src/viktrwlayer.c:3486 ../src/vikwindow.c:3163 msgid "From Geotagged _Images..." msgstr "" #: ../src/viktrwlayer.c:3492 msgid "From _File..." msgstr "" #: ../src/viktrwlayer.c:3498 ../src/viktrwlayer.c:6542 msgid "_Upload" msgstr "" #: ../src/viktrwlayer.c:3504 msgid "Upload to _GPS..." msgstr "" #: ../src/viktrwlayer.c:3511 ../src/viktrwlayer.c:6570 msgid "Upload to _OSM..." msgstr "" #: ../src/viktrwlayer.c:3519 msgid "De_lete" msgstr "" #: ../src/viktrwlayer.c:3525 msgid "Delete All _Tracks" msgstr "" #: ../src/viktrwlayer.c:3531 msgid "Delete Tracks _From Selection..." msgstr "" #: ../src/viktrwlayer.c:3537 ../src/viktrwlayer.c:6290 msgid "Delete _All Routes" msgstr "" #: ../src/viktrwlayer.c:3543 ../src/viktrwlayer.c:6296 msgid "_Delete Routes From Selection..." msgstr "" #: ../src/viktrwlayer.c:3549 msgid "Delete All _Waypoints" msgstr "" #: ../src/viktrwlayer.c:3555 msgid "Delete Waypoints From _Selection..." msgstr "" #: ../src/viktrwlayer.c:4128 #, c-format msgid "Are you sure you want to delete all tracks in %s?" msgstr "" #: ../src/viktrwlayer.c:4138 #, c-format msgid "Are you sure you want to delete all routes in %s?" msgstr "" #: ../src/viktrwlayer.c:4148 #, c-format msgid "Are you sure you want to delete all waypoints in %s?" msgstr "" #: ../src/viktrwlayer.c:4165 #, c-format msgid "Are you sure you want to delete the waypoint \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4178 #, c-format msgid "Are you sure you want to delete the track \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4191 #, c-format msgid "Are you sure you want to delete the route \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4351 ../src/viktrwlayer.c:4922 msgid "" "Converting a track to a route removes extra track data such as segments, " "timestamps, etc...\n" "Do you want to continue?" msgstr "" #: ../src/viktrwlayer.c:4711 msgid "Failed. No other tracks with timestamps in this layer found" msgstr "" #: ../src/viktrwlayer.c:4713 msgid "Failed. No other tracks without timestamps in this layer found" msgstr "" #: ../src/viktrwlayer.c:4732 msgid "Merge with..." msgstr "" #: ../src/viktrwlayer.c:4733 msgid "Select route to merge with" msgstr "" #: ../src/viktrwlayer.c:4733 msgid "Select track to merge with" msgstr "" #: ../src/viktrwlayer.c:4818 ../src/viktrwlayer.c:4895 msgid "Append Route" msgstr "" #: ../src/viktrwlayer.c:4818 ../src/viktrwlayer.c:4895 msgid "Append Track" msgstr "" #: ../src/viktrwlayer.c:4819 msgid "Select the route to append after the current route" msgstr "" #: ../src/viktrwlayer.c:4820 msgid "Select the track to append after the current track" msgstr "" #: ../src/viktrwlayer.c:4896 msgid "Select the track to append after the current route" msgstr "" #: ../src/viktrwlayer.c:4897 msgid "Select the route to append after the current track" msgstr "" #: ../src/viktrwlayer.c:4957 #, c-format msgid "%d segment merged" msgid_plural "%d segments merged" msgstr[0] "" msgstr[1] "" #: ../src/viktrwlayer.c:4973 msgid "Failed. This track does not have timestamp" msgstr "" #: ../src/viktrwlayer.c:4985 msgid "Failed. No other track in this layer has timestamp" msgstr "" #: ../src/viktrwlayer.c:4992 msgid "Merge Threshold..." msgstr "" #: ../src/viktrwlayer.c:4993 msgid "Merge when time between tracks less than:" msgstr "" #: ../src/viktrwlayer.c:5128 msgid "Split Threshold..." msgstr "" #: ../src/viktrwlayer.c:5129 msgid "Split when time between trackpoints exceeds:" msgstr "" #: ../src/viktrwlayer.c:5205 msgid "Split Every Nth Point" msgstr "" #: ../src/viktrwlayer.c:5206 msgid "Split on every Nth point:" msgstr "" #: ../src/viktrwlayer.c:5312 msgid "Can not split track as it has no segments" msgstr "" #: ../src/viktrwlayer.c:5340 ../src/viktrwlayer.c:5370 #, c-format msgid "Deleted %ld point" msgid_plural "Deleted %ld points" msgstr[0] "" msgstr[1] "" #: ../src/viktrwlayer.c:5531 msgid "Internal Error in vik_trw_layer_uniquify_tracks" msgstr "" #: ../src/viktrwlayer.c:5588 ../src/viktrwlayer.c:5635 #: ../src/viktrwlayer.c:5814 msgid "" "Multiple entries with the same name exist. This method only works with " "unique names. Force unique names now?" msgstr "" #: ../src/viktrwlayer.c:5599 msgid "No tracks found" msgstr "" #: ../src/viktrwlayer.c:5607 ../src/viktrwlayer.c:5654 #: ../src/viktrwlayer.c:5834 msgid "Delete Selection" msgstr "" #: ../src/viktrwlayer.c:5608 msgid "Select tracks to delete" msgstr "" #: ../src/viktrwlayer.c:5646 msgid "No routes found" msgstr "" #: ../src/viktrwlayer.c:5655 msgid "Select routes to delete" msgstr "" #: ../src/viktrwlayer.c:5761 msgid "Internal Error in vik_trw_layer_uniquify_waypoints" msgstr "" #: ../src/viktrwlayer.c:5824 msgid "No waypoints found" msgstr "" #: ../src/viktrwlayer.c:5835 msgid "Select waypoints to delete" msgstr "" #: ../src/viktrwlayer.c:5896 #, c-format msgid "" "A waypoint with the name \"%s\" already exists. Really rename to the same " "name?" msgstr "" #: ../src/viktrwlayer.c:5926 #, c-format msgid "" "A track with the name \"%s\" already exists. Really rename to the same name?" msgstr "" #: ../src/viktrwlayer.c:5963 #, c-format msgid "" "A route with the name \"%s\" already exists. Really rename to the same name?" msgstr "" #: ../src/viktrwlayer.c:6085 ../src/viktrwlayer.c:6337 msgid "_Goto" msgstr "" #: ../src/viktrwlayer.c:6104 msgid "_Visit Geocache Webpage" msgstr "" #: ../src/viktrwlayer.c:6123 msgid "_Show Picture..." msgstr "" #: ../src/viktrwlayer.c:6131 msgid "Update Geotag on _Image" msgstr "" #: ../src/viktrwlayer.c:6137 msgid "_Update" msgstr "" #: ../src/viktrwlayer.c:6142 msgid "Update and _Keep File Timestamp" msgstr "" #: ../src/viktrwlayer.c:6153 msgid "Visit _Webpage" msgstr "" #: ../src/viktrwlayer.c:6184 msgid "_New Waypoint..." msgstr "" #: ../src/viktrwlayer.c:6193 msgid "_View All Waypoints" msgstr "" #: ../src/viktrwlayer.c:6205 msgid "Delete _All Waypoints" msgstr "" #: ../src/viktrwlayer.c:6211 msgid "_Delete Waypoints From Selection..." msgstr "" #: ../src/viktrwlayer.c:6233 msgid "_View All Tracks" msgstr "" #: ../src/viktrwlayer.c:6239 msgid "_New Track" msgstr "" #: ../src/viktrwlayer.c:6247 msgid "Delete _All Tracks" msgstr "" #: ../src/viktrwlayer.c:6253 msgid "_Delete Tracks From Selection..." msgstr "" #: ../src/viktrwlayer.c:6276 msgid "_View All Routes" msgstr "" #: ../src/viktrwlayer.c:6282 msgid "_New Route" msgstr "" #: ../src/viktrwlayer.c:6327 msgid "_View Track" msgstr "" #: ../src/viktrwlayer.c:6329 msgid "_View Route" msgstr "" #: ../src/viktrwlayer.c:6343 msgid "_Startpoint" msgstr "" #: ../src/viktrwlayer.c:6349 msgid "\"_Center\"" msgstr "" #: ../src/viktrwlayer.c:6355 msgid "_Endpoint" msgstr "" #: ../src/viktrwlayer.c:6361 msgid "_Highest Altitude" msgstr "" #: ../src/viktrwlayer.c:6367 msgid "_Lowest Altitude" msgstr "" #: ../src/viktrwlayer.c:6375 msgid "_Maximum Speed" msgstr "" #: ../src/viktrwlayer.c:6384 msgid "Co_mbine" msgstr "" #: ../src/viktrwlayer.c:6392 msgid "_Merge By Time..." msgstr "" #: ../src/viktrwlayer.c:6397 msgid "Merge _Segments" msgstr "" #: ../src/viktrwlayer.c:6403 msgid "Merge _With Other Tracks..." msgstr "" #: ../src/viktrwlayer.c:6409 msgid "_Append Track..." msgstr "" #: ../src/viktrwlayer.c:6411 msgid "_Append Route..." msgstr "" #: ../src/viktrwlayer.c:6417 msgid "Append _Route..." msgstr "" #: ../src/viktrwlayer.c:6419 msgid "Append _Track..." msgstr "" #: ../src/viktrwlayer.c:6426 msgid "_Split" msgstr "" #: ../src/viktrwlayer.c:6434 msgid "_Split By Time..." msgstr "" #. ATM always enable this entry - don't want to have to analyse the track before displaying the menu - to keep the menu speedy #: ../src/viktrwlayer.c:6440 msgid "Split Se_gments" msgstr "" #: ../src/viktrwlayer.c:6446 msgid "Split By _Number of Points..." msgstr "" #: ../src/viktrwlayer.c:6451 msgid "Split at _Trackpoint" msgstr "" #: ../src/viktrwlayer.c:6460 msgid "Delete Poi_nts" msgstr "" #: ../src/viktrwlayer.c:6466 msgid "Delete Points With The Same _Position" msgstr "" #: ../src/viktrwlayer.c:6471 msgid "Delete Points With The Same _Time" msgstr "" #: ../src/viktrwlayer.c:6477 msgid "_Reverse Track" msgstr "" #: ../src/viktrwlayer.c:6479 msgid "_Reverse Route" msgstr "" #: ../src/viktrwlayer.c:6488 msgid "Down_load Maps Along Track..." msgstr "" #: ../src/viktrwlayer.c:6490 msgid "Down_load Maps Along Route..." msgstr "" #: ../src/viktrwlayer.c:6497 msgid "_Apply DEM Data" msgstr "" #: ../src/viktrwlayer.c:6504 msgid "_Export Track as GPX..." msgstr "" #: ../src/viktrwlayer.c:6506 msgid "_Export Route as GPX..." msgstr "" #: ../src/viktrwlayer.c:6513 msgid "E_xtend Track End" msgstr "" #: ../src/viktrwlayer.c:6515 msgid "E_xtend Route End" msgstr "" #: ../src/viktrwlayer.c:6522 msgid "C_onvert to a Route" msgstr "" #: ../src/viktrwlayer.c:6524 msgid "C_onvert to a Track" msgstr "" #: ../src/viktrwlayer.c:6532 msgid "Extend _Using Route Finder" msgstr "" #: ../src/viktrwlayer.c:6548 msgid "_Upload to GPS..." msgstr "" #: ../src/viktrwlayer.c:6559 msgid "_View Google Directions" msgstr "" #: ../src/viktrwlayer.c:6579 msgid "Use with _Filter" msgstr "" #: ../src/viktrwlayer.c:6612 msgid "_Edit Trackpoint" msgstr "" #: ../src/viktrwlayer.c:7524 #, c-format msgid " - Gain %dm:Loss %dm" msgstr "" #: ../src/viktrwlayer.c:7526 #, c-format msgid " - Gain %dft:Loss %dft" msgstr "" #: ../src/viktrwlayer.c:7531 #, c-format msgid " - Bearing %3.1f° - Step %s" msgstr "" #: ../src/viktrwlayer.c:8124 #, c-format msgid "Could not launch %s to open file." msgstr "" #: ../src/viktrwlayer.c:8205 #, c-format msgid "Creating %d Image Thumbnails..." msgstr "" #: ../src/viktrwlayer.c:8524 msgid "No map layer in use. Create one first" msgstr "" #: ../src/viktrwlayer_propwin.c:898 ../src/viktrwlayer_propwin.c:1155 #, c-format msgid "%.1f kph" msgstr "" #: ../src/viktrwlayer_propwin.c:901 ../src/viktrwlayer_propwin.c:1158 #, c-format msgid "%.1f mph" msgstr "" #: ../src/viktrwlayer_propwin.c:904 ../src/viktrwlayer_propwin.c:1161 #, c-format msgid "%.1f knots" msgstr "" #. VIK_UNITS_SPEED_METRES_PER_SECOND: #: ../src/viktrwlayer_propwin.c:908 ../src/viktrwlayer_propwin.c:1165 #, c-format msgid "%.1f m/s" msgstr "" #: ../src/viktrwlayer_propwin.c:1745 #, c-format msgid "%.1f miles" msgstr "" #: ../src/viktrwlayer_propwin.c:1747 #, c-format msgid "%.1f km" msgstr "" #: ../src/viktrwlayer_propwin.c:2681 msgid "Failed spliting track. Track unchanged" msgstr "" #: ../src/viktrwlayer_propwin.c:2779 ../src/viktrwlayer_propwin.c:3178 #, c-format msgid "%s - Track Properties" msgstr "" #: ../src/viktrwlayer_propwin.c:2784 msgid "Split at _Marker" msgstr "" #: ../src/viktrwlayer_propwin.c:2785 msgid "Split _Segments" msgstr "" #: ../src/viktrwlayer_propwin.c:2786 msgid "_Reverse" msgstr "" #: ../src/viktrwlayer_propwin.c:2787 msgid "_Delete Dupl." msgstr "" #: ../src/viktrwlayer_propwin.c:2813 msgid "Comment:" msgstr "" #: ../src/viktrwlayer_propwin.c:2814 msgid "Description:" msgstr "" #: ../src/viktrwlayer_propwin.c:2815 msgid "Track Length:" msgstr "" #: ../src/viktrwlayer_propwin.c:2816 msgid "Trackpoints:" msgstr "" #: ../src/viktrwlayer_propwin.c:2817 msgid "Segments:" msgstr "" #: ../src/viktrwlayer_propwin.c:2818 msgid "Duplicate Points:" msgstr "" #: ../src/viktrwlayer_propwin.c:2819 msgid "Max Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:2820 msgid "Avg. Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:2821 msgid "Moving Avg. Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:2822 msgid "Avg. Dist. Between TPs:" msgstr "" #: ../src/viktrwlayer_propwin.c:2823 msgid "Elevation Range:" msgstr "" #: ../src/viktrwlayer_propwin.c:2824 msgid "Total Elevation Gain/Loss:" msgstr "" #: ../src/viktrwlayer_propwin.c:2825 msgid "Start:" msgstr "" #: ../src/viktrwlayer_propwin.c:2826 msgid "End:" msgstr "" #: ../src/viktrwlayer_propwin.c:2827 msgid "Duration:" msgstr "" #: ../src/viktrwlayer_propwin.c:2828 msgid "Color:" msgstr "" #: ../src/viktrwlayer_propwin.c:2877 ../src/viktrwlayer_propwin.c:2901 #: ../src/viktrwlayer_propwin.c:2929 ../src/viktrwlayer_propwin.c:2966 #: ../src/viktrwlayer_propwin.c:2984 ../src/viktrwlayer_propwin.c:3034 #: ../src/viktrwlayer_propwin.c:3035 ../src/viktrwlayer_propwin.c:3036 #: ../src/viktrwlayer_propwin.c:3062 ../src/viktrwlayer_propwin.c:3063 #: ../src/viktrwlayer_propwin.c:3078 ../src/viktrwlayer_propwin.c:3079 #: ../src/viktrwlayer_propwin.c:3092 ../src/viktrwlayer_propwin.c:3093 #: ../src/viktrwlayer_propwin.c:3106 ../src/viktrwlayer_propwin.c:3107 #: ../src/viktrwlayer_propwin.c:3120 ../src/viktrwlayer_propwin.c:3121 #: ../src/viktrwlayer_propwin.c:3134 ../src/viktrwlayer_propwin.c:3135 #, c-format msgid "No Data" msgstr "" #: ../src/viktrwlayer_propwin.c:3031 #, c-format msgid "%d minutes" msgstr "" #: ../src/viktrwlayer_propwin.c:3058 msgid "Statistics" msgstr "" #: ../src/viktrwlayer_propwin.c:3064 msgid "Show D_EM" msgstr "" #: ../src/viktrwlayer_propwin.c:3065 ../src/viktrwlayer_propwin.c:3080 #: ../src/viktrwlayer_propwin.c:3094 ../src/viktrwlayer_propwin.c:3136 msgid "Show _GPS Speed" msgstr "" #: ../src/viktrwlayer_propwin.c:3067 ../src/viktrwlayer_propwin.c:3082 #: ../src/viktrwlayer_propwin.c:3110 ../src/viktrwlayer_propwin.c:3138 msgid "Track Distance:" msgstr "" #: ../src/viktrwlayer_propwin.c:3068 ../src/viktrwlayer_propwin.c:3125 msgid "Track Height:" msgstr "" #: ../src/viktrwlayer_propwin.c:3073 msgid "Elevation-distance" msgstr "" #: ../src/viktrwlayer_propwin.c:3083 msgid "Track Gradient:" msgstr "" #: ../src/viktrwlayer_propwin.c:3087 msgid "Gradient-distance" msgstr "" #: ../src/viktrwlayer_propwin.c:3096 ../src/viktrwlayer_propwin.c:3111 #: ../src/viktrwlayer_propwin.c:3124 msgid "Track Time:" msgstr "" #: ../src/viktrwlayer_propwin.c:3097 ../src/viktrwlayer_propwin.c:3139 msgid "Track Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:3101 msgid "Speed-time" msgstr "" #: ../src/viktrwlayer_propwin.c:3108 ../src/viktrwlayer_propwin.c:3122 msgid "Show S_peed" msgstr "" #: ../src/viktrwlayer_propwin.c:3115 msgid "Distance-time" msgstr "" #: ../src/viktrwlayer_propwin.c:3129 msgid "Elevation-time" msgstr "" #: ../src/viktrwlayer_propwin.c:3143 msgid "Speed-distance" msgstr "" #: ../src/viktrwlayer_tpwin.c:118 msgid "Part of Track:" msgstr "" #: ../src/viktrwlayer_tpwin.c:119 msgid "Latitude:" msgstr "" #: ../src/viktrwlayer_tpwin.c:120 msgid "Longitude:" msgstr "" #: ../src/viktrwlayer_tpwin.c:121 msgid "Altitude:" msgstr "" #: ../src/viktrwlayer_tpwin.c:122 msgid "Timestamp:" msgstr "" #: ../src/viktrwlayer_tpwin.c:123 msgid "Time:" msgstr "" #: ../src/viktrwlayer_tpwin.c:124 msgid "Distance Difference:" msgstr "" #: ../src/viktrwlayer_tpwin.c:125 msgid "Time Difference:" msgstr "" #: ../src/viktrwlayer_tpwin.c:126 msgid "\"Speed\" Between:" msgstr "" #: ../src/viktrwlayer_tpwin.c:127 msgid "VDOP:" msgstr "" #: ../src/viktrwlayer_tpwin.c:128 msgid "HDOP:" msgstr "" #: ../src/viktrwlayer_tpwin.c:129 msgid "PDOP:" msgstr "" #: ../src/viktrwlayer_tpwin.c:130 msgid "SAT/FIX:" msgstr "" #: ../src/viktrwlayer_tpwin.c:139 msgid "Trackpoint" msgstr "" #: ../src/viktrwlayer_tpwin.c:142 msgid "_Insert After" msgstr "" #: ../src/viktrwlayer_tpwin.c:144 msgid "Split Here" msgstr "" #: ../src/viktrwlayer_geotag.c:446 #, c-format msgid "Geotagging %d Images..." msgstr "" #: ../src/viktrwlayer_geotag.c:510 msgid "Geotag Images" msgstr "" #: ../src/viktrwlayer_geotag.c:516 msgid "Images" msgstr "" #: ../src/viktrwlayer_geotag.c:520 msgid "Overwrite Existing Waypoints:" msgstr "" #: ../src/viktrwlayer_geotag.c:523 msgid "Overwrite Existing GPS Information:" msgstr "" #: ../src/viktrwlayer_geotag.c:525 msgid "Keep File Modification Timestamp:" msgstr "" #: ../src/viktrwlayer_geotag.c:555 msgid "Create Waypoints:" msgstr "" #: ../src/viktrwlayer_geotag.c:563 msgid "Write EXIF:" msgstr "" #: ../src/viktrwlayer_geotag.c:575 msgid "Interpolate Between Track Segments:" msgstr "" #: ../src/viktrwlayer_geotag.c:579 msgid "Image Time Offset (Seconds):" msgstr "" #: ../src/viktrwlayer_geotag.c:581 msgid "" "The number of seconds to ADD to the photos time to make it match the GPS " "data. Calculate this with (GPS - Photo). Can be negative or positive. Useful " "to adjust times when a camera's timestamp was incorrect." msgstr "" #: ../src/viktrwlayer_geotag.c:584 msgid "Image Timezone:" msgstr "" #: ../src/viktrwlayer_geotag.c:586 msgid "" "The timezone that was used when the images were created. For example, if a " "camera is set to AWST or +8:00 hours. Enter +8:00 here so that the correct " "adjustment to the images' time can be made. GPS data is always in UTC." msgstr "" #: ../src/viktrwlayer_geotag.c:590 #, c-format msgid "Using track: %s" msgstr "" #: ../src/viktrwlayer_geotag.c:592 #, c-format msgid "Using all tracks in: %s" msgstr "" #: ../src/vikstatus.c:105 msgid "Current zoom level. Click to select a new one." msgstr "" #: ../src/vikwaypoint.c:34 msgid "Waypoint" msgstr "" #. TODO get rid of this as this is unnecessary duplication... #: ../src/vikwindow.c:221 msgid "Pan" msgstr "" #: ../src/vikwindow.c:221 msgid "Zoom" msgstr "" #: ../src/vikwindow.c:221 msgid "Ruler" msgstr "" #: ../src/vikwindow.c:221 msgid "Select" msgstr "" #. Create tooltip #: ../src/vikwindow.c:440 msgid "Select zoom level" msgstr "" #: ../src/vikwindow.c:645 #, c-format msgid "" "Do you want to save the changes you made to the document \"%s\"?\n" "\n" "Your changes will be lost if you don't save them." msgstr "" #: ../src/vikwindow.c:649 msgid "Don't Save" msgstr "" #: ../src/vikwindow.c:696 msgid "mpp" msgstr "" #: ../src/vikwindow.c:696 msgid "pixelfact" msgstr "" #: ../src/vikwindow.c:861 #, c-format msgid "%s %s %dm" msgstr "" #: ../src/vikwindow.c:863 #, c-format msgid "%s %s %dft" msgstr "" #: ../src/vikwindow.c:866 #, c-format msgid "%s %s" msgstr "" #. NB Ctrl+Shift+R is used for Refresh (deemed more important), so use 'U' instead #: ../src/vikwindow.c:1254 msgid "_Ruler" msgstr "" #: ../src/vikwindow.c:1254 msgid "Ruler Tool" msgstr "" #: ../src/vikwindow.c:1502 ../src/vikwindow.c:3138 msgid "_Zoom" msgstr "" #: ../src/vikwindow.c:1502 msgid "Zoom Tool" msgstr "" #: ../src/vikwindow.c:1547 ../src/vikwindow.c:3139 msgid "_Pan" msgstr "" #: ../src/vikwindow.c:1547 msgid "Pan Tool" msgstr "" #: ../src/vikwindow.c:1664 msgid "_Select" msgstr "" #: ../src/vikwindow.c:1664 msgid "Select Tool" msgstr "" #: ../src/vikwindow.c:1809 msgid "You must select a layer to show its properties." msgstr "" #. No error to show, so unlikely this will get called #: ../src/vikwindow.c:1824 msgid "The help system is not available." msgstr "" #. Main error path #: ../src/vikwindow.c:1827 #, c-format msgid "" "Help is not available because: %s.\n" "Ensure a Mime Type ghelp handler program is installed (e.g. yelp)." msgstr "" #: ../src/vikwindow.c:1850 msgid "You must select a layer to delete." msgstr "" #: ../src/vikwindow.c:2087 msgid "Untitled" msgstr "" #: ../src/vikwindow.c:2194 #, c-format msgid "Unable to add '%s' to the list of recently used documents" msgstr "" #: ../src/vikwindow.c:2208 msgid "The file you requested could not be opened." msgstr "" #: ../src/vikwindow.c:2211 msgid "" "GPSBabel is required to load files of this type or GPSBabel encountered " "problems." msgstr "" #: ../src/vikwindow.c:2214 #, c-format msgid "Unable to load malformed GPX file %s" msgstr "" #: ../src/vikwindow.c:2217 #, c-format msgid "Unsupported file type for %s" msgstr "" #. Since we can process .vik files with issues just show a warning in the status bar #. Not that a user can do much about it... or tells them what this issue is yet... #: ../src/vikwindow.c:2223 #, c-format msgid "WARNING: issues encountered loading %s" msgstr "" #: ../src/vikwindow.c:2278 msgid "Please select a GPS data file to open. " msgstr "" #: ../src/vikwindow.c:2288 msgid "Geocaching" msgstr "" #: ../src/vikwindow.c:2294 msgid "Google Earth" msgstr "" #: ../src/vikwindow.c:2299 msgid "GPX" msgstr "" #: ../src/vikwindow.c:2304 ../src/vikwindow.c:2387 #: ../src/viking.desktop.in.h:1 msgid "Viking" msgstr "" #: ../src/vikwindow.c:2374 msgid "Save as Viking File." msgstr "" #. Try harder... #: ../src/vikwindow.c:2619 ../src/vikwindow.c:2625 msgid "Generating image file..." msgstr "" #: ../src/vikwindow.c:2647 msgid "" "Failed to generate internal image.\n" "\n" "Try creating a smaller image." msgstr "" #: ../src/vikwindow.c:2655 msgid "Failed to generate image file." msgstr "" #. Success #: ../src/vikwindow.c:2660 msgid "Image file generated." msgstr "" #: ../src/vikwindow.c:2764 msgid "" "Viewable region outside allowable pixel size bounds for image. Clipping " "width/height values." msgstr "" #: ../src/vikwindow.c:2789 #, c-format msgid "Total area: %ldm x %ldm (%.3f sq. km)" msgstr "" #: ../src/vikwindow.c:2792 #, c-format msgid "Total area: %ldm x %ldm (%.3f sq. miles)" msgstr "" #: ../src/vikwindow.c:2813 msgid "Save Image" msgstr "" #: ../src/vikwindow.c:2834 msgid "PNG" msgstr "" #: ../src/vikwindow.c:2857 msgid "You must be in UTM mode to use this feature" msgstr "" #: ../src/vikwindow.c:2862 msgid "Choose a directory to hold images" msgstr "" #. todo: default for answers inside VikWindow or static (thruout instance) #: ../src/vikwindow.c:2883 msgid "Save to Image File" msgstr "" #: ../src/vikwindow.c:2900 msgid "Width (pixels):" msgstr "" #: ../src/vikwindow.c:2902 msgid "Height (pixels):" msgstr "" #: ../src/vikwindow.c:2905 msgid "" "WARNING: USING LARGE IMAGES OVER 10000x10000\n" "MAY CRASH THE PROGRAM!" msgstr "" #: ../src/vikwindow.c:2907 msgid "Zoom (meters per pixel):" msgstr "" #: ../src/vikwindow.c:2921 msgid "Area in current viewable window" msgstr "" #: ../src/vikwindow.c:2931 msgid "Save as PNG" msgstr "" #: ../src/vikwindow.c:2932 msgid "Save as JPEG" msgstr "" #: ../src/vikwindow.c:2954 msgid "East-west image tiles:" msgstr "" #: ../src/vikwindow.c:2956 msgid "North-south image tiles:" msgstr "" #: ../src/vikwindow.c:3097 msgid "Choose a background color" msgstr "" #: ../src/vikwindow.c:3113 msgid "Choose a track highlight color" msgstr "" #: ../src/vikwindow.c:3134 msgid "_File" msgstr "" #: ../src/vikwindow.c:3135 msgid "_Edit" msgstr "" #: ../src/vikwindow.c:3136 msgid "_View" msgstr "" #: ../src/vikwindow.c:3137 msgid "_Show" msgstr "" #: ../src/vikwindow.c:3140 msgid "_Layers" msgstr "" #: ../src/vikwindow.c:3141 msgid "_Tools" msgstr "" #: ../src/vikwindow.c:3142 msgid "_Webtools" msgstr "" #: ../src/vikwindow.c:3143 ../src/vikwindow.c:3206 msgid "_Help" msgstr "" #: ../src/vikwindow.c:3145 msgid "New file" msgstr "" #: ../src/vikwindow.c:3146 msgid "_Open..." msgstr "" #: ../src/vikwindow.c:3146 msgid "Open a file" msgstr "" #: ../src/vikwindow.c:3147 msgid "Open _Recent File" msgstr "" #: ../src/vikwindow.c:3148 msgid "Append _File..." msgstr "" #: ../src/vikwindow.c:3148 msgid "Append data from a different file" msgstr "" #: ../src/vikwindow.c:3149 msgid "A_cquire" msgstr "" #: ../src/vikwindow.c:3150 msgid "Transfer data from a GPS device" msgstr "" #: ../src/vikwindow.c:3151 msgid "Import File With GPS_Babel..." msgstr "" #: ../src/vikwindow.c:3151 msgid "Import file via GPSBabel converter" msgstr "" #: ../src/vikwindow.c:3153 msgid "Google _Directions..." msgstr "" #: ../src/vikwindow.c:3153 msgid "Get driving directions from Google" msgstr "" #: ../src/vikwindow.c:3156 msgid "_OSM Traces..." msgstr "" #: ../src/vikwindow.c:3156 msgid "Get traces from OpenStreetMap" msgstr "" #: ../src/vikwindow.c:3157 msgid "_My OSM Traces..." msgstr "" #: ../src/vikwindow.c:3157 msgid "Get Your Own Traces from OpenStreetMap" msgstr "" #: ../src/vikwindow.c:3160 msgid "Geo_caches..." msgstr "" #: ../src/vikwindow.c:3160 msgid "Get Geocaches from geocaching.com" msgstr "" #: ../src/vikwindow.c:3163 msgid "Create waypoints from geotagged images" msgstr "" #: ../src/vikwindow.c:3166 msgid "Create waypoints from Wikipedia items in the current view" msgstr "" #: ../src/vikwindow.c:3168 msgid "_Save" msgstr "" #: ../src/vikwindow.c:3168 msgid "Save the file" msgstr "" #: ../src/vikwindow.c:3169 msgid "Save _As..." msgstr "" #: ../src/vikwindow.c:3169 msgid "Save the file under different name" msgstr "" #: ../src/vikwindow.c:3170 msgid "_Generate Image File..." msgstr "" #: ../src/vikwindow.c:3170 msgid "Save a snapshot of the workspace into a file" msgstr "" #: ../src/vikwindow.c:3171 msgid "Generate _Directory of Images..." msgstr "" #: ../src/vikwindow.c:3171 msgid "FIXME:IMGDIR" msgstr "" #: ../src/vikwindow.c:3174 msgid "_Print..." msgstr "" #: ../src/vikwindow.c:3174 msgid "Print maps" msgstr "" #: ../src/vikwindow.c:3177 msgid "E_xit" msgstr "" #: ../src/vikwindow.c:3177 msgid "Exit the program" msgstr "" #: ../src/vikwindow.c:3178 msgid "Save and Exit" msgstr "" #: ../src/vikwindow.c:3178 msgid "Save and Exit the program" msgstr "" #: ../src/vikwindow.c:3180 msgid "Go to the _Default Location" msgstr "" #: ../src/vikwindow.c:3180 msgid "Go to the default location" msgstr "" #: ../src/vikwindow.c:3181 msgid "Go to _Location..." msgstr "" #: ../src/vikwindow.c:3181 msgid "Go to address/place using text search" msgstr "" #: ../src/vikwindow.c:3182 msgid "_Go to Lat/Lon..." msgstr "" #: ../src/vikwindow.c:3182 msgid "Go to arbitrary lat/lon coordinate" msgstr "" #: ../src/vikwindow.c:3183 msgid "Go to UTM..." msgstr "" #: ../src/vikwindow.c:3183 msgid "Go to arbitrary UTM coordinate" msgstr "" #: ../src/vikwindow.c:3184 msgid "_Refresh" msgstr "" #: ../src/vikwindow.c:3184 msgid "Refresh any maps displayed" msgstr "" #: ../src/vikwindow.c:3185 msgid "Set _Highlight Color..." msgstr "" #: ../src/vikwindow.c:3186 msgid "Set Bac_kground Color..." msgstr "" #: ../src/vikwindow.c:3187 msgid "Zoom _In" msgstr "" #: ../src/vikwindow.c:3188 msgid "Zoom _Out" msgstr "" #: ../src/vikwindow.c:3189 msgid "Zoom _To..." msgstr "" #: ../src/vikwindow.c:3190 msgid "Pan _North" msgstr "" #: ../src/vikwindow.c:3191 msgid "Pan _East" msgstr "" #: ../src/vikwindow.c:3192 msgid "Pan _South" msgstr "" #: ../src/vikwindow.c:3193 msgid "Pan _West" msgstr "" #: ../src/vikwindow.c:3194 msgid "Background _Jobs" msgstr "" #: ../src/vikwindow.c:3196 msgid "Cu_t" msgstr "" #: ../src/vikwindow.c:3197 msgid "_Copy" msgstr "" #: ../src/vikwindow.c:3198 msgid "_Paste" msgstr "" #: ../src/vikwindow.c:3199 msgid "_Delete" msgstr "" #: ../src/vikwindow.c:3200 msgid "Delete All" msgstr "" #: ../src/vikwindow.c:3201 msgid "_Flush Map Cache" msgstr "" #: ../src/vikwindow.c:3202 msgid "_Set the Default Location" msgstr "" #: ../src/vikwindow.c:3202 msgid "Set the Default Location to the current position" msgstr "" #: ../src/vikwindow.c:3203 msgid "_Preferences" msgstr "" #: ../src/vikwindow.c:3204 msgid "_Properties" msgstr "" #: ../src/vikwindow.c:3207 msgid "_About" msgstr "" #: ../src/vikwindow.c:3213 msgid "_UTM Mode" msgstr "" #: ../src/vikwindow.c:3214 msgid "_Expedia Mode" msgstr "" #: ../src/vikwindow.c:3215 msgid "_Mercator Mode" msgstr "" #: ../src/vikwindow.c:3216 msgid "Lat_/Lon Mode" msgstr "" #: ../src/vikwindow.c:3220 msgid "Show _Scale" msgstr "" #: ../src/vikwindow.c:3220 msgid "Show Scale" msgstr "" #: ../src/vikwindow.c:3221 msgid "Show _Center Mark" msgstr "" #: ../src/vikwindow.c:3221 msgid "Show Center Mark" msgstr "" #: ../src/vikwindow.c:3222 msgid "Show _Highlight" msgstr "" #: ../src/vikwindow.c:3222 msgid "Show Highlight" msgstr "" #: ../src/vikwindow.c:3223 msgid "_Full Screen" msgstr "" #: ../src/vikwindow.c:3223 msgid "Activate full screen mode" msgstr "" #: ../src/vikwindow.c:3224 msgid "Show Side _Panel" msgstr "" #: ../src/vikwindow.c:3224 msgid "Show Side Panel" msgstr "" #: ../src/vikwindow.c:3225 msgid "Show Status_bar" msgstr "" #: ../src/vikwindow.c:3225 msgid "Show Statusbar" msgstr "" #: ../src/vikwindow.c:3226 msgid "Show _Toolbar" msgstr "" #: ../src/vikwindow.c:3226 msgid "Show Toolbar" msgstr "" #: ../src/vikwindow.c:3227 msgid "Show _Menu" msgstr "" #: ../src/vikwindow.c:3227 msgid "Show Menu" msgstr "" #: ../src/viking.desktop.in.h:2 msgid "GPS Data Manager" msgstr "" #: ../src/viking.desktop.in.h:3 msgid "Map Based GPS Data Manager (live data capable)." msgstr "" #: ../src/libjpeg/jpeg-data.c:206 msgid "Data does not follow JPEG specification." msgstr "" #: ../src/libjpeg/jpeg-data.c:291 #, c-format msgid "Path '%s' invalid." msgstr "" #: ../src/libjpeg/jpeg-data.c:309 #, c-format msgid "Could not read '%s'." msgstr "" viking-1.4.2/po/LINGUAS0000644000175000017500000000016012175546146011401 00000000000000# Supported languages cs da de el en_GB es fi fr he hu id it ja jv lt lv nb nl pl pt_BR ru sl sv uk zh_CN zh_TW viking-1.4.2/po/zh_CN.po0000644000175000017500000022215512175546146011727 00000000000000msgid "" msgstr "" "Project-Id-Version: Viking\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-02-04 23:29+0100\n" "PO-Revision-Date: 2013-03-07 06:59+0000\n" "Last-Translator: Wylmer Wang \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Launchpad-Export-Date: 2013-03-23 17:12+0000\n" "X-Generator: Launchpad (build 16540)\n" "X-Poedit-Language: Simplified Chinese\n" #: ../src/acquire.c:103 ../src/vikgpslayer.c:1185 msgid "Done." msgstr "完成。" #: ../src/acquire.c:114 msgid "No data." msgstr "无数据。" #: ../src/acquire.c:154 ../src/acquire.c:404 msgid "Error: acquisition failed." msgstr "错误: 接收失败。" #: ../src/acquire.c:341 msgid "Working..." msgstr "工作中..." #. This shouldn't happen... #: ../src/acquire.c:394 msgid "" "Unable to create command\n" "Acquire method failed." msgstr "" #: ../src/acquire.c:486 msgid "_Filter" msgstr "" #: ../src/acquire.c:501 #, c-format msgid "Filter with %s" msgstr "" #: ../src/acquire.c:518 msgid "Filter" msgstr "" #: ../src/background.c:52 #, c-format msgid "%d items" msgstr "%d 项" #: ../src/background.c:248 msgid "Job" msgstr "任务" #: ../src/background.c:252 msgid "Progress" msgstr "进度" #: ../src/background.c:268 msgid "Viking Background Jobs" msgstr "Viking 后台任务" #: ../src/bing.c:47 msgid "Bing" msgstr "" #. VIK_GTK_WINDOW_FROM_WIDGET(vp) #: ../src/bingmapsource.c:445 msgid "Bing attribution Loading" msgstr "" #: ../src/clipboard.c:95 msgid "paste failed" msgstr "粘贴失败" #: ../src/clipboard.c:105 msgid "wrong clipboard data size" msgstr "剪贴版数据尺寸错误" #: ../src/clipboard.c:124 #, c-format msgid "" "The clipboard contains sublayer data for %s layers. You must select a layer " "of this type to paste the clipboard data." msgstr "" #: ../src/clipboard.c:236 msgid "" "In order to paste a waypoint, please select an appropriate layer to paste " "into." msgstr "" #: ../src/dialog.c:52 msgid "Go to Lat/Lon" msgstr "" #: ../src/dialog.c:64 ../src/dialog.c:251 msgid "Latitude:" msgstr "纬度:" #: ../src/dialog.c:70 ../src/dialog.c:256 msgid "Longitude:" msgstr "经度:" #: ../src/dialog.c:102 msgid "Go to UTM" msgstr "" #: ../src/dialog.c:115 msgid "Northing:" msgstr "Northing :" #: ../src/dialog.c:121 msgid "Easting:" msgstr "Easting :" #: ../src/dialog.c:128 msgid "Zone:" msgstr "Zone :" #: ../src/dialog.c:131 msgid "Letter:" msgstr "信函:" #: ../src/dialog.c:199 msgid "Waypoint Properties" msgstr "" #: ../src/dialog.c:233 msgid "Name:" msgstr "名称:" #: ../src/dialog.c:261 msgid "Altitude:" msgstr "海拔:" #: ../src/dialog.c:266 msgid "Comment:" msgstr "注释:" #: ../src/dialog.c:274 ../src/osm-traces.c:437 msgid "Description:" msgstr "Description :" #: ../src/dialog.c:277 msgid "Image:" msgstr "图片:" #: ../src/dialog.c:282 msgid "Symbol:" msgstr "符号:" #: ../src/dialog.c:291 msgid "(none)" msgstr "(无)" #. TODO: other checks (isalpha or whatever ) #: ../src/dialog.c:356 msgid "Please enter a name for the waypoint." msgstr "请为该航点输入一个名字." #: ../src/dialog.c:529 ../src/geonamessearch.c:243 #: ../src/datasource_osm_my_traces.c:507 msgid "Nothing was selected" msgstr "" #: ../src/dialog.c:537 msgid "Add Route" msgstr "" #: ../src/dialog.c:537 msgid "Add Track" msgstr "添加轨迹:" #: ../src/dialog.c:545 msgid "Route Name:" msgstr "" #: ../src/dialog.c:545 msgid "Track Name:" msgstr "轨迹名称:" #: ../src/dialog.c:565 msgid "Please enter a name for the track." msgstr "请为该轨迹输入一个名字." #: ../src/dialog.c:623 msgid "Zoom Factors..." msgstr "缩放参数..." #: ../src/dialog.c:637 msgid "Zoom factor (in meters per pixel):" msgstr "" #: ../src/dialog.c:638 msgid "X (easting): " msgstr "X (东方): " #: ../src/dialog.c:639 msgid "Y (northing): " msgstr "Y (北方): " #: ../src/dialog.c:644 msgid "X and Y zoom factors must be equal" msgstr "X和Y缩放参数必须相等" #: ../src/dialog.c:699 msgid "1 min" msgstr "1 分钟" #: ../src/dialog.c:700 msgid "1 hour" msgstr "1 小时" #: ../src/dialog.c:701 msgid "1 day" msgstr "1 天" #: ../src/dialog.c:702 msgid "Custom (in minutes):" msgstr "" #: ../src/dialog.c:808 msgid "GPS Data and Topo Analyzer, Explorer, and Manager." msgstr "GPS 数据和拓扑分析、浏览、管理工具." #: ../src/dialog.c:809 msgid "" "This program is free software; you can redistribute it and/or modify it " "under the terms of the GNU General Public License as published by the Free " "Software Foundation; either version 2 of the License, or (at your option) " "any later version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT " "ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or " "FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for " "more details.\n" "\n" "You should have received a copy of the GNU General Public License along with " "this program; if not, write to the Free Software Foundation, Inc., 59 Temple " "Place, Suite 330, Boston, MA 02111-1307, USA" msgstr "" #: ../src/dialog.c:837 msgid "Translation is coordinated on http://launchpad.net/viking" msgstr "" #: ../src/dialog.c:845 msgid "Download along track" msgstr "沿着轨迹下载" #: ../src/dialog.c:851 msgid "Map type:" msgstr "地图类型:" #: ../src/dialog.c:856 msgid "Zoom level:" msgstr "缩放程度:" #: ../src/dialog.c:896 #, c-format msgid "The map data is licensed: %s." msgstr "" #: ../src/dialog.c:899 #, c-format msgid "" "The data provided by '%s' are licensed under the following license: " "%s.\n" "Please, read the license before continuing." msgstr "" #: ../src/dialog.c:904 msgid "Open license" msgstr "" #: ../src/expedia.c:53 msgid "Expedia Street Maps" msgstr "Expedia 街道地图" #: ../src/expedia.c:81 msgid "Invalid expedia altitude" msgstr "无效的Expedia高度" #: ../src/expedia.c:112 #, c-format msgid "" "Couldn't open EXPEDIA image file (right after successful download! Please " "report and delete image file!): %s" msgstr "" #: ../src/expedia.c:125 #, c-format msgid "" "Couldn't save EXPEDIA image file (right after successful download! Please " "report and delete image file!): %s" msgstr "" #. * #. * See http://www.geonames.org/export/wikipedia-webservice.html#wikipediaBoundingBox #. #. Translators may wish to change this setting as appropriate to get Wikipedia articles in that language #: ../src/geonamessearch.c:46 msgid "en" msgstr "" #: ../src/geonamessearch.c:121 msgid "Search" msgstr "搜索" #: ../src/geonamessearch.c:123 msgid "No entries found!" msgstr "" #. NB could allow columns to be shifted around by doing this after each new #. gtk_tree_view_column_set_reorderable ( column, TRUE ); #. However I don't think is that useful, so I haven't put it in #: ../src/geonamessearch.c:177 ../src/datasource_osm_my_traces.c:425 msgid "Name" msgstr "" #: ../src/geonamessearch.c:182 msgid "Feature" msgstr "" #: ../src/geonamessearch.c:187 ../src/datasource_osm_my_traces.c:440 msgid "Lat/Lon" msgstr "" #: ../src/geonamessearch.c:269 ../src/googlesearch.c:100 msgid "couldn't map temp file" msgstr "" #: ../src/globals.c:44 msgid "Degree format:" msgstr "" #: ../src/globals.c:48 msgid "Distance units:" msgstr "" #: ../src/globals.c:52 msgid "Speed units:" msgstr "" #: ../src/globals.c:56 msgid "Height units:" msgstr "" #: ../src/globals.c:60 msgid "Use large waypoint icons:" msgstr "" #: ../src/globals.c:64 msgid "Default latitude:" msgstr "" #: ../src/globals.c:67 msgid "Default longitude:" msgstr "" #: ../src/globals.c:73 msgid "Alphabetical" msgstr "" #: ../src/globals.c:73 ../src/datasource_osm_my_traces.c:435 msgid "Time" msgstr "" #: ../src/globals.c:76 msgid "KML File Export Units:" msgstr "" #: ../src/globals.c:77 msgid "GPX Track Order:" msgstr "" #: ../src/globals.c:82 msgid "Image Viewer:" msgstr "" #: ../src/globals.c:87 msgid "External GPX Program 1:" msgstr "" #: ../src/globals.c:88 msgid "External GPX Program 2:" msgstr "" #. Defaults for the options are setup here #: ../src/globals.c:96 msgid "General" msgstr "" #. New Tab #: ../src/globals.c:121 msgid "Export/External" msgstr "" #. Webtools #: ../src/google.c:36 msgid "Google" msgstr "" #: ../src/datasource_file.c:59 msgid "Import file with GPSBabel" msgstr "" #: ../src/datasource_file.c:60 msgid "Imported file" msgstr "" #. The file selector #: ../src/datasource_file.c:133 msgid "File:" msgstr "" #: ../src/datasource_file.c:134 msgid "File to import" msgstr "" #: ../src/datasource_file.c:141 msgid "All files" msgstr "" #. The file format selector #: ../src/datasource_file.c:148 msgid "File type:" msgstr "" #: ../src/datasource_file.c:193 #, c-format msgid "using babel args '%s' and file '%s'" msgstr "" #: ../src/datasource_gc.c:66 msgid "Download Geocaches" msgstr "下载 Geocaches" #: ../src/datasource_gc.c:67 msgid "Geocaching.com Caches" msgstr "Geocaching.com 缓存" #: ../src/datasource_gc.c:84 msgid "geocaching.com username:" msgstr "geocaching.com 用户名:" #: ../src/datasource_gc.c:85 msgid "geocaching.com password:" msgstr "geocaching.com 密码:" #: ../src/datasource_gc.c:126 #, c-format msgid "" "Can't find %s or %s in path! Check that you have installed it correctly." msgstr "" #: ../src/datasource_gc.c:188 msgid "Number geocaches:" msgstr "" #: ../src/datasource_gc.c:190 msgid "Centered around:" msgstr "" #: ../src/datasource_gc.c:226 msgid "Broken input - using some defaults" msgstr "" #: ../src/datasource_geotag.c:51 msgid "Create Waypoints from Geotagged Images" msgstr "" #: ../src/datasource_geotag.c:52 msgid "Geotagged Images" msgstr "" #: ../src/datasource_geotag.c:102 ../src/vikwindow.c:2314 #: ../src/vikwindow.c:2382 ../src/vikwindow.c:2824 msgid "All" msgstr "" #: ../src/datasource_geotag.c:107 ../src/vikwindow.c:2829 msgid "JPG" msgstr "" #: ../src/datasource_geotag.c:165 #, c-format msgid "Unable to create waypoint from %s" msgstr "" #: ../src/datasource_google.c:49 ../src/datasource_google.c:50 msgid "Google Directions" msgstr "Google 方位" #: ../src/datasource_google.c:77 msgid "From:" msgstr "从 :" #: ../src/datasource_google.c:79 msgid "To:" msgstr "至 :" #: ../src/datasource_gps.c:57 msgid "Acquire from GPS" msgstr "从GPS获取" #: ../src/datasource_gps.c:58 msgid "Acquired from GPS" msgstr "已从GPS获取的" #: ../src/datasource_gps.c:221 #, c-format msgid "using cmdline '%s' and file '%s'\n" msgstr "使用命令行 '%s' 和文件 '%s'\n" #: ../src/datasource_gps.c:297 ../src/vikgpslayer.c:884 #, c-format msgid "Downloading %d waypoint..." msgid_plural "Downloading %d waypoints..." msgstr[0] "" msgstr[1] "" #: ../src/datasource_gps.c:298 ../src/vikgpslayer.c:885 #, c-format msgid "Downloading %d trackpoint..." msgid_plural "Downloading %d trackpoints..." msgstr[0] "" msgstr[1] "" #: ../src/datasource_gps.c:303 ../src/vikgpslayer.c:890 #, c-format msgid "Downloading %d routepoint..." msgid_plural "Downloading %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/datasource_gps.c:325 ../src/datasource_gps.c:326 #: ../src/datasource_gps.c:327 #, c-format msgid "Downloaded %d out of %d %s..." msgstr "" #: ../src/datasource_gps.c:331 ../src/datasource_gps.c:332 #: ../src/datasource_gps.c:333 #, c-format msgid "Downloaded %d %s." msgstr "" #: ../src/datasource_gps.c:347 ../src/vikgpslayer.c:968 #, c-format msgid "GPS Device: %s" msgstr "GPS设备: %s" #: ../src/datasource_gps.c:370 ../src/vikgpslayer.c:1042 #: ../src/vikgpslayer.c:1110 msgid "Status: Working..." msgstr "" #: ../src/datasource_gps.c:469 ../src/vikgpslayer.c:150 msgid "GPS Protocol:" msgstr "GPS 协议:" #. List now assigned at runtime #: ../src/datasource_gps.c:488 ../src/vikgpslayer.c:151 msgid "Serial Port:" msgstr "串口:" #: ../src/datasource_gps.c:509 msgid "" "Turn Off After Transfer\n" "(Garmin/NAViLink Only)" msgstr "" #: ../src/datasource_gps.c:512 msgid "Tracks:" msgstr "" #: ../src/datasource_gps.c:516 msgid "Routes:" msgstr "" #: ../src/datasource_gps.c:520 msgid "Waypoints:" msgstr "" #: ../src/datasource_gps.c:594 ../src/vikgpslayer.c:1305 msgid "GPS device: N/A" msgstr "GPS设备: 无" #: ../src/datasource_osm.c:52 ../src/datasource_osm.c:53 msgid "OSM traces" msgstr "" #: ../src/datasource_osm.c:80 msgid "Page number:" msgstr "" #: ../src/datasource_osm_my_traces.c:63 ../src/datasource_osm_my_traces.c:64 msgid "OSM My Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:108 msgid "Username:" msgstr "" #: ../src/datasource_osm_my_traces.c:113 msgid "The email or username used to login to OSM" msgstr "" #: ../src/datasource_osm_my_traces.c:115 ../src/osm-traces.c:413 msgid "Password:" msgstr "密码:" #: ../src/datasource_osm_my_traces.c:120 msgid "The password used to login to OSM" msgstr "" #: ../src/datasource_osm_my_traces.c:430 msgid "Description" msgstr "" #: ../src/datasource_osm_my_traces.c:445 msgid "Privacy" msgstr "" #: ../src/datasource_osm_my_traces.c:452 msgid "Within Current View" msgstr "" #: ../src/datasource_osm_my_traces.c:518 msgid "GPS Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:520 msgid "None found!" msgstr "" #: ../src/datasource_osm_my_traces.c:629 msgid "My OSM Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:645 #, c-format msgid "Unable to get trace: %s" msgstr "" #: ../src/datasource_wikipedia.c:32 msgid "Create Waypoints from Wikipedia Articles" msgstr "" #: ../src/datasource_wikipedia.c:33 msgid "Wikipedia Waypoints" msgstr "" #: ../src/dem.c:65 ../src/dem.c:79 msgid "Invalid DEM" msgstr "" #: ../src/dem.c:121 msgid "Invalid DEM header" msgstr "" #: ../src/dem.c:190 ../src/dem.c:203 msgid "Incorrect DEM Class B record: expected 1" msgstr "" #: ../src/dem.c:360 #, c-format msgid "Couldn't map file %s: %s" msgstr "" #: ../src/download.c:112 msgid "Tile age (s):" msgstr "" #: ../src/download.c:233 #, c-format msgid "Download error: %s" msgstr "下载错误: %s" #: ../src/download.c:313 msgid "couldn't open temp file" msgstr "不能打开临时文件" #: ../src/file.c:456 ../src/file.c:461 #, c-format msgid "Draw mode '%s' no more supported" msgstr "" #: ../src/geotag_exif.c:433 msgid "Not enough memory." msgstr "" #: ../src/geotag_exif.c:451 msgid "Setting a value for this tag is unsupported!" msgstr "" #: ../src/geotag_exif.c:470 #, c-format msgid "Too few components specified (need %d, found %d)\n" msgstr "" #: ../src/geotag_exif.c:474 msgid "Numeric value expected\n" msgstr "" #: ../src/geotag_exif.c:482 msgid "This shouldn't happen!" msgstr "" #: ../src/geotag_exif.c:552 msgid "Not yet implemented!" msgstr "" #: ../src/geotag_exif.c:565 msgid "Warning; Too many components specified!" msgstr "" #: ../src/osm-traces.c:73 msgid "Identifiable (public w/ timestamps)" msgstr "" #: ../src/osm-traces.c:74 msgid "Trackable (private w/ timestamps)" msgstr "" #: ../src/osm-traces.c:75 msgid "Public" msgstr "Public" #: ../src/osm-traces.c:76 msgid "Private" msgstr "" #: ../src/osm-traces.c:93 msgid "OSM username:" msgstr "" #: ../src/osm-traces.c:94 msgid "OSM password:" msgstr "" #. Preferences #: ../src/osm-traces.c:151 msgid "OpenStreetMap Traces" msgstr "" #: ../src/osm-traces.c:234 #, c-format msgid "failed to upload data: HTTP response is %ld" msgstr "" #: ../src/osm-traces.c:239 #, c-format msgid "curl_easy_getinfo failed: %d" msgstr "" #: ../src/osm-traces.c:244 #, c-format msgid "curl request failed: %s" msgstr "" #: ../src/osm-traces.c:275 #, c-format msgid "failed to open temporary file: %s" msgstr "" #. Success #: ../src/osm-traces.c:328 msgid "Uploaded to OSM" msgstr "" #: ../src/osm-traces.c:332 msgid "FAILED TO UPLOAD DATA TO OSM - CURL PROBLEM" msgstr "" #: ../src/osm-traces.c:335 msgid "FAILED TO UPLOAD DATA TO OSM" msgstr "" #: ../src/osm-traces.c:335 msgid "HTTP response code" msgstr "" #: ../src/osm-traces.c:348 #, c-format msgid "failed to unlink temporary file: %s" msgstr "" #: ../src/osm-traces.c:387 msgid "OSM upload" msgstr "" #: ../src/osm-traces.c:405 msgid "Email:" msgstr "电子邮箱 :" #: ../src/osm-traces.c:410 msgid "" "The email used as login\n" "Enter the email you use to login into www.openstreetmap.org." msgstr "" #: ../src/osm-traces.c:418 msgid "" "The password used to login\n" "Enter the password you use to login into " "www.openstreetmap.org." msgstr "" #: ../src/osm-traces.c:423 msgid "File's name:" msgstr "文件名称:" #: ../src/osm-traces.c:433 msgid "" "The name of the file on OSM\n" "This is the name of the file created on the server.This is not the " "name of the local file." msgstr "" #: ../src/osm-traces.c:442 msgid "The description of the trace" msgstr "" #: ../src/osm-traces.c:444 msgid "Tags:" msgstr "" #: ../src/osm-traces.c:449 msgid "The tags associated to the trace" msgstr "" #: ../src/osm-traces.c:482 #, c-format msgid "Uploading %s to OSM" msgstr "上传 %s 到 OSM" #: ../src/mapcache.c:61 msgid "Map cache memory size (MB):" msgstr "" #: ../src/print.c:53 msgid "None" msgstr "无" #: ../src/print.c:54 msgid "Horizontally" msgstr "水平的" #: ../src/print.c:55 msgid "Vertically" msgstr "垂直的" #: ../src/print.c:56 msgid "Both" msgstr "" #: ../src/print.c:120 msgid "Image Settings" msgstr "图像设置" #: ../src/print.c:546 msgid "done" msgstr "完成" #. Page Size #: ../src/print.c:575 msgid "_Adjust Page Size and Orientation" msgstr "" #: ../src/print.c:591 msgid "C_enter:" msgstr "C_entrer :" #. ignore page margins #: ../src/print.c:609 msgid "Ignore Page _Margins" msgstr "" #: ../src/print.c:628 msgid "Image S_ize:" msgstr "" #: ../src/util.c:81 msgid "Could not launch web browser." msgstr "" #: ../src/util.c:92 msgid "Could not create new email." msgstr "" #: ../src/vikcoordlayer.c:46 msgid "Color:" msgstr "" #: ../src/vikcoordlayer.c:47 msgid "Minutes Width:" msgstr "" #: ../src/vikcoordlayer.c:48 msgid "Line Thickness:" msgstr "" #: ../src/vikcoordlayer.c:56 msgid "Coordinate" msgstr "" #: ../src/datasource_bfilter.c:46 msgid "Max number of points:" msgstr "" #: ../src/datasource_bfilter.c:60 msgid "Simplify All Tracks..." msgstr "" #: ../src/datasource_bfilter.c:61 msgid "Simplified Tracks" msgstr "" #: ../src/datasource_bfilter.c:96 ../src/datasource_bfilter.c:97 msgid "Remove Duplicate Waypoints" msgstr "" #: ../src/datasource_bfilter.c:129 msgid "Waypoints Inside This" msgstr "" #: ../src/datasource_bfilter.c:130 msgid "Polygonized Layer" msgstr "" #: ../src/datasource_bfilter.c:165 msgid "Waypoints Outside This" msgstr "" #: ../src/datasource_bfilter.c:166 msgid "Polygonzied Layer" msgstr "" #: ../src/main.c:89 #, c-format msgid "Ignoring Xlib error: error code %d request code %d\n" msgstr "" #: ../src/main.c:102 msgid "Enable debug output" msgstr "" #: ../src/main.c:103 msgid "Enable verbose output" msgstr "" #: ../src/main.c:104 msgid "Show version" msgstr "显示版本" #: ../src/osm.c:106 msgid "On Disk OSM Tile Format" msgstr "" #: ../src/osm.c:121 msgid "OSM (view)" msgstr "" #: ../src/osm.c:125 msgid "OSM (edit)" msgstr "" #: ../src/osm.c:129 msgid "OSM (render)" msgstr "" #. Example: http://127.0.0.1:8111/load_and_zoom?left=8.19&right=8.20&top=48.605&bottom=48.590&select=node413602999 #. JOSM or merkaartor must already be running with remote interface enabled #: ../src/osm.c:136 msgid "Local port 8111 (eg JOSM)" msgstr "" #: ../src/preferences.c:285 msgid "Preferences" msgstr "" #: ../src/uibuilder.c:147 msgid "Take care that this password will be stored clearly in a plain file." msgstr "" #: ../src/vikaggregatelayer.c:37 msgid "Aggregate" msgstr "" #: ../src/vikdemlayer.c:101 msgid "Absolute height" msgstr "" #: ../src/vikdemlayer.c:102 msgid "Height gradient" msgstr "" #: ../src/vikdemlayer.c:118 msgid "DEM Files:" msgstr "DEM 文件:" #: ../src/vikdemlayer.c:119 msgid "Download Source:" msgstr "下载源:" #: ../src/vikdemlayer.c:120 msgid "Min Elev Color:" msgstr "" #: ../src/vikdemlayer.c:121 msgid "Type:" msgstr "" #: ../src/vikdemlayer.c:122 msgid "Min Elev:" msgstr "最低高度:" #: ../src/vikdemlayer.c:123 msgid "Max Elev:" msgstr "最高高度:" #: ../src/vikdemlayer.c:134 msgid "_DEM Download" msgstr "" #: ../src/vikdemlayer.c:134 msgid "DEM Download" msgstr "" #: ../src/vikdemlayer.c:188 msgid "DEM" msgstr "" #: ../src/vikdemlayer.c:284 #, c-format msgid "Number of files: %d" msgstr "" #: ../src/vikdemlayer.c:385 msgid "DEM Loading" msgstr "" #: ../src/vikdemlayer.c:889 #, c-format msgid "No SRTM data available for %f, %f" msgstr "没有可以的SRTM数据给 %f, %f" #: ../src/vikdemlayer.c:1149 #, c-format msgid "Downloading DEM %s" msgstr "正在下载 DEM %s" #: ../src/vikfileentry.c:68 msgid "Browse..." msgstr "浏览..." #: ../src/vikfileentry.c:96 msgid "Choose file" msgstr "选择文件" #: ../src/vikfilelist.c:48 msgid "Choose file(s)" msgstr "选择文件" #: ../src/vikfilelist.c:172 msgid "Add..." msgstr "添加 ..." #: ../src/vikfilelist.c:173 msgid "Delete" msgstr "删除" #: ../src/vikgeoreflayer.c:70 msgid "_Georef Move Map" msgstr "" #: ../src/vikgeoreflayer.c:70 msgid "Georef Move Map" msgstr "" #: ../src/vikgeoreflayer.c:77 msgid "Georef Z_oom Tool" msgstr "" #: ../src/vikgeoreflayer.c:77 msgid "Georef Zoom Tool" msgstr "" #: ../src/vikgeoreflayer.c:87 msgid "GeoRef Map" msgstr "" #: ../src/vikgeoreflayer.c:335 ../src/vikmapslayer.c:685 #, c-format msgid "Couldn't open image file: %s" msgstr "" #: ../src/vikgeoreflayer.c:365 msgid "Unexpected end of file reading World file." msgstr "" #: ../src/vikgeoreflayer.c:381 ../src/vikgeoreflayer.c:426 msgid "Choose World file" msgstr "" #: ../src/vikgeoreflayer.c:394 msgid "The World file you requested could not be opened for reading." msgstr "" #: ../src/vikgeoreflayer.c:439 msgid "The file you requested could not be opened for writing." msgstr "" #: ../src/vikgeoreflayer.c:456 ../src/viklayer.c:480 msgid "Layer Properties" msgstr "" #: ../src/vikgeoreflayer.c:478 msgid "World File Parameters:" msgstr "" #: ../src/vikgeoreflayer.c:479 msgid "Load From File..." msgstr "" #: ../src/vikgeoreflayer.c:484 msgid "Corner pixel easting:" msgstr "" #: ../src/vikgeoreflayer.c:486 msgid "the UTM \"easting\" value of the upper-right corner pixel of the map" msgstr "" #: ../src/vikgeoreflayer.c:488 msgid "Corner pixel northing:" msgstr "" #: ../src/vikgeoreflayer.c:490 msgid "the UTM \"northing\" value of the upper-right corner pixel of the map" msgstr "" #: ../src/vikgeoreflayer.c:492 msgid "X (easting) scale (mpp): " msgstr "" #: ../src/vikgeoreflayer.c:493 msgid "Y (northing) scale (mpp): " msgstr "" #: ../src/vikgeoreflayer.c:496 msgid "the scale of the map in the X direction (meters per pixel)" msgstr "" #: ../src/vikgeoreflayer.c:498 msgid "the scale of the map in the Y direction (meters per pixel)" msgstr "" #: ../src/vikgeoreflayer.c:500 msgid "Map Image:" msgstr "地图图片:" #. Now with icons #: ../src/vikgeoreflayer.c:608 msgid "_Zoom to Fit Map" msgstr "" #: ../src/vikgeoreflayer.c:614 msgid "_Goto Map Center" msgstr "" #: ../src/vikgeoreflayer.c:620 msgid "_Export to World File" msgstr "" #: ../src/vikgoto.c:75 msgid "No goto tool available." msgstr "" #: ../src/vikgoto.c:88 ../src/vikgoto.c:107 msgid "goto" msgstr "" #: ../src/vikgoto.c:90 msgid "I don't know that place. Do you want another goto?" msgstr "" #: ../src/vikgoto.c:109 msgid "goto provider:" msgstr "" #: ../src/vikgoto.c:124 msgid "Enter address or place name:" msgstr "输入地址或者地点名称:" #: ../src/vikgpslayer.c:127 msgid "Data Mode" msgstr "" #: ../src/vikgpslayer.c:129 msgid "Realtime Tracking Mode" msgstr "" #: ../src/vikgpslayer.c:137 msgid "Keep vehicle at center" msgstr "" #: ../src/vikgpslayer.c:138 msgid "Keep vehicle on screen" msgstr "" #: ../src/vikgpslayer.c:139 msgid "Disable" msgstr "" #: ../src/vikgpslayer.c:152 msgid "Download Tracks:" msgstr "" #: ../src/vikgpslayer.c:153 msgid "Upload Tracks:" msgstr "" #: ../src/vikgpslayer.c:154 msgid "Download Routes:" msgstr "" #: ../src/vikgpslayer.c:155 msgid "Upload Routes:" msgstr "" #: ../src/vikgpslayer.c:156 msgid "Download Waypoints:" msgstr "" #: ../src/vikgpslayer.c:157 msgid "Upload Waypoints:" msgstr "" #: ../src/vikgpslayer.c:159 msgid "Recording tracks" msgstr "正在纪录轨迹" #: ../src/vikgpslayer.c:160 msgid "Jump to current position on start" msgstr "在开始时跳到当前位置" #: ../src/vikgpslayer.c:161 msgid "Moving Map Method:" msgstr "" #: ../src/vikgpslayer.c:162 msgid "Gpsd Host:" msgstr "Gpsd 主机:" #: ../src/vikgpslayer.c:163 msgid "Gpsd Port:" msgstr "Gpsd 端口:" #: ../src/vikgpslayer.c:164 msgid "Gpsd Retry Interval (seconds):" msgstr "" #: ../src/vikgpslayer.c:179 msgid "GPS" msgstr "" #: ../src/vikgpslayer.c:242 ../src/vikgpslayer.c:1258 msgid "GPS Download" msgstr "GPS 下载" #: ../src/vikgpslayer.c:242 ../src/vikgpslayer.c:1258 #: ../src/viktrwlayer.c:3094 msgid "GPS Upload" msgstr "GPS 上传" #: ../src/vikgpslayer.c:244 msgid "GPS Realtime Tracking" msgstr "GPS实时跟踪" #: ../src/vikgpslayer.c:451 msgid "Unknown GPS Protocol" msgstr "未知的GPS协议" #: ../src/vikgpslayer.c:469 msgid "Unknown serial port device" msgstr "未知的串口设备" #: ../src/vikgpslayer.c:572 #, c-format msgid "%s: unknown parameter" msgstr "%s: 未知的参数" #. Now with icons #: ../src/vikgpslayer.c:693 msgid "_Upload to GPS" msgstr "" #: ../src/vikgpslayer.c:699 msgid "Download from _GPS" msgstr "" #: ../src/vikgpslayer.c:720 msgid "Empty _Realtime" msgstr "" #: ../src/vikgpslayer.c:727 msgid "E_mpty Upload" msgstr "" #: ../src/vikgpslayer.c:733 msgid "_Empty Download" msgstr "" #: ../src/vikgpslayer.c:739 msgid "Empty _All" msgstr "" #. #. NB It's not fatal if this gives 2 for example! Hence removal of the g_assert #. This happens when copied GPS layer is deleted (not sure why the number_handlers would be 2) #. I don't think there's any side effects and certainly better than the program just aborting #. #: ../src/vikgpslayer.c:756 #, c-format msgid "Unexpected number of disconnected handlers: %d" msgstr "" #: ../src/vikgpslayer.c:898 #, c-format msgid "Uploading %d waypoint..." msgid_plural "Uploading %d waypoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:899 #, c-format msgid "Uploading %d trackpoint..." msgid_plural "Uploading %d trackpoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:900 #, c-format msgid "Uploading %d routepoint..." msgid_plural "Uploading %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:925 #, c-format msgid "Downloaded %d out of %d waypoint..." msgid_plural "Downloaded %d out of %d waypoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:926 #, c-format msgid "Downloaded %d out of %d trackpoint..." msgid_plural "Downloaded %d out of %d trackpoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:927 #, c-format msgid "Downloaded %d out of %d routepoint..." msgid_plural "Downloaded %d out of %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:932 #, c-format msgid "Uploaded %d out of %d waypoint..." msgid_plural "Uploaded %d out of %d waypoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:933 #, c-format msgid "Uploaded %d out of %d trackpoint..." msgid_plural "Uploaded %d out of %d trackpoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:934 #, c-format msgid "Uploaded %d out of %d routepoint..." msgid_plural "Uploaded %d out of %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:942 #, c-format msgid "Downloaded %d waypoint" msgid_plural "Downloaded %d waypoints" msgstr[0] "下载的 %d 航点" #: ../src/vikgpslayer.c:943 #, c-format msgid "Downloaded %d trackpoint" msgid_plural "Downloaded %d trackpoints" msgstr[0] "下载的 %d 轨迹点" #: ../src/vikgpslayer.c:944 #, c-format msgid "Downloaded %d routepoint" msgid_plural "Downloaded %d routepoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:949 #, c-format msgid "Uploaded %d waypoint" msgid_plural "Uploaded %d waypoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:950 #, c-format msgid "Uploaded %d trackpoint" msgid_plural "Uploaded %d trackpoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:951 #, c-format msgid "Uploaded %d routepoint" msgid_plural "Uploaded %d routepoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:1180 msgid "Error: couldn't find gpsbabel." msgstr "错误: 没有发现 gpsbabel." #: ../src/vikgpslayer.c:1269 msgid "Warning - GPS Upload items may overwrite each other" msgstr "" #: ../src/vikgpslayer.c:1301 msgid "Status: detecting gpsbabel" msgstr "状态: 检测 gpsbabel" #: ../src/vikgpslayer.c:1332 msgid "No GPS items selected for transfer." msgstr "" #: ../src/vikgpslayer.c:1347 msgid "Could not turn off device." msgstr "" #: ../src/vikgpslayer.c:1385 msgid "Are you sure you want to delete GPS Upload data?" msgstr "" #: ../src/vikgpslayer.c:1398 msgid "Are you sure you want to delete GPS Download data?" msgstr "" #: ../src/vikgpslayer.c:1412 msgid "Are you sure you want to delete GPS Realtime data?" msgstr "" #: ../src/vikgpslayer.c:1425 msgid "Are you sure you want to delete All GPS data?" msgstr "" #: ../src/viklayerspanel.c:55 msgid "/C_ut" msgstr "/_u 剪切" #: ../src/viklayerspanel.c:56 msgid "/_Copy" msgstr "/_C 拷贝" #: ../src/viklayerspanel.c:57 msgid "/_Paste" msgstr "/_P 粘贴" #: ../src/viklayerspanel.c:58 msgid "/_Delete" msgstr "/_D 删除" #: ../src/viklayerspanel.c:59 msgid "/New Layer" msgstr "/新图层" #: ../src/viklayerspanel.c:127 msgid "Top Layer" msgstr "顶层" #: ../src/viklayerspanel.c:143 msgid "Add new layer" msgstr "" #: ../src/viklayerspanel.c:150 msgid "Remove selected layer" msgstr "" #: ../src/viklayerspanel.c:157 msgid "Move selected layer up" msgstr "" #: ../src/viklayerspanel.c:164 msgid "Move selected layer down" msgstr "" #: ../src/viklayerspanel.c:171 msgid "Cut selected layer" msgstr "" #: ../src/viklayerspanel.c:178 msgid "Copy selected layer" msgstr "" #: ../src/viklayerspanel.c:185 msgid "Paste layer below selected layer" msgstr "" #. TODO: FIXME: if name has a '/' in it it will get all messed up. why not have an itemfactory field with #. name, icon, shortcut, etc.? #: ../src/viklayerspanel.c:204 ../src/vikwindow.c:3292 #, c-format msgid "New _%s Layer" msgstr "" #: ../src/viklayerspanel.c:511 msgid "Aggregate Layers have no settable properties." msgstr "" #: ../src/viklayerspanel.c:555 msgid "You cannot cut the Top Layer." msgstr "您不能剪切掉顶层" #: ../src/viklayerspanel.c:600 #, c-format msgid "Are you sure you want to delete %s?" msgstr "" #: ../src/viklayerspanel.c:617 msgid "You cannot delete the Top Layer." msgstr "您不能删除顶层" #: ../src/viklayerspanel.c:701 msgid "Are you sure you wish to delete all layers?" msgstr "您真的确认要删除所有的图层?" #. ******* MAPZOOMS ******** #: ../src/vikmapslayer.c:91 msgid "Use Viking Zoom Level" msgstr "" #: ../src/vikmapslayer.c:124 msgid "Map Type:" msgstr "地图类型:" #: ../src/vikmapslayer.c:125 msgid "Maps Directory:" msgstr "" #: ../src/vikmapslayer.c:126 msgid "Alpha:" msgstr "Alpha:" #: ../src/vikmapslayer.c:127 msgid "Control the Alpha value for transparency effects" msgstr "" #: ../src/vikmapslayer.c:128 msgid "Autodownload maps:" msgstr "自动下载地图:" #: ../src/vikmapslayer.c:129 msgid "Autodownload Only Gets Missing Maps:" msgstr "" #: ../src/vikmapslayer.c:130 msgid "" "Using this option avoids attempting to update already acquired tiles. This " "can be useful if you want to restrict the network usage, without having to " "resort to manual control. Only applies when 'Autodownload Maps' is on." msgstr "" #: ../src/vikmapslayer.c:131 msgid "Zoom Level:" msgstr "缩放程度 :" #: ../src/vikmapslayer.c:132 msgid "" "Determines the method of displaying map tiles for the current zoom level. " "'Viking Zoom Level' uses the best matching level, otherwise setting a fixed " "value will always use map tiles of the specified value regardless of the " "actual zoom level." msgstr "" #: ../src/vikmapslayer.c:146 msgid "_Maps Download" msgstr "" #: ../src/vikmapslayer.c:146 msgid "Maps Download" msgstr "地图下载" #: ../src/vikmapslayer.c:161 msgid "Map" msgstr "地图" #: ../src/vikmapslayer.c:249 msgid "Default maplayer directory:" msgstr "" #: ../src/vikmapslayer.c:249 msgid "Choose a directory to store cached Map tiles for this layer" msgstr "" #: ../src/vikmapslayer.c:505 msgid "Unknown map type" msgstr "未知的地图类型" #: ../src/vikmapslayer.c:516 msgid "Unknown Map Zoom" msgstr "" #: ../src/vikmapslayer.c:589 #, c-format msgid "" "New map cannot be displayed in the current drawmode.\n" "Select \"%s\" from View menu to view it." msgstr "" #: ../src/vikmapslayer.c:753 #, c-format msgid "" "Cowardly refusing to draw tiles or existence of tiles beyond %d zoom out " "factor" msgstr "" #: ../src/vikmapslayer.c:1157 #, c-format msgid "Redownloading up to %d %s map..." msgid_plural "Redownloading up to %d %s maps..." msgstr[0] "" msgstr[1] "" #: ../src/vikmapslayer.c:1159 #, c-format msgid "Redownloading %d %s map..." msgid_plural "Redownloading %d %s maps..." msgstr[0] "" msgstr[1] "" #: ../src/vikmapslayer.c:1163 ../src/vikmapslayer.c:1238 #, c-format msgid "Downloading %d %s map..." msgid_plural "Downloading %d %s maps..." msgstr[0] "正在下载 %d %s 地图..." #: ../src/vikmapslayer.c:1311 #, c-format msgid "" "\n" "Source: %s\n" "\n" "Tile File: %s\n" "Tile File Timestamp: %s" msgstr "" #: ../src/vikmapslayer.c:1318 #, c-format msgid "" "Source: %s\n" "\n" "No Tile File!" msgstr "" #: ../src/vikmapslayer.c:1356 msgid "Redownload _Bad Map(s)" msgstr "" #: ../src/vikmapslayer.c:1360 msgid "Redownload _New Map(s)" msgstr "" #: ../src/vikmapslayer.c:1364 msgid "Redownload _All Map(s)" msgstr "" #: ../src/vikmapslayer.c:1368 msgid "_Show Tile Information" msgstr "" #: ../src/vikmapslayer.c:1449 #, c-format msgid "" "Wrong drawmode for this map.\n" "Select \"%s\" from View menu and try again." msgstr "" #: ../src/vikmapslayer.c:1454 msgid "Wrong zoom level for this map." msgstr "此地图无此缩放程度" #. Now with icons #: ../src/vikmapslayer.c:1485 msgid "Download _Missing Onscreen Maps" msgstr "" #: ../src/vikmapslayer.c:1492 msgid "Download _New Onscreen Maps" msgstr "" #: ../src/vikmapslayer.c:1499 msgid "Reload _All Onscreen Maps" msgstr "" #: ../src/viktreeview.c:263 msgid "Layer Name" msgstr "图层名字" #: ../src/viktreeview.c:742 #, c-format msgid "delete data from %s\n" msgstr "从 %s 删除数据\n" #: ../src/viktrwlayer.c:377 msgid "Create _Waypoint" msgstr "" #: ../src/viktrwlayer.c:377 msgid "Create Waypoint" msgstr "创建航点" #: ../src/viktrwlayer.c:383 msgid "Create _Track" msgstr "" #: ../src/viktrwlayer.c:383 msgid "Create Track" msgstr "创建轨迹" #: ../src/viktrwlayer.c:392 msgid "Create _Route" msgstr "" #: ../src/viktrwlayer.c:392 msgid "Create Route" msgstr "" #: ../src/viktrwlayer.c:401 msgid "_Edit Waypoint" msgstr "" #: ../src/viktrwlayer.c:401 msgid "Edit Waypoint" msgstr "编辑航点" #: ../src/viktrwlayer.c:409 msgid "Edit Trac_kpoint" msgstr "" #: ../src/viktrwlayer.c:409 msgid "Edit Trackpoint" msgstr "编辑轨迹点" #: ../src/viktrwlayer.c:417 msgid "Show P_icture" msgstr "" #: ../src/viktrwlayer.c:417 msgid "Show Picture" msgstr "显示图片" #: ../src/viktrwlayer.c:424 msgid "Route _Finder" msgstr "" #: ../src/viktrwlayer.c:424 msgid "Route Finder" msgstr "" #. ***** PARAMETERS ***** #: ../src/viktrwlayer.c:447 ../src/viktrwlayer.c:1942 #: ../src/viktrwlayer.c:1944 msgid "Waypoints" msgstr "航点" #: ../src/viktrwlayer.c:447 ../src/viktrwlayer.c:1933 #: ../src/viktrwlayer.c:1935 msgid "Tracks" msgstr "轨迹" #: ../src/viktrwlayer.c:447 msgid "Waypoint Images" msgstr "航点图片" #: ../src/viktrwlayer.c:450 msgid "Draw by Track" msgstr "以轨迹绘图" #: ../src/viktrwlayer.c:450 msgid "Draw by Speed" msgstr "" #: ../src/viktrwlayer.c:450 msgid "All Tracks Same Color" msgstr "" #: ../src/viktrwlayer.c:451 msgid "Filled Square" msgstr "实心方块" #: ../src/viktrwlayer.c:451 msgid "Square" msgstr "正方形" #: ../src/viktrwlayer.c:451 msgid "Circle" msgstr "圆形" #: ../src/viktrwlayer.c:451 msgid "X" msgstr "X" #: ../src/viktrwlayer.c:477 msgid "Extra Extra Small" msgstr "" #: ../src/viktrwlayer.c:478 msgid "Extra Small" msgstr "" #: ../src/viktrwlayer.c:479 msgid "Small" msgstr "" #: ../src/viktrwlayer.c:480 msgid "Medium" msgstr "" #: ../src/viktrwlayer.c:481 msgid "Large" msgstr "" #: ../src/viktrwlayer.c:482 msgid "Extra Large" msgstr "" #: ../src/viktrwlayer.c:483 msgid "Extra Extra Large" msgstr "" #: ../src/viktrwlayer.c:491 msgid "Track Drawing Mode:" msgstr "" #: ../src/viktrwlayer.c:492 msgid "All Tracks Color:" msgstr "" #: ../src/viktrwlayer.c:493 msgid "The color used when 'All Tracks Same Color' drawing mode is selected" msgstr "" #: ../src/viktrwlayer.c:494 msgid "Draw Track Lines" msgstr "" #: ../src/viktrwlayer.c:495 msgid "Track Thickness:" msgstr "" #: ../src/viktrwlayer.c:496 msgid "Draw Track Direction" msgstr "" #: ../src/viktrwlayer.c:497 msgid "Direction Size:" msgstr "" #: ../src/viktrwlayer.c:498 msgid "Draw Trackpoints" msgstr "" #: ../src/viktrwlayer.c:499 msgid "Trackpoint Size:" msgstr "" #: ../src/viktrwlayer.c:500 msgid "Draw Elevation" msgstr "" #: ../src/viktrwlayer.c:501 msgid "Draw Elevation Height %:" msgstr "" #: ../src/viktrwlayer.c:503 msgid "Draw Stops" msgstr "" #: ../src/viktrwlayer.c:504 msgid "" "Whether to draw a marker when trackpoints are at the same position but over " "the minimum stop length apart in time" msgstr "" #: ../src/viktrwlayer.c:505 msgid "Min Stop Length (seconds):" msgstr "" #: ../src/viktrwlayer.c:507 msgid "Track BG Thickness:" msgstr "" #: ../src/viktrwlayer.c:508 msgid "Track Background Color" msgstr "" #: ../src/viktrwlayer.c:509 msgid "Draw by Speed Factor (%):" msgstr "" #: ../src/viktrwlayer.c:510 msgid "" "The percentage factor away from the average speed determining the color used" msgstr "" #: ../src/viktrwlayer.c:512 msgid "Draw Labels" msgstr "描绘图层" #: ../src/viktrwlayer.c:513 msgid "Waypoint Font Size:" msgstr "" #: ../src/viktrwlayer.c:514 msgid "Waypoint Color:" msgstr "航点颜色" #: ../src/viktrwlayer.c:515 msgid "Waypoint Text:" msgstr "航点文字:" #: ../src/viktrwlayer.c:516 msgid "Background:" msgstr "背景:" #: ../src/viktrwlayer.c:517 msgid "Fake BG Color Translucency:" msgstr "" #: ../src/viktrwlayer.c:518 msgid "Waypoint marker:" msgstr "航点标签" #: ../src/viktrwlayer.c:519 msgid "Waypoint size:" msgstr "航点大小" #: ../src/viktrwlayer.c:520 msgid "Draw Waypoint Symbols:" msgstr "" #: ../src/viktrwlayer.c:522 msgid "Draw Waypoint Images" msgstr "" #: ../src/viktrwlayer.c:523 msgid "Image Size (pixels):" msgstr "图片大小 (像素):" #: ../src/viktrwlayer.c:524 msgid "Image Alpha:" msgstr "图片Alpha值:" #: ../src/viktrwlayer.c:525 msgid "Image Memory Cache Size:" msgstr "图片内存缓存尺寸:" #: ../src/viktrwlayer.c:610 msgid "TrackWaypoint" msgstr "" #: ../src/viktrwlayer.c:1951 ../src/viktrwlayer.c:1953 msgid "Routes" msgstr "" #: ../src/viktrwlayer.c:2144 #, c-format msgid " in %d:%02d hrs:mins" msgstr "" #: ../src/viktrwlayer.c:2148 #, c-format msgid "" "\n" "%sTotal Length %.1f %s%s" msgstr "" #: ../src/viktrwlayer.c:2154 #, c-format msgid "Tracks: %d - Waypoints: %d - Routes: %d%s" msgstr "" #: ../src/viktrwlayer.c:2174 #, c-format msgid "Tracks: %d" msgstr "" #: ../src/viktrwlayer.c:2184 #, c-format msgid "Routes: %d" msgstr "" #: ../src/viktrwlayer.c:2215 #, c-format msgid "- %d:%02d hrs:mins" msgstr "" #: ../src/viktrwlayer.c:2223 #, c-format msgid "%s%.1f km %s" msgstr "" #: ../src/viktrwlayer.c:2226 #, c-format msgid "%s%.1f miles %s" msgstr "" #: ../src/viktrwlayer.c:2240 #, c-format msgid "Waypoints: %d" msgstr "" #: ../src/viktrwlayer.c:2266 #, c-format msgid "Trkpt: Alt %dft" msgstr "" #. VIK_UNITS_HEIGHT_METRES: #: ../src/viktrwlayer.c:2270 #, c-format msgid "Trkpt: Alt %dm" msgstr "" #. Compact date time format #: ../src/viktrwlayer.c:2277 #, c-format msgid " | Time %x %X" msgstr "" #: ../src/viktrwlayer.c:2295 #, c-format msgid " | Track: %s" msgstr "" #. Combine parts to make overall message #: ../src/viktrwlayer.c:2299 #, c-format msgid "%s%s | %s %s %s" msgstr "" #: ../src/viktrwlayer.c:2314 #, c-format msgid "Wpt: Alt %dft" msgstr "" #. VIK_UNITS_HEIGHT_METRES: #: ../src/viktrwlayer.c:2318 #, c-format msgid "Wpt: Alt %dm" msgstr "" #. Add comment if available #: ../src/viktrwlayer.c:2333 #, c-format msgid "%s | %s %s | Comment: %s" msgstr "" #: ../src/viktrwlayer.c:2335 #, c-format msgid "%s | %s %s" msgstr "" #: ../src/viktrwlayer.c:2563 ../src/viktrwlayer.c:2634 msgid "This layer has no waypoints or trackpoints." msgstr "" #: ../src/viktrwlayer.c:2661 ../src/vikwindow.c:2407 ../src/vikwindow.c:2848 #, c-format msgid "The file \"%s\" exists, do you wish to overwrite it?" msgstr "" #: ../src/viktrwlayer.c:2671 ../src/vikwindow.c:2429 msgid "The filename you requested could not be opened for writing." msgstr "" #: ../src/viktrwlayer.c:2676 ../src/viktrwlayer.c:2681 #: ../src/viktrwlayer.c:2691 ../src/viktrwlayer.c:2703 msgid "Export Layer" msgstr "输出图层" #: ../src/viktrwlayer.c:2720 msgid "Could not create temporary file for export." msgstr "" #: ../src/viktrwlayer.c:2729 #, c-format msgid "Could not launch %s." msgstr "" #: ../src/viktrwlayer.c:2773 msgid "Export Track as GPX" msgstr "" #: ../src/viktrwlayer.c:2795 msgid "Find" msgstr "" #: ../src/viktrwlayer.c:2805 msgid "Waypoint Name:" msgstr "航点名称:" #: ../src/viktrwlayer.c:2822 msgid "Waypoint not found in this layer." msgstr "在此图层中没有发现航点" #: ../src/viktrwlayer.c:3090 msgid "Can not upload invisible track." msgstr "" #: ../src/viktrwlayer.c:3192 ../src/viktrwlayer.c:7785 msgid "Track" msgstr "" #: ../src/viktrwlayer.c:3215 ../src/viktrwlayer.c:7817 msgid "Route" msgstr "" #: ../src/viktrwlayer.c:3296 ../src/viktrwlayer.c:6265 #: ../src/viktrwlayer.c:6314 msgid "_Finish Route" msgstr "" #: ../src/viktrwlayer.c:3298 ../src/viktrwlayer.c:6223 #: ../src/viktrwlayer.c:6312 msgid "_Finish Track" msgstr "" #. Now with icons #: ../src/viktrwlayer.c:3310 msgid "_View Layer" msgstr "" #: ../src/viktrwlayer.c:3317 msgid "V_iew" msgstr "" #: ../src/viktrwlayer.c:3323 msgid "View All _Tracks" msgstr "" #: ../src/viktrwlayer.c:3328 msgid "View All _Routes" msgstr "" #: ../src/viktrwlayer.c:3333 msgid "View All _Waypoints" msgstr "" #: ../src/viktrwlayer.c:3338 msgid "_Goto Center of Layer" msgstr "" #: ../src/viktrwlayer.c:3344 ../src/viktrwlayer.c:6199 msgid "Goto _Waypoint..." msgstr "" #: ../src/viktrwlayer.c:3350 msgid "_Export Layer" msgstr "" #: ../src/viktrwlayer.c:3356 msgid "Export as GPS_Point..." msgstr "" #: ../src/viktrwlayer.c:3361 msgid "Export as GPS_Mapper..." msgstr "" #: ../src/viktrwlayer.c:3366 msgid "Export as _GPX..." msgstr "" #: ../src/viktrwlayer.c:3371 msgid "Export as _KML..." msgstr "" #: ../src/viktrwlayer.c:3376 msgid "Open with External Program_1: " msgstr "" #: ../src/viktrwlayer.c:3383 msgid "Open with External Program_2: " msgstr "" #: ../src/viktrwlayer.c:3391 ../src/vikwindow.c:3145 msgid "_New" msgstr "新建(_N)" #: ../src/viktrwlayer.c:3397 msgid "New _Waypoint..." msgstr "" #: ../src/viktrwlayer.c:3403 msgid "New _Track" msgstr "" #: ../src/viktrwlayer.c:3411 msgid "New _Route" msgstr "" #: ../src/viktrwlayer.c:3420 ../src/viktrwlayer.c:6597 msgid "Geotag _Images..." msgstr "" #: ../src/viktrwlayer.c:3427 msgid "_Acquire" msgstr "" #: ../src/viktrwlayer.c:3433 ../src/vikwindow.c:3150 msgid "From _GPS..." msgstr "_G 从GPS..." #: ../src/viktrwlayer.c:3439 msgid "From Google _Directions..." msgstr "" #: ../src/viktrwlayer.c:3446 msgid "From _OSM Traces..." msgstr "" #: ../src/viktrwlayer.c:3451 msgid "From _My OSM Traces..." msgstr "" #: ../src/viktrwlayer.c:3459 ../src/vikwindow.c:3166 msgid "From _Wikipedia Waypoints" msgstr "" #: ../src/viktrwlayer.c:3465 msgid "Within _Layer Bounds" msgstr "" #: ../src/viktrwlayer.c:3471 msgid "Within _Current View" msgstr "" #: ../src/viktrwlayer.c:3479 msgid "From Geo_caching..." msgstr "" #: ../src/viktrwlayer.c:3486 ../src/vikwindow.c:3163 msgid "From Geotagged _Images..." msgstr "" #: ../src/viktrwlayer.c:3492 msgid "From _File..." msgstr "" #: ../src/viktrwlayer.c:3498 ../src/viktrwlayer.c:6542 msgid "_Upload" msgstr "" #: ../src/viktrwlayer.c:3504 msgid "Upload to _GPS..." msgstr "" #: ../src/viktrwlayer.c:3511 ../src/viktrwlayer.c:6570 msgid "Upload to _OSM..." msgstr "" #: ../src/viktrwlayer.c:3519 msgid "De_lete" msgstr "" #: ../src/viktrwlayer.c:3525 msgid "Delete All _Tracks" msgstr "" #: ../src/viktrwlayer.c:3531 msgid "Delete Tracks _From Selection..." msgstr "" #: ../src/viktrwlayer.c:3537 ../src/viktrwlayer.c:6290 msgid "Delete _All Routes" msgstr "" #: ../src/viktrwlayer.c:3543 ../src/viktrwlayer.c:6296 msgid "_Delete Routes From Selection..." msgstr "" #: ../src/viktrwlayer.c:3549 msgid "Delete All _Waypoints" msgstr "" #: ../src/viktrwlayer.c:3555 msgid "Delete Waypoints From _Selection..." msgstr "" #: ../src/viktrwlayer.c:4128 #, c-format msgid "Are you sure you want to delete all tracks in %s?" msgstr "" #: ../src/viktrwlayer.c:4138 #, c-format msgid "Are you sure you want to delete all routes in %s?" msgstr "" #: ../src/viktrwlayer.c:4148 #, c-format msgid "Are you sure you want to delete all waypoints in %s?" msgstr "" #: ../src/viktrwlayer.c:4165 #, c-format msgid "Are you sure you want to delete the waypoint \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4178 #, c-format msgid "Are you sure you want to delete the track \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4191 #, c-format msgid "Are you sure you want to delete the route \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4351 ../src/viktrwlayer.c:4922 msgid "" "Converting a track to a route removes extra track data such as segments, " "timestamps, etc...\n" "Do you want to continue?" msgstr "" #: ../src/viktrwlayer.c:4711 msgid "Failed. No other tracks with timestamps in this layer found" msgstr "" #: ../src/viktrwlayer.c:4713 msgid "Failed. No other tracks without timestamps in this layer found" msgstr "" #: ../src/viktrwlayer.c:4732 msgid "Merge with..." msgstr "" #: ../src/viktrwlayer.c:4733 msgid "Select route to merge with" msgstr "" #: ../src/viktrwlayer.c:4733 msgid "Select track to merge with" msgstr "" #: ../src/viktrwlayer.c:4818 ../src/viktrwlayer.c:4895 msgid "Append Route" msgstr "" #: ../src/viktrwlayer.c:4818 ../src/viktrwlayer.c:4895 msgid "Append Track" msgstr "" #: ../src/viktrwlayer.c:4819 msgid "Select the route to append after the current route" msgstr "" #: ../src/viktrwlayer.c:4820 msgid "Select the track to append after the current track" msgstr "" #: ../src/viktrwlayer.c:4896 msgid "Select the track to append after the current route" msgstr "" #: ../src/viktrwlayer.c:4897 msgid "Select the route to append after the current track" msgstr "" #: ../src/viktrwlayer.c:4957 #, c-format msgid "%d segment merged" msgid_plural "%d segments merged" msgstr[0] "" msgstr[1] "" #: ../src/viktrwlayer.c:4973 msgid "Failed. This track does not have timestamp" msgstr "" #: ../src/viktrwlayer.c:4985 msgid "Failed. No other track in this layer has timestamp" msgstr "" #: ../src/viktrwlayer.c:4992 msgid "Merge Threshold..." msgstr "" #: ../src/viktrwlayer.c:4993 msgid "Merge when time between tracks less than:" msgstr "" #: ../src/viktrwlayer.c:5128 msgid "Split Threshold..." msgstr "" #: ../src/viktrwlayer.c:5129 msgid "Split when time between trackpoints exceeds:" msgstr "" #: ../src/viktrwlayer.c:5205 msgid "Split Every Nth Point" msgstr "" #: ../src/viktrwlayer.c:5206 msgid "Split on every Nth point:" msgstr "" #: ../src/viktrwlayer.c:5312 msgid "Can not split track as it has no segments" msgstr "" #: ../src/viktrwlayer.c:5340 ../src/viktrwlayer.c:5370 #, c-format msgid "Deleted %ld point" msgid_plural "Deleted %ld points" msgstr[0] "" msgstr[1] "" #: ../src/viktrwlayer.c:5531 msgid "Internal Error in vik_trw_layer_uniquify_tracks" msgstr "" #: ../src/viktrwlayer.c:5588 ../src/viktrwlayer.c:5635 #: ../src/viktrwlayer.c:5814 msgid "" "Multiple entries with the same name exist. This method only works with " "unique names. Force unique names now?" msgstr "" #: ../src/viktrwlayer.c:5599 msgid "No tracks found" msgstr "" #: ../src/viktrwlayer.c:5607 ../src/viktrwlayer.c:5654 #: ../src/viktrwlayer.c:5834 msgid "Delete Selection" msgstr "" #: ../src/viktrwlayer.c:5608 msgid "Select tracks to delete" msgstr "" #: ../src/viktrwlayer.c:5646 msgid "No routes found" msgstr "" #: ../src/viktrwlayer.c:5655 msgid "Select routes to delete" msgstr "" #: ../src/viktrwlayer.c:5761 msgid "Internal Error in vik_trw_layer_uniquify_waypoints" msgstr "" #: ../src/viktrwlayer.c:5824 msgid "No waypoints found" msgstr "" #: ../src/viktrwlayer.c:5835 msgid "Select waypoints to delete" msgstr "" #: ../src/viktrwlayer.c:5896 #, c-format msgid "" "A waypoint with the name \"%s\" already exists. Really rename to the same " "name?" msgstr "" #: ../src/viktrwlayer.c:5926 #, c-format msgid "" "A track with the name \"%s\" already exists. Really rename to the same name?" msgstr "" #: ../src/viktrwlayer.c:5963 #, c-format msgid "" "A route with the name \"%s\" already exists. Really rename to the same name?" msgstr "" #: ../src/viktrwlayer.c:6085 ../src/viktrwlayer.c:6337 msgid "_Goto" msgstr "" #: ../src/viktrwlayer.c:6104 msgid "_Visit Geocache Webpage" msgstr "" #: ../src/viktrwlayer.c:6123 msgid "_Show Picture..." msgstr "" #: ../src/viktrwlayer.c:6131 msgid "Update Geotag on _Image" msgstr "" #: ../src/viktrwlayer.c:6137 msgid "_Update" msgstr "" #: ../src/viktrwlayer.c:6142 msgid "Update and _Keep File Timestamp" msgstr "" #: ../src/viktrwlayer.c:6153 msgid "Visit _Webpage" msgstr "" #: ../src/viktrwlayer.c:6184 msgid "_New Waypoint..." msgstr "" #: ../src/viktrwlayer.c:6193 msgid "_View All Waypoints" msgstr "" #: ../src/viktrwlayer.c:6205 msgid "Delete _All Waypoints" msgstr "" #: ../src/viktrwlayer.c:6211 msgid "_Delete Waypoints From Selection..." msgstr "" #: ../src/viktrwlayer.c:6233 msgid "_View All Tracks" msgstr "" #: ../src/viktrwlayer.c:6239 msgid "_New Track" msgstr "" #: ../src/viktrwlayer.c:6247 msgid "Delete _All Tracks" msgstr "" #: ../src/viktrwlayer.c:6253 msgid "_Delete Tracks From Selection..." msgstr "" #: ../src/viktrwlayer.c:6276 msgid "_View All Routes" msgstr "" #: ../src/viktrwlayer.c:6282 msgid "_New Route" msgstr "" #: ../src/viktrwlayer.c:6327 msgid "_View Track" msgstr "" #: ../src/viktrwlayer.c:6329 msgid "_View Route" msgstr "" #: ../src/viktrwlayer.c:6343 msgid "_Startpoint" msgstr "" #: ../src/viktrwlayer.c:6349 msgid "\"_Center\"" msgstr "" #: ../src/viktrwlayer.c:6355 msgid "_Endpoint" msgstr "" #: ../src/viktrwlayer.c:6361 msgid "_Highest Altitude" msgstr "" #: ../src/viktrwlayer.c:6367 msgid "_Lowest Altitude" msgstr "" #: ../src/viktrwlayer.c:6375 msgid "_Maximum Speed" msgstr "" #: ../src/viktrwlayer.c:6384 msgid "Co_mbine" msgstr "" #: ../src/viktrwlayer.c:6392 msgid "_Merge By Time..." msgstr "" #: ../src/viktrwlayer.c:6397 msgid "Merge _Segments" msgstr "" #: ../src/viktrwlayer.c:6403 msgid "Merge _With Other Tracks..." msgstr "" #: ../src/viktrwlayer.c:6409 msgid "_Append Track..." msgstr "" #: ../src/viktrwlayer.c:6411 msgid "_Append Route..." msgstr "" #: ../src/viktrwlayer.c:6417 msgid "Append _Route..." msgstr "" #: ../src/viktrwlayer.c:6419 msgid "Append _Track..." msgstr "" #: ../src/viktrwlayer.c:6426 msgid "_Split" msgstr "" #: ../src/viktrwlayer.c:6434 msgid "_Split By Time..." msgstr "" #. ATM always enable this entry - don't want to have to analyse the track before displaying the menu - to keep the menu speedy #: ../src/viktrwlayer.c:6440 msgid "Split Se_gments" msgstr "" #: ../src/viktrwlayer.c:6446 msgid "Split By _Number of Points..." msgstr "" #: ../src/viktrwlayer.c:6451 msgid "Split at _Trackpoint" msgstr "" #: ../src/viktrwlayer.c:6460 msgid "Delete Poi_nts" msgstr "" #: ../src/viktrwlayer.c:6466 msgid "Delete Points With The Same _Position" msgstr "" #: ../src/viktrwlayer.c:6471 msgid "Delete Points With The Same _Time" msgstr "" #: ../src/viktrwlayer.c:6477 msgid "_Reverse Track" msgstr "" #: ../src/viktrwlayer.c:6479 msgid "_Reverse Route" msgstr "" #: ../src/viktrwlayer.c:6488 msgid "Down_load Maps Along Track..." msgstr "" #: ../src/viktrwlayer.c:6490 msgid "Down_load Maps Along Route..." msgstr "" #: ../src/viktrwlayer.c:6497 msgid "_Apply DEM Data" msgstr "" #: ../src/viktrwlayer.c:6504 msgid "_Export Track as GPX..." msgstr "" #: ../src/viktrwlayer.c:6506 msgid "_Export Route as GPX..." msgstr "" #: ../src/viktrwlayer.c:6513 msgid "E_xtend Track End" msgstr "" #: ../src/viktrwlayer.c:6515 msgid "E_xtend Route End" msgstr "" #: ../src/viktrwlayer.c:6522 msgid "C_onvert to a Route" msgstr "" #: ../src/viktrwlayer.c:6524 msgid "C_onvert to a Track" msgstr "" #: ../src/viktrwlayer.c:6532 msgid "Extend _Using Route Finder" msgstr "" #: ../src/viktrwlayer.c:6548 msgid "_Upload to GPS..." msgstr "" #: ../src/viktrwlayer.c:6559 msgid "_View Google Directions" msgstr "" #: ../src/viktrwlayer.c:6579 msgid "Use with _Filter" msgstr "" #: ../src/viktrwlayer.c:6612 msgid "_Edit Trackpoint" msgstr "" #: ../src/viktrwlayer.c:7524 #, c-format msgid " - Gain %dm:Loss %dm" msgstr "" #: ../src/viktrwlayer.c:7526 #, c-format msgid " - Gain %dft:Loss %dft" msgstr "" #: ../src/viktrwlayer.c:7531 #, c-format msgid " - Bearing %3.1f° - Step %s" msgstr "" #: ../src/viktrwlayer.c:8124 #, c-format msgid "Could not launch %s to open file." msgstr "" #: ../src/viktrwlayer.c:8205 #, c-format msgid "Creating %d Image Thumbnails..." msgstr "" #: ../src/viktrwlayer.c:8524 msgid "No map layer in use. Create one first" msgstr "" #: ../src/viktrwlayer_propwin.c:898 ../src/viktrwlayer_propwin.c:1155 #, c-format msgid "%.1f kph" msgstr "" #: ../src/viktrwlayer_propwin.c:901 ../src/viktrwlayer_propwin.c:1158 #, c-format msgid "%.1f mph" msgstr "" #: ../src/viktrwlayer_propwin.c:904 ../src/viktrwlayer_propwin.c:1161 #, c-format msgid "%.1f knots" msgstr "" #. VIK_UNITS_SPEED_METRES_PER_SECOND: #: ../src/viktrwlayer_propwin.c:908 ../src/viktrwlayer_propwin.c:1165 #, c-format msgid "%.1f m/s" msgstr "" #: ../src/viktrwlayer_propwin.c:1745 #, c-format msgid "%.1f miles" msgstr "" #: ../src/viktrwlayer_propwin.c:1747 #, c-format msgid "%.1f km" msgstr "" #: ../src/viktrwlayer_propwin.c:2681 msgid "Failed spliting track. Track unchanged" msgstr "" #: ../src/viktrwlayer_propwin.c:2779 ../src/viktrwlayer_propwin.c:3178 #, c-format msgid "%s - Track Properties" msgstr "" #: ../src/viktrwlayer_propwin.c:2784 msgid "Split at _Marker" msgstr "" #: ../src/viktrwlayer_propwin.c:2785 msgid "Split _Segments" msgstr "" #: ../src/viktrwlayer_propwin.c:2786 msgid "_Reverse" msgstr "" #: ../src/viktrwlayer_propwin.c:2787 msgid "_Delete Dupl." msgstr "" #: ../src/viktrwlayer_propwin.c:2813 msgid "Comment:" msgstr "说明:" #: ../src/viktrwlayer_propwin.c:2814 msgid "Description:" msgstr "" #: ../src/viktrwlayer_propwin.c:2815 msgid "Track Length:" msgstr "" #: ../src/viktrwlayer_propwin.c:2816 msgid "Trackpoints:" msgstr "" #: ../src/viktrwlayer_propwin.c:2817 msgid "Segments:" msgstr "" #: ../src/viktrwlayer_propwin.c:2818 msgid "Duplicate Points:" msgstr "" #: ../src/viktrwlayer_propwin.c:2819 msgid "Max Speed:" msgstr "最大速度:" #: ../src/viktrwlayer_propwin.c:2820 msgid "Avg. Speed:" msgstr "平均速度:" #: ../src/viktrwlayer_propwin.c:2821 msgid "Moving Avg. Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:2822 msgid "Avg. Dist. Between TPs:" msgstr "" #: ../src/viktrwlayer_propwin.c:2823 msgid "Elevation Range:" msgstr "高度范围:" #: ../src/viktrwlayer_propwin.c:2824 msgid "Total Elevation Gain/Loss:" msgstr "" #: ../src/viktrwlayer_propwin.c:2825 msgid "Start:" msgstr "开始:" #: ../src/viktrwlayer_propwin.c:2826 msgid "End:" msgstr "结束:" #: ../src/viktrwlayer_propwin.c:2827 msgid "Duration:" msgstr "持续时间:" #: ../src/viktrwlayer_propwin.c:2828 msgid "Color:" msgstr "" #: ../src/viktrwlayer_propwin.c:2877 ../src/viktrwlayer_propwin.c:2901 #: ../src/viktrwlayer_propwin.c:2929 ../src/viktrwlayer_propwin.c:2966 #: ../src/viktrwlayer_propwin.c:2984 ../src/viktrwlayer_propwin.c:3034 #: ../src/viktrwlayer_propwin.c:3035 ../src/viktrwlayer_propwin.c:3036 #: ../src/viktrwlayer_propwin.c:3062 ../src/viktrwlayer_propwin.c:3063 #: ../src/viktrwlayer_propwin.c:3078 ../src/viktrwlayer_propwin.c:3079 #: ../src/viktrwlayer_propwin.c:3092 ../src/viktrwlayer_propwin.c:3093 #: ../src/viktrwlayer_propwin.c:3106 ../src/viktrwlayer_propwin.c:3107 #: ../src/viktrwlayer_propwin.c:3120 ../src/viktrwlayer_propwin.c:3121 #: ../src/viktrwlayer_propwin.c:3134 ../src/viktrwlayer_propwin.c:3135 #, c-format msgid "No Data" msgstr "没有数据" #: ../src/viktrwlayer_propwin.c:3031 #, c-format msgid "%d minutes" msgstr "%d 分钟" #: ../src/viktrwlayer_propwin.c:3058 msgid "Statistics" msgstr "" #: ../src/viktrwlayer_propwin.c:3064 msgid "Show D_EM" msgstr "" #: ../src/viktrwlayer_propwin.c:3065 ../src/viktrwlayer_propwin.c:3080 #: ../src/viktrwlayer_propwin.c:3094 ../src/viktrwlayer_propwin.c:3136 msgid "Show _GPS Speed" msgstr "" #: ../src/viktrwlayer_propwin.c:3067 ../src/viktrwlayer_propwin.c:3082 #: ../src/viktrwlayer_propwin.c:3110 ../src/viktrwlayer_propwin.c:3138 msgid "Track Distance:" msgstr "" #: ../src/viktrwlayer_propwin.c:3068 ../src/viktrwlayer_propwin.c:3125 msgid "Track Height:" msgstr "" #: ../src/viktrwlayer_propwin.c:3073 msgid "Elevation-distance" msgstr "高度-距离" #: ../src/viktrwlayer_propwin.c:3083 msgid "Track Gradient:" msgstr "" #: ../src/viktrwlayer_propwin.c:3087 msgid "Gradient-distance" msgstr "" #: ../src/viktrwlayer_propwin.c:3096 ../src/viktrwlayer_propwin.c:3111 #: ../src/viktrwlayer_propwin.c:3124 msgid "Track Time:" msgstr "" #: ../src/viktrwlayer_propwin.c:3097 ../src/viktrwlayer_propwin.c:3139 msgid "Track Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:3101 msgid "Speed-time" msgstr "速度-时间" #: ../src/viktrwlayer_propwin.c:3108 ../src/viktrwlayer_propwin.c:3122 msgid "Show S_peed" msgstr "" #: ../src/viktrwlayer_propwin.c:3115 msgid "Distance-time" msgstr "" #: ../src/viktrwlayer_propwin.c:3129 msgid "Elevation-time" msgstr "" #: ../src/viktrwlayer_propwin.c:3143 msgid "Speed-distance" msgstr "" #: ../src/viktrwlayer_tpwin.c:118 msgid "Part of Track:" msgstr "" #: ../src/viktrwlayer_tpwin.c:119 msgid "Latitude:" msgstr "纬度 :" #: ../src/viktrwlayer_tpwin.c:120 msgid "Longitude:" msgstr "经度 :" #: ../src/viktrwlayer_tpwin.c:121 msgid "Altitude:" msgstr "高度 :" #: ../src/viktrwlayer_tpwin.c:122 msgid "Timestamp:" msgstr "" #: ../src/viktrwlayer_tpwin.c:123 msgid "Time:" msgstr "时间 :" #: ../src/viktrwlayer_tpwin.c:124 msgid "Distance Difference:" msgstr "" #: ../src/viktrwlayer_tpwin.c:125 msgid "Time Difference:" msgstr "" #: ../src/viktrwlayer_tpwin.c:126 msgid "\"Speed\" Between:" msgstr "" #: ../src/viktrwlayer_tpwin.c:127 msgid "VDOP:" msgstr "" #: ../src/viktrwlayer_tpwin.c:128 msgid "HDOP:" msgstr "" #: ../src/viktrwlayer_tpwin.c:129 msgid "PDOP:" msgstr "" #: ../src/viktrwlayer_tpwin.c:130 msgid "SAT/FIX:" msgstr "" #: ../src/viktrwlayer_tpwin.c:139 msgid "Trackpoint" msgstr "" #: ../src/viktrwlayer_tpwin.c:142 msgid "_Insert After" msgstr "" #: ../src/viktrwlayer_tpwin.c:144 msgid "Split Here" msgstr "" #: ../src/viktrwlayer_geotag.c:446 #, c-format msgid "Geotagging %d Images..." msgstr "" #: ../src/viktrwlayer_geotag.c:510 msgid "Geotag Images" msgstr "" #: ../src/viktrwlayer_geotag.c:516 msgid "Images" msgstr "" #: ../src/viktrwlayer_geotag.c:520 msgid "Overwrite Existing Waypoints:" msgstr "" #: ../src/viktrwlayer_geotag.c:523 msgid "Overwrite Existing GPS Information:" msgstr "" #: ../src/viktrwlayer_geotag.c:525 msgid "Keep File Modification Timestamp:" msgstr "" #: ../src/viktrwlayer_geotag.c:555 msgid "Create Waypoints:" msgstr "" #: ../src/viktrwlayer_geotag.c:563 msgid "Write EXIF:" msgstr "" #: ../src/viktrwlayer_geotag.c:575 msgid "Interpolate Between Track Segments:" msgstr "" #: ../src/viktrwlayer_geotag.c:579 msgid "Image Time Offset (Seconds):" msgstr "" #: ../src/viktrwlayer_geotag.c:581 msgid "" "The number of seconds to ADD to the photos time to make it match the GPS " "data. Calculate this with (GPS - Photo). Can be negative or positive. Useful " "to adjust times when a camera's timestamp was incorrect." msgstr "" #: ../src/viktrwlayer_geotag.c:584 msgid "Image Timezone:" msgstr "" #: ../src/viktrwlayer_geotag.c:586 msgid "" "The timezone that was used when the images were created. For example, if a " "camera is set to AWST or +8:00 hours. Enter +8:00 here so that the correct " "adjustment to the images' time can be made. GPS data is always in UTC." msgstr "" #: ../src/viktrwlayer_geotag.c:590 #, c-format msgid "Using track: %s" msgstr "" #: ../src/viktrwlayer_geotag.c:592 #, c-format msgid "Using all tracks in: %s" msgstr "" #: ../src/vikstatus.c:105 msgid "Current zoom level. Click to select a new one." msgstr "" #: ../src/vikwaypoint.c:34 msgid "Waypoint" msgstr "" #. TODO get rid of this as this is unnecessary duplication... #: ../src/vikwindow.c:221 msgid "Pan" msgstr "移动" #: ../src/vikwindow.c:221 msgid "Zoom" msgstr "缩放" #: ../src/vikwindow.c:221 msgid "Ruler" msgstr "测距" #: ../src/vikwindow.c:221 msgid "Select" msgstr "" #. Create tooltip #: ../src/vikwindow.c:440 msgid "Select zoom level" msgstr "" #: ../src/vikwindow.c:645 #, c-format msgid "" "Do you want to save the changes you made to the document \"%s\"?\n" "\n" "Your changes will be lost if you don't save them." msgstr "" #: ../src/vikwindow.c:649 msgid "Don't Save" msgstr "不保存" #: ../src/vikwindow.c:696 msgid "mpp" msgstr "mpp" #: ../src/vikwindow.c:696 msgid "pixelfact" msgstr "pixelfact" #: ../src/vikwindow.c:861 #, c-format msgid "%s %s %dm" msgstr "" #: ../src/vikwindow.c:863 #, c-format msgid "%s %s %dft" msgstr "" #: ../src/vikwindow.c:866 #, c-format msgid "%s %s" msgstr "" #. NB Ctrl+Shift+R is used for Refresh (deemed more important), so use 'U' instead #: ../src/vikwindow.c:1254 msgid "_Ruler" msgstr "_R 测距" #: ../src/vikwindow.c:1254 msgid "Ruler Tool" msgstr "测距工具" #: ../src/vikwindow.c:1502 ../src/vikwindow.c:3138 msgid "_Zoom" msgstr "缩放(_Z)" #: ../src/vikwindow.c:1502 msgid "Zoom Tool" msgstr "缩放工具" #: ../src/vikwindow.c:1547 ../src/vikwindow.c:3139 msgid "_Pan" msgstr "平移(_P )" #: ../src/vikwindow.c:1547 msgid "Pan Tool" msgstr "" #: ../src/vikwindow.c:1664 msgid "_Select" msgstr "" #: ../src/vikwindow.c:1664 msgid "Select Tool" msgstr "" #: ../src/vikwindow.c:1809 msgid "You must select a layer to show its properties." msgstr "您必须选一个层才能显示它的属性" #. No error to show, so unlikely this will get called #: ../src/vikwindow.c:1824 msgid "The help system is not available." msgstr "" #. Main error path #: ../src/vikwindow.c:1827 #, c-format msgid "" "Help is not available because: %s.\n" "Ensure a Mime Type ghelp handler program is installed (e.g. yelp)." msgstr "" #: ../src/vikwindow.c:1850 msgid "You must select a layer to delete." msgstr "您必须选一个层才可删除" #: ../src/vikwindow.c:2087 msgid "Untitled" msgstr "无标题" #: ../src/vikwindow.c:2194 #, c-format msgid "Unable to add '%s' to the list of recently used documents" msgstr "" #: ../src/vikwindow.c:2208 msgid "The file you requested could not be opened." msgstr "您选的文件不能被打开" #: ../src/vikwindow.c:2211 msgid "" "GPSBabel is required to load files of this type or GPSBabel encountered " "problems." msgstr "" #: ../src/vikwindow.c:2214 #, c-format msgid "Unable to load malformed GPX file %s" msgstr "" #: ../src/vikwindow.c:2217 #, c-format msgid "Unsupported file type for %s" msgstr "" #. Since we can process .vik files with issues just show a warning in the status bar #. Not that a user can do much about it... or tells them what this issue is yet... #: ../src/vikwindow.c:2223 #, c-format msgid "WARNING: issues encountered loading %s" msgstr "" #: ../src/vikwindow.c:2278 msgid "Please select a GPS data file to open. " msgstr "请选择一个GPS数据文件来打开 " #: ../src/vikwindow.c:2288 msgid "Geocaching" msgstr "" #: ../src/vikwindow.c:2294 msgid "Google Earth" msgstr "" #: ../src/vikwindow.c:2299 msgid "GPX" msgstr "" #: ../src/vikwindow.c:2304 ../src/vikwindow.c:2387 #: ../src/viking.desktop.in.h:1 msgid "Viking" msgstr "" #: ../src/vikwindow.c:2374 msgid "Save as Viking File." msgstr "另存为Viking文件." #. Try harder... #: ../src/vikwindow.c:2619 ../src/vikwindow.c:2625 msgid "Generating image file..." msgstr "" #: ../src/vikwindow.c:2647 msgid "" "Failed to generate internal image.\n" "\n" "Try creating a smaller image." msgstr "" #: ../src/vikwindow.c:2655 msgid "Failed to generate image file." msgstr "" #. Success #: ../src/vikwindow.c:2660 msgid "Image file generated." msgstr "" #: ../src/vikwindow.c:2764 msgid "" "Viewable region outside allowable pixel size bounds for image. Clipping " "width/height values." msgstr "" #: ../src/vikwindow.c:2789 #, c-format msgid "Total area: %ldm x %ldm (%.3f sq. km)" msgstr "全部区域: %ldm x %ldm (%.3f 平方公里)" #: ../src/vikwindow.c:2792 #, c-format msgid "Total area: %ldm x %ldm (%.3f sq. miles)" msgstr "" #: ../src/vikwindow.c:2813 msgid "Save Image" msgstr "保存图像" #: ../src/vikwindow.c:2834 msgid "PNG" msgstr "" #: ../src/vikwindow.c:2857 msgid "You must be in UTM mode to use this feature" msgstr "你必须在UTM模式中来使用这个特性" #: ../src/vikwindow.c:2862 msgid "Choose a directory to hold images" msgstr "" #. todo: default for answers inside VikWindow or static (thruout instance) #: ../src/vikwindow.c:2883 msgid "Save to Image File" msgstr "保存为图片文件" #: ../src/vikwindow.c:2900 msgid "Width (pixels):" msgstr "宽度 (像素) :" #: ../src/vikwindow.c:2902 msgid "Height (pixels):" msgstr "高度 (像素) :" #: ../src/vikwindow.c:2905 msgid "" "WARNING: USING LARGE IMAGES OVER 10000x10000\n" "MAY CRASH THE PROGRAM!" msgstr "" #: ../src/vikwindow.c:2907 msgid "Zoom (meters per pixel):" msgstr "缩放 (米/像素) :" #: ../src/vikwindow.c:2921 msgid "Area in current viewable window" msgstr "" #: ../src/vikwindow.c:2931 msgid "Save as PNG" msgstr "保存为PNG" #: ../src/vikwindow.c:2932 msgid "Save as JPEG" msgstr "保存为JPEG" #: ../src/vikwindow.c:2954 msgid "East-west image tiles:" msgstr "" #: ../src/vikwindow.c:2956 msgid "North-south image tiles:" msgstr "" #: ../src/vikwindow.c:3097 msgid "Choose a background color" msgstr "选择一个背景色" #: ../src/vikwindow.c:3113 msgid "Choose a track highlight color" msgstr "" #: ../src/vikwindow.c:3134 msgid "_File" msgstr "文件(_F)" #: ../src/vikwindow.c:3135 msgid "_Edit" msgstr "编辑(_E)" #: ../src/vikwindow.c:3136 msgid "_View" msgstr "视图(_V)" #: ../src/vikwindow.c:3137 msgid "_Show" msgstr "" #: ../src/vikwindow.c:3140 msgid "_Layers" msgstr "图层(_L)" #: ../src/vikwindow.c:3141 msgid "_Tools" msgstr "工具(_T)" #: ../src/vikwindow.c:3142 msgid "_Webtools" msgstr "" #: ../src/vikwindow.c:3143 ../src/vikwindow.c:3206 msgid "_Help" msgstr "帮助(_H)" #: ../src/vikwindow.c:3145 msgid "New file" msgstr "新建文件" #: ../src/vikwindow.c:3146 msgid "_Open..." msgstr "打开(_O)..." #: ../src/vikwindow.c:3146 msgid "Open a file" msgstr "打开一个文件" #: ../src/vikwindow.c:3147 msgid "Open _Recent File" msgstr "" #: ../src/vikwindow.c:3148 msgid "Append _File..." msgstr "_p 增加文件..." #: ../src/vikwindow.c:3148 msgid "Append data from a different file" msgstr "从不同的文件中追加数据" #: ../src/vikwindow.c:3149 msgid "A_cquire" msgstr "_c 获取" #: ../src/vikwindow.c:3150 msgid "Transfer data from a GPS device" msgstr "从一个GPS接收器获得数据" #: ../src/vikwindow.c:3151 msgid "Import File With GPS_Babel..." msgstr "" #: ../src/vikwindow.c:3151 msgid "Import file via GPSBabel converter" msgstr "" #: ../src/vikwindow.c:3153 msgid "Google _Directions..." msgstr "_D 谷歌方位..." #: ../src/vikwindow.c:3153 msgid "Get driving directions from Google" msgstr "从谷歌获得驾驶方位" #: ../src/vikwindow.c:3156 msgid "_OSM Traces..." msgstr "" #: ../src/vikwindow.c:3156 msgid "Get traces from OpenStreetMap" msgstr "" #: ../src/vikwindow.c:3157 msgid "_My OSM Traces..." msgstr "" #: ../src/vikwindow.c:3157 msgid "Get Your Own Traces from OpenStreetMap" msgstr "" #: ../src/vikwindow.c:3160 msgid "Geo_caches..." msgstr "" #: ../src/vikwindow.c:3160 msgid "Get Geocaches from geocaching.com" msgstr "从geocaching.com获得地理缓存数据" #: ../src/vikwindow.c:3163 msgid "Create waypoints from geotagged images" msgstr "" #: ../src/vikwindow.c:3166 msgid "Create waypoints from Wikipedia items in the current view" msgstr "" #: ../src/vikwindow.c:3168 msgid "_Save" msgstr "保存(_S)" #: ../src/vikwindow.c:3168 msgid "Save the file" msgstr "保存这个文件" #: ../src/vikwindow.c:3169 msgid "Save _As..." msgstr "另存为(_A)..." #: ../src/vikwindow.c:3169 msgid "Save the file under different name" msgstr "保存为其它名字的文件" #: ../src/vikwindow.c:3170 msgid "_Generate Image File..." msgstr "_G 生成图形文件..." #: ../src/vikwindow.c:3170 msgid "Save a snapshot of the workspace into a file" msgstr "" #: ../src/vikwindow.c:3171 msgid "Generate _Directory of Images..." msgstr "_D 创建图片的目录..." #: ../src/vikwindow.c:3171 msgid "FIXME:IMGDIR" msgstr "" #: ../src/vikwindow.c:3174 msgid "_Print..." msgstr "_P 打印" #: ../src/vikwindow.c:3174 msgid "Print maps" msgstr "打印地图" #: ../src/vikwindow.c:3177 msgid "E_xit" msgstr "_x 退出" #: ../src/vikwindow.c:3177 msgid "Exit the program" msgstr "退出程序" #: ../src/vikwindow.c:3178 msgid "Save and Exit" msgstr "保存并退出" #: ../src/vikwindow.c:3178 msgid "Save and Exit the program" msgstr "保存并退出程序" #: ../src/vikwindow.c:3180 msgid "Go to the _Default Location" msgstr "" #: ../src/vikwindow.c:3180 msgid "Go to the default location" msgstr "" #: ../src/vikwindow.c:3181 msgid "Go to _Location..." msgstr "" #: ../src/vikwindow.c:3181 msgid "Go to address/place using text search" msgstr "" #: ../src/vikwindow.c:3182 msgid "_Go to Lat/Lon..." msgstr "_G 前往一个经纬度值..." #: ../src/vikwindow.c:3182 msgid "Go to arbitrary lat/lon coordinate" msgstr "前往任意的经纬度座标" #: ../src/vikwindow.c:3183 msgid "Go to UTM..." msgstr "前往UTM..." #: ../src/vikwindow.c:3183 msgid "Go to arbitrary UTM coordinate" msgstr "前往任意的UTM座标" #: ../src/vikwindow.c:3184 msgid "_Refresh" msgstr "" #: ../src/vikwindow.c:3184 msgid "Refresh any maps displayed" msgstr "" #: ../src/vikwindow.c:3185 msgid "Set _Highlight Color..." msgstr "" #: ../src/vikwindow.c:3186 msgid "Set Bac_kground Color..." msgstr "" #: ../src/vikwindow.c:3187 msgid "Zoom _In" msgstr "放大(_I)" #: ../src/vikwindow.c:3188 msgid "Zoom _Out" msgstr "缩小(_O)" #: ../src/vikwindow.c:3189 msgid "Zoom _To..." msgstr "_T 缩放到..." #: ../src/vikwindow.c:3190 msgid "Pan _North" msgstr "" #: ../src/vikwindow.c:3191 msgid "Pan _East" msgstr "" #: ../src/vikwindow.c:3192 msgid "Pan _South" msgstr "" #: ../src/vikwindow.c:3193 msgid "Pan _West" msgstr "" #: ../src/vikwindow.c:3194 msgid "Background _Jobs" msgstr "_J 后台任务" #: ../src/vikwindow.c:3196 msgid "Cu_t" msgstr "_t 剪切" #: ../src/vikwindow.c:3197 msgid "_Copy" msgstr "_C 拷贝" #: ../src/vikwindow.c:3198 msgid "_Paste" msgstr "_P 粘贴" #: ../src/vikwindow.c:3199 msgid "_Delete" msgstr "删除(_D)" #: ../src/vikwindow.c:3200 msgid "Delete All" msgstr "全部删除" #: ../src/vikwindow.c:3201 msgid "_Flush Map Cache" msgstr "" #: ../src/vikwindow.c:3202 msgid "_Set the Default Location" msgstr "" #: ../src/vikwindow.c:3202 msgid "Set the Default Location to the current position" msgstr "" #: ../src/vikwindow.c:3203 msgid "_Preferences" msgstr "_P 首选项" #: ../src/vikwindow.c:3204 msgid "_Properties" msgstr "属性(_P)" #: ../src/vikwindow.c:3207 msgid "_About" msgstr "关于(_A)" #: ../src/vikwindow.c:3213 msgid "_UTM Mode" msgstr "_UTM 模式" #: ../src/vikwindow.c:3214 msgid "_Expedia Mode" msgstr "_Expedia 模式" #: ../src/vikwindow.c:3215 msgid "_Mercator Mode" msgstr "" #: ../src/vikwindow.c:3216 msgid "Lat_/Lon Mode" msgstr "" #: ../src/vikwindow.c:3220 msgid "Show _Scale" msgstr "" #: ../src/vikwindow.c:3220 msgid "Show Scale" msgstr "显示比例尺" #: ../src/vikwindow.c:3221 msgid "Show _Center Mark" msgstr "" #: ../src/vikwindow.c:3221 msgid "Show Center Mark" msgstr "显示中心标记" #: ../src/vikwindow.c:3222 msgid "Show _Highlight" msgstr "" #: ../src/vikwindow.c:3222 msgid "Show Highlight" msgstr "" #: ../src/vikwindow.c:3223 msgid "_Full Screen" msgstr "全屏" #: ../src/vikwindow.c:3223 msgid "Activate full screen mode" msgstr "" #: ../src/vikwindow.c:3224 msgid "Show Side _Panel" msgstr "" #: ../src/vikwindow.c:3224 msgid "Show Side Panel" msgstr "" #: ../src/vikwindow.c:3225 msgid "Show Status_bar" msgstr "" #: ../src/vikwindow.c:3225 msgid "Show Statusbar" msgstr "" #: ../src/vikwindow.c:3226 msgid "Show _Toolbar" msgstr "" #: ../src/vikwindow.c:3226 msgid "Show Toolbar" msgstr "" #: ../src/vikwindow.c:3227 msgid "Show _Menu" msgstr "" #: ../src/vikwindow.c:3227 msgid "Show Menu" msgstr "" #: ../src/viking.desktop.in.h:2 msgid "GPS Data Manager" msgstr "" #: ../src/viking.desktop.in.h:3 msgid "Map Based GPS Data Manager (live data capable)." msgstr "" #: ../src/libjpeg/jpeg-data.c:206 msgid "Data does not follow JPEG specification." msgstr "" #: ../src/libjpeg/jpeg-data.c:291 #, c-format msgid "Path '%s' invalid." msgstr "" #: ../src/libjpeg/jpeg-data.c:309 #, c-format msgid "Could not read '%s'." msgstr "" viking-1.4.2/po/id.po0000644000175000017500000022244612175546146011325 00000000000000# Indonesian translation for viking # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the viking package. # Andika Triwidada , 2009. msgid "" msgstr "" "Project-Id-Version: viking\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-02-04 23:29+0100\n" "PO-Revision-Date: 2011-01-10 15:38+0000\n" "Last-Translator: Arief Setiadi Wibowo \n" "Language-Team: Indonesian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Launchpad-Export-Date: 2013-03-23 17:12+0000\n" "X-Generator: Launchpad (build 16540)\n" "Language: id\n" #: ../src/acquire.c:103 ../src/vikgpslayer.c:1185 msgid "Done." msgstr "Selesai." #: ../src/acquire.c:114 msgid "No data." msgstr "Tidak ada data" #: ../src/acquire.c:154 ../src/acquire.c:404 msgid "Error: acquisition failed." msgstr "Galat: akuisisi gagal." #: ../src/acquire.c:341 msgid "Working..." msgstr "Sedang Bekerja..." #. This shouldn't happen... #: ../src/acquire.c:394 msgid "" "Unable to create command\n" "Acquire method failed." msgstr "" #: ../src/acquire.c:486 msgid "_Filter" msgstr "" #: ../src/acquire.c:501 #, c-format msgid "Filter with %s" msgstr "" #: ../src/acquire.c:518 msgid "Filter" msgstr "" #: ../src/background.c:52 #, c-format msgid "%d items" msgstr "%d objek" #: ../src/background.c:248 msgid "Job" msgstr "Tugas" #: ../src/background.c:252 msgid "Progress" msgstr "Kemajuan" #: ../src/background.c:268 msgid "Viking Background Jobs" msgstr "Viking Background Jobs" #: ../src/bing.c:47 msgid "Bing" msgstr "" #. VIK_GTK_WINDOW_FROM_WIDGET(vp) #: ../src/bingmapsource.c:445 msgid "Bing attribution Loading" msgstr "" #: ../src/clipboard.c:95 msgid "paste failed" msgstr "tempel gagal" #: ../src/clipboard.c:105 msgid "wrong clipboard data size" msgstr "ukuran data papan tempel salah" #: ../src/clipboard.c:124 #, c-format msgid "" "The clipboard contains sublayer data for %s layers. You must select a layer " "of this type to paste the clipboard data." msgstr "" #: ../src/clipboard.c:236 msgid "" "In order to paste a waypoint, please select an appropriate layer to paste " "into." msgstr "" #: ../src/dialog.c:52 msgid "Go to Lat/Lon" msgstr "Ke Lintang/Bujur" #: ../src/dialog.c:64 ../src/dialog.c:251 msgid "Latitude:" msgstr "Lintang:" #: ../src/dialog.c:70 ../src/dialog.c:256 msgid "Longitude:" msgstr "Bujur:" #: ../src/dialog.c:102 msgid "Go to UTM" msgstr "Ke UTM" #: ../src/dialog.c:115 msgid "Northing:" msgstr "" #: ../src/dialog.c:121 msgid "Easting:" msgstr "" #: ../src/dialog.c:128 msgid "Zone:" msgstr "Zona:" #: ../src/dialog.c:131 msgid "Letter:" msgstr "Huruf:" #: ../src/dialog.c:199 msgid "Waypoint Properties" msgstr "Sifat Waypoint" #: ../src/dialog.c:233 msgid "Name:" msgstr "Nama:" #: ../src/dialog.c:261 msgid "Altitude:" msgstr "Ketinggian:" #: ../src/dialog.c:266 msgid "Comment:" msgstr "Komentar:" #: ../src/dialog.c:274 ../src/osm-traces.c:437 msgid "Description:" msgstr "Keterangan:" #: ../src/dialog.c:277 msgid "Image:" msgstr "Citra:" #: ../src/dialog.c:282 msgid "Symbol:" msgstr "Simbol:" #: ../src/dialog.c:291 msgid "(none)" msgstr "(tak ada)" #. TODO: other checks (isalpha or whatever ) #: ../src/dialog.c:356 msgid "Please enter a name for the waypoint." msgstr "Silahkan masukkan nama bagi waypoint." #: ../src/dialog.c:529 ../src/geonamessearch.c:243 #: ../src/datasource_osm_my_traces.c:507 msgid "Nothing was selected" msgstr "Tak ada yang dipilih" #: ../src/dialog.c:537 msgid "Add Route" msgstr "" #: ../src/dialog.c:537 msgid "Add Track" msgstr "Tambah Trek" #: ../src/dialog.c:545 msgid "Route Name:" msgstr "" #: ../src/dialog.c:545 msgid "Track Name:" msgstr "Nama Trek:" #: ../src/dialog.c:565 msgid "Please enter a name for the track." msgstr "Silahkan masukkan nama bagi trek." #: ../src/dialog.c:623 msgid "Zoom Factors..." msgstr "Faktor Pembesaran..." #: ../src/dialog.c:637 msgid "Zoom factor (in meters per pixel):" msgstr "" #: ../src/dialog.c:638 msgid "X (easting): " msgstr "" #: ../src/dialog.c:639 msgid "Y (northing): " msgstr "" #: ../src/dialog.c:644 msgid "X and Y zoom factors must be equal" msgstr "Faktor pembesaran X dan Y mesti sama" #: ../src/dialog.c:699 msgid "1 min" msgstr "1 menit" #: ../src/dialog.c:700 msgid "1 hour" msgstr "1 jam" #: ../src/dialog.c:701 msgid "1 day" msgstr "1 hari" #: ../src/dialog.c:702 msgid "Custom (in minutes):" msgstr "Kustom (dalam menit):" #: ../src/dialog.c:808 msgid "GPS Data and Topo Analyzer, Explorer, and Manager." msgstr "Penganalisis, Penjelajah, dan Pengelola Data dan Topo GPS." #: ../src/dialog.c:809 msgid "" "This program is free software; you can redistribute it and/or modify it " "under the terms of the GNU General Public License as published by the Free " "Software Foundation; either version 2 of the License, or (at your option) " "any later version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT " "ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or " "FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for " "more details.\n" "\n" "You should have received a copy of the GNU General Public License along with " "this program; if not, write to the Free Software Foundation, Inc., 59 Temple " "Place, Suite 330, Boston, MA 02111-1307, USA" msgstr "" #: ../src/dialog.c:837 msgid "Translation is coordinated on http://launchpad.net/viking" msgstr "" #: ../src/dialog.c:845 msgid "Download along track" msgstr "" #: ../src/dialog.c:851 msgid "Map type:" msgstr "Tipe peta:" #: ../src/dialog.c:856 msgid "Zoom level:" msgstr "Tingkat pembesaran:" #: ../src/dialog.c:896 #, c-format msgid "The map data is licensed: %s." msgstr "" #: ../src/dialog.c:899 #, c-format msgid "" "The data provided by '%s' are licensed under the following license: " "%s.\n" "Please, read the license before continuing." msgstr "" #: ../src/dialog.c:904 msgid "Open license" msgstr "" #: ../src/expedia.c:53 msgid "Expedia Street Maps" msgstr "Peta Jalan Expedia" #: ../src/expedia.c:81 msgid "Invalid expedia altitude" msgstr "Ketinggian expedia tak valid" #: ../src/expedia.c:112 #, c-format msgid "" "Couldn't open EXPEDIA image file (right after successful download! Please " "report and delete image file!): %s" msgstr "" "Tak bisa membuka berkas citra EXPEDIA (tepat setelah pengunduhan yang " "sukses! Silahkan laporkan dan hapus berkas citra!): %s" #: ../src/expedia.c:125 #, c-format msgid "" "Couldn't save EXPEDIA image file (right after successful download! Please " "report and delete image file!): %s" msgstr "" "Tak bisa menyimpan berkas citra EXPEDIA (tepat setelah pengunduhan yang " "sukses! Silahkan laporkan dan hapus berkas citra!): %s" #. * #. * See http://www.geonames.org/export/wikipedia-webservice.html#wikipediaBoundingBox #. #. Translators may wish to change this setting as appropriate to get Wikipedia articles in that language #: ../src/geonamessearch.c:46 msgid "en" msgstr "" #: ../src/geonamessearch.c:121 msgid "Search" msgstr "Cari" #: ../src/geonamessearch.c:123 msgid "No entries found!" msgstr "Tak ada entri ditemukan!" #. NB could allow columns to be shifted around by doing this after each new #. gtk_tree_view_column_set_reorderable ( column, TRUE ); #. However I don't think is that useful, so I haven't put it in #: ../src/geonamessearch.c:177 ../src/datasource_osm_my_traces.c:425 msgid "Name" msgstr "" #: ../src/geonamessearch.c:182 msgid "Feature" msgstr "" #: ../src/geonamessearch.c:187 ../src/datasource_osm_my_traces.c:440 msgid "Lat/Lon" msgstr "" #: ../src/geonamessearch.c:269 ../src/googlesearch.c:100 msgid "couldn't map temp file" msgstr "tak bisa memetakan berkas temp" #: ../src/globals.c:44 msgid "Degree format:" msgstr "Format derajat:" #: ../src/globals.c:48 msgid "Distance units:" msgstr "Jarak unit:" #: ../src/globals.c:52 msgid "Speed units:" msgstr "Kecepatan unit:" #: ../src/globals.c:56 msgid "Height units:" msgstr "Tinggi unit:" #: ../src/globals.c:60 msgid "Use large waypoint icons:" msgstr "" #: ../src/globals.c:64 msgid "Default latitude:" msgstr "" #: ../src/globals.c:67 msgid "Default longitude:" msgstr "" #: ../src/globals.c:73 msgid "Alphabetical" msgstr "" #: ../src/globals.c:73 ../src/datasource_osm_my_traces.c:435 msgid "Time" msgstr "" #: ../src/globals.c:76 msgid "KML File Export Units:" msgstr "" #: ../src/globals.c:77 msgid "GPX Track Order:" msgstr "" #: ../src/globals.c:82 msgid "Image Viewer:" msgstr "" #: ../src/globals.c:87 msgid "External GPX Program 1:" msgstr "" #: ../src/globals.c:88 msgid "External GPX Program 2:" msgstr "" #. Defaults for the options are setup here #: ../src/globals.c:96 msgid "General" msgstr "" #. New Tab #: ../src/globals.c:121 msgid "Export/External" msgstr "" #. Webtools #: ../src/google.c:36 msgid "Google" msgstr "Google" #: ../src/datasource_file.c:59 msgid "Import file with GPSBabel" msgstr "" #: ../src/datasource_file.c:60 msgid "Imported file" msgstr "" #. The file selector #: ../src/datasource_file.c:133 msgid "File:" msgstr "" #: ../src/datasource_file.c:134 msgid "File to import" msgstr "" #: ../src/datasource_file.c:141 msgid "All files" msgstr "" #. The file format selector #: ../src/datasource_file.c:148 msgid "File type:" msgstr "" #: ../src/datasource_file.c:193 #, c-format msgid "using babel args '%s' and file '%s'" msgstr "" #: ../src/datasource_gc.c:66 msgid "Download Geocaches" msgstr "" #: ../src/datasource_gc.c:67 msgid "Geocaching.com Caches" msgstr "" #: ../src/datasource_gc.c:84 msgid "geocaching.com username:" msgstr "nama pengguna geocaching.com:" #: ../src/datasource_gc.c:85 msgid "geocaching.com password:" msgstr "kata sandi geocaching.com:" #: ../src/datasource_gc.c:126 #, c-format msgid "" "Can't find %s or %s in path! Check that you have installed it correctly." msgstr "" #: ../src/datasource_gc.c:188 msgid "Number geocaches:" msgstr "" #: ../src/datasource_gc.c:190 msgid "Centered around:" msgstr "Berpusat di sekitar:" #: ../src/datasource_gc.c:226 msgid "Broken input - using some defaults" msgstr "" #: ../src/datasource_geotag.c:51 msgid "Create Waypoints from Geotagged Images" msgstr "" #: ../src/datasource_geotag.c:52 msgid "Geotagged Images" msgstr "" #: ../src/datasource_geotag.c:102 ../src/vikwindow.c:2314 #: ../src/vikwindow.c:2382 ../src/vikwindow.c:2824 msgid "All" msgstr "" #: ../src/datasource_geotag.c:107 ../src/vikwindow.c:2829 msgid "JPG" msgstr "" #: ../src/datasource_geotag.c:165 #, c-format msgid "Unable to create waypoint from %s" msgstr "" #: ../src/datasource_google.c:49 ../src/datasource_google.c:50 msgid "Google Directions" msgstr "" #: ../src/datasource_google.c:77 msgid "From:" msgstr "Dari:" #: ../src/datasource_google.c:79 msgid "To:" msgstr "Ke:" #: ../src/datasource_gps.c:57 msgid "Acquire from GPS" msgstr "Ambil dari GPS" #: ../src/datasource_gps.c:58 msgid "Acquired from GPS" msgstr "Diperoleh dari GPS" #: ../src/datasource_gps.c:221 #, c-format msgid "using cmdline '%s' and file '%s'\n" msgstr "memakai cmdline '%s' dan berkas '%s'\n" #: ../src/datasource_gps.c:297 ../src/vikgpslayer.c:884 #, c-format msgid "Downloading %d waypoint..." msgid_plural "Downloading %d waypoints..." msgstr[0] "Mengunduh %d waypoint..." #: ../src/datasource_gps.c:298 ../src/vikgpslayer.c:885 #, c-format msgid "Downloading %d trackpoint..." msgid_plural "Downloading %d trackpoints..." msgstr[0] "Mengunduh %d trackpoint..." #: ../src/datasource_gps.c:303 ../src/vikgpslayer.c:890 #, c-format msgid "Downloading %d routepoint..." msgid_plural "Downloading %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/datasource_gps.c:325 ../src/datasource_gps.c:326 #: ../src/datasource_gps.c:327 #, c-format msgid "Downloaded %d out of %d %s..." msgstr "Diunduh %d dari %d %s..." #: ../src/datasource_gps.c:331 ../src/datasource_gps.c:332 #: ../src/datasource_gps.c:333 #, c-format msgid "Downloaded %d %s." msgstr "Diunduh %d %s." #: ../src/datasource_gps.c:347 ../src/vikgpslayer.c:968 #, c-format msgid "GPS Device: %s" msgstr "Perangkat GPS: %s" #: ../src/datasource_gps.c:370 ../src/vikgpslayer.c:1042 #: ../src/vikgpslayer.c:1110 msgid "Status: Working..." msgstr "" #: ../src/datasource_gps.c:469 ../src/vikgpslayer.c:150 msgid "GPS Protocol:" msgstr "Protokol GPS:" #. List now assigned at runtime #: ../src/datasource_gps.c:488 ../src/vikgpslayer.c:151 msgid "Serial Port:" msgstr "Port Serial:" #: ../src/datasource_gps.c:509 msgid "" "Turn Off After Transfer\n" "(Garmin/NAViLink Only)" msgstr "" #: ../src/datasource_gps.c:512 msgid "Tracks:" msgstr "" #: ../src/datasource_gps.c:516 msgid "Routes:" msgstr "" #: ../src/datasource_gps.c:520 msgid "Waypoints:" msgstr "" #: ../src/datasource_gps.c:594 ../src/vikgpslayer.c:1305 msgid "GPS device: N/A" msgstr "Perangkat GPS: N/A" #: ../src/datasource_osm.c:52 ../src/datasource_osm.c:53 msgid "OSM traces" msgstr "" #: ../src/datasource_osm.c:80 msgid "Page number:" msgstr "" #: ../src/datasource_osm_my_traces.c:63 ../src/datasource_osm_my_traces.c:64 msgid "OSM My Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:108 msgid "Username:" msgstr "" #: ../src/datasource_osm_my_traces.c:113 msgid "The email or username used to login to OSM" msgstr "" #: ../src/datasource_osm_my_traces.c:115 ../src/osm-traces.c:413 msgid "Password:" msgstr "Kata sandi:" #: ../src/datasource_osm_my_traces.c:120 msgid "The password used to login to OSM" msgstr "" #: ../src/datasource_osm_my_traces.c:430 msgid "Description" msgstr "" #: ../src/datasource_osm_my_traces.c:445 msgid "Privacy" msgstr "" #: ../src/datasource_osm_my_traces.c:452 msgid "Within Current View" msgstr "" #: ../src/datasource_osm_my_traces.c:518 msgid "GPS Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:520 msgid "None found!" msgstr "" #: ../src/datasource_osm_my_traces.c:629 msgid "My OSM Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:645 #, c-format msgid "Unable to get trace: %s" msgstr "" #: ../src/datasource_wikipedia.c:32 msgid "Create Waypoints from Wikipedia Articles" msgstr "" #: ../src/datasource_wikipedia.c:33 msgid "Wikipedia Waypoints" msgstr "" #: ../src/dem.c:65 ../src/dem.c:79 msgid "Invalid DEM" msgstr "" #: ../src/dem.c:121 msgid "Invalid DEM header" msgstr "" #: ../src/dem.c:190 ../src/dem.c:203 msgid "Incorrect DEM Class B record: expected 1" msgstr "" #: ../src/dem.c:360 #, c-format msgid "Couldn't map file %s: %s" msgstr "" #: ../src/download.c:112 msgid "Tile age (s):" msgstr "" #: ../src/download.c:233 #, c-format msgid "Download error: %s" msgstr "Galat pengunduhan: %s" #: ../src/download.c:313 msgid "couldn't open temp file" msgstr "tak bisa membuka berkas temp" #: ../src/file.c:456 ../src/file.c:461 #, c-format msgid "Draw mode '%s' no more supported" msgstr "" #: ../src/geotag_exif.c:433 msgid "Not enough memory." msgstr "" #: ../src/geotag_exif.c:451 msgid "Setting a value for this tag is unsupported!" msgstr "" #: ../src/geotag_exif.c:470 #, c-format msgid "Too few components specified (need %d, found %d)\n" msgstr "" #: ../src/geotag_exif.c:474 msgid "Numeric value expected\n" msgstr "" #: ../src/geotag_exif.c:482 msgid "This shouldn't happen!" msgstr "" #: ../src/geotag_exif.c:552 msgid "Not yet implemented!" msgstr "" #: ../src/geotag_exif.c:565 msgid "Warning; Too many components specified!" msgstr "" #: ../src/osm-traces.c:73 msgid "Identifiable (public w/ timestamps)" msgstr "" #: ../src/osm-traces.c:74 msgid "Trackable (private w/ timestamps)" msgstr "" #: ../src/osm-traces.c:75 msgid "Public" msgstr "Publik" #: ../src/osm-traces.c:76 msgid "Private" msgstr "" #: ../src/osm-traces.c:93 msgid "OSM username:" msgstr "Nama pengguna OSM:" #: ../src/osm-traces.c:94 msgid "OSM password:" msgstr "Kata sandi OSM:" #. Preferences #: ../src/osm-traces.c:151 msgid "OpenStreetMap Traces" msgstr "" #: ../src/osm-traces.c:234 #, c-format msgid "failed to upload data: HTTP response is %ld" msgstr "gagal mengunggah data: jawaban HTTP adalah %ld" #: ../src/osm-traces.c:239 #, c-format msgid "curl_easy_getinfo failed: %d" msgstr "" #: ../src/osm-traces.c:244 #, c-format msgid "curl request failed: %s" msgstr "" #: ../src/osm-traces.c:275 #, c-format msgid "failed to open temporary file: %s" msgstr "" #. Success #: ../src/osm-traces.c:328 msgid "Uploaded to OSM" msgstr "" #: ../src/osm-traces.c:332 msgid "FAILED TO UPLOAD DATA TO OSM - CURL PROBLEM" msgstr "" #: ../src/osm-traces.c:335 msgid "FAILED TO UPLOAD DATA TO OSM" msgstr "" #: ../src/osm-traces.c:335 msgid "HTTP response code" msgstr "" #: ../src/osm-traces.c:348 #, c-format msgid "failed to unlink temporary file: %s" msgstr "" #: ../src/osm-traces.c:387 msgid "OSM upload" msgstr "Unggah OSM" #: ../src/osm-traces.c:405 msgid "Email:" msgstr "Email:" #: ../src/osm-traces.c:410 msgid "" "The email used as login\n" "Enter the email you use to login into www.openstreetmap.org." msgstr "" #: ../src/osm-traces.c:418 msgid "" "The password used to login\n" "Enter the password you use to login into " "www.openstreetmap.org." msgstr "" #: ../src/osm-traces.c:423 msgid "File's name:" msgstr "Nama berkas:" #: ../src/osm-traces.c:433 msgid "" "The name of the file on OSM\n" "This is the name of the file created on the server.This is not the " "name of the local file." msgstr "" #: ../src/osm-traces.c:442 msgid "The description of the trace" msgstr "" #: ../src/osm-traces.c:444 msgid "Tags:" msgstr "Tag:" #: ../src/osm-traces.c:449 msgid "The tags associated to the trace" msgstr "" #: ../src/osm-traces.c:482 #, c-format msgid "Uploading %s to OSM" msgstr "" #: ../src/mapcache.c:61 msgid "Map cache memory size (MB):" msgstr "" #: ../src/print.c:53 msgid "None" msgstr "Tak Satupun" #: ../src/print.c:54 msgid "Horizontally" msgstr "Arah Datar" #: ../src/print.c:55 msgid "Vertically" msgstr "Arah Tegak" #: ../src/print.c:56 msgid "Both" msgstr "Keduanya" #: ../src/print.c:120 msgid "Image Settings" msgstr "Tatanan Citra" #: ../src/print.c:546 msgid "done" msgstr "beres" #. Page Size #: ../src/print.c:575 msgid "_Adjust Page Size and Orientation" msgstr "" #: ../src/print.c:591 msgid "C_enter:" msgstr "Pusa_t:" #. ignore page margins #: ../src/print.c:609 msgid "Ignore Page _Margins" msgstr "" #: ../src/print.c:628 msgid "Image S_ize:" msgstr "U_kuran Citra:" #: ../src/util.c:81 msgid "Could not launch web browser." msgstr "Tak bisa luncurkan peramban web." #: ../src/util.c:92 msgid "Could not create new email." msgstr "Tak bisa buat email baru." #: ../src/vikcoordlayer.c:46 msgid "Color:" msgstr "Warna:" #: ../src/vikcoordlayer.c:47 msgid "Minutes Width:" msgstr "" #: ../src/vikcoordlayer.c:48 msgid "Line Thickness:" msgstr "Tebal Garis:" #: ../src/vikcoordlayer.c:56 msgid "Coordinate" msgstr "" #: ../src/datasource_bfilter.c:46 msgid "Max number of points:" msgstr "" #: ../src/datasource_bfilter.c:60 msgid "Simplify All Tracks..." msgstr "" #: ../src/datasource_bfilter.c:61 msgid "Simplified Tracks" msgstr "Lintasan Yang Disederhanakan" #: ../src/datasource_bfilter.c:96 ../src/datasource_bfilter.c:97 msgid "Remove Duplicate Waypoints" msgstr "" #: ../src/datasource_bfilter.c:129 msgid "Waypoints Inside This" msgstr "" #: ../src/datasource_bfilter.c:130 msgid "Polygonized Layer" msgstr "" #: ../src/datasource_bfilter.c:165 msgid "Waypoints Outside This" msgstr "" #: ../src/datasource_bfilter.c:166 msgid "Polygonzied Layer" msgstr "" #: ../src/main.c:89 #, c-format msgid "Ignoring Xlib error: error code %d request code %d\n" msgstr "" #: ../src/main.c:102 msgid "Enable debug output" msgstr "" #: ../src/main.c:103 msgid "Enable verbose output" msgstr "" #: ../src/main.c:104 msgid "Show version" msgstr "Tampilkan versi" #: ../src/osm.c:106 msgid "On Disk OSM Tile Format" msgstr "" #: ../src/osm.c:121 msgid "OSM (view)" msgstr "OSM (tilik)" #: ../src/osm.c:125 msgid "OSM (edit)" msgstr "OSM (sunting)" #: ../src/osm.c:129 msgid "OSM (render)" msgstr "OSM (render)" #. Example: http://127.0.0.1:8111/load_and_zoom?left=8.19&right=8.20&top=48.605&bottom=48.590&select=node413602999 #. JOSM or merkaartor must already be running with remote interface enabled #: ../src/osm.c:136 msgid "Local port 8111 (eg JOSM)" msgstr "" #: ../src/preferences.c:285 msgid "Preferences" msgstr "" #: ../src/uibuilder.c:147 msgid "Take care that this password will be stored clearly in a plain file." msgstr "" #: ../src/vikaggregatelayer.c:37 msgid "Aggregate" msgstr "" #: ../src/vikdemlayer.c:101 msgid "Absolute height" msgstr "" #: ../src/vikdemlayer.c:102 msgid "Height gradient" msgstr "" #: ../src/vikdemlayer.c:118 msgid "DEM Files:" msgstr "" #: ../src/vikdemlayer.c:119 msgid "Download Source:" msgstr "Sumber Unduh:" #: ../src/vikdemlayer.c:120 msgid "Min Elev Color:" msgstr "" #: ../src/vikdemlayer.c:121 msgid "Type:" msgstr "" #: ../src/vikdemlayer.c:122 msgid "Min Elev:" msgstr "Tinggi Min:" #: ../src/vikdemlayer.c:123 msgid "Max Elev:" msgstr "Tinggi Maks:" #: ../src/vikdemlayer.c:134 msgid "_DEM Download" msgstr "" #: ../src/vikdemlayer.c:134 msgid "DEM Download" msgstr "" #: ../src/vikdemlayer.c:188 msgid "DEM" msgstr "" #: ../src/vikdemlayer.c:284 #, c-format msgid "Number of files: %d" msgstr "" #: ../src/vikdemlayer.c:385 msgid "DEM Loading" msgstr "" #: ../src/vikdemlayer.c:889 #, c-format msgid "No SRTM data available for %f, %f" msgstr "" #: ../src/vikdemlayer.c:1149 #, c-format msgid "Downloading DEM %s" msgstr "" #: ../src/vikfileentry.c:68 msgid "Browse..." msgstr "Ramban..." #: ../src/vikfileentry.c:96 msgid "Choose file" msgstr "Pilih berkas" #: ../src/vikfilelist.c:48 msgid "Choose file(s)" msgstr "Pilih berkas-berkas" #: ../src/vikfilelist.c:172 msgid "Add..." msgstr "Tambah..." #: ../src/vikfilelist.c:173 msgid "Delete" msgstr "Hapus" #: ../src/vikgeoreflayer.c:70 msgid "_Georef Move Map" msgstr "" #: ../src/vikgeoreflayer.c:70 msgid "Georef Move Map" msgstr "" #: ../src/vikgeoreflayer.c:77 msgid "Georef Z_oom Tool" msgstr "" #: ../src/vikgeoreflayer.c:77 msgid "Georef Zoom Tool" msgstr "" #: ../src/vikgeoreflayer.c:87 msgid "GeoRef Map" msgstr "" #: ../src/vikgeoreflayer.c:335 ../src/vikmapslayer.c:685 #, c-format msgid "Couldn't open image file: %s" msgstr "" #: ../src/vikgeoreflayer.c:365 msgid "Unexpected end of file reading World file." msgstr "" #: ../src/vikgeoreflayer.c:381 ../src/vikgeoreflayer.c:426 msgid "Choose World file" msgstr "" #: ../src/vikgeoreflayer.c:394 msgid "The World file you requested could not be opened for reading." msgstr "" #: ../src/vikgeoreflayer.c:439 msgid "The file you requested could not be opened for writing." msgstr "" #: ../src/vikgeoreflayer.c:456 ../src/viklayer.c:480 msgid "Layer Properties" msgstr "" #: ../src/vikgeoreflayer.c:478 msgid "World File Parameters:" msgstr "" #: ../src/vikgeoreflayer.c:479 msgid "Load From File..." msgstr "Muat Dari Berkas..." #: ../src/vikgeoreflayer.c:484 msgid "Corner pixel easting:" msgstr "" #: ../src/vikgeoreflayer.c:486 msgid "the UTM \"easting\" value of the upper-right corner pixel of the map" msgstr "" #: ../src/vikgeoreflayer.c:488 msgid "Corner pixel northing:" msgstr "" #: ../src/vikgeoreflayer.c:490 msgid "the UTM \"northing\" value of the upper-right corner pixel of the map" msgstr "" #: ../src/vikgeoreflayer.c:492 msgid "X (easting) scale (mpp): " msgstr "" #: ../src/vikgeoreflayer.c:493 msgid "Y (northing) scale (mpp): " msgstr "" #: ../src/vikgeoreflayer.c:496 msgid "the scale of the map in the X direction (meters per pixel)" msgstr "" #: ../src/vikgeoreflayer.c:498 msgid "the scale of the map in the Y direction (meters per pixel)" msgstr "" #: ../src/vikgeoreflayer.c:500 msgid "Map Image:" msgstr "Citra Peta:" #. Now with icons #: ../src/vikgeoreflayer.c:608 msgid "_Zoom to Fit Map" msgstr "" #: ../src/vikgeoreflayer.c:614 msgid "_Goto Map Center" msgstr "" #: ../src/vikgeoreflayer.c:620 msgid "_Export to World File" msgstr "" #: ../src/vikgoto.c:75 msgid "No goto tool available." msgstr "" #: ../src/vikgoto.c:88 ../src/vikgoto.c:107 msgid "goto" msgstr "" #: ../src/vikgoto.c:90 msgid "I don't know that place. Do you want another goto?" msgstr "" #: ../src/vikgoto.c:109 msgid "goto provider:" msgstr "" #: ../src/vikgoto.c:124 msgid "Enter address or place name:" msgstr "Masukkan alamat atau nama tempat:" #: ../src/vikgpslayer.c:127 msgid "Data Mode" msgstr "" #: ../src/vikgpslayer.c:129 msgid "Realtime Tracking Mode" msgstr "" #: ../src/vikgpslayer.c:137 msgid "Keep vehicle at center" msgstr "" #: ../src/vikgpslayer.c:138 msgid "Keep vehicle on screen" msgstr "" #: ../src/vikgpslayer.c:139 msgid "Disable" msgstr "" #: ../src/vikgpslayer.c:152 msgid "Download Tracks:" msgstr "" #: ../src/vikgpslayer.c:153 msgid "Upload Tracks:" msgstr "" #: ../src/vikgpslayer.c:154 msgid "Download Routes:" msgstr "" #: ../src/vikgpslayer.c:155 msgid "Upload Routes:" msgstr "" #: ../src/vikgpslayer.c:156 msgid "Download Waypoints:" msgstr "" #: ../src/vikgpslayer.c:157 msgid "Upload Waypoints:" msgstr "" #: ../src/vikgpslayer.c:159 msgid "Recording tracks" msgstr "Mencatat jejak" #: ../src/vikgpslayer.c:160 msgid "Jump to current position on start" msgstr "" #: ../src/vikgpslayer.c:161 msgid "Moving Map Method:" msgstr "" #: ../src/vikgpslayer.c:162 msgid "Gpsd Host:" msgstr "Host Gpsd:" #: ../src/vikgpslayer.c:163 msgid "Gpsd Port:" msgstr "Port Gpsd:" #: ../src/vikgpslayer.c:164 msgid "Gpsd Retry Interval (seconds):" msgstr "Selang Coba Ulang Gpsd (detik):" #: ../src/vikgpslayer.c:179 msgid "GPS" msgstr "" #: ../src/vikgpslayer.c:242 ../src/vikgpslayer.c:1258 msgid "GPS Download" msgstr "Unduhan GPS" #: ../src/vikgpslayer.c:242 ../src/vikgpslayer.c:1258 #: ../src/viktrwlayer.c:3094 msgid "GPS Upload" msgstr "Unggahan GPS" #: ../src/vikgpslayer.c:244 msgid "GPS Realtime Tracking" msgstr "" #: ../src/vikgpslayer.c:451 msgid "Unknown GPS Protocol" msgstr "Protokol GPS Tak Dikenal" #: ../src/vikgpslayer.c:469 msgid "Unknown serial port device" msgstr "Perangkat port serial tak dikenal" #: ../src/vikgpslayer.c:572 #, c-format msgid "%s: unknown parameter" msgstr "%s: parameter tak dikenal" #. Now with icons #: ../src/vikgpslayer.c:693 msgid "_Upload to GPS" msgstr "" #: ../src/vikgpslayer.c:699 msgid "Download from _GPS" msgstr "" #: ../src/vikgpslayer.c:720 msgid "Empty _Realtime" msgstr "" #: ../src/vikgpslayer.c:727 msgid "E_mpty Upload" msgstr "" #: ../src/vikgpslayer.c:733 msgid "_Empty Download" msgstr "" #: ../src/vikgpslayer.c:739 msgid "Empty _All" msgstr "" #. #. NB It's not fatal if this gives 2 for example! Hence removal of the g_assert #. This happens when copied GPS layer is deleted (not sure why the number_handlers would be 2) #. I don't think there's any side effects and certainly better than the program just aborting #. #: ../src/vikgpslayer.c:756 #, c-format msgid "Unexpected number of disconnected handlers: %d" msgstr "" #: ../src/vikgpslayer.c:898 #, c-format msgid "Uploading %d waypoint..." msgid_plural "Uploading %d waypoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:899 #, c-format msgid "Uploading %d trackpoint..." msgid_plural "Uploading %d trackpoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:900 #, c-format msgid "Uploading %d routepoint..." msgid_plural "Uploading %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:925 #, c-format msgid "Downloaded %d out of %d waypoint..." msgid_plural "Downloaded %d out of %d waypoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:926 #, c-format msgid "Downloaded %d out of %d trackpoint..." msgid_plural "Downloaded %d out of %d trackpoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:927 #, c-format msgid "Downloaded %d out of %d routepoint..." msgid_plural "Downloaded %d out of %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:932 #, c-format msgid "Uploaded %d out of %d waypoint..." msgid_plural "Uploaded %d out of %d waypoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:933 #, c-format msgid "Uploaded %d out of %d trackpoint..." msgid_plural "Uploaded %d out of %d trackpoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:934 #, c-format msgid "Uploaded %d out of %d routepoint..." msgid_plural "Uploaded %d out of %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:942 #, c-format msgid "Downloaded %d waypoint" msgid_plural "Downloaded %d waypoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:943 #, c-format msgid "Downloaded %d trackpoint" msgid_plural "Downloaded %d trackpoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:944 #, c-format msgid "Downloaded %d routepoint" msgid_plural "Downloaded %d routepoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:949 #, c-format msgid "Uploaded %d waypoint" msgid_plural "Uploaded %d waypoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:950 #, c-format msgid "Uploaded %d trackpoint" msgid_plural "Uploaded %d trackpoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:951 #, c-format msgid "Uploaded %d routepoint" msgid_plural "Uploaded %d routepoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:1180 msgid "Error: couldn't find gpsbabel." msgstr "" #: ../src/vikgpslayer.c:1269 msgid "Warning - GPS Upload items may overwrite each other" msgstr "" #: ../src/vikgpslayer.c:1301 msgid "Status: detecting gpsbabel" msgstr "Status: mendeteksi gpsbabel" #: ../src/vikgpslayer.c:1332 msgid "No GPS items selected for transfer." msgstr "" #: ../src/vikgpslayer.c:1347 msgid "Could not turn off device." msgstr "" #: ../src/vikgpslayer.c:1385 msgid "Are you sure you want to delete GPS Upload data?" msgstr "" #: ../src/vikgpslayer.c:1398 msgid "Are you sure you want to delete GPS Download data?" msgstr "" #: ../src/vikgpslayer.c:1412 msgid "Are you sure you want to delete GPS Realtime data?" msgstr "" #: ../src/vikgpslayer.c:1425 msgid "Are you sure you want to delete All GPS data?" msgstr "" #: ../src/viklayerspanel.c:55 msgid "/C_ut" msgstr "/_Potong" #: ../src/viklayerspanel.c:56 msgid "/_Copy" msgstr "/_Salin" #: ../src/viklayerspanel.c:57 msgid "/_Paste" msgstr "/_Tempel" #: ../src/viklayerspanel.c:58 msgid "/_Delete" msgstr "/_Hapus" #: ../src/viklayerspanel.c:59 msgid "/New Layer" msgstr "/Lapis Baru" #: ../src/viklayerspanel.c:127 msgid "Top Layer" msgstr "Lapis Puncak" #: ../src/viklayerspanel.c:143 msgid "Add new layer" msgstr "" #: ../src/viklayerspanel.c:150 msgid "Remove selected layer" msgstr "" #: ../src/viklayerspanel.c:157 msgid "Move selected layer up" msgstr "" #: ../src/viklayerspanel.c:164 msgid "Move selected layer down" msgstr "" #: ../src/viklayerspanel.c:171 msgid "Cut selected layer" msgstr "" #: ../src/viklayerspanel.c:178 msgid "Copy selected layer" msgstr "" #: ../src/viklayerspanel.c:185 msgid "Paste layer below selected layer" msgstr "" #. TODO: FIXME: if name has a '/' in it it will get all messed up. why not have an itemfactory field with #. name, icon, shortcut, etc.? #: ../src/viklayerspanel.c:204 ../src/vikwindow.c:3292 #, c-format msgid "New _%s Layer" msgstr "" #: ../src/viklayerspanel.c:511 msgid "Aggregate Layers have no settable properties." msgstr "" #: ../src/viklayerspanel.c:555 msgid "You cannot cut the Top Layer." msgstr "" #: ../src/viklayerspanel.c:600 #, c-format msgid "Are you sure you want to delete %s?" msgstr "" #: ../src/viklayerspanel.c:617 msgid "You cannot delete the Top Layer." msgstr "" #: ../src/viklayerspanel.c:701 msgid "Are you sure you wish to delete all layers?" msgstr "" #. ******* MAPZOOMS ******** #: ../src/vikmapslayer.c:91 msgid "Use Viking Zoom Level" msgstr "" #: ../src/vikmapslayer.c:124 msgid "Map Type:" msgstr "Tipe Peta:" #: ../src/vikmapslayer.c:125 msgid "Maps Directory:" msgstr "" #: ../src/vikmapslayer.c:126 msgid "Alpha:" msgstr "" #: ../src/vikmapslayer.c:127 msgid "Control the Alpha value for transparency effects" msgstr "" #: ../src/vikmapslayer.c:128 msgid "Autodownload maps:" msgstr "" #: ../src/vikmapslayer.c:129 msgid "Autodownload Only Gets Missing Maps:" msgstr "" #: ../src/vikmapslayer.c:130 msgid "" "Using this option avoids attempting to update already acquired tiles. This " "can be useful if you want to restrict the network usage, without having to " "resort to manual control. Only applies when 'Autodownload Maps' is on." msgstr "" #: ../src/vikmapslayer.c:131 msgid "Zoom Level:" msgstr "Tingkat Zum:" #: ../src/vikmapslayer.c:132 msgid "" "Determines the method of displaying map tiles for the current zoom level. " "'Viking Zoom Level' uses the best matching level, otherwise setting a fixed " "value will always use map tiles of the specified value regardless of the " "actual zoom level." msgstr "" #: ../src/vikmapslayer.c:146 msgid "_Maps Download" msgstr "" #: ../src/vikmapslayer.c:146 msgid "Maps Download" msgstr "" #: ../src/vikmapslayer.c:161 msgid "Map" msgstr "Peta" #: ../src/vikmapslayer.c:249 msgid "Default maplayer directory:" msgstr "" #: ../src/vikmapslayer.c:249 msgid "Choose a directory to store cached Map tiles for this layer" msgstr "" #: ../src/vikmapslayer.c:505 msgid "Unknown map type" msgstr "" #: ../src/vikmapslayer.c:516 msgid "Unknown Map Zoom" msgstr "" #: ../src/vikmapslayer.c:589 #, c-format msgid "" "New map cannot be displayed in the current drawmode.\n" "Select \"%s\" from View menu to view it." msgstr "" #: ../src/vikmapslayer.c:753 #, c-format msgid "" "Cowardly refusing to draw tiles or existence of tiles beyond %d zoom out " "factor" msgstr "" #: ../src/vikmapslayer.c:1157 #, c-format msgid "Redownloading up to %d %s map..." msgid_plural "Redownloading up to %d %s maps..." msgstr[0] "" msgstr[1] "" #: ../src/vikmapslayer.c:1159 #, c-format msgid "Redownloading %d %s map..." msgid_plural "Redownloading %d %s maps..." msgstr[0] "" msgstr[1] "" #: ../src/vikmapslayer.c:1163 ../src/vikmapslayer.c:1238 #, c-format msgid "Downloading %d %s map..." msgid_plural "Downloading %d %s maps..." msgstr[0] "" msgstr[1] "" #: ../src/vikmapslayer.c:1311 #, c-format msgid "" "\n" "Source: %s\n" "\n" "Tile File: %s\n" "Tile File Timestamp: %s" msgstr "" #: ../src/vikmapslayer.c:1318 #, c-format msgid "" "Source: %s\n" "\n" "No Tile File!" msgstr "" #: ../src/vikmapslayer.c:1356 msgid "Redownload _Bad Map(s)" msgstr "" #: ../src/vikmapslayer.c:1360 msgid "Redownload _New Map(s)" msgstr "" #: ../src/vikmapslayer.c:1364 msgid "Redownload _All Map(s)" msgstr "" #: ../src/vikmapslayer.c:1368 msgid "_Show Tile Information" msgstr "" #: ../src/vikmapslayer.c:1449 #, c-format msgid "" "Wrong drawmode for this map.\n" "Select \"%s\" from View menu and try again." msgstr "" #: ../src/vikmapslayer.c:1454 msgid "Wrong zoom level for this map." msgstr "" #. Now with icons #: ../src/vikmapslayer.c:1485 msgid "Download _Missing Onscreen Maps" msgstr "" #: ../src/vikmapslayer.c:1492 msgid "Download _New Onscreen Maps" msgstr "" #: ../src/vikmapslayer.c:1499 msgid "Reload _All Onscreen Maps" msgstr "" #: ../src/viktreeview.c:263 msgid "Layer Name" msgstr "Nama Lapisan" #: ../src/viktreeview.c:742 #, c-format msgid "delete data from %s\n" msgstr "" #: ../src/viktrwlayer.c:377 msgid "Create _Waypoint" msgstr "" #: ../src/viktrwlayer.c:377 msgid "Create Waypoint" msgstr "" #: ../src/viktrwlayer.c:383 msgid "Create _Track" msgstr "" #: ../src/viktrwlayer.c:383 msgid "Create Track" msgstr "" #: ../src/viktrwlayer.c:392 msgid "Create _Route" msgstr "" #: ../src/viktrwlayer.c:392 msgid "Create Route" msgstr "" #: ../src/viktrwlayer.c:401 msgid "_Edit Waypoint" msgstr "" #: ../src/viktrwlayer.c:401 msgid "Edit Waypoint" msgstr "" #: ../src/viktrwlayer.c:409 msgid "Edit Trac_kpoint" msgstr "" #: ../src/viktrwlayer.c:409 msgid "Edit Trackpoint" msgstr "" #: ../src/viktrwlayer.c:417 msgid "Show P_icture" msgstr "" #: ../src/viktrwlayer.c:417 msgid "Show Picture" msgstr "" #: ../src/viktrwlayer.c:424 msgid "Route _Finder" msgstr "" #: ../src/viktrwlayer.c:424 msgid "Route Finder" msgstr "" #. ***** PARAMETERS ***** #: ../src/viktrwlayer.c:447 ../src/viktrwlayer.c:1942 #: ../src/viktrwlayer.c:1944 msgid "Waypoints" msgstr "" #: ../src/viktrwlayer.c:447 ../src/viktrwlayer.c:1933 #: ../src/viktrwlayer.c:1935 msgid "Tracks" msgstr "" #: ../src/viktrwlayer.c:447 msgid "Waypoint Images" msgstr "" #: ../src/viktrwlayer.c:450 msgid "Draw by Track" msgstr "" #: ../src/viktrwlayer.c:450 msgid "Draw by Speed" msgstr "" #: ../src/viktrwlayer.c:450 msgid "All Tracks Same Color" msgstr "" #: ../src/viktrwlayer.c:451 msgid "Filled Square" msgstr "" #: ../src/viktrwlayer.c:451 msgid "Square" msgstr "Kotak" #: ../src/viktrwlayer.c:451 msgid "Circle" msgstr "Bulat" #: ../src/viktrwlayer.c:451 msgid "X" msgstr "X" #: ../src/viktrwlayer.c:477 msgid "Extra Extra Small" msgstr "" #: ../src/viktrwlayer.c:478 msgid "Extra Small" msgstr "" #: ../src/viktrwlayer.c:479 msgid "Small" msgstr "" #: ../src/viktrwlayer.c:480 msgid "Medium" msgstr "" #: ../src/viktrwlayer.c:481 msgid "Large" msgstr "" #: ../src/viktrwlayer.c:482 msgid "Extra Large" msgstr "" #: ../src/viktrwlayer.c:483 msgid "Extra Extra Large" msgstr "" #: ../src/viktrwlayer.c:491 msgid "Track Drawing Mode:" msgstr "" #: ../src/viktrwlayer.c:492 msgid "All Tracks Color:" msgstr "" #: ../src/viktrwlayer.c:493 msgid "The color used when 'All Tracks Same Color' drawing mode is selected" msgstr "" #: ../src/viktrwlayer.c:494 msgid "Draw Track Lines" msgstr "" #: ../src/viktrwlayer.c:495 msgid "Track Thickness:" msgstr "" #: ../src/viktrwlayer.c:496 msgid "Draw Track Direction" msgstr "" #: ../src/viktrwlayer.c:497 msgid "Direction Size:" msgstr "" #: ../src/viktrwlayer.c:498 msgid "Draw Trackpoints" msgstr "" #: ../src/viktrwlayer.c:499 msgid "Trackpoint Size:" msgstr "" #: ../src/viktrwlayer.c:500 msgid "Draw Elevation" msgstr "" #: ../src/viktrwlayer.c:501 msgid "Draw Elevation Height %:" msgstr "" #: ../src/viktrwlayer.c:503 msgid "Draw Stops" msgstr "" #: ../src/viktrwlayer.c:504 msgid "" "Whether to draw a marker when trackpoints are at the same position but over " "the minimum stop length apart in time" msgstr "" #: ../src/viktrwlayer.c:505 msgid "Min Stop Length (seconds):" msgstr "" #: ../src/viktrwlayer.c:507 msgid "Track BG Thickness:" msgstr "" #: ../src/viktrwlayer.c:508 msgid "Track Background Color" msgstr "" #: ../src/viktrwlayer.c:509 msgid "Draw by Speed Factor (%):" msgstr "" #: ../src/viktrwlayer.c:510 msgid "" "The percentage factor away from the average speed determining the color used" msgstr "" #: ../src/viktrwlayer.c:512 msgid "Draw Labels" msgstr "" #: ../src/viktrwlayer.c:513 msgid "Waypoint Font Size:" msgstr "" #: ../src/viktrwlayer.c:514 msgid "Waypoint Color:" msgstr "" #: ../src/viktrwlayer.c:515 msgid "Waypoint Text:" msgstr "" #: ../src/viktrwlayer.c:516 msgid "Background:" msgstr "" #: ../src/viktrwlayer.c:517 msgid "Fake BG Color Translucency:" msgstr "" #: ../src/viktrwlayer.c:518 msgid "Waypoint marker:" msgstr "" #: ../src/viktrwlayer.c:519 msgid "Waypoint size:" msgstr "" #: ../src/viktrwlayer.c:520 msgid "Draw Waypoint Symbols:" msgstr "" #: ../src/viktrwlayer.c:522 msgid "Draw Waypoint Images" msgstr "" #: ../src/viktrwlayer.c:523 msgid "Image Size (pixels):" msgstr "" #: ../src/viktrwlayer.c:524 msgid "Image Alpha:" msgstr "" #: ../src/viktrwlayer.c:525 msgid "Image Memory Cache Size:" msgstr "" #: ../src/viktrwlayer.c:610 msgid "TrackWaypoint" msgstr "" #: ../src/viktrwlayer.c:1951 ../src/viktrwlayer.c:1953 msgid "Routes" msgstr "" #: ../src/viktrwlayer.c:2144 #, c-format msgid " in %d:%02d hrs:mins" msgstr "" #: ../src/viktrwlayer.c:2148 #, c-format msgid "" "\n" "%sTotal Length %.1f %s%s" msgstr "" #: ../src/viktrwlayer.c:2154 #, c-format msgid "Tracks: %d - Waypoints: %d - Routes: %d%s" msgstr "" #: ../src/viktrwlayer.c:2174 #, c-format msgid "Tracks: %d" msgstr "" #: ../src/viktrwlayer.c:2184 #, c-format msgid "Routes: %d" msgstr "" #: ../src/viktrwlayer.c:2215 #, c-format msgid "- %d:%02d hrs:mins" msgstr "" #: ../src/viktrwlayer.c:2223 #, c-format msgid "%s%.1f km %s" msgstr "" #: ../src/viktrwlayer.c:2226 #, c-format msgid "%s%.1f miles %s" msgstr "" #: ../src/viktrwlayer.c:2240 #, c-format msgid "Waypoints: %d" msgstr "" #: ../src/viktrwlayer.c:2266 #, c-format msgid "Trkpt: Alt %dft" msgstr "" #. VIK_UNITS_HEIGHT_METRES: #: ../src/viktrwlayer.c:2270 #, c-format msgid "Trkpt: Alt %dm" msgstr "" #. Compact date time format #: ../src/viktrwlayer.c:2277 #, c-format msgid " | Time %x %X" msgstr "" #: ../src/viktrwlayer.c:2295 #, c-format msgid " | Track: %s" msgstr "" #. Combine parts to make overall message #: ../src/viktrwlayer.c:2299 #, c-format msgid "%s%s | %s %s %s" msgstr "" #: ../src/viktrwlayer.c:2314 #, c-format msgid "Wpt: Alt %dft" msgstr "" #. VIK_UNITS_HEIGHT_METRES: #: ../src/viktrwlayer.c:2318 #, c-format msgid "Wpt: Alt %dm" msgstr "" #. Add comment if available #: ../src/viktrwlayer.c:2333 #, c-format msgid "%s | %s %s | Comment: %s" msgstr "" #: ../src/viktrwlayer.c:2335 #, c-format msgid "%s | %s %s" msgstr "" #: ../src/viktrwlayer.c:2563 ../src/viktrwlayer.c:2634 msgid "This layer has no waypoints or trackpoints." msgstr "" #: ../src/viktrwlayer.c:2661 ../src/vikwindow.c:2407 ../src/vikwindow.c:2848 #, c-format msgid "The file \"%s\" exists, do you wish to overwrite it?" msgstr "" #: ../src/viktrwlayer.c:2671 ../src/vikwindow.c:2429 msgid "The filename you requested could not be opened for writing." msgstr "" #: ../src/viktrwlayer.c:2676 ../src/viktrwlayer.c:2681 #: ../src/viktrwlayer.c:2691 ../src/viktrwlayer.c:2703 msgid "Export Layer" msgstr "" #: ../src/viktrwlayer.c:2720 msgid "Could not create temporary file for export." msgstr "" #: ../src/viktrwlayer.c:2729 #, c-format msgid "Could not launch %s." msgstr "" #: ../src/viktrwlayer.c:2773 msgid "Export Track as GPX" msgstr "" #: ../src/viktrwlayer.c:2795 msgid "Find" msgstr "" #: ../src/viktrwlayer.c:2805 msgid "Waypoint Name:" msgstr "" #: ../src/viktrwlayer.c:2822 msgid "Waypoint not found in this layer." msgstr "" #: ../src/viktrwlayer.c:3090 msgid "Can not upload invisible track." msgstr "" #: ../src/viktrwlayer.c:3192 ../src/viktrwlayer.c:7785 msgid "Track" msgstr "" #: ../src/viktrwlayer.c:3215 ../src/viktrwlayer.c:7817 msgid "Route" msgstr "" #: ../src/viktrwlayer.c:3296 ../src/viktrwlayer.c:6265 #: ../src/viktrwlayer.c:6314 msgid "_Finish Route" msgstr "" #: ../src/viktrwlayer.c:3298 ../src/viktrwlayer.c:6223 #: ../src/viktrwlayer.c:6312 msgid "_Finish Track" msgstr "" #. Now with icons #: ../src/viktrwlayer.c:3310 msgid "_View Layer" msgstr "" #: ../src/viktrwlayer.c:3317 msgid "V_iew" msgstr "" #: ../src/viktrwlayer.c:3323 msgid "View All _Tracks" msgstr "" #: ../src/viktrwlayer.c:3328 msgid "View All _Routes" msgstr "" #: ../src/viktrwlayer.c:3333 msgid "View All _Waypoints" msgstr "" #: ../src/viktrwlayer.c:3338 msgid "_Goto Center of Layer" msgstr "" #: ../src/viktrwlayer.c:3344 ../src/viktrwlayer.c:6199 msgid "Goto _Waypoint..." msgstr "" #: ../src/viktrwlayer.c:3350 msgid "_Export Layer" msgstr "" #: ../src/viktrwlayer.c:3356 msgid "Export as GPS_Point..." msgstr "" #: ../src/viktrwlayer.c:3361 msgid "Export as GPS_Mapper..." msgstr "" #: ../src/viktrwlayer.c:3366 msgid "Export as _GPX..." msgstr "" #: ../src/viktrwlayer.c:3371 msgid "Export as _KML..." msgstr "" #: ../src/viktrwlayer.c:3376 msgid "Open with External Program_1: " msgstr "" #: ../src/viktrwlayer.c:3383 msgid "Open with External Program_2: " msgstr "" #: ../src/viktrwlayer.c:3391 ../src/vikwindow.c:3145 msgid "_New" msgstr "Baru" #: ../src/viktrwlayer.c:3397 msgid "New _Waypoint..." msgstr "" #: ../src/viktrwlayer.c:3403 msgid "New _Track" msgstr "" #: ../src/viktrwlayer.c:3411 msgid "New _Route" msgstr "" #: ../src/viktrwlayer.c:3420 ../src/viktrwlayer.c:6597 msgid "Geotag _Images..." msgstr "" #: ../src/viktrwlayer.c:3427 msgid "_Acquire" msgstr "" #: ../src/viktrwlayer.c:3433 ../src/vikwindow.c:3150 msgid "From _GPS..." msgstr "Dari _GPS..." #: ../src/viktrwlayer.c:3439 msgid "From Google _Directions..." msgstr "" #: ../src/viktrwlayer.c:3446 msgid "From _OSM Traces..." msgstr "" #: ../src/viktrwlayer.c:3451 msgid "From _My OSM Traces..." msgstr "" #: ../src/viktrwlayer.c:3459 ../src/vikwindow.c:3166 msgid "From _Wikipedia Waypoints" msgstr "" #: ../src/viktrwlayer.c:3465 msgid "Within _Layer Bounds" msgstr "" #: ../src/viktrwlayer.c:3471 msgid "Within _Current View" msgstr "" #: ../src/viktrwlayer.c:3479 msgid "From Geo_caching..." msgstr "" #: ../src/viktrwlayer.c:3486 ../src/vikwindow.c:3163 msgid "From Geotagged _Images..." msgstr "" #: ../src/viktrwlayer.c:3492 msgid "From _File..." msgstr "" #: ../src/viktrwlayer.c:3498 ../src/viktrwlayer.c:6542 msgid "_Upload" msgstr "" #: ../src/viktrwlayer.c:3504 msgid "Upload to _GPS..." msgstr "" #: ../src/viktrwlayer.c:3511 ../src/viktrwlayer.c:6570 msgid "Upload to _OSM..." msgstr "" #: ../src/viktrwlayer.c:3519 msgid "De_lete" msgstr "" #: ../src/viktrwlayer.c:3525 msgid "Delete All _Tracks" msgstr "" #: ../src/viktrwlayer.c:3531 msgid "Delete Tracks _From Selection..." msgstr "" #: ../src/viktrwlayer.c:3537 ../src/viktrwlayer.c:6290 msgid "Delete _All Routes" msgstr "" #: ../src/viktrwlayer.c:3543 ../src/viktrwlayer.c:6296 msgid "_Delete Routes From Selection..." msgstr "" #: ../src/viktrwlayer.c:3549 msgid "Delete All _Waypoints" msgstr "" #: ../src/viktrwlayer.c:3555 msgid "Delete Waypoints From _Selection..." msgstr "" #: ../src/viktrwlayer.c:4128 #, c-format msgid "Are you sure you want to delete all tracks in %s?" msgstr "" #: ../src/viktrwlayer.c:4138 #, c-format msgid "Are you sure you want to delete all routes in %s?" msgstr "" #: ../src/viktrwlayer.c:4148 #, c-format msgid "Are you sure you want to delete all waypoints in %s?" msgstr "" #: ../src/viktrwlayer.c:4165 #, c-format msgid "Are you sure you want to delete the waypoint \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4178 #, c-format msgid "Are you sure you want to delete the track \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4191 #, c-format msgid "Are you sure you want to delete the route \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4351 ../src/viktrwlayer.c:4922 msgid "" "Converting a track to a route removes extra track data such as segments, " "timestamps, etc...\n" "Do you want to continue?" msgstr "" #: ../src/viktrwlayer.c:4711 msgid "Failed. No other tracks with timestamps in this layer found" msgstr "" #: ../src/viktrwlayer.c:4713 msgid "Failed. No other tracks without timestamps in this layer found" msgstr "" #: ../src/viktrwlayer.c:4732 msgid "Merge with..." msgstr "" #: ../src/viktrwlayer.c:4733 msgid "Select route to merge with" msgstr "" #: ../src/viktrwlayer.c:4733 msgid "Select track to merge with" msgstr "" #: ../src/viktrwlayer.c:4818 ../src/viktrwlayer.c:4895 msgid "Append Route" msgstr "" #: ../src/viktrwlayer.c:4818 ../src/viktrwlayer.c:4895 msgid "Append Track" msgstr "" #: ../src/viktrwlayer.c:4819 msgid "Select the route to append after the current route" msgstr "" #: ../src/viktrwlayer.c:4820 msgid "Select the track to append after the current track" msgstr "" #: ../src/viktrwlayer.c:4896 msgid "Select the track to append after the current route" msgstr "" #: ../src/viktrwlayer.c:4897 msgid "Select the route to append after the current track" msgstr "" #: ../src/viktrwlayer.c:4957 #, c-format msgid "%d segment merged" msgid_plural "%d segments merged" msgstr[0] "" msgstr[1] "" #: ../src/viktrwlayer.c:4973 msgid "Failed. This track does not have timestamp" msgstr "" #: ../src/viktrwlayer.c:4985 msgid "Failed. No other track in this layer has timestamp" msgstr "" #: ../src/viktrwlayer.c:4992 msgid "Merge Threshold..." msgstr "" #: ../src/viktrwlayer.c:4993 msgid "Merge when time between tracks less than:" msgstr "" #: ../src/viktrwlayer.c:5128 msgid "Split Threshold..." msgstr "" #: ../src/viktrwlayer.c:5129 msgid "Split when time between trackpoints exceeds:" msgstr "" #: ../src/viktrwlayer.c:5205 msgid "Split Every Nth Point" msgstr "" #: ../src/viktrwlayer.c:5206 msgid "Split on every Nth point:" msgstr "" #: ../src/viktrwlayer.c:5312 msgid "Can not split track as it has no segments" msgstr "" #: ../src/viktrwlayer.c:5340 ../src/viktrwlayer.c:5370 #, c-format msgid "Deleted %ld point" msgid_plural "Deleted %ld points" msgstr[0] "" msgstr[1] "" #: ../src/viktrwlayer.c:5531 msgid "Internal Error in vik_trw_layer_uniquify_tracks" msgstr "" #: ../src/viktrwlayer.c:5588 ../src/viktrwlayer.c:5635 #: ../src/viktrwlayer.c:5814 msgid "" "Multiple entries with the same name exist. This method only works with " "unique names. Force unique names now?" msgstr "" #: ../src/viktrwlayer.c:5599 msgid "No tracks found" msgstr "" #: ../src/viktrwlayer.c:5607 ../src/viktrwlayer.c:5654 #: ../src/viktrwlayer.c:5834 msgid "Delete Selection" msgstr "" #: ../src/viktrwlayer.c:5608 msgid "Select tracks to delete" msgstr "" #: ../src/viktrwlayer.c:5646 msgid "No routes found" msgstr "" #: ../src/viktrwlayer.c:5655 msgid "Select routes to delete" msgstr "" #: ../src/viktrwlayer.c:5761 msgid "Internal Error in vik_trw_layer_uniquify_waypoints" msgstr "" #: ../src/viktrwlayer.c:5824 msgid "No waypoints found" msgstr "" #: ../src/viktrwlayer.c:5835 msgid "Select waypoints to delete" msgstr "" #: ../src/viktrwlayer.c:5896 #, c-format msgid "" "A waypoint with the name \"%s\" already exists. Really rename to the same " "name?" msgstr "" #: ../src/viktrwlayer.c:5926 #, c-format msgid "" "A track with the name \"%s\" already exists. Really rename to the same name?" msgstr "" #: ../src/viktrwlayer.c:5963 #, c-format msgid "" "A route with the name \"%s\" already exists. Really rename to the same name?" msgstr "" #: ../src/viktrwlayer.c:6085 ../src/viktrwlayer.c:6337 msgid "_Goto" msgstr "" #: ../src/viktrwlayer.c:6104 msgid "_Visit Geocache Webpage" msgstr "" #: ../src/viktrwlayer.c:6123 msgid "_Show Picture..." msgstr "" #: ../src/viktrwlayer.c:6131 msgid "Update Geotag on _Image" msgstr "" #: ../src/viktrwlayer.c:6137 msgid "_Update" msgstr "" #: ../src/viktrwlayer.c:6142 msgid "Update and _Keep File Timestamp" msgstr "" #: ../src/viktrwlayer.c:6153 msgid "Visit _Webpage" msgstr "" #: ../src/viktrwlayer.c:6184 msgid "_New Waypoint..." msgstr "" #: ../src/viktrwlayer.c:6193 msgid "_View All Waypoints" msgstr "" #: ../src/viktrwlayer.c:6205 msgid "Delete _All Waypoints" msgstr "" #: ../src/viktrwlayer.c:6211 msgid "_Delete Waypoints From Selection..." msgstr "" #: ../src/viktrwlayer.c:6233 msgid "_View All Tracks" msgstr "" #: ../src/viktrwlayer.c:6239 msgid "_New Track" msgstr "" #: ../src/viktrwlayer.c:6247 msgid "Delete _All Tracks" msgstr "" #: ../src/viktrwlayer.c:6253 msgid "_Delete Tracks From Selection..." msgstr "" #: ../src/viktrwlayer.c:6276 msgid "_View All Routes" msgstr "" #: ../src/viktrwlayer.c:6282 msgid "_New Route" msgstr "" #: ../src/viktrwlayer.c:6327 msgid "_View Track" msgstr "" #: ../src/viktrwlayer.c:6329 msgid "_View Route" msgstr "" #: ../src/viktrwlayer.c:6343 msgid "_Startpoint" msgstr "" #: ../src/viktrwlayer.c:6349 msgid "\"_Center\"" msgstr "" #: ../src/viktrwlayer.c:6355 msgid "_Endpoint" msgstr "" #: ../src/viktrwlayer.c:6361 msgid "_Highest Altitude" msgstr "" #: ../src/viktrwlayer.c:6367 msgid "_Lowest Altitude" msgstr "" #: ../src/viktrwlayer.c:6375 msgid "_Maximum Speed" msgstr "" #: ../src/viktrwlayer.c:6384 msgid "Co_mbine" msgstr "" #: ../src/viktrwlayer.c:6392 msgid "_Merge By Time..." msgstr "" #: ../src/viktrwlayer.c:6397 msgid "Merge _Segments" msgstr "" #: ../src/viktrwlayer.c:6403 msgid "Merge _With Other Tracks..." msgstr "" #: ../src/viktrwlayer.c:6409 msgid "_Append Track..." msgstr "" #: ../src/viktrwlayer.c:6411 msgid "_Append Route..." msgstr "" #: ../src/viktrwlayer.c:6417 msgid "Append _Route..." msgstr "" #: ../src/viktrwlayer.c:6419 msgid "Append _Track..." msgstr "" #: ../src/viktrwlayer.c:6426 msgid "_Split" msgstr "" #: ../src/viktrwlayer.c:6434 msgid "_Split By Time..." msgstr "" #. ATM always enable this entry - don't want to have to analyse the track before displaying the menu - to keep the menu speedy #: ../src/viktrwlayer.c:6440 msgid "Split Se_gments" msgstr "" #: ../src/viktrwlayer.c:6446 msgid "Split By _Number of Points..." msgstr "" #: ../src/viktrwlayer.c:6451 msgid "Split at _Trackpoint" msgstr "" #: ../src/viktrwlayer.c:6460 msgid "Delete Poi_nts" msgstr "" #: ../src/viktrwlayer.c:6466 msgid "Delete Points With The Same _Position" msgstr "" #: ../src/viktrwlayer.c:6471 msgid "Delete Points With The Same _Time" msgstr "" #: ../src/viktrwlayer.c:6477 msgid "_Reverse Track" msgstr "" #: ../src/viktrwlayer.c:6479 msgid "_Reverse Route" msgstr "" #: ../src/viktrwlayer.c:6488 msgid "Down_load Maps Along Track..." msgstr "" #: ../src/viktrwlayer.c:6490 msgid "Down_load Maps Along Route..." msgstr "" #: ../src/viktrwlayer.c:6497 msgid "_Apply DEM Data" msgstr "" #: ../src/viktrwlayer.c:6504 msgid "_Export Track as GPX..." msgstr "" #: ../src/viktrwlayer.c:6506 msgid "_Export Route as GPX..." msgstr "" #: ../src/viktrwlayer.c:6513 msgid "E_xtend Track End" msgstr "" #: ../src/viktrwlayer.c:6515 msgid "E_xtend Route End" msgstr "" #: ../src/viktrwlayer.c:6522 msgid "C_onvert to a Route" msgstr "" #: ../src/viktrwlayer.c:6524 msgid "C_onvert to a Track" msgstr "" #: ../src/viktrwlayer.c:6532 msgid "Extend _Using Route Finder" msgstr "" #: ../src/viktrwlayer.c:6548 msgid "_Upload to GPS..." msgstr "" #: ../src/viktrwlayer.c:6559 msgid "_View Google Directions" msgstr "" #: ../src/viktrwlayer.c:6579 msgid "Use with _Filter" msgstr "" #: ../src/viktrwlayer.c:6612 msgid "_Edit Trackpoint" msgstr "" #: ../src/viktrwlayer.c:7524 #, c-format msgid " - Gain %dm:Loss %dm" msgstr "" #: ../src/viktrwlayer.c:7526 #, c-format msgid " - Gain %dft:Loss %dft" msgstr "" #: ../src/viktrwlayer.c:7531 #, c-format msgid " - Bearing %3.1f° - Step %s" msgstr "" #: ../src/viktrwlayer.c:8124 #, c-format msgid "Could not launch %s to open file." msgstr "" #: ../src/viktrwlayer.c:8205 #, c-format msgid "Creating %d Image Thumbnails..." msgstr "" #: ../src/viktrwlayer.c:8524 msgid "No map layer in use. Create one first" msgstr "" #: ../src/viktrwlayer_propwin.c:898 ../src/viktrwlayer_propwin.c:1155 #, c-format msgid "%.1f kph" msgstr "" #: ../src/viktrwlayer_propwin.c:901 ../src/viktrwlayer_propwin.c:1158 #, c-format msgid "%.1f mph" msgstr "" #: ../src/viktrwlayer_propwin.c:904 ../src/viktrwlayer_propwin.c:1161 #, c-format msgid "%.1f knots" msgstr "" #. VIK_UNITS_SPEED_METRES_PER_SECOND: #: ../src/viktrwlayer_propwin.c:908 ../src/viktrwlayer_propwin.c:1165 #, c-format msgid "%.1f m/s" msgstr "" #: ../src/viktrwlayer_propwin.c:1745 #, c-format msgid "%.1f miles" msgstr "" #: ../src/viktrwlayer_propwin.c:1747 #, c-format msgid "%.1f km" msgstr "" #: ../src/viktrwlayer_propwin.c:2681 msgid "Failed spliting track. Track unchanged" msgstr "" #: ../src/viktrwlayer_propwin.c:2779 ../src/viktrwlayer_propwin.c:3178 #, c-format msgid "%s - Track Properties" msgstr "" #: ../src/viktrwlayer_propwin.c:2784 msgid "Split at _Marker" msgstr "" #: ../src/viktrwlayer_propwin.c:2785 msgid "Split _Segments" msgstr "" #: ../src/viktrwlayer_propwin.c:2786 msgid "_Reverse" msgstr "" #: ../src/viktrwlayer_propwin.c:2787 msgid "_Delete Dupl." msgstr "" #: ../src/viktrwlayer_propwin.c:2813 msgid "Comment:" msgstr "Komentar:" #: ../src/viktrwlayer_propwin.c:2814 msgid "Description:" msgstr "" #: ../src/viktrwlayer_propwin.c:2815 msgid "Track Length:" msgstr "Panjang Lintasan:" #: ../src/viktrwlayer_propwin.c:2816 msgid "Trackpoints:" msgstr "" #: ../src/viktrwlayer_propwin.c:2817 msgid "Segments:" msgstr "" #: ../src/viktrwlayer_propwin.c:2818 msgid "Duplicate Points:" msgstr "" #: ../src/viktrwlayer_propwin.c:2819 msgid "Max Speed:" msgstr "Laju Maks:" #: ../src/viktrwlayer_propwin.c:2820 msgid "Avg. Speed:" msgstr "Laju Rerata:" #: ../src/viktrwlayer_propwin.c:2821 msgid "Moving Avg. Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:2822 msgid "Avg. Dist. Between TPs:" msgstr "" #: ../src/viktrwlayer_propwin.c:2823 msgid "Elevation Range:" msgstr "" #: ../src/viktrwlayer_propwin.c:2824 msgid "Total Elevation Gain/Loss:" msgstr "" #: ../src/viktrwlayer_propwin.c:2825 msgid "Start:" msgstr "Awal:" #: ../src/viktrwlayer_propwin.c:2826 msgid "End:" msgstr "Akhir:" #: ../src/viktrwlayer_propwin.c:2827 msgid "Duration:" msgstr "Durasi:" #: ../src/viktrwlayer_propwin.c:2828 msgid "Color:" msgstr "" #: ../src/viktrwlayer_propwin.c:2877 ../src/viktrwlayer_propwin.c:2901 #: ../src/viktrwlayer_propwin.c:2929 ../src/viktrwlayer_propwin.c:2966 #: ../src/viktrwlayer_propwin.c:2984 ../src/viktrwlayer_propwin.c:3034 #: ../src/viktrwlayer_propwin.c:3035 ../src/viktrwlayer_propwin.c:3036 #: ../src/viktrwlayer_propwin.c:3062 ../src/viktrwlayer_propwin.c:3063 #: ../src/viktrwlayer_propwin.c:3078 ../src/viktrwlayer_propwin.c:3079 #: ../src/viktrwlayer_propwin.c:3092 ../src/viktrwlayer_propwin.c:3093 #: ../src/viktrwlayer_propwin.c:3106 ../src/viktrwlayer_propwin.c:3107 #: ../src/viktrwlayer_propwin.c:3120 ../src/viktrwlayer_propwin.c:3121 #: ../src/viktrwlayer_propwin.c:3134 ../src/viktrwlayer_propwin.c:3135 #, c-format msgid "No Data" msgstr "Tiada Data" #: ../src/viktrwlayer_propwin.c:3031 #, c-format msgid "%d minutes" msgstr "%d menit" #: ../src/viktrwlayer_propwin.c:3058 msgid "Statistics" msgstr "Statistik" #: ../src/viktrwlayer_propwin.c:3064 msgid "Show D_EM" msgstr "" #: ../src/viktrwlayer_propwin.c:3065 ../src/viktrwlayer_propwin.c:3080 #: ../src/viktrwlayer_propwin.c:3094 ../src/viktrwlayer_propwin.c:3136 msgid "Show _GPS Speed" msgstr "" #: ../src/viktrwlayer_propwin.c:3067 ../src/viktrwlayer_propwin.c:3082 #: ../src/viktrwlayer_propwin.c:3110 ../src/viktrwlayer_propwin.c:3138 msgid "Track Distance:" msgstr "Jarak Lintasan:" #: ../src/viktrwlayer_propwin.c:3068 ../src/viktrwlayer_propwin.c:3125 msgid "Track Height:" msgstr "" #: ../src/viktrwlayer_propwin.c:3073 msgid "Elevation-distance" msgstr "" #: ../src/viktrwlayer_propwin.c:3083 msgid "Track Gradient:" msgstr "" #: ../src/viktrwlayer_propwin.c:3087 msgid "Gradient-distance" msgstr "" #: ../src/viktrwlayer_propwin.c:3096 ../src/viktrwlayer_propwin.c:3111 #: ../src/viktrwlayer_propwin.c:3124 msgid "Track Time:" msgstr "" #: ../src/viktrwlayer_propwin.c:3097 ../src/viktrwlayer_propwin.c:3139 msgid "Track Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:3101 msgid "Speed-time" msgstr "" #: ../src/viktrwlayer_propwin.c:3108 ../src/viktrwlayer_propwin.c:3122 msgid "Show S_peed" msgstr "" #: ../src/viktrwlayer_propwin.c:3115 msgid "Distance-time" msgstr "" #: ../src/viktrwlayer_propwin.c:3129 msgid "Elevation-time" msgstr "" #: ../src/viktrwlayer_propwin.c:3143 msgid "Speed-distance" msgstr "" #: ../src/viktrwlayer_tpwin.c:118 msgid "Part of Track:" msgstr "" #: ../src/viktrwlayer_tpwin.c:119 msgid "Latitude:" msgstr "Lintang:" #: ../src/viktrwlayer_tpwin.c:120 msgid "Longitude:" msgstr "Bujur:" #: ../src/viktrwlayer_tpwin.c:121 msgid "Altitude:" msgstr "Ketinggian:" #: ../src/viktrwlayer_tpwin.c:122 msgid "Timestamp:" msgstr "" #: ../src/viktrwlayer_tpwin.c:123 msgid "Time:" msgstr "Waktu:" #: ../src/viktrwlayer_tpwin.c:124 msgid "Distance Difference:" msgstr "Beda Jarak:" #: ../src/viktrwlayer_tpwin.c:125 msgid "Time Difference:" msgstr "Beda Waktu:" #: ../src/viktrwlayer_tpwin.c:126 msgid "\"Speed\" Between:" msgstr "" #: ../src/viktrwlayer_tpwin.c:127 msgid "VDOP:" msgstr "VDOP:" #: ../src/viktrwlayer_tpwin.c:128 msgid "HDOP:" msgstr "HDOP:" #: ../src/viktrwlayer_tpwin.c:129 msgid "PDOP:" msgstr "PDOP:" #: ../src/viktrwlayer_tpwin.c:130 msgid "SAT/FIX:" msgstr "" #: ../src/viktrwlayer_tpwin.c:139 msgid "Trackpoint" msgstr "" #: ../src/viktrwlayer_tpwin.c:142 msgid "_Insert After" msgstr "" #: ../src/viktrwlayer_tpwin.c:144 msgid "Split Here" msgstr "" #: ../src/viktrwlayer_geotag.c:446 #, c-format msgid "Geotagging %d Images..." msgstr "" #: ../src/viktrwlayer_geotag.c:510 msgid "Geotag Images" msgstr "" #: ../src/viktrwlayer_geotag.c:516 msgid "Images" msgstr "" #: ../src/viktrwlayer_geotag.c:520 msgid "Overwrite Existing Waypoints:" msgstr "" #: ../src/viktrwlayer_geotag.c:523 msgid "Overwrite Existing GPS Information:" msgstr "" #: ../src/viktrwlayer_geotag.c:525 msgid "Keep File Modification Timestamp:" msgstr "" #: ../src/viktrwlayer_geotag.c:555 msgid "Create Waypoints:" msgstr "" #: ../src/viktrwlayer_geotag.c:563 msgid "Write EXIF:" msgstr "" #: ../src/viktrwlayer_geotag.c:575 msgid "Interpolate Between Track Segments:" msgstr "" #: ../src/viktrwlayer_geotag.c:579 msgid "Image Time Offset (Seconds):" msgstr "" #: ../src/viktrwlayer_geotag.c:581 msgid "" "The number of seconds to ADD to the photos time to make it match the GPS " "data. Calculate this with (GPS - Photo). Can be negative or positive. Useful " "to adjust times when a camera's timestamp was incorrect." msgstr "" #: ../src/viktrwlayer_geotag.c:584 msgid "Image Timezone:" msgstr "" #: ../src/viktrwlayer_geotag.c:586 msgid "" "The timezone that was used when the images were created. For example, if a " "camera is set to AWST or +8:00 hours. Enter +8:00 here so that the correct " "adjustment to the images' time can be made. GPS data is always in UTC." msgstr "" #: ../src/viktrwlayer_geotag.c:590 #, c-format msgid "Using track: %s" msgstr "" #: ../src/viktrwlayer_geotag.c:592 #, c-format msgid "Using all tracks in: %s" msgstr "" #: ../src/vikstatus.c:105 msgid "Current zoom level. Click to select a new one." msgstr "" #: ../src/vikwaypoint.c:34 msgid "Waypoint" msgstr "" #. TODO get rid of this as this is unnecessary duplication... #: ../src/vikwindow.c:221 msgid "Pan" msgstr "" #: ../src/vikwindow.c:221 msgid "Zoom" msgstr "Zum" #: ../src/vikwindow.c:221 msgid "Ruler" msgstr "" #: ../src/vikwindow.c:221 msgid "Select" msgstr "" #. Create tooltip #: ../src/vikwindow.c:440 msgid "Select zoom level" msgstr "" #: ../src/vikwindow.c:645 #, c-format msgid "" "Do you want to save the changes you made to the document \"%s\"?\n" "\n" "Your changes will be lost if you don't save them." msgstr "" #: ../src/vikwindow.c:649 msgid "Don't Save" msgstr "Jangan Simpan" #: ../src/vikwindow.c:696 msgid "mpp" msgstr "" #: ../src/vikwindow.c:696 msgid "pixelfact" msgstr "" #: ../src/vikwindow.c:861 #, c-format msgid "%s %s %dm" msgstr "%s %s %dm" #: ../src/vikwindow.c:863 #, c-format msgid "%s %s %dft" msgstr "" #: ../src/vikwindow.c:866 #, c-format msgid "%s %s" msgstr "%s %s" #. NB Ctrl+Shift+R is used for Refresh (deemed more important), so use 'U' instead #: ../src/vikwindow.c:1254 msgid "_Ruler" msgstr "Pengga_ris" #: ../src/vikwindow.c:1254 msgid "Ruler Tool" msgstr "Penggaris" #: ../src/vikwindow.c:1502 ../src/vikwindow.c:3138 msgid "_Zoom" msgstr "_Zum" #: ../src/vikwindow.c:1502 msgid "Zoom Tool" msgstr "Pembesaran" #: ../src/vikwindow.c:1547 ../src/vikwindow.c:3139 msgid "_Pan" msgstr "" #: ../src/vikwindow.c:1547 msgid "Pan Tool" msgstr "Penggeseran" #: ../src/vikwindow.c:1664 msgid "_Select" msgstr "" #: ../src/vikwindow.c:1664 msgid "Select Tool" msgstr "" #: ../src/vikwindow.c:1809 msgid "You must select a layer to show its properties." msgstr "" #. No error to show, so unlikely this will get called #: ../src/vikwindow.c:1824 msgid "The help system is not available." msgstr "" #. Main error path #: ../src/vikwindow.c:1827 #, c-format msgid "" "Help is not available because: %s.\n" "Ensure a Mime Type ghelp handler program is installed (e.g. yelp)." msgstr "" #: ../src/vikwindow.c:1850 msgid "You must select a layer to delete." msgstr "" #: ../src/vikwindow.c:2087 msgid "Untitled" msgstr "" #: ../src/vikwindow.c:2194 #, c-format msgid "Unable to add '%s' to the list of recently used documents" msgstr "" #: ../src/vikwindow.c:2208 msgid "The file you requested could not be opened." msgstr "" #: ../src/vikwindow.c:2211 msgid "" "GPSBabel is required to load files of this type or GPSBabel encountered " "problems." msgstr "" #: ../src/vikwindow.c:2214 #, c-format msgid "Unable to load malformed GPX file %s" msgstr "" #: ../src/vikwindow.c:2217 #, c-format msgid "Unsupported file type for %s" msgstr "" #. Since we can process .vik files with issues just show a warning in the status bar #. Not that a user can do much about it... or tells them what this issue is yet... #: ../src/vikwindow.c:2223 #, c-format msgid "WARNING: issues encountered loading %s" msgstr "" #: ../src/vikwindow.c:2278 msgid "Please select a GPS data file to open. " msgstr "" #: ../src/vikwindow.c:2288 msgid "Geocaching" msgstr "" #: ../src/vikwindow.c:2294 msgid "Google Earth" msgstr "" #: ../src/vikwindow.c:2299 msgid "GPX" msgstr "" #: ../src/vikwindow.c:2304 ../src/vikwindow.c:2387 #: ../src/viking.desktop.in.h:1 msgid "Viking" msgstr "Viking" #: ../src/vikwindow.c:2374 msgid "Save as Viking File." msgstr "" #. Try harder... #: ../src/vikwindow.c:2619 ../src/vikwindow.c:2625 msgid "Generating image file..." msgstr "" #: ../src/vikwindow.c:2647 msgid "" "Failed to generate internal image.\n" "\n" "Try creating a smaller image." msgstr "" #: ../src/vikwindow.c:2655 msgid "Failed to generate image file." msgstr "" #. Success #: ../src/vikwindow.c:2660 msgid "Image file generated." msgstr "" #: ../src/vikwindow.c:2764 msgid "" "Viewable region outside allowable pixel size bounds for image. Clipping " "width/height values." msgstr "" #: ../src/vikwindow.c:2789 #, c-format msgid "Total area: %ldm x %ldm (%.3f sq. km)" msgstr "" #: ../src/vikwindow.c:2792 #, c-format msgid "Total area: %ldm x %ldm (%.3f sq. miles)" msgstr "" #: ../src/vikwindow.c:2813 msgid "Save Image" msgstr "Simpan Citra" #: ../src/vikwindow.c:2834 msgid "PNG" msgstr "" #: ../src/vikwindow.c:2857 msgid "You must be in UTM mode to use this feature" msgstr "" #: ../src/vikwindow.c:2862 msgid "Choose a directory to hold images" msgstr "" #. todo: default for answers inside VikWindow or static (thruout instance) #: ../src/vikwindow.c:2883 msgid "Save to Image File" msgstr "Simpan ke Berkas Citra" #: ../src/vikwindow.c:2900 msgid "Width (pixels):" msgstr "Lebar (piksel):" #: ../src/vikwindow.c:2902 msgid "Height (pixels):" msgstr "Tinggi (piksel):" #: ../src/vikwindow.c:2905 msgid "" "WARNING: USING LARGE IMAGES OVER 10000x10000\n" "MAY CRASH THE PROGRAM!" msgstr "" #: ../src/vikwindow.c:2907 msgid "Zoom (meters per pixel):" msgstr "Zum (meter per piksel):" #: ../src/vikwindow.c:2921 msgid "Area in current viewable window" msgstr "Wilayah di jendela yang kini terlihat" #: ../src/vikwindow.c:2931 msgid "Save as PNG" msgstr "Simpan sebagai PNG" #: ../src/vikwindow.c:2932 msgid "Save as JPEG" msgstr "Simpan sebagai JPEG" #: ../src/vikwindow.c:2954 msgid "East-west image tiles:" msgstr "" #: ../src/vikwindow.c:2956 msgid "North-south image tiles:" msgstr "" #: ../src/vikwindow.c:3097 msgid "Choose a background color" msgstr "" #: ../src/vikwindow.c:3113 msgid "Choose a track highlight color" msgstr "" #: ../src/vikwindow.c:3134 msgid "_File" msgstr "Berkas" #: ../src/vikwindow.c:3135 msgid "_Edit" msgstr "_Edit" #: ../src/vikwindow.c:3136 msgid "_View" msgstr "_Tilik" #: ../src/vikwindow.c:3137 msgid "_Show" msgstr "" #: ../src/vikwindow.c:3140 msgid "_Layers" msgstr "_Lapisan" #: ../src/vikwindow.c:3141 msgid "_Tools" msgstr "_Perkakas" #: ../src/vikwindow.c:3142 msgid "_Webtools" msgstr "" #: ../src/vikwindow.c:3143 ../src/vikwindow.c:3206 msgid "_Help" msgstr "Bantuan" #: ../src/vikwindow.c:3145 msgid "New file" msgstr "Berkas baru" #: ../src/vikwindow.c:3146 msgid "_Open..." msgstr "Buka..." #: ../src/vikwindow.c:3146 msgid "Open a file" msgstr "Buka berkas" #: ../src/vikwindow.c:3147 msgid "Open _Recent File" msgstr "" #: ../src/vikwindow.c:3148 msgid "Append _File..." msgstr "Tambahi Berkas..." #: ../src/vikwindow.c:3148 msgid "Append data from a different file" msgstr "Tambahkan data dari berkas berbeda" #: ../src/vikwindow.c:3149 msgid "A_cquire" msgstr "" #: ../src/vikwindow.c:3150 msgid "Transfer data from a GPS device" msgstr "Ambil data dari perangkat GPS" #: ../src/vikwindow.c:3151 msgid "Import File With GPS_Babel..." msgstr "" #: ../src/vikwindow.c:3151 msgid "Import file via GPSBabel converter" msgstr "" #: ../src/vikwindow.c:3153 msgid "Google _Directions..." msgstr "" #: ../src/vikwindow.c:3153 msgid "Get driving directions from Google" msgstr "Dapatkan arah mengemudi dari Google" #: ../src/vikwindow.c:3156 msgid "_OSM Traces..." msgstr "" #: ../src/vikwindow.c:3156 msgid "Get traces from OpenStreetMap" msgstr "" #: ../src/vikwindow.c:3157 msgid "_My OSM Traces..." msgstr "" #: ../src/vikwindow.c:3157 msgid "Get Your Own Traces from OpenStreetMap" msgstr "" #: ../src/vikwindow.c:3160 msgid "Geo_caches..." msgstr "" #: ../src/vikwindow.c:3160 msgid "Get Geocaches from geocaching.com" msgstr "" #: ../src/vikwindow.c:3163 msgid "Create waypoints from geotagged images" msgstr "" #: ../src/vikwindow.c:3166 msgid "Create waypoints from Wikipedia items in the current view" msgstr "" #: ../src/vikwindow.c:3168 msgid "_Save" msgstr "_Simpan" #: ../src/vikwindow.c:3168 msgid "Save the file" msgstr "Simpan berkas" #: ../src/vikwindow.c:3169 msgid "Save _As..." msgstr "Simpan Seb_agai..." #: ../src/vikwindow.c:3169 msgid "Save the file under different name" msgstr "Simpan berkas dengan nama berbeda" #: ../src/vikwindow.c:3170 msgid "_Generate Image File..." msgstr "" #: ../src/vikwindow.c:3170 msgid "Save a snapshot of the workspace into a file" msgstr "" #: ../src/vikwindow.c:3171 msgid "Generate _Directory of Images..." msgstr "" #: ../src/vikwindow.c:3171 msgid "FIXME:IMGDIR" msgstr "" #: ../src/vikwindow.c:3174 msgid "_Print..." msgstr "Cetak..." #: ../src/vikwindow.c:3174 msgid "Print maps" msgstr "Cetak peta" #: ../src/vikwindow.c:3177 msgid "E_xit" msgstr "Keluar" #: ../src/vikwindow.c:3177 msgid "Exit the program" msgstr "Keluar dari program" #: ../src/vikwindow.c:3178 msgid "Save and Exit" msgstr "Simpan dan Keluar" #: ../src/vikwindow.c:3178 msgid "Save and Exit the program" msgstr "Simpan lalu keluar dari program" #: ../src/vikwindow.c:3180 msgid "Go to the _Default Location" msgstr "" #: ../src/vikwindow.c:3180 msgid "Go to the default location" msgstr "" #: ../src/vikwindow.c:3181 msgid "Go to _Location..." msgstr "" #: ../src/vikwindow.c:3181 msgid "Go to address/place using text search" msgstr "Ke alamat/tempat memakai pencarian teks" #: ../src/vikwindow.c:3182 msgid "_Go to Lat/Lon..." msgstr "Pergi ke Lintang/Bujur..." #: ../src/vikwindow.c:3182 msgid "Go to arbitrary lat/lon coordinate" msgstr "Pergi ke sebarang koordinat lintang/bujur" #: ../src/vikwindow.c:3183 msgid "Go to UTM..." msgstr "Pergi ke UTM..." #: ../src/vikwindow.c:3183 msgid "Go to arbitrary UTM coordinate" msgstr "Pergi ke sebarang koordinat UTM" #: ../src/vikwindow.c:3184 msgid "_Refresh" msgstr "" #: ../src/vikwindow.c:3184 msgid "Refresh any maps displayed" msgstr "" #: ../src/vikwindow.c:3185 msgid "Set _Highlight Color..." msgstr "" #: ../src/vikwindow.c:3186 msgid "Set Bac_kground Color..." msgstr "" #: ../src/vikwindow.c:3187 msgid "Zoom _In" msgstr "Perbesar" #: ../src/vikwindow.c:3188 msgid "Zoom _Out" msgstr "Perkecil" #: ../src/vikwindow.c:3189 msgid "Zoom _To..." msgstr "Pembesaran Ke..." #: ../src/vikwindow.c:3190 msgid "Pan _North" msgstr "" #: ../src/vikwindow.c:3191 msgid "Pan _East" msgstr "" #: ../src/vikwindow.c:3192 msgid "Pan _South" msgstr "" #: ../src/vikwindow.c:3193 msgid "Pan _West" msgstr "" #: ../src/vikwindow.c:3194 msgid "Background _Jobs" msgstr "" #: ../src/vikwindow.c:3196 msgid "Cu_t" msgstr "Potong" #: ../src/vikwindow.c:3197 msgid "_Copy" msgstr "Salin" #: ../src/vikwindow.c:3198 msgid "_Paste" msgstr "Tempel" #: ../src/vikwindow.c:3199 msgid "_Delete" msgstr "Hapus" #: ../src/vikwindow.c:3200 msgid "Delete All" msgstr "Hapus Semua" #: ../src/vikwindow.c:3201 msgid "_Flush Map Cache" msgstr "" #: ../src/vikwindow.c:3202 msgid "_Set the Default Location" msgstr "" #: ../src/vikwindow.c:3202 msgid "Set the Default Location to the current position" msgstr "" #: ../src/vikwindow.c:3203 msgid "_Preferences" msgstr "" #: ../src/vikwindow.c:3204 msgid "_Properties" msgstr "_Properti" #: ../src/vikwindow.c:3207 msgid "_About" msgstr "Ihw_al" #: ../src/vikwindow.c:3213 msgid "_UTM Mode" msgstr "Mode _UTM" #: ../src/vikwindow.c:3214 msgid "_Expedia Mode" msgstr "Mode _Expedia" #: ../src/vikwindow.c:3215 msgid "_Mercator Mode" msgstr "Mode _Mercator" #: ../src/vikwindow.c:3216 msgid "Lat_/Lon Mode" msgstr "" #: ../src/vikwindow.c:3220 msgid "Show _Scale" msgstr "" #: ../src/vikwindow.c:3220 msgid "Show Scale" msgstr "Tampilkan Skala" #: ../src/vikwindow.c:3221 msgid "Show _Center Mark" msgstr "" #: ../src/vikwindow.c:3221 msgid "Show Center Mark" msgstr "Tampilkan Tanda Pusat" #: ../src/vikwindow.c:3222 msgid "Show _Highlight" msgstr "" #: ../src/vikwindow.c:3222 msgid "Show Highlight" msgstr "" #: ../src/vikwindow.c:3223 msgid "_Full Screen" msgstr "Layar Penuh" #: ../src/vikwindow.c:3223 msgid "Activate full screen mode" msgstr "Aktifkan mode layar penuh" #: ../src/vikwindow.c:3224 msgid "Show Side _Panel" msgstr "" #: ../src/vikwindow.c:3224 msgid "Show Side Panel" msgstr "Tampilkan Panel Sisi" #: ../src/vikwindow.c:3225 msgid "Show Status_bar" msgstr "" #: ../src/vikwindow.c:3225 msgid "Show Statusbar" msgstr "" #: ../src/vikwindow.c:3226 msgid "Show _Toolbar" msgstr "" #: ../src/vikwindow.c:3226 msgid "Show Toolbar" msgstr "" #: ../src/vikwindow.c:3227 msgid "Show _Menu" msgstr "" #: ../src/vikwindow.c:3227 msgid "Show Menu" msgstr "" #: ../src/viking.desktop.in.h:2 msgid "GPS Data Manager" msgstr "Pengelola Data GPS" #: ../src/viking.desktop.in.h:3 msgid "Map Based GPS Data Manager (live data capable)." msgstr "Pengelola Data GPS Berbasis Peta (mampu menangani data live)." #: ../src/libjpeg/jpeg-data.c:206 msgid "Data does not follow JPEG specification." msgstr "" #: ../src/libjpeg/jpeg-data.c:291 #, c-format msgid "Path '%s' invalid." msgstr "" #: ../src/libjpeg/jpeg-data.c:309 #, c-format msgid "Could not read '%s'." msgstr "" viking-1.4.2/po/cs.po0000644000175000017500000026654312175546146011344 00000000000000# Czech translation for viking # Copyright (c) 2007 Rosetta Contributors and Canonical Ltd 2007 # This file is distributed under the same license as the viking package. # FIRST AUTHOR , 2007. # msgid "" msgstr "" "Project-Id-Version: viking\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-02-04 23:29+0100\n" "PO-Revision-Date: 2013-03-06 09:26+0000\n" "Last-Translator: Radek Stastny \n" "Language-Team: Czech \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" "X-Launchpad-Export-Date: 2013-03-23 17:12+0000\n" "X-Generator: Launchpad (build 16540)\n" "Language: cs\n" #: ../src/acquire.c:103 ../src/vikgpslayer.c:1185 msgid "Done." msgstr "Hotovo." #: ../src/acquire.c:114 msgid "No data." msgstr "Žádná data." #: ../src/acquire.c:154 ../src/acquire.c:404 msgid "Error: acquisition failed." msgstr "Chyba: stažení selhalo" #: ../src/acquire.c:341 msgid "Working..." msgstr "Pracuji..." #. This shouldn't happen... #: ../src/acquire.c:394 msgid "" "Unable to create command\n" "Acquire method failed." msgstr "" #: ../src/acquire.c:486 msgid "_Filter" msgstr "_Filtr" #: ../src/acquire.c:501 #, c-format msgid "Filter with %s" msgstr "" #: ../src/acquire.c:518 msgid "Filter" msgstr "Filtrovat" #: ../src/background.c:52 #, c-format msgid "%d items" msgstr "%d položek" #: ../src/background.c:248 msgid "Job" msgstr "Úloha" #: ../src/background.c:252 msgid "Progress" msgstr "Průběh" #: ../src/background.c:268 msgid "Viking Background Jobs" msgstr "Úlohy na pozadí" #: ../src/bing.c:47 msgid "Bing" msgstr "Bing" #. VIK_GTK_WINDOW_FROM_WIDGET(vp) #: ../src/bingmapsource.c:445 msgid "Bing attribution Loading" msgstr "Bing nahrávání" #: ../src/clipboard.c:95 msgid "paste failed" msgstr "vložení selhalo" #: ../src/clipboard.c:105 msgid "wrong clipboard data size" msgstr "špatná velikost dat ve schránce" #: ../src/clipboard.c:124 #, c-format msgid "" "The clipboard contains sublayer data for %s layers. You must select a layer " "of this type to paste the clipboard data." msgstr "" "Schránka obsahuje data z %s podvrstev. Pro vložení je nutné vybrat vrstvu " "stejného typu." #: ../src/clipboard.c:236 msgid "" "In order to paste a waypoint, please select an appropriate layer to paste " "into." msgstr "K vložení místa je nutné vybrat cílovou vrstvu." #: ../src/dialog.c:52 msgid "Go to Lat/Lon" msgstr "Jdi na souřadnice" #: ../src/dialog.c:64 ../src/dialog.c:251 msgid "Latitude:" msgstr "Šířka:" #: ../src/dialog.c:70 ../src/dialog.c:256 msgid "Longitude:" msgstr "Délka:" #: ../src/dialog.c:102 msgid "Go to UTM" msgstr "Jít na souřadnice UTM" #: ../src/dialog.c:115 msgid "Northing:" msgstr "Severní souřadnice:" #: ../src/dialog.c:121 msgid "Easting:" msgstr "Východní souřadnice:" #: ../src/dialog.c:128 msgid "Zone:" msgstr "Zóna:" #: ../src/dialog.c:131 msgid "Letter:" msgstr "Písmeno:" #: ../src/dialog.c:199 msgid "Waypoint Properties" msgstr "Vlastnosti místa" #: ../src/dialog.c:233 msgid "Name:" msgstr "Název:" #: ../src/dialog.c:261 msgid "Altitude:" msgstr "Výška:" #: ../src/dialog.c:266 msgid "Comment:" msgstr "Poznámka:" #: ../src/dialog.c:274 ../src/osm-traces.c:437 msgid "Description:" msgstr "Popis:" #: ../src/dialog.c:277 msgid "Image:" msgstr "Obrázek:" #: ../src/dialog.c:282 msgid "Symbol:" msgstr "Symbol:" #: ../src/dialog.c:291 msgid "(none)" msgstr "(žádné)" #. TODO: other checks (isalpha or whatever ) #: ../src/dialog.c:356 msgid "Please enter a name for the waypoint." msgstr "Zadejte prosím jméno místa." #: ../src/dialog.c:529 ../src/geonamessearch.c:243 #: ../src/datasource_osm_my_traces.c:507 msgid "Nothing was selected" msgstr "Nic nebylo vybráno" #: ../src/dialog.c:537 msgid "Add Route" msgstr "Přidat trasu" #: ../src/dialog.c:537 msgid "Add Track" msgstr "Přidat trasu" #: ../src/dialog.c:545 msgid "Route Name:" msgstr "Jméno trasy:" #: ../src/dialog.c:545 msgid "Track Name:" msgstr "Jméno trasy:" #: ../src/dialog.c:565 msgid "Please enter a name for the track." msgstr "Zadejte prosím jméno trasy." #: ../src/dialog.c:623 msgid "Zoom Factors..." msgstr "Stupeň přiblížení..." #: ../src/dialog.c:637 msgid "Zoom factor (in meters per pixel):" msgstr "Měřítko (metry na pixel)" #: ../src/dialog.c:638 msgid "X (easting): " msgstr "X (východní): " #: ../src/dialog.c:639 msgid "Y (northing): " msgstr "Y (severní): " #: ../src/dialog.c:644 msgid "X and Y zoom factors must be equal" msgstr "Stejný stupeň přiblížení pro X a Y" #: ../src/dialog.c:699 msgid "1 min" msgstr "1 min" #: ../src/dialog.c:700 msgid "1 hour" msgstr "1 hodina" #: ../src/dialog.c:701 msgid "1 day" msgstr "1 den" #: ../src/dialog.c:702 msgid "Custom (in minutes):" msgstr "Uživatelský (v minutách):" #: ../src/dialog.c:808 msgid "GPS Data and Topo Analyzer, Explorer, and Manager." msgstr "Analyzátor, průzkumník a správce GPS a topologických dat." #: ../src/dialog.c:809 msgid "" "This program is free software; you can redistribute it and/or modify it " "under the terms of the GNU General Public License as published by the Free " "Software Foundation; either version 2 of the License, or (at your option) " "any later version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT " "ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or " "FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for " "more details.\n" "\n" "You should have received a copy of the GNU General Public License along with " "this program; if not, write to the Free Software Foundation, Inc., 59 Temple " "Place, Suite 330, Boston, MA 02111-1307, USA" msgstr "" "Program je šířen pod následující licencí. Oficiální překlad neexistuje, " "podrobnosti a vysvětlení lze nalézt například zde " "http://www.gnu.org/copyleft/copyleft.cs.html.\n" "\n" "This program is free software; you can redistribute it and/or modify it " "under the terms of the GNU General Public License as published by the Free " "Software Foundation; either version 2 of the License, or (at your option) " "any later version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT " "ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or " "FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for " "more details.\n" "\n" "You should have received a copy of the GNU General Public License along with " "this program; if not, write to the Free Software Foundation, Inc., 59 Temple " "Place, Suite 330, Boston, MA 02111-1307, USA" #: ../src/dialog.c:837 msgid "Translation is coordinated on http://launchpad.net/viking" msgstr "Překlady do češtiny můžete zlepšit na http://launchpad.net/viking" #: ../src/dialog.c:845 msgid "Download along track" msgstr "Stáhnout mapy podél trasy" #: ../src/dialog.c:851 msgid "Map type:" msgstr "Typ mapy:" #: ../src/dialog.c:856 msgid "Zoom level:" msgstr "Stupeň přiblížení:" #: ../src/dialog.c:896 #, c-format msgid "The map data is licensed: %s." msgstr "Data mapy jsou licencována: %s." #: ../src/dialog.c:899 #, c-format msgid "" "The data provided by '%s' are licensed under the following license: " "%s.\n" "Please, read the license before continuing." msgstr "" "Data poskytnutá '%s' jsou licencována pod následující licencí: " "%s.\n" "Před pokračováním si prosím licenci přečtěte." #: ../src/dialog.c:904 msgid "Open license" msgstr "Otevřená licence" #: ../src/expedia.c:53 msgid "Expedia Street Maps" msgstr "Expedia uliční mapy" #: ../src/expedia.c:81 msgid "Invalid expedia altitude" msgstr "Špatná výška dle Expedie" #: ../src/expedia.c:112 #, c-format msgid "" "Couldn't open EXPEDIA image file (right after successful download! Please " "report and delete image file!): %s" msgstr "" "Nemohu otevřít soubor EXPEDIA (po úspěšném stažení, soubor smažte a chybu " "prosím nahlaste!): %s" #: ../src/expedia.c:125 #, c-format msgid "" "Couldn't save EXPEDIA image file (right after successful download! Please " "report and delete image file!): %s" msgstr "" "Nemohu uložit soubor EXPEDIA (po úspěšném stažení, soubor smažte a chybu " "prosím nahlaste!): %s" #. * #. * See http://www.geonames.org/export/wikipedia-webservice.html#wikipediaBoundingBox #. #. Translators may wish to change this setting as appropriate to get Wikipedia articles in that language #: ../src/geonamessearch.c:46 msgid "en" msgstr "en" #: ../src/geonamessearch.c:121 msgid "Search" msgstr "Hledat" #: ../src/geonamessearch.c:123 msgid "No entries found!" msgstr "Nenalezeno!" #. NB could allow columns to be shifted around by doing this after each new #. gtk_tree_view_column_set_reorderable ( column, TRUE ); #. However I don't think is that useful, so I haven't put it in #: ../src/geonamessearch.c:177 ../src/datasource_osm_my_traces.c:425 msgid "Name" msgstr "Název" #: ../src/geonamessearch.c:182 msgid "Feature" msgstr "Vlastnost" #: ../src/geonamessearch.c:187 ../src/datasource_osm_my_traces.c:440 msgid "Lat/Lon" msgstr "šířka/délka" #: ../src/geonamessearch.c:269 ../src/googlesearch.c:100 msgid "couldn't map temp file" msgstr "nelze zpracovat dočasný soubor" #: ../src/globals.c:44 msgid "Degree format:" msgstr "Formát zobrazení stupňů:" #: ../src/globals.c:48 msgid "Distance units:" msgstr "Jednotka vzdálenosti:" #: ../src/globals.c:52 msgid "Speed units:" msgstr "Jednotka rychlosti:" #: ../src/globals.c:56 msgid "Height units:" msgstr "Jednotka výšky:" #: ../src/globals.c:60 msgid "Use large waypoint icons:" msgstr "Velké ikony místa:" #: ../src/globals.c:64 msgid "Default latitude:" msgstr "Výchozí zem. šířka:" #: ../src/globals.c:67 msgid "Default longitude:" msgstr "Výchozí zem. délka:" #: ../src/globals.c:73 msgid "Alphabetical" msgstr "abecedně" #: ../src/globals.c:73 ../src/datasource_osm_my_traces.c:435 msgid "Time" msgstr "dle času" #: ../src/globals.c:76 msgid "KML File Export Units:" msgstr "Jednotky v KML exportu" #: ../src/globals.c:77 msgid "GPX Track Order:" msgstr "řadit GPX" #: ../src/globals.c:82 msgid "Image Viewer:" msgstr "Prohlížeč obrázků" #: ../src/globals.c:87 msgid "External GPX Program 1:" msgstr "externí GPX program 1" #: ../src/globals.c:88 msgid "External GPX Program 2:" msgstr "externí GPX program 2" #. Defaults for the options are setup here #: ../src/globals.c:96 msgid "General" msgstr "Obecné" #. New Tab #: ../src/globals.c:121 msgid "Export/External" msgstr "Export/Externí" #. Webtools #: ../src/google.c:36 msgid "Google" msgstr "Google" #: ../src/datasource_file.c:59 msgid "Import file with GPSBabel" msgstr "Importovat soubor pomocí GPSBabel" #: ../src/datasource_file.c:60 msgid "Imported file" msgstr "Importovaný soubor" #. The file selector #: ../src/datasource_file.c:133 msgid "File:" msgstr "Soubor:" #: ../src/datasource_file.c:134 msgid "File to import" msgstr "Soubor pro importování" #: ../src/datasource_file.c:141 msgid "All files" msgstr "Všechny soubory" #. The file format selector #: ../src/datasource_file.c:148 msgid "File type:" msgstr "Typ souboru:" #: ../src/datasource_file.c:193 #, c-format msgid "using babel args '%s' and file '%s'" msgstr "babel argumenty '%s' soubor '%s'" #: ../src/datasource_gc.c:66 msgid "Download Geocaches" msgstr "Stáhnout Geocache" #: ../src/datasource_gc.c:67 msgid "Geocaching.com Caches" msgstr "Geocaching.com cache" #: ../src/datasource_gc.c:84 msgid "geocaching.com username:" msgstr "geocaching.com uživatel:" #: ../src/datasource_gc.c:85 msgid "geocaching.com password:" msgstr "geocaching.com heslo:" #: ../src/datasource_gc.c:126 #, c-format msgid "" "Can't find %s or %s in path! Check that you have installed it correctly." msgstr "" "%s ani %s nenalezeno v cestě pro spuštění, zkontrolujte zda je korektně " "nainstalováno." #: ../src/datasource_gc.c:188 msgid "Number geocaches:" msgstr "Počet geocache:" #: ../src/datasource_gc.c:190 msgid "Centered around:" msgstr "Centrovat okolo:" #: ../src/datasource_gc.c:226 msgid "Broken input - using some defaults" msgstr "Chybný vstup, používájí se výchozí hodnoty" #: ../src/datasource_geotag.c:51 msgid "Create Waypoints from Geotagged Images" msgstr "Vytvořit místa z geotagovaných obrázků" #: ../src/datasource_geotag.c:52 msgid "Geotagged Images" msgstr "Obrázky s GPS souřadnicemi" #: ../src/datasource_geotag.c:102 ../src/vikwindow.c:2314 #: ../src/vikwindow.c:2382 ../src/vikwindow.c:2824 msgid "All" msgstr "Vše" #: ../src/datasource_geotag.c:107 ../src/vikwindow.c:2829 msgid "JPG" msgstr "JPG" #: ../src/datasource_geotag.c:165 #, c-format msgid "Unable to create waypoint from %s" msgstr "Nelze vytvořit místo z %s" #: ../src/datasource_google.c:49 ../src/datasource_google.c:50 msgid "Google Directions" msgstr "Google trasy" #: ../src/datasource_google.c:77 msgid "From:" msgstr "Z:" #: ../src/datasource_google.c:79 msgid "To:" msgstr "Do:" #: ../src/datasource_gps.c:57 msgid "Acquire from GPS" msgstr "Stahuji z GPS" #: ../src/datasource_gps.c:58 msgid "Acquired from GPS" msgstr "Staženo z GPS" #: ../src/datasource_gps.c:221 #, c-format msgid "using cmdline '%s' and file '%s'\n" msgstr "používám příkaz '%s' a soubor '%s'\n" #: ../src/datasource_gps.c:297 ../src/vikgpslayer.c:884 #, c-format msgid "Downloading %d waypoint..." msgid_plural "Downloading %d waypoints..." msgstr[0] "Stahuji %d místo..." msgstr[1] "Stahuji %d místa..." msgstr[2] "Stahuji %d míst..." #: ../src/datasource_gps.c:298 ../src/vikgpslayer.c:885 #, c-format msgid "Downloading %d trackpoint..." msgid_plural "Downloading %d trackpoints..." msgstr[0] "Stahuji %d bod..." msgstr[1] "Stahuji %d body..." msgstr[2] "Stahuji %d bodů ..." #: ../src/datasource_gps.c:303 ../src/vikgpslayer.c:890 #, c-format msgid "Downloading %d routepoint..." msgid_plural "Downloading %d routepoints..." msgstr[0] "Stahování %d bodu..." msgstr[1] "Stahování %d bodů..." msgstr[2] "Stahování %d bodů..." #: ../src/datasource_gps.c:325 ../src/datasource_gps.c:326 #: ../src/datasource_gps.c:327 #, c-format msgid "Downloaded %d out of %d %s..." msgstr "Staženo %d z %d %s..." #: ../src/datasource_gps.c:331 ../src/datasource_gps.c:332 #: ../src/datasource_gps.c:333 #, c-format msgid "Downloaded %d %s." msgstr "Staženo %d %s." #: ../src/datasource_gps.c:347 ../src/vikgpslayer.c:968 #, c-format msgid "GPS Device: %s" msgstr "GPS zařízení: %s" #: ../src/datasource_gps.c:370 ../src/vikgpslayer.c:1042 #: ../src/vikgpslayer.c:1110 msgid "Status: Working..." msgstr "Status: Pracuji..." #: ../src/datasource_gps.c:469 ../src/vikgpslayer.c:150 msgid "GPS Protocol:" msgstr "GPS protokol:" #. List now assigned at runtime #: ../src/datasource_gps.c:488 ../src/vikgpslayer.c:151 msgid "Serial Port:" msgstr "Sériový port:" #: ../src/datasource_gps.c:509 msgid "" "Turn Off After Transfer\n" "(Garmin/NAViLink Only)" msgstr "" "Vypnout po přesunu dat\n" "(Garmin/NAViLink Only)" #: ../src/datasource_gps.c:512 msgid "Tracks:" msgstr "Trasy:" #: ../src/datasource_gps.c:516 msgid "Routes:" msgstr "Trasy:" #: ../src/datasource_gps.c:520 msgid "Waypoints:" msgstr "Místa:" #: ../src/datasource_gps.c:594 ../src/vikgpslayer.c:1305 msgid "GPS device: N/A" msgstr "GPS zařízení: N/A" #: ../src/datasource_osm.c:52 ../src/datasource_osm.c:53 msgid "OSM traces" msgstr "OSM trasy" #: ../src/datasource_osm.c:80 msgid "Page number:" msgstr "Číslo stránky:" #: ../src/datasource_osm_my_traces.c:63 ../src/datasource_osm_my_traces.c:64 msgid "OSM My Traces" msgstr "Moje OSM trasy" #: ../src/datasource_osm_my_traces.c:108 msgid "Username:" msgstr "Uživatelské jméno:" #: ../src/datasource_osm_my_traces.c:113 msgid "The email or username used to login to OSM" msgstr "Uživatelské jméno nebo email k přihlášení do OSM" #: ../src/datasource_osm_my_traces.c:115 ../src/osm-traces.c:413 msgid "Password:" msgstr "Heslo:" #: ../src/datasource_osm_my_traces.c:120 msgid "The password used to login to OSM" msgstr "Heslo k přihlášení do OSM" #: ../src/datasource_osm_my_traces.c:430 msgid "Description" msgstr "Popis" #: ../src/datasource_osm_my_traces.c:445 msgid "Privacy" msgstr "Ochrana osobních údajů" #: ../src/datasource_osm_my_traces.c:452 msgid "Within Current View" msgstr "" #: ../src/datasource_osm_my_traces.c:518 msgid "GPS Traces" msgstr "GPS trasy" #: ../src/datasource_osm_my_traces.c:520 msgid "None found!" msgstr "Nenalezeno!" #: ../src/datasource_osm_my_traces.c:629 msgid "My OSM Traces" msgstr "Moje OSM trasy" #: ../src/datasource_osm_my_traces.c:645 #, c-format msgid "Unable to get trace: %s" msgstr "Nelze stáhnout trasu: %s" #: ../src/datasource_wikipedia.c:32 msgid "Create Waypoints from Wikipedia Articles" msgstr "místa z Wikipedie" #: ../src/datasource_wikipedia.c:33 msgid "Wikipedia Waypoints" msgstr "Místa z Wikipedie" #: ../src/dem.c:65 ../src/dem.c:79 msgid "Invalid DEM" msgstr "Špatný DEM" #: ../src/dem.c:121 msgid "Invalid DEM header" msgstr "Špatná hlavička DEM" #: ../src/dem.c:190 ../src/dem.c:203 msgid "Incorrect DEM Class B record: expected 1" msgstr "Špatný DEM Class B záznam: očekávám 1" #: ../src/dem.c:360 #, c-format msgid "Couldn't map file %s: %s" msgstr "Nelze zpracovat soubor %s: %s" #: ../src/download.c:112 msgid "Tile age (s):" msgstr "Aktualizavat podklady po (s):" #: ../src/download.c:233 #, c-format msgid "Download error: %s" msgstr "Chyba stahování: %s" #: ../src/download.c:313 msgid "couldn't open temp file" msgstr "nelze otevřít dočasný soubor" #: ../src/file.c:456 ../src/file.c:461 #, c-format msgid "Draw mode '%s' no more supported" msgstr "Zobrazovací režim '%s' již není podporován" #: ../src/geotag_exif.c:433 msgid "Not enough memory." msgstr "Nedostatek paměti." #: ../src/geotag_exif.c:451 msgid "Setting a value for this tag is unsupported!" msgstr "Nastavení hodnoty z tohoto údaje není podporováno!" #: ../src/geotag_exif.c:470 #, c-format msgid "Too few components specified (need %d, found %d)\n" msgstr "Příliš málo zadaných komponent (nutno %d, nalezeno %d)\n" #: ../src/geotag_exif.c:474 msgid "Numeric value expected\n" msgstr "Očekávám číslo\n" #: ../src/geotag_exif.c:482 msgid "This shouldn't happen!" msgstr "To by nemělo nastat!" #: ../src/geotag_exif.c:552 msgid "Not yet implemented!" msgstr "Zatím není naprogramované!" #: ../src/geotag_exif.c:565 msgid "Warning; Too many components specified!" msgstr "Varování: Přiliš mnoho komponentů!" #: ../src/osm-traces.c:73 msgid "Identifiable (public w/ timestamps)" msgstr "Identifikovatelný (veřejný, body s časovou značkou)" #: ../src/osm-traces.c:74 msgid "Trackable (private w/ timestamps)" msgstr "Sledovatelný (anonymní, body s časovou značkou)" #: ../src/osm-traces.c:75 msgid "Public" msgstr "Veřejný" #: ../src/osm-traces.c:76 msgid "Private" msgstr "Soukromý" #: ../src/osm-traces.c:93 msgid "OSM username:" msgstr "OSM uživatel:" #: ../src/osm-traces.c:94 msgid "OSM password:" msgstr "OSM heslo:" #. Preferences #: ../src/osm-traces.c:151 msgid "OpenStreetMap Traces" msgstr "OpenStreetMap trasy" #: ../src/osm-traces.c:234 #, c-format msgid "failed to upload data: HTTP response is %ld" msgstr "chyba při nahrávání dat: HTTP odpověď %ld" #: ../src/osm-traces.c:239 #, c-format msgid "curl_easy_getinfo failed: %d" msgstr "curl_easy_getinfo selhalo: %d" #: ../src/osm-traces.c:244 #, c-format msgid "curl request failed: %s" msgstr "požadavek curl selhal: %s" #: ../src/osm-traces.c:275 #, c-format msgid "failed to open temporary file: %s" msgstr "nelze otevřít dočasný soubor: %s" #. Success #: ../src/osm-traces.c:328 msgid "Uploaded to OSM" msgstr "Nahráno do OSM" #: ../src/osm-traces.c:332 msgid "FAILED TO UPLOAD DATA TO OSM - CURL PROBLEM" msgstr "Selhalo nahrání do OSM - chyba curl" #: ../src/osm-traces.c:335 msgid "FAILED TO UPLOAD DATA TO OSM" msgstr "Selhalo nahrání do OSM" #: ../src/osm-traces.c:335 msgid "HTTP response code" msgstr "HTTP návratová hodnota" #: ../src/osm-traces.c:348 #, c-format msgid "failed to unlink temporary file: %s" msgstr "nelze smazat dočasné soubory: %s" #: ../src/osm-traces.c:387 msgid "OSM upload" msgstr "nahrání do OSM" #: ../src/osm-traces.c:405 msgid "Email:" msgstr "email:" #: ../src/osm-traces.c:410 msgid "" "The email used as login\n" "Enter the email you use to login into www.openstreetmap.org." msgstr "" "Uživatelské jméno:\n" "Zadejte email pro přihlášení na www.openstreetmap.org." #: ../src/osm-traces.c:418 msgid "" "The password used to login\n" "Enter the password you use to login into " "www.openstreetmap.org." msgstr "" "Heslo\n" "Zadejte heslo pro přihlášení na www.openstreetmap.org." #: ../src/osm-traces.c:423 msgid "File's name:" msgstr "Jméno souboru:" #: ../src/osm-traces.c:433 msgid "" "The name of the file on OSM\n" "This is the name of the file created on the server.This is not the " "name of the local file." msgstr "" "Jméno souboru\n" "Jak bude pojmenován soubor na www.openstreetmap.org " #: ../src/osm-traces.c:442 msgid "The description of the trace" msgstr "Popis logu trasy" #: ../src/osm-traces.c:444 msgid "Tags:" msgstr "Tagy:" #: ../src/osm-traces.c:449 msgid "The tags associated to the trace" msgstr "Tagy přiřazené k trase" #: ../src/osm-traces.c:482 #, c-format msgid "Uploading %s to OSM" msgstr "Nahrávám %s na OSM" #: ../src/mapcache.c:61 msgid "Map cache memory size (MB):" msgstr "Cache pro mapy (MB):" #: ../src/print.c:53 msgid "None" msgstr "Žádný" #: ../src/print.c:54 msgid "Horizontally" msgstr "Vodorovně" #: ../src/print.c:55 msgid "Vertically" msgstr "Svisle" #: ../src/print.c:56 msgid "Both" msgstr "V obou osách" #: ../src/print.c:120 msgid "Image Settings" msgstr "Nastavení obrázku" #: ../src/print.c:546 msgid "done" msgstr "hotovo" #. Page Size #: ../src/print.c:575 msgid "_Adjust Page Size and Orientation" msgstr "_Upravit velikost stránky a orientaci" #: ../src/print.c:591 msgid "C_enter:" msgstr "Uprostř_ed:" #. ignore page margins #: ../src/print.c:609 msgid "Ignore Page _Margins" msgstr "Ignorovat okraje _stránky" #: ../src/print.c:628 msgid "Image S_ize:" msgstr "Velikost obrázku" #: ../src/util.c:81 msgid "Could not launch web browser." msgstr "nelze spustit webový prohlížeč" #: ../src/util.c:92 msgid "Could not create new email." msgstr "Nelze vytvožit nový email." #: ../src/vikcoordlayer.c:46 msgid "Color:" msgstr "Barva:" #: ../src/vikcoordlayer.c:47 msgid "Minutes Width:" msgstr "Šířka v minutách:" #: ../src/vikcoordlayer.c:48 msgid "Line Thickness:" msgstr "Šířka čary:" #: ../src/vikcoordlayer.c:56 msgid "Coordinate" msgstr "Souřadnice" #: ../src/datasource_bfilter.c:46 msgid "Max number of points:" msgstr "Maximální počet bodů:" #: ../src/datasource_bfilter.c:60 msgid "Simplify All Tracks..." msgstr "Redukce bodů všech tras.." #: ../src/datasource_bfilter.c:61 msgid "Simplified Tracks" msgstr "Zjednodušené trasy" #: ../src/datasource_bfilter.c:96 ../src/datasource_bfilter.c:97 msgid "Remove Duplicate Waypoints" msgstr "Odstranit zdvojená místa" #: ../src/datasource_bfilter.c:129 msgid "Waypoints Inside This" msgstr "Místa v" #: ../src/datasource_bfilter.c:130 msgid "Polygonized Layer" msgstr "Polygonizovaná vrstva" #: ../src/datasource_bfilter.c:165 msgid "Waypoints Outside This" msgstr "Místa mimo" #: ../src/datasource_bfilter.c:166 msgid "Polygonzied Layer" msgstr "Polygonální vrstva" #: ../src/main.c:89 #, c-format msgid "Ignoring Xlib error: error code %d request code %d\n" msgstr "Xlib error: error kód %d kód požadavku %d\n" #: ../src/main.c:102 msgid "Enable debug output" msgstr "Povolit ladící výstup" #: ../src/main.c:103 msgid "Enable verbose output" msgstr "Povolit podrobný výstup" #: ../src/main.c:104 msgid "Show version" msgstr "Ukáže verzi" #: ../src/osm.c:106 msgid "On Disk OSM Tile Format" msgstr "" #: ../src/osm.c:121 msgid "OSM (view)" msgstr "OpenStreetMap (náhled)" #: ../src/osm.c:125 msgid "OSM (edit)" msgstr "OpenStreetMap (editace)" #: ../src/osm.c:129 msgid "OSM (render)" msgstr "OpenStreetMap (výstup)" #. Example: http://127.0.0.1:8111/load_and_zoom?left=8.19&right=8.20&top=48.605&bottom=48.590&select=node413602999 #. JOSM or merkaartor must already be running with remote interface enabled #: ../src/osm.c:136 msgid "Local port 8111 (eg JOSM)" msgstr "Lokální port 8111 (např. JOSM)" #: ../src/preferences.c:285 msgid "Preferences" msgstr "Nastavení" #: ../src/uibuilder.c:147 msgid "Take care that this password will be stored clearly in a plain file." msgstr "Heslo bude uloženo nešifrovaně v souboru." #: ../src/vikaggregatelayer.c:37 msgid "Aggregate" msgstr "Sloučit" #: ../src/vikdemlayer.c:101 msgid "Absolute height" msgstr "Absolutní výška" #: ../src/vikdemlayer.c:102 msgid "Height gradient" msgstr "Sklon" #: ../src/vikdemlayer.c:118 msgid "DEM Files:" msgstr "DEM soubory:" #: ../src/vikdemlayer.c:119 msgid "Download Source:" msgstr "Zdroj stahování:" #: ../src/vikdemlayer.c:120 msgid "Min Elev Color:" msgstr "Barva min. výšky:" #: ../src/vikdemlayer.c:121 msgid "Type:" msgstr "Typ:" #: ../src/vikdemlayer.c:122 msgid "Min Elev:" msgstr "Výška od:" #: ../src/vikdemlayer.c:123 msgid "Max Elev:" msgstr "Max výška:" #: ../src/vikdemlayer.c:134 msgid "_DEM Download" msgstr "Stažení _DEM dat" #: ../src/vikdemlayer.c:134 msgid "DEM Download" msgstr "Stažení DEM dat" #: ../src/vikdemlayer.c:188 msgid "DEM" msgstr "DEM" #: ../src/vikdemlayer.c:284 #, c-format msgid "Number of files: %d" msgstr "Počet souborů: %d" #: ../src/vikdemlayer.c:385 msgid "DEM Loading" msgstr "DEM načítání" #: ../src/vikdemlayer.c:889 #, c-format msgid "No SRTM data available for %f, %f" msgstr "žádná dostupná SRTM data pro %f, %f" #: ../src/vikdemlayer.c:1149 #, c-format msgid "Downloading DEM %s" msgstr "Stahuji DEM %s" #: ../src/vikfileentry.c:68 msgid "Browse..." msgstr "Procházet..." #: ../src/vikfileentry.c:96 msgid "Choose file" msgstr "Výběr souboru" #: ../src/vikfilelist.c:48 msgid "Choose file(s)" msgstr "Výběr souborů" #: ../src/vikfilelist.c:172 msgid "Add..." msgstr "Přidat..." #: ../src/vikfilelist.c:173 msgid "Delete" msgstr "Odstranit" #: ../src/vikgeoreflayer.c:70 msgid "_Georef Move Map" msgstr "_Georef posun mapy" #: ../src/vikgeoreflayer.c:70 msgid "Georef Move Map" msgstr "Georef posun mapy" #: ../src/vikgeoreflayer.c:77 msgid "Georef Z_oom Tool" msgstr "G_eoref přiblížení" #: ../src/vikgeoreflayer.c:77 msgid "Georef Zoom Tool" msgstr "Georef přiblížení" #: ../src/vikgeoreflayer.c:87 msgid "GeoRef Map" msgstr "GeoRef mapa" #: ../src/vikgeoreflayer.c:335 ../src/vikmapslayer.c:685 #, c-format msgid "Couldn't open image file: %s" msgstr "Nelze otevřít soubor s obrázkem: %s" #: ../src/vikgeoreflayer.c:365 msgid "Unexpected end of file reading World file." msgstr "Neočekávaný konec World souboru." #: ../src/vikgeoreflayer.c:381 ../src/vikgeoreflayer.c:426 msgid "Choose World file" msgstr "Vyberte World soubor" #: ../src/vikgeoreflayer.c:394 msgid "The World file you requested could not be opened for reading." msgstr "Vybraný World soubor nelze otevřít pro čtení." #: ../src/vikgeoreflayer.c:439 msgid "The file you requested could not be opened for writing." msgstr "Vybraný World soubor nelze otevřít pro zápis." #: ../src/vikgeoreflayer.c:456 ../src/viklayer.c:480 msgid "Layer Properties" msgstr "Vlastnosti vrstvy" #: ../src/vikgeoreflayer.c:478 msgid "World File Parameters:" msgstr "Parametry World souboru:" #: ../src/vikgeoreflayer.c:479 msgid "Load From File..." msgstr "Načíst ze souboru..." #: ../src/vikgeoreflayer.c:484 msgid "Corner pixel easting:" msgstr "Východní rohový bod:" #: ../src/vikgeoreflayer.c:486 msgid "the UTM \"easting\" value of the upper-right corner pixel of the map" msgstr "UTM \"východní\" hodnota pro pravý horní roh mapy" #: ../src/vikgeoreflayer.c:488 msgid "Corner pixel northing:" msgstr "Severní rohový bod:" #: ../src/vikgeoreflayer.c:490 msgid "the UTM \"northing\" value of the upper-right corner pixel of the map" msgstr "UTM \"severníí\" hodnota pro pravý horní roh mapy" #: ../src/vikgeoreflayer.c:492 msgid "X (easting) scale (mpp): " msgstr "X (východní) měřítko (mmp): " #: ../src/vikgeoreflayer.c:493 msgid "Y (northing) scale (mpp): " msgstr "Y (severní) měřítko (mpp): " #: ../src/vikgeoreflayer.c:496 msgid "the scale of the map in the X direction (meters per pixel)" msgstr "měřítko mapy v ose x (metry na pixel)" #: ../src/vikgeoreflayer.c:498 msgid "the scale of the map in the Y direction (meters per pixel)" msgstr "měřítko mapy v ose y (metry na pixel)" #: ../src/vikgeoreflayer.c:500 msgid "Map Image:" msgstr "Obrázek s mapou:" #. Now with icons #: ../src/vikgeoreflayer.c:608 msgid "_Zoom to Fit Map" msgstr "_Přiblížit do mapy" #: ../src/vikgeoreflayer.c:614 msgid "_Goto Map Center" msgstr "_Jít na střed mapy" #: ../src/vikgeoreflayer.c:620 msgid "_Export to World File" msgstr "_Export jako World File" #: ../src/vikgoto.c:75 msgid "No goto tool available." msgstr "Jít na místo... není dostupné." #: ../src/vikgoto.c:88 ../src/vikgoto.c:107 msgid "goto" msgstr "Jít na" #: ../src/vikgoto.c:90 msgid "I don't know that place. Do you want another goto?" msgstr "Místo nenalezono. Zkusit jiné?" #: ../src/vikgoto.c:109 msgid "goto provider:" msgstr "Jít na... zdroj:" #: ../src/vikgoto.c:124 msgid "Enter address or place name:" msgstr "Zadejte adresu, nebo jméno místa:" #: ../src/vikgpslayer.c:127 msgid "Data Mode" msgstr "Datový režim" #: ../src/vikgpslayer.c:129 msgid "Realtime Tracking Mode" msgstr "Režim sledování pozice" #: ../src/vikgpslayer.c:137 msgid "Keep vehicle at center" msgstr "Držet ve středu obrazovky" #: ../src/vikgpslayer.c:138 msgid "Keep vehicle on screen" msgstr "Držet vozidlo na obrazovce" #: ../src/vikgpslayer.c:139 msgid "Disable" msgstr "Zakázat" #: ../src/vikgpslayer.c:152 msgid "Download Tracks:" msgstr "Stáhnout trasy:" #: ../src/vikgpslayer.c:153 msgid "Upload Tracks:" msgstr "Nahrát trasy:" #: ../src/vikgpslayer.c:154 msgid "Download Routes:" msgstr "Stáhnout trasy:" #: ../src/vikgpslayer.c:155 msgid "Upload Routes:" msgstr "Nahrát trasy:" #: ../src/vikgpslayer.c:156 msgid "Download Waypoints:" msgstr "Stáhnout místa:" #: ../src/vikgpslayer.c:157 msgid "Upload Waypoints:" msgstr "Nahrát místa:" #: ../src/vikgpslayer.c:159 msgid "Recording tracks" msgstr "Zapisuji trasy" #: ../src/vikgpslayer.c:160 msgid "Jump to current position on start" msgstr "Na začátku skočit na aktuální pozici" #: ../src/vikgpslayer.c:161 msgid "Moving Map Method:" msgstr "Posun mapy:" #: ../src/vikgpslayer.c:162 msgid "Gpsd Host:" msgstr "Gpsd host:" #: ../src/vikgpslayer.c:163 msgid "Gpsd Port:" msgstr "Gpsd port:" #: ../src/vikgpslayer.c:164 msgid "Gpsd Retry Interval (seconds):" msgstr "Opakovat připojení k gpsd po (s):" #: ../src/vikgpslayer.c:179 msgid "GPS" msgstr "GPS" #: ../src/vikgpslayer.c:242 ../src/vikgpslayer.c:1258 msgid "GPS Download" msgstr "Stažení z GPS" #: ../src/vikgpslayer.c:242 ../src/vikgpslayer.c:1258 #: ../src/viktrwlayer.c:3094 msgid "GPS Upload" msgstr "Nahrání do GPS" #: ../src/vikgpslayer.c:244 msgid "GPS Realtime Tracking" msgstr "GPS sledování pozice" #: ../src/vikgpslayer.c:451 msgid "Unknown GPS Protocol" msgstr "Neznámý GPS protokol" #: ../src/vikgpslayer.c:469 msgid "Unknown serial port device" msgstr "Neznámé zařízení pro sériový port" #: ../src/vikgpslayer.c:572 #, c-format msgid "%s: unknown parameter" msgstr "%s: neznámý parametr" #. Now with icons #: ../src/vikgpslayer.c:693 msgid "_Upload to GPS" msgstr "Nahrát _do GPS" #: ../src/vikgpslayer.c:699 msgid "Download from _GPS" msgstr "Stáhnout _z GPS" #: ../src/vikgpslayer.c:720 msgid "Empty _Realtime" msgstr "Smazat _sledování pozice" #: ../src/vikgpslayer.c:727 msgid "E_mpty Upload" msgstr "Smazat k nahrání" #: ../src/vikgpslayer.c:733 msgid "_Empty Download" msgstr "Smazat _Download" #: ../src/vikgpslayer.c:739 msgid "Empty _All" msgstr "Smazat _vše" #. #. NB It's not fatal if this gives 2 for example! Hence removal of the g_assert #. This happens when copied GPS layer is deleted (not sure why the number_handlers would be 2) #. I don't think there's any side effects and certainly better than the program just aborting #. #: ../src/vikgpslayer.c:756 #, c-format msgid "Unexpected number of disconnected handlers: %d" msgstr "Neočekávané množství odpojených popisovačů: %d" #: ../src/vikgpslayer.c:898 #, c-format msgid "Uploading %d waypoint..." msgid_plural "Uploading %d waypoints..." msgstr[0] "Nahrávám %d místo..." msgstr[1] "Nahrávám %d místa..." msgstr[2] "Nahrávám %d míst..." #: ../src/vikgpslayer.c:899 #, c-format msgid "Uploading %d trackpoint..." msgid_plural "Uploading %d trackpoints..." msgstr[0] "Nahrávám %d bod" msgstr[1] "Nahrávám %d body" msgstr[2] "Nahrávám %d bodů" #: ../src/vikgpslayer.c:900 #, c-format msgid "Uploading %d routepoint..." msgid_plural "Uploading %d routepoints..." msgstr[0] "Nahrán %d bod..." msgstr[1] "Nahrány %d body..." msgstr[2] "Nahráno %d bodů..." #: ../src/vikgpslayer.c:925 #, c-format msgid "Downloaded %d out of %d waypoint..." msgid_plural "Downloaded %d out of %d waypoints..." msgstr[0] "Staženo %d z %d místa..." msgstr[1] "Staženy %d ze %d míst..." msgstr[2] "Staženo %d z %d míst..." #: ../src/vikgpslayer.c:926 #, c-format msgid "Downloaded %d out of %d trackpoint..." msgid_plural "Downloaded %d out of %d trackpoints..." msgstr[0] "Stažen %d z %d bodu..." msgstr[1] "Staženy %d ze %d bodů..." msgstr[2] "Staženo %d z %d bodů..." #: ../src/vikgpslayer.c:927 #, c-format msgid "Downloaded %d out of %d routepoint..." msgid_plural "Downloaded %d out of %d routepoints..." msgstr[0] "Stažen %d bod z %d bodu..." msgstr[1] "Staženy %d body z %d bodů..." msgstr[2] "Staženy %d bodů z %d bodů..." #: ../src/vikgpslayer.c:932 #, c-format msgid "Uploaded %d out of %d waypoint..." msgid_plural "Uploaded %d out of %d waypoints..." msgstr[0] "Nahráno %d z %d místa" msgstr[1] "Nahráno %d z %d míst" msgstr[2] "Nahráno %d z %d míst" #: ../src/vikgpslayer.c:933 #, c-format msgid "Uploaded %d out of %d trackpoint..." msgid_plural "Uploaded %d out of %d trackpoints..." msgstr[0] "Nahrán %d z %d bodu..." msgstr[1] "Nahráno %d z %d bodů..." msgstr[2] "Nahráno %d z %d bodů..." #: ../src/vikgpslayer.c:934 #, c-format msgid "Uploaded %d out of %d routepoint..." msgid_plural "Uploaded %d out of %d routepoints..." msgstr[0] "Nahráno %d bod z %d bodu..." msgstr[1] "Nahrány %d body ze %d bodů..." msgstr[2] "Nahráno %d bodů z %d bodů..." #: ../src/vikgpslayer.c:942 #, c-format msgid "Downloaded %d waypoint" msgid_plural "Downloaded %d waypoints" msgstr[0] "Staženo %d místo" msgstr[1] "Stažena %d místa" msgstr[2] "Staženo %d míst" #: ../src/vikgpslayer.c:943 #, c-format msgid "Downloaded %d trackpoint" msgid_plural "Downloaded %d trackpoints" msgstr[0] "Stažen %d bod" msgstr[1] "Staženy %d body" msgstr[2] "Staženo %d bodů" #: ../src/vikgpslayer.c:944 #, c-format msgid "Downloaded %d routepoint" msgid_plural "Downloaded %d routepoints" msgstr[0] "Stažen %d bod" msgstr[1] "Staženy %d body" msgstr[2] "Staženo %d bodů" #: ../src/vikgpslayer.c:949 #, c-format msgid "Uploaded %d waypoint" msgid_plural "Uploaded %d waypoints" msgstr[0] "Nahráno %d místo" msgstr[1] "Nahrána %d místa" msgstr[2] "Nahráno %d míst" #: ../src/vikgpslayer.c:950 #, c-format msgid "Uploaded %d trackpoint" msgid_plural "Uploaded %d trackpoints" msgstr[0] "Nahrán %d bod" msgstr[1] "Nahrány %d body" msgstr[2] "Nahráno %d bodů" #: ../src/vikgpslayer.c:951 #, c-format msgid "Uploaded %d routepoint" msgid_plural "Uploaded %d routepoints" msgstr[0] "Nahrán %d bod" msgstr[1] "Nahrány %d body" msgstr[2] "Nahráno %d bodů" #: ../src/vikgpslayer.c:1180 msgid "Error: couldn't find gpsbabel." msgstr "Chyba: gpsbabel nenalezen" #: ../src/vikgpslayer.c:1269 msgid "Warning - GPS Upload items may overwrite each other" msgstr "Varování - nahrávané GPS objekty se mohou vzájemně přepsat" #: ../src/vikgpslayer.c:1301 msgid "Status: detecting gpsbabel" msgstr "Status: hledám gpsbabel" #: ../src/vikgpslayer.c:1332 msgid "No GPS items selected for transfer." msgstr "Nevybrány GPS objekty k přenosu." #: ../src/vikgpslayer.c:1347 msgid "Could not turn off device." msgstr "Vypnutí zařízení selhalo." #: ../src/vikgpslayer.c:1385 msgid "Are you sure you want to delete GPS Upload data?" msgstr "Opravdu chcete odstranit Nahraná GPS data?" #: ../src/vikgpslayer.c:1398 msgid "Are you sure you want to delete GPS Download data?" msgstr "Opravdu chcete odstranit Stažená GPS data?" #: ../src/vikgpslayer.c:1412 msgid "Are you sure you want to delete GPS Realtime data?" msgstr "Opravdu chcete odstranit realtime GPS data?" #: ../src/vikgpslayer.c:1425 msgid "Are you sure you want to delete All GPS data?" msgstr "Opravdu chcete odstranit všechna GPS data?" #: ../src/viklayerspanel.c:55 msgid "/C_ut" msgstr "/Odstranit" #: ../src/viklayerspanel.c:56 msgid "/_Copy" msgstr "/_Kopírovat" #: ../src/viklayerspanel.c:57 msgid "/_Paste" msgstr "/_Vložit" #: ../src/viklayerspanel.c:58 msgid "/_Delete" msgstr "_Smazat" #: ../src/viklayerspanel.c:59 msgid "/New Layer" msgstr "/Nová vrsta" #: ../src/viklayerspanel.c:127 msgid "Top Layer" msgstr "Hlavní vrstva" #: ../src/viklayerspanel.c:143 msgid "Add new layer" msgstr "Přidat novou vrstvu" #: ../src/viklayerspanel.c:150 msgid "Remove selected layer" msgstr "Smazat vrstvu" #: ../src/viklayerspanel.c:157 msgid "Move selected layer up" msgstr "Posunout vrstvu nahoru" #: ../src/viklayerspanel.c:164 msgid "Move selected layer down" msgstr "Posunout vrstvu dolů" #: ../src/viklayerspanel.c:171 msgid "Cut selected layer" msgstr "Vyjmout vrstvu" #: ../src/viklayerspanel.c:178 msgid "Copy selected layer" msgstr "Kopírovat vrstvu" #: ../src/viklayerspanel.c:185 msgid "Paste layer below selected layer" msgstr "Vložit pod vybranou vrstvu" #. TODO: FIXME: if name has a '/' in it it will get all messed up. why not have an itemfactory field with #. name, icon, shortcut, etc.? #: ../src/viklayerspanel.c:204 ../src/vikwindow.c:3292 #, c-format msgid "New _%s Layer" msgstr "nová _%s vrstva" #: ../src/viklayerspanel.c:511 msgid "Aggregate Layers have no settable properties." msgstr "Agregační vrstvy nemají žádná nastavení." #: ../src/viklayerspanel.c:555 msgid "You cannot cut the Top Layer." msgstr "Nelze vyjmout hlavní vrstvu." #: ../src/viklayerspanel.c:600 #, c-format msgid "Are you sure you want to delete %s?" msgstr "Opravdu chcete odstranit %s?" #: ../src/viklayerspanel.c:617 msgid "You cannot delete the Top Layer." msgstr "Nelze odstranit hlavní vrstvu." #: ../src/viklayerspanel.c:701 msgid "Are you sure you wish to delete all layers?" msgstr "Opravdu smazat všechny vrstvy?" #. ******* MAPZOOMS ******** #: ../src/vikmapslayer.c:91 msgid "Use Viking Zoom Level" msgstr "použít aktuální přiblížení mapy" #: ../src/vikmapslayer.c:124 msgid "Map Type:" msgstr "Typ mapy:" #: ../src/vikmapslayer.c:125 msgid "Maps Directory:" msgstr "Adresář pro mapy:" #: ../src/vikmapslayer.c:126 msgid "Alpha:" msgstr "Alfa:" #: ../src/vikmapslayer.c:127 msgid "Control the Alpha value for transparency effects" msgstr "" #: ../src/vikmapslayer.c:128 msgid "Autodownload maps:" msgstr "Stahovat mapy automaticky:" #: ../src/vikmapslayer.c:129 msgid "Autodownload Only Gets Missing Maps:" msgstr "Automaticky stahovat pouze chybějící:" #: ../src/vikmapslayer.c:130 msgid "" "Using this option avoids attempting to update already acquired tiles. This " "can be useful if you want to restrict the network usage, without having to " "resort to manual control. Only applies when 'Autodownload Maps' is on." msgstr "" #: ../src/vikmapslayer.c:131 msgid "Zoom Level:" msgstr "Stupeň přiblížení:" #: ../src/vikmapslayer.c:132 msgid "" "Determines the method of displaying map tiles for the current zoom level. " "'Viking Zoom Level' uses the best matching level, otherwise setting a fixed " "value will always use map tiles of the specified value regardless of the " "actual zoom level." msgstr "" #: ../src/vikmapslayer.c:146 msgid "_Maps Download" msgstr "Stažení _map" #: ../src/vikmapslayer.c:146 msgid "Maps Download" msgstr "Stažení map" #: ../src/vikmapslayer.c:161 msgid "Map" msgstr "Mapa" #: ../src/vikmapslayer.c:249 msgid "Default maplayer directory:" msgstr "Výchozí složka mapové vrstvy:" #: ../src/vikmapslayer.c:249 msgid "Choose a directory to store cached Map tiles for this layer" msgstr "Vyberte složku určenou pro mapy této vrstvy" #: ../src/vikmapslayer.c:505 msgid "Unknown map type" msgstr "Neznámý typ mapy" #: ../src/vikmapslayer.c:516 msgid "Unknown Map Zoom" msgstr "Neznámé přiblížení mapy" #: ../src/vikmapslayer.c:589 #, c-format msgid "" "New map cannot be displayed in the current drawmode.\n" "Select \"%s\" from View menu to view it." msgstr "" "Nová mapa nemůže být zobrazena v tomto režimu.\n" "Vyberte \"%s\" z menu zobrazení." #: ../src/vikmapslayer.c:753 #, c-format msgid "" "Cowardly refusing to draw tiles or existence of tiles beyond %d zoom out " "factor" msgstr "Zbaběle odmítá vykreslit mapové podklady nad stupeň přiblížení %d" #: ../src/vikmapslayer.c:1157 #, c-format msgid "Redownloading up to %d %s map..." msgid_plural "Redownloading up to %d %s maps..." msgstr[0] "Opakované stažení %d %s mapy..." msgstr[1] "Opakované stažení %d %s map..." msgstr[2] "Opakované stažení %d %s map..." #: ../src/vikmapslayer.c:1159 #, c-format msgid "Redownloading %d %s map..." msgid_plural "Redownloading %d %s maps..." msgstr[0] "Opakované stahování %d %s mapy..." msgstr[1] "Opakované stahování %d %s map..." msgstr[2] "Opakované stahování %d %s map..." #: ../src/vikmapslayer.c:1163 ../src/vikmapslayer.c:1238 #, c-format msgid "Downloading %d %s map..." msgid_plural "Downloading %d %s maps..." msgstr[0] "Stahuji %d %s mapu..." msgstr[1] "Stahuji %d %s mapu..." msgstr[2] "Stahuji %d %s mapu..." #: ../src/vikmapslayer.c:1311 #, c-format msgid "" "\n" "Source: %s\n" "\n" "Tile File: %s\n" "Tile File Timestamp: %s" msgstr "" "\n" "zdroj: %s\n" "\n" "soubor dlaždice: %s\n" "časová značka: %s" #: ../src/vikmapslayer.c:1318 #, c-format msgid "" "Source: %s\n" "\n" "No Tile File!" msgstr "" "zdroj: %s\n" "\n" "žádný soubor!" #: ../src/vikmapslayer.c:1356 msgid "Redownload _Bad Map(s)" msgstr "Stáhnout ch_ybné mapy" #: ../src/vikmapslayer.c:1360 msgid "Redownload _New Map(s)" msgstr "Znovu stáhnout _nové mapy" #: ../src/vikmapslayer.c:1364 msgid "Redownload _All Map(s)" msgstr "Znovu stáhnout všechny m_apy" #: ../src/vikmapslayer.c:1368 msgid "_Show Tile Information" msgstr "_zobrazit info o dlaždici" #: ../src/vikmapslayer.c:1449 #, c-format msgid "" "Wrong drawmode for this map.\n" "Select \"%s\" from View menu and try again." msgstr "" "špatný zobrazovací režim pro tento druh mapy.\n" "Vyberte \"%s\" z menu Zobrazení a zkuste znovu." #: ../src/vikmapslayer.c:1454 msgid "Wrong zoom level for this map." msgstr "Špatný stupeň přiblížení pro tuto mapu." #. Now with icons #: ../src/vikmapslayer.c:1485 msgid "Download _Missing Onscreen Maps" msgstr "Stáhnout chybějící _mapy na obrazovce" #: ../src/vikmapslayer.c:1492 msgid "Download _New Onscreen Maps" msgstr "Stáhnout _aktualizované mapy na obrazovce" #: ../src/vikmapslayer.c:1499 msgid "Reload _All Onscreen Maps" msgstr "Znovu stáhnut všechny mapy na obrazovce" #: ../src/viktreeview.c:263 msgid "Layer Name" msgstr "Jméno vrstvy" #: ../src/viktreeview.c:742 #, c-format msgid "delete data from %s\n" msgstr "smazat data z %s\n" #: ../src/viktrwlayer.c:377 msgid "Create _Waypoint" msgstr "vytvořit míst_o" #: ../src/viktrwlayer.c:377 msgid "Create Waypoint" msgstr "Vytvořit místo" #: ../src/viktrwlayer.c:383 msgid "Create _Track" msgstr "vytvořit _trasu" #: ../src/viktrwlayer.c:383 msgid "Create Track" msgstr "Vytvořit trasu" #: ../src/viktrwlayer.c:392 msgid "Create _Route" msgstr "vytvořit" #: ../src/viktrwlayer.c:392 msgid "Create Route" msgstr "Vytvořit trasu" #: ../src/viktrwlayer.c:401 msgid "_Edit Waypoint" msgstr "Změna _místa" #: ../src/viktrwlayer.c:401 msgid "Edit Waypoint" msgstr "Změna místa" #: ../src/viktrwlayer.c:409 msgid "Edit Trac_kpoint" msgstr "Změna _bodu" #: ../src/viktrwlayer.c:409 msgid "Edit Trackpoint" msgstr "Změna bodu" #: ../src/viktrwlayer.c:417 msgid "Show P_icture" msgstr "Zobrazit _obrázek" #: ../src/viktrwlayer.c:417 msgid "Show Picture" msgstr "Ukázat obrázek" #: ../src/viktrwlayer.c:424 msgid "Route _Finder" msgstr "Nalézt _trasu" #: ../src/viktrwlayer.c:424 msgid "Route Finder" msgstr "Vyhledání cesty" #. ***** PARAMETERS ***** #: ../src/viktrwlayer.c:447 ../src/viktrwlayer.c:1942 #: ../src/viktrwlayer.c:1944 msgid "Waypoints" msgstr "Místa" #: ../src/viktrwlayer.c:447 ../src/viktrwlayer.c:1933 #: ../src/viktrwlayer.c:1935 msgid "Tracks" msgstr "Trasy" #: ../src/viktrwlayer.c:447 msgid "Waypoint Images" msgstr "Obrázky míst" #: ../src/viktrwlayer.c:450 msgid "Draw by Track" msgstr "Barva dle trasy" #: ../src/viktrwlayer.c:450 msgid "Draw by Speed" msgstr "dle rychlosti" #: ../src/viktrwlayer.c:450 msgid "All Tracks Same Color" msgstr "Všechny stejná barva" #: ../src/viktrwlayer.c:451 msgid "Filled Square" msgstr "Plný čtverec" #: ../src/viktrwlayer.c:451 msgid "Square" msgstr "Čtverec" #: ../src/viktrwlayer.c:451 msgid "Circle" msgstr "Kruh" #: ../src/viktrwlayer.c:451 msgid "X" msgstr "X" #: ../src/viktrwlayer.c:477 msgid "Extra Extra Small" msgstr "nejmenší" #: ../src/viktrwlayer.c:478 msgid "Extra Small" msgstr "menší" #: ../src/viktrwlayer.c:479 msgid "Small" msgstr "malý" #: ../src/viktrwlayer.c:480 msgid "Medium" msgstr "střední" #: ../src/viktrwlayer.c:481 msgid "Large" msgstr "větší" #: ../src/viktrwlayer.c:482 msgid "Extra Large" msgstr "velký" #: ../src/viktrwlayer.c:483 msgid "Extra Extra Large" msgstr "největší" #: ../src/viktrwlayer.c:491 msgid "Track Drawing Mode:" msgstr "Režim vykreslení trasy:" #: ../src/viktrwlayer.c:492 msgid "All Tracks Color:" msgstr "Barva všech:" #: ../src/viktrwlayer.c:493 msgid "The color used when 'All Tracks Same Color' drawing mode is selected" msgstr "" "Vybraná barva je použita pokud je zvolen režim 'Všechny stejná barva'" #: ../src/viktrwlayer.c:494 msgid "Draw Track Lines" msgstr "Zobrazit trasu" #: ../src/viktrwlayer.c:495 msgid "Track Thickness:" msgstr "Tloušťka trasy" #: ../src/viktrwlayer.c:496 msgid "Draw Track Direction" msgstr "Vykreslit směr" #: ../src/viktrwlayer.c:497 msgid "Direction Size:" msgstr "Velikost značky směru:" #: ../src/viktrwlayer.c:498 msgid "Draw Trackpoints" msgstr "Zobrazit body" #: ../src/viktrwlayer.c:499 msgid "Trackpoint Size:" msgstr "Velikost bodu:" #: ../src/viktrwlayer.c:500 msgid "Draw Elevation" msgstr "Vykreslit výšku" #: ../src/viktrwlayer.c:501 msgid "Draw Elevation Height %:" msgstr "Míra zobrazení výšky %:" #: ../src/viktrwlayer.c:503 msgid "Draw Stops" msgstr "Vykreslit zastávky" #: ../src/viktrwlayer.c:504 msgid "" "Whether to draw a marker when trackpoints are at the same position but over " "the minimum stop length apart in time" msgstr "" #: ../src/viktrwlayer.c:505 msgid "Min Stop Length (seconds):" msgstr "Min. délka zastávky (sekund):" #: ../src/viktrwlayer.c:507 msgid "Track BG Thickness:" msgstr "Pozadí tlouštky trasy:" #: ../src/viktrwlayer.c:508 msgid "Track Background Color" msgstr "Barva pozadí trasy" #: ../src/viktrwlayer.c:509 msgid "Draw by Speed Factor (%):" msgstr "Míra zobrazení rychlosti (%):" #: ../src/viktrwlayer.c:510 msgid "" "The percentage factor away from the average speed determining the color used" msgstr "Poměr v % určující barvu vzhledem k průměrné hodnotě" #: ../src/viktrwlayer.c:512 msgid "Draw Labels" msgstr "Kreslit popisky" #: ../src/viktrwlayer.c:513 msgid "Waypoint Font Size:" msgstr "Velikost fontu místa:" #: ../src/viktrwlayer.c:514 msgid "Waypoint Color:" msgstr "Barva místa:" #: ../src/viktrwlayer.c:515 msgid "Waypoint Text:" msgstr "Text místa:" #: ../src/viktrwlayer.c:516 msgid "Background:" msgstr "Pozadí:" #: ../src/viktrwlayer.c:517 msgid "Fake BG Color Translucency:" msgstr "pozadí částečně průhledné:" #: ../src/viktrwlayer.c:518 msgid "Waypoint marker:" msgstr "Označení místa:" #: ../src/viktrwlayer.c:519 msgid "Waypoint size:" msgstr "Velikost označení:" #: ../src/viktrwlayer.c:520 msgid "Draw Waypoint Symbols:" msgstr "Vykreslit symboly míst:" #: ../src/viktrwlayer.c:522 msgid "Draw Waypoint Images" msgstr "Vykreslit obrázky míst" #: ../src/viktrwlayer.c:523 msgid "Image Size (pixels):" msgstr "Veliost obrázku (pixely):" #: ../src/viktrwlayer.c:524 msgid "Image Alpha:" msgstr "Alfa obrázku:" #: ../src/viktrwlayer.c:525 msgid "Image Memory Cache Size:" msgstr "Velikost cache paměti obrázků:" #: ../src/viktrwlayer.c:610 msgid "TrackWaypoint" msgstr "Místo v záznamu" #: ../src/viktrwlayer.c:1951 ../src/viktrwlayer.c:1953 msgid "Routes" msgstr "Trasy" #: ../src/viktrwlayer.c:2144 #, c-format msgid " in %d:%02d hrs:mins" msgstr " za %d:%02d hod:min" #: ../src/viktrwlayer.c:2148 #, c-format msgid "" "\n" "%sTotal Length %.1f %s%s" msgstr "" "\n" "%sCelková vzdálenost %.1f %s%s" #: ../src/viktrwlayer.c:2154 #, c-format msgid "Tracks: %d - Waypoints: %d - Routes: %d%s" msgstr "Záznamy: %d - Místa: %d - Trasy: %d%s" #: ../src/viktrwlayer.c:2174 #, c-format msgid "Tracks: %d" msgstr "Záznamy: %d" #: ../src/viktrwlayer.c:2184 #, c-format msgid "Routes: %d" msgstr "Trasy: %d" #: ../src/viktrwlayer.c:2215 #, c-format msgid "- %d:%02d hrs:mins" msgstr "- %d:%02d hod:min" #: ../src/viktrwlayer.c:2223 #, c-format msgid "%s%.1f km %s" msgstr "%s%.1f km %s" #: ../src/viktrwlayer.c:2226 #, c-format msgid "%s%.1f miles %s" msgstr "%s%.1f mil %s" #: ../src/viktrwlayer.c:2240 #, c-format msgid "Waypoints: %d" msgstr "Místa: %d" #: ../src/viktrwlayer.c:2266 #, c-format msgid "Trkpt: Alt %dft" msgstr "Trkpt: Alt %dft" #. VIK_UNITS_HEIGHT_METRES: #: ../src/viktrwlayer.c:2270 #, c-format msgid "Trkpt: Alt %dm" msgstr "Trkpt: Alt %dm" #. Compact date time format #: ../src/viktrwlayer.c:2277 #, c-format msgid " | Time %x %X" msgstr " | Time %x %X" #: ../src/viktrwlayer.c:2295 #, c-format msgid " | Track: %s" msgstr " | Track: %s" #. Combine parts to make overall message #: ../src/viktrwlayer.c:2299 #, c-format msgid "%s%s | %s %s %s" msgstr "%s%s | %s %s %s" #: ../src/viktrwlayer.c:2314 #, c-format msgid "Wpt: Alt %dft" msgstr "Wpt: Alt %dft" #. VIK_UNITS_HEIGHT_METRES: #: ../src/viktrwlayer.c:2318 #, c-format msgid "Wpt: Alt %dm" msgstr "Wpt: Alt %dm" #. Add comment if available #: ../src/viktrwlayer.c:2333 #, c-format msgid "%s | %s %s | Comment: %s" msgstr "%s | %s %s | Comment: %s" #: ../src/viktrwlayer.c:2335 #, c-format msgid "%s | %s %s" msgstr "%s | %s %s" #: ../src/viktrwlayer.c:2563 ../src/viktrwlayer.c:2634 msgid "This layer has no waypoints or trackpoints." msgstr "Ve vrstvě nejsou body ani místa." #: ../src/viktrwlayer.c:2661 ../src/vikwindow.c:2407 ../src/vikwindow.c:2848 #, c-format msgid "The file \"%s\" exists, do you wish to overwrite it?" msgstr "Soubor \"%s\" existuje, přepsat?" #: ../src/viktrwlayer.c:2671 ../src/vikwindow.c:2429 msgid "The filename you requested could not be opened for writing." msgstr "Soubor nemůže být otevřen k zápisu." #: ../src/viktrwlayer.c:2676 ../src/viktrwlayer.c:2681 #: ../src/viktrwlayer.c:2691 ../src/viktrwlayer.c:2703 msgid "Export Layer" msgstr "Export vrstvy jako..." #: ../src/viktrwlayer.c:2720 msgid "Could not create temporary file for export." msgstr "Nelze vytvořit dočasný soubor s exportem." #: ../src/viktrwlayer.c:2729 #, c-format msgid "Could not launch %s." msgstr "Nelze spustit %s." #: ../src/viktrwlayer.c:2773 msgid "Export Track as GPX" msgstr "Exportovat trasu jako GPX" #: ../src/viktrwlayer.c:2795 msgid "Find" msgstr "Hledat" #: ../src/viktrwlayer.c:2805 msgid "Waypoint Name:" msgstr "Jméno místa:" #: ../src/viktrwlayer.c:2822 msgid "Waypoint not found in this layer." msgstr "Místo není v této vrstvě" #: ../src/viktrwlayer.c:3090 msgid "Can not upload invisible track." msgstr "Nelze nahrát neviditelný záznam." #: ../src/viktrwlayer.c:3192 ../src/viktrwlayer.c:7785 msgid "Track" msgstr "Trasa" #: ../src/viktrwlayer.c:3215 ../src/viktrwlayer.c:7817 msgid "Route" msgstr "Trasa" #: ../src/viktrwlayer.c:3296 ../src/viktrwlayer.c:6265 #: ../src/viktrwlayer.c:6314 msgid "_Finish Route" msgstr "Ukončit _trasu" #: ../src/viktrwlayer.c:3298 ../src/viktrwlayer.c:6223 #: ../src/viktrwlayer.c:6312 msgid "_Finish Track" msgstr "Ukončit _záznam" #. Now with icons #: ../src/viktrwlayer.c:3310 msgid "_View Layer" msgstr "Zobrazit v_rstvu" #: ../src/viktrwlayer.c:3317 msgid "V_iew" msgstr "_Zobrazení" #: ../src/viktrwlayer.c:3323 msgid "View All _Tracks" msgstr "Zobrazit všechny _záznamy" #: ../src/viktrwlayer.c:3328 msgid "View All _Routes" msgstr "Zobrazit všechny _trasy" #: ../src/viktrwlayer.c:3333 msgid "View All _Waypoints" msgstr "Z_obrazit všechna místa" #: ../src/viktrwlayer.c:3338 msgid "_Goto Center of Layer" msgstr "_Jít na střed vrstvy" #: ../src/viktrwlayer.c:3344 ../src/viktrwlayer.c:6199 msgid "Goto _Waypoint..." msgstr "Jít na _místo..." #: ../src/viktrwlayer.c:3350 msgid "_Export Layer" msgstr "_Export vstvy" #: ../src/viktrwlayer.c:3356 msgid "Export as GPS_Point..." msgstr "Export GPS_Point..." #: ../src/viktrwlayer.c:3361 msgid "Export as GPS_Mapper..." msgstr "Export GPS_Mapper..." #: ../src/viktrwlayer.c:3366 msgid "Export as _GPX..." msgstr "Export _GPX..." #: ../src/viktrwlayer.c:3371 msgid "Export as _KML..." msgstr "Export _KML..." #: ../src/viktrwlayer.c:3376 msgid "Open with External Program_1: " msgstr "Otevřít externím Programem _1: " #: ../src/viktrwlayer.c:3383 msgid "Open with External Program_2: " msgstr "Otevřít externím Programem _2: " #: ../src/viktrwlayer.c:3391 ../src/vikwindow.c:3145 msgid "_New" msgstr "_Nový" #: ../src/viktrwlayer.c:3397 msgid "New _Waypoint..." msgstr "Nové míst_o..." #: ../src/viktrwlayer.c:3403 msgid "New _Track" msgstr "Nový _záznam" #: ../src/viktrwlayer.c:3411 msgid "New _Route" msgstr "Nová _trasa" #: ../src/viktrwlayer.c:3420 ../src/viktrwlayer.c:6597 msgid "Geotag _Images..." msgstr "Geotagovat _obrázky..." #: ../src/viktrwlayer.c:3427 msgid "_Acquire" msgstr "Získ_at" #: ../src/viktrwlayer.c:3433 ../src/vikwindow.c:3150 msgid "From _GPS..." msgstr "z _GPS..." #: ../src/viktrwlayer.c:3439 msgid "From Google _Directions..." msgstr "trasu z _Google directions" #: ../src/viktrwlayer.c:3446 msgid "From _OSM Traces..." msgstr "From _OSM tras..." #: ../src/viktrwlayer.c:3451 msgid "From _My OSM Traces..." msgstr "z _mých OSM záznamů" #: ../src/viktrwlayer.c:3459 ../src/vikwindow.c:3166 msgid "From _Wikipedia Waypoints" msgstr "z míst na _Wikipedii" #: ../src/viktrwlayer.c:3465 msgid "Within _Layer Bounds" msgstr "Ve vrstvě" #: ../src/viktrwlayer.c:3471 msgid "Within _Current View" msgstr "V aktuálním pohledu" #: ../src/viktrwlayer.c:3479 msgid "From Geo_caching..." msgstr "Z Geo_caching..." #: ../src/viktrwlayer.c:3486 ../src/vikwindow.c:3163 msgid "From Geotagged _Images..." msgstr "Z Geotaggovaných _obrázků..." #: ../src/viktrwlayer.c:3492 msgid "From _File..." msgstr "ze _souboru..." #: ../src/viktrwlayer.c:3498 ../src/viktrwlayer.c:6542 msgid "_Upload" msgstr "_Nahrát" #: ../src/viktrwlayer.c:3504 msgid "Upload to _GPS..." msgstr "do _GPS..." #: ../src/viktrwlayer.c:3511 ../src/viktrwlayer.c:6570 msgid "Upload to _OSM..." msgstr "Nahrát do _OSM..." #: ../src/viktrwlayer.c:3519 msgid "De_lete" msgstr "_Odstranit" #: ../src/viktrwlayer.c:3525 msgid "Delete All _Tracks" msgstr "Smazat všechny _trasy" #: ../src/viktrwlayer.c:3531 msgid "Delete Tracks _From Selection..." msgstr "Smazat všechny _vybrané trasy" #: ../src/viktrwlayer.c:3537 ../src/viktrwlayer.c:6290 msgid "Delete _All Routes" msgstr "Smazat _všechny záznamy" #: ../src/viktrwlayer.c:3543 ../src/viktrwlayer.c:6296 msgid "_Delete Routes From Selection..." msgstr "_Smazat vybrané záznamy" #: ../src/viktrwlayer.c:3549 msgid "Delete All _Waypoints" msgstr "Smazat všechna místa" #: ../src/viktrwlayer.c:3555 msgid "Delete Waypoints From _Selection..." msgstr "Odstranit místa z výběru..." #: ../src/viktrwlayer.c:4128 #, c-format msgid "Are you sure you want to delete all tracks in %s?" msgstr "Opravdu chcete odstranit všechny trasy v %s?" #: ../src/viktrwlayer.c:4138 #, c-format msgid "Are you sure you want to delete all routes in %s?" msgstr "Opravdu smazat všechny záznamy v %s?" #: ../src/viktrwlayer.c:4148 #, c-format msgid "Are you sure you want to delete all waypoints in %s?" msgstr "Opravdu chcete odstranit všechna místa v %s?" #: ../src/viktrwlayer.c:4165 #, c-format msgid "Are you sure you want to delete the waypoint \"%s\"" msgstr "Opravdu chcete odstranit místo \"%s\"?" #: ../src/viktrwlayer.c:4178 #, c-format msgid "Are you sure you want to delete the track \"%s\"" msgstr "Opravdu chcete odstranit trasu \"%s\"?" #: ../src/viktrwlayer.c:4191 #, c-format msgid "Are you sure you want to delete the route \"%s\"" msgstr "Opravdu smazat záznam \"%s\"" #: ../src/viktrwlayer.c:4351 ../src/viktrwlayer.c:4922 msgid "" "Converting a track to a route removes extra track data such as segments, " "timestamps, etc...\n" "Do you want to continue?" msgstr "" "Konverze na trasu odebere některé vlastnosti záznamu jako třeba úseky, " "časové značky atp... Chcete pokračovat?" #: ../src/viktrwlayer.c:4711 msgid "Failed. No other tracks with timestamps in this layer found" msgstr "Chyba: Žádná další trasa s časovými údaji v této vrstvě" #: ../src/viktrwlayer.c:4713 msgid "Failed. No other tracks without timestamps in this layer found" msgstr "Chyba: Žádná další trasa bez časových údajů v této vrstvě" #: ../src/viktrwlayer.c:4732 msgid "Merge with..." msgstr "Připojit s ..," #: ../src/viktrwlayer.c:4733 msgid "Select route to merge with" msgstr "Vyberte záznam k připojení" #: ../src/viktrwlayer.c:4733 msgid "Select track to merge with" msgstr "Vybrat trasu k připojení" #: ../src/viktrwlayer.c:4818 ../src/viktrwlayer.c:4895 msgid "Append Route" msgstr "Připojit trasu" #: ../src/viktrwlayer.c:4818 ../src/viktrwlayer.c:4895 msgid "Append Track" msgstr "Připojit záznam" #: ../src/viktrwlayer.c:4819 msgid "Select the route to append after the current route" msgstr "Vyberte trasu, kterou připojit za aktuální trasu" #: ../src/viktrwlayer.c:4820 msgid "Select the track to append after the current track" msgstr "Vyberte záznam, který připojit za aktuální záznam" #: ../src/viktrwlayer.c:4896 msgid "Select the track to append after the current route" msgstr "Vyberte záznam, který připojit za aktuální trasu" #: ../src/viktrwlayer.c:4897 msgid "Select the route to append after the current track" msgstr "Vyberte trasu, kterou připojit za aktuální záznam" #: ../src/viktrwlayer.c:4957 #, c-format msgid "%d segment merged" msgid_plural "%d segments merged" msgstr[0] "%d úsek připojen" msgstr[1] "%d úseky připojeny" msgstr[2] "%d úseků připojeno" #: ../src/viktrwlayer.c:4973 msgid "Failed. This track does not have timestamp" msgstr "Selhalo. Trasa neobsahuje časové údaje" #: ../src/viktrwlayer.c:4985 msgid "Failed. No other track in this layer has timestamp" msgstr "Selhalo. Žádná trasa v této vstvě neobsahuje časové údaje" #: ../src/viktrwlayer.c:4992 msgid "Merge Threshold..." msgstr "Práh pro spojování..." #: ../src/viktrwlayer.c:4993 msgid "Merge when time between tracks less than:" msgstr "Připojit trasy pokud je dělí méně než:" #: ../src/viktrwlayer.c:5128 msgid "Split Threshold..." msgstr "Práh pro rozdělování..." #: ../src/viktrwlayer.c:5129 msgid "Split when time between trackpoints exceeds:" msgstr "Rozdělit pokud je čas mezi body delší než:" #: ../src/viktrwlayer.c:5205 msgid "Split Every Nth Point" msgstr "Rodělit každý x-tý bod" #: ../src/viktrwlayer.c:5206 msgid "Split on every Nth point:" msgstr "Rodělit každý x-tý bod:" #: ../src/viktrwlayer.c:5312 msgid "Can not split track as it has no segments" msgstr "Nelze rozdělit záznam, nemá žádné úseky" #: ../src/viktrwlayer.c:5340 ../src/viktrwlayer.c:5370 #, c-format msgid "Deleted %ld point" msgid_plural "Deleted %ld points" msgstr[0] "Smazán %ld bod" msgstr[1] "Smazány %ld body" msgstr[2] "Smazáno %ld bodů" #: ../src/viktrwlayer.c:5531 msgid "Internal Error in vik_trw_layer_uniquify_tracks" msgstr "Interní chyba v vik_trw_layer_uniquify_tracks" #: ../src/viktrwlayer.c:5588 ../src/viktrwlayer.c:5635 #: ../src/viktrwlayer.c:5814 msgid "" "Multiple entries with the same name exist. This method only works with " "unique names. Force unique names now?" msgstr "" "Existuje několik položek se stejným jménem. Tento kód pracuje pouze s " "jednoznačnými jmény. Přejmenovat na unikátní?" #: ../src/viktrwlayer.c:5599 msgid "No tracks found" msgstr "Nenalezeny žádné trasy" #: ../src/viktrwlayer.c:5607 ../src/viktrwlayer.c:5654 #: ../src/viktrwlayer.c:5834 msgid "Delete Selection" msgstr "Smazat výběr" #: ../src/viktrwlayer.c:5608 msgid "Select tracks to delete" msgstr "Vyberte trasy k odstranění" #: ../src/viktrwlayer.c:5646 msgid "No routes found" msgstr "Žádné záznamy nenalezeny" #: ../src/viktrwlayer.c:5655 msgid "Select routes to delete" msgstr "Vyberte záznamy ke smazání" #: ../src/viktrwlayer.c:5761 msgid "Internal Error in vik_trw_layer_uniquify_waypoints" msgstr "Interní chyba v vik_trw_layer_uniquify_waypoints" #: ../src/viktrwlayer.c:5824 msgid "No waypoints found" msgstr "Žádná místa nenalezena" #: ../src/viktrwlayer.c:5835 msgid "Select waypoints to delete" msgstr "Vyberte místa k odstranění" #: ../src/viktrwlayer.c:5896 #, c-format msgid "" "A waypoint with the name \"%s\" already exists. Really rename to the same " "name?" msgstr "Místo z názvem \"%s\" již existuje, opravdu pojmenovat stejně?" #: ../src/viktrwlayer.c:5926 #, c-format msgid "" "A track with the name \"%s\" already exists. Really rename to the same name?" msgstr "Záznam s názvem \"%s\" již existuje, opravdu pojmenovat stejně?" #: ../src/viktrwlayer.c:5963 #, c-format msgid "" "A route with the name \"%s\" already exists. Really rename to the same name?" msgstr "Trasa s názvem \"%s\" již existuje, opravdu pojmenovat stejně?" #: ../src/viktrwlayer.c:6085 ../src/viktrwlayer.c:6337 msgid "_Goto" msgstr "_Jít na" #: ../src/viktrwlayer.c:6104 msgid "_Visit Geocache Webpage" msgstr "_Jít na stránku Geocache" #: ../src/viktrwlayer.c:6123 msgid "_Show Picture..." msgstr "_Zobrazit obrázek..." #: ../src/viktrwlayer.c:6131 msgid "Update Geotag on _Image" msgstr "Aktual_izovat geotagování obrázku" #: ../src/viktrwlayer.c:6137 msgid "_Update" msgstr "Akt_ualizovat" #: ../src/viktrwlayer.c:6142 msgid "Update and _Keep File Timestamp" msgstr "Aktualizovat a _zachovat čas změny souborů" #: ../src/viktrwlayer.c:6153 msgid "Visit _Webpage" msgstr "Navštivte _stránku" #: ../src/viktrwlayer.c:6184 msgid "_New Waypoint..." msgstr "_Nové místo..." #: ../src/viktrwlayer.c:6193 msgid "_View All Waypoints" msgstr "Zobrazit _všechna místa" #: ../src/viktrwlayer.c:6205 msgid "Delete _All Waypoints" msgstr "Smazat všechn_a místa" #: ../src/viktrwlayer.c:6211 msgid "_Delete Waypoints From Selection..." msgstr "Smazat všechna _vybraná místa" #: ../src/viktrwlayer.c:6233 msgid "_View All Tracks" msgstr "Zobrazit _všechny trasy" #: ../src/viktrwlayer.c:6239 msgid "_New Track" msgstr "Nový _záznam" #: ../src/viktrwlayer.c:6247 msgid "Delete _All Tracks" msgstr "_Odstranit všechny trasy" #: ../src/viktrwlayer.c:6253 msgid "_Delete Tracks From Selection..." msgstr "Odstranit všechny _vybrané trasy" #: ../src/viktrwlayer.c:6276 msgid "_View All Routes" msgstr "Zobrazit všechny _trasy" #: ../src/viktrwlayer.c:6282 msgid "_New Route" msgstr "Nová _trasa" #: ../src/viktrwlayer.c:6327 msgid "_View Track" msgstr "Zobrazit _trasu" #: ../src/viktrwlayer.c:6329 msgid "_View Route" msgstr "Zobrazit _trasu" #: ../src/viktrwlayer.c:6343 msgid "_Startpoint" msgstr "_začátek" #: ../src/viktrwlayer.c:6349 msgid "\"_Center\"" msgstr "\"_střed\"" #: ../src/viktrwlayer.c:6355 msgid "_Endpoint" msgstr "_konec" #: ../src/viktrwlayer.c:6361 msgid "_Highest Altitude" msgstr "_maximální výšku" #: ../src/viktrwlayer.c:6367 msgid "_Lowest Altitude" msgstr "_nejnižší bod" #: ../src/viktrwlayer.c:6375 msgid "_Maximum Speed" msgstr "nejvyššší _rychlost" #: ../src/viktrwlayer.c:6384 msgid "Co_mbine" msgstr "Spojit" #: ../src/viktrwlayer.c:6392 msgid "_Merge By Time..." msgstr "_Spojit dle času..." #: ../src/viktrwlayer.c:6397 msgid "Merge _Segments" msgstr "Spojit úseky" #: ../src/viktrwlayer.c:6403 msgid "Merge _With Other Tracks..." msgstr "Připojit _další trasy..." #: ../src/viktrwlayer.c:6409 msgid "_Append Track..." msgstr "Připojit _záznam..." #: ../src/viktrwlayer.c:6411 msgid "_Append Route..." msgstr "Připojit _trasu..." #: ../src/viktrwlayer.c:6417 msgid "Append _Route..." msgstr "Připojit _trasu..." #: ../src/viktrwlayer.c:6419 msgid "Append _Track..." msgstr "Připojit _záznam..." #: ../src/viktrwlayer.c:6426 msgid "_Split" msgstr "_Rozdělit" #: ../src/viktrwlayer.c:6434 msgid "_Split By Time..." msgstr "_Rozdělit dle času..." #. ATM always enable this entry - don't want to have to analyse the track before displaying the menu - to keep the menu speedy #: ../src/viktrwlayer.c:6440 msgid "Split Se_gments" msgstr "Rozdělit ú_seky" #: ../src/viktrwlayer.c:6446 msgid "Split By _Number of Points..." msgstr "Rozdělit dle počtu bodů..." #: ../src/viktrwlayer.c:6451 msgid "Split at _Trackpoint" msgstr "Rozdělit v _místech" #: ../src/viktrwlayer.c:6460 msgid "Delete Poi_nts" msgstr "Smazat bo_dy" #: ../src/viktrwlayer.c:6466 msgid "Delete Points With The Same _Position" msgstr "Smazat body na stejné _pozici" #: ../src/viktrwlayer.c:6471 msgid "Delete Points With The Same _Time" msgstr "Smazat body se stejným č_asem" #: ../src/viktrwlayer.c:6477 msgid "_Reverse Track" msgstr "_Otočit trasu" #: ../src/viktrwlayer.c:6479 msgid "_Reverse Route" msgstr "_Otočit trasu" #: ../src/viktrwlayer.c:6488 msgid "Down_load Maps Along Track..." msgstr "Stáhnout mapy _podél trasy" #: ../src/viktrwlayer.c:6490 msgid "Down_load Maps Along Route..." msgstr "Stáhnout mapy oko_lo trasy" #: ../src/viktrwlayer.c:6497 msgid "_Apply DEM Data" msgstr "Přidat výšku z D_EM dat" #: ../src/viktrwlayer.c:6504 msgid "_Export Track as GPX..." msgstr "Export _záznam jako GPX..." #: ../src/viktrwlayer.c:6506 msgid "_Export Route as GPX..." msgstr "Export _trasy jako GPX..." #: ../src/viktrwlayer.c:6513 msgid "E_xtend Track End" msgstr "Rozšířit _konec trasy" #: ../src/viktrwlayer.c:6515 msgid "E_xtend Route End" msgstr "Po_kračovat v trase" #: ../src/viktrwlayer.c:6522 msgid "C_onvert to a Route" msgstr "Konverze na _trasu" #: ../src/viktrwlayer.c:6524 msgid "C_onvert to a Track" msgstr "Konverze na _záznam" #: ../src/viktrwlayer.c:6532 msgid "Extend _Using Route Finder" msgstr "Prodloužit _pomocí hledání cesty" #: ../src/viktrwlayer.c:6548 msgid "_Upload to GPS..." msgstr "_Nahrát do GPS..." #: ../src/viktrwlayer.c:6559 msgid "_View Google Directions" msgstr "_Zobrazit trasu dle Google" #: ../src/viktrwlayer.c:6579 msgid "Use with _Filter" msgstr "Použít _filtr" #: ../src/viktrwlayer.c:6612 msgid "_Edit Trackpoint" msgstr "_Upravit bod" #: ../src/viktrwlayer.c:7524 #, c-format msgid " - Gain %dm:Loss %dm" msgstr " - Gain %dm:Loss %dm" #: ../src/viktrwlayer.c:7526 #, c-format msgid " - Gain %dft:Loss %dft" msgstr " - Gain %dft:Loss %dft" #: ../src/viktrwlayer.c:7531 #, c-format msgid " - Bearing %3.1f° - Step %s" msgstr " - Bearing %3.1f° - krok %s" #: ../src/viktrwlayer.c:8124 #, c-format msgid "Could not launch %s to open file." msgstr "Nelze spustit %s pro otevření souboru." #: ../src/viktrwlayer.c:8205 #, c-format msgid "Creating %d Image Thumbnails..." msgstr "Vytvářím %d náhledy obrázků..." #: ../src/viktrwlayer.c:8524 msgid "No map layer in use. Create one first" msgstr "Je třeba vytvořit mapovou vrstvu." #: ../src/viktrwlayer_propwin.c:898 ../src/viktrwlayer_propwin.c:1155 #, c-format msgid "%.1f kph" msgstr "%.1f kph" #: ../src/viktrwlayer_propwin.c:901 ../src/viktrwlayer_propwin.c:1158 #, c-format msgid "%.1f mph" msgstr "%.1f mph" #: ../src/viktrwlayer_propwin.c:904 ../src/viktrwlayer_propwin.c:1161 #, c-format msgid "%.1f knots" msgstr "%.1f knots" #. VIK_UNITS_SPEED_METRES_PER_SECOND: #: ../src/viktrwlayer_propwin.c:908 ../src/viktrwlayer_propwin.c:1165 #, c-format msgid "%.1f m/s" msgstr "%.1f m/s" #: ../src/viktrwlayer_propwin.c:1745 #, c-format msgid "%.1f miles" msgstr "%.1f miles" #: ../src/viktrwlayer_propwin.c:1747 #, c-format msgid "%.1f km" msgstr "%.1f km" #: ../src/viktrwlayer_propwin.c:2681 msgid "Failed spliting track. Track unchanged" msgstr "Chyba při rozdělení trasy. Trasa nezměněna." #: ../src/viktrwlayer_propwin.c:2779 ../src/viktrwlayer_propwin.c:3178 #, c-format msgid "%s - Track Properties" msgstr "%s - vlastnosti trasy" #: ../src/viktrwlayer_propwin.c:2784 msgid "Split at _Marker" msgstr "Rozdělit na _značce" #: ../src/viktrwlayer_propwin.c:2785 msgid "Split _Segments" msgstr "Rozdělit segmety" #: ../src/viktrwlayer_propwin.c:2786 msgid "_Reverse" msgstr "O_brátit" #: ../src/viktrwlayer_propwin.c:2787 msgid "_Delete Dupl." msgstr "Smazat _duplicitní" #: ../src/viktrwlayer_propwin.c:2813 msgid "Comment:" msgstr "Komentář:" #: ../src/viktrwlayer_propwin.c:2814 msgid "Description:" msgstr "Popis:" #: ../src/viktrwlayer_propwin.c:2815 msgid "Track Length:" msgstr "Délka trasy:" #: ../src/viktrwlayer_propwin.c:2816 msgid "Trackpoints:" msgstr "Body:" #: ../src/viktrwlayer_propwin.c:2817 msgid "Segments:" msgstr "Segmenty:" #: ../src/viktrwlayer_propwin.c:2818 msgid "Duplicate Points:" msgstr "Zdvojené body:" #: ../src/viktrwlayer_propwin.c:2819 msgid "Max Speed:" msgstr "Nejvyšší rychlost:" #: ../src/viktrwlayer_propwin.c:2820 msgid "Avg. Speed:" msgstr "Průměrná rychlost:" #: ../src/viktrwlayer_propwin.c:2821 msgid "Moving Avg. Speed:" msgstr "Průměrná rychlost pohybu:" #: ../src/viktrwlayer_propwin.c:2822 msgid "Avg. Dist. Between TPs:" msgstr "Průměrná vzdálenost mezi body:" #: ../src/viktrwlayer_propwin.c:2823 msgid "Elevation Range:" msgstr "Rozsah nadmořské výšky:" #: ../src/viktrwlayer_propwin.c:2824 msgid "Total Elevation Gain/Loss:" msgstr "Celkové stoupání/klesání:" #: ../src/viktrwlayer_propwin.c:2825 msgid "Start:" msgstr "Začátek:" #: ../src/viktrwlayer_propwin.c:2826 msgid "End:" msgstr "Konec:" #: ../src/viktrwlayer_propwin.c:2827 msgid "Duration:" msgstr "Trvání:" #: ../src/viktrwlayer_propwin.c:2828 msgid "Color:" msgstr "Barva:" #: ../src/viktrwlayer_propwin.c:2877 ../src/viktrwlayer_propwin.c:2901 #: ../src/viktrwlayer_propwin.c:2929 ../src/viktrwlayer_propwin.c:2966 #: ../src/viktrwlayer_propwin.c:2984 ../src/viktrwlayer_propwin.c:3034 #: ../src/viktrwlayer_propwin.c:3035 ../src/viktrwlayer_propwin.c:3036 #: ../src/viktrwlayer_propwin.c:3062 ../src/viktrwlayer_propwin.c:3063 #: ../src/viktrwlayer_propwin.c:3078 ../src/viktrwlayer_propwin.c:3079 #: ../src/viktrwlayer_propwin.c:3092 ../src/viktrwlayer_propwin.c:3093 #: ../src/viktrwlayer_propwin.c:3106 ../src/viktrwlayer_propwin.c:3107 #: ../src/viktrwlayer_propwin.c:3120 ../src/viktrwlayer_propwin.c:3121 #: ../src/viktrwlayer_propwin.c:3134 ../src/viktrwlayer_propwin.c:3135 #, c-format msgid "No Data" msgstr "Žádná data" #: ../src/viktrwlayer_propwin.c:3031 #, c-format msgid "%d minutes" msgstr "%d minut" #: ../src/viktrwlayer_propwin.c:3058 msgid "Statistics" msgstr "Statistika" #: ../src/viktrwlayer_propwin.c:3064 msgid "Show D_EM" msgstr "Zobrazit D_EM" #: ../src/viktrwlayer_propwin.c:3065 ../src/viktrwlayer_propwin.c:3080 #: ../src/viktrwlayer_propwin.c:3094 ../src/viktrwlayer_propwin.c:3136 msgid "Show _GPS Speed" msgstr "Zobrazit _GPS rychlost" #: ../src/viktrwlayer_propwin.c:3067 ../src/viktrwlayer_propwin.c:3082 #: ../src/viktrwlayer_propwin.c:3110 ../src/viktrwlayer_propwin.c:3138 msgid "Track Distance:" msgstr "Vzdálenost na trase:" #: ../src/viktrwlayer_propwin.c:3068 ../src/viktrwlayer_propwin.c:3125 msgid "Track Height:" msgstr "Nadmořská výška:" #: ../src/viktrwlayer_propwin.c:3073 msgid "Elevation-distance" msgstr "Výška - vzdálenost" #: ../src/viktrwlayer_propwin.c:3083 msgid "Track Gradient:" msgstr "Stoupání:" #: ../src/viktrwlayer_propwin.c:3087 msgid "Gradient-distance" msgstr "Stoupání - vzdáleost" #: ../src/viktrwlayer_propwin.c:3096 ../src/viktrwlayer_propwin.c:3111 #: ../src/viktrwlayer_propwin.c:3124 msgid "Track Time:" msgstr "Čas na trase:" #: ../src/viktrwlayer_propwin.c:3097 ../src/viktrwlayer_propwin.c:3139 msgid "Track Speed:" msgstr "Rychlost:" #: ../src/viktrwlayer_propwin.c:3101 msgid "Speed-time" msgstr "Rychlost-čas" #: ../src/viktrwlayer_propwin.c:3108 ../src/viktrwlayer_propwin.c:3122 msgid "Show S_peed" msgstr "Zobrazit rychlost" #: ../src/viktrwlayer_propwin.c:3115 msgid "Distance-time" msgstr "Vzdálenost-čas" #: ../src/viktrwlayer_propwin.c:3129 msgid "Elevation-time" msgstr "Výška-čas" #: ../src/viktrwlayer_propwin.c:3143 msgid "Speed-distance" msgstr "Rychlost-vzdálenost" #: ../src/viktrwlayer_tpwin.c:118 msgid "Part of Track:" msgstr "Část trasy:" #: ../src/viktrwlayer_tpwin.c:119 msgid "Latitude:" msgstr "Zeměpisná šířka:" #: ../src/viktrwlayer_tpwin.c:120 msgid "Longitude:" msgstr "Zeměpisná délka:" #: ../src/viktrwlayer_tpwin.c:121 msgid "Altitude:" msgstr "Nadmořská výška:" #: ../src/viktrwlayer_tpwin.c:122 msgid "Timestamp:" msgstr "Časová značka:" #: ../src/viktrwlayer_tpwin.c:123 msgid "Time:" msgstr "Čas:" #: ../src/viktrwlayer_tpwin.c:124 msgid "Distance Difference:" msgstr "Vzdálenosti mezi body:" #: ../src/viktrwlayer_tpwin.c:125 msgid "Time Difference:" msgstr "Rozdíl času:" #: ../src/viktrwlayer_tpwin.c:126 msgid "\"Speed\" Between:" msgstr "Rychlost mezi body:" #: ../src/viktrwlayer_tpwin.c:127 msgid "VDOP:" msgstr "VDOP:" #: ../src/viktrwlayer_tpwin.c:128 msgid "HDOP:" msgstr "HDOP:" #: ../src/viktrwlayer_tpwin.c:129 msgid "PDOP:" msgstr "PDOP:" #: ../src/viktrwlayer_tpwin.c:130 msgid "SAT/FIX:" msgstr "SAT/FIX:" #: ../src/viktrwlayer_tpwin.c:139 msgid "Trackpoint" msgstr "Bod" #: ../src/viktrwlayer_tpwin.c:142 msgid "_Insert After" msgstr "Vložit _za" #: ../src/viktrwlayer_tpwin.c:144 msgid "Split Here" msgstr "Zde rozdělit" #: ../src/viktrwlayer_geotag.c:446 #, c-format msgid "Geotagging %d Images..." msgstr "Geotagování %d obrázků..." #: ../src/viktrwlayer_geotag.c:510 msgid "Geotag Images" msgstr "Geotagování obrázků" #: ../src/viktrwlayer_geotag.c:516 msgid "Images" msgstr "Obrázky" #: ../src/viktrwlayer_geotag.c:520 msgid "Overwrite Existing Waypoints:" msgstr "Přepsat stávající místa?" #: ../src/viktrwlayer_geotag.c:523 msgid "Overwrite Existing GPS Information:" msgstr "Přepsat existující GPS data:" #: ../src/viktrwlayer_geotag.c:525 msgid "Keep File Modification Timestamp:" msgstr "Zachovat čas změny souboru:" #: ../src/viktrwlayer_geotag.c:555 msgid "Create Waypoints:" msgstr "Vytvořit místa:" #: ../src/viktrwlayer_geotag.c:563 msgid "Write EXIF:" msgstr "Zapsat EXIF:" #: ../src/viktrwlayer_geotag.c:575 msgid "Interpolate Between Track Segments:" msgstr "Interpolovat mezi segmenty trasy:" #: ../src/viktrwlayer_geotag.c:579 msgid "Image Time Offset (Seconds):" msgstr "Časový posun obrázků (sekundy):" #: ../src/viktrwlayer_geotag.c:581 msgid "" "The number of seconds to ADD to the photos time to make it match the GPS " "data. Calculate this with (GPS - Photo). Can be negative or positive. Useful " "to adjust times when a camera's timestamp was incorrect." msgstr "" "Počet sekund, které se přidají, nebo uberou z časové značky v obrázku, aby " "si odpovídali údaje fotek a GPS. Vypočítejte jako čas fotky - čas gps." #: ../src/viktrwlayer_geotag.c:584 msgid "Image Timezone:" msgstr "Časová zóna:" #: ../src/viktrwlayer_geotag.c:586 msgid "" "The timezone that was used when the images were created. For example, if a " "camera is set to AWST or +8:00 hours. Enter +8:00 here so that the correct " "adjustment to the images' time can be made. GPS data is always in UTC." msgstr "" "Časová zóna použitá při vytváření obrázků. Například pokud je fotoaparát " "nastaven na AWST +8:00, zadejte pro správné přepočítání +8:00. GPS záznamy " "jsou vždy v UTC." #: ../src/viktrwlayer_geotag.c:590 #, c-format msgid "Using track: %s" msgstr "Požít trasu: %s" #: ../src/viktrwlayer_geotag.c:592 #, c-format msgid "Using all tracks in: %s" msgstr "Použít všechny trasys v: %s" #: ../src/vikstatus.c:105 msgid "Current zoom level. Click to select a new one." msgstr "Současný stupeň přiblížení. Klikněte k výběru." #: ../src/vikwaypoint.c:34 msgid "Waypoint" msgstr "Místo" #. TODO get rid of this as this is unnecessary duplication... #: ../src/vikwindow.c:221 msgid "Pan" msgstr "Posun" #: ../src/vikwindow.c:221 msgid "Zoom" msgstr "Lupa" #: ../src/vikwindow.c:221 msgid "Ruler" msgstr "Pravítko" #: ../src/vikwindow.c:221 msgid "Select" msgstr "Vybrat" #. Create tooltip #: ../src/vikwindow.c:440 msgid "Select zoom level" msgstr "Vyberte úroveň přiblížení" #: ../src/vikwindow.c:645 #, c-format msgid "" "Do you want to save the changes you made to the document \"%s\"?\n" "\n" "Your changes will be lost if you don't save them." msgstr "" "Uložit změny v souboru \"%s\"?\n" "Změny se ztratí pokud nebudou uloženy." #: ../src/vikwindow.c:649 msgid "Don't Save" msgstr "Neukládat" #: ../src/vikwindow.c:696 msgid "mpp" msgstr "mpp" #: ../src/vikwindow.c:696 msgid "pixelfact" msgstr "pixelfact" #: ../src/vikwindow.c:861 #, c-format msgid "%s %s %dm" msgstr "%s %s %dm" #: ../src/vikwindow.c:863 #, c-format msgid "%s %s %dft" msgstr "%s %s %dft" #: ../src/vikwindow.c:866 #, c-format msgid "%s %s" msgstr "%s %s" #. NB Ctrl+Shift+R is used for Refresh (deemed more important), so use 'U' instead #: ../src/vikwindow.c:1254 msgid "_Ruler" msgstr "_Pravítko" #: ../src/vikwindow.c:1254 msgid "Ruler Tool" msgstr "Pravítko" #: ../src/vikwindow.c:1502 ../src/vikwindow.c:3138 msgid "_Zoom" msgstr "_Přiblížení" #: ../src/vikwindow.c:1502 msgid "Zoom Tool" msgstr "Lupa" #: ../src/vikwindow.c:1547 ../src/vikwindow.c:3139 msgid "_Pan" msgstr "_Posun" #: ../src/vikwindow.c:1547 msgid "Pan Tool" msgstr "Posun" #: ../src/vikwindow.c:1664 msgid "_Select" msgstr "_Vybrat" #: ../src/vikwindow.c:1664 msgid "Select Tool" msgstr "Výběr" #: ../src/vikwindow.c:1809 msgid "You must select a layer to show its properties." msgstr "K zobrazení vlastností je třeba označit vrstvu." #. No error to show, so unlikely this will get called #: ../src/vikwindow.c:1824 msgid "The help system is not available." msgstr "Nápověda není dostupná." #. Main error path #: ../src/vikwindow.c:1827 #, c-format msgid "" "Help is not available because: %s.\n" "Ensure a Mime Type ghelp handler program is installed (e.g. yelp)." msgstr "" "Nápověda není dostupná: %s.\n" "Ověřte dostupnost programmu pro Mime Type ghelp (např. yelp)." #: ../src/vikwindow.c:1850 msgid "You must select a layer to delete." msgstr "Ke smazání Je třeba označit vrstvu." #: ../src/vikwindow.c:2087 msgid "Untitled" msgstr "Bez názvu" #: ../src/vikwindow.c:2194 #, c-format msgid "Unable to add '%s' to the list of recently used documents" msgstr "'%s' nelze přidat do seznamu naposledy použitých souborů." #: ../src/vikwindow.c:2208 msgid "The file you requested could not be opened." msgstr "Nelze otevřít vybraný soubor." #: ../src/vikwindow.c:2211 msgid "" "GPSBabel is required to load files of this type or GPSBabel encountered " "problems." msgstr "" "GPSBabel je vyžadován pro nahrávání tohoto typu dat, nebo nastala chyba po " "spuštění GPSBabel." #: ../src/vikwindow.c:2214 #, c-format msgid "Unable to load malformed GPX file %s" msgstr "Nelze nahrát poškozený GPX soubor %s" #: ../src/vikwindow.c:2217 #, c-format msgid "Unsupported file type for %s" msgstr "Nepodporovaný typ souboru %s" #. Since we can process .vik files with issues just show a warning in the status bar #. Not that a user can do much about it... or tells them what this issue is yet... #: ../src/vikwindow.c:2223 #, c-format msgid "WARNING: issues encountered loading %s" msgstr "Varování: problém při nahrávání %s" #: ../src/vikwindow.c:2278 msgid "Please select a GPS data file to open. " msgstr "Vyberte prosím datový GPS soubor. " #: ../src/vikwindow.c:2288 msgid "Geocaching" msgstr "Geocaching" #: ../src/vikwindow.c:2294 msgid "Google Earth" msgstr "Google Earth" #: ../src/vikwindow.c:2299 msgid "GPX" msgstr "GPX" #: ../src/vikwindow.c:2304 ../src/vikwindow.c:2387 #: ../src/viking.desktop.in.h:1 msgid "Viking" msgstr "Viking" #: ../src/vikwindow.c:2374 msgid "Save as Viking File." msgstr "Uložit jako soubor typu Viking." #. Try harder... #: ../src/vikwindow.c:2619 ../src/vikwindow.c:2625 msgid "Generating image file..." msgstr "Generování obrázku..." #: ../src/vikwindow.c:2647 msgid "" "Failed to generate internal image.\n" "\n" "Try creating a smaller image." msgstr "" "Selhalo interní generování obrázku.\n" "\n" "Zkuste vytvářet menší velikost obrázku." #: ../src/vikwindow.c:2655 msgid "Failed to generate image file." msgstr "Selhalo generování obrázku." #. Success #: ../src/vikwindow.c:2660 msgid "Image file generated." msgstr "Obrázek vygenerován." #: ../src/vikwindow.c:2764 msgid "" "Viewable region outside allowable pixel size bounds for image. Clipping " "width/height values." msgstr "Zobrazovaná oblast přesáhla okraje mapy. Upravuji zobrazení." #: ../src/vikwindow.c:2789 #, c-format msgid "Total area: %ldm x %ldm (%.3f sq. km)" msgstr "Celková plocha: %ldm x %ldm (%.3f km čtv. )" #: ../src/vikwindow.c:2792 #, c-format msgid "Total area: %ldm x %ldm (%.3f sq. miles)" msgstr "Celková plocha %ldm x %ldm (%.3f čtv. mil)" #: ../src/vikwindow.c:2813 msgid "Save Image" msgstr "Uložit obrázek" #: ../src/vikwindow.c:2834 msgid "PNG" msgstr "PNG" #: ../src/vikwindow.c:2857 msgid "You must be in UTM mode to use this feature" msgstr "Tato funkce je dostupná pouze v UTM módu" #: ../src/vikwindow.c:2862 msgid "Choose a directory to hold images" msgstr "Vybrat adresář na obrázky" #. todo: default for answers inside VikWindow or static (thruout instance) #: ../src/vikwindow.c:2883 msgid "Save to Image File" msgstr "Uložit obrázek do souboru" #: ../src/vikwindow.c:2900 msgid "Width (pixels):" msgstr "Šířka (pixelů):" #: ../src/vikwindow.c:2902 msgid "Height (pixels):" msgstr "Výška (pixelů):" #: ../src/vikwindow.c:2905 msgid "" "WARNING: USING LARGE IMAGES OVER 10000x10000\n" "MAY CRASH THE PROGRAM!" msgstr "" "Varování: velikost obrázku větší než 10000x10000\n" "může program ukončit!" #: ../src/vikwindow.c:2907 msgid "Zoom (meters per pixel):" msgstr "Měrítko (metrů/pixel)" #: ../src/vikwindow.c:2921 msgid "Area in current viewable window" msgstr "Aktuálně zobrazená oblast" #: ../src/vikwindow.c:2931 msgid "Save as PNG" msgstr "Uložit jako PNG" #: ../src/vikwindow.c:2932 msgid "Save as JPEG" msgstr "Uložit jako JPEG" #: ../src/vikwindow.c:2954 msgid "East-west image tiles:" msgstr "Východ-západ obrázky:" #: ../src/vikwindow.c:2956 msgid "North-south image tiles:" msgstr "Počet obrázků svisle:" #: ../src/vikwindow.c:3097 msgid "Choose a background color" msgstr "Vyberte barvu pozadí" #: ../src/vikwindow.c:3113 msgid "Choose a track highlight color" msgstr "Barva zvýraznění trasy" #: ../src/vikwindow.c:3134 msgid "_File" msgstr "_Soubor" #: ../src/vikwindow.c:3135 msgid "_Edit" msgstr "_Upravit" #: ../src/vikwindow.c:3136 msgid "_View" msgstr "_Zobrazení" #: ../src/vikwindow.c:3137 msgid "_Show" msgstr "_Zobrazit" #: ../src/vikwindow.c:3140 msgid "_Layers" msgstr "_Vrstvy" #: ../src/vikwindow.c:3141 msgid "_Tools" msgstr "Nás_troje" #: ../src/vikwindow.c:3142 msgid "_Webtools" msgstr "_Externí odkazy" #: ../src/vikwindow.c:3143 ../src/vikwindow.c:3206 msgid "_Help" msgstr "_Nápověda" #: ../src/vikwindow.c:3145 msgid "New file" msgstr "Nový soubor" #: ../src/vikwindow.c:3146 msgid "_Open..." msgstr "_Otevřít..." #: ../src/vikwindow.c:3146 msgid "Open a file" msgstr "Otevřít soubor" #: ../src/vikwindow.c:3147 msgid "Open _Recent File" msgstr "O_tevřít nedávné soubory" #: ../src/vikwindow.c:3148 msgid "Append _File..." msgstr "Připojit soubor" #: ../src/vikwindow.c:3148 msgid "Append data from a different file" msgstr "Připojí data z jiného souboru" #: ../src/vikwindow.c:3149 msgid "A_cquire" msgstr "_Získat" #: ../src/vikwindow.c:3150 msgid "Transfer data from a GPS device" msgstr "Získat data z GPS" #: ../src/vikwindow.c:3151 msgid "Import File With GPS_Babel..." msgstr "Import souboru pomocí GPSBabel..." #: ../src/vikwindow.c:3151 msgid "Import file via GPSBabel converter" msgstr "Import souboru pomocí GPSBabel" #: ../src/vikwindow.c:3153 msgid "Google _Directions..." msgstr "trasy G_oogle..." #: ../src/vikwindow.c:3153 msgid "Get driving directions from Google" msgstr "Získá trasu z Google" #: ../src/vikwindow.c:3156 msgid "_OSM Traces..." msgstr "_OSM trasy..." #: ../src/vikwindow.c:3156 msgid "Get traces from OpenStreetMap" msgstr "Stáhnout trasy z OpenStreetMap" #: ../src/vikwindow.c:3157 msgid "_My OSM Traces..." msgstr "M_oje OSM záznamy" #: ../src/vikwindow.c:3157 msgid "Get Your Own Traces from OpenStreetMap" msgstr "Stáhnout vlastní OSM záznamy" #: ../src/vikwindow.c:3160 msgid "Geo_caches..." msgstr "Geo_cache.." #: ../src/vikwindow.c:3160 msgid "Get Geocaches from geocaching.com" msgstr "Získat Geocache z geocaching.com" #: ../src/vikwindow.c:3163 msgid "Create waypoints from geotagged images" msgstr "Vytvořit místa z geotagovaných obrázků" #: ../src/vikwindow.c:3166 msgid "Create waypoints from Wikipedia items in the current view" msgstr "" #: ../src/vikwindow.c:3168 msgid "_Save" msgstr "_Uložit" #: ../src/vikwindow.c:3168 msgid "Save the file" msgstr "Uložit soubor" #: ../src/vikwindow.c:3169 msgid "Save _As..." msgstr "Uložit _jako..." #: ../src/vikwindow.c:3169 msgid "Save the file under different name" msgstr "Uložit soubor s jiným jménem" #: ../src/vikwindow.c:3170 msgid "_Generate Image File..." msgstr "_Generovat obrázek..." #: ../src/vikwindow.c:3170 msgid "Save a snapshot of the workspace into a file" msgstr "Uloží zobrazení mapy jako obrázek" #: ../src/vikwindow.c:3171 msgid "Generate _Directory of Images..." msgstr "Generovat _adresář s obrázky..." #: ../src/vikwindow.c:3171 msgid "FIXME:IMGDIR" msgstr "FIXME:IMGDIR" #: ../src/vikwindow.c:3174 msgid "_Print..." msgstr "_Tisk..." #: ../src/vikwindow.c:3174 msgid "Print maps" msgstr "Tisk map" #: ../src/vikwindow.c:3177 msgid "E_xit" msgstr "U_končit" #: ../src/vikwindow.c:3177 msgid "Exit the program" msgstr "Ukončit aplikaci" #: ../src/vikwindow.c:3178 msgid "Save and Exit" msgstr "U_ložit a ukončit" #: ../src/vikwindow.c:3178 msgid "Save and Exit the program" msgstr "Uložit a ukončit aplikaci" #: ../src/vikwindow.c:3180 msgid "Go to the _Default Location" msgstr "Jít na výchozí pozici" #: ../src/vikwindow.c:3180 msgid "Go to the default location" msgstr "Jít na výchozí pozici" #: ../src/vikwindow.c:3181 msgid "Go to _Location..." msgstr "Jít na _místo..." #: ../src/vikwindow.c:3181 msgid "Go to address/place using text search" msgstr "Jít na adresu pomocí vyhledávání" #: ../src/vikwindow.c:3182 msgid "_Go to Lat/Lon..." msgstr "Jít na pozici..." #: ../src/vikwindow.c:3182 msgid "Go to arbitrary lat/lon coordinate" msgstr "Jít na souřadnice" #: ../src/vikwindow.c:3183 msgid "Go to UTM..." msgstr "Jít na souřadnice _UTM..." #: ../src/vikwindow.c:3183 msgid "Go to arbitrary UTM coordinate" msgstr "Jít na libovolné UTM souřadnice" #: ../src/vikwindow.c:3184 msgid "_Refresh" msgstr "_Obnovit" #: ../src/vikwindow.c:3184 msgid "Refresh any maps displayed" msgstr "" #: ../src/vikwindow.c:3185 msgid "Set _Highlight Color..." msgstr "Nastavte barvu zvýraznění..." #: ../src/vikwindow.c:3186 msgid "Set Bac_kground Color..." msgstr "Nastavit barvu p_ozadí..." #: ../src/vikwindow.c:3187 msgid "Zoom _In" msgstr "Př_iblížit" #: ../src/vikwindow.c:3188 msgid "Zoom _Out" msgstr "_Oddálit" #: ../src/vikwindow.c:3189 msgid "Zoom _To..." msgstr "Přiblížit na..." #: ../src/vikwindow.c:3190 msgid "Pan _North" msgstr "Posun na _sever" #: ../src/vikwindow.c:3191 msgid "Pan _East" msgstr "Posun na _západ" #: ../src/vikwindow.c:3192 msgid "Pan _South" msgstr "Posun na _jih" #: ../src/vikwindow.c:3193 msgid "Pan _West" msgstr "Posun na _západ" #: ../src/vikwindow.c:3194 msgid "Background _Jobs" msgstr "Úlohy na _pozadí" #: ../src/vikwindow.c:3196 msgid "Cu_t" msgstr "Vyjmou_t" #: ../src/vikwindow.c:3197 msgid "_Copy" msgstr "_Kopírovat" #: ../src/vikwindow.c:3198 msgid "_Paste" msgstr "_Vložit" #: ../src/vikwindow.c:3199 msgid "_Delete" msgstr "_Smazat" #: ../src/vikwindow.c:3200 msgid "Delete All" msgstr "S_mazat vše" #: ../src/vikwindow.c:3201 msgid "_Flush Map Cache" msgstr "V_ymazat mapovou cache" #: ../src/vikwindow.c:3202 msgid "_Set the Default Location" msgstr "_Nastavit výchozí místo" #: ../src/vikwindow.c:3202 msgid "Set the Default Location to the current position" msgstr "Nastavit výchozí místo na aktuální pozici" #: ../src/vikwindow.c:3203 msgid "_Preferences" msgstr "_Nastavení" #: ../src/vikwindow.c:3204 msgid "_Properties" msgstr "V_lastnosti" #: ../src/vikwindow.c:3207 msgid "_About" msgstr "O _aplikaci" #: ../src/vikwindow.c:3213 msgid "_UTM Mode" msgstr "_UTM mód" #: ../src/vikwindow.c:3214 msgid "_Expedia Mode" msgstr "_Expedia mód" #: ../src/vikwindow.c:3215 msgid "_Mercator Mode" msgstr "_Mercator mód" #: ../src/vikwindow.c:3216 msgid "Lat_/Lon Mode" msgstr "Lat_/Lon mód" #: ../src/vikwindow.c:3220 msgid "Show _Scale" msgstr "_Měřítko" #: ../src/vikwindow.c:3220 msgid "Show Scale" msgstr "Zobrazit _měřítko" #: ../src/vikwindow.c:3221 msgid "Show _Center Mark" msgstr "S_třed" #: ../src/vikwindow.c:3221 msgid "Show Center Mark" msgstr "Zobrazit s_třed" #: ../src/vikwindow.c:3222 msgid "Show _Highlight" msgstr "_Zvýraznit" #: ../src/vikwindow.c:3222 msgid "Show Highlight" msgstr "Zvýraznit" #: ../src/vikwindow.c:3223 msgid "_Full Screen" msgstr "_Celá obrazovka" #: ../src/vikwindow.c:3223 msgid "Activate full screen mode" msgstr "Přes celou obrazovku" #: ../src/vikwindow.c:3224 msgid "Show Side _Panel" msgstr "_Boční panel" #: ../src/vikwindow.c:3224 msgid "Show Side Panel" msgstr "Boční panel vstev" #: ../src/vikwindow.c:3225 msgid "Show Status_bar" msgstr "_Stavovou lištu" #: ../src/vikwindow.c:3225 msgid "Show Statusbar" msgstr "_Stavovou lištu" #: ../src/vikwindow.c:3226 msgid "Show _Toolbar" msgstr "_Panel nástrojů" #: ../src/vikwindow.c:3226 msgid "Show Toolbar" msgstr "Panel _nástrojů" #: ../src/vikwindow.c:3227 msgid "Show _Menu" msgstr "_Menu" #: ../src/vikwindow.c:3227 msgid "Show Menu" msgstr "_Menu" #: ../src/viking.desktop.in.h:2 msgid "GPS Data Manager" msgstr "Správce GPS dat" #: ../src/viking.desktop.in.h:3 msgid "Map Based GPS Data Manager (live data capable)." msgstr "Správce GPS a mapových dat" #: ../src/libjpeg/jpeg-data.c:206 msgid "Data does not follow JPEG specification." msgstr "Data nerespektují specifikaci formátu JPEG" #: ../src/libjpeg/jpeg-data.c:291 #, c-format msgid "Path '%s' invalid." msgstr "Cesta '%s' je chybná," #: ../src/libjpeg/jpeg-data.c:309 #, c-format msgid "Could not read '%s'." msgstr "Nelze číst '%s'." viking-1.4.2/po/lt.po0000644000175000017500000024263112175546146011346 00000000000000# Lithuanian translation for viking # Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008 # This file is distributed under the same license as the viking package. # FIRST AUTHOR , 2008. # msgid "" msgstr "" "Project-Id-Version: viking\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-02-04 23:29+0100\n" "PO-Revision-Date: 2011-10-04 22:20+0000\n" "Last-Translator: Mantas Kriaučiūnas \n" "Language-Team: Lithuanian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "(n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Launchpad-Export-Date: 2013-03-23 17:12+0000\n" "X-Generator: Launchpad (build 16540)\n" #: ../src/acquire.c:103 ../src/vikgpslayer.c:1185 msgid "Done." msgstr "Baigta." #: ../src/acquire.c:114 msgid "No data." msgstr "" #: ../src/acquire.c:154 ../src/acquire.c:404 msgid "Error: acquisition failed." msgstr "Klaida: pasiekti nepavyko." #: ../src/acquire.c:341 msgid "Working..." msgstr "Vykdoma..." #. This shouldn't happen... #: ../src/acquire.c:394 msgid "" "Unable to create command\n" "Acquire method failed." msgstr "" #: ../src/acquire.c:486 msgid "_Filter" msgstr "" #: ../src/acquire.c:501 #, c-format msgid "Filter with %s" msgstr "" #: ../src/acquire.c:518 msgid "Filter" msgstr "" #: ../src/background.c:52 #, c-format msgid "%d items" msgstr "%d dalykai" #: ../src/background.c:248 msgid "Job" msgstr "Užduotis" #: ../src/background.c:252 msgid "Progress" msgstr "Eiga" #: ../src/background.c:268 msgid "Viking Background Jobs" msgstr "Viking fono darbai" #: ../src/bing.c:47 msgid "Bing" msgstr "" #. VIK_GTK_WINDOW_FROM_WIDGET(vp) #: ../src/bingmapsource.c:445 msgid "Bing attribution Loading" msgstr "" #: ../src/clipboard.c:95 msgid "paste failed" msgstr "įterpti nepavyko" #: ../src/clipboard.c:105 msgid "wrong clipboard data size" msgstr "Klaidingas iškarpos duomenų dydis" #: ../src/clipboard.c:124 #, c-format msgid "" "The clipboard contains sublayer data for %s layers. You must select a layer " "of this type to paste the clipboard data." msgstr "" #: ../src/clipboard.c:236 msgid "" "In order to paste a waypoint, please select an appropriate layer to paste " "into." msgstr "Pasirinkite tinkamą sluoksnį, kad įterptumėte maršruto tašką." #: ../src/dialog.c:52 msgid "Go to Lat/Lon" msgstr "Eiti į Pla/Ilg" #: ../src/dialog.c:64 ../src/dialog.c:251 msgid "Latitude:" msgstr "Platuma:" #: ../src/dialog.c:70 ../src/dialog.c:256 msgid "Longitude:" msgstr "Ilguma:" #: ../src/dialog.c:102 msgid "Go to UTM" msgstr "" #: ../src/dialog.c:115 msgid "Northing:" msgstr "Šiaurės kryptis:" #: ../src/dialog.c:121 msgid "Easting:" msgstr "Rytų kryptis:" #: ../src/dialog.c:128 msgid "Zone:" msgstr "Zona" #: ../src/dialog.c:131 msgid "Letter:" msgstr "Raidė:" #: ../src/dialog.c:199 msgid "Waypoint Properties" msgstr "Maršruto taško ypatybės" #: ../src/dialog.c:233 msgid "Name:" msgstr "Pavadinimas:" #: ../src/dialog.c:261 msgid "Altitude:" msgstr "Aukštis:" #: ../src/dialog.c:266 msgid "Comment:" msgstr "Komentaras:" #: ../src/dialog.c:274 ../src/osm-traces.c:437 msgid "Description:" msgstr "Aprašymas:" #: ../src/dialog.c:277 msgid "Image:" msgstr "Paveikslas:" #: ../src/dialog.c:282 msgid "Symbol:" msgstr "Simbolis:" #: ../src/dialog.c:291 msgid "(none)" msgstr "(nėra)" #. TODO: other checks (isalpha or whatever ) #: ../src/dialog.c:356 msgid "Please enter a name for the waypoint." msgstr "Įveskite maršruto taško pavadinimą." #: ../src/dialog.c:529 ../src/geonamessearch.c:243 #: ../src/datasource_osm_my_traces.c:507 msgid "Nothing was selected" msgstr "Niekas nepasirinkta" #: ../src/dialog.c:537 msgid "Add Route" msgstr "" #: ../src/dialog.c:537 msgid "Add Track" msgstr "Pridėti kelią" #: ../src/dialog.c:545 msgid "Route Name:" msgstr "" #: ../src/dialog.c:545 msgid "Track Name:" msgstr "Kelio pavadinimas:" #: ../src/dialog.c:565 msgid "Please enter a name for the track." msgstr "Įveskite kelio pavadinimą." #: ../src/dialog.c:623 msgid "Zoom Factors..." msgstr "Mastelio veiksniai..." #: ../src/dialog.c:637 msgid "Zoom factor (in meters per pixel):" msgstr "" #: ../src/dialog.c:638 msgid "X (easting): " msgstr "X (rytinis): " #: ../src/dialog.c:639 msgid "Y (northing): " msgstr "Y (šiaurinis): " #: ../src/dialog.c:644 msgid "X and Y zoom factors must be equal" msgstr "X ir Y mastelio veiksniai privalo būti lygūs" #: ../src/dialog.c:699 msgid "1 min" msgstr "1 minutė" #: ../src/dialog.c:700 msgid "1 hour" msgstr "1 valanda" #: ../src/dialog.c:701 msgid "1 day" msgstr "1 diena" #: ../src/dialog.c:702 msgid "Custom (in minutes):" msgstr "Kita (minutėmis)" #: ../src/dialog.c:808 msgid "GPS Data and Topo Analyzer, Explorer, and Manager." msgstr "GPS duomenų ir topografijos analizatorius, tyrėjas ir vedlys" #: ../src/dialog.c:809 msgid "" "This program is free software; you can redistribute it and/or modify it " "under the terms of the GNU General Public License as published by the Free " "Software Foundation; either version 2 of the License, or (at your option) " "any later version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT " "ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or " "FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for " "more details.\n" "\n" "You should have received a copy of the GNU General Public License along with " "this program; if not, write to the Free Software Foundation, Inc., 59 Temple " "Place, Suite 330, Boston, MA 02111-1307, USA" msgstr "" "Ši programa yra laisva programinė įranga; ją galite pakartotinai platinti " "ir/arba keisti pagal GNU General Public License kaippaskelbė Free Software " "Foundation; arba bet kuri 2 licencijosversija, arba (Jūsų pasirinkimu) bet " "kuri vėlesnė versija.\n" "\n" "Ši programa yra platinama tikintis, kad ji bus naudinga, tačiauBE JOKIOS " "GARANTIJOS; netgi be numanomos garantijosKOMERCINIAM arba TINKAMUMO TAM " "TIKRAM TIKSLUI.Daugiau informacijos rasite GNU General Public License.\n" "\n" "Jūs turėtumėte gauti GNU General Public License kopiją kartu sušia programa; " "jei ne, rašykite į Free Software Foundation, Inc.,59 Temple Place, Suite " "330, Boston, MA 02111-1307 USA" #: ../src/dialog.c:837 msgid "Translation is coordinated on http://launchpad.net/viking" msgstr "" #: ../src/dialog.c:845 msgid "Download along track" msgstr "Atsiųsti išilgai kelio" #: ../src/dialog.c:851 msgid "Map type:" msgstr "Žemėlapio tipas:" #: ../src/dialog.c:856 msgid "Zoom level:" msgstr "Mastelio lygis:" #: ../src/dialog.c:896 #, c-format msgid "The map data is licensed: %s." msgstr "" #: ../src/dialog.c:899 #, c-format msgid "" "The data provided by '%s' are licensed under the following license: " "%s.\n" "Please, read the license before continuing." msgstr "" #: ../src/dialog.c:904 msgid "Open license" msgstr "" #: ../src/expedia.c:53 msgid "Expedia Street Maps" msgstr "Expedia gatvių žemėlapiai" #: ../src/expedia.c:81 msgid "Invalid expedia altitude" msgstr "Negalimas expedia aukštis" #: ../src/expedia.c:112 #, c-format msgid "" "Couldn't open EXPEDIA image file (right after successful download! Please " "report and delete image file!): %s" msgstr "" "Neįmanoma atverti EXPEDIA atvaizdo failo (iškart po sėkmingo atsisiuntimo! " "Praneškite ir ištrinkite atvaizdo failą!): %s" #: ../src/expedia.c:125 #, c-format msgid "" "Couldn't save EXPEDIA image file (right after successful download! Please " "report and delete image file!): %s" msgstr "" "Neįmanoma išsaugoti EXPEDIA atvaizdo failo (iškart po sėkmingo atsisiuntimo! " "Praneškite ir ištrinkite atvaizdo failą!): %s" #. * #. * See http://www.geonames.org/export/wikipedia-webservice.html#wikipediaBoundingBox #. #. Translators may wish to change this setting as appropriate to get Wikipedia articles in that language #: ../src/geonamessearch.c:46 msgid "en" msgstr "" #: ../src/geonamessearch.c:121 msgid "Search" msgstr "Paieška" #: ../src/geonamessearch.c:123 msgid "No entries found!" msgstr "Įrašų nerasta!" #. NB could allow columns to be shifted around by doing this after each new #. gtk_tree_view_column_set_reorderable ( column, TRUE ); #. However I don't think is that useful, so I haven't put it in #: ../src/geonamessearch.c:177 ../src/datasource_osm_my_traces.c:425 msgid "Name" msgstr "" #: ../src/geonamessearch.c:182 msgid "Feature" msgstr "" #: ../src/geonamessearch.c:187 ../src/datasource_osm_my_traces.c:440 msgid "Lat/Lon" msgstr "" #: ../src/geonamessearch.c:269 ../src/googlesearch.c:100 msgid "couldn't map temp file" msgstr "neįmanoma išdėstyti laikino failo" #: ../src/globals.c:44 msgid "Degree format:" msgstr "Laipsnių formatas:" #: ../src/globals.c:48 msgid "Distance units:" msgstr "" #: ../src/globals.c:52 msgid "Speed units:" msgstr "Greičio matavimo vienetas:" #: ../src/globals.c:56 msgid "Height units:" msgstr "Aukščio matavimo vienetas:" #: ../src/globals.c:60 msgid "Use large waypoint icons:" msgstr "" #: ../src/globals.c:64 msgid "Default latitude:" msgstr "" #: ../src/globals.c:67 msgid "Default longitude:" msgstr "" #: ../src/globals.c:73 msgid "Alphabetical" msgstr "" #: ../src/globals.c:73 ../src/datasource_osm_my_traces.c:435 msgid "Time" msgstr "" #: ../src/globals.c:76 msgid "KML File Export Units:" msgstr "" #: ../src/globals.c:77 msgid "GPX Track Order:" msgstr "" #: ../src/globals.c:82 msgid "Image Viewer:" msgstr "" #: ../src/globals.c:87 msgid "External GPX Program 1:" msgstr "" #: ../src/globals.c:88 msgid "External GPX Program 2:" msgstr "" #. Defaults for the options are setup here #: ../src/globals.c:96 msgid "General" msgstr "" #. New Tab #: ../src/globals.c:121 msgid "Export/External" msgstr "" #. Webtools #: ../src/google.c:36 msgid "Google" msgstr "Google" #: ../src/datasource_file.c:59 msgid "Import file with GPSBabel" msgstr "" #: ../src/datasource_file.c:60 msgid "Imported file" msgstr "" #. The file selector #: ../src/datasource_file.c:133 msgid "File:" msgstr "" #: ../src/datasource_file.c:134 msgid "File to import" msgstr "" #: ../src/datasource_file.c:141 msgid "All files" msgstr "" #. The file format selector #: ../src/datasource_file.c:148 msgid "File type:" msgstr "" #: ../src/datasource_file.c:193 #, c-format msgid "using babel args '%s' and file '%s'" msgstr "" #: ../src/datasource_gc.c:66 msgid "Download Geocaches" msgstr "Atsiųsti Geocaches" #: ../src/datasource_gc.c:67 msgid "Geocaching.com Caches" msgstr "Geocaching.com atsargos" #: ../src/datasource_gc.c:84 msgid "geocaching.com username:" msgstr "geocaching.com vartotojo vardas:" #: ../src/datasource_gc.c:85 msgid "geocaching.com password:" msgstr "geocaching.com slaptažodis:" #: ../src/datasource_gc.c:126 #, c-format msgid "" "Can't find %s or %s in path! Check that you have installed it correctly." msgstr "" #: ../src/datasource_gc.c:188 msgid "Number geocaches:" msgstr "Geocaches skaičius:" #: ../src/datasource_gc.c:190 msgid "Centered around:" msgstr "Centruotas apie:" #: ../src/datasource_gc.c:226 msgid "Broken input - using some defaults" msgstr "" #: ../src/datasource_geotag.c:51 msgid "Create Waypoints from Geotagged Images" msgstr "" #: ../src/datasource_geotag.c:52 msgid "Geotagged Images" msgstr "" #: ../src/datasource_geotag.c:102 ../src/vikwindow.c:2314 #: ../src/vikwindow.c:2382 ../src/vikwindow.c:2824 msgid "All" msgstr "" #: ../src/datasource_geotag.c:107 ../src/vikwindow.c:2829 msgid "JPG" msgstr "" #: ../src/datasource_geotag.c:165 #, c-format msgid "Unable to create waypoint from %s" msgstr "" #: ../src/datasource_google.c:49 ../src/datasource_google.c:50 msgid "Google Directions" msgstr "Google maršrutai" #: ../src/datasource_google.c:77 msgid "From:" msgstr "Nuo:" #: ../src/datasource_google.c:79 msgid "To:" msgstr "Iki:" #: ../src/datasource_gps.c:57 msgid "Acquire from GPS" msgstr "Gauti duomenis iš GPS" #: ../src/datasource_gps.c:58 msgid "Acquired from GPS" msgstr "Gaunami duomenys iš GPS" #: ../src/datasource_gps.c:221 #, c-format msgid "using cmdline '%s' and file '%s'\n" msgstr "naudojant komandos eilutę '%s' ir failą '%s'\n" #: ../src/datasource_gps.c:297 ../src/vikgpslayer.c:884 #, c-format msgid "Downloading %d waypoint..." msgid_plural "Downloading %d waypoints..." msgstr[0] "Atsiunčiamas %d maršruto taškas..." msgstr[1] "Atsiunčiami %d maršruto taškai..." msgstr[2] "Atsiunčiama %d maršruto taškų..." #: ../src/datasource_gps.c:298 ../src/vikgpslayer.c:885 #, c-format msgid "Downloading %d trackpoint..." msgid_plural "Downloading %d trackpoints..." msgstr[0] "Atsiunčiamas %d kelio taškas..." msgstr[1] "Atsiunčiami %d kelio taškai..." msgstr[2] "Atsiunčiama %d kelio taškų..." #: ../src/datasource_gps.c:303 ../src/vikgpslayer.c:890 #, c-format msgid "Downloading %d routepoint..." msgid_plural "Downloading %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/datasource_gps.c:325 ../src/datasource_gps.c:326 #: ../src/datasource_gps.c:327 #, c-format msgid "Downloaded %d out of %d %s..." msgstr "Atsiųsta %d iš %d %s..." #: ../src/datasource_gps.c:331 ../src/datasource_gps.c:332 #: ../src/datasource_gps.c:333 #, c-format msgid "Downloaded %d %s." msgstr "Atsiųsta %d %s." #: ../src/datasource_gps.c:347 ../src/vikgpslayer.c:968 #, c-format msgid "GPS Device: %s" msgstr "GPS įrenginys: %s" #: ../src/datasource_gps.c:370 ../src/vikgpslayer.c:1042 #: ../src/vikgpslayer.c:1110 msgid "Status: Working..." msgstr "" #: ../src/datasource_gps.c:469 ../src/vikgpslayer.c:150 msgid "GPS Protocol:" msgstr "GPS protokolas:" #. List now assigned at runtime #: ../src/datasource_gps.c:488 ../src/vikgpslayer.c:151 msgid "Serial Port:" msgstr "Nuoseklusis prievadas:" #: ../src/datasource_gps.c:509 msgid "" "Turn Off After Transfer\n" "(Garmin/NAViLink Only)" msgstr "" #: ../src/datasource_gps.c:512 msgid "Tracks:" msgstr "" #: ../src/datasource_gps.c:516 msgid "Routes:" msgstr "" #: ../src/datasource_gps.c:520 msgid "Waypoints:" msgstr "" #: ../src/datasource_gps.c:594 ../src/vikgpslayer.c:1305 msgid "GPS device: N/A" msgstr "GPS įrenginys: N/D" #: ../src/datasource_osm.c:52 ../src/datasource_osm.c:53 msgid "OSM traces" msgstr "" #: ../src/datasource_osm.c:80 msgid "Page number:" msgstr "" #: ../src/datasource_osm_my_traces.c:63 ../src/datasource_osm_my_traces.c:64 msgid "OSM My Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:108 msgid "Username:" msgstr "" #: ../src/datasource_osm_my_traces.c:113 msgid "The email or username used to login to OSM" msgstr "" #: ../src/datasource_osm_my_traces.c:115 ../src/osm-traces.c:413 msgid "Password:" msgstr "Slaptažodis:" #: ../src/datasource_osm_my_traces.c:120 msgid "The password used to login to OSM" msgstr "" #: ../src/datasource_osm_my_traces.c:430 msgid "Description" msgstr "" #: ../src/datasource_osm_my_traces.c:445 msgid "Privacy" msgstr "" #: ../src/datasource_osm_my_traces.c:452 msgid "Within Current View" msgstr "" #: ../src/datasource_osm_my_traces.c:518 msgid "GPS Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:520 msgid "None found!" msgstr "" #: ../src/datasource_osm_my_traces.c:629 msgid "My OSM Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:645 #, c-format msgid "Unable to get trace: %s" msgstr "" #: ../src/datasource_wikipedia.c:32 msgid "Create Waypoints from Wikipedia Articles" msgstr "" #: ../src/datasource_wikipedia.c:33 msgid "Wikipedia Waypoints" msgstr "" #: ../src/dem.c:65 ../src/dem.c:79 msgid "Invalid DEM" msgstr "Klaidingas DEM" #: ../src/dem.c:121 msgid "Invalid DEM header" msgstr "Klaidinga DEM antraštė" #: ../src/dem.c:190 ../src/dem.c:203 msgid "Incorrect DEM Class B record: expected 1" msgstr "Neteisingas DEM B klasės įrašas: sulauktas 1" #: ../src/dem.c:360 #, c-format msgid "Couldn't map file %s: %s" msgstr "Neįmanoma išdėstyti failo %s: %s" #: ../src/download.c:112 msgid "Tile age (s):" msgstr "" #: ../src/download.c:233 #, c-format msgid "Download error: %s" msgstr "Atsiuntimo klaida: %s" #: ../src/download.c:313 msgid "couldn't open temp file" msgstr "neįmanoma atverti laikinos bylos" #: ../src/file.c:456 ../src/file.c:461 #, c-format msgid "Draw mode '%s' no more supported" msgstr "Braižymo režimas '%s' daugiau nepalaikomas" #: ../src/geotag_exif.c:433 msgid "Not enough memory." msgstr "" #: ../src/geotag_exif.c:451 msgid "Setting a value for this tag is unsupported!" msgstr "" #: ../src/geotag_exif.c:470 #, c-format msgid "Too few components specified (need %d, found %d)\n" msgstr "" #: ../src/geotag_exif.c:474 msgid "Numeric value expected\n" msgstr "" #: ../src/geotag_exif.c:482 msgid "This shouldn't happen!" msgstr "" #: ../src/geotag_exif.c:552 msgid "Not yet implemented!" msgstr "" #: ../src/geotag_exif.c:565 msgid "Warning; Too many components specified!" msgstr "" #: ../src/osm-traces.c:73 msgid "Identifiable (public w/ timestamps)" msgstr "" #: ../src/osm-traces.c:74 msgid "Trackable (private w/ timestamps)" msgstr "" #: ../src/osm-traces.c:75 msgid "Public" msgstr "Viešas" #: ../src/osm-traces.c:76 msgid "Private" msgstr "Privatus" #: ../src/osm-traces.c:93 msgid "OSM username:" msgstr "OSM vartotojas:" #: ../src/osm-traces.c:94 msgid "OSM password:" msgstr "OSM slaptažodis:" #. Preferences #: ../src/osm-traces.c:151 msgid "OpenStreetMap Traces" msgstr "" #: ../src/osm-traces.c:234 #, c-format msgid "failed to upload data: HTTP response is %ld" msgstr "nepavyko išsiųsti duomenų: HTTP atsakas yra %ld" #: ../src/osm-traces.c:239 #, c-format msgid "curl_easy_getinfo failed: %d" msgstr "Nepavyko curl_easy_getinfo: %d" #: ../src/osm-traces.c:244 #, c-format msgid "curl request failed: %s" msgstr "curl užklausa nepavyko: %s" #: ../src/osm-traces.c:275 #, c-format msgid "failed to open temporary file: %s" msgstr "nepavyko atverti laikino failo: %s" #. Success #: ../src/osm-traces.c:328 msgid "Uploaded to OSM" msgstr "" #: ../src/osm-traces.c:332 msgid "FAILED TO UPLOAD DATA TO OSM - CURL PROBLEM" msgstr "" #: ../src/osm-traces.c:335 msgid "FAILED TO UPLOAD DATA TO OSM" msgstr "" #: ../src/osm-traces.c:335 msgid "HTTP response code" msgstr "" #: ../src/osm-traces.c:348 #, c-format msgid "failed to unlink temporary file: %s" msgstr "nepavyko atjungti laikinojo failo: %s" #: ../src/osm-traces.c:387 msgid "OSM upload" msgstr "OSM išsiuntimas" #: ../src/osm-traces.c:405 msgid "Email:" msgstr "El. paštas:" #: ../src/osm-traces.c:410 msgid "" "The email used as login\n" "Enter the email you use to login into www.openstreetmap.org." msgstr "" #: ../src/osm-traces.c:418 msgid "" "The password used to login\n" "Enter the password you use to login into " "www.openstreetmap.org." msgstr "" #: ../src/osm-traces.c:423 msgid "File's name:" msgstr "Failo pavadinimas:" #: ../src/osm-traces.c:433 msgid "" "The name of the file on OSM\n" "This is the name of the file created on the server.This is not the " "name of the local file." msgstr "" #: ../src/osm-traces.c:442 msgid "The description of the trace" msgstr "Takelio aprašas" #: ../src/osm-traces.c:444 msgid "Tags:" msgstr "Žymos:" #: ../src/osm-traces.c:449 msgid "The tags associated to the trace" msgstr "Žyma surišta su takeliu" #: ../src/osm-traces.c:482 #, c-format msgid "Uploading %s to OSM" msgstr "Išsiunčiamas %s į OSM" #: ../src/mapcache.c:61 msgid "Map cache memory size (MB):" msgstr "" #: ../src/print.c:53 msgid "None" msgstr "Nėra" #: ../src/print.c:54 msgid "Horizontally" msgstr "Horizontaliai" #: ../src/print.c:55 msgid "Vertically" msgstr "Vertikaliai" #: ../src/print.c:56 msgid "Both" msgstr "Abu" #: ../src/print.c:120 msgid "Image Settings" msgstr "Paveikslėlio parametrai" #: ../src/print.c:546 msgid "done" msgstr "Atlikta" #. Page Size #: ../src/print.c:575 msgid "_Adjust Page Size and Orientation" msgstr "_Keisti puslapio dydį ir padėtį" #: ../src/print.c:591 msgid "C_enter:" msgstr "C_entras:" #. ignore page margins #: ../src/print.c:609 msgid "Ignore Page _Margins" msgstr "Nepaisyti puslapio _paraščių" #: ../src/print.c:628 msgid "Image S_ize:" msgstr "Atvaizdo _dydis:" #: ../src/util.c:81 msgid "Could not launch web browser." msgstr "Neįmanoma paleisti web naršyklės." #: ../src/util.c:92 msgid "Could not create new email." msgstr "Neįmanoma sukurti naujo el. pašto." #: ../src/vikcoordlayer.c:46 msgid "Color:" msgstr "Spalva:" #: ../src/vikcoordlayer.c:47 msgid "Minutes Width:" msgstr "Minučių plotis:" #: ../src/vikcoordlayer.c:48 msgid "Line Thickness:" msgstr "Linijos storis:" #: ../src/vikcoordlayer.c:56 msgid "Coordinate" msgstr "" #: ../src/datasource_bfilter.c:46 msgid "Max number of points:" msgstr "Didžiausias taškų skaičius:" #: ../src/datasource_bfilter.c:60 msgid "Simplify All Tracks..." msgstr "" #: ../src/datasource_bfilter.c:61 msgid "Simplified Tracks" msgstr "Supaprastinti keliai" #: ../src/datasource_bfilter.c:96 ../src/datasource_bfilter.c:97 msgid "Remove Duplicate Waypoints" msgstr "Pašalinti dubliuotus maršruto taškus" #: ../src/datasource_bfilter.c:129 msgid "Waypoints Inside This" msgstr "Maršruto taškai viduje" #: ../src/datasource_bfilter.c:130 msgid "Polygonized Layer" msgstr "" #: ../src/datasource_bfilter.c:165 msgid "Waypoints Outside This" msgstr "Maršruto taškai išorėje" #: ../src/datasource_bfilter.c:166 msgid "Polygonzied Layer" msgstr "Apjungtas sluoksnis" #: ../src/main.c:89 #, c-format msgid "Ignoring Xlib error: error code %d request code %d\n" msgstr "" #: ../src/main.c:102 msgid "Enable debug output" msgstr "Įjungti klaidų aptikimo išvedimus" #: ../src/main.c:103 msgid "Enable verbose output" msgstr "Įjungti daugiakalbį išvedimą" #: ../src/main.c:104 msgid "Show version" msgstr "Rodyti versiją" #: ../src/osm.c:106 msgid "On Disk OSM Tile Format" msgstr "" #: ../src/osm.c:121 msgid "OSM (view)" msgstr "OSM (peržiūra)" #: ../src/osm.c:125 msgid "OSM (edit)" msgstr "OSM (taisa)" #: ../src/osm.c:129 msgid "OSM (render)" msgstr "OSM (teikti)" #. Example: http://127.0.0.1:8111/load_and_zoom?left=8.19&right=8.20&top=48.605&bottom=48.590&select=node413602999 #. JOSM or merkaartor must already be running with remote interface enabled #: ../src/osm.c:136 msgid "Local port 8111 (eg JOSM)" msgstr "" #: ../src/preferences.c:285 msgid "Preferences" msgstr "Nustatymai" #: ../src/uibuilder.c:147 msgid "Take care that this password will be stored clearly in a plain file." msgstr "" "Būkite atidus, nes šis slaptažodis bus išsaugotas tiesiog paprastame faile." #: ../src/vikaggregatelayer.c:37 msgid "Aggregate" msgstr "" #: ../src/vikdemlayer.c:101 msgid "Absolute height" msgstr "" #: ../src/vikdemlayer.c:102 msgid "Height gradient" msgstr "" #: ../src/vikdemlayer.c:118 msgid "DEM Files:" msgstr "DEM failai:" #: ../src/vikdemlayer.c:119 msgid "Download Source:" msgstr "Atsisiuntimų šaltinis:" #: ../src/vikdemlayer.c:120 msgid "Min Elev Color:" msgstr "" #: ../src/vikdemlayer.c:121 msgid "Type:" msgstr "Tipas:" #: ../src/vikdemlayer.c:122 msgid "Min Elev:" msgstr "Min aukštis:" #: ../src/vikdemlayer.c:123 msgid "Max Elev:" msgstr "Max aukštis:" #: ../src/vikdemlayer.c:134 msgid "_DEM Download" msgstr "" #: ../src/vikdemlayer.c:134 msgid "DEM Download" msgstr "" #: ../src/vikdemlayer.c:188 msgid "DEM" msgstr "" #: ../src/vikdemlayer.c:284 #, c-format msgid "Number of files: %d" msgstr "Failų skaičius: %d" #: ../src/vikdemlayer.c:385 msgid "DEM Loading" msgstr "" #: ../src/vikdemlayer.c:889 #, c-format msgid "No SRTM data available for %f, %f" msgstr "Negalimi SRTM duomenys %f, %f" #: ../src/vikdemlayer.c:1149 #, c-format msgid "Downloading DEM %s" msgstr "Atsiunčiamas DEM %s" #: ../src/vikfileentry.c:68 msgid "Browse..." msgstr "Naršyti..." #: ../src/vikfileentry.c:96 msgid "Choose file" msgstr "Pasirinkite failą" #: ../src/vikfilelist.c:48 msgid "Choose file(s)" msgstr "Pasirinkite failą(us)" #: ../src/vikfilelist.c:172 msgid "Add..." msgstr "Pridėti..." #: ../src/vikfilelist.c:173 msgid "Delete" msgstr "Ištrinti" #: ../src/vikgeoreflayer.c:70 msgid "_Georef Move Map" msgstr "" #: ../src/vikgeoreflayer.c:70 msgid "Georef Move Map" msgstr "Georef judantis žemėlapis" #: ../src/vikgeoreflayer.c:77 msgid "Georef Z_oom Tool" msgstr "" #: ../src/vikgeoreflayer.c:77 msgid "Georef Zoom Tool" msgstr "Georef mastelio įrankis" #: ../src/vikgeoreflayer.c:87 msgid "GeoRef Map" msgstr "" #: ../src/vikgeoreflayer.c:335 ../src/vikmapslayer.c:685 #, c-format msgid "Couldn't open image file: %s" msgstr "Nepavyko atverti atvaizdo failo: %s" #: ../src/vikgeoreflayer.c:365 msgid "Unexpected end of file reading World file." msgstr "Netikėta World failo skaitymo pabaiga." #: ../src/vikgeoreflayer.c:381 ../src/vikgeoreflayer.c:426 msgid "Choose World file" msgstr "Pasirinkti World failą" #: ../src/vikgeoreflayer.c:394 msgid "The World file you requested could not be opened for reading." msgstr "World failo, kurio pareikalavote, neįmanoma atverti skaitymui." #: ../src/vikgeoreflayer.c:439 msgid "The file you requested could not be opened for writing." msgstr "Failas, kurio pareikalavote, negali būti atvertas rašymui." #: ../src/vikgeoreflayer.c:456 ../src/viklayer.c:480 msgid "Layer Properties" msgstr "Sluoksnio ypatybės" #: ../src/vikgeoreflayer.c:478 msgid "World File Parameters:" msgstr "World failo parametrai:" #: ../src/vikgeoreflayer.c:479 msgid "Load From File..." msgstr "Įkelti iš failo..." #: ../src/vikgeoreflayer.c:484 msgid "Corner pixel easting:" msgstr "Kraštinis rytų taškas:" #: ../src/vikgeoreflayer.c:486 msgid "the UTM \"easting\" value of the upper-right corner pixel of the map" msgstr "" #: ../src/vikgeoreflayer.c:488 msgid "Corner pixel northing:" msgstr "Kraštinis šiaurės taškas:" #: ../src/vikgeoreflayer.c:490 msgid "the UTM \"northing\" value of the upper-right corner pixel of the map" msgstr "" #: ../src/vikgeoreflayer.c:492 msgid "X (easting) scale (mpp): " msgstr "X (rytinė) padala (mpp): " #: ../src/vikgeoreflayer.c:493 msgid "Y (northing) scale (mpp): " msgstr "Y (šiaurinė) padala (mpp): " #: ../src/vikgeoreflayer.c:496 msgid "the scale of the map in the X direction (meters per pixel)" msgstr "" #: ../src/vikgeoreflayer.c:498 msgid "the scale of the map in the Y direction (meters per pixel)" msgstr "" #: ../src/vikgeoreflayer.c:500 msgid "Map Image:" msgstr "Žemėlapio atvaizdas:" #. Now with icons #: ../src/vikgeoreflayer.c:608 msgid "_Zoom to Fit Map" msgstr "" #: ../src/vikgeoreflayer.c:614 msgid "_Goto Map Center" msgstr "" #: ../src/vikgeoreflayer.c:620 msgid "_Export to World File" msgstr "" #: ../src/vikgoto.c:75 msgid "No goto tool available." msgstr "" #: ../src/vikgoto.c:88 ../src/vikgoto.c:107 msgid "goto" msgstr "" #: ../src/vikgoto.c:90 msgid "I don't know that place. Do you want another goto?" msgstr "" #: ../src/vikgoto.c:109 msgid "goto provider:" msgstr "" #: ../src/vikgoto.c:124 msgid "Enter address or place name:" msgstr "Įveskite adresą ar vietos pavadinimą:" #: ../src/vikgpslayer.c:127 msgid "Data Mode" msgstr "" #: ../src/vikgpslayer.c:129 msgid "Realtime Tracking Mode" msgstr "" #: ../src/vikgpslayer.c:137 msgid "Keep vehicle at center" msgstr "" #: ../src/vikgpslayer.c:138 msgid "Keep vehicle on screen" msgstr "" #: ../src/vikgpslayer.c:139 msgid "Disable" msgstr "" #: ../src/vikgpslayer.c:152 msgid "Download Tracks:" msgstr "" #: ../src/vikgpslayer.c:153 msgid "Upload Tracks:" msgstr "" #: ../src/vikgpslayer.c:154 msgid "Download Routes:" msgstr "" #: ../src/vikgpslayer.c:155 msgid "Upload Routes:" msgstr "" #: ../src/vikgpslayer.c:156 msgid "Download Waypoints:" msgstr "" #: ../src/vikgpslayer.c:157 msgid "Upload Waypoints:" msgstr "" #: ../src/vikgpslayer.c:159 msgid "Recording tracks" msgstr "Įrašomi keliai" #: ../src/vikgpslayer.c:160 msgid "Jump to current position on start" msgstr "Peršokti į esamą vietą paleidus programą" #: ../src/vikgpslayer.c:161 msgid "Moving Map Method:" msgstr "Perkeliamo žemėlapio metodas:" #: ../src/vikgpslayer.c:162 msgid "Gpsd Host:" msgstr "Gpsd šeimininkas:" #: ../src/vikgpslayer.c:163 msgid "Gpsd Port:" msgstr "Gpsd prievadas:" #: ../src/vikgpslayer.c:164 msgid "Gpsd Retry Interval (seconds):" msgstr "Gpsd bandymų intervalas (sekundėmis):" #: ../src/vikgpslayer.c:179 msgid "GPS" msgstr "" #: ../src/vikgpslayer.c:242 ../src/vikgpslayer.c:1258 msgid "GPS Download" msgstr "GPS atsiuntimas" #: ../src/vikgpslayer.c:242 ../src/vikgpslayer.c:1258 #: ../src/viktrwlayer.c:3094 msgid "GPS Upload" msgstr "GPS išsiuntimas" #: ../src/vikgpslayer.c:244 msgid "GPS Realtime Tracking" msgstr "GPS realaus laiko sekimas" #: ../src/vikgpslayer.c:451 msgid "Unknown GPS Protocol" msgstr "Nežinomas GPS protokolas" #: ../src/vikgpslayer.c:469 msgid "Unknown serial port device" msgstr "Nežinomas įrenginio nuoseklusis prievadas" #: ../src/vikgpslayer.c:572 #, c-format msgid "%s: unknown parameter" msgstr "%s: nežinomas parametras" #. Now with icons #: ../src/vikgpslayer.c:693 msgid "_Upload to GPS" msgstr "Į_kelti į GPS" #: ../src/vikgpslayer.c:699 msgid "Download from _GPS" msgstr "" #: ../src/vikgpslayer.c:720 msgid "Empty _Realtime" msgstr "" #: ../src/vikgpslayer.c:727 msgid "E_mpty Upload" msgstr "" #: ../src/vikgpslayer.c:733 msgid "_Empty Download" msgstr "" #: ../src/vikgpslayer.c:739 msgid "Empty _All" msgstr "" #. #. NB It's not fatal if this gives 2 for example! Hence removal of the g_assert #. This happens when copied GPS layer is deleted (not sure why the number_handlers would be 2) #. I don't think there's any side effects and certainly better than the program just aborting #. #: ../src/vikgpslayer.c:756 #, c-format msgid "Unexpected number of disconnected handlers: %d" msgstr "" #: ../src/vikgpslayer.c:898 #, c-format msgid "Uploading %d waypoint..." msgid_plural "Uploading %d waypoints..." msgstr[0] "Išsiunčiamas %d maršruto taškas..." msgstr[1] "Išsiunčiami %d maršruto taškai..." msgstr[2] "Išsiunčiama %d maršruto taškų..." #: ../src/vikgpslayer.c:899 #, c-format msgid "Uploading %d trackpoint..." msgid_plural "Uploading %d trackpoints..." msgstr[0] "Išsiunčiamas %d kelio taškas..." msgstr[1] "Išsiunčiami %d kelio taškai..." msgstr[2] "Išsiunčiama %d kelio taškų..." #: ../src/vikgpslayer.c:900 #, c-format msgid "Uploading %d routepoint..." msgid_plural "Uploading %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:925 #, c-format msgid "Downloaded %d out of %d waypoint..." msgid_plural "Downloaded %d out of %d waypoints..." msgstr[0] "Atsiųstas %d iš %d maršruto taškų..." msgstr[1] "Atsiųsti %d iš %d maršruto taškų..." msgstr[2] "Atsiųsta %d iš %d maršruto taškų..." #: ../src/vikgpslayer.c:926 #, c-format msgid "Downloaded %d out of %d trackpoint..." msgid_plural "Downloaded %d out of %d trackpoints..." msgstr[0] "Atsiųstas %d iš %d kelio taškų..." msgstr[1] "Atsiųsti %d iš %d kelio taškų..." msgstr[2] "Atsiųsta %d iš %d kelio taškų..." #: ../src/vikgpslayer.c:927 #, c-format msgid "Downloaded %d out of %d routepoint..." msgid_plural "Downloaded %d out of %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:932 #, c-format msgid "Uploaded %d out of %d waypoint..." msgid_plural "Uploaded %d out of %d waypoints..." msgstr[0] "Išsiųstas %d iš %d maršruto taškų..." msgstr[1] "Išsiųsti %d iš %d maršruto taškų..." msgstr[2] "Išsiųsta %d iš %d maršruto taškų..." #: ../src/vikgpslayer.c:933 #, c-format msgid "Uploaded %d out of %d trackpoint..." msgid_plural "Uploaded %d out of %d trackpoints..." msgstr[0] "Išsiųstas %d iš %d kelio taškų..." msgstr[1] "Išsiųsti %d iš %d kelio taškų..." msgstr[2] "Išsiųsta %d iš %d kelio taškų..." #: ../src/vikgpslayer.c:934 #, c-format msgid "Uploaded %d out of %d routepoint..." msgid_plural "Uploaded %d out of %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:942 #, c-format msgid "Downloaded %d waypoint" msgid_plural "Downloaded %d waypoints" msgstr[0] "Atsiųstas %d maršruto taškas" msgstr[1] "Atsiųsti %d maršruto taškai" msgstr[2] "Atsiųsta %d maršruto taškų" #: ../src/vikgpslayer.c:943 #, c-format msgid "Downloaded %d trackpoint" msgid_plural "Downloaded %d trackpoints" msgstr[0] "Atsiųstas %d kelio taškas" msgstr[1] "Atsiųsti %d kelio taškai" msgstr[2] "Atsiųsta %d kelio taškų" #: ../src/vikgpslayer.c:944 #, c-format msgid "Downloaded %d routepoint" msgid_plural "Downloaded %d routepoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:949 #, c-format msgid "Uploaded %d waypoint" msgid_plural "Uploaded %d waypoints" msgstr[0] "Išsiųstas %d maršruto taškas" msgstr[1] "Išsiųsti %d maršruto taškai" msgstr[2] "Išsiųsta %d maršruto taškų" #: ../src/vikgpslayer.c:950 #, c-format msgid "Uploaded %d trackpoint" msgid_plural "Uploaded %d trackpoints" msgstr[0] "Išsiųstas %d kelio taškas" msgstr[1] "Išsiųsti %d kelio taškai" msgstr[2] "Išsiųsta %d kelio taškų" #: ../src/vikgpslayer.c:951 #, c-format msgid "Uploaded %d routepoint" msgid_plural "Uploaded %d routepoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:1180 msgid "Error: couldn't find gpsbabel." msgstr "Klaida: neįmanoma surasti gpsbabel." #: ../src/vikgpslayer.c:1269 msgid "Warning - GPS Upload items may overwrite each other" msgstr "" #: ../src/vikgpslayer.c:1301 msgid "Status: detecting gpsbabel" msgstr "Būsena: aptinkamas gpsbabel" #: ../src/vikgpslayer.c:1332 msgid "No GPS items selected for transfer." msgstr "" #: ../src/vikgpslayer.c:1347 msgid "Could not turn off device." msgstr "" #: ../src/vikgpslayer.c:1385 msgid "Are you sure you want to delete GPS Upload data?" msgstr "" #: ../src/vikgpslayer.c:1398 msgid "Are you sure you want to delete GPS Download data?" msgstr "" #: ../src/vikgpslayer.c:1412 msgid "Are you sure you want to delete GPS Realtime data?" msgstr "" #: ../src/vikgpslayer.c:1425 msgid "Are you sure you want to delete All GPS data?" msgstr "" #: ../src/viklayerspanel.c:55 msgid "/C_ut" msgstr "/_Iškirpti" #: ../src/viklayerspanel.c:56 msgid "/_Copy" msgstr "/_Kopijuoti" #: ../src/viklayerspanel.c:57 msgid "/_Paste" msgstr "/Į_terpti" #: ../src/viklayerspanel.c:58 msgid "/_Delete" msgstr "/_Ištrinti" #: ../src/viklayerspanel.c:59 msgid "/New Layer" msgstr "/Naujas sluoksnis" #: ../src/viklayerspanel.c:127 msgid "Top Layer" msgstr "Viršutinis sluoksnis" #: ../src/viklayerspanel.c:143 msgid "Add new layer" msgstr "Pridėti naują sluoksnį" #: ../src/viklayerspanel.c:150 msgid "Remove selected layer" msgstr "Pašalinti pažymėtą sluoksnį" #: ../src/viklayerspanel.c:157 msgid "Move selected layer up" msgstr "" #: ../src/viklayerspanel.c:164 msgid "Move selected layer down" msgstr "" #: ../src/viklayerspanel.c:171 msgid "Cut selected layer" msgstr "Iškirpti pasirinktą sluoksnį" #: ../src/viklayerspanel.c:178 msgid "Copy selected layer" msgstr "Kopijuoti pasirinktą sluoksnį" #: ../src/viklayerspanel.c:185 msgid "Paste layer below selected layer" msgstr "" #. TODO: FIXME: if name has a '/' in it it will get all messed up. why not have an itemfactory field with #. name, icon, shortcut, etc.? #: ../src/viklayerspanel.c:204 ../src/vikwindow.c:3292 #, c-format msgid "New _%s Layer" msgstr "" #: ../src/viklayerspanel.c:511 msgid "Aggregate Layers have no settable properties." msgstr "Bendri sluoksniai neturi nustatomų ypatybių." #: ../src/viklayerspanel.c:555 msgid "You cannot cut the Top Layer." msgstr "Jūs negalite iškirpti viršutinio sluoksnio." #: ../src/viklayerspanel.c:600 #, c-format msgid "Are you sure you want to delete %s?" msgstr "" #: ../src/viklayerspanel.c:617 msgid "You cannot delete the Top Layer." msgstr "Jūs negalite ištrinti viršutinio sluoksnio." #: ../src/viklayerspanel.c:701 msgid "Are you sure you wish to delete all layers?" msgstr "Ar tikrai norite ištrinti visus sluoksnius?" #. ******* MAPZOOMS ******** #: ../src/vikmapslayer.c:91 msgid "Use Viking Zoom Level" msgstr "Naudoti Viking mastelio lygį" #: ../src/vikmapslayer.c:124 msgid "Map Type:" msgstr "Žemėlapio tipas:" #: ../src/vikmapslayer.c:125 msgid "Maps Directory:" msgstr "Žemėlapių katalogas:" #: ../src/vikmapslayer.c:126 msgid "Alpha:" msgstr "Alfa:" #: ../src/vikmapslayer.c:127 msgid "Control the Alpha value for transparency effects" msgstr "" #: ../src/vikmapslayer.c:128 msgid "Autodownload maps:" msgstr "Automatiškai atsiųsti žemėlapiai:" #: ../src/vikmapslayer.c:129 msgid "Autodownload Only Gets Missing Maps:" msgstr "" #: ../src/vikmapslayer.c:130 msgid "" "Using this option avoids attempting to update already acquired tiles. This " "can be useful if you want to restrict the network usage, without having to " "resort to manual control. Only applies when 'Autodownload Maps' is on." msgstr "" #: ../src/vikmapslayer.c:131 msgid "Zoom Level:" msgstr "Mastelio lygis:" #: ../src/vikmapslayer.c:132 msgid "" "Determines the method of displaying map tiles for the current zoom level. " "'Viking Zoom Level' uses the best matching level, otherwise setting a fixed " "value will always use map tiles of the specified value regardless of the " "actual zoom level." msgstr "" #: ../src/vikmapslayer.c:146 msgid "_Maps Download" msgstr "" #: ../src/vikmapslayer.c:146 msgid "Maps Download" msgstr "Atsiųsti žemėlapiai" #: ../src/vikmapslayer.c:161 msgid "Map" msgstr "Žemėlapis" #: ../src/vikmapslayer.c:249 msgid "Default maplayer directory:" msgstr "" #: ../src/vikmapslayer.c:249 msgid "Choose a directory to store cached Map tiles for this layer" msgstr "" #: ../src/vikmapslayer.c:505 msgid "Unknown map type" msgstr "Nežinomas žemėlapio tipas" #: ../src/vikmapslayer.c:516 msgid "Unknown Map Zoom" msgstr "Nežinomas žemėlapio mastelis" #: ../src/vikmapslayer.c:589 #, c-format msgid "" "New map cannot be displayed in the current drawmode.\n" "Select \"%s\" from View menu to view it." msgstr "" "Naujas žemėlapis neįmanoma parodyti dabartiniame braižymo režime.\n" "Pasirinkite \"%s\" iš Rodyti meniu, kad galėtumėte peržiūrėti jį." #: ../src/vikmapslayer.c:753 #, c-format msgid "" "Cowardly refusing to draw tiles or existence of tiles beyond %d zoom out " "factor" msgstr "" "Bailiai atsisakyti brėžti kvadratus arba esančius kvadratų už %d mastelio " "faktoriaus" #: ../src/vikmapslayer.c:1157 #, c-format msgid "Redownloading up to %d %s map..." msgid_plural "Redownloading up to %d %s maps..." msgstr[0] "Pakartotinai atsiunčiama iki %d %s žemėlapio..." msgstr[1] "Pakartotinai atsiunčiama iki %d %s žemėlapių..." msgstr[2] "Pakartotinai atsiunčiama iki %d %s žemėlapių..." #: ../src/vikmapslayer.c:1159 #, c-format msgid "Redownloading %d %s map..." msgid_plural "Redownloading %d %s maps..." msgstr[0] "Pakartotinai atsiunčiamas %d %s žemėlapis..." msgstr[1] "Pakartotinai atsiunčiami %d %s žemėlapiai..." msgstr[2] "Pakartotinai atsiunčiama %d %s žemėlapių..." #: ../src/vikmapslayer.c:1163 ../src/vikmapslayer.c:1238 #, c-format msgid "Downloading %d %s map..." msgid_plural "Downloading %d %s maps..." msgstr[0] "Atsiunčiamas %d %s žemėlapis..." msgstr[1] "Atsiunčiami %d %s žemėlapiai..." msgstr[2] "Atsiunčiama %d %s žemėlapių..." #: ../src/vikmapslayer.c:1311 #, c-format msgid "" "\n" "Source: %s\n" "\n" "Tile File: %s\n" "Tile File Timestamp: %s" msgstr "" #: ../src/vikmapslayer.c:1318 #, c-format msgid "" "Source: %s\n" "\n" "No Tile File!" msgstr "" #: ../src/vikmapslayer.c:1356 msgid "Redownload _Bad Map(s)" msgstr "" #: ../src/vikmapslayer.c:1360 msgid "Redownload _New Map(s)" msgstr "" #: ../src/vikmapslayer.c:1364 msgid "Redownload _All Map(s)" msgstr "" #: ../src/vikmapslayer.c:1368 msgid "_Show Tile Information" msgstr "" #: ../src/vikmapslayer.c:1449 #, c-format msgid "" "Wrong drawmode for this map.\n" "Select \"%s\" from View menu and try again." msgstr "" "Klaidingas šio žemėlapio braižymo režimas.\n" "Pasirinkite iš meniu \"%s\" ir bandykite dar kartą." #: ../src/vikmapslayer.c:1454 msgid "Wrong zoom level for this map." msgstr "Klaidingas šio žemėlapio mastelio lygis." #. Now with icons #: ../src/vikmapslayer.c:1485 msgid "Download _Missing Onscreen Maps" msgstr "" #: ../src/vikmapslayer.c:1492 msgid "Download _New Onscreen Maps" msgstr "" #: ../src/vikmapslayer.c:1499 msgid "Reload _All Onscreen Maps" msgstr "" #: ../src/viktreeview.c:263 msgid "Layer Name" msgstr "Sluoksnio pavadinimas" #: ../src/viktreeview.c:742 #, c-format msgid "delete data from %s\n" msgstr "ištrinti duomenis iš %s\n" #: ../src/viktrwlayer.c:377 msgid "Create _Waypoint" msgstr "" #: ../src/viktrwlayer.c:377 msgid "Create Waypoint" msgstr "Sukurti maršruto tašką" #: ../src/viktrwlayer.c:383 msgid "Create _Track" msgstr "" #: ../src/viktrwlayer.c:383 msgid "Create Track" msgstr "Sukurti kelią" #: ../src/viktrwlayer.c:392 msgid "Create _Route" msgstr "" #: ../src/viktrwlayer.c:392 msgid "Create Route" msgstr "" #: ../src/viktrwlayer.c:401 msgid "_Edit Waypoint" msgstr "" #: ../src/viktrwlayer.c:401 msgid "Edit Waypoint" msgstr "Keisti maršruto taškus" #: ../src/viktrwlayer.c:409 msgid "Edit Trac_kpoint" msgstr "" #: ../src/viktrwlayer.c:409 msgid "Edit Trackpoint" msgstr "Keisti kelio taškus" #: ../src/viktrwlayer.c:417 msgid "Show P_icture" msgstr "" #: ../src/viktrwlayer.c:417 msgid "Show Picture" msgstr "Rodyti nuotrauką" #: ../src/viktrwlayer.c:424 msgid "Route _Finder" msgstr "" #: ../src/viktrwlayer.c:424 msgid "Route Finder" msgstr "" #. ***** PARAMETERS ***** #: ../src/viktrwlayer.c:447 ../src/viktrwlayer.c:1942 #: ../src/viktrwlayer.c:1944 msgid "Waypoints" msgstr "Maršruto taškai" #: ../src/viktrwlayer.c:447 ../src/viktrwlayer.c:1933 #: ../src/viktrwlayer.c:1935 msgid "Tracks" msgstr "Keliai" #: ../src/viktrwlayer.c:447 msgid "Waypoint Images" msgstr "Maršruto taškų atvaizdai" #: ../src/viktrwlayer.c:450 msgid "Draw by Track" msgstr "Brėžti pagal kelią" #: ../src/viktrwlayer.c:450 msgid "Draw by Speed" msgstr "" #: ../src/viktrwlayer.c:450 msgid "All Tracks Same Color" msgstr "" #: ../src/viktrwlayer.c:451 msgid "Filled Square" msgstr "Užpildytas kvadratas" #: ../src/viktrwlayer.c:451 msgid "Square" msgstr "Kvadratas" #: ../src/viktrwlayer.c:451 msgid "Circle" msgstr "Apskritimas" #: ../src/viktrwlayer.c:451 msgid "X" msgstr "X" #: ../src/viktrwlayer.c:477 msgid "Extra Extra Small" msgstr "" #: ../src/viktrwlayer.c:478 msgid "Extra Small" msgstr "" #: ../src/viktrwlayer.c:479 msgid "Small" msgstr "" #: ../src/viktrwlayer.c:480 msgid "Medium" msgstr "" #: ../src/viktrwlayer.c:481 msgid "Large" msgstr "" #: ../src/viktrwlayer.c:482 msgid "Extra Large" msgstr "" #: ../src/viktrwlayer.c:483 msgid "Extra Extra Large" msgstr "" #: ../src/viktrwlayer.c:491 msgid "Track Drawing Mode:" msgstr "Kelio brėžimo režimas:" #: ../src/viktrwlayer.c:492 msgid "All Tracks Color:" msgstr "" #: ../src/viktrwlayer.c:493 msgid "The color used when 'All Tracks Same Color' drawing mode is selected" msgstr "" #: ../src/viktrwlayer.c:494 msgid "Draw Track Lines" msgstr "Brėžti kelio linijas" #: ../src/viktrwlayer.c:495 msgid "Track Thickness:" msgstr "Kelio storis:" #: ../src/viktrwlayer.c:496 msgid "Draw Track Direction" msgstr "" #: ../src/viktrwlayer.c:497 msgid "Direction Size:" msgstr "" #: ../src/viktrwlayer.c:498 msgid "Draw Trackpoints" msgstr "Brėžti kelio taškus" #: ../src/viktrwlayer.c:499 msgid "Trackpoint Size:" msgstr "" #: ../src/viktrwlayer.c:500 msgid "Draw Elevation" msgstr "Brėžti aukštį" #: ../src/viktrwlayer.c:501 msgid "Draw Elevation Height %:" msgstr "Brėžiamas kilimo aukštis %:" #: ../src/viktrwlayer.c:503 msgid "Draw Stops" msgstr "Brėžimas sustabdytas" #: ../src/viktrwlayer.c:504 msgid "" "Whether to draw a marker when trackpoints are at the same position but over " "the minimum stop length apart in time" msgstr "" #: ../src/viktrwlayer.c:505 msgid "Min Stop Length (seconds):" msgstr "Min sustojimo laikas (sekundėmis):" #: ../src/viktrwlayer.c:507 msgid "Track BG Thickness:" msgstr "Kelio fono storis:" #: ../src/viktrwlayer.c:508 msgid "Track Background Color" msgstr "Kelio fono spalva" #: ../src/viktrwlayer.c:509 msgid "Draw by Speed Factor (%):" msgstr "" #: ../src/viktrwlayer.c:510 msgid "" "The percentage factor away from the average speed determining the color used" msgstr "" #: ../src/viktrwlayer.c:512 msgid "Draw Labels" msgstr "Brėžinio kortelės" #: ../src/viktrwlayer.c:513 msgid "Waypoint Font Size:" msgstr "" #: ../src/viktrwlayer.c:514 msgid "Waypoint Color:" msgstr "Maršruto taško spalva:" #: ../src/viktrwlayer.c:515 msgid "Waypoint Text:" msgstr "Maršruto taško tekstas:" #: ../src/viktrwlayer.c:516 msgid "Background:" msgstr "Fonas:" #: ../src/viktrwlayer.c:517 msgid "Fake BG Color Translucency:" msgstr "Netinkamas fono spalvos skaidrumas:" #: ../src/viktrwlayer.c:518 msgid "Waypoint marker:" msgstr "Maršruto taško žymeklis:" #: ../src/viktrwlayer.c:519 msgid "Waypoint size:" msgstr "Maršruto taško dydis:" #: ../src/viktrwlayer.c:520 msgid "Draw Waypoint Symbols:" msgstr "Brėžti maršruto taško simbolius:" #: ../src/viktrwlayer.c:522 msgid "Draw Waypoint Images" msgstr "Brėžti maršruto taško atvaizdus" #: ../src/viktrwlayer.c:523 msgid "Image Size (pixels):" msgstr "Atvaizdo dydis (taškais):" #: ../src/viktrwlayer.c:524 msgid "Image Alpha:" msgstr "Alfa atvaizdas:" #: ../src/viktrwlayer.c:525 msgid "Image Memory Cache Size:" msgstr "Atvaizdi spartinančiosios atminties dydis:" #: ../src/viktrwlayer.c:610 msgid "TrackWaypoint" msgstr "" #: ../src/viktrwlayer.c:1951 ../src/viktrwlayer.c:1953 msgid "Routes" msgstr "" #: ../src/viktrwlayer.c:2144 #, c-format msgid " in %d:%02d hrs:mins" msgstr "" #: ../src/viktrwlayer.c:2148 #, c-format msgid "" "\n" "%sTotal Length %.1f %s%s" msgstr "" #: ../src/viktrwlayer.c:2154 #, c-format msgid "Tracks: %d - Waypoints: %d - Routes: %d%s" msgstr "" #: ../src/viktrwlayer.c:2174 #, c-format msgid "Tracks: %d" msgstr "" #: ../src/viktrwlayer.c:2184 #, c-format msgid "Routes: %d" msgstr "" #: ../src/viktrwlayer.c:2215 #, c-format msgid "- %d:%02d hrs:mins" msgstr "" #: ../src/viktrwlayer.c:2223 #, c-format msgid "%s%.1f km %s" msgstr "" #: ../src/viktrwlayer.c:2226 #, c-format msgid "%s%.1f miles %s" msgstr "" #: ../src/viktrwlayer.c:2240 #, c-format msgid "Waypoints: %d" msgstr "" #: ../src/viktrwlayer.c:2266 #, c-format msgid "Trkpt: Alt %dft" msgstr "" #. VIK_UNITS_HEIGHT_METRES: #: ../src/viktrwlayer.c:2270 #, c-format msgid "Trkpt: Alt %dm" msgstr "" #. Compact date time format #: ../src/viktrwlayer.c:2277 #, c-format msgid " | Time %x %X" msgstr "" #: ../src/viktrwlayer.c:2295 #, c-format msgid " | Track: %s" msgstr "" #. Combine parts to make overall message #: ../src/viktrwlayer.c:2299 #, c-format msgid "%s%s | %s %s %s" msgstr "" #: ../src/viktrwlayer.c:2314 #, c-format msgid "Wpt: Alt %dft" msgstr "" #. VIK_UNITS_HEIGHT_METRES: #: ../src/viktrwlayer.c:2318 #, c-format msgid "Wpt: Alt %dm" msgstr "" #. Add comment if available #: ../src/viktrwlayer.c:2333 #, c-format msgid "%s | %s %s | Comment: %s" msgstr "" #: ../src/viktrwlayer.c:2335 #, c-format msgid "%s | %s %s" msgstr "" #: ../src/viktrwlayer.c:2563 ../src/viktrwlayer.c:2634 msgid "This layer has no waypoints or trackpoints." msgstr "Šis sluoksnis neturi maršruto ir kelio taškų." #: ../src/viktrwlayer.c:2661 ../src/vikwindow.c:2407 ../src/vikwindow.c:2848 #, c-format msgid "The file \"%s\" exists, do you wish to overwrite it?" msgstr "Failas \"%s\" jau yra, ar norite pakeisti?" #: ../src/viktrwlayer.c:2671 ../src/vikwindow.c:2429 msgid "The filename you requested could not be opened for writing." msgstr "Failas, kurio pareikalavote, negali būti atvertas rašymui." #: ../src/viktrwlayer.c:2676 ../src/viktrwlayer.c:2681 #: ../src/viktrwlayer.c:2691 ../src/viktrwlayer.c:2703 msgid "Export Layer" msgstr "Eksportavimo sluoksnis" #: ../src/viktrwlayer.c:2720 msgid "Could not create temporary file for export." msgstr "" #: ../src/viktrwlayer.c:2729 #, c-format msgid "Could not launch %s." msgstr "" #: ../src/viktrwlayer.c:2773 msgid "Export Track as GPX" msgstr "" #: ../src/viktrwlayer.c:2795 msgid "Find" msgstr "Rasti" #: ../src/viktrwlayer.c:2805 msgid "Waypoint Name:" msgstr "Maršruto taško pavadinimas:" #: ../src/viktrwlayer.c:2822 msgid "Waypoint not found in this layer." msgstr "Maršruto taškas nerastas šiame sluoksnyje." #: ../src/viktrwlayer.c:3090 msgid "Can not upload invisible track." msgstr "" #: ../src/viktrwlayer.c:3192 ../src/viktrwlayer.c:7785 msgid "Track" msgstr "" #: ../src/viktrwlayer.c:3215 ../src/viktrwlayer.c:7817 msgid "Route" msgstr "" #: ../src/viktrwlayer.c:3296 ../src/viktrwlayer.c:6265 #: ../src/viktrwlayer.c:6314 msgid "_Finish Route" msgstr "" #: ../src/viktrwlayer.c:3298 ../src/viktrwlayer.c:6223 #: ../src/viktrwlayer.c:6312 msgid "_Finish Track" msgstr "" #. Now with icons #: ../src/viktrwlayer.c:3310 msgid "_View Layer" msgstr "" #: ../src/viktrwlayer.c:3317 msgid "V_iew" msgstr "" #: ../src/viktrwlayer.c:3323 msgid "View All _Tracks" msgstr "" #: ../src/viktrwlayer.c:3328 msgid "View All _Routes" msgstr "" #: ../src/viktrwlayer.c:3333 msgid "View All _Waypoints" msgstr "" #: ../src/viktrwlayer.c:3338 msgid "_Goto Center of Layer" msgstr "" #: ../src/viktrwlayer.c:3344 ../src/viktrwlayer.c:6199 msgid "Goto _Waypoint..." msgstr "" #: ../src/viktrwlayer.c:3350 msgid "_Export Layer" msgstr "" #: ../src/viktrwlayer.c:3356 msgid "Export as GPS_Point..." msgstr "" #: ../src/viktrwlayer.c:3361 msgid "Export as GPS_Mapper..." msgstr "" #: ../src/viktrwlayer.c:3366 msgid "Export as _GPX..." msgstr "" #: ../src/viktrwlayer.c:3371 msgid "Export as _KML..." msgstr "" #: ../src/viktrwlayer.c:3376 msgid "Open with External Program_1: " msgstr "" #: ../src/viktrwlayer.c:3383 msgid "Open with External Program_2: " msgstr "" #: ../src/viktrwlayer.c:3391 ../src/vikwindow.c:3145 msgid "_New" msgstr "_Nauja" #: ../src/viktrwlayer.c:3397 msgid "New _Waypoint..." msgstr "" #: ../src/viktrwlayer.c:3403 msgid "New _Track" msgstr "" #: ../src/viktrwlayer.c:3411 msgid "New _Route" msgstr "" #: ../src/viktrwlayer.c:3420 ../src/viktrwlayer.c:6597 msgid "Geotag _Images..." msgstr "" #: ../src/viktrwlayer.c:3427 msgid "_Acquire" msgstr "" #: ../src/viktrwlayer.c:3433 ../src/vikwindow.c:3150 msgid "From _GPS..." msgstr "Iš _GPS..." #: ../src/viktrwlayer.c:3439 msgid "From Google _Directions..." msgstr "" #: ../src/viktrwlayer.c:3446 msgid "From _OSM Traces..." msgstr "" #: ../src/viktrwlayer.c:3451 msgid "From _My OSM Traces..." msgstr "" #: ../src/viktrwlayer.c:3459 ../src/vikwindow.c:3166 msgid "From _Wikipedia Waypoints" msgstr "" #: ../src/viktrwlayer.c:3465 msgid "Within _Layer Bounds" msgstr "" #: ../src/viktrwlayer.c:3471 msgid "Within _Current View" msgstr "" #: ../src/viktrwlayer.c:3479 msgid "From Geo_caching..." msgstr "" #: ../src/viktrwlayer.c:3486 ../src/vikwindow.c:3163 msgid "From Geotagged _Images..." msgstr "" #: ../src/viktrwlayer.c:3492 msgid "From _File..." msgstr "" #: ../src/viktrwlayer.c:3498 ../src/viktrwlayer.c:6542 msgid "_Upload" msgstr "" #: ../src/viktrwlayer.c:3504 msgid "Upload to _GPS..." msgstr "" #: ../src/viktrwlayer.c:3511 ../src/viktrwlayer.c:6570 msgid "Upload to _OSM..." msgstr "" #: ../src/viktrwlayer.c:3519 msgid "De_lete" msgstr "" #: ../src/viktrwlayer.c:3525 msgid "Delete All _Tracks" msgstr "" #: ../src/viktrwlayer.c:3531 msgid "Delete Tracks _From Selection..." msgstr "" #: ../src/viktrwlayer.c:3537 ../src/viktrwlayer.c:6290 msgid "Delete _All Routes" msgstr "" #: ../src/viktrwlayer.c:3543 ../src/viktrwlayer.c:6296 msgid "_Delete Routes From Selection..." msgstr "" #: ../src/viktrwlayer.c:3549 msgid "Delete All _Waypoints" msgstr "" #: ../src/viktrwlayer.c:3555 msgid "Delete Waypoints From _Selection..." msgstr "" #: ../src/viktrwlayer.c:4128 #, c-format msgid "Are you sure you want to delete all tracks in %s?" msgstr "" #: ../src/viktrwlayer.c:4138 #, c-format msgid "Are you sure you want to delete all routes in %s?" msgstr "" #: ../src/viktrwlayer.c:4148 #, c-format msgid "Are you sure you want to delete all waypoints in %s?" msgstr "" #: ../src/viktrwlayer.c:4165 #, c-format msgid "Are you sure you want to delete the waypoint \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4178 #, c-format msgid "Are you sure you want to delete the track \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4191 #, c-format msgid "Are you sure you want to delete the route \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4351 ../src/viktrwlayer.c:4922 msgid "" "Converting a track to a route removes extra track data such as segments, " "timestamps, etc...\n" "Do you want to continue?" msgstr "" #: ../src/viktrwlayer.c:4711 msgid "Failed. No other tracks with timestamps in this layer found" msgstr "" #: ../src/viktrwlayer.c:4713 msgid "Failed. No other tracks without timestamps in this layer found" msgstr "" #: ../src/viktrwlayer.c:4732 msgid "Merge with..." msgstr "Sujungti su..." #: ../src/viktrwlayer.c:4733 msgid "Select route to merge with" msgstr "" #: ../src/viktrwlayer.c:4733 msgid "Select track to merge with" msgstr "Pasirinkite kelią sujungimui su" #: ../src/viktrwlayer.c:4818 ../src/viktrwlayer.c:4895 msgid "Append Route" msgstr "" #: ../src/viktrwlayer.c:4818 ../src/viktrwlayer.c:4895 msgid "Append Track" msgstr "" #: ../src/viktrwlayer.c:4819 msgid "Select the route to append after the current route" msgstr "" #: ../src/viktrwlayer.c:4820 msgid "Select the track to append after the current track" msgstr "" #: ../src/viktrwlayer.c:4896 msgid "Select the track to append after the current route" msgstr "" #: ../src/viktrwlayer.c:4897 msgid "Select the route to append after the current track" msgstr "" #: ../src/viktrwlayer.c:4957 #, c-format msgid "%d segment merged" msgid_plural "%d segments merged" msgstr[0] "" msgstr[1] "" #: ../src/viktrwlayer.c:4973 msgid "Failed. This track does not have timestamp" msgstr "Nepavyko. Šis kelias neturi laiko žymų" #: ../src/viktrwlayer.c:4985 msgid "Failed. No other track in this layer has timestamp" msgstr "Nepavyko. Jokie kiti keliai neturi laiko žymų šiame sluoksnyje" #: ../src/viktrwlayer.c:4992 msgid "Merge Threshold..." msgstr "Sujungti slenkstį..." #: ../src/viktrwlayer.c:4993 msgid "Merge when time between tracks less than:" msgstr "Sujungti, jei tarp laiko ir kelių mažiau negu:" #: ../src/viktrwlayer.c:5128 msgid "Split Threshold..." msgstr "Išskirti slengstį..." #: ../src/viktrwlayer.c:5129 msgid "Split when time between trackpoints exceeds:" msgstr "Skaidyti, jei tarp laiko ir kelio taškų viršyjama:" #: ../src/viktrwlayer.c:5205 msgid "Split Every Nth Point" msgstr "" #: ../src/viktrwlayer.c:5206 msgid "Split on every Nth point:" msgstr "" #: ../src/viktrwlayer.c:5312 msgid "Can not split track as it has no segments" msgstr "" #: ../src/viktrwlayer.c:5340 ../src/viktrwlayer.c:5370 #, c-format msgid "Deleted %ld point" msgid_plural "Deleted %ld points" msgstr[0] "" msgstr[1] "" #: ../src/viktrwlayer.c:5531 msgid "Internal Error in vik_trw_layer_uniquify_tracks" msgstr "" #: ../src/viktrwlayer.c:5588 ../src/viktrwlayer.c:5635 #: ../src/viktrwlayer.c:5814 msgid "" "Multiple entries with the same name exist. This method only works with " "unique names. Force unique names now?" msgstr "" #: ../src/viktrwlayer.c:5599 msgid "No tracks found" msgstr "" #: ../src/viktrwlayer.c:5607 ../src/viktrwlayer.c:5654 #: ../src/viktrwlayer.c:5834 msgid "Delete Selection" msgstr "" #: ../src/viktrwlayer.c:5608 msgid "Select tracks to delete" msgstr "" #: ../src/viktrwlayer.c:5646 msgid "No routes found" msgstr "" #: ../src/viktrwlayer.c:5655 msgid "Select routes to delete" msgstr "" #: ../src/viktrwlayer.c:5761 msgid "Internal Error in vik_trw_layer_uniquify_waypoints" msgstr "" #: ../src/viktrwlayer.c:5824 msgid "No waypoints found" msgstr "" #: ../src/viktrwlayer.c:5835 msgid "Select waypoints to delete" msgstr "" #: ../src/viktrwlayer.c:5896 #, c-format msgid "" "A waypoint with the name \"%s\" already exists. Really rename to the same " "name?" msgstr "" #: ../src/viktrwlayer.c:5926 #, c-format msgid "" "A track with the name \"%s\" already exists. Really rename to the same name?" msgstr "" #: ../src/viktrwlayer.c:5963 #, c-format msgid "" "A route with the name \"%s\" already exists. Really rename to the same name?" msgstr "" #: ../src/viktrwlayer.c:6085 ../src/viktrwlayer.c:6337 msgid "_Goto" msgstr "" #: ../src/viktrwlayer.c:6104 msgid "_Visit Geocache Webpage" msgstr "" #: ../src/viktrwlayer.c:6123 msgid "_Show Picture..." msgstr "" #: ../src/viktrwlayer.c:6131 msgid "Update Geotag on _Image" msgstr "" #: ../src/viktrwlayer.c:6137 msgid "_Update" msgstr "" #: ../src/viktrwlayer.c:6142 msgid "Update and _Keep File Timestamp" msgstr "" #: ../src/viktrwlayer.c:6153 msgid "Visit _Webpage" msgstr "" #: ../src/viktrwlayer.c:6184 msgid "_New Waypoint..." msgstr "" #: ../src/viktrwlayer.c:6193 msgid "_View All Waypoints" msgstr "" #: ../src/viktrwlayer.c:6205 msgid "Delete _All Waypoints" msgstr "" #: ../src/viktrwlayer.c:6211 msgid "_Delete Waypoints From Selection..." msgstr "" #: ../src/viktrwlayer.c:6233 msgid "_View All Tracks" msgstr "" #: ../src/viktrwlayer.c:6239 msgid "_New Track" msgstr "" #: ../src/viktrwlayer.c:6247 msgid "Delete _All Tracks" msgstr "" #: ../src/viktrwlayer.c:6253 msgid "_Delete Tracks From Selection..." msgstr "" #: ../src/viktrwlayer.c:6276 msgid "_View All Routes" msgstr "" #: ../src/viktrwlayer.c:6282 msgid "_New Route" msgstr "" #: ../src/viktrwlayer.c:6327 msgid "_View Track" msgstr "" #: ../src/viktrwlayer.c:6329 msgid "_View Route" msgstr "" #: ../src/viktrwlayer.c:6343 msgid "_Startpoint" msgstr "" #: ../src/viktrwlayer.c:6349 msgid "\"_Center\"" msgstr "" #: ../src/viktrwlayer.c:6355 msgid "_Endpoint" msgstr "" #: ../src/viktrwlayer.c:6361 msgid "_Highest Altitude" msgstr "" #: ../src/viktrwlayer.c:6367 msgid "_Lowest Altitude" msgstr "" #: ../src/viktrwlayer.c:6375 msgid "_Maximum Speed" msgstr "" #: ../src/viktrwlayer.c:6384 msgid "Co_mbine" msgstr "" #: ../src/viktrwlayer.c:6392 msgid "_Merge By Time..." msgstr "" #: ../src/viktrwlayer.c:6397 msgid "Merge _Segments" msgstr "" #: ../src/viktrwlayer.c:6403 msgid "Merge _With Other Tracks..." msgstr "" #: ../src/viktrwlayer.c:6409 msgid "_Append Track..." msgstr "" #: ../src/viktrwlayer.c:6411 msgid "_Append Route..." msgstr "" #: ../src/viktrwlayer.c:6417 msgid "Append _Route..." msgstr "" #: ../src/viktrwlayer.c:6419 msgid "Append _Track..." msgstr "" #: ../src/viktrwlayer.c:6426 msgid "_Split" msgstr "" #: ../src/viktrwlayer.c:6434 msgid "_Split By Time..." msgstr "" #. ATM always enable this entry - don't want to have to analyse the track before displaying the menu - to keep the menu speedy #: ../src/viktrwlayer.c:6440 msgid "Split Se_gments" msgstr "" #: ../src/viktrwlayer.c:6446 msgid "Split By _Number of Points..." msgstr "" #: ../src/viktrwlayer.c:6451 msgid "Split at _Trackpoint" msgstr "" #: ../src/viktrwlayer.c:6460 msgid "Delete Poi_nts" msgstr "" #: ../src/viktrwlayer.c:6466 msgid "Delete Points With The Same _Position" msgstr "" #: ../src/viktrwlayer.c:6471 msgid "Delete Points With The Same _Time" msgstr "" #: ../src/viktrwlayer.c:6477 msgid "_Reverse Track" msgstr "" #: ../src/viktrwlayer.c:6479 msgid "_Reverse Route" msgstr "" #: ../src/viktrwlayer.c:6488 msgid "Down_load Maps Along Track..." msgstr "" #: ../src/viktrwlayer.c:6490 msgid "Down_load Maps Along Route..." msgstr "" #: ../src/viktrwlayer.c:6497 msgid "_Apply DEM Data" msgstr "" #: ../src/viktrwlayer.c:6504 msgid "_Export Track as GPX..." msgstr "" #: ../src/viktrwlayer.c:6506 msgid "_Export Route as GPX..." msgstr "" #: ../src/viktrwlayer.c:6513 msgid "E_xtend Track End" msgstr "" #: ../src/viktrwlayer.c:6515 msgid "E_xtend Route End" msgstr "" #: ../src/viktrwlayer.c:6522 msgid "C_onvert to a Route" msgstr "" #: ../src/viktrwlayer.c:6524 msgid "C_onvert to a Track" msgstr "" #: ../src/viktrwlayer.c:6532 msgid "Extend _Using Route Finder" msgstr "" #: ../src/viktrwlayer.c:6548 msgid "_Upload to GPS..." msgstr "" #: ../src/viktrwlayer.c:6559 msgid "_View Google Directions" msgstr "" #: ../src/viktrwlayer.c:6579 msgid "Use with _Filter" msgstr "" #: ../src/viktrwlayer.c:6612 msgid "_Edit Trackpoint" msgstr "" #: ../src/viktrwlayer.c:7524 #, c-format msgid " - Gain %dm:Loss %dm" msgstr "" #: ../src/viktrwlayer.c:7526 #, c-format msgid " - Gain %dft:Loss %dft" msgstr "" #: ../src/viktrwlayer.c:7531 #, c-format msgid " - Bearing %3.1f° - Step %s" msgstr "" #: ../src/viktrwlayer.c:8124 #, c-format msgid "Could not launch %s to open file." msgstr "" #: ../src/viktrwlayer.c:8205 #, c-format msgid "Creating %d Image Thumbnails..." msgstr "Sukūriamos %d atvaizdo miniatiūros..." #: ../src/viktrwlayer.c:8524 msgid "No map layer in use. Create one first" msgstr "Nėra naudojamų žemėlapio sluoksnių. Sukurkite." #: ../src/viktrwlayer_propwin.c:898 ../src/viktrwlayer_propwin.c:1155 #, c-format msgid "%.1f kph" msgstr "" #: ../src/viktrwlayer_propwin.c:901 ../src/viktrwlayer_propwin.c:1158 #, c-format msgid "%.1f mph" msgstr "" #: ../src/viktrwlayer_propwin.c:904 ../src/viktrwlayer_propwin.c:1161 #, c-format msgid "%.1f knots" msgstr "" #. VIK_UNITS_SPEED_METRES_PER_SECOND: #: ../src/viktrwlayer_propwin.c:908 ../src/viktrwlayer_propwin.c:1165 #, c-format msgid "%.1f m/s" msgstr "" #: ../src/viktrwlayer_propwin.c:1745 #, c-format msgid "%.1f miles" msgstr "" #: ../src/viktrwlayer_propwin.c:1747 #, c-format msgid "%.1f km" msgstr "" #: ../src/viktrwlayer_propwin.c:2681 msgid "Failed spliting track. Track unchanged" msgstr "Nepavyko atskirti kelio. Kelias liko nepakeistas." #: ../src/viktrwlayer_propwin.c:2779 ../src/viktrwlayer_propwin.c:3178 #, c-format msgid "%s - Track Properties" msgstr "%s - Kelio ypatybės" #: ../src/viktrwlayer_propwin.c:2784 msgid "Split at _Marker" msgstr "" #: ../src/viktrwlayer_propwin.c:2785 msgid "Split _Segments" msgstr "" #: ../src/viktrwlayer_propwin.c:2786 msgid "_Reverse" msgstr "" #: ../src/viktrwlayer_propwin.c:2787 msgid "_Delete Dupl." msgstr "" #: ../src/viktrwlayer_propwin.c:2813 msgid "Comment:" msgstr "Komentaras:" #: ../src/viktrwlayer_propwin.c:2814 msgid "Description:" msgstr "" #: ../src/viktrwlayer_propwin.c:2815 msgid "Track Length:" msgstr "Kelio ilgis:" #: ../src/viktrwlayer_propwin.c:2816 msgid "Trackpoints:" msgstr "Kelio taškai:" #: ../src/viktrwlayer_propwin.c:2817 msgid "Segments:" msgstr "Atkarpos:" #: ../src/viktrwlayer_propwin.c:2818 msgid "Duplicate Points:" msgstr "Sudubliuoti taškai:" #: ../src/viktrwlayer_propwin.c:2819 msgid "Max Speed:" msgstr "Didžiausias greitis:" #: ../src/viktrwlayer_propwin.c:2820 msgid "Avg. Speed:" msgstr "Vidutinis greitis:" #: ../src/viktrwlayer_propwin.c:2821 msgid "Moving Avg. Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:2822 msgid "Avg. Dist. Between TPs:" msgstr "Vid. nuot. tarp :" #: ../src/viktrwlayer_propwin.c:2823 msgid "Elevation Range:" msgstr "Aukščio intervalas:" #: ../src/viktrwlayer_propwin.c:2824 msgid "Total Elevation Gain/Loss:" msgstr "Visas aukščio intervalas:" #: ../src/viktrwlayer_propwin.c:2825 msgid "Start:" msgstr "Pradžia:" #: ../src/viktrwlayer_propwin.c:2826 msgid "End:" msgstr "Pabaiga:" #: ../src/viktrwlayer_propwin.c:2827 msgid "Duration:" msgstr "Trukmė:" #: ../src/viktrwlayer_propwin.c:2828 msgid "Color:" msgstr "" #: ../src/viktrwlayer_propwin.c:2877 ../src/viktrwlayer_propwin.c:2901 #: ../src/viktrwlayer_propwin.c:2929 ../src/viktrwlayer_propwin.c:2966 #: ../src/viktrwlayer_propwin.c:2984 ../src/viktrwlayer_propwin.c:3034 #: ../src/viktrwlayer_propwin.c:3035 ../src/viktrwlayer_propwin.c:3036 #: ../src/viktrwlayer_propwin.c:3062 ../src/viktrwlayer_propwin.c:3063 #: ../src/viktrwlayer_propwin.c:3078 ../src/viktrwlayer_propwin.c:3079 #: ../src/viktrwlayer_propwin.c:3092 ../src/viktrwlayer_propwin.c:3093 #: ../src/viktrwlayer_propwin.c:3106 ../src/viktrwlayer_propwin.c:3107 #: ../src/viktrwlayer_propwin.c:3120 ../src/viktrwlayer_propwin.c:3121 #: ../src/viktrwlayer_propwin.c:3134 ../src/viktrwlayer_propwin.c:3135 #, c-format msgid "No Data" msgstr "Nėra duomenų" #: ../src/viktrwlayer_propwin.c:3031 #, c-format msgid "%d minutes" msgstr "%d minučių" #: ../src/viktrwlayer_propwin.c:3058 msgid "Statistics" msgstr "Statistika" #: ../src/viktrwlayer_propwin.c:3064 msgid "Show D_EM" msgstr "" #: ../src/viktrwlayer_propwin.c:3065 ../src/viktrwlayer_propwin.c:3080 #: ../src/viktrwlayer_propwin.c:3094 ../src/viktrwlayer_propwin.c:3136 msgid "Show _GPS Speed" msgstr "" #: ../src/viktrwlayer_propwin.c:3067 ../src/viktrwlayer_propwin.c:3082 #: ../src/viktrwlayer_propwin.c:3110 ../src/viktrwlayer_propwin.c:3138 msgid "Track Distance:" msgstr "Kelio nuotolis:" #: ../src/viktrwlayer_propwin.c:3068 ../src/viktrwlayer_propwin.c:3125 msgid "Track Height:" msgstr "" #: ../src/viktrwlayer_propwin.c:3073 msgid "Elevation-distance" msgstr "Aukštis-nuotolis" #: ../src/viktrwlayer_propwin.c:3083 msgid "Track Gradient:" msgstr "" #: ../src/viktrwlayer_propwin.c:3087 msgid "Gradient-distance" msgstr "" #: ../src/viktrwlayer_propwin.c:3096 ../src/viktrwlayer_propwin.c:3111 #: ../src/viktrwlayer_propwin.c:3124 msgid "Track Time:" msgstr "Kelio laikas:" #: ../src/viktrwlayer_propwin.c:3097 ../src/viktrwlayer_propwin.c:3139 msgid "Track Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:3101 msgid "Speed-time" msgstr "Greitis-laikas" #: ../src/viktrwlayer_propwin.c:3108 ../src/viktrwlayer_propwin.c:3122 msgid "Show S_peed" msgstr "" #: ../src/viktrwlayer_propwin.c:3115 msgid "Distance-time" msgstr "" #: ../src/viktrwlayer_propwin.c:3129 msgid "Elevation-time" msgstr "" #: ../src/viktrwlayer_propwin.c:3143 msgid "Speed-distance" msgstr "" #: ../src/viktrwlayer_tpwin.c:118 msgid "Part of Track:" msgstr "Kelio dalis:" #: ../src/viktrwlayer_tpwin.c:119 msgid "Latitude:" msgstr "Platuma:" #: ../src/viktrwlayer_tpwin.c:120 msgid "Longitude:" msgstr "Ilguma:" #: ../src/viktrwlayer_tpwin.c:121 msgid "Altitude:" msgstr "Aukštis:" #: ../src/viktrwlayer_tpwin.c:122 msgid "Timestamp:" msgstr "Laiko žyma:" #: ../src/viktrwlayer_tpwin.c:123 msgid "Time:" msgstr "Laikas:" #: ../src/viktrwlayer_tpwin.c:124 msgid "Distance Difference:" msgstr "Nuotolio skirtumas:" #: ../src/viktrwlayer_tpwin.c:125 msgid "Time Difference:" msgstr "Laiko skirtumas:" #: ../src/viktrwlayer_tpwin.c:126 msgid "\"Speed\" Between:" msgstr "\"Greitis\" tarp:" #: ../src/viktrwlayer_tpwin.c:127 msgid "VDOP:" msgstr "" #: ../src/viktrwlayer_tpwin.c:128 msgid "HDOP:" msgstr "" #: ../src/viktrwlayer_tpwin.c:129 msgid "PDOP:" msgstr "" #: ../src/viktrwlayer_tpwin.c:130 msgid "SAT/FIX:" msgstr "" #: ../src/viktrwlayer_tpwin.c:139 msgid "Trackpoint" msgstr "Kelio taškas" #: ../src/viktrwlayer_tpwin.c:142 msgid "_Insert After" msgstr "" #: ../src/viktrwlayer_tpwin.c:144 msgid "Split Here" msgstr "Skaidyti čia" #: ../src/viktrwlayer_geotag.c:446 #, c-format msgid "Geotagging %d Images..." msgstr "" #: ../src/viktrwlayer_geotag.c:510 msgid "Geotag Images" msgstr "" #: ../src/viktrwlayer_geotag.c:516 msgid "Images" msgstr "" #: ../src/viktrwlayer_geotag.c:520 msgid "Overwrite Existing Waypoints:" msgstr "" #: ../src/viktrwlayer_geotag.c:523 msgid "Overwrite Existing GPS Information:" msgstr "" #: ../src/viktrwlayer_geotag.c:525 msgid "Keep File Modification Timestamp:" msgstr "" #: ../src/viktrwlayer_geotag.c:555 msgid "Create Waypoints:" msgstr "" #: ../src/viktrwlayer_geotag.c:563 msgid "Write EXIF:" msgstr "" #: ../src/viktrwlayer_geotag.c:575 msgid "Interpolate Between Track Segments:" msgstr "" #: ../src/viktrwlayer_geotag.c:579 msgid "Image Time Offset (Seconds):" msgstr "" #: ../src/viktrwlayer_geotag.c:581 msgid "" "The number of seconds to ADD to the photos time to make it match the GPS " "data. Calculate this with (GPS - Photo). Can be negative or positive. Useful " "to adjust times when a camera's timestamp was incorrect." msgstr "" #: ../src/viktrwlayer_geotag.c:584 msgid "Image Timezone:" msgstr "" #: ../src/viktrwlayer_geotag.c:586 msgid "" "The timezone that was used when the images were created. For example, if a " "camera is set to AWST or +8:00 hours. Enter +8:00 here so that the correct " "adjustment to the images' time can be made. GPS data is always in UTC." msgstr "" #: ../src/viktrwlayer_geotag.c:590 #, c-format msgid "Using track: %s" msgstr "" #: ../src/viktrwlayer_geotag.c:592 #, c-format msgid "Using all tracks in: %s" msgstr "" #: ../src/vikstatus.c:105 msgid "Current zoom level. Click to select a new one." msgstr "" #: ../src/vikwaypoint.c:34 msgid "Waypoint" msgstr "" #. TODO get rid of this as this is unnecessary duplication... #: ../src/vikwindow.c:221 msgid "Pan" msgstr "Perkėlimas" #: ../src/vikwindow.c:221 msgid "Zoom" msgstr "Mastelis" #: ../src/vikwindow.c:221 msgid "Ruler" msgstr "Liniuotė" #: ../src/vikwindow.c:221 msgid "Select" msgstr "" #. Create tooltip #: ../src/vikwindow.c:440 msgid "Select zoom level" msgstr "" #: ../src/vikwindow.c:645 #, c-format msgid "" "Do you want to save the changes you made to the document \"%s\"?\n" "\n" "Your changes will be lost if you don't save them." msgstr "" "Ar norite išsaugoti dokumento pakeitimus \"%s\"?\n" "\n" "Jūsų pakeitimai dings, jeigu jų neišsaugosite." #: ../src/vikwindow.c:649 msgid "Don't Save" msgstr "Neišsaugoti" #: ../src/vikwindow.c:696 msgid "mpp" msgstr "mpp" #: ../src/vikwindow.c:696 msgid "pixelfact" msgstr "Tikrasis taškas" #: ../src/vikwindow.c:861 #, c-format msgid "%s %s %dm" msgstr "%s %s %dm" #: ../src/vikwindow.c:863 #, c-format msgid "%s %s %dft" msgstr "" #: ../src/vikwindow.c:866 #, c-format msgid "%s %s" msgstr "%s %s" #. NB Ctrl+Shift+R is used for Refresh (deemed more important), so use 'U' instead #: ../src/vikwindow.c:1254 msgid "_Ruler" msgstr "_Liniuotė" #: ../src/vikwindow.c:1254 msgid "Ruler Tool" msgstr "Matavimo įrankis" #: ../src/vikwindow.c:1502 ../src/vikwindow.c:3138 msgid "_Zoom" msgstr "_Mastelis" #: ../src/vikwindow.c:1502 msgid "Zoom Tool" msgstr "Mastelio įrankis" #: ../src/vikwindow.c:1547 ../src/vikwindow.c:3139 msgid "_Pan" msgstr "_Perkėlimas" #: ../src/vikwindow.c:1547 msgid "Pan Tool" msgstr "Perkėlimo įrankis" #: ../src/vikwindow.c:1664 msgid "_Select" msgstr "" #: ../src/vikwindow.c:1664 msgid "Select Tool" msgstr "" #: ../src/vikwindow.c:1809 msgid "You must select a layer to show its properties." msgstr "Turite pasirinkti sluoksnį, kad pamatytumėte jo ypatybes." #. No error to show, so unlikely this will get called #: ../src/vikwindow.c:1824 msgid "The help system is not available." msgstr "" #. Main error path #: ../src/vikwindow.c:1827 #, c-format msgid "" "Help is not available because: %s.\n" "Ensure a Mime Type ghelp handler program is installed (e.g. yelp)." msgstr "" #: ../src/vikwindow.c:1850 msgid "You must select a layer to delete." msgstr "Turite pasirinkti sluoksnį, kad ištrintumėte." #: ../src/vikwindow.c:2087 msgid "Untitled" msgstr "Be pavadinimo" #: ../src/vikwindow.c:2194 #, c-format msgid "Unable to add '%s' to the list of recently used documents" msgstr "" #: ../src/vikwindow.c:2208 msgid "The file you requested could not be opened." msgstr "Užklaustos failo neįmanoma atverti." #: ../src/vikwindow.c:2211 msgid "" "GPSBabel is required to load files of this type or GPSBabel encountered " "problems." msgstr "" #: ../src/vikwindow.c:2214 #, c-format msgid "Unable to load malformed GPX file %s" msgstr "" #: ../src/vikwindow.c:2217 #, c-format msgid "Unsupported file type for %s" msgstr "" #. Since we can process .vik files with issues just show a warning in the status bar #. Not that a user can do much about it... or tells them what this issue is yet... #: ../src/vikwindow.c:2223 #, c-format msgid "WARNING: issues encountered loading %s" msgstr "" #: ../src/vikwindow.c:2278 msgid "Please select a GPS data file to open. " msgstr "Pasirinkite atverimui GPS duomenų failą. " #: ../src/vikwindow.c:2288 msgid "Geocaching" msgstr "" #: ../src/vikwindow.c:2294 msgid "Google Earth" msgstr "" #: ../src/vikwindow.c:2299 msgid "GPX" msgstr "" #: ../src/vikwindow.c:2304 ../src/vikwindow.c:2387 #: ../src/viking.desktop.in.h:1 msgid "Viking" msgstr "Viking" #: ../src/vikwindow.c:2374 msgid "Save as Viking File." msgstr "Išsaugoti kaip Viking failą" #. Try harder... #: ../src/vikwindow.c:2619 ../src/vikwindow.c:2625 msgid "Generating image file..." msgstr "" #: ../src/vikwindow.c:2647 msgid "" "Failed to generate internal image.\n" "\n" "Try creating a smaller image." msgstr "" #: ../src/vikwindow.c:2655 msgid "Failed to generate image file." msgstr "" #. Success #: ../src/vikwindow.c:2660 msgid "Image file generated." msgstr "" #: ../src/vikwindow.c:2764 msgid "" "Viewable region outside allowable pixel size bounds for image. Clipping " "width/height values." msgstr "" "Matoma sritis už leidžiamo taško nustato atvaizdo ribas. Kerpamas " "pločio/aukščio vertės." #: ../src/vikwindow.c:2789 #, c-format msgid "Total area: %ldm x %ldm (%.3f sq. km)" msgstr "Visas plotas: %ldm x %ldm (%.3f kv. km)" #: ../src/vikwindow.c:2792 #, c-format msgid "Total area: %ldm x %ldm (%.3f sq. miles)" msgstr "" #: ../src/vikwindow.c:2813 msgid "Save Image" msgstr "Išsaugoti atvaizdą" #: ../src/vikwindow.c:2834 msgid "PNG" msgstr "" #: ../src/vikwindow.c:2857 msgid "You must be in UTM mode to use this feature" msgstr "Jūs privalote būti UTM režime, kad galėtumėte naudoti šias ypatybes." #: ../src/vikwindow.c:2862 msgid "Choose a directory to hold images" msgstr "Pasirinkite aplankalą atvaizdams saugoti" #. todo: default for answers inside VikWindow or static (thruout instance) #: ../src/vikwindow.c:2883 msgid "Save to Image File" msgstr "Išsaugoti atvaizdą į failą" #: ../src/vikwindow.c:2900 msgid "Width (pixels):" msgstr "Plotis (taškais)" #: ../src/vikwindow.c:2902 msgid "Height (pixels):" msgstr "Aukštis (taškais)" #: ../src/vikwindow.c:2905 msgid "" "WARNING: USING LARGE IMAGES OVER 10000x10000\n" "MAY CRASH THE PROGRAM!" msgstr "" #: ../src/vikwindow.c:2907 msgid "Zoom (meters per pixel):" msgstr "Mastelis (metrai į tašką):" #: ../src/vikwindow.c:2921 msgid "Area in current viewable window" msgstr "Plotas matomame lange" #: ../src/vikwindow.c:2931 msgid "Save as PNG" msgstr "Išsaugoti kaip PNG" #: ../src/vikwindow.c:2932 msgid "Save as JPEG" msgstr "Išsaugoti kaip JPEG" #: ../src/vikwindow.c:2954 msgid "East-west image tiles:" msgstr "Rytiniai-vakariniai atvaizdų kvadratai:" #: ../src/vikwindow.c:2956 msgid "North-south image tiles:" msgstr "Šiauriniai-pietiniai atvaizdų kvadratai:" #: ../src/vikwindow.c:3097 msgid "Choose a background color" msgstr "Keisti fono spalvą" #: ../src/vikwindow.c:3113 msgid "Choose a track highlight color" msgstr "" #: ../src/vikwindow.c:3134 msgid "_File" msgstr "_Failas" #: ../src/vikwindow.c:3135 msgid "_Edit" msgstr "_Keisti" #: ../src/vikwindow.c:3136 msgid "_View" msgstr "_Rodymas" #: ../src/vikwindow.c:3137 msgid "_Show" msgstr "" #: ../src/vikwindow.c:3140 msgid "_Layers" msgstr "_Sluoksniai" #: ../src/vikwindow.c:3141 msgid "_Tools" msgstr "Į_rankiai" #: ../src/vikwindow.c:3142 msgid "_Webtools" msgstr "_Web įrankiai" #: ../src/vikwindow.c:3143 ../src/vikwindow.c:3206 msgid "_Help" msgstr "_Pagalba" #: ../src/vikwindow.c:3145 msgid "New file" msgstr "Naujas failas" #: ../src/vikwindow.c:3146 msgid "_Open..." msgstr "_Atverti..." #: ../src/vikwindow.c:3146 msgid "Open a file" msgstr "Atverti failą" #: ../src/vikwindow.c:3147 msgid "Open _Recent File" msgstr "" #: ../src/vikwindow.c:3148 msgid "Append _File..." msgstr "_Pridėti failą..." #: ../src/vikwindow.c:3148 msgid "Append data from a different file" msgstr "Pridėti duomenis iš kito failo" #: ../src/vikwindow.c:3149 msgid "A_cquire" msgstr "_Gauti duomenis" #: ../src/vikwindow.c:3150 msgid "Transfer data from a GPS device" msgstr "Perkelti duomenis iš GPS įrenginio" #: ../src/vikwindow.c:3151 msgid "Import File With GPS_Babel..." msgstr "" #: ../src/vikwindow.c:3151 msgid "Import file via GPSBabel converter" msgstr "" #: ../src/vikwindow.c:3153 msgid "Google _Directions..." msgstr "Google _maršrutai..." #: ../src/vikwindow.c:3153 msgid "Get driving directions from Google" msgstr "Gauti iš Google kelionės maršrutą" #: ../src/vikwindow.c:3156 msgid "_OSM Traces..." msgstr "" #: ../src/vikwindow.c:3156 msgid "Get traces from OpenStreetMap" msgstr "" #: ../src/vikwindow.c:3157 msgid "_My OSM Traces..." msgstr "" #: ../src/vikwindow.c:3157 msgid "Get Your Own Traces from OpenStreetMap" msgstr "" #: ../src/vikwindow.c:3160 msgid "Geo_caches..." msgstr "" #: ../src/vikwindow.c:3160 msgid "Get Geocaches from geocaching.com" msgstr "Gauti Geocaches iš geocaching.com" #: ../src/vikwindow.c:3163 msgid "Create waypoints from geotagged images" msgstr "" #: ../src/vikwindow.c:3166 msgid "Create waypoints from Wikipedia items in the current view" msgstr "" #: ../src/vikwindow.c:3168 msgid "_Save" msgstr "_Išsaugoti" #: ../src/vikwindow.c:3168 msgid "Save the file" msgstr "Išsaugoti failą" #: ../src/vikwindow.c:3169 msgid "Save _As..." msgstr "Išsaugoti _kaip..." #: ../src/vikwindow.c:3169 msgid "Save the file under different name" msgstr "Išsaugoti failą kitu pavadinimu" #: ../src/vikwindow.c:3170 msgid "_Generate Image File..." msgstr "_Sukurti atvaizdo failą..." #: ../src/vikwindow.c:3170 msgid "Save a snapshot of the workspace into a file" msgstr "Išsaugoti darbo aplinkos atvaizdą į failą" #: ../src/vikwindow.c:3171 msgid "Generate _Directory of Images..." msgstr "Sukurti a_tvaizdų aplankalą..." #: ../src/vikwindow.c:3171 msgid "FIXME:IMGDIR" msgstr "FIXME:IMGDIR" #: ../src/vikwindow.c:3174 msgid "_Print..." msgstr "_Spausdinti" #: ../src/vikwindow.c:3174 msgid "Print maps" msgstr "Spausdinti žemėlapius" #: ../src/vikwindow.c:3177 msgid "E_xit" msgstr "Iš_eiti" #: ../src/vikwindow.c:3177 msgid "Exit the program" msgstr "Išeiti iš programos" #: ../src/vikwindow.c:3178 msgid "Save and Exit" msgstr "Išsa_ugoti ir Išeiti" #: ../src/vikwindow.c:3178 msgid "Save and Exit the program" msgstr "Išsaugoti ir Išeiti iš programos" #: ../src/vikwindow.c:3180 msgid "Go to the _Default Location" msgstr "" #: ../src/vikwindow.c:3180 msgid "Go to the default location" msgstr "" #: ../src/vikwindow.c:3181 msgid "Go to _Location..." msgstr "" #: ../src/vikwindow.c:3181 msgid "Go to address/place using text search" msgstr "Eiti į adresą/vietą naudojant tekstinę paiešką" #: ../src/vikwindow.c:3182 msgid "_Go to Lat/Lon..." msgstr "Eiti į Platumą/Ilgumą..." #: ../src/vikwindow.c:3182 msgid "Go to arbitrary lat/lon coordinate" msgstr "Eiti į pasirinktas pla/ilg koordinates" #: ../src/vikwindow.c:3183 msgid "Go to UTM..." msgstr "Eiti į UTM..." #: ../src/vikwindow.c:3183 msgid "Go to arbitrary UTM coordinate" msgstr "Eiti į pasirinktas UTM koordinates" #: ../src/vikwindow.c:3184 msgid "_Refresh" msgstr "" #: ../src/vikwindow.c:3184 msgid "Refresh any maps displayed" msgstr "" #: ../src/vikwindow.c:3185 msgid "Set _Highlight Color..." msgstr "" #: ../src/vikwindow.c:3186 msgid "Set Bac_kground Color..." msgstr "" #: ../src/vikwindow.c:3187 msgid "Zoom _In" msgstr "_Didinti" #: ../src/vikwindow.c:3188 msgid "Zoom _Out" msgstr "M_ažinti" #: ../src/vikwindow.c:3189 msgid "Zoom _To..." msgstr "Didinti _iki..." #: ../src/vikwindow.c:3190 msgid "Pan _North" msgstr "" #: ../src/vikwindow.c:3191 msgid "Pan _East" msgstr "" #: ../src/vikwindow.c:3192 msgid "Pan _South" msgstr "" #: ../src/vikwindow.c:3193 msgid "Pan _West" msgstr "" #: ../src/vikwindow.c:3194 msgid "Background _Jobs" msgstr "Fono _darbai" #: ../src/vikwindow.c:3196 msgid "Cu_t" msgstr "_Iškirpti" #: ../src/vikwindow.c:3197 msgid "_Copy" msgstr "_Kopijuoti" #: ../src/vikwindow.c:3198 msgid "_Paste" msgstr "Į_terpti" #: ../src/vikwindow.c:3199 msgid "_Delete" msgstr "_Ištrinti" #: ../src/vikwindow.c:3200 msgid "Delete All" msgstr "Ištrinti visus" #: ../src/vikwindow.c:3201 msgid "_Flush Map Cache" msgstr "" #: ../src/vikwindow.c:3202 msgid "_Set the Default Location" msgstr "" #: ../src/vikwindow.c:3202 msgid "Set the Default Location to the current position" msgstr "" #: ../src/vikwindow.c:3203 msgid "_Preferences" msgstr "_Nustatymai" #: ../src/vikwindow.c:3204 msgid "_Properties" msgstr "_Ypatybės" #: ../src/vikwindow.c:3207 msgid "_About" msgstr "_Apie" #: ../src/vikwindow.c:3213 msgid "_UTM Mode" msgstr "_UTM režimas" #: ../src/vikwindow.c:3214 msgid "_Expedia Mode" msgstr "_Expedia režimas" #: ../src/vikwindow.c:3215 msgid "_Mercator Mode" msgstr "_Merkatorinis režimas" #: ../src/vikwindow.c:3216 msgid "Lat_/Lon Mode" msgstr "" #: ../src/vikwindow.c:3220 msgid "Show _Scale" msgstr "" #: ../src/vikwindow.c:3220 msgid "Show Scale" msgstr "Rodyti padalas" #: ../src/vikwindow.c:3221 msgid "Show _Center Mark" msgstr "" #: ../src/vikwindow.c:3221 msgid "Show Center Mark" msgstr "Rodyti centrinį žymeklį" #: ../src/vikwindow.c:3222 msgid "Show _Highlight" msgstr "" #: ../src/vikwindow.c:3222 msgid "Show Highlight" msgstr "" #: ../src/vikwindow.c:3223 msgid "_Full Screen" msgstr "Visas ekranas" #: ../src/vikwindow.c:3223 msgid "Activate full screen mode" msgstr "Viso ekrano režimas" #: ../src/vikwindow.c:3224 msgid "Show Side _Panel" msgstr "" #: ../src/vikwindow.c:3224 msgid "Show Side Panel" msgstr "Rodyti šoninį skydelį" #: ../src/vikwindow.c:3225 msgid "Show Status_bar" msgstr "" #: ../src/vikwindow.c:3225 msgid "Show Statusbar" msgstr "" #: ../src/vikwindow.c:3226 msgid "Show _Toolbar" msgstr "Rodyti įran_kių juostą" #: ../src/vikwindow.c:3226 msgid "Show Toolbar" msgstr "Rodyti įrankių juostą" #: ../src/vikwindow.c:3227 msgid "Show _Menu" msgstr "" #: ../src/vikwindow.c:3227 msgid "Show Menu" msgstr "" #: ../src/viking.desktop.in.h:2 msgid "GPS Data Manager" msgstr "GPS duomenų vedlys" #: ../src/viking.desktop.in.h:3 msgid "Map Based GPS Data Manager (live data capable)." msgstr "Žemėlapiais paremtas GPS duomenų vedlys (duomenys realiu laiku)." #: ../src/libjpeg/jpeg-data.c:206 msgid "Data does not follow JPEG specification." msgstr "" #: ../src/libjpeg/jpeg-data.c:291 #, c-format msgid "Path '%s' invalid." msgstr "" #: ../src/libjpeg/jpeg-data.c:309 #, c-format msgid "Could not read '%s'." msgstr "" viking-1.4.2/po/sl.po0000644000175000017500000022561112175546146011344 00000000000000# Slovenian translation for viking # Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008 # This file is distributed under the same license as the viking package. # FIRST AUTHOR , 2008. # msgid "" msgstr "" "Project-Id-Version: viking\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-02-04 23:29+0100\n" "PO-Revision-Date: 2010-09-07 09:07+0000\n" "Last-Translator: Guilhem Bonnefille \n" "Language-Team: Slovenian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || " "n%100==4 ? 3 : 0);\n" "X-Launchpad-Export-Date: 2013-03-23 17:12+0000\n" "X-Generator: Launchpad (build 16540)\n" #: ../src/acquire.c:103 ../src/vikgpslayer.c:1185 msgid "Done." msgstr "Opravljeno." #: ../src/acquire.c:114 msgid "No data." msgstr "" #: ../src/acquire.c:154 ../src/acquire.c:404 msgid "Error: acquisition failed." msgstr "Napaka: zajem ni uspel." #: ../src/acquire.c:341 msgid "Working..." msgstr "Izvajanje ..." #. This shouldn't happen... #: ../src/acquire.c:394 msgid "" "Unable to create command\n" "Acquire method failed." msgstr "" #: ../src/acquire.c:486 msgid "_Filter" msgstr "" #: ../src/acquire.c:501 #, c-format msgid "Filter with %s" msgstr "" #: ../src/acquire.c:518 msgid "Filter" msgstr "" #: ../src/background.c:52 #, c-format msgid "%d items" msgstr "%d predmetov" #: ../src/background.c:248 msgid "Job" msgstr "Opravilo" #: ../src/background.c:252 msgid "Progress" msgstr "Napredek" #: ../src/background.c:268 msgid "Viking Background Jobs" msgstr "Viking opravila v ozadju" #: ../src/bing.c:47 msgid "Bing" msgstr "" #. VIK_GTK_WINDOW_FROM_WIDGET(vp) #: ../src/bingmapsource.c:445 msgid "Bing attribution Loading" msgstr "" #: ../src/clipboard.c:95 msgid "paste failed" msgstr "lepljenje ni uspelo" #: ../src/clipboard.c:105 msgid "wrong clipboard data size" msgstr "Napačna velikost podatkov na odložišču" #: ../src/clipboard.c:124 #, c-format msgid "" "The clipboard contains sublayer data for %s layers. You must select a layer " "of this type to paste the clipboard data." msgstr "" #: ../src/clipboard.c:236 msgid "" "In order to paste a waypoint, please select an appropriate layer to paste " "into." msgstr "" #: ../src/dialog.c:52 msgid "Go to Lat/Lon" msgstr "Pojdi na šir./dolž." #: ../src/dialog.c:64 ../src/dialog.c:251 msgid "Latitude:" msgstr "Geografska širina:" #: ../src/dialog.c:70 ../src/dialog.c:256 msgid "Longitude:" msgstr "Geografska dolžina:" #: ../src/dialog.c:102 msgid "Go to UTM" msgstr "" #: ../src/dialog.c:115 msgid "Northing:" msgstr "" #: ../src/dialog.c:121 msgid "Easting:" msgstr "" #: ../src/dialog.c:128 msgid "Zone:" msgstr "" #: ../src/dialog.c:131 msgid "Letter:" msgstr "" #: ../src/dialog.c:199 msgid "Waypoint Properties" msgstr "" #: ../src/dialog.c:233 msgid "Name:" msgstr "Ime:" #: ../src/dialog.c:261 msgid "Altitude:" msgstr "Višina:" #: ../src/dialog.c:266 msgid "Comment:" msgstr "Opomba:" #: ../src/dialog.c:274 ../src/osm-traces.c:437 msgid "Description:" msgstr "Opis:" #: ../src/dialog.c:277 msgid "Image:" msgstr "Slika:" #: ../src/dialog.c:282 msgid "Symbol:" msgstr "Simbol:" #: ../src/dialog.c:291 msgid "(none)" msgstr "(brez)" #. TODO: other checks (isalpha or whatever ) #: ../src/dialog.c:356 msgid "Please enter a name for the waypoint." msgstr "" #: ../src/dialog.c:529 ../src/geonamessearch.c:243 #: ../src/datasource_osm_my_traces.c:507 msgid "Nothing was selected" msgstr "" #: ../src/dialog.c:537 msgid "Add Route" msgstr "" #: ../src/dialog.c:537 msgid "Add Track" msgstr "Dodaj sled" #: ../src/dialog.c:545 msgid "Route Name:" msgstr "" #: ../src/dialog.c:545 msgid "Track Name:" msgstr "Ime sledi:" #: ../src/dialog.c:565 msgid "Please enter a name for the track." msgstr "Vnesite ime sledi:" #: ../src/dialog.c:623 msgid "Zoom Factors..." msgstr "Faktorji povečave..." #: ../src/dialog.c:637 msgid "Zoom factor (in meters per pixel):" msgstr "" #: ../src/dialog.c:638 msgid "X (easting): " msgstr "" #: ../src/dialog.c:639 msgid "Y (northing): " msgstr "" #: ../src/dialog.c:644 msgid "X and Y zoom factors must be equal" msgstr "" #: ../src/dialog.c:699 msgid "1 min" msgstr "1 min" #: ../src/dialog.c:700 msgid "1 hour" msgstr "1 ura" #: ../src/dialog.c:701 msgid "1 day" msgstr "1 dan" #: ../src/dialog.c:702 msgid "Custom (in minutes):" msgstr "Po meri (v minutah):" #: ../src/dialog.c:808 msgid "GPS Data and Topo Analyzer, Explorer, and Manager." msgstr "" #: ../src/dialog.c:809 msgid "" "This program is free software; you can redistribute it and/or modify it " "under the terms of the GNU General Public License as published by the Free " "Software Foundation; either version 2 of the License, or (at your option) " "any later version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT " "ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or " "FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for " "more details.\n" "\n" "You should have received a copy of the GNU General Public License along with " "this program; if not, write to the Free Software Foundation, Inc., 59 Temple " "Place, Suite 330, Boston, MA 02111-1307, USA" msgstr "" #: ../src/dialog.c:837 msgid "Translation is coordinated on http://launchpad.net/viking" msgstr "" #: ../src/dialog.c:845 msgid "Download along track" msgstr "Prenos po sledi" #: ../src/dialog.c:851 msgid "Map type:" msgstr "Vrsta zemljevida:" #: ../src/dialog.c:856 msgid "Zoom level:" msgstr "Stopnja povečave:" #: ../src/dialog.c:896 #, c-format msgid "The map data is licensed: %s." msgstr "" #: ../src/dialog.c:899 #, c-format msgid "" "The data provided by '%s' are licensed under the following license: " "%s.\n" "Please, read the license before continuing." msgstr "" #: ../src/dialog.c:904 msgid "Open license" msgstr "" #: ../src/expedia.c:53 msgid "Expedia Street Maps" msgstr "Cestni zemljevidi Expedia" #: ../src/expedia.c:81 msgid "Invalid expedia altitude" msgstr "" #: ../src/expedia.c:112 #, c-format msgid "" "Couldn't open EXPEDIA image file (right after successful download! Please " "report and delete image file!): %s" msgstr "" #: ../src/expedia.c:125 #, c-format msgid "" "Couldn't save EXPEDIA image file (right after successful download! Please " "report and delete image file!): %s" msgstr "" #. * #. * See http://www.geonames.org/export/wikipedia-webservice.html#wikipediaBoundingBox #. #. Translators may wish to change this setting as appropriate to get Wikipedia articles in that language #: ../src/geonamessearch.c:46 msgid "en" msgstr "" #: ../src/geonamessearch.c:121 msgid "Search" msgstr "Najdi" #: ../src/geonamessearch.c:123 msgid "No entries found!" msgstr "" #. NB could allow columns to be shifted around by doing this after each new #. gtk_tree_view_column_set_reorderable ( column, TRUE ); #. However I don't think is that useful, so I haven't put it in #: ../src/geonamessearch.c:177 ../src/datasource_osm_my_traces.c:425 msgid "Name" msgstr "" #: ../src/geonamessearch.c:182 msgid "Feature" msgstr "" #: ../src/geonamessearch.c:187 ../src/datasource_osm_my_traces.c:440 msgid "Lat/Lon" msgstr "" #: ../src/geonamessearch.c:269 ../src/googlesearch.c:100 msgid "couldn't map temp file" msgstr "" #: ../src/globals.c:44 msgid "Degree format:" msgstr "" #: ../src/globals.c:48 msgid "Distance units:" msgstr "" #: ../src/globals.c:52 msgid "Speed units:" msgstr "" #: ../src/globals.c:56 msgid "Height units:" msgstr "" #: ../src/globals.c:60 msgid "Use large waypoint icons:" msgstr "" #: ../src/globals.c:64 msgid "Default latitude:" msgstr "" #: ../src/globals.c:67 msgid "Default longitude:" msgstr "" #: ../src/globals.c:73 msgid "Alphabetical" msgstr "" #: ../src/globals.c:73 ../src/datasource_osm_my_traces.c:435 msgid "Time" msgstr "" #: ../src/globals.c:76 msgid "KML File Export Units:" msgstr "" #: ../src/globals.c:77 msgid "GPX Track Order:" msgstr "" #: ../src/globals.c:82 msgid "Image Viewer:" msgstr "" #: ../src/globals.c:87 msgid "External GPX Program 1:" msgstr "" #: ../src/globals.c:88 msgid "External GPX Program 2:" msgstr "" #. Defaults for the options are setup here #: ../src/globals.c:96 msgid "General" msgstr "" #. New Tab #: ../src/globals.c:121 msgid "Export/External" msgstr "" #. Webtools #: ../src/google.c:36 msgid "Google" msgstr "Google" #: ../src/datasource_file.c:59 msgid "Import file with GPSBabel" msgstr "" #: ../src/datasource_file.c:60 msgid "Imported file" msgstr "" #. The file selector #: ../src/datasource_file.c:133 msgid "File:" msgstr "" #: ../src/datasource_file.c:134 msgid "File to import" msgstr "" #: ../src/datasource_file.c:141 msgid "All files" msgstr "" #. The file format selector #: ../src/datasource_file.c:148 msgid "File type:" msgstr "" #: ../src/datasource_file.c:193 #, c-format msgid "using babel args '%s' and file '%s'" msgstr "" #: ../src/datasource_gc.c:66 msgid "Download Geocaches" msgstr "Prenesi Geozaklade" #: ../src/datasource_gc.c:67 msgid "Geocaching.com Caches" msgstr "Zakladi Geocaching.com" #: ../src/datasource_gc.c:84 msgid "geocaching.com username:" msgstr "uporabniško ime za geocaching.com:" #: ../src/datasource_gc.c:85 msgid "geocaching.com password:" msgstr "geslo za geocaching.com:" #: ../src/datasource_gc.c:126 #, c-format msgid "" "Can't find %s or %s in path! Check that you have installed it correctly." msgstr "" #: ../src/datasource_gc.c:188 msgid "Number geocaches:" msgstr "" #: ../src/datasource_gc.c:190 msgid "Centered around:" msgstr "" #: ../src/datasource_gc.c:226 msgid "Broken input - using some defaults" msgstr "" #: ../src/datasource_geotag.c:51 msgid "Create Waypoints from Geotagged Images" msgstr "" #: ../src/datasource_geotag.c:52 msgid "Geotagged Images" msgstr "" #: ../src/datasource_geotag.c:102 ../src/vikwindow.c:2314 #: ../src/vikwindow.c:2382 ../src/vikwindow.c:2824 msgid "All" msgstr "" #: ../src/datasource_geotag.c:107 ../src/vikwindow.c:2829 msgid "JPG" msgstr "" #: ../src/datasource_geotag.c:165 #, c-format msgid "Unable to create waypoint from %s" msgstr "" #: ../src/datasource_google.c:49 ../src/datasource_google.c:50 msgid "Google Directions" msgstr "" #: ../src/datasource_google.c:77 msgid "From:" msgstr "" #: ../src/datasource_google.c:79 msgid "To:" msgstr "" #: ../src/datasource_gps.c:57 msgid "Acquire from GPS" msgstr "Zajemi iz GPS naprave" #: ../src/datasource_gps.c:58 msgid "Acquired from GPS" msgstr "Zajeto iz GPS naprave" #: ../src/datasource_gps.c:221 #, c-format msgid "using cmdline '%s' and file '%s'\n" msgstr "" #: ../src/datasource_gps.c:297 ../src/vikgpslayer.c:884 #, c-format msgid "Downloading %d waypoint..." msgid_plural "Downloading %d waypoints..." msgstr[0] "" msgstr[1] "" #: ../src/datasource_gps.c:298 ../src/vikgpslayer.c:885 #, c-format msgid "Downloading %d trackpoint..." msgid_plural "Downloading %d trackpoints..." msgstr[0] "Prenašam %d točk sledi..." msgstr[1] "Prenašam %d točko sledi..." msgstr[2] "Prenašam %d točki sledi..." msgstr[3] "Prenašam %d točke sledi..." #: ../src/datasource_gps.c:303 ../src/vikgpslayer.c:890 #, c-format msgid "Downloading %d routepoint..." msgid_plural "Downloading %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/datasource_gps.c:325 ../src/datasource_gps.c:326 #: ../src/datasource_gps.c:327 #, c-format msgid "Downloaded %d out of %d %s..." msgstr "Prenešeno %d od %d %s..." #: ../src/datasource_gps.c:331 ../src/datasource_gps.c:332 #: ../src/datasource_gps.c:333 #, c-format msgid "Downloaded %d %s." msgstr "Prenešeno %d %s." #: ../src/datasource_gps.c:347 ../src/vikgpslayer.c:968 #, c-format msgid "GPS Device: %s" msgstr "Naprava GPS: %s" #: ../src/datasource_gps.c:370 ../src/vikgpslayer.c:1042 #: ../src/vikgpslayer.c:1110 msgid "Status: Working..." msgstr "" #: ../src/datasource_gps.c:469 ../src/vikgpslayer.c:150 msgid "GPS Protocol:" msgstr "Protokol GPS:" #. List now assigned at runtime #: ../src/datasource_gps.c:488 ../src/vikgpslayer.c:151 msgid "Serial Port:" msgstr "Zaporedni vmesnik:" #: ../src/datasource_gps.c:509 msgid "" "Turn Off After Transfer\n" "(Garmin/NAViLink Only)" msgstr "" #: ../src/datasource_gps.c:512 msgid "Tracks:" msgstr "" #: ../src/datasource_gps.c:516 msgid "Routes:" msgstr "" #: ../src/datasource_gps.c:520 msgid "Waypoints:" msgstr "" #: ../src/datasource_gps.c:594 ../src/vikgpslayer.c:1305 msgid "GPS device: N/A" msgstr "Naprava GPS: ni na voljo" #: ../src/datasource_osm.c:52 ../src/datasource_osm.c:53 msgid "OSM traces" msgstr "" #: ../src/datasource_osm.c:80 msgid "Page number:" msgstr "" #: ../src/datasource_osm_my_traces.c:63 ../src/datasource_osm_my_traces.c:64 msgid "OSM My Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:108 msgid "Username:" msgstr "" #: ../src/datasource_osm_my_traces.c:113 msgid "The email or username used to login to OSM" msgstr "" #: ../src/datasource_osm_my_traces.c:115 ../src/osm-traces.c:413 msgid "Password:" msgstr "Geslo:" #: ../src/datasource_osm_my_traces.c:120 msgid "The password used to login to OSM" msgstr "" #: ../src/datasource_osm_my_traces.c:430 msgid "Description" msgstr "" #: ../src/datasource_osm_my_traces.c:445 msgid "Privacy" msgstr "" #: ../src/datasource_osm_my_traces.c:452 msgid "Within Current View" msgstr "" #: ../src/datasource_osm_my_traces.c:518 msgid "GPS Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:520 msgid "None found!" msgstr "" #: ../src/datasource_osm_my_traces.c:629 msgid "My OSM Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:645 #, c-format msgid "Unable to get trace: %s" msgstr "" #: ../src/datasource_wikipedia.c:32 msgid "Create Waypoints from Wikipedia Articles" msgstr "" #: ../src/datasource_wikipedia.c:33 msgid "Wikipedia Waypoints" msgstr "" #: ../src/dem.c:65 ../src/dem.c:79 msgid "Invalid DEM" msgstr "" #: ../src/dem.c:121 msgid "Invalid DEM header" msgstr "" #: ../src/dem.c:190 ../src/dem.c:203 msgid "Incorrect DEM Class B record: expected 1" msgstr "" #: ../src/dem.c:360 #, c-format msgid "Couldn't map file %s: %s" msgstr "" #: ../src/download.c:112 msgid "Tile age (s):" msgstr "" #: ../src/download.c:233 #, c-format msgid "Download error: %s" msgstr "Napaka prenosa: %s" #: ../src/download.c:313 msgid "couldn't open temp file" msgstr "začasne datoteke ni bilo mogoče odpreti" #: ../src/file.c:456 ../src/file.c:461 #, c-format msgid "Draw mode '%s' no more supported" msgstr "" #: ../src/geotag_exif.c:433 msgid "Not enough memory." msgstr "" #: ../src/geotag_exif.c:451 msgid "Setting a value for this tag is unsupported!" msgstr "" #: ../src/geotag_exif.c:470 #, c-format msgid "Too few components specified (need %d, found %d)\n" msgstr "" #: ../src/geotag_exif.c:474 msgid "Numeric value expected\n" msgstr "" #: ../src/geotag_exif.c:482 msgid "This shouldn't happen!" msgstr "" #: ../src/geotag_exif.c:552 msgid "Not yet implemented!" msgstr "" #: ../src/geotag_exif.c:565 msgid "Warning; Too many components specified!" msgstr "" #: ../src/osm-traces.c:73 msgid "Identifiable (public w/ timestamps)" msgstr "" #: ../src/osm-traces.c:74 msgid "Trackable (private w/ timestamps)" msgstr "" #: ../src/osm-traces.c:75 msgid "Public" msgstr "Javno" #: ../src/osm-traces.c:76 msgid "Private" msgstr "" #: ../src/osm-traces.c:93 msgid "OSM username:" msgstr "" #: ../src/osm-traces.c:94 msgid "OSM password:" msgstr "" #. Preferences #: ../src/osm-traces.c:151 msgid "OpenStreetMap Traces" msgstr "" #: ../src/osm-traces.c:234 #, c-format msgid "failed to upload data: HTTP response is %ld" msgstr "prenos podatkov ni uspel: odziv protokola HTTP je %ld" #: ../src/osm-traces.c:239 #, c-format msgid "curl_easy_getinfo failed: %d" msgstr "curl_easy_getinfo ni uspel: %d" #: ../src/osm-traces.c:244 #, c-format msgid "curl request failed: %s" msgstr "curl zahtevek ni uspel: %s" #: ../src/osm-traces.c:275 #, c-format msgid "failed to open temporary file: %s" msgstr "" #. Success #: ../src/osm-traces.c:328 msgid "Uploaded to OSM" msgstr "" #: ../src/osm-traces.c:332 msgid "FAILED TO UPLOAD DATA TO OSM - CURL PROBLEM" msgstr "" #: ../src/osm-traces.c:335 msgid "FAILED TO UPLOAD DATA TO OSM" msgstr "" #: ../src/osm-traces.c:335 msgid "HTTP response code" msgstr "" #: ../src/osm-traces.c:348 #, c-format msgid "failed to unlink temporary file: %s" msgstr "" #: ../src/osm-traces.c:387 msgid "OSM upload" msgstr "Prenos na OSM" #: ../src/osm-traces.c:405 msgid "Email:" msgstr "E-pošta:" #: ../src/osm-traces.c:410 msgid "" "The email used as login\n" "Enter the email you use to login into www.openstreetmap.org." msgstr "" #: ../src/osm-traces.c:418 msgid "" "The password used to login\n" "Enter the password you use to login into " "www.openstreetmap.org." msgstr "" #: ../src/osm-traces.c:423 msgid "File's name:" msgstr "Ime datoteke:" #: ../src/osm-traces.c:433 msgid "" "The name of the file on OSM\n" "This is the name of the file created on the server.This is not the " "name of the local file." msgstr "" #: ../src/osm-traces.c:442 msgid "The description of the trace" msgstr "Opis sledi" #: ../src/osm-traces.c:444 msgid "Tags:" msgstr "Oznake:" #: ../src/osm-traces.c:449 msgid "The tags associated to the trace" msgstr "Oznake sledi" #: ../src/osm-traces.c:482 #, c-format msgid "Uploading %s to OSM" msgstr "Prenašanje %s na OSM" #: ../src/mapcache.c:61 msgid "Map cache memory size (MB):" msgstr "" #: ../src/print.c:53 msgid "None" msgstr "Brez" #: ../src/print.c:54 msgid "Horizontally" msgstr "Vodoravno" #: ../src/print.c:55 msgid "Vertically" msgstr "Navpično" #: ../src/print.c:56 msgid "Both" msgstr "Oboje" #: ../src/print.c:120 msgid "Image Settings" msgstr "Nastavitve slike" #: ../src/print.c:546 msgid "done" msgstr "opravljeno" #. Page Size #: ../src/print.c:575 msgid "_Adjust Page Size and Orientation" msgstr "_Prilagodi velikost in postavitev strani" #: ../src/print.c:591 msgid "C_enter:" msgstr "_Sredinsko:" #. ignore page margins #: ../src/print.c:609 msgid "Ignore Page _Margins" msgstr "Prezri _robove strani" #: ../src/print.c:628 msgid "Image S_ize:" msgstr "_Velikost slike:" #: ../src/util.c:81 msgid "Could not launch web browser." msgstr "Spletnega brskalnika ni bilo mogoče zagnati." #: ../src/util.c:92 msgid "Could not create new email." msgstr "" #: ../src/vikcoordlayer.c:46 msgid "Color:" msgstr "Barva:" #: ../src/vikcoordlayer.c:47 msgid "Minutes Width:" msgstr "Minut širine:" #: ../src/vikcoordlayer.c:48 msgid "Line Thickness:" msgstr "Debelina črt:" #: ../src/vikcoordlayer.c:56 msgid "Coordinate" msgstr "" #: ../src/datasource_bfilter.c:46 msgid "Max number of points:" msgstr "Največje število točk:" #: ../src/datasource_bfilter.c:60 msgid "Simplify All Tracks..." msgstr "" #: ../src/datasource_bfilter.c:61 msgid "Simplified Tracks" msgstr "Poenostavljene sledi" #: ../src/datasource_bfilter.c:96 ../src/datasource_bfilter.c:97 msgid "Remove Duplicate Waypoints" msgstr "Odstrani podvojene točke" #: ../src/datasource_bfilter.c:129 msgid "Waypoints Inside This" msgstr "" #: ../src/datasource_bfilter.c:130 msgid "Polygonized Layer" msgstr "" #: ../src/datasource_bfilter.c:165 msgid "Waypoints Outside This" msgstr "" #: ../src/datasource_bfilter.c:166 msgid "Polygonzied Layer" msgstr "" #: ../src/main.c:89 #, c-format msgid "Ignoring Xlib error: error code %d request code %d\n" msgstr "" #: ../src/main.c:102 msgid "Enable debug output" msgstr "" #: ../src/main.c:103 msgid "Enable verbose output" msgstr "Vključi podroben izpis" #: ../src/main.c:104 msgid "Show version" msgstr "Prikaži različico" #: ../src/osm.c:106 msgid "On Disk OSM Tile Format" msgstr "" #: ../src/osm.c:121 msgid "OSM (view)" msgstr "" #: ../src/osm.c:125 msgid "OSM (edit)" msgstr "" #: ../src/osm.c:129 msgid "OSM (render)" msgstr "" #. Example: http://127.0.0.1:8111/load_and_zoom?left=8.19&right=8.20&top=48.605&bottom=48.590&select=node413602999 #. JOSM or merkaartor must already be running with remote interface enabled #: ../src/osm.c:136 msgid "Local port 8111 (eg JOSM)" msgstr "" #: ../src/preferences.c:285 msgid "Preferences" msgstr "" #: ../src/uibuilder.c:147 msgid "Take care that this password will be stored clearly in a plain file." msgstr "" #: ../src/vikaggregatelayer.c:37 msgid "Aggregate" msgstr "" #: ../src/vikdemlayer.c:101 msgid "Absolute height" msgstr "" #: ../src/vikdemlayer.c:102 msgid "Height gradient" msgstr "" #: ../src/vikdemlayer.c:118 msgid "DEM Files:" msgstr "Datoteke DEM:" #: ../src/vikdemlayer.c:119 msgid "Download Source:" msgstr "Vir prenosa:" #: ../src/vikdemlayer.c:120 msgid "Min Elev Color:" msgstr "" #: ../src/vikdemlayer.c:121 msgid "Type:" msgstr "" #: ../src/vikdemlayer.c:122 msgid "Min Elev:" msgstr "Najmanjša višina:" #: ../src/vikdemlayer.c:123 msgid "Max Elev:" msgstr "Največja višina:" #: ../src/vikdemlayer.c:134 msgid "_DEM Download" msgstr "" #: ../src/vikdemlayer.c:134 msgid "DEM Download" msgstr "" #: ../src/vikdemlayer.c:188 msgid "DEM" msgstr "" #: ../src/vikdemlayer.c:284 #, c-format msgid "Number of files: %d" msgstr "" #: ../src/vikdemlayer.c:385 msgid "DEM Loading" msgstr "" #: ../src/vikdemlayer.c:889 #, c-format msgid "No SRTM data available for %f, %f" msgstr "SRTM podatkov za %f, %f ni na voljo" #: ../src/vikdemlayer.c:1149 #, c-format msgid "Downloading DEM %s" msgstr "Prenašanje DEM %s" #: ../src/vikfileentry.c:68 msgid "Browse..." msgstr "Prebrskaj ..." #: ../src/vikfileentry.c:96 msgid "Choose file" msgstr "Izberi datoteko" #: ../src/vikfilelist.c:48 msgid "Choose file(s)" msgstr "Izberi datoteko(e)" #: ../src/vikfilelist.c:172 msgid "Add..." msgstr "Dodaj..." #: ../src/vikfilelist.c:173 msgid "Delete" msgstr "Zbriši" #: ../src/vikgeoreflayer.c:70 msgid "_Georef Move Map" msgstr "" #: ../src/vikgeoreflayer.c:70 msgid "Georef Move Map" msgstr "" #: ../src/vikgeoreflayer.c:77 msgid "Georef Z_oom Tool" msgstr "" #: ../src/vikgeoreflayer.c:77 msgid "Georef Zoom Tool" msgstr "" #: ../src/vikgeoreflayer.c:87 msgid "GeoRef Map" msgstr "" #: ../src/vikgeoreflayer.c:335 ../src/vikmapslayer.c:685 #, c-format msgid "Couldn't open image file: %s" msgstr "Ni bilo mogoče odpreti datoteke s sliko: %s" #: ../src/vikgeoreflayer.c:365 msgid "Unexpected end of file reading World file." msgstr "" #: ../src/vikgeoreflayer.c:381 ../src/vikgeoreflayer.c:426 msgid "Choose World file" msgstr "" #: ../src/vikgeoreflayer.c:394 msgid "The World file you requested could not be opened for reading." msgstr "" #: ../src/vikgeoreflayer.c:439 msgid "The file you requested could not be opened for writing." msgstr "V datoteko, ki ste jo izbrali ni mogoče pisati." #: ../src/vikgeoreflayer.c:456 ../src/viklayer.c:480 msgid "Layer Properties" msgstr "Lastnosti plasti" #: ../src/vikgeoreflayer.c:478 msgid "World File Parameters:" msgstr "" #: ../src/vikgeoreflayer.c:479 msgid "Load From File..." msgstr "Naloži iz datoteke ..." #: ../src/vikgeoreflayer.c:484 msgid "Corner pixel easting:" msgstr "" #: ../src/vikgeoreflayer.c:486 msgid "the UTM \"easting\" value of the upper-right corner pixel of the map" msgstr "" #: ../src/vikgeoreflayer.c:488 msgid "Corner pixel northing:" msgstr "" #: ../src/vikgeoreflayer.c:490 msgid "the UTM \"northing\" value of the upper-right corner pixel of the map" msgstr "" #: ../src/vikgeoreflayer.c:492 msgid "X (easting) scale (mpp): " msgstr "" #: ../src/vikgeoreflayer.c:493 msgid "Y (northing) scale (mpp): " msgstr "" #: ../src/vikgeoreflayer.c:496 msgid "the scale of the map in the X direction (meters per pixel)" msgstr "" #: ../src/vikgeoreflayer.c:498 msgid "the scale of the map in the Y direction (meters per pixel)" msgstr "" #: ../src/vikgeoreflayer.c:500 msgid "Map Image:" msgstr "Slika zemljevida:" #. Now with icons #: ../src/vikgeoreflayer.c:608 msgid "_Zoom to Fit Map" msgstr "" #: ../src/vikgeoreflayer.c:614 msgid "_Goto Map Center" msgstr "" #: ../src/vikgeoreflayer.c:620 msgid "_Export to World File" msgstr "" #: ../src/vikgoto.c:75 msgid "No goto tool available." msgstr "" #: ../src/vikgoto.c:88 ../src/vikgoto.c:107 msgid "goto" msgstr "" #: ../src/vikgoto.c:90 msgid "I don't know that place. Do you want another goto?" msgstr "" #: ../src/vikgoto.c:109 msgid "goto provider:" msgstr "" #: ../src/vikgoto.c:124 msgid "Enter address or place name:" msgstr "Vnesite naslov ali ime kraja:" #: ../src/vikgpslayer.c:127 msgid "Data Mode" msgstr "" #: ../src/vikgpslayer.c:129 msgid "Realtime Tracking Mode" msgstr "" #: ../src/vikgpslayer.c:137 msgid "Keep vehicle at center" msgstr "" #: ../src/vikgpslayer.c:138 msgid "Keep vehicle on screen" msgstr "" #: ../src/vikgpslayer.c:139 msgid "Disable" msgstr "" #: ../src/vikgpslayer.c:152 msgid "Download Tracks:" msgstr "" #: ../src/vikgpslayer.c:153 msgid "Upload Tracks:" msgstr "" #: ../src/vikgpslayer.c:154 msgid "Download Routes:" msgstr "" #: ../src/vikgpslayer.c:155 msgid "Upload Routes:" msgstr "" #: ../src/vikgpslayer.c:156 msgid "Download Waypoints:" msgstr "" #: ../src/vikgpslayer.c:157 msgid "Upload Waypoints:" msgstr "" #: ../src/vikgpslayer.c:159 msgid "Recording tracks" msgstr "Snemanje sledi" #: ../src/vikgpslayer.c:160 msgid "Jump to current position on start" msgstr "Ob zagonu skoči na trenutni položaj" #: ../src/vikgpslayer.c:161 msgid "Moving Map Method:" msgstr "" #: ../src/vikgpslayer.c:162 msgid "Gpsd Host:" msgstr "Strežnik gpsd:" #: ../src/vikgpslayer.c:163 msgid "Gpsd Port:" msgstr "Vrata gpsd" #: ../src/vikgpslayer.c:164 msgid "Gpsd Retry Interval (seconds):" msgstr "" #: ../src/vikgpslayer.c:179 msgid "GPS" msgstr "" #: ../src/vikgpslayer.c:242 ../src/vikgpslayer.c:1258 msgid "GPS Download" msgstr "Prenos iz GPS" #: ../src/vikgpslayer.c:242 ../src/vikgpslayer.c:1258 #: ../src/viktrwlayer.c:3094 msgid "GPS Upload" msgstr "Prenos na GPS" #: ../src/vikgpslayer.c:244 msgid "GPS Realtime Tracking" msgstr "Sledenje v realnem času z GPS" #: ../src/vikgpslayer.c:451 msgid "Unknown GPS Protocol" msgstr "Neznan protokol GPS" #: ../src/vikgpslayer.c:469 msgid "Unknown serial port device" msgstr "" #: ../src/vikgpslayer.c:572 #, c-format msgid "%s: unknown parameter" msgstr "%s: neznan parameter" #. Now with icons #: ../src/vikgpslayer.c:693 msgid "_Upload to GPS" msgstr "" #: ../src/vikgpslayer.c:699 msgid "Download from _GPS" msgstr "" #: ../src/vikgpslayer.c:720 msgid "Empty _Realtime" msgstr "" #: ../src/vikgpslayer.c:727 msgid "E_mpty Upload" msgstr "" #: ../src/vikgpslayer.c:733 msgid "_Empty Download" msgstr "" #: ../src/vikgpslayer.c:739 msgid "Empty _All" msgstr "" #. #. NB It's not fatal if this gives 2 for example! Hence removal of the g_assert #. This happens when copied GPS layer is deleted (not sure why the number_handlers would be 2) #. I don't think there's any side effects and certainly better than the program just aborting #. #: ../src/vikgpslayer.c:756 #, c-format msgid "Unexpected number of disconnected handlers: %d" msgstr "" #: ../src/vikgpslayer.c:898 #, c-format msgid "Uploading %d waypoint..." msgid_plural "Uploading %d waypoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:899 #, c-format msgid "Uploading %d trackpoint..." msgid_plural "Uploading %d trackpoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:900 #, c-format msgid "Uploading %d routepoint..." msgid_plural "Uploading %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:925 #, c-format msgid "Downloaded %d out of %d waypoint..." msgid_plural "Downloaded %d out of %d waypoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:926 #, c-format msgid "Downloaded %d out of %d trackpoint..." msgid_plural "Downloaded %d out of %d trackpoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:927 #, c-format msgid "Downloaded %d out of %d routepoint..." msgid_plural "Downloaded %d out of %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:932 #, c-format msgid "Uploaded %d out of %d waypoint..." msgid_plural "Uploaded %d out of %d waypoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:933 #, c-format msgid "Uploaded %d out of %d trackpoint..." msgid_plural "Uploaded %d out of %d trackpoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:934 #, c-format msgid "Uploaded %d out of %d routepoint..." msgid_plural "Uploaded %d out of %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:942 #, c-format msgid "Downloaded %d waypoint" msgid_plural "Downloaded %d waypoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:943 #, c-format msgid "Downloaded %d trackpoint" msgid_plural "Downloaded %d trackpoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:944 #, c-format msgid "Downloaded %d routepoint" msgid_plural "Downloaded %d routepoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:949 #, c-format msgid "Uploaded %d waypoint" msgid_plural "Uploaded %d waypoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:950 #, c-format msgid "Uploaded %d trackpoint" msgid_plural "Uploaded %d trackpoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:951 #, c-format msgid "Uploaded %d routepoint" msgid_plural "Uploaded %d routepoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:1180 msgid "Error: couldn't find gpsbabel." msgstr "Napaka: programa gpsbabel ni bilo mogoče najti." #: ../src/vikgpslayer.c:1269 msgid "Warning - GPS Upload items may overwrite each other" msgstr "" #: ../src/vikgpslayer.c:1301 msgid "Status: detecting gpsbabel" msgstr "Stanje: iščem gpsbabel" #: ../src/vikgpslayer.c:1332 msgid "No GPS items selected for transfer." msgstr "" #: ../src/vikgpslayer.c:1347 msgid "Could not turn off device." msgstr "" #: ../src/vikgpslayer.c:1385 msgid "Are you sure you want to delete GPS Upload data?" msgstr "" #: ../src/vikgpslayer.c:1398 msgid "Are you sure you want to delete GPS Download data?" msgstr "" #: ../src/vikgpslayer.c:1412 msgid "Are you sure you want to delete GPS Realtime data?" msgstr "" #: ../src/vikgpslayer.c:1425 msgid "Are you sure you want to delete All GPS data?" msgstr "" #: ../src/viklayerspanel.c:55 msgid "/C_ut" msgstr "/Iz_reži" #: ../src/viklayerspanel.c:56 msgid "/_Copy" msgstr "/_Kopiraj" #: ../src/viklayerspanel.c:57 msgid "/_Paste" msgstr "/_Prilepi" #: ../src/viklayerspanel.c:58 msgid "/_Delete" msgstr "/_Zbriši" #: ../src/viklayerspanel.c:59 msgid "/New Layer" msgstr "/Nova plast" #: ../src/viklayerspanel.c:127 msgid "Top Layer" msgstr "Vrhnja plast" #: ../src/viklayerspanel.c:143 msgid "Add new layer" msgstr "" #: ../src/viklayerspanel.c:150 msgid "Remove selected layer" msgstr "" #: ../src/viklayerspanel.c:157 msgid "Move selected layer up" msgstr "" #: ../src/viklayerspanel.c:164 msgid "Move selected layer down" msgstr "" #: ../src/viklayerspanel.c:171 msgid "Cut selected layer" msgstr "" #: ../src/viklayerspanel.c:178 msgid "Copy selected layer" msgstr "" #: ../src/viklayerspanel.c:185 msgid "Paste layer below selected layer" msgstr "" #. TODO: FIXME: if name has a '/' in it it will get all messed up. why not have an itemfactory field with #. name, icon, shortcut, etc.? #: ../src/viklayerspanel.c:204 ../src/vikwindow.c:3292 #, c-format msgid "New _%s Layer" msgstr "" #: ../src/viklayerspanel.c:511 msgid "Aggregate Layers have no settable properties." msgstr "" #: ../src/viklayerspanel.c:555 msgid "You cannot cut the Top Layer." msgstr "Ne morete izrezati vrhnje plasti." #: ../src/viklayerspanel.c:600 #, c-format msgid "Are you sure you want to delete %s?" msgstr "" #: ../src/viklayerspanel.c:617 msgid "You cannot delete the Top Layer." msgstr "Ne morete izbrisati vrhnje plasti." #: ../src/viklayerspanel.c:701 msgid "Are you sure you wish to delete all layers?" msgstr "Ali res želite izbrisati vse plasti?" #. ******* MAPZOOMS ******** #: ../src/vikmapslayer.c:91 msgid "Use Viking Zoom Level" msgstr "" #: ../src/vikmapslayer.c:124 msgid "Map Type:" msgstr "Vrsta zemljevida:" #: ../src/vikmapslayer.c:125 msgid "Maps Directory:" msgstr "" #: ../src/vikmapslayer.c:126 msgid "Alpha:" msgstr "Prosojnost:" #: ../src/vikmapslayer.c:127 msgid "Control the Alpha value for transparency effects" msgstr "" #: ../src/vikmapslayer.c:128 msgid "Autodownload maps:" msgstr "Samodejen prenos zemljevidov:" #: ../src/vikmapslayer.c:129 msgid "Autodownload Only Gets Missing Maps:" msgstr "" #: ../src/vikmapslayer.c:130 msgid "" "Using this option avoids attempting to update already acquired tiles. This " "can be useful if you want to restrict the network usage, without having to " "resort to manual control. Only applies when 'Autodownload Maps' is on." msgstr "" #: ../src/vikmapslayer.c:131 msgid "Zoom Level:" msgstr "" #: ../src/vikmapslayer.c:132 msgid "" "Determines the method of displaying map tiles for the current zoom level. " "'Viking Zoom Level' uses the best matching level, otherwise setting a fixed " "value will always use map tiles of the specified value regardless of the " "actual zoom level." msgstr "" #: ../src/vikmapslayer.c:146 msgid "_Maps Download" msgstr "" #: ../src/vikmapslayer.c:146 msgid "Maps Download" msgstr "Prenos zemljevidov" #: ../src/vikmapslayer.c:161 msgid "Map" msgstr "Zemljevid" #: ../src/vikmapslayer.c:249 msgid "Default maplayer directory:" msgstr "" #: ../src/vikmapslayer.c:249 msgid "Choose a directory to store cached Map tiles for this layer" msgstr "" #: ../src/vikmapslayer.c:505 msgid "Unknown map type" msgstr "Neznana vrsta zemljevida" #: ../src/vikmapslayer.c:516 msgid "Unknown Map Zoom" msgstr "" #: ../src/vikmapslayer.c:589 #, c-format msgid "" "New map cannot be displayed in the current drawmode.\n" "Select \"%s\" from View menu to view it." msgstr "" #: ../src/vikmapslayer.c:753 #, c-format msgid "" "Cowardly refusing to draw tiles or existence of tiles beyond %d zoom out " "factor" msgstr "" #: ../src/vikmapslayer.c:1157 #, c-format msgid "Redownloading up to %d %s map..." msgid_plural "Redownloading up to %d %s maps..." msgstr[0] "Ponoven prenos do %d %s zemljevidov..." msgstr[1] "Ponoven prenos do %d %s zemljevida..." msgstr[2] "Ponoven prenos do %d %s zemljevidov..." msgstr[3] "Ponoven prenos do %d %s zemljevidov..." #: ../src/vikmapslayer.c:1159 #, c-format msgid "Redownloading %d %s map..." msgid_plural "Redownloading %d %s maps..." msgstr[0] "Ponoven prenos %d %s zemljevidov..." msgstr[1] "Ponoven prenos %d %s zemljevida..." msgstr[2] "Ponoven prenos %d %s zemljevidov..." msgstr[3] "Ponoven prenos %d %s zemljevidov..." #: ../src/vikmapslayer.c:1163 ../src/vikmapslayer.c:1238 #, c-format msgid "Downloading %d %s map..." msgid_plural "Downloading %d %s maps..." msgstr[0] "Prenos %d %s zemljevidov..." msgstr[1] "Prenos %d %s zemljevida..." msgstr[2] "Prenos %d %s zemljevidov..." msgstr[3] "Prenos %d %s zemljevidov..." #: ../src/vikmapslayer.c:1311 #, c-format msgid "" "\n" "Source: %s\n" "\n" "Tile File: %s\n" "Tile File Timestamp: %s" msgstr "" #: ../src/vikmapslayer.c:1318 #, c-format msgid "" "Source: %s\n" "\n" "No Tile File!" msgstr "" #: ../src/vikmapslayer.c:1356 msgid "Redownload _Bad Map(s)" msgstr "" #: ../src/vikmapslayer.c:1360 msgid "Redownload _New Map(s)" msgstr "" #: ../src/vikmapslayer.c:1364 msgid "Redownload _All Map(s)" msgstr "" #: ../src/vikmapslayer.c:1368 msgid "_Show Tile Information" msgstr "" #: ../src/vikmapslayer.c:1449 #, c-format msgid "" "Wrong drawmode for this map.\n" "Select \"%s\" from View menu and try again." msgstr "" #: ../src/vikmapslayer.c:1454 msgid "Wrong zoom level for this map." msgstr "" #. Now with icons #: ../src/vikmapslayer.c:1485 msgid "Download _Missing Onscreen Maps" msgstr "" #: ../src/vikmapslayer.c:1492 msgid "Download _New Onscreen Maps" msgstr "" #: ../src/vikmapslayer.c:1499 msgid "Reload _All Onscreen Maps" msgstr "" #: ../src/viktreeview.c:263 msgid "Layer Name" msgstr "Naziv plasti" #: ../src/viktreeview.c:742 #, c-format msgid "delete data from %s\n" msgstr "Izbriši podatke iz %s\n" #: ../src/viktrwlayer.c:377 msgid "Create _Waypoint" msgstr "" #: ../src/viktrwlayer.c:377 msgid "Create Waypoint" msgstr "" #: ../src/viktrwlayer.c:383 msgid "Create _Track" msgstr "" #: ../src/viktrwlayer.c:383 msgid "Create Track" msgstr "Ustvari sled" #: ../src/viktrwlayer.c:392 msgid "Create _Route" msgstr "" #: ../src/viktrwlayer.c:392 msgid "Create Route" msgstr "" #: ../src/viktrwlayer.c:401 msgid "_Edit Waypoint" msgstr "" #: ../src/viktrwlayer.c:401 msgid "Edit Waypoint" msgstr "" #: ../src/viktrwlayer.c:409 msgid "Edit Trac_kpoint" msgstr "" #: ../src/viktrwlayer.c:409 msgid "Edit Trackpoint" msgstr "Uredi točko sledi" #: ../src/viktrwlayer.c:417 msgid "Show P_icture" msgstr "" #: ../src/viktrwlayer.c:417 msgid "Show Picture" msgstr "Prikaži sliko" #: ../src/viktrwlayer.c:424 msgid "Route _Finder" msgstr "" #: ../src/viktrwlayer.c:424 msgid "Route Finder" msgstr "" #. ***** PARAMETERS ***** #: ../src/viktrwlayer.c:447 ../src/viktrwlayer.c:1942 #: ../src/viktrwlayer.c:1944 msgid "Waypoints" msgstr "" #: ../src/viktrwlayer.c:447 ../src/viktrwlayer.c:1933 #: ../src/viktrwlayer.c:1935 msgid "Tracks" msgstr "Sledi" #: ../src/viktrwlayer.c:447 msgid "Waypoint Images" msgstr "" #: ../src/viktrwlayer.c:450 msgid "Draw by Track" msgstr "Riši po sledeh" #: ../src/viktrwlayer.c:450 msgid "Draw by Speed" msgstr "" #: ../src/viktrwlayer.c:450 msgid "All Tracks Same Color" msgstr "" #: ../src/viktrwlayer.c:451 msgid "Filled Square" msgstr "Zapolnjen kvadrat" #: ../src/viktrwlayer.c:451 msgid "Square" msgstr "Kvadrat" #: ../src/viktrwlayer.c:451 msgid "Circle" msgstr "Krožec" #: ../src/viktrwlayer.c:451 msgid "X" msgstr "X" #: ../src/viktrwlayer.c:477 msgid "Extra Extra Small" msgstr "" #: ../src/viktrwlayer.c:478 msgid "Extra Small" msgstr "" #: ../src/viktrwlayer.c:479 msgid "Small" msgstr "" #: ../src/viktrwlayer.c:480 msgid "Medium" msgstr "" #: ../src/viktrwlayer.c:481 msgid "Large" msgstr "" #: ../src/viktrwlayer.c:482 msgid "Extra Large" msgstr "" #: ../src/viktrwlayer.c:483 msgid "Extra Extra Large" msgstr "" #: ../src/viktrwlayer.c:491 msgid "Track Drawing Mode:" msgstr "Način risanja sledi:" #: ../src/viktrwlayer.c:492 msgid "All Tracks Color:" msgstr "" #: ../src/viktrwlayer.c:493 msgid "The color used when 'All Tracks Same Color' drawing mode is selected" msgstr "" #: ../src/viktrwlayer.c:494 msgid "Draw Track Lines" msgstr "Riši črte sledi" #: ../src/viktrwlayer.c:495 msgid "Track Thickness:" msgstr "Debelina sledi:" #: ../src/viktrwlayer.c:496 msgid "Draw Track Direction" msgstr "" #: ../src/viktrwlayer.c:497 msgid "Direction Size:" msgstr "" #: ../src/viktrwlayer.c:498 msgid "Draw Trackpoints" msgstr "Riši točke sledi" #: ../src/viktrwlayer.c:499 msgid "Trackpoint Size:" msgstr "" #: ../src/viktrwlayer.c:500 msgid "Draw Elevation" msgstr "Riši višino" #: ../src/viktrwlayer.c:501 msgid "Draw Elevation Height %:" msgstr "" #: ../src/viktrwlayer.c:503 msgid "Draw Stops" msgstr "Riši zaustavitve" #: ../src/viktrwlayer.c:504 msgid "" "Whether to draw a marker when trackpoints are at the same position but over " "the minimum stop length apart in time" msgstr "" #: ../src/viktrwlayer.c:505 msgid "Min Stop Length (seconds):" msgstr "Najkrajša zaustavitev (sekund):" #: ../src/viktrwlayer.c:507 msgid "Track BG Thickness:" msgstr "Debelina ozadja sledi:" #: ../src/viktrwlayer.c:508 msgid "Track Background Color" msgstr "Barva ozadja sledi:" #: ../src/viktrwlayer.c:509 msgid "Draw by Speed Factor (%):" msgstr "" #: ../src/viktrwlayer.c:510 msgid "" "The percentage factor away from the average speed determining the color used" msgstr "" #: ../src/viktrwlayer.c:512 msgid "Draw Labels" msgstr "Nariši oznake" #: ../src/viktrwlayer.c:513 msgid "Waypoint Font Size:" msgstr "" #: ../src/viktrwlayer.c:514 msgid "Waypoint Color:" msgstr "" #: ../src/viktrwlayer.c:515 msgid "Waypoint Text:" msgstr "" #: ../src/viktrwlayer.c:516 msgid "Background:" msgstr "Ozadje:" #: ../src/viktrwlayer.c:517 msgid "Fake BG Color Translucency:" msgstr "" #: ../src/viktrwlayer.c:518 msgid "Waypoint marker:" msgstr "" #: ../src/viktrwlayer.c:519 msgid "Waypoint size:" msgstr "" #: ../src/viktrwlayer.c:520 msgid "Draw Waypoint Symbols:" msgstr "" #: ../src/viktrwlayer.c:522 msgid "Draw Waypoint Images" msgstr "" #: ../src/viktrwlayer.c:523 msgid "Image Size (pixels):" msgstr "Velikost slike (slikovnih točk):" #: ../src/viktrwlayer.c:524 msgid "Image Alpha:" msgstr "Prosojnost slike:" #: ../src/viktrwlayer.c:525 msgid "Image Memory Cache Size:" msgstr "" #: ../src/viktrwlayer.c:610 msgid "TrackWaypoint" msgstr "" #: ../src/viktrwlayer.c:1951 ../src/viktrwlayer.c:1953 msgid "Routes" msgstr "" #: ../src/viktrwlayer.c:2144 #, c-format msgid " in %d:%02d hrs:mins" msgstr "" #: ../src/viktrwlayer.c:2148 #, c-format msgid "" "\n" "%sTotal Length %.1f %s%s" msgstr "" #: ../src/viktrwlayer.c:2154 #, c-format msgid "Tracks: %d - Waypoints: %d - Routes: %d%s" msgstr "" #: ../src/viktrwlayer.c:2174 #, c-format msgid "Tracks: %d" msgstr "" #: ../src/viktrwlayer.c:2184 #, c-format msgid "Routes: %d" msgstr "" #: ../src/viktrwlayer.c:2215 #, c-format msgid "- %d:%02d hrs:mins" msgstr "" #: ../src/viktrwlayer.c:2223 #, c-format msgid "%s%.1f km %s" msgstr "" #: ../src/viktrwlayer.c:2226 #, c-format msgid "%s%.1f miles %s" msgstr "" #: ../src/viktrwlayer.c:2240 #, c-format msgid "Waypoints: %d" msgstr "" #: ../src/viktrwlayer.c:2266 #, c-format msgid "Trkpt: Alt %dft" msgstr "" #. VIK_UNITS_HEIGHT_METRES: #: ../src/viktrwlayer.c:2270 #, c-format msgid "Trkpt: Alt %dm" msgstr "" #. Compact date time format #: ../src/viktrwlayer.c:2277 #, c-format msgid " | Time %x %X" msgstr "" #: ../src/viktrwlayer.c:2295 #, c-format msgid " | Track: %s" msgstr "" #. Combine parts to make overall message #: ../src/viktrwlayer.c:2299 #, c-format msgid "%s%s | %s %s %s" msgstr "" #: ../src/viktrwlayer.c:2314 #, c-format msgid "Wpt: Alt %dft" msgstr "" #. VIK_UNITS_HEIGHT_METRES: #: ../src/viktrwlayer.c:2318 #, c-format msgid "Wpt: Alt %dm" msgstr "" #. Add comment if available #: ../src/viktrwlayer.c:2333 #, c-format msgid "%s | %s %s | Comment: %s" msgstr "" #: ../src/viktrwlayer.c:2335 #, c-format msgid "%s | %s %s" msgstr "" #: ../src/viktrwlayer.c:2563 ../src/viktrwlayer.c:2634 msgid "This layer has no waypoints or trackpoints." msgstr "" #: ../src/viktrwlayer.c:2661 ../src/vikwindow.c:2407 ../src/vikwindow.c:2848 #, c-format msgid "The file \"%s\" exists, do you wish to overwrite it?" msgstr "Datoteka \"%s\" že obstaja. Ali jo želite prepisati?" #: ../src/viktrwlayer.c:2671 ../src/vikwindow.c:2429 msgid "The filename you requested could not be opened for writing." msgstr "" #: ../src/viktrwlayer.c:2676 ../src/viktrwlayer.c:2681 #: ../src/viktrwlayer.c:2691 ../src/viktrwlayer.c:2703 msgid "Export Layer" msgstr "Izvozi plast" #: ../src/viktrwlayer.c:2720 msgid "Could not create temporary file for export." msgstr "" #: ../src/viktrwlayer.c:2729 #, c-format msgid "Could not launch %s." msgstr "" #: ../src/viktrwlayer.c:2773 msgid "Export Track as GPX" msgstr "" #: ../src/viktrwlayer.c:2795 msgid "Find" msgstr "" #: ../src/viktrwlayer.c:2805 msgid "Waypoint Name:" msgstr "" #: ../src/viktrwlayer.c:2822 msgid "Waypoint not found in this layer." msgstr "" #: ../src/viktrwlayer.c:3090 msgid "Can not upload invisible track." msgstr "" #: ../src/viktrwlayer.c:3192 ../src/viktrwlayer.c:7785 msgid "Track" msgstr "" #: ../src/viktrwlayer.c:3215 ../src/viktrwlayer.c:7817 msgid "Route" msgstr "" #: ../src/viktrwlayer.c:3296 ../src/viktrwlayer.c:6265 #: ../src/viktrwlayer.c:6314 msgid "_Finish Route" msgstr "" #: ../src/viktrwlayer.c:3298 ../src/viktrwlayer.c:6223 #: ../src/viktrwlayer.c:6312 msgid "_Finish Track" msgstr "" #. Now with icons #: ../src/viktrwlayer.c:3310 msgid "_View Layer" msgstr "" #: ../src/viktrwlayer.c:3317 msgid "V_iew" msgstr "" #: ../src/viktrwlayer.c:3323 msgid "View All _Tracks" msgstr "" #: ../src/viktrwlayer.c:3328 msgid "View All _Routes" msgstr "" #: ../src/viktrwlayer.c:3333 msgid "View All _Waypoints" msgstr "" #: ../src/viktrwlayer.c:3338 msgid "_Goto Center of Layer" msgstr "" #: ../src/viktrwlayer.c:3344 ../src/viktrwlayer.c:6199 msgid "Goto _Waypoint..." msgstr "" #: ../src/viktrwlayer.c:3350 msgid "_Export Layer" msgstr "" #: ../src/viktrwlayer.c:3356 msgid "Export as GPS_Point..." msgstr "" #: ../src/viktrwlayer.c:3361 msgid "Export as GPS_Mapper..." msgstr "" #: ../src/viktrwlayer.c:3366 msgid "Export as _GPX..." msgstr "" #: ../src/viktrwlayer.c:3371 msgid "Export as _KML..." msgstr "" #: ../src/viktrwlayer.c:3376 msgid "Open with External Program_1: " msgstr "" #: ../src/viktrwlayer.c:3383 msgid "Open with External Program_2: " msgstr "" #: ../src/viktrwlayer.c:3391 ../src/vikwindow.c:3145 msgid "_New" msgstr "_Novo" #: ../src/viktrwlayer.c:3397 msgid "New _Waypoint..." msgstr "" #: ../src/viktrwlayer.c:3403 msgid "New _Track" msgstr "" #: ../src/viktrwlayer.c:3411 msgid "New _Route" msgstr "" #: ../src/viktrwlayer.c:3420 ../src/viktrwlayer.c:6597 msgid "Geotag _Images..." msgstr "" #: ../src/viktrwlayer.c:3427 msgid "_Acquire" msgstr "" #: ../src/viktrwlayer.c:3433 ../src/vikwindow.c:3150 msgid "From _GPS..." msgstr "Iz _GPS..." #: ../src/viktrwlayer.c:3439 msgid "From Google _Directions..." msgstr "" #: ../src/viktrwlayer.c:3446 msgid "From _OSM Traces..." msgstr "" #: ../src/viktrwlayer.c:3451 msgid "From _My OSM Traces..." msgstr "" #: ../src/viktrwlayer.c:3459 ../src/vikwindow.c:3166 msgid "From _Wikipedia Waypoints" msgstr "" #: ../src/viktrwlayer.c:3465 msgid "Within _Layer Bounds" msgstr "" #: ../src/viktrwlayer.c:3471 msgid "Within _Current View" msgstr "" #: ../src/viktrwlayer.c:3479 msgid "From Geo_caching..." msgstr "" #: ../src/viktrwlayer.c:3486 ../src/vikwindow.c:3163 msgid "From Geotagged _Images..." msgstr "" #: ../src/viktrwlayer.c:3492 msgid "From _File..." msgstr "" #: ../src/viktrwlayer.c:3498 ../src/viktrwlayer.c:6542 msgid "_Upload" msgstr "" #: ../src/viktrwlayer.c:3504 msgid "Upload to _GPS..." msgstr "" #: ../src/viktrwlayer.c:3511 ../src/viktrwlayer.c:6570 msgid "Upload to _OSM..." msgstr "" #: ../src/viktrwlayer.c:3519 msgid "De_lete" msgstr "" #: ../src/viktrwlayer.c:3525 msgid "Delete All _Tracks" msgstr "" #: ../src/viktrwlayer.c:3531 msgid "Delete Tracks _From Selection..." msgstr "" #: ../src/viktrwlayer.c:3537 ../src/viktrwlayer.c:6290 msgid "Delete _All Routes" msgstr "" #: ../src/viktrwlayer.c:3543 ../src/viktrwlayer.c:6296 msgid "_Delete Routes From Selection..." msgstr "" #: ../src/viktrwlayer.c:3549 msgid "Delete All _Waypoints" msgstr "" #: ../src/viktrwlayer.c:3555 msgid "Delete Waypoints From _Selection..." msgstr "" #: ../src/viktrwlayer.c:4128 #, c-format msgid "Are you sure you want to delete all tracks in %s?" msgstr "" #: ../src/viktrwlayer.c:4138 #, c-format msgid "Are you sure you want to delete all routes in %s?" msgstr "" #: ../src/viktrwlayer.c:4148 #, c-format msgid "Are you sure you want to delete all waypoints in %s?" msgstr "" #: ../src/viktrwlayer.c:4165 #, c-format msgid "Are you sure you want to delete the waypoint \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4178 #, c-format msgid "Are you sure you want to delete the track \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4191 #, c-format msgid "Are you sure you want to delete the route \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4351 ../src/viktrwlayer.c:4922 msgid "" "Converting a track to a route removes extra track data such as segments, " "timestamps, etc...\n" "Do you want to continue?" msgstr "" #: ../src/viktrwlayer.c:4711 msgid "Failed. No other tracks with timestamps in this layer found" msgstr "" #: ../src/viktrwlayer.c:4713 msgid "Failed. No other tracks without timestamps in this layer found" msgstr "" #: ../src/viktrwlayer.c:4732 msgid "Merge with..." msgstr "" #: ../src/viktrwlayer.c:4733 msgid "Select route to merge with" msgstr "" #: ../src/viktrwlayer.c:4733 msgid "Select track to merge with" msgstr "" #: ../src/viktrwlayer.c:4818 ../src/viktrwlayer.c:4895 msgid "Append Route" msgstr "" #: ../src/viktrwlayer.c:4818 ../src/viktrwlayer.c:4895 msgid "Append Track" msgstr "" #: ../src/viktrwlayer.c:4819 msgid "Select the route to append after the current route" msgstr "" #: ../src/viktrwlayer.c:4820 msgid "Select the track to append after the current track" msgstr "" #: ../src/viktrwlayer.c:4896 msgid "Select the track to append after the current route" msgstr "" #: ../src/viktrwlayer.c:4897 msgid "Select the route to append after the current track" msgstr "" #: ../src/viktrwlayer.c:4957 #, c-format msgid "%d segment merged" msgid_plural "%d segments merged" msgstr[0] "" msgstr[1] "" #: ../src/viktrwlayer.c:4973 msgid "Failed. This track does not have timestamp" msgstr "" #: ../src/viktrwlayer.c:4985 msgid "Failed. No other track in this layer has timestamp" msgstr "" #: ../src/viktrwlayer.c:4992 msgid "Merge Threshold..." msgstr "Meja za združevanje..." #: ../src/viktrwlayer.c:4993 msgid "Merge when time between tracks less than:" msgstr "Združi, ko je čas med sledmi krajši kot:" #: ../src/viktrwlayer.c:5128 msgid "Split Threshold..." msgstr "" #: ../src/viktrwlayer.c:5129 msgid "Split when time between trackpoints exceeds:" msgstr "Razdeli, če je čas med točkama sledi večji kot:" #: ../src/viktrwlayer.c:5205 msgid "Split Every Nth Point" msgstr "" #: ../src/viktrwlayer.c:5206 msgid "Split on every Nth point:" msgstr "" #: ../src/viktrwlayer.c:5312 msgid "Can not split track as it has no segments" msgstr "" #: ../src/viktrwlayer.c:5340 ../src/viktrwlayer.c:5370 #, c-format msgid "Deleted %ld point" msgid_plural "Deleted %ld points" msgstr[0] "" msgstr[1] "" #: ../src/viktrwlayer.c:5531 msgid "Internal Error in vik_trw_layer_uniquify_tracks" msgstr "" #: ../src/viktrwlayer.c:5588 ../src/viktrwlayer.c:5635 #: ../src/viktrwlayer.c:5814 msgid "" "Multiple entries with the same name exist. This method only works with " "unique names. Force unique names now?" msgstr "" #: ../src/viktrwlayer.c:5599 msgid "No tracks found" msgstr "" #: ../src/viktrwlayer.c:5607 ../src/viktrwlayer.c:5654 #: ../src/viktrwlayer.c:5834 msgid "Delete Selection" msgstr "" #: ../src/viktrwlayer.c:5608 msgid "Select tracks to delete" msgstr "" #: ../src/viktrwlayer.c:5646 msgid "No routes found" msgstr "" #: ../src/viktrwlayer.c:5655 msgid "Select routes to delete" msgstr "" #: ../src/viktrwlayer.c:5761 msgid "Internal Error in vik_trw_layer_uniquify_waypoints" msgstr "" #: ../src/viktrwlayer.c:5824 msgid "No waypoints found" msgstr "" #: ../src/viktrwlayer.c:5835 msgid "Select waypoints to delete" msgstr "" #: ../src/viktrwlayer.c:5896 #, c-format msgid "" "A waypoint with the name \"%s\" already exists. Really rename to the same " "name?" msgstr "" #: ../src/viktrwlayer.c:5926 #, c-format msgid "" "A track with the name \"%s\" already exists. Really rename to the same name?" msgstr "" #: ../src/viktrwlayer.c:5963 #, c-format msgid "" "A route with the name \"%s\" already exists. Really rename to the same name?" msgstr "" #: ../src/viktrwlayer.c:6085 ../src/viktrwlayer.c:6337 msgid "_Goto" msgstr "" #: ../src/viktrwlayer.c:6104 msgid "_Visit Geocache Webpage" msgstr "" #: ../src/viktrwlayer.c:6123 msgid "_Show Picture..." msgstr "" #: ../src/viktrwlayer.c:6131 msgid "Update Geotag on _Image" msgstr "" #: ../src/viktrwlayer.c:6137 msgid "_Update" msgstr "" #: ../src/viktrwlayer.c:6142 msgid "Update and _Keep File Timestamp" msgstr "" #: ../src/viktrwlayer.c:6153 msgid "Visit _Webpage" msgstr "" #: ../src/viktrwlayer.c:6184 msgid "_New Waypoint..." msgstr "" #: ../src/viktrwlayer.c:6193 msgid "_View All Waypoints" msgstr "" #: ../src/viktrwlayer.c:6205 msgid "Delete _All Waypoints" msgstr "" #: ../src/viktrwlayer.c:6211 msgid "_Delete Waypoints From Selection..." msgstr "" #: ../src/viktrwlayer.c:6233 msgid "_View All Tracks" msgstr "" #: ../src/viktrwlayer.c:6239 msgid "_New Track" msgstr "" #: ../src/viktrwlayer.c:6247 msgid "Delete _All Tracks" msgstr "" #: ../src/viktrwlayer.c:6253 msgid "_Delete Tracks From Selection..." msgstr "" #: ../src/viktrwlayer.c:6276 msgid "_View All Routes" msgstr "" #: ../src/viktrwlayer.c:6282 msgid "_New Route" msgstr "" #: ../src/viktrwlayer.c:6327 msgid "_View Track" msgstr "" #: ../src/viktrwlayer.c:6329 msgid "_View Route" msgstr "" #: ../src/viktrwlayer.c:6343 msgid "_Startpoint" msgstr "" #: ../src/viktrwlayer.c:6349 msgid "\"_Center\"" msgstr "" #: ../src/viktrwlayer.c:6355 msgid "_Endpoint" msgstr "" #: ../src/viktrwlayer.c:6361 msgid "_Highest Altitude" msgstr "" #: ../src/viktrwlayer.c:6367 msgid "_Lowest Altitude" msgstr "" #: ../src/viktrwlayer.c:6375 msgid "_Maximum Speed" msgstr "" #: ../src/viktrwlayer.c:6384 msgid "Co_mbine" msgstr "" #: ../src/viktrwlayer.c:6392 msgid "_Merge By Time..." msgstr "" #: ../src/viktrwlayer.c:6397 msgid "Merge _Segments" msgstr "" #: ../src/viktrwlayer.c:6403 msgid "Merge _With Other Tracks..." msgstr "" #: ../src/viktrwlayer.c:6409 msgid "_Append Track..." msgstr "" #: ../src/viktrwlayer.c:6411 msgid "_Append Route..." msgstr "" #: ../src/viktrwlayer.c:6417 msgid "Append _Route..." msgstr "" #: ../src/viktrwlayer.c:6419 msgid "Append _Track..." msgstr "" #: ../src/viktrwlayer.c:6426 msgid "_Split" msgstr "" #: ../src/viktrwlayer.c:6434 msgid "_Split By Time..." msgstr "" #. ATM always enable this entry - don't want to have to analyse the track before displaying the menu - to keep the menu speedy #: ../src/viktrwlayer.c:6440 msgid "Split Se_gments" msgstr "" #: ../src/viktrwlayer.c:6446 msgid "Split By _Number of Points..." msgstr "" #: ../src/viktrwlayer.c:6451 msgid "Split at _Trackpoint" msgstr "" #: ../src/viktrwlayer.c:6460 msgid "Delete Poi_nts" msgstr "" #: ../src/viktrwlayer.c:6466 msgid "Delete Points With The Same _Position" msgstr "" #: ../src/viktrwlayer.c:6471 msgid "Delete Points With The Same _Time" msgstr "" #: ../src/viktrwlayer.c:6477 msgid "_Reverse Track" msgstr "" #: ../src/viktrwlayer.c:6479 msgid "_Reverse Route" msgstr "" #: ../src/viktrwlayer.c:6488 msgid "Down_load Maps Along Track..." msgstr "" #: ../src/viktrwlayer.c:6490 msgid "Down_load Maps Along Route..." msgstr "" #: ../src/viktrwlayer.c:6497 msgid "_Apply DEM Data" msgstr "" #: ../src/viktrwlayer.c:6504 msgid "_Export Track as GPX..." msgstr "" #: ../src/viktrwlayer.c:6506 msgid "_Export Route as GPX..." msgstr "" #: ../src/viktrwlayer.c:6513 msgid "E_xtend Track End" msgstr "" #: ../src/viktrwlayer.c:6515 msgid "E_xtend Route End" msgstr "" #: ../src/viktrwlayer.c:6522 msgid "C_onvert to a Route" msgstr "" #: ../src/viktrwlayer.c:6524 msgid "C_onvert to a Track" msgstr "" #: ../src/viktrwlayer.c:6532 msgid "Extend _Using Route Finder" msgstr "" #: ../src/viktrwlayer.c:6548 msgid "_Upload to GPS..." msgstr "" #: ../src/viktrwlayer.c:6559 msgid "_View Google Directions" msgstr "" #: ../src/viktrwlayer.c:6579 msgid "Use with _Filter" msgstr "" #: ../src/viktrwlayer.c:6612 msgid "_Edit Trackpoint" msgstr "" #: ../src/viktrwlayer.c:7524 #, c-format msgid " - Gain %dm:Loss %dm" msgstr "" #: ../src/viktrwlayer.c:7526 #, c-format msgid " - Gain %dft:Loss %dft" msgstr "" #: ../src/viktrwlayer.c:7531 #, c-format msgid " - Bearing %3.1f° - Step %s" msgstr "" #: ../src/viktrwlayer.c:8124 #, c-format msgid "Could not launch %s to open file." msgstr "" #: ../src/viktrwlayer.c:8205 #, c-format msgid "Creating %d Image Thumbnails..." msgstr "" #: ../src/viktrwlayer.c:8524 msgid "No map layer in use. Create one first" msgstr "" #: ../src/viktrwlayer_propwin.c:898 ../src/viktrwlayer_propwin.c:1155 #, c-format msgid "%.1f kph" msgstr "" #: ../src/viktrwlayer_propwin.c:901 ../src/viktrwlayer_propwin.c:1158 #, c-format msgid "%.1f mph" msgstr "" #: ../src/viktrwlayer_propwin.c:904 ../src/viktrwlayer_propwin.c:1161 #, c-format msgid "%.1f knots" msgstr "" #. VIK_UNITS_SPEED_METRES_PER_SECOND: #: ../src/viktrwlayer_propwin.c:908 ../src/viktrwlayer_propwin.c:1165 #, c-format msgid "%.1f m/s" msgstr "" #: ../src/viktrwlayer_propwin.c:1745 #, c-format msgid "%.1f miles" msgstr "" #: ../src/viktrwlayer_propwin.c:1747 #, c-format msgid "%.1f km" msgstr "" #: ../src/viktrwlayer_propwin.c:2681 msgid "Failed spliting track. Track unchanged" msgstr "" #: ../src/viktrwlayer_propwin.c:2779 ../src/viktrwlayer_propwin.c:3178 #, c-format msgid "%s - Track Properties" msgstr "%s - Lastnosti sledi" #: ../src/viktrwlayer_propwin.c:2784 msgid "Split at _Marker" msgstr "" #: ../src/viktrwlayer_propwin.c:2785 msgid "Split _Segments" msgstr "" #: ../src/viktrwlayer_propwin.c:2786 msgid "_Reverse" msgstr "" #: ../src/viktrwlayer_propwin.c:2787 msgid "_Delete Dupl." msgstr "" #: ../src/viktrwlayer_propwin.c:2813 msgid "Comment:" msgstr "Opomba:" #: ../src/viktrwlayer_propwin.c:2814 msgid "Description:" msgstr "" #: ../src/viktrwlayer_propwin.c:2815 msgid "Track Length:" msgstr "Dolžina sledi:" #: ../src/viktrwlayer_propwin.c:2816 msgid "Trackpoints:" msgstr "Točk sledi:" #: ../src/viktrwlayer_propwin.c:2817 msgid "Segments:" msgstr "" #: ../src/viktrwlayer_propwin.c:2818 msgid "Duplicate Points:" msgstr "Podvojene točke:" #: ../src/viktrwlayer_propwin.c:2819 msgid "Max Speed:" msgstr "Najvišja hitrost:" #: ../src/viktrwlayer_propwin.c:2820 msgid "Avg. Speed:" msgstr "Povp. hitrost:" #: ../src/viktrwlayer_propwin.c:2821 msgid "Moving Avg. Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:2822 msgid "Avg. Dist. Between TPs:" msgstr "Povprečna razdalja med točkama:" #: ../src/viktrwlayer_propwin.c:2823 msgid "Elevation Range:" msgstr "Razpon višin:" #: ../src/viktrwlayer_propwin.c:2824 msgid "Total Elevation Gain/Loss:" msgstr "Skupen dvig/spust:" #: ../src/viktrwlayer_propwin.c:2825 msgid "Start:" msgstr "Začetek:" #: ../src/viktrwlayer_propwin.c:2826 msgid "End:" msgstr "Konec:" #: ../src/viktrwlayer_propwin.c:2827 msgid "Duration:" msgstr "Trajanje:" #: ../src/viktrwlayer_propwin.c:2828 msgid "Color:" msgstr "" #: ../src/viktrwlayer_propwin.c:2877 ../src/viktrwlayer_propwin.c:2901 #: ../src/viktrwlayer_propwin.c:2929 ../src/viktrwlayer_propwin.c:2966 #: ../src/viktrwlayer_propwin.c:2984 ../src/viktrwlayer_propwin.c:3034 #: ../src/viktrwlayer_propwin.c:3035 ../src/viktrwlayer_propwin.c:3036 #: ../src/viktrwlayer_propwin.c:3062 ../src/viktrwlayer_propwin.c:3063 #: ../src/viktrwlayer_propwin.c:3078 ../src/viktrwlayer_propwin.c:3079 #: ../src/viktrwlayer_propwin.c:3092 ../src/viktrwlayer_propwin.c:3093 #: ../src/viktrwlayer_propwin.c:3106 ../src/viktrwlayer_propwin.c:3107 #: ../src/viktrwlayer_propwin.c:3120 ../src/viktrwlayer_propwin.c:3121 #: ../src/viktrwlayer_propwin.c:3134 ../src/viktrwlayer_propwin.c:3135 #, c-format msgid "No Data" msgstr "Ni podatkov" #: ../src/viktrwlayer_propwin.c:3031 #, c-format msgid "%d minutes" msgstr "%d minut" #: ../src/viktrwlayer_propwin.c:3058 msgid "Statistics" msgstr "" #: ../src/viktrwlayer_propwin.c:3064 msgid "Show D_EM" msgstr "" #: ../src/viktrwlayer_propwin.c:3065 ../src/viktrwlayer_propwin.c:3080 #: ../src/viktrwlayer_propwin.c:3094 ../src/viktrwlayer_propwin.c:3136 msgid "Show _GPS Speed" msgstr "" #: ../src/viktrwlayer_propwin.c:3067 ../src/viktrwlayer_propwin.c:3082 #: ../src/viktrwlayer_propwin.c:3110 ../src/viktrwlayer_propwin.c:3138 msgid "Track Distance:" msgstr "" #: ../src/viktrwlayer_propwin.c:3068 ../src/viktrwlayer_propwin.c:3125 msgid "Track Height:" msgstr "" #: ../src/viktrwlayer_propwin.c:3073 msgid "Elevation-distance" msgstr "Višina-razdalja" #: ../src/viktrwlayer_propwin.c:3083 msgid "Track Gradient:" msgstr "" #: ../src/viktrwlayer_propwin.c:3087 msgid "Gradient-distance" msgstr "" #: ../src/viktrwlayer_propwin.c:3096 ../src/viktrwlayer_propwin.c:3111 #: ../src/viktrwlayer_propwin.c:3124 msgid "Track Time:" msgstr "" #: ../src/viktrwlayer_propwin.c:3097 ../src/viktrwlayer_propwin.c:3139 msgid "Track Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:3101 msgid "Speed-time" msgstr "Hitrost-čas" #: ../src/viktrwlayer_propwin.c:3108 ../src/viktrwlayer_propwin.c:3122 msgid "Show S_peed" msgstr "" #: ../src/viktrwlayer_propwin.c:3115 msgid "Distance-time" msgstr "" #: ../src/viktrwlayer_propwin.c:3129 msgid "Elevation-time" msgstr "" #: ../src/viktrwlayer_propwin.c:3143 msgid "Speed-distance" msgstr "" #: ../src/viktrwlayer_tpwin.c:118 msgid "Part of Track:" msgstr "Del sledi:" #: ../src/viktrwlayer_tpwin.c:119 msgid "Latitude:" msgstr "Geografska širina:" #: ../src/viktrwlayer_tpwin.c:120 msgid "Longitude:" msgstr "Geografska dolžina:" #: ../src/viktrwlayer_tpwin.c:121 msgid "Altitude:" msgstr "Višina:" #: ../src/viktrwlayer_tpwin.c:122 msgid "Timestamp:" msgstr "" #: ../src/viktrwlayer_tpwin.c:123 msgid "Time:" msgstr "Čas:" #: ../src/viktrwlayer_tpwin.c:124 msgid "Distance Difference:" msgstr "Razlika razdalj:" #: ../src/viktrwlayer_tpwin.c:125 msgid "Time Difference:" msgstr "Razlika v času:" #: ../src/viktrwlayer_tpwin.c:126 msgid "\"Speed\" Between:" msgstr "\"Hitrost\" med:" #: ../src/viktrwlayer_tpwin.c:127 msgid "VDOP:" msgstr "" #: ../src/viktrwlayer_tpwin.c:128 msgid "HDOP:" msgstr "" #: ../src/viktrwlayer_tpwin.c:129 msgid "PDOP:" msgstr "" #: ../src/viktrwlayer_tpwin.c:130 msgid "SAT/FIX:" msgstr "" #: ../src/viktrwlayer_tpwin.c:139 msgid "Trackpoint" msgstr "Točka sledi" #: ../src/viktrwlayer_tpwin.c:142 msgid "_Insert After" msgstr "" #: ../src/viktrwlayer_tpwin.c:144 msgid "Split Here" msgstr "Razdeli tu" #: ../src/viktrwlayer_geotag.c:446 #, c-format msgid "Geotagging %d Images..." msgstr "" #: ../src/viktrwlayer_geotag.c:510 msgid "Geotag Images" msgstr "" #: ../src/viktrwlayer_geotag.c:516 msgid "Images" msgstr "" #: ../src/viktrwlayer_geotag.c:520 msgid "Overwrite Existing Waypoints:" msgstr "" #: ../src/viktrwlayer_geotag.c:523 msgid "Overwrite Existing GPS Information:" msgstr "" #: ../src/viktrwlayer_geotag.c:525 msgid "Keep File Modification Timestamp:" msgstr "" #: ../src/viktrwlayer_geotag.c:555 msgid "Create Waypoints:" msgstr "" #: ../src/viktrwlayer_geotag.c:563 msgid "Write EXIF:" msgstr "" #: ../src/viktrwlayer_geotag.c:575 msgid "Interpolate Between Track Segments:" msgstr "" #: ../src/viktrwlayer_geotag.c:579 msgid "Image Time Offset (Seconds):" msgstr "" #: ../src/viktrwlayer_geotag.c:581 msgid "" "The number of seconds to ADD to the photos time to make it match the GPS " "data. Calculate this with (GPS - Photo). Can be negative or positive. Useful " "to adjust times when a camera's timestamp was incorrect." msgstr "" #: ../src/viktrwlayer_geotag.c:584 msgid "Image Timezone:" msgstr "" #: ../src/viktrwlayer_geotag.c:586 msgid "" "The timezone that was used when the images were created. For example, if a " "camera is set to AWST or +8:00 hours. Enter +8:00 here so that the correct " "adjustment to the images' time can be made. GPS data is always in UTC." msgstr "" #: ../src/viktrwlayer_geotag.c:590 #, c-format msgid "Using track: %s" msgstr "" #: ../src/viktrwlayer_geotag.c:592 #, c-format msgid "Using all tracks in: %s" msgstr "" #: ../src/vikstatus.c:105 msgid "Current zoom level. Click to select a new one." msgstr "" #: ../src/vikwaypoint.c:34 msgid "Waypoint" msgstr "" #. TODO get rid of this as this is unnecessary duplication... #: ../src/vikwindow.c:221 msgid "Pan" msgstr "" #: ../src/vikwindow.c:221 msgid "Zoom" msgstr "Povečava" #: ../src/vikwindow.c:221 msgid "Ruler" msgstr "Merilo" #: ../src/vikwindow.c:221 msgid "Select" msgstr "" #. Create tooltip #: ../src/vikwindow.c:440 msgid "Select zoom level" msgstr "" #: ../src/vikwindow.c:645 #, c-format msgid "" "Do you want to save the changes you made to the document \"%s\"?\n" "\n" "Your changes will be lost if you don't save them." msgstr "" #: ../src/vikwindow.c:649 msgid "Don't Save" msgstr "Ne shrani" #: ../src/vikwindow.c:696 msgid "mpp" msgstr "" #: ../src/vikwindow.c:696 msgid "pixelfact" msgstr "" #: ../src/vikwindow.c:861 #, c-format msgid "%s %s %dm" msgstr "" #: ../src/vikwindow.c:863 #, c-format msgid "%s %s %dft" msgstr "" #: ../src/vikwindow.c:866 #, c-format msgid "%s %s" msgstr "" #. NB Ctrl+Shift+R is used for Refresh (deemed more important), so use 'U' instead #: ../src/vikwindow.c:1254 msgid "_Ruler" msgstr "_Ravnilo" #: ../src/vikwindow.c:1254 msgid "Ruler Tool" msgstr "" #: ../src/vikwindow.c:1502 ../src/vikwindow.c:3138 msgid "_Zoom" msgstr "_Povečava" #: ../src/vikwindow.c:1502 msgid "Zoom Tool" msgstr "Orodje za povečavo" #: ../src/vikwindow.c:1547 ../src/vikwindow.c:3139 msgid "_Pan" msgstr "" #: ../src/vikwindow.c:1547 msgid "Pan Tool" msgstr "Orodje za premikanje" #: ../src/vikwindow.c:1664 msgid "_Select" msgstr "" #: ../src/vikwindow.c:1664 msgid "Select Tool" msgstr "" #: ../src/vikwindow.c:1809 msgid "You must select a layer to show its properties." msgstr "Izbrati morate plast, katere lastnosti želite prikazati." #. No error to show, so unlikely this will get called #: ../src/vikwindow.c:1824 msgid "The help system is not available." msgstr "" #. Main error path #: ../src/vikwindow.c:1827 #, c-format msgid "" "Help is not available because: %s.\n" "Ensure a Mime Type ghelp handler program is installed (e.g. yelp)." msgstr "" #: ../src/vikwindow.c:1850 msgid "You must select a layer to delete." msgstr "Izbrati morate plast, ki jo želite izbrisati." #: ../src/vikwindow.c:2087 msgid "Untitled" msgstr "Neimenovano" #: ../src/vikwindow.c:2194 #, c-format msgid "Unable to add '%s' to the list of recently used documents" msgstr "" #: ../src/vikwindow.c:2208 msgid "The file you requested could not be opened." msgstr "Datoteke, ki ste jo želeli, ni mogoče odpreti" #: ../src/vikwindow.c:2211 msgid "" "GPSBabel is required to load files of this type or GPSBabel encountered " "problems." msgstr "" #: ../src/vikwindow.c:2214 #, c-format msgid "Unable to load malformed GPX file %s" msgstr "" #: ../src/vikwindow.c:2217 #, c-format msgid "Unsupported file type for %s" msgstr "" #. Since we can process .vik files with issues just show a warning in the status bar #. Not that a user can do much about it... or tells them what this issue is yet... #: ../src/vikwindow.c:2223 #, c-format msgid "WARNING: issues encountered loading %s" msgstr "" #: ../src/vikwindow.c:2278 msgid "Please select a GPS data file to open. " msgstr "Prosimo, izberize datoteko s podatki GPS. " #: ../src/vikwindow.c:2288 msgid "Geocaching" msgstr "" #: ../src/vikwindow.c:2294 msgid "Google Earth" msgstr "" #: ../src/vikwindow.c:2299 msgid "GPX" msgstr "" #: ../src/vikwindow.c:2304 ../src/vikwindow.c:2387 #: ../src/viking.desktop.in.h:1 msgid "Viking" msgstr "Viking" #: ../src/vikwindow.c:2374 msgid "Save as Viking File." msgstr "Shrani kot datoteko Viking." #. Try harder... #: ../src/vikwindow.c:2619 ../src/vikwindow.c:2625 msgid "Generating image file..." msgstr "" #: ../src/vikwindow.c:2647 msgid "" "Failed to generate internal image.\n" "\n" "Try creating a smaller image." msgstr "" #: ../src/vikwindow.c:2655 msgid "Failed to generate image file." msgstr "" #. Success #: ../src/vikwindow.c:2660 msgid "Image file generated." msgstr "" #: ../src/vikwindow.c:2764 msgid "" "Viewable region outside allowable pixel size bounds for image. Clipping " "width/height values." msgstr "" #: ../src/vikwindow.c:2789 #, c-format msgid "Total area: %ldm x %ldm (%.3f sq. km)" msgstr "Skupna površina: %ldm x %ldm (%.3f km2)" #: ../src/vikwindow.c:2792 #, c-format msgid "Total area: %ldm x %ldm (%.3f sq. miles)" msgstr "" #: ../src/vikwindow.c:2813 msgid "Save Image" msgstr "Shrani sliko" #: ../src/vikwindow.c:2834 msgid "PNG" msgstr "" #: ../src/vikwindow.c:2857 msgid "You must be in UTM mode to use this feature" msgstr "" #: ../src/vikwindow.c:2862 msgid "Choose a directory to hold images" msgstr "Izberite mapo za shranjevanje slik" #. todo: default for answers inside VikWindow or static (thruout instance) #: ../src/vikwindow.c:2883 msgid "Save to Image File" msgstr "Shrani v slikovno datoteko" #: ../src/vikwindow.c:2900 msgid "Width (pixels):" msgstr "Širina (slikovnih točk):" #: ../src/vikwindow.c:2902 msgid "Height (pixels):" msgstr "Višina (slikovnih točk):" #: ../src/vikwindow.c:2905 msgid "" "WARNING: USING LARGE IMAGES OVER 10000x10000\n" "MAY CRASH THE PROGRAM!" msgstr "" #: ../src/vikwindow.c:2907 msgid "Zoom (meters per pixel):" msgstr "Povečava (metrov na slikovno točko)" #: ../src/vikwindow.c:2921 msgid "Area in current viewable window" msgstr "Površina v trenutno vidnem oknu" #: ../src/vikwindow.c:2931 msgid "Save as PNG" msgstr "Shrani kot PNG" #: ../src/vikwindow.c:2932 msgid "Save as JPEG" msgstr "Shrani kot JPEG" #: ../src/vikwindow.c:2954 msgid "East-west image tiles:" msgstr "" #: ../src/vikwindow.c:2956 msgid "North-south image tiles:" msgstr "" #: ../src/vikwindow.c:3097 msgid "Choose a background color" msgstr "Izberite barvo ozadja" #: ../src/vikwindow.c:3113 msgid "Choose a track highlight color" msgstr "" #: ../src/vikwindow.c:3134 msgid "_File" msgstr "_Datoteka" #: ../src/vikwindow.c:3135 msgid "_Edit" msgstr "Ur_ejanje" #: ../src/vikwindow.c:3136 msgid "_View" msgstr "_Pogled" #: ../src/vikwindow.c:3137 msgid "_Show" msgstr "" #: ../src/vikwindow.c:3140 msgid "_Layers" msgstr "_Plasti" #: ../src/vikwindow.c:3141 msgid "_Tools" msgstr "_Orodja" #: ../src/vikwindow.c:3142 msgid "_Webtools" msgstr "" #: ../src/vikwindow.c:3143 ../src/vikwindow.c:3206 msgid "_Help" msgstr "Po_moč" #: ../src/vikwindow.c:3145 msgid "New file" msgstr "Nova datoteka" #: ../src/vikwindow.c:3146 msgid "_Open..." msgstr "_Odpri..." #: ../src/vikwindow.c:3146 msgid "Open a file" msgstr "Odpri datoteko" #: ../src/vikwindow.c:3147 msgid "Open _Recent File" msgstr "" #: ../src/vikwindow.c:3148 msgid "Append _File..." msgstr "_Pripni datoteko..." #: ../src/vikwindow.c:3148 msgid "Append data from a different file" msgstr "Pripni podatke iz druge datoteke" #: ../src/vikwindow.c:3149 msgid "A_cquire" msgstr "_Zajemi" #: ../src/vikwindow.c:3150 msgid "Transfer data from a GPS device" msgstr "Prenos podatkov iz naprave GPS" #: ../src/vikwindow.c:3151 msgid "Import File With GPS_Babel..." msgstr "" #: ../src/vikwindow.c:3151 msgid "Import file via GPSBabel converter" msgstr "" #: ../src/vikwindow.c:3153 msgid "Google _Directions..." msgstr "" #: ../src/vikwindow.c:3153 msgid "Get driving directions from Google" msgstr "" #: ../src/vikwindow.c:3156 msgid "_OSM Traces..." msgstr "" #: ../src/vikwindow.c:3156 msgid "Get traces from OpenStreetMap" msgstr "" #: ../src/vikwindow.c:3157 msgid "_My OSM Traces..." msgstr "" #: ../src/vikwindow.c:3157 msgid "Get Your Own Traces from OpenStreetMap" msgstr "" #: ../src/vikwindow.c:3160 msgid "Geo_caches..." msgstr "Geo_zakladi..." #: ../src/vikwindow.c:3160 msgid "Get Geocaches from geocaching.com" msgstr "Pridobi podatke o Geozakladih iz geocaching.com" #: ../src/vikwindow.c:3163 msgid "Create waypoints from geotagged images" msgstr "" #: ../src/vikwindow.c:3166 msgid "Create waypoints from Wikipedia items in the current view" msgstr "" #: ../src/vikwindow.c:3168 msgid "_Save" msgstr "_Shrani" #: ../src/vikwindow.c:3168 msgid "Save the file" msgstr "Shrani datoteko" #: ../src/vikwindow.c:3169 msgid "Save _As..." msgstr "Shrani _kot..." #: ../src/vikwindow.c:3169 msgid "Save the file under different name" msgstr "Shrani datoteko pod drugim imenom" #: ../src/vikwindow.c:3170 msgid "_Generate Image File..." msgstr "" #: ../src/vikwindow.c:3170 msgid "Save a snapshot of the workspace into a file" msgstr "" #: ../src/vikwindow.c:3171 msgid "Generate _Directory of Images..." msgstr "" #: ../src/vikwindow.c:3171 msgid "FIXME:IMGDIR" msgstr "" #: ../src/vikwindow.c:3174 msgid "_Print..." msgstr "_Natisni..." #: ../src/vikwindow.c:3174 msgid "Print maps" msgstr "Natisni zemljevide" #: ../src/vikwindow.c:3177 msgid "E_xit" msgstr "_Izhod" #: ../src/vikwindow.c:3177 msgid "Exit the program" msgstr "Izhod iz programa" #: ../src/vikwindow.c:3178 msgid "Save and Exit" msgstr "Shrani in končaj" #: ../src/vikwindow.c:3178 msgid "Save and Exit the program" msgstr "Shrani in končaj delo s programom" #: ../src/vikwindow.c:3180 msgid "Go to the _Default Location" msgstr "" #: ../src/vikwindow.c:3180 msgid "Go to the default location" msgstr "" #: ../src/vikwindow.c:3181 msgid "Go to _Location..." msgstr "" #: ../src/vikwindow.c:3181 msgid "Go to address/place using text search" msgstr "" #: ../src/vikwindow.c:3182 msgid "_Go to Lat/Lon..." msgstr "" #: ../src/vikwindow.c:3182 msgid "Go to arbitrary lat/lon coordinate" msgstr "" #: ../src/vikwindow.c:3183 msgid "Go to UTM..." msgstr "" #: ../src/vikwindow.c:3183 msgid "Go to arbitrary UTM coordinate" msgstr "" #: ../src/vikwindow.c:3184 msgid "_Refresh" msgstr "" #: ../src/vikwindow.c:3184 msgid "Refresh any maps displayed" msgstr "" #: ../src/vikwindow.c:3185 msgid "Set _Highlight Color..." msgstr "" #: ../src/vikwindow.c:3186 msgid "Set Bac_kground Color..." msgstr "" #: ../src/vikwindow.c:3187 msgid "Zoom _In" msgstr "Po_večaj" #: ../src/vikwindow.c:3188 msgid "Zoom _Out" msgstr "Po_manjšaj" #: ../src/vikwindow.c:3189 msgid "Zoom _To..." msgstr "" #: ../src/vikwindow.c:3190 msgid "Pan _North" msgstr "" #: ../src/vikwindow.c:3191 msgid "Pan _East" msgstr "" #: ../src/vikwindow.c:3192 msgid "Pan _South" msgstr "" #: ../src/vikwindow.c:3193 msgid "Pan _West" msgstr "" #: ../src/vikwindow.c:3194 msgid "Background _Jobs" msgstr "Opravila v _ozadju" #: ../src/vikwindow.c:3196 msgid "Cu_t" msgstr "_Izreži" #: ../src/vikwindow.c:3197 msgid "_Copy" msgstr "_Kopiraj" #: ../src/vikwindow.c:3198 msgid "_Paste" msgstr "_Prilepi" #: ../src/vikwindow.c:3199 msgid "_Delete" msgstr "I_zbriši" #: ../src/vikwindow.c:3200 msgid "Delete All" msgstr "Izbriši vse" #: ../src/vikwindow.c:3201 msgid "_Flush Map Cache" msgstr "" #: ../src/vikwindow.c:3202 msgid "_Set the Default Location" msgstr "" #: ../src/vikwindow.c:3202 msgid "Set the Default Location to the current position" msgstr "" #: ../src/vikwindow.c:3203 msgid "_Preferences" msgstr "_Nastavitve" #: ../src/vikwindow.c:3204 msgid "_Properties" msgstr "_Lastnosti" #: ../src/vikwindow.c:3207 msgid "_About" msgstr "_O programu" #: ../src/vikwindow.c:3213 msgid "_UTM Mode" msgstr "_UTM način" #: ../src/vikwindow.c:3214 msgid "_Expedia Mode" msgstr "_Expedia način" #: ../src/vikwindow.c:3215 msgid "_Mercator Mode" msgstr "_Mercator način" #: ../src/vikwindow.c:3216 msgid "Lat_/Lon Mode" msgstr "" #: ../src/vikwindow.c:3220 msgid "Show _Scale" msgstr "" #: ../src/vikwindow.c:3220 msgid "Show Scale" msgstr "Prikaži merilo" #: ../src/vikwindow.c:3221 msgid "Show _Center Mark" msgstr "" #: ../src/vikwindow.c:3221 msgid "Show Center Mark" msgstr "Prikaži oznako središča" #: ../src/vikwindow.c:3222 msgid "Show _Highlight" msgstr "" #: ../src/vikwindow.c:3222 msgid "Show Highlight" msgstr "" #: ../src/vikwindow.c:3223 msgid "_Full Screen" msgstr "Celozaslonsko" #: ../src/vikwindow.c:3223 msgid "Activate full screen mode" msgstr "" #: ../src/vikwindow.c:3224 msgid "Show Side _Panel" msgstr "" #: ../src/vikwindow.c:3224 msgid "Show Side Panel" msgstr "" #: ../src/vikwindow.c:3225 msgid "Show Status_bar" msgstr "" #: ../src/vikwindow.c:3225 msgid "Show Statusbar" msgstr "" #: ../src/vikwindow.c:3226 msgid "Show _Toolbar" msgstr "" #: ../src/vikwindow.c:3226 msgid "Show Toolbar" msgstr "" #: ../src/vikwindow.c:3227 msgid "Show _Menu" msgstr "" #: ../src/vikwindow.c:3227 msgid "Show Menu" msgstr "" #: ../src/viking.desktop.in.h:2 msgid "GPS Data Manager" msgstr "" #: ../src/viking.desktop.in.h:3 msgid "Map Based GPS Data Manager (live data capable)." msgstr "" #: ../src/libjpeg/jpeg-data.c:206 msgid "Data does not follow JPEG specification." msgstr "" #: ../src/libjpeg/jpeg-data.c:291 #, c-format msgid "Path '%s' invalid." msgstr "" #: ../src/libjpeg/jpeg-data.c:309 #, c-format msgid "Could not read '%s'." msgstr "" viking-1.4.2/po/ja.po0000644000175000017500000021455112175546146011321 00000000000000# Japanese translation for viking # Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008 # This file is distributed under the same license as the viking package. # FIRST AUTHOR , 2008. # msgid "" msgstr "" "Project-Id-Version: viking\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-02-04 23:29+0100\n" "PO-Revision-Date: 2010-09-07 09:24+0000\n" "Last-Translator: Guilhem Bonnefille \n" "Language-Team: Japanese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Launchpad-Export-Date: 2013-03-23 17:12+0000\n" "X-Generator: Launchpad (build 16540)\n" "Language: ja\n" #: ../src/acquire.c:103 ../src/vikgpslayer.c:1185 msgid "Done." msgstr "完了。" #: ../src/acquire.c:114 msgid "No data." msgstr "" #: ../src/acquire.c:154 ../src/acquire.c:404 msgid "Error: acquisition failed." msgstr "エラー: 取得失敗。" #: ../src/acquire.c:341 msgid "Working..." msgstr "処理中..." #. This shouldn't happen... #: ../src/acquire.c:394 msgid "" "Unable to create command\n" "Acquire method failed." msgstr "" #: ../src/acquire.c:486 msgid "_Filter" msgstr "" #: ../src/acquire.c:501 #, c-format msgid "Filter with %s" msgstr "" #: ../src/acquire.c:518 msgid "Filter" msgstr "" #: ../src/background.c:52 #, c-format msgid "%d items" msgstr "" #: ../src/background.c:248 msgid "Job" msgstr "ジョブ" #: ../src/background.c:252 msgid "Progress" msgstr "進捗状況" #: ../src/background.c:268 msgid "Viking Background Jobs" msgstr "Viking バックグラウンドジョブ" #: ../src/bing.c:47 msgid "Bing" msgstr "" #. VIK_GTK_WINDOW_FROM_WIDGET(vp) #: ../src/bingmapsource.c:445 msgid "Bing attribution Loading" msgstr "" #: ../src/clipboard.c:95 msgid "paste failed" msgstr "貼り付け失敗" #: ../src/clipboard.c:105 msgid "wrong clipboard data size" msgstr "" #: ../src/clipboard.c:124 #, c-format msgid "" "The clipboard contains sublayer data for %s layers. You must select a layer " "of this type to paste the clipboard data." msgstr "" #: ../src/clipboard.c:236 msgid "" "In order to paste a waypoint, please select an appropriate layer to paste " "into." msgstr "" #: ../src/dialog.c:52 msgid "Go to Lat/Lon" msgstr "" #: ../src/dialog.c:64 ../src/dialog.c:251 msgid "Latitude:" msgstr "緯度:" #: ../src/dialog.c:70 ../src/dialog.c:256 msgid "Longitude:" msgstr "経度:" #: ../src/dialog.c:102 msgid "Go to UTM" msgstr "" #: ../src/dialog.c:115 msgid "Northing:" msgstr "" #: ../src/dialog.c:121 msgid "Easting:" msgstr "" #: ../src/dialog.c:128 msgid "Zone:" msgstr "" #: ../src/dialog.c:131 msgid "Letter:" msgstr "レター:" #: ../src/dialog.c:199 msgid "Waypoint Properties" msgstr "" #: ../src/dialog.c:233 msgid "Name:" msgstr "名前:" #: ../src/dialog.c:261 msgid "Altitude:" msgstr "高度:" #: ../src/dialog.c:266 msgid "Comment:" msgstr "コメント:" #: ../src/dialog.c:274 ../src/osm-traces.c:437 msgid "Description:" msgstr "説明:" #: ../src/dialog.c:277 msgid "Image:" msgstr "画像:" #: ../src/dialog.c:282 msgid "Symbol:" msgstr "" #: ../src/dialog.c:291 msgid "(none)" msgstr "(なし)" #. TODO: other checks (isalpha or whatever ) #: ../src/dialog.c:356 msgid "Please enter a name for the waypoint." msgstr "" #: ../src/dialog.c:529 ../src/geonamessearch.c:243 #: ../src/datasource_osm_my_traces.c:507 msgid "Nothing was selected" msgstr "" #: ../src/dialog.c:537 msgid "Add Route" msgstr "" #: ../src/dialog.c:537 msgid "Add Track" msgstr "" #: ../src/dialog.c:545 msgid "Route Name:" msgstr "" #: ../src/dialog.c:545 msgid "Track Name:" msgstr "" #: ../src/dialog.c:565 msgid "Please enter a name for the track." msgstr "" #: ../src/dialog.c:623 msgid "Zoom Factors..." msgstr "" #: ../src/dialog.c:637 msgid "Zoom factor (in meters per pixel):" msgstr "" #: ../src/dialog.c:638 msgid "X (easting): " msgstr "" #: ../src/dialog.c:639 msgid "Y (northing): " msgstr "" #: ../src/dialog.c:644 msgid "X and Y zoom factors must be equal" msgstr "" #: ../src/dialog.c:699 msgid "1 min" msgstr "1分" #: ../src/dialog.c:700 msgid "1 hour" msgstr "1 時間" #: ../src/dialog.c:701 msgid "1 day" msgstr "1日" #: ../src/dialog.c:702 msgid "Custom (in minutes):" msgstr "" #: ../src/dialog.c:808 msgid "GPS Data and Topo Analyzer, Explorer, and Manager." msgstr "" #: ../src/dialog.c:809 msgid "" "This program is free software; you can redistribute it and/or modify it " "under the terms of the GNU General Public License as published by the Free " "Software Foundation; either version 2 of the License, or (at your option) " "any later version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT " "ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or " "FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for " "more details.\n" "\n" "You should have received a copy of the GNU General Public License along with " "this program; if not, write to the Free Software Foundation, Inc., 59 Temple " "Place, Suite 330, Boston, MA 02111-1307, USA" msgstr "" #: ../src/dialog.c:837 msgid "Translation is coordinated on http://launchpad.net/viking" msgstr "" #: ../src/dialog.c:845 msgid "Download along track" msgstr "" #: ../src/dialog.c:851 msgid "Map type:" msgstr "マップタイプ:" #: ../src/dialog.c:856 msgid "Zoom level:" msgstr "ズームレベル:" #: ../src/dialog.c:896 #, c-format msgid "The map data is licensed: %s." msgstr "" #: ../src/dialog.c:899 #, c-format msgid "" "The data provided by '%s' are licensed under the following license: " "%s.\n" "Please, read the license before continuing." msgstr "" #: ../src/dialog.c:904 msgid "Open license" msgstr "" #: ../src/expedia.c:53 msgid "Expedia Street Maps" msgstr "" #: ../src/expedia.c:81 msgid "Invalid expedia altitude" msgstr "" #: ../src/expedia.c:112 #, c-format msgid "" "Couldn't open EXPEDIA image file (right after successful download! Please " "report and delete image file!): %s" msgstr "" #: ../src/expedia.c:125 #, c-format msgid "" "Couldn't save EXPEDIA image file (right after successful download! Please " "report and delete image file!): %s" msgstr "" #. * #. * See http://www.geonames.org/export/wikipedia-webservice.html#wikipediaBoundingBox #. #. Translators may wish to change this setting as appropriate to get Wikipedia articles in that language #: ../src/geonamessearch.c:46 msgid "en" msgstr "" #: ../src/geonamessearch.c:121 msgid "Search" msgstr "検索" #: ../src/geonamessearch.c:123 msgid "No entries found!" msgstr "" #. NB could allow columns to be shifted around by doing this after each new #. gtk_tree_view_column_set_reorderable ( column, TRUE ); #. However I don't think is that useful, so I haven't put it in #: ../src/geonamessearch.c:177 ../src/datasource_osm_my_traces.c:425 msgid "Name" msgstr "" #: ../src/geonamessearch.c:182 msgid "Feature" msgstr "" #: ../src/geonamessearch.c:187 ../src/datasource_osm_my_traces.c:440 msgid "Lat/Lon" msgstr "" #: ../src/geonamessearch.c:269 ../src/googlesearch.c:100 msgid "couldn't map temp file" msgstr "" #: ../src/globals.c:44 msgid "Degree format:" msgstr "" #: ../src/globals.c:48 msgid "Distance units:" msgstr "" #: ../src/globals.c:52 msgid "Speed units:" msgstr "" #: ../src/globals.c:56 msgid "Height units:" msgstr "" #: ../src/globals.c:60 msgid "Use large waypoint icons:" msgstr "" #: ../src/globals.c:64 msgid "Default latitude:" msgstr "" #: ../src/globals.c:67 msgid "Default longitude:" msgstr "" #: ../src/globals.c:73 msgid "Alphabetical" msgstr "" #: ../src/globals.c:73 ../src/datasource_osm_my_traces.c:435 msgid "Time" msgstr "" #: ../src/globals.c:76 msgid "KML File Export Units:" msgstr "" #: ../src/globals.c:77 msgid "GPX Track Order:" msgstr "" #: ../src/globals.c:82 msgid "Image Viewer:" msgstr "" #: ../src/globals.c:87 msgid "External GPX Program 1:" msgstr "" #: ../src/globals.c:88 msgid "External GPX Program 2:" msgstr "" #. Defaults for the options are setup here #: ../src/globals.c:96 msgid "General" msgstr "" #. New Tab #: ../src/globals.c:121 msgid "Export/External" msgstr "" #. Webtools #: ../src/google.c:36 msgid "Google" msgstr "" #: ../src/datasource_file.c:59 msgid "Import file with GPSBabel" msgstr "" #: ../src/datasource_file.c:60 msgid "Imported file" msgstr "" #. The file selector #: ../src/datasource_file.c:133 msgid "File:" msgstr "" #: ../src/datasource_file.c:134 msgid "File to import" msgstr "" #: ../src/datasource_file.c:141 msgid "All files" msgstr "" #. The file format selector #: ../src/datasource_file.c:148 msgid "File type:" msgstr "" #: ../src/datasource_file.c:193 #, c-format msgid "using babel args '%s' and file '%s'" msgstr "" #: ../src/datasource_gc.c:66 msgid "Download Geocaches" msgstr "" #: ../src/datasource_gc.c:67 msgid "Geocaching.com Caches" msgstr "" #: ../src/datasource_gc.c:84 msgid "geocaching.com username:" msgstr "" #: ../src/datasource_gc.c:85 msgid "geocaching.com password:" msgstr "" #: ../src/datasource_gc.c:126 #, c-format msgid "" "Can't find %s or %s in path! Check that you have installed it correctly." msgstr "" #: ../src/datasource_gc.c:188 msgid "Number geocaches:" msgstr "" #: ../src/datasource_gc.c:190 msgid "Centered around:" msgstr "" #: ../src/datasource_gc.c:226 msgid "Broken input - using some defaults" msgstr "" #: ../src/datasource_geotag.c:51 msgid "Create Waypoints from Geotagged Images" msgstr "" #: ../src/datasource_geotag.c:52 msgid "Geotagged Images" msgstr "" #: ../src/datasource_geotag.c:102 ../src/vikwindow.c:2314 #: ../src/vikwindow.c:2382 ../src/vikwindow.c:2824 msgid "All" msgstr "" #: ../src/datasource_geotag.c:107 ../src/vikwindow.c:2829 msgid "JPG" msgstr "" #: ../src/datasource_geotag.c:165 #, c-format msgid "Unable to create waypoint from %s" msgstr "" #: ../src/datasource_google.c:49 ../src/datasource_google.c:50 msgid "Google Directions" msgstr "" #: ../src/datasource_google.c:77 msgid "From:" msgstr "" #: ../src/datasource_google.c:79 msgid "To:" msgstr "" #: ../src/datasource_gps.c:57 msgid "Acquire from GPS" msgstr "" #: ../src/datasource_gps.c:58 msgid "Acquired from GPS" msgstr "" #: ../src/datasource_gps.c:221 #, c-format msgid "using cmdline '%s' and file '%s'\n" msgstr "" #: ../src/datasource_gps.c:297 ../src/vikgpslayer.c:884 #, c-format msgid "Downloading %d waypoint..." msgid_plural "Downloading %d waypoints..." msgstr[0] "" msgstr[1] "" #: ../src/datasource_gps.c:298 ../src/vikgpslayer.c:885 #, c-format msgid "Downloading %d trackpoint..." msgid_plural "Downloading %d trackpoints..." msgstr[0] "" msgstr[1] "" #: ../src/datasource_gps.c:303 ../src/vikgpslayer.c:890 #, c-format msgid "Downloading %d routepoint..." msgid_plural "Downloading %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/datasource_gps.c:325 ../src/datasource_gps.c:326 #: ../src/datasource_gps.c:327 #, c-format msgid "Downloaded %d out of %d %s..." msgstr "" #: ../src/datasource_gps.c:331 ../src/datasource_gps.c:332 #: ../src/datasource_gps.c:333 #, c-format msgid "Downloaded %d %s." msgstr "" #: ../src/datasource_gps.c:347 ../src/vikgpslayer.c:968 #, c-format msgid "GPS Device: %s" msgstr "" #: ../src/datasource_gps.c:370 ../src/vikgpslayer.c:1042 #: ../src/vikgpslayer.c:1110 msgid "Status: Working..." msgstr "" #: ../src/datasource_gps.c:469 ../src/vikgpslayer.c:150 msgid "GPS Protocol:" msgstr "" #. List now assigned at runtime #: ../src/datasource_gps.c:488 ../src/vikgpslayer.c:151 msgid "Serial Port:" msgstr "" #: ../src/datasource_gps.c:509 msgid "" "Turn Off After Transfer\n" "(Garmin/NAViLink Only)" msgstr "" #: ../src/datasource_gps.c:512 msgid "Tracks:" msgstr "" #: ../src/datasource_gps.c:516 msgid "Routes:" msgstr "" #: ../src/datasource_gps.c:520 msgid "Waypoints:" msgstr "" #: ../src/datasource_gps.c:594 ../src/vikgpslayer.c:1305 msgid "GPS device: N/A" msgstr "" #: ../src/datasource_osm.c:52 ../src/datasource_osm.c:53 msgid "OSM traces" msgstr "" #: ../src/datasource_osm.c:80 msgid "Page number:" msgstr "" #: ../src/datasource_osm_my_traces.c:63 ../src/datasource_osm_my_traces.c:64 msgid "OSM My Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:108 msgid "Username:" msgstr "" #: ../src/datasource_osm_my_traces.c:113 msgid "The email or username used to login to OSM" msgstr "" #: ../src/datasource_osm_my_traces.c:115 ../src/osm-traces.c:413 msgid "Password:" msgstr "パスワード:" #: ../src/datasource_osm_my_traces.c:120 msgid "The password used to login to OSM" msgstr "" #: ../src/datasource_osm_my_traces.c:430 msgid "Description" msgstr "" #: ../src/datasource_osm_my_traces.c:445 msgid "Privacy" msgstr "" #: ../src/datasource_osm_my_traces.c:452 msgid "Within Current View" msgstr "" #: ../src/datasource_osm_my_traces.c:518 msgid "GPS Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:520 msgid "None found!" msgstr "" #: ../src/datasource_osm_my_traces.c:629 msgid "My OSM Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:645 #, c-format msgid "Unable to get trace: %s" msgstr "" #: ../src/datasource_wikipedia.c:32 msgid "Create Waypoints from Wikipedia Articles" msgstr "" #: ../src/datasource_wikipedia.c:33 msgid "Wikipedia Waypoints" msgstr "" #: ../src/dem.c:65 ../src/dem.c:79 msgid "Invalid DEM" msgstr "" #: ../src/dem.c:121 msgid "Invalid DEM header" msgstr "" #: ../src/dem.c:190 ../src/dem.c:203 msgid "Incorrect DEM Class B record: expected 1" msgstr "" #: ../src/dem.c:360 #, c-format msgid "Couldn't map file %s: %s" msgstr "" #: ../src/download.c:112 msgid "Tile age (s):" msgstr "" #: ../src/download.c:233 #, c-format msgid "Download error: %s" msgstr "" #: ../src/download.c:313 msgid "couldn't open temp file" msgstr "" #: ../src/file.c:456 ../src/file.c:461 #, c-format msgid "Draw mode '%s' no more supported" msgstr "" #: ../src/geotag_exif.c:433 msgid "Not enough memory." msgstr "" #: ../src/geotag_exif.c:451 msgid "Setting a value for this tag is unsupported!" msgstr "" #: ../src/geotag_exif.c:470 #, c-format msgid "Too few components specified (need %d, found %d)\n" msgstr "" #: ../src/geotag_exif.c:474 msgid "Numeric value expected\n" msgstr "" #: ../src/geotag_exif.c:482 msgid "This shouldn't happen!" msgstr "" #: ../src/geotag_exif.c:552 msgid "Not yet implemented!" msgstr "" #: ../src/geotag_exif.c:565 msgid "Warning; Too many components specified!" msgstr "" #: ../src/osm-traces.c:73 msgid "Identifiable (public w/ timestamps)" msgstr "" #: ../src/osm-traces.c:74 msgid "Trackable (private w/ timestamps)" msgstr "" #: ../src/osm-traces.c:75 msgid "Public" msgstr "公開" #: ../src/osm-traces.c:76 msgid "Private" msgstr "" #: ../src/osm-traces.c:93 msgid "OSM username:" msgstr "" #: ../src/osm-traces.c:94 msgid "OSM password:" msgstr "" #. Preferences #: ../src/osm-traces.c:151 msgid "OpenStreetMap Traces" msgstr "" #: ../src/osm-traces.c:234 #, c-format msgid "failed to upload data: HTTP response is %ld" msgstr "" #: ../src/osm-traces.c:239 #, c-format msgid "curl_easy_getinfo failed: %d" msgstr "" #: ../src/osm-traces.c:244 #, c-format msgid "curl request failed: %s" msgstr "" #: ../src/osm-traces.c:275 #, c-format msgid "failed to open temporary file: %s" msgstr "" #. Success #: ../src/osm-traces.c:328 msgid "Uploaded to OSM" msgstr "" #: ../src/osm-traces.c:332 msgid "FAILED TO UPLOAD DATA TO OSM - CURL PROBLEM" msgstr "" #: ../src/osm-traces.c:335 msgid "FAILED TO UPLOAD DATA TO OSM" msgstr "" #: ../src/osm-traces.c:335 msgid "HTTP response code" msgstr "" #: ../src/osm-traces.c:348 #, c-format msgid "failed to unlink temporary file: %s" msgstr "" #: ../src/osm-traces.c:387 msgid "OSM upload" msgstr "" #: ../src/osm-traces.c:405 msgid "Email:" msgstr "Eメール:" #: ../src/osm-traces.c:410 msgid "" "The email used as login\n" "Enter the email you use to login into www.openstreetmap.org." msgstr "" #: ../src/osm-traces.c:418 msgid "" "The password used to login\n" "Enter the password you use to login into " "www.openstreetmap.org." msgstr "" #: ../src/osm-traces.c:423 msgid "File's name:" msgstr "" #: ../src/osm-traces.c:433 msgid "" "The name of the file on OSM\n" "This is the name of the file created on the server.This is not the " "name of the local file." msgstr "" #: ../src/osm-traces.c:442 msgid "The description of the trace" msgstr "" #: ../src/osm-traces.c:444 msgid "Tags:" msgstr "タグ:" #: ../src/osm-traces.c:449 msgid "The tags associated to the trace" msgstr "" #: ../src/osm-traces.c:482 #, c-format msgid "Uploading %s to OSM" msgstr "" #: ../src/mapcache.c:61 msgid "Map cache memory size (MB):" msgstr "" #: ../src/print.c:53 msgid "None" msgstr "なし" #: ../src/print.c:54 msgid "Horizontally" msgstr "水平方向" #: ../src/print.c:55 msgid "Vertically" msgstr "垂直方向" #: ../src/print.c:56 msgid "Both" msgstr "両方" #: ../src/print.c:120 msgid "Image Settings" msgstr "画像の設定" #: ../src/print.c:546 msgid "done" msgstr "完了" #. Page Size #: ../src/print.c:575 msgid "_Adjust Page Size and Orientation" msgstr "" #: ../src/print.c:591 msgid "C_enter:" msgstr "中央(_E):" #. ignore page margins #: ../src/print.c:609 msgid "Ignore Page _Margins" msgstr "" #: ../src/print.c:628 msgid "Image S_ize:" msgstr "" #: ../src/util.c:81 msgid "Could not launch web browser." msgstr "" #: ../src/util.c:92 msgid "Could not create new email." msgstr "" #: ../src/vikcoordlayer.c:46 msgid "Color:" msgstr "色:" #: ../src/vikcoordlayer.c:47 msgid "Minutes Width:" msgstr "" #: ../src/vikcoordlayer.c:48 msgid "Line Thickness:" msgstr "" #: ../src/vikcoordlayer.c:56 msgid "Coordinate" msgstr "" #: ../src/datasource_bfilter.c:46 msgid "Max number of points:" msgstr "" #: ../src/datasource_bfilter.c:60 msgid "Simplify All Tracks..." msgstr "" #: ../src/datasource_bfilter.c:61 msgid "Simplified Tracks" msgstr "" #: ../src/datasource_bfilter.c:96 ../src/datasource_bfilter.c:97 msgid "Remove Duplicate Waypoints" msgstr "" #: ../src/datasource_bfilter.c:129 msgid "Waypoints Inside This" msgstr "" #: ../src/datasource_bfilter.c:130 msgid "Polygonized Layer" msgstr "" #: ../src/datasource_bfilter.c:165 msgid "Waypoints Outside This" msgstr "" #: ../src/datasource_bfilter.c:166 msgid "Polygonzied Layer" msgstr "" #: ../src/main.c:89 #, c-format msgid "Ignoring Xlib error: error code %d request code %d\n" msgstr "" #: ../src/main.c:102 msgid "Enable debug output" msgstr "" #: ../src/main.c:103 msgid "Enable verbose output" msgstr "" #: ../src/main.c:104 msgid "Show version" msgstr "" #: ../src/osm.c:106 msgid "On Disk OSM Tile Format" msgstr "" #: ../src/osm.c:121 msgid "OSM (view)" msgstr "" #: ../src/osm.c:125 msgid "OSM (edit)" msgstr "" #: ../src/osm.c:129 msgid "OSM (render)" msgstr "" #. Example: http://127.0.0.1:8111/load_and_zoom?left=8.19&right=8.20&top=48.605&bottom=48.590&select=node413602999 #. JOSM or merkaartor must already be running with remote interface enabled #: ../src/osm.c:136 msgid "Local port 8111 (eg JOSM)" msgstr "" #: ../src/preferences.c:285 msgid "Preferences" msgstr "" #: ../src/uibuilder.c:147 msgid "Take care that this password will be stored clearly in a plain file." msgstr "" #: ../src/vikaggregatelayer.c:37 msgid "Aggregate" msgstr "" #: ../src/vikdemlayer.c:101 msgid "Absolute height" msgstr "" #: ../src/vikdemlayer.c:102 msgid "Height gradient" msgstr "" #: ../src/vikdemlayer.c:118 msgid "DEM Files:" msgstr "" #: ../src/vikdemlayer.c:119 msgid "Download Source:" msgstr "" #: ../src/vikdemlayer.c:120 msgid "Min Elev Color:" msgstr "" #: ../src/vikdemlayer.c:121 msgid "Type:" msgstr "" #: ../src/vikdemlayer.c:122 msgid "Min Elev:" msgstr "" #: ../src/vikdemlayer.c:123 msgid "Max Elev:" msgstr "" #: ../src/vikdemlayer.c:134 msgid "_DEM Download" msgstr "" #: ../src/vikdemlayer.c:134 msgid "DEM Download" msgstr "" #: ../src/vikdemlayer.c:188 msgid "DEM" msgstr "" #: ../src/vikdemlayer.c:284 #, c-format msgid "Number of files: %d" msgstr "" #: ../src/vikdemlayer.c:385 msgid "DEM Loading" msgstr "" #: ../src/vikdemlayer.c:889 #, c-format msgid "No SRTM data available for %f, %f" msgstr "" #: ../src/vikdemlayer.c:1149 #, c-format msgid "Downloading DEM %s" msgstr "" #: ../src/vikfileentry.c:68 msgid "Browse..." msgstr "" #: ../src/vikfileentry.c:96 msgid "Choose file" msgstr "" #: ../src/vikfilelist.c:48 msgid "Choose file(s)" msgstr "" #: ../src/vikfilelist.c:172 msgid "Add..." msgstr "" #: ../src/vikfilelist.c:173 msgid "Delete" msgstr "" #: ../src/vikgeoreflayer.c:70 msgid "_Georef Move Map" msgstr "" #: ../src/vikgeoreflayer.c:70 msgid "Georef Move Map" msgstr "" #: ../src/vikgeoreflayer.c:77 msgid "Georef Z_oom Tool" msgstr "" #: ../src/vikgeoreflayer.c:77 msgid "Georef Zoom Tool" msgstr "" #: ../src/vikgeoreflayer.c:87 msgid "GeoRef Map" msgstr "" #: ../src/vikgeoreflayer.c:335 ../src/vikmapslayer.c:685 #, c-format msgid "Couldn't open image file: %s" msgstr "" #: ../src/vikgeoreflayer.c:365 msgid "Unexpected end of file reading World file." msgstr "" #: ../src/vikgeoreflayer.c:381 ../src/vikgeoreflayer.c:426 msgid "Choose World file" msgstr "" #: ../src/vikgeoreflayer.c:394 msgid "The World file you requested could not be opened for reading." msgstr "" #: ../src/vikgeoreflayer.c:439 msgid "The file you requested could not be opened for writing." msgstr "" #: ../src/vikgeoreflayer.c:456 ../src/viklayer.c:480 msgid "Layer Properties" msgstr "" #: ../src/vikgeoreflayer.c:478 msgid "World File Parameters:" msgstr "" #: ../src/vikgeoreflayer.c:479 msgid "Load From File..." msgstr "" #: ../src/vikgeoreflayer.c:484 msgid "Corner pixel easting:" msgstr "" #: ../src/vikgeoreflayer.c:486 msgid "the UTM \"easting\" value of the upper-right corner pixel of the map" msgstr "" #: ../src/vikgeoreflayer.c:488 msgid "Corner pixel northing:" msgstr "" #: ../src/vikgeoreflayer.c:490 msgid "the UTM \"northing\" value of the upper-right corner pixel of the map" msgstr "" #: ../src/vikgeoreflayer.c:492 msgid "X (easting) scale (mpp): " msgstr "" #: ../src/vikgeoreflayer.c:493 msgid "Y (northing) scale (mpp): " msgstr "" #: ../src/vikgeoreflayer.c:496 msgid "the scale of the map in the X direction (meters per pixel)" msgstr "" #: ../src/vikgeoreflayer.c:498 msgid "the scale of the map in the Y direction (meters per pixel)" msgstr "" #: ../src/vikgeoreflayer.c:500 msgid "Map Image:" msgstr "" #. Now with icons #: ../src/vikgeoreflayer.c:608 msgid "_Zoom to Fit Map" msgstr "" #: ../src/vikgeoreflayer.c:614 msgid "_Goto Map Center" msgstr "" #: ../src/vikgeoreflayer.c:620 msgid "_Export to World File" msgstr "" #: ../src/vikgoto.c:75 msgid "No goto tool available." msgstr "" #: ../src/vikgoto.c:88 ../src/vikgoto.c:107 msgid "goto" msgstr "" #: ../src/vikgoto.c:90 msgid "I don't know that place. Do you want another goto?" msgstr "" #: ../src/vikgoto.c:109 msgid "goto provider:" msgstr "" #: ../src/vikgoto.c:124 msgid "Enter address or place name:" msgstr "" #: ../src/vikgpslayer.c:127 msgid "Data Mode" msgstr "" #: ../src/vikgpslayer.c:129 msgid "Realtime Tracking Mode" msgstr "" #: ../src/vikgpslayer.c:137 msgid "Keep vehicle at center" msgstr "" #: ../src/vikgpslayer.c:138 msgid "Keep vehicle on screen" msgstr "" #: ../src/vikgpslayer.c:139 msgid "Disable" msgstr "" #: ../src/vikgpslayer.c:152 msgid "Download Tracks:" msgstr "" #: ../src/vikgpslayer.c:153 msgid "Upload Tracks:" msgstr "" #: ../src/vikgpslayer.c:154 msgid "Download Routes:" msgstr "" #: ../src/vikgpslayer.c:155 msgid "Upload Routes:" msgstr "" #: ../src/vikgpslayer.c:156 msgid "Download Waypoints:" msgstr "" #: ../src/vikgpslayer.c:157 msgid "Upload Waypoints:" msgstr "" #: ../src/vikgpslayer.c:159 msgid "Recording tracks" msgstr "" #: ../src/vikgpslayer.c:160 msgid "Jump to current position on start" msgstr "" #: ../src/vikgpslayer.c:161 msgid "Moving Map Method:" msgstr "" #: ../src/vikgpslayer.c:162 msgid "Gpsd Host:" msgstr "" #: ../src/vikgpslayer.c:163 msgid "Gpsd Port:" msgstr "" #: ../src/vikgpslayer.c:164 msgid "Gpsd Retry Interval (seconds):" msgstr "" #: ../src/vikgpslayer.c:179 msgid "GPS" msgstr "" #: ../src/vikgpslayer.c:242 ../src/vikgpslayer.c:1258 msgid "GPS Download" msgstr "" #: ../src/vikgpslayer.c:242 ../src/vikgpslayer.c:1258 #: ../src/viktrwlayer.c:3094 msgid "GPS Upload" msgstr "" #: ../src/vikgpslayer.c:244 msgid "GPS Realtime Tracking" msgstr "" #: ../src/vikgpslayer.c:451 msgid "Unknown GPS Protocol" msgstr "" #: ../src/vikgpslayer.c:469 msgid "Unknown serial port device" msgstr "" #: ../src/vikgpslayer.c:572 #, c-format msgid "%s: unknown parameter" msgstr "" #. Now with icons #: ../src/vikgpslayer.c:693 msgid "_Upload to GPS" msgstr "" #: ../src/vikgpslayer.c:699 msgid "Download from _GPS" msgstr "" #: ../src/vikgpslayer.c:720 msgid "Empty _Realtime" msgstr "" #: ../src/vikgpslayer.c:727 msgid "E_mpty Upload" msgstr "" #: ../src/vikgpslayer.c:733 msgid "_Empty Download" msgstr "" #: ../src/vikgpslayer.c:739 msgid "Empty _All" msgstr "" #. #. NB It's not fatal if this gives 2 for example! Hence removal of the g_assert #. This happens when copied GPS layer is deleted (not sure why the number_handlers would be 2) #. I don't think there's any side effects and certainly better than the program just aborting #. #: ../src/vikgpslayer.c:756 #, c-format msgid "Unexpected number of disconnected handlers: %d" msgstr "" #: ../src/vikgpslayer.c:898 #, c-format msgid "Uploading %d waypoint..." msgid_plural "Uploading %d waypoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:899 #, c-format msgid "Uploading %d trackpoint..." msgid_plural "Uploading %d trackpoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:900 #, c-format msgid "Uploading %d routepoint..." msgid_plural "Uploading %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:925 #, c-format msgid "Downloaded %d out of %d waypoint..." msgid_plural "Downloaded %d out of %d waypoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:926 #, c-format msgid "Downloaded %d out of %d trackpoint..." msgid_plural "Downloaded %d out of %d trackpoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:927 #, c-format msgid "Downloaded %d out of %d routepoint..." msgid_plural "Downloaded %d out of %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:932 #, c-format msgid "Uploaded %d out of %d waypoint..." msgid_plural "Uploaded %d out of %d waypoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:933 #, c-format msgid "Uploaded %d out of %d trackpoint..." msgid_plural "Uploaded %d out of %d trackpoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:934 #, c-format msgid "Uploaded %d out of %d routepoint..." msgid_plural "Uploaded %d out of %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:942 #, c-format msgid "Downloaded %d waypoint" msgid_plural "Downloaded %d waypoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:943 #, c-format msgid "Downloaded %d trackpoint" msgid_plural "Downloaded %d trackpoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:944 #, c-format msgid "Downloaded %d routepoint" msgid_plural "Downloaded %d routepoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:949 #, c-format msgid "Uploaded %d waypoint" msgid_plural "Uploaded %d waypoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:950 #, c-format msgid "Uploaded %d trackpoint" msgid_plural "Uploaded %d trackpoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:951 #, c-format msgid "Uploaded %d routepoint" msgid_plural "Uploaded %d routepoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:1180 msgid "Error: couldn't find gpsbabel." msgstr "エラー: gpsbabelを見つけることができませんでした。" #: ../src/vikgpslayer.c:1269 msgid "Warning - GPS Upload items may overwrite each other" msgstr "" #: ../src/vikgpslayer.c:1301 msgid "Status: detecting gpsbabel" msgstr "状態: gpsbableを探しています" #: ../src/vikgpslayer.c:1332 msgid "No GPS items selected for transfer." msgstr "" #: ../src/vikgpslayer.c:1347 msgid "Could not turn off device." msgstr "" #: ../src/vikgpslayer.c:1385 msgid "Are you sure you want to delete GPS Upload data?" msgstr "" #: ../src/vikgpslayer.c:1398 msgid "Are you sure you want to delete GPS Download data?" msgstr "" #: ../src/vikgpslayer.c:1412 msgid "Are you sure you want to delete GPS Realtime data?" msgstr "" #: ../src/vikgpslayer.c:1425 msgid "Are you sure you want to delete All GPS data?" msgstr "" #: ../src/viklayerspanel.c:55 msgid "/C_ut" msgstr "" #: ../src/viklayerspanel.c:56 msgid "/_Copy" msgstr "" #: ../src/viklayerspanel.c:57 msgid "/_Paste" msgstr "" #: ../src/viklayerspanel.c:58 msgid "/_Delete" msgstr "" #: ../src/viklayerspanel.c:59 msgid "/New Layer" msgstr "" #: ../src/viklayerspanel.c:127 msgid "Top Layer" msgstr "" #: ../src/viklayerspanel.c:143 msgid "Add new layer" msgstr "" #: ../src/viklayerspanel.c:150 msgid "Remove selected layer" msgstr "" #: ../src/viklayerspanel.c:157 msgid "Move selected layer up" msgstr "" #: ../src/viklayerspanel.c:164 msgid "Move selected layer down" msgstr "" #: ../src/viklayerspanel.c:171 msgid "Cut selected layer" msgstr "" #: ../src/viklayerspanel.c:178 msgid "Copy selected layer" msgstr "" #: ../src/viklayerspanel.c:185 msgid "Paste layer below selected layer" msgstr "" #. TODO: FIXME: if name has a '/' in it it will get all messed up. why not have an itemfactory field with #. name, icon, shortcut, etc.? #: ../src/viklayerspanel.c:204 ../src/vikwindow.c:3292 #, c-format msgid "New _%s Layer" msgstr "" #: ../src/viklayerspanel.c:511 msgid "Aggregate Layers have no settable properties." msgstr "" #: ../src/viklayerspanel.c:555 msgid "You cannot cut the Top Layer." msgstr "" #: ../src/viklayerspanel.c:600 #, c-format msgid "Are you sure you want to delete %s?" msgstr "" #: ../src/viklayerspanel.c:617 msgid "You cannot delete the Top Layer." msgstr "" #: ../src/viklayerspanel.c:701 msgid "Are you sure you wish to delete all layers?" msgstr "" #. ******* MAPZOOMS ******** #: ../src/vikmapslayer.c:91 msgid "Use Viking Zoom Level" msgstr "" #: ../src/vikmapslayer.c:124 msgid "Map Type:" msgstr "" #: ../src/vikmapslayer.c:125 msgid "Maps Directory:" msgstr "" #: ../src/vikmapslayer.c:126 msgid "Alpha:" msgstr "" #: ../src/vikmapslayer.c:127 msgid "Control the Alpha value for transparency effects" msgstr "" #: ../src/vikmapslayer.c:128 msgid "Autodownload maps:" msgstr "" #: ../src/vikmapslayer.c:129 msgid "Autodownload Only Gets Missing Maps:" msgstr "" #: ../src/vikmapslayer.c:130 msgid "" "Using this option avoids attempting to update already acquired tiles. This " "can be useful if you want to restrict the network usage, without having to " "resort to manual control. Only applies when 'Autodownload Maps' is on." msgstr "" #: ../src/vikmapslayer.c:131 msgid "Zoom Level:" msgstr "" #: ../src/vikmapslayer.c:132 msgid "" "Determines the method of displaying map tiles for the current zoom level. " "'Viking Zoom Level' uses the best matching level, otherwise setting a fixed " "value will always use map tiles of the specified value regardless of the " "actual zoom level." msgstr "" #: ../src/vikmapslayer.c:146 msgid "_Maps Download" msgstr "" #: ../src/vikmapslayer.c:146 msgid "Maps Download" msgstr "" #: ../src/vikmapslayer.c:161 msgid "Map" msgstr "" #: ../src/vikmapslayer.c:249 msgid "Default maplayer directory:" msgstr "" #: ../src/vikmapslayer.c:249 msgid "Choose a directory to store cached Map tiles for this layer" msgstr "" #: ../src/vikmapslayer.c:505 msgid "Unknown map type" msgstr "" #: ../src/vikmapslayer.c:516 msgid "Unknown Map Zoom" msgstr "" #: ../src/vikmapslayer.c:589 #, c-format msgid "" "New map cannot be displayed in the current drawmode.\n" "Select \"%s\" from View menu to view it." msgstr "" #: ../src/vikmapslayer.c:753 #, c-format msgid "" "Cowardly refusing to draw tiles or existence of tiles beyond %d zoom out " "factor" msgstr "" #: ../src/vikmapslayer.c:1157 #, c-format msgid "Redownloading up to %d %s map..." msgid_plural "Redownloading up to %d %s maps..." msgstr[0] "" msgstr[1] "" #: ../src/vikmapslayer.c:1159 #, c-format msgid "Redownloading %d %s map..." msgid_plural "Redownloading %d %s maps..." msgstr[0] "" msgstr[1] "" #: ../src/vikmapslayer.c:1163 ../src/vikmapslayer.c:1238 #, c-format msgid "Downloading %d %s map..." msgid_plural "Downloading %d %s maps..." msgstr[0] "" msgstr[1] "" #: ../src/vikmapslayer.c:1311 #, c-format msgid "" "\n" "Source: %s\n" "\n" "Tile File: %s\n" "Tile File Timestamp: %s" msgstr "" #: ../src/vikmapslayer.c:1318 #, c-format msgid "" "Source: %s\n" "\n" "No Tile File!" msgstr "" #: ../src/vikmapslayer.c:1356 msgid "Redownload _Bad Map(s)" msgstr "" #: ../src/vikmapslayer.c:1360 msgid "Redownload _New Map(s)" msgstr "" #: ../src/vikmapslayer.c:1364 msgid "Redownload _All Map(s)" msgstr "" #: ../src/vikmapslayer.c:1368 msgid "_Show Tile Information" msgstr "" #: ../src/vikmapslayer.c:1449 #, c-format msgid "" "Wrong drawmode for this map.\n" "Select \"%s\" from View menu and try again." msgstr "" #: ../src/vikmapslayer.c:1454 msgid "Wrong zoom level for this map." msgstr "" #. Now with icons #: ../src/vikmapslayer.c:1485 msgid "Download _Missing Onscreen Maps" msgstr "" #: ../src/vikmapslayer.c:1492 msgid "Download _New Onscreen Maps" msgstr "" #: ../src/vikmapslayer.c:1499 msgid "Reload _All Onscreen Maps" msgstr "" #: ../src/viktreeview.c:263 msgid "Layer Name" msgstr "" #: ../src/viktreeview.c:742 #, c-format msgid "delete data from %s\n" msgstr "" #: ../src/viktrwlayer.c:377 msgid "Create _Waypoint" msgstr "" #: ../src/viktrwlayer.c:377 msgid "Create Waypoint" msgstr "" #: ../src/viktrwlayer.c:383 msgid "Create _Track" msgstr "" #: ../src/viktrwlayer.c:383 msgid "Create Track" msgstr "" #: ../src/viktrwlayer.c:392 msgid "Create _Route" msgstr "" #: ../src/viktrwlayer.c:392 msgid "Create Route" msgstr "" #: ../src/viktrwlayer.c:401 msgid "_Edit Waypoint" msgstr "" #: ../src/viktrwlayer.c:401 msgid "Edit Waypoint" msgstr "" #: ../src/viktrwlayer.c:409 msgid "Edit Trac_kpoint" msgstr "" #: ../src/viktrwlayer.c:409 msgid "Edit Trackpoint" msgstr "" #: ../src/viktrwlayer.c:417 msgid "Show P_icture" msgstr "" #: ../src/viktrwlayer.c:417 msgid "Show Picture" msgstr "" #: ../src/viktrwlayer.c:424 msgid "Route _Finder" msgstr "" #: ../src/viktrwlayer.c:424 msgid "Route Finder" msgstr "" #. ***** PARAMETERS ***** #: ../src/viktrwlayer.c:447 ../src/viktrwlayer.c:1942 #: ../src/viktrwlayer.c:1944 msgid "Waypoints" msgstr "" #: ../src/viktrwlayer.c:447 ../src/viktrwlayer.c:1933 #: ../src/viktrwlayer.c:1935 msgid "Tracks" msgstr "" #: ../src/viktrwlayer.c:447 msgid "Waypoint Images" msgstr "" #: ../src/viktrwlayer.c:450 msgid "Draw by Track" msgstr "" #: ../src/viktrwlayer.c:450 msgid "Draw by Speed" msgstr "" #: ../src/viktrwlayer.c:450 msgid "All Tracks Same Color" msgstr "" #: ../src/viktrwlayer.c:451 msgid "Filled Square" msgstr "" #: ../src/viktrwlayer.c:451 msgid "Square" msgstr "" #: ../src/viktrwlayer.c:451 msgid "Circle" msgstr "" #: ../src/viktrwlayer.c:451 msgid "X" msgstr "" #: ../src/viktrwlayer.c:477 msgid "Extra Extra Small" msgstr "" #: ../src/viktrwlayer.c:478 msgid "Extra Small" msgstr "" #: ../src/viktrwlayer.c:479 msgid "Small" msgstr "" #: ../src/viktrwlayer.c:480 msgid "Medium" msgstr "" #: ../src/viktrwlayer.c:481 msgid "Large" msgstr "" #: ../src/viktrwlayer.c:482 msgid "Extra Large" msgstr "" #: ../src/viktrwlayer.c:483 msgid "Extra Extra Large" msgstr "" #: ../src/viktrwlayer.c:491 msgid "Track Drawing Mode:" msgstr "" #: ../src/viktrwlayer.c:492 msgid "All Tracks Color:" msgstr "" #: ../src/viktrwlayer.c:493 msgid "The color used when 'All Tracks Same Color' drawing mode is selected" msgstr "" #: ../src/viktrwlayer.c:494 msgid "Draw Track Lines" msgstr "" #: ../src/viktrwlayer.c:495 msgid "Track Thickness:" msgstr "" #: ../src/viktrwlayer.c:496 msgid "Draw Track Direction" msgstr "" #: ../src/viktrwlayer.c:497 msgid "Direction Size:" msgstr "" #: ../src/viktrwlayer.c:498 msgid "Draw Trackpoints" msgstr "" #: ../src/viktrwlayer.c:499 msgid "Trackpoint Size:" msgstr "" #: ../src/viktrwlayer.c:500 msgid "Draw Elevation" msgstr "" #: ../src/viktrwlayer.c:501 msgid "Draw Elevation Height %:" msgstr "" #: ../src/viktrwlayer.c:503 msgid "Draw Stops" msgstr "" #: ../src/viktrwlayer.c:504 msgid "" "Whether to draw a marker when trackpoints are at the same position but over " "the minimum stop length apart in time" msgstr "" #: ../src/viktrwlayer.c:505 msgid "Min Stop Length (seconds):" msgstr "" #: ../src/viktrwlayer.c:507 msgid "Track BG Thickness:" msgstr "" #: ../src/viktrwlayer.c:508 msgid "Track Background Color" msgstr "" #: ../src/viktrwlayer.c:509 msgid "Draw by Speed Factor (%):" msgstr "" #: ../src/viktrwlayer.c:510 msgid "" "The percentage factor away from the average speed determining the color used" msgstr "" #: ../src/viktrwlayer.c:512 msgid "Draw Labels" msgstr "" #: ../src/viktrwlayer.c:513 msgid "Waypoint Font Size:" msgstr "" #: ../src/viktrwlayer.c:514 msgid "Waypoint Color:" msgstr "" #: ../src/viktrwlayer.c:515 msgid "Waypoint Text:" msgstr "" #: ../src/viktrwlayer.c:516 msgid "Background:" msgstr "" #: ../src/viktrwlayer.c:517 msgid "Fake BG Color Translucency:" msgstr "" #: ../src/viktrwlayer.c:518 msgid "Waypoint marker:" msgstr "" #: ../src/viktrwlayer.c:519 msgid "Waypoint size:" msgstr "" #: ../src/viktrwlayer.c:520 msgid "Draw Waypoint Symbols:" msgstr "" #: ../src/viktrwlayer.c:522 msgid "Draw Waypoint Images" msgstr "" #: ../src/viktrwlayer.c:523 msgid "Image Size (pixels):" msgstr "" #: ../src/viktrwlayer.c:524 msgid "Image Alpha:" msgstr "" #: ../src/viktrwlayer.c:525 msgid "Image Memory Cache Size:" msgstr "" #: ../src/viktrwlayer.c:610 msgid "TrackWaypoint" msgstr "" #: ../src/viktrwlayer.c:1951 ../src/viktrwlayer.c:1953 msgid "Routes" msgstr "" #: ../src/viktrwlayer.c:2144 #, c-format msgid " in %d:%02d hrs:mins" msgstr "" #: ../src/viktrwlayer.c:2148 #, c-format msgid "" "\n" "%sTotal Length %.1f %s%s" msgstr "" #: ../src/viktrwlayer.c:2154 #, c-format msgid "Tracks: %d - Waypoints: %d - Routes: %d%s" msgstr "" #: ../src/viktrwlayer.c:2174 #, c-format msgid "Tracks: %d" msgstr "" #: ../src/viktrwlayer.c:2184 #, c-format msgid "Routes: %d" msgstr "" #: ../src/viktrwlayer.c:2215 #, c-format msgid "- %d:%02d hrs:mins" msgstr "" #: ../src/viktrwlayer.c:2223 #, c-format msgid "%s%.1f km %s" msgstr "" #: ../src/viktrwlayer.c:2226 #, c-format msgid "%s%.1f miles %s" msgstr "" #: ../src/viktrwlayer.c:2240 #, c-format msgid "Waypoints: %d" msgstr "" #: ../src/viktrwlayer.c:2266 #, c-format msgid "Trkpt: Alt %dft" msgstr "" #. VIK_UNITS_HEIGHT_METRES: #: ../src/viktrwlayer.c:2270 #, c-format msgid "Trkpt: Alt %dm" msgstr "" #. Compact date time format #: ../src/viktrwlayer.c:2277 #, c-format msgid " | Time %x %X" msgstr "" #: ../src/viktrwlayer.c:2295 #, c-format msgid " | Track: %s" msgstr "" #. Combine parts to make overall message #: ../src/viktrwlayer.c:2299 #, c-format msgid "%s%s | %s %s %s" msgstr "" #: ../src/viktrwlayer.c:2314 #, c-format msgid "Wpt: Alt %dft" msgstr "" #. VIK_UNITS_HEIGHT_METRES: #: ../src/viktrwlayer.c:2318 #, c-format msgid "Wpt: Alt %dm" msgstr "" #. Add comment if available #: ../src/viktrwlayer.c:2333 #, c-format msgid "%s | %s %s | Comment: %s" msgstr "" #: ../src/viktrwlayer.c:2335 #, c-format msgid "%s | %s %s" msgstr "" #: ../src/viktrwlayer.c:2563 ../src/viktrwlayer.c:2634 msgid "This layer has no waypoints or trackpoints." msgstr "" #: ../src/viktrwlayer.c:2661 ../src/vikwindow.c:2407 ../src/vikwindow.c:2848 #, c-format msgid "The file \"%s\" exists, do you wish to overwrite it?" msgstr "" #: ../src/viktrwlayer.c:2671 ../src/vikwindow.c:2429 msgid "The filename you requested could not be opened for writing." msgstr "" #: ../src/viktrwlayer.c:2676 ../src/viktrwlayer.c:2681 #: ../src/viktrwlayer.c:2691 ../src/viktrwlayer.c:2703 msgid "Export Layer" msgstr "" #: ../src/viktrwlayer.c:2720 msgid "Could not create temporary file for export." msgstr "" #: ../src/viktrwlayer.c:2729 #, c-format msgid "Could not launch %s." msgstr "" #: ../src/viktrwlayer.c:2773 msgid "Export Track as GPX" msgstr "" #: ../src/viktrwlayer.c:2795 msgid "Find" msgstr "" #: ../src/viktrwlayer.c:2805 msgid "Waypoint Name:" msgstr "" #: ../src/viktrwlayer.c:2822 msgid "Waypoint not found in this layer." msgstr "" #: ../src/viktrwlayer.c:3090 msgid "Can not upload invisible track." msgstr "" #: ../src/viktrwlayer.c:3192 ../src/viktrwlayer.c:7785 msgid "Track" msgstr "" #: ../src/viktrwlayer.c:3215 ../src/viktrwlayer.c:7817 msgid "Route" msgstr "" #: ../src/viktrwlayer.c:3296 ../src/viktrwlayer.c:6265 #: ../src/viktrwlayer.c:6314 msgid "_Finish Route" msgstr "" #: ../src/viktrwlayer.c:3298 ../src/viktrwlayer.c:6223 #: ../src/viktrwlayer.c:6312 msgid "_Finish Track" msgstr "" #. Now with icons #: ../src/viktrwlayer.c:3310 msgid "_View Layer" msgstr "" #: ../src/viktrwlayer.c:3317 msgid "V_iew" msgstr "" #: ../src/viktrwlayer.c:3323 msgid "View All _Tracks" msgstr "" #: ../src/viktrwlayer.c:3328 msgid "View All _Routes" msgstr "" #: ../src/viktrwlayer.c:3333 msgid "View All _Waypoints" msgstr "" #: ../src/viktrwlayer.c:3338 msgid "_Goto Center of Layer" msgstr "" #: ../src/viktrwlayer.c:3344 ../src/viktrwlayer.c:6199 msgid "Goto _Waypoint..." msgstr "" #: ../src/viktrwlayer.c:3350 msgid "_Export Layer" msgstr "" #: ../src/viktrwlayer.c:3356 msgid "Export as GPS_Point..." msgstr "" #: ../src/viktrwlayer.c:3361 msgid "Export as GPS_Mapper..." msgstr "" #: ../src/viktrwlayer.c:3366 msgid "Export as _GPX..." msgstr "" #: ../src/viktrwlayer.c:3371 msgid "Export as _KML..." msgstr "" #: ../src/viktrwlayer.c:3376 msgid "Open with External Program_1: " msgstr "" #: ../src/viktrwlayer.c:3383 msgid "Open with External Program_2: " msgstr "" #: ../src/viktrwlayer.c:3391 ../src/vikwindow.c:3145 msgid "_New" msgstr "" #: ../src/viktrwlayer.c:3397 msgid "New _Waypoint..." msgstr "" #: ../src/viktrwlayer.c:3403 msgid "New _Track" msgstr "" #: ../src/viktrwlayer.c:3411 msgid "New _Route" msgstr "" #: ../src/viktrwlayer.c:3420 ../src/viktrwlayer.c:6597 msgid "Geotag _Images..." msgstr "" #: ../src/viktrwlayer.c:3427 msgid "_Acquire" msgstr "" #: ../src/viktrwlayer.c:3433 ../src/vikwindow.c:3150 msgid "From _GPS..." msgstr "" #: ../src/viktrwlayer.c:3439 msgid "From Google _Directions..." msgstr "" #: ../src/viktrwlayer.c:3446 msgid "From _OSM Traces..." msgstr "" #: ../src/viktrwlayer.c:3451 msgid "From _My OSM Traces..." msgstr "" #: ../src/viktrwlayer.c:3459 ../src/vikwindow.c:3166 msgid "From _Wikipedia Waypoints" msgstr "" #: ../src/viktrwlayer.c:3465 msgid "Within _Layer Bounds" msgstr "" #: ../src/viktrwlayer.c:3471 msgid "Within _Current View" msgstr "" #: ../src/viktrwlayer.c:3479 msgid "From Geo_caching..." msgstr "" #: ../src/viktrwlayer.c:3486 ../src/vikwindow.c:3163 msgid "From Geotagged _Images..." msgstr "" #: ../src/viktrwlayer.c:3492 msgid "From _File..." msgstr "" #: ../src/viktrwlayer.c:3498 ../src/viktrwlayer.c:6542 msgid "_Upload" msgstr "" #: ../src/viktrwlayer.c:3504 msgid "Upload to _GPS..." msgstr "" #: ../src/viktrwlayer.c:3511 ../src/viktrwlayer.c:6570 msgid "Upload to _OSM..." msgstr "" #: ../src/viktrwlayer.c:3519 msgid "De_lete" msgstr "" #: ../src/viktrwlayer.c:3525 msgid "Delete All _Tracks" msgstr "" #: ../src/viktrwlayer.c:3531 msgid "Delete Tracks _From Selection..." msgstr "" #: ../src/viktrwlayer.c:3537 ../src/viktrwlayer.c:6290 msgid "Delete _All Routes" msgstr "" #: ../src/viktrwlayer.c:3543 ../src/viktrwlayer.c:6296 msgid "_Delete Routes From Selection..." msgstr "" #: ../src/viktrwlayer.c:3549 msgid "Delete All _Waypoints" msgstr "" #: ../src/viktrwlayer.c:3555 msgid "Delete Waypoints From _Selection..." msgstr "" #: ../src/viktrwlayer.c:4128 #, c-format msgid "Are you sure you want to delete all tracks in %s?" msgstr "" #: ../src/viktrwlayer.c:4138 #, c-format msgid "Are you sure you want to delete all routes in %s?" msgstr "" #: ../src/viktrwlayer.c:4148 #, c-format msgid "Are you sure you want to delete all waypoints in %s?" msgstr "" #: ../src/viktrwlayer.c:4165 #, c-format msgid "Are you sure you want to delete the waypoint \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4178 #, c-format msgid "Are you sure you want to delete the track \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4191 #, c-format msgid "Are you sure you want to delete the route \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4351 ../src/viktrwlayer.c:4922 msgid "" "Converting a track to a route removes extra track data such as segments, " "timestamps, etc...\n" "Do you want to continue?" msgstr "" #: ../src/viktrwlayer.c:4711 msgid "Failed. No other tracks with timestamps in this layer found" msgstr "" #: ../src/viktrwlayer.c:4713 msgid "Failed. No other tracks without timestamps in this layer found" msgstr "" #: ../src/viktrwlayer.c:4732 msgid "Merge with..." msgstr "" #: ../src/viktrwlayer.c:4733 msgid "Select route to merge with" msgstr "" #: ../src/viktrwlayer.c:4733 msgid "Select track to merge with" msgstr "" #: ../src/viktrwlayer.c:4818 ../src/viktrwlayer.c:4895 msgid "Append Route" msgstr "" #: ../src/viktrwlayer.c:4818 ../src/viktrwlayer.c:4895 msgid "Append Track" msgstr "" #: ../src/viktrwlayer.c:4819 msgid "Select the route to append after the current route" msgstr "" #: ../src/viktrwlayer.c:4820 msgid "Select the track to append after the current track" msgstr "" #: ../src/viktrwlayer.c:4896 msgid "Select the track to append after the current route" msgstr "" #: ../src/viktrwlayer.c:4897 msgid "Select the route to append after the current track" msgstr "" #: ../src/viktrwlayer.c:4957 #, c-format msgid "%d segment merged" msgid_plural "%d segments merged" msgstr[0] "" msgstr[1] "" #: ../src/viktrwlayer.c:4973 msgid "Failed. This track does not have timestamp" msgstr "" #: ../src/viktrwlayer.c:4985 msgid "Failed. No other track in this layer has timestamp" msgstr "" #: ../src/viktrwlayer.c:4992 msgid "Merge Threshold..." msgstr "" #: ../src/viktrwlayer.c:4993 msgid "Merge when time between tracks less than:" msgstr "" #: ../src/viktrwlayer.c:5128 msgid "Split Threshold..." msgstr "" #: ../src/viktrwlayer.c:5129 msgid "Split when time between trackpoints exceeds:" msgstr "" #: ../src/viktrwlayer.c:5205 msgid "Split Every Nth Point" msgstr "" #: ../src/viktrwlayer.c:5206 msgid "Split on every Nth point:" msgstr "" #: ../src/viktrwlayer.c:5312 msgid "Can not split track as it has no segments" msgstr "" #: ../src/viktrwlayer.c:5340 ../src/viktrwlayer.c:5370 #, c-format msgid "Deleted %ld point" msgid_plural "Deleted %ld points" msgstr[0] "" msgstr[1] "" #: ../src/viktrwlayer.c:5531 msgid "Internal Error in vik_trw_layer_uniquify_tracks" msgstr "" #: ../src/viktrwlayer.c:5588 ../src/viktrwlayer.c:5635 #: ../src/viktrwlayer.c:5814 msgid "" "Multiple entries with the same name exist. This method only works with " "unique names. Force unique names now?" msgstr "" #: ../src/viktrwlayer.c:5599 msgid "No tracks found" msgstr "" #: ../src/viktrwlayer.c:5607 ../src/viktrwlayer.c:5654 #: ../src/viktrwlayer.c:5834 msgid "Delete Selection" msgstr "" #: ../src/viktrwlayer.c:5608 msgid "Select tracks to delete" msgstr "" #: ../src/viktrwlayer.c:5646 msgid "No routes found" msgstr "" #: ../src/viktrwlayer.c:5655 msgid "Select routes to delete" msgstr "" #: ../src/viktrwlayer.c:5761 msgid "Internal Error in vik_trw_layer_uniquify_waypoints" msgstr "" #: ../src/viktrwlayer.c:5824 msgid "No waypoints found" msgstr "" #: ../src/viktrwlayer.c:5835 msgid "Select waypoints to delete" msgstr "" #: ../src/viktrwlayer.c:5896 #, c-format msgid "" "A waypoint with the name \"%s\" already exists. Really rename to the same " "name?" msgstr "" #: ../src/viktrwlayer.c:5926 #, c-format msgid "" "A track with the name \"%s\" already exists. Really rename to the same name?" msgstr "" #: ../src/viktrwlayer.c:5963 #, c-format msgid "" "A route with the name \"%s\" already exists. Really rename to the same name?" msgstr "" #: ../src/viktrwlayer.c:6085 ../src/viktrwlayer.c:6337 msgid "_Goto" msgstr "" #: ../src/viktrwlayer.c:6104 msgid "_Visit Geocache Webpage" msgstr "" #: ../src/viktrwlayer.c:6123 msgid "_Show Picture..." msgstr "" #: ../src/viktrwlayer.c:6131 msgid "Update Geotag on _Image" msgstr "" #: ../src/viktrwlayer.c:6137 msgid "_Update" msgstr "" #: ../src/viktrwlayer.c:6142 msgid "Update and _Keep File Timestamp" msgstr "" #: ../src/viktrwlayer.c:6153 msgid "Visit _Webpage" msgstr "" #: ../src/viktrwlayer.c:6184 msgid "_New Waypoint..." msgstr "" #: ../src/viktrwlayer.c:6193 msgid "_View All Waypoints" msgstr "" #: ../src/viktrwlayer.c:6205 msgid "Delete _All Waypoints" msgstr "" #: ../src/viktrwlayer.c:6211 msgid "_Delete Waypoints From Selection..." msgstr "" #: ../src/viktrwlayer.c:6233 msgid "_View All Tracks" msgstr "" #: ../src/viktrwlayer.c:6239 msgid "_New Track" msgstr "" #: ../src/viktrwlayer.c:6247 msgid "Delete _All Tracks" msgstr "" #: ../src/viktrwlayer.c:6253 msgid "_Delete Tracks From Selection..." msgstr "" #: ../src/viktrwlayer.c:6276 msgid "_View All Routes" msgstr "" #: ../src/viktrwlayer.c:6282 msgid "_New Route" msgstr "" #: ../src/viktrwlayer.c:6327 msgid "_View Track" msgstr "" #: ../src/viktrwlayer.c:6329 msgid "_View Route" msgstr "" #: ../src/viktrwlayer.c:6343 msgid "_Startpoint" msgstr "" #: ../src/viktrwlayer.c:6349 msgid "\"_Center\"" msgstr "" #: ../src/viktrwlayer.c:6355 msgid "_Endpoint" msgstr "" #: ../src/viktrwlayer.c:6361 msgid "_Highest Altitude" msgstr "" #: ../src/viktrwlayer.c:6367 msgid "_Lowest Altitude" msgstr "" #: ../src/viktrwlayer.c:6375 msgid "_Maximum Speed" msgstr "" #: ../src/viktrwlayer.c:6384 msgid "Co_mbine" msgstr "" #: ../src/viktrwlayer.c:6392 msgid "_Merge By Time..." msgstr "" #: ../src/viktrwlayer.c:6397 msgid "Merge _Segments" msgstr "" #: ../src/viktrwlayer.c:6403 msgid "Merge _With Other Tracks..." msgstr "" #: ../src/viktrwlayer.c:6409 msgid "_Append Track..." msgstr "" #: ../src/viktrwlayer.c:6411 msgid "_Append Route..." msgstr "" #: ../src/viktrwlayer.c:6417 msgid "Append _Route..." msgstr "" #: ../src/viktrwlayer.c:6419 msgid "Append _Track..." msgstr "" #: ../src/viktrwlayer.c:6426 msgid "_Split" msgstr "" #: ../src/viktrwlayer.c:6434 msgid "_Split By Time..." msgstr "" #. ATM always enable this entry - don't want to have to analyse the track before displaying the menu - to keep the menu speedy #: ../src/viktrwlayer.c:6440 msgid "Split Se_gments" msgstr "" #: ../src/viktrwlayer.c:6446 msgid "Split By _Number of Points..." msgstr "" #: ../src/viktrwlayer.c:6451 msgid "Split at _Trackpoint" msgstr "" #: ../src/viktrwlayer.c:6460 msgid "Delete Poi_nts" msgstr "" #: ../src/viktrwlayer.c:6466 msgid "Delete Points With The Same _Position" msgstr "" #: ../src/viktrwlayer.c:6471 msgid "Delete Points With The Same _Time" msgstr "" #: ../src/viktrwlayer.c:6477 msgid "_Reverse Track" msgstr "" #: ../src/viktrwlayer.c:6479 msgid "_Reverse Route" msgstr "" #: ../src/viktrwlayer.c:6488 msgid "Down_load Maps Along Track..." msgstr "" #: ../src/viktrwlayer.c:6490 msgid "Down_load Maps Along Route..." msgstr "" #: ../src/viktrwlayer.c:6497 msgid "_Apply DEM Data" msgstr "" #: ../src/viktrwlayer.c:6504 msgid "_Export Track as GPX..." msgstr "" #: ../src/viktrwlayer.c:6506 msgid "_Export Route as GPX..." msgstr "" #: ../src/viktrwlayer.c:6513 msgid "E_xtend Track End" msgstr "" #: ../src/viktrwlayer.c:6515 msgid "E_xtend Route End" msgstr "" #: ../src/viktrwlayer.c:6522 msgid "C_onvert to a Route" msgstr "" #: ../src/viktrwlayer.c:6524 msgid "C_onvert to a Track" msgstr "" #: ../src/viktrwlayer.c:6532 msgid "Extend _Using Route Finder" msgstr "" #: ../src/viktrwlayer.c:6548 msgid "_Upload to GPS..." msgstr "" #: ../src/viktrwlayer.c:6559 msgid "_View Google Directions" msgstr "" #: ../src/viktrwlayer.c:6579 msgid "Use with _Filter" msgstr "" #: ../src/viktrwlayer.c:6612 msgid "_Edit Trackpoint" msgstr "" #: ../src/viktrwlayer.c:7524 #, c-format msgid " - Gain %dm:Loss %dm" msgstr "" #: ../src/viktrwlayer.c:7526 #, c-format msgid " - Gain %dft:Loss %dft" msgstr "" #: ../src/viktrwlayer.c:7531 #, c-format msgid " - Bearing %3.1f° - Step %s" msgstr "" #: ../src/viktrwlayer.c:8124 #, c-format msgid "Could not launch %s to open file." msgstr "" #: ../src/viktrwlayer.c:8205 #, c-format msgid "Creating %d Image Thumbnails..." msgstr "" #: ../src/viktrwlayer.c:8524 msgid "No map layer in use. Create one first" msgstr "" #: ../src/viktrwlayer_propwin.c:898 ../src/viktrwlayer_propwin.c:1155 #, c-format msgid "%.1f kph" msgstr "" #: ../src/viktrwlayer_propwin.c:901 ../src/viktrwlayer_propwin.c:1158 #, c-format msgid "%.1f mph" msgstr "" #: ../src/viktrwlayer_propwin.c:904 ../src/viktrwlayer_propwin.c:1161 #, c-format msgid "%.1f knots" msgstr "" #. VIK_UNITS_SPEED_METRES_PER_SECOND: #: ../src/viktrwlayer_propwin.c:908 ../src/viktrwlayer_propwin.c:1165 #, c-format msgid "%.1f m/s" msgstr "" #: ../src/viktrwlayer_propwin.c:1745 #, c-format msgid "%.1f miles" msgstr "" #: ../src/viktrwlayer_propwin.c:1747 #, c-format msgid "%.1f km" msgstr "" #: ../src/viktrwlayer_propwin.c:2681 msgid "Failed spliting track. Track unchanged" msgstr "" #: ../src/viktrwlayer_propwin.c:2779 ../src/viktrwlayer_propwin.c:3178 #, c-format msgid "%s - Track Properties" msgstr "" #: ../src/viktrwlayer_propwin.c:2784 msgid "Split at _Marker" msgstr "" #: ../src/viktrwlayer_propwin.c:2785 msgid "Split _Segments" msgstr "" #: ../src/viktrwlayer_propwin.c:2786 msgid "_Reverse" msgstr "" #: ../src/viktrwlayer_propwin.c:2787 msgid "_Delete Dupl." msgstr "" #: ../src/viktrwlayer_propwin.c:2813 msgid "Comment:" msgstr "" #: ../src/viktrwlayer_propwin.c:2814 msgid "Description:" msgstr "" #: ../src/viktrwlayer_propwin.c:2815 msgid "Track Length:" msgstr "" #: ../src/viktrwlayer_propwin.c:2816 msgid "Trackpoints:" msgstr "" #: ../src/viktrwlayer_propwin.c:2817 msgid "Segments:" msgstr "" #: ../src/viktrwlayer_propwin.c:2818 msgid "Duplicate Points:" msgstr "" #: ../src/viktrwlayer_propwin.c:2819 msgid "Max Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:2820 msgid "Avg. Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:2821 msgid "Moving Avg. Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:2822 msgid "Avg. Dist. Between TPs:" msgstr "" #: ../src/viktrwlayer_propwin.c:2823 msgid "Elevation Range:" msgstr "" #: ../src/viktrwlayer_propwin.c:2824 msgid "Total Elevation Gain/Loss:" msgstr "" #: ../src/viktrwlayer_propwin.c:2825 msgid "Start:" msgstr "" #: ../src/viktrwlayer_propwin.c:2826 msgid "End:" msgstr "" #: ../src/viktrwlayer_propwin.c:2827 msgid "Duration:" msgstr "" #: ../src/viktrwlayer_propwin.c:2828 msgid "Color:" msgstr "" #: ../src/viktrwlayer_propwin.c:2877 ../src/viktrwlayer_propwin.c:2901 #: ../src/viktrwlayer_propwin.c:2929 ../src/viktrwlayer_propwin.c:2966 #: ../src/viktrwlayer_propwin.c:2984 ../src/viktrwlayer_propwin.c:3034 #: ../src/viktrwlayer_propwin.c:3035 ../src/viktrwlayer_propwin.c:3036 #: ../src/viktrwlayer_propwin.c:3062 ../src/viktrwlayer_propwin.c:3063 #: ../src/viktrwlayer_propwin.c:3078 ../src/viktrwlayer_propwin.c:3079 #: ../src/viktrwlayer_propwin.c:3092 ../src/viktrwlayer_propwin.c:3093 #: ../src/viktrwlayer_propwin.c:3106 ../src/viktrwlayer_propwin.c:3107 #: ../src/viktrwlayer_propwin.c:3120 ../src/viktrwlayer_propwin.c:3121 #: ../src/viktrwlayer_propwin.c:3134 ../src/viktrwlayer_propwin.c:3135 #, c-format msgid "No Data" msgstr "" #: ../src/viktrwlayer_propwin.c:3031 #, c-format msgid "%d minutes" msgstr "" #: ../src/viktrwlayer_propwin.c:3058 msgid "Statistics" msgstr "" #: ../src/viktrwlayer_propwin.c:3064 msgid "Show D_EM" msgstr "" #: ../src/viktrwlayer_propwin.c:3065 ../src/viktrwlayer_propwin.c:3080 #: ../src/viktrwlayer_propwin.c:3094 ../src/viktrwlayer_propwin.c:3136 msgid "Show _GPS Speed" msgstr "" #: ../src/viktrwlayer_propwin.c:3067 ../src/viktrwlayer_propwin.c:3082 #: ../src/viktrwlayer_propwin.c:3110 ../src/viktrwlayer_propwin.c:3138 msgid "Track Distance:" msgstr "" #: ../src/viktrwlayer_propwin.c:3068 ../src/viktrwlayer_propwin.c:3125 msgid "Track Height:" msgstr "" #: ../src/viktrwlayer_propwin.c:3073 msgid "Elevation-distance" msgstr "" #: ../src/viktrwlayer_propwin.c:3083 msgid "Track Gradient:" msgstr "" #: ../src/viktrwlayer_propwin.c:3087 msgid "Gradient-distance" msgstr "" #: ../src/viktrwlayer_propwin.c:3096 ../src/viktrwlayer_propwin.c:3111 #: ../src/viktrwlayer_propwin.c:3124 msgid "Track Time:" msgstr "" #: ../src/viktrwlayer_propwin.c:3097 ../src/viktrwlayer_propwin.c:3139 msgid "Track Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:3101 msgid "Speed-time" msgstr "" #: ../src/viktrwlayer_propwin.c:3108 ../src/viktrwlayer_propwin.c:3122 msgid "Show S_peed" msgstr "" #: ../src/viktrwlayer_propwin.c:3115 msgid "Distance-time" msgstr "" #: ../src/viktrwlayer_propwin.c:3129 msgid "Elevation-time" msgstr "" #: ../src/viktrwlayer_propwin.c:3143 msgid "Speed-distance" msgstr "" #: ../src/viktrwlayer_tpwin.c:118 msgid "Part of Track:" msgstr "" #: ../src/viktrwlayer_tpwin.c:119 msgid "Latitude:" msgstr "" #: ../src/viktrwlayer_tpwin.c:120 msgid "Longitude:" msgstr "" #: ../src/viktrwlayer_tpwin.c:121 msgid "Altitude:" msgstr "" #: ../src/viktrwlayer_tpwin.c:122 msgid "Timestamp:" msgstr "" #: ../src/viktrwlayer_tpwin.c:123 msgid "Time:" msgstr "" #: ../src/viktrwlayer_tpwin.c:124 msgid "Distance Difference:" msgstr "" #: ../src/viktrwlayer_tpwin.c:125 msgid "Time Difference:" msgstr "" #: ../src/viktrwlayer_tpwin.c:126 msgid "\"Speed\" Between:" msgstr "" #: ../src/viktrwlayer_tpwin.c:127 msgid "VDOP:" msgstr "" #: ../src/viktrwlayer_tpwin.c:128 msgid "HDOP:" msgstr "" #: ../src/viktrwlayer_tpwin.c:129 msgid "PDOP:" msgstr "" #: ../src/viktrwlayer_tpwin.c:130 msgid "SAT/FIX:" msgstr "" #: ../src/viktrwlayer_tpwin.c:139 msgid "Trackpoint" msgstr "" #: ../src/viktrwlayer_tpwin.c:142 msgid "_Insert After" msgstr "" #: ../src/viktrwlayer_tpwin.c:144 msgid "Split Here" msgstr "" #: ../src/viktrwlayer_geotag.c:446 #, c-format msgid "Geotagging %d Images..." msgstr "" #: ../src/viktrwlayer_geotag.c:510 msgid "Geotag Images" msgstr "" #: ../src/viktrwlayer_geotag.c:516 msgid "Images" msgstr "" #: ../src/viktrwlayer_geotag.c:520 msgid "Overwrite Existing Waypoints:" msgstr "" #: ../src/viktrwlayer_geotag.c:523 msgid "Overwrite Existing GPS Information:" msgstr "" #: ../src/viktrwlayer_geotag.c:525 msgid "Keep File Modification Timestamp:" msgstr "" #: ../src/viktrwlayer_geotag.c:555 msgid "Create Waypoints:" msgstr "" #: ../src/viktrwlayer_geotag.c:563 msgid "Write EXIF:" msgstr "" #: ../src/viktrwlayer_geotag.c:575 msgid "Interpolate Between Track Segments:" msgstr "" #: ../src/viktrwlayer_geotag.c:579 msgid "Image Time Offset (Seconds):" msgstr "" #: ../src/viktrwlayer_geotag.c:581 msgid "" "The number of seconds to ADD to the photos time to make it match the GPS " "data. Calculate this with (GPS - Photo). Can be negative or positive. Useful " "to adjust times when a camera's timestamp was incorrect." msgstr "" #: ../src/viktrwlayer_geotag.c:584 msgid "Image Timezone:" msgstr "" #: ../src/viktrwlayer_geotag.c:586 msgid "" "The timezone that was used when the images were created. For example, if a " "camera is set to AWST or +8:00 hours. Enter +8:00 here so that the correct " "adjustment to the images' time can be made. GPS data is always in UTC." msgstr "" #: ../src/viktrwlayer_geotag.c:590 #, c-format msgid "Using track: %s" msgstr "" #: ../src/viktrwlayer_geotag.c:592 #, c-format msgid "Using all tracks in: %s" msgstr "" #: ../src/vikstatus.c:105 msgid "Current zoom level. Click to select a new one." msgstr "" #: ../src/vikwaypoint.c:34 msgid "Waypoint" msgstr "" #. TODO get rid of this as this is unnecessary duplication... #: ../src/vikwindow.c:221 msgid "Pan" msgstr "" #: ../src/vikwindow.c:221 msgid "Zoom" msgstr "" #: ../src/vikwindow.c:221 msgid "Ruler" msgstr "" #: ../src/vikwindow.c:221 msgid "Select" msgstr "" #. Create tooltip #: ../src/vikwindow.c:440 msgid "Select zoom level" msgstr "" #: ../src/vikwindow.c:645 #, c-format msgid "" "Do you want to save the changes you made to the document \"%s\"?\n" "\n" "Your changes will be lost if you don't save them." msgstr "" #: ../src/vikwindow.c:649 msgid "Don't Save" msgstr "" #: ../src/vikwindow.c:696 msgid "mpp" msgstr "" #: ../src/vikwindow.c:696 msgid "pixelfact" msgstr "" #: ../src/vikwindow.c:861 #, c-format msgid "%s %s %dm" msgstr "" #: ../src/vikwindow.c:863 #, c-format msgid "%s %s %dft" msgstr "" #: ../src/vikwindow.c:866 #, c-format msgid "%s %s" msgstr "" #. NB Ctrl+Shift+R is used for Refresh (deemed more important), so use 'U' instead #: ../src/vikwindow.c:1254 msgid "_Ruler" msgstr "" #: ../src/vikwindow.c:1254 msgid "Ruler Tool" msgstr "" #: ../src/vikwindow.c:1502 ../src/vikwindow.c:3138 msgid "_Zoom" msgstr "" #: ../src/vikwindow.c:1502 msgid "Zoom Tool" msgstr "" #: ../src/vikwindow.c:1547 ../src/vikwindow.c:3139 msgid "_Pan" msgstr "" #: ../src/vikwindow.c:1547 msgid "Pan Tool" msgstr "" #: ../src/vikwindow.c:1664 msgid "_Select" msgstr "" #: ../src/vikwindow.c:1664 msgid "Select Tool" msgstr "" #: ../src/vikwindow.c:1809 msgid "You must select a layer to show its properties." msgstr "" #. No error to show, so unlikely this will get called #: ../src/vikwindow.c:1824 msgid "The help system is not available." msgstr "" #. Main error path #: ../src/vikwindow.c:1827 #, c-format msgid "" "Help is not available because: %s.\n" "Ensure a Mime Type ghelp handler program is installed (e.g. yelp)." msgstr "" #: ../src/vikwindow.c:1850 msgid "You must select a layer to delete." msgstr "" #: ../src/vikwindow.c:2087 msgid "Untitled" msgstr "" #: ../src/vikwindow.c:2194 #, c-format msgid "Unable to add '%s' to the list of recently used documents" msgstr "" #: ../src/vikwindow.c:2208 msgid "The file you requested could not be opened." msgstr "" #: ../src/vikwindow.c:2211 msgid "" "GPSBabel is required to load files of this type or GPSBabel encountered " "problems." msgstr "" #: ../src/vikwindow.c:2214 #, c-format msgid "Unable to load malformed GPX file %s" msgstr "" #: ../src/vikwindow.c:2217 #, c-format msgid "Unsupported file type for %s" msgstr "" #. Since we can process .vik files with issues just show a warning in the status bar #. Not that a user can do much about it... or tells them what this issue is yet... #: ../src/vikwindow.c:2223 #, c-format msgid "WARNING: issues encountered loading %s" msgstr "" #: ../src/vikwindow.c:2278 msgid "Please select a GPS data file to open. " msgstr "" #: ../src/vikwindow.c:2288 msgid "Geocaching" msgstr "" #: ../src/vikwindow.c:2294 msgid "Google Earth" msgstr "" #: ../src/vikwindow.c:2299 msgid "GPX" msgstr "" #: ../src/vikwindow.c:2304 ../src/vikwindow.c:2387 #: ../src/viking.desktop.in.h:1 msgid "Viking" msgstr "" #: ../src/vikwindow.c:2374 msgid "Save as Viking File." msgstr "" #. Try harder... #: ../src/vikwindow.c:2619 ../src/vikwindow.c:2625 msgid "Generating image file..." msgstr "" #: ../src/vikwindow.c:2647 msgid "" "Failed to generate internal image.\n" "\n" "Try creating a smaller image." msgstr "" #: ../src/vikwindow.c:2655 msgid "Failed to generate image file." msgstr "" #. Success #: ../src/vikwindow.c:2660 msgid "Image file generated." msgstr "" #: ../src/vikwindow.c:2764 msgid "" "Viewable region outside allowable pixel size bounds for image. Clipping " "width/height values." msgstr "" #: ../src/vikwindow.c:2789 #, c-format msgid "Total area: %ldm x %ldm (%.3f sq. km)" msgstr "" #: ../src/vikwindow.c:2792 #, c-format msgid "Total area: %ldm x %ldm (%.3f sq. miles)" msgstr "" #: ../src/vikwindow.c:2813 msgid "Save Image" msgstr "" #: ../src/vikwindow.c:2834 msgid "PNG" msgstr "" #: ../src/vikwindow.c:2857 msgid "You must be in UTM mode to use this feature" msgstr "" #: ../src/vikwindow.c:2862 msgid "Choose a directory to hold images" msgstr "" #. todo: default for answers inside VikWindow or static (thruout instance) #: ../src/vikwindow.c:2883 msgid "Save to Image File" msgstr "" #: ../src/vikwindow.c:2900 msgid "Width (pixels):" msgstr "" #: ../src/vikwindow.c:2902 msgid "Height (pixels):" msgstr "" #: ../src/vikwindow.c:2905 msgid "" "WARNING: USING LARGE IMAGES OVER 10000x10000\n" "MAY CRASH THE PROGRAM!" msgstr "" #: ../src/vikwindow.c:2907 msgid "Zoom (meters per pixel):" msgstr "" #: ../src/vikwindow.c:2921 msgid "Area in current viewable window" msgstr "" #: ../src/vikwindow.c:2931 msgid "Save as PNG" msgstr "" #: ../src/vikwindow.c:2932 msgid "Save as JPEG" msgstr "" #: ../src/vikwindow.c:2954 msgid "East-west image tiles:" msgstr "" #: ../src/vikwindow.c:2956 msgid "North-south image tiles:" msgstr "" #: ../src/vikwindow.c:3097 msgid "Choose a background color" msgstr "" #: ../src/vikwindow.c:3113 msgid "Choose a track highlight color" msgstr "" #: ../src/vikwindow.c:3134 msgid "_File" msgstr "" #: ../src/vikwindow.c:3135 msgid "_Edit" msgstr "" #: ../src/vikwindow.c:3136 msgid "_View" msgstr "" #: ../src/vikwindow.c:3137 msgid "_Show" msgstr "" #: ../src/vikwindow.c:3140 msgid "_Layers" msgstr "" #: ../src/vikwindow.c:3141 msgid "_Tools" msgstr "" #: ../src/vikwindow.c:3142 msgid "_Webtools" msgstr "" #: ../src/vikwindow.c:3143 ../src/vikwindow.c:3206 msgid "_Help" msgstr "" #: ../src/vikwindow.c:3145 msgid "New file" msgstr "" #: ../src/vikwindow.c:3146 msgid "_Open..." msgstr "" #: ../src/vikwindow.c:3146 msgid "Open a file" msgstr "" #: ../src/vikwindow.c:3147 msgid "Open _Recent File" msgstr "" #: ../src/vikwindow.c:3148 msgid "Append _File..." msgstr "" #: ../src/vikwindow.c:3148 msgid "Append data from a different file" msgstr "" #: ../src/vikwindow.c:3149 msgid "A_cquire" msgstr "" #: ../src/vikwindow.c:3150 msgid "Transfer data from a GPS device" msgstr "" #: ../src/vikwindow.c:3151 msgid "Import File With GPS_Babel..." msgstr "" #: ../src/vikwindow.c:3151 msgid "Import file via GPSBabel converter" msgstr "" #: ../src/vikwindow.c:3153 msgid "Google _Directions..." msgstr "" #: ../src/vikwindow.c:3153 msgid "Get driving directions from Google" msgstr "" #: ../src/vikwindow.c:3156 msgid "_OSM Traces..." msgstr "" #: ../src/vikwindow.c:3156 msgid "Get traces from OpenStreetMap" msgstr "" #: ../src/vikwindow.c:3157 msgid "_My OSM Traces..." msgstr "" #: ../src/vikwindow.c:3157 msgid "Get Your Own Traces from OpenStreetMap" msgstr "" #: ../src/vikwindow.c:3160 msgid "Geo_caches..." msgstr "" #: ../src/vikwindow.c:3160 msgid "Get Geocaches from geocaching.com" msgstr "" #: ../src/vikwindow.c:3163 msgid "Create waypoints from geotagged images" msgstr "" #: ../src/vikwindow.c:3166 msgid "Create waypoints from Wikipedia items in the current view" msgstr "" #: ../src/vikwindow.c:3168 msgid "_Save" msgstr "" #: ../src/vikwindow.c:3168 msgid "Save the file" msgstr "" #: ../src/vikwindow.c:3169 msgid "Save _As..." msgstr "" #: ../src/vikwindow.c:3169 msgid "Save the file under different name" msgstr "" #: ../src/vikwindow.c:3170 msgid "_Generate Image File..." msgstr "" #: ../src/vikwindow.c:3170 msgid "Save a snapshot of the workspace into a file" msgstr "" #: ../src/vikwindow.c:3171 msgid "Generate _Directory of Images..." msgstr "" #: ../src/vikwindow.c:3171 msgid "FIXME:IMGDIR" msgstr "" #: ../src/vikwindow.c:3174 msgid "_Print..." msgstr "" #: ../src/vikwindow.c:3174 msgid "Print maps" msgstr "" #: ../src/vikwindow.c:3177 msgid "E_xit" msgstr "" #: ../src/vikwindow.c:3177 msgid "Exit the program" msgstr "" #: ../src/vikwindow.c:3178 msgid "Save and Exit" msgstr "" #: ../src/vikwindow.c:3178 msgid "Save and Exit the program" msgstr "" #: ../src/vikwindow.c:3180 msgid "Go to the _Default Location" msgstr "" #: ../src/vikwindow.c:3180 msgid "Go to the default location" msgstr "" #: ../src/vikwindow.c:3181 msgid "Go to _Location..." msgstr "" #: ../src/vikwindow.c:3181 msgid "Go to address/place using text search" msgstr "" #: ../src/vikwindow.c:3182 msgid "_Go to Lat/Lon..." msgstr "" #: ../src/vikwindow.c:3182 msgid "Go to arbitrary lat/lon coordinate" msgstr "" #: ../src/vikwindow.c:3183 msgid "Go to UTM..." msgstr "" #: ../src/vikwindow.c:3183 msgid "Go to arbitrary UTM coordinate" msgstr "" #: ../src/vikwindow.c:3184 msgid "_Refresh" msgstr "" #: ../src/vikwindow.c:3184 msgid "Refresh any maps displayed" msgstr "" #: ../src/vikwindow.c:3185 msgid "Set _Highlight Color..." msgstr "" #: ../src/vikwindow.c:3186 msgid "Set Bac_kground Color..." msgstr "" #: ../src/vikwindow.c:3187 msgid "Zoom _In" msgstr "" #: ../src/vikwindow.c:3188 msgid "Zoom _Out" msgstr "" #: ../src/vikwindow.c:3189 msgid "Zoom _To..." msgstr "" #: ../src/vikwindow.c:3190 msgid "Pan _North" msgstr "" #: ../src/vikwindow.c:3191 msgid "Pan _East" msgstr "" #: ../src/vikwindow.c:3192 msgid "Pan _South" msgstr "" #: ../src/vikwindow.c:3193 msgid "Pan _West" msgstr "" #: ../src/vikwindow.c:3194 msgid "Background _Jobs" msgstr "" #: ../src/vikwindow.c:3196 msgid "Cu_t" msgstr "" #: ../src/vikwindow.c:3197 msgid "_Copy" msgstr "" #: ../src/vikwindow.c:3198 msgid "_Paste" msgstr "" #: ../src/vikwindow.c:3199 msgid "_Delete" msgstr "" #: ../src/vikwindow.c:3200 msgid "Delete All" msgstr "" #: ../src/vikwindow.c:3201 msgid "_Flush Map Cache" msgstr "" #: ../src/vikwindow.c:3202 msgid "_Set the Default Location" msgstr "" #: ../src/vikwindow.c:3202 msgid "Set the Default Location to the current position" msgstr "" #: ../src/vikwindow.c:3203 msgid "_Preferences" msgstr "" #: ../src/vikwindow.c:3204 msgid "_Properties" msgstr "" #: ../src/vikwindow.c:3207 msgid "_About" msgstr "" #: ../src/vikwindow.c:3213 msgid "_UTM Mode" msgstr "" #: ../src/vikwindow.c:3214 msgid "_Expedia Mode" msgstr "" #: ../src/vikwindow.c:3215 msgid "_Mercator Mode" msgstr "" #: ../src/vikwindow.c:3216 msgid "Lat_/Lon Mode" msgstr "" #: ../src/vikwindow.c:3220 msgid "Show _Scale" msgstr "" #: ../src/vikwindow.c:3220 msgid "Show Scale" msgstr "" #: ../src/vikwindow.c:3221 msgid "Show _Center Mark" msgstr "" #: ../src/vikwindow.c:3221 msgid "Show Center Mark" msgstr "" #: ../src/vikwindow.c:3222 msgid "Show _Highlight" msgstr "" #: ../src/vikwindow.c:3222 msgid "Show Highlight" msgstr "" #: ../src/vikwindow.c:3223 msgid "_Full Screen" msgstr "" #: ../src/vikwindow.c:3223 msgid "Activate full screen mode" msgstr "" #: ../src/vikwindow.c:3224 msgid "Show Side _Panel" msgstr "" #: ../src/vikwindow.c:3224 msgid "Show Side Panel" msgstr "" #: ../src/vikwindow.c:3225 msgid "Show Status_bar" msgstr "" #: ../src/vikwindow.c:3225 msgid "Show Statusbar" msgstr "" #: ../src/vikwindow.c:3226 msgid "Show _Toolbar" msgstr "" #: ../src/vikwindow.c:3226 msgid "Show Toolbar" msgstr "" #: ../src/vikwindow.c:3227 msgid "Show _Menu" msgstr "" #: ../src/vikwindow.c:3227 msgid "Show Menu" msgstr "" #: ../src/viking.desktop.in.h:2 msgid "GPS Data Manager" msgstr "" #: ../src/viking.desktop.in.h:3 msgid "Map Based GPS Data Manager (live data capable)." msgstr "" #: ../src/libjpeg/jpeg-data.c:206 msgid "Data does not follow JPEG specification." msgstr "" #: ../src/libjpeg/jpeg-data.c:291 #, c-format msgid "Path '%s' invalid." msgstr "" #: ../src/libjpeg/jpeg-data.c:309 #, c-format msgid "Could not read '%s'." msgstr "" viking-1.4.2/po/sv.po0000644000175000017500000022675512175546146011370 00000000000000# Swedish translation for viking # Copyright (c) 2007 Rosetta Contributors and Canonical Ltd 2007 # This file is distributed under the same license as the viking package. # FIRST AUTHOR , 2007. # msgid "" msgstr "" "Project-Id-Version: viking\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-02-04 23:29+0100\n" "PO-Revision-Date: 2010-12-30 21:34+0000\n" "Last-Translator: Erik Simmesgård \n" "Language-Team: Swedish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2013-03-23 17:12+0000\n" "X-Generator: Launchpad (build 16540)\n" #: ../src/acquire.c:103 ../src/vikgpslayer.c:1185 msgid "Done." msgstr "Färdig." #: ../src/acquire.c:114 msgid "No data." msgstr "Ingen data." #: ../src/acquire.c:154 ../src/acquire.c:404 msgid "Error: acquisition failed." msgstr "" #: ../src/acquire.c:341 msgid "Working..." msgstr "Arbetar..." #. This shouldn't happen... #: ../src/acquire.c:394 msgid "" "Unable to create command\n" "Acquire method failed." msgstr "" #: ../src/acquire.c:486 msgid "_Filter" msgstr "" #: ../src/acquire.c:501 #, c-format msgid "Filter with %s" msgstr "" #: ../src/acquire.c:518 msgid "Filter" msgstr "" #: ../src/background.c:52 #, c-format msgid "%d items" msgstr "%d föremål" #: ../src/background.c:248 msgid "Job" msgstr "Jobb" #: ../src/background.c:252 msgid "Progress" msgstr "Förlopp" #: ../src/background.c:268 msgid "Viking Background Jobs" msgstr "" #: ../src/bing.c:47 msgid "Bing" msgstr "" #. VIK_GTK_WINDOW_FROM_WIDGET(vp) #: ../src/bingmapsource.c:445 msgid "Bing attribution Loading" msgstr "" #: ../src/clipboard.c:95 msgid "paste failed" msgstr "inklistring misslyckades" #: ../src/clipboard.c:105 msgid "wrong clipboard data size" msgstr "" #: ../src/clipboard.c:124 #, c-format msgid "" "The clipboard contains sublayer data for %s layers. You must select a layer " "of this type to paste the clipboard data." msgstr "" #: ../src/clipboard.c:236 msgid "" "In order to paste a waypoint, please select an appropriate layer to paste " "into." msgstr "" #: ../src/dialog.c:52 msgid "Go to Lat/Lon" msgstr "Gå till Lat/Lon" #: ../src/dialog.c:64 ../src/dialog.c:251 msgid "Latitude:" msgstr "Latitud:" #: ../src/dialog.c:70 ../src/dialog.c:256 msgid "Longitude:" msgstr "Longitud:" #: ../src/dialog.c:102 msgid "Go to UTM" msgstr "" #: ../src/dialog.c:115 msgid "Northing:" msgstr "Norrvärde" #: ../src/dialog.c:121 msgid "Easting:" msgstr "Östvärde" #: ../src/dialog.c:128 msgid "Zone:" msgstr "Zon:" #: ../src/dialog.c:131 msgid "Letter:" msgstr "" #: ../src/dialog.c:199 msgid "Waypoint Properties" msgstr "Waypoint Egenskaper" #: ../src/dialog.c:233 msgid "Name:" msgstr "Namn:" #: ../src/dialog.c:261 msgid "Altitude:" msgstr "Höjd:" #: ../src/dialog.c:266 msgid "Comment:" msgstr "Kommentar:" #: ../src/dialog.c:274 ../src/osm-traces.c:437 msgid "Description:" msgstr "Beskrivning :" #: ../src/dialog.c:277 msgid "Image:" msgstr "Bild:" #: ../src/dialog.c:282 msgid "Symbol:" msgstr "Symbol:" #: ../src/dialog.c:291 msgid "(none)" msgstr "(ingen)" #. TODO: other checks (isalpha or whatever ) #: ../src/dialog.c:356 msgid "Please enter a name for the waypoint." msgstr "Ange ett namn för waypointen" #: ../src/dialog.c:529 ../src/geonamessearch.c:243 #: ../src/datasource_osm_my_traces.c:507 msgid "Nothing was selected" msgstr "Inget markerat" #: ../src/dialog.c:537 msgid "Add Route" msgstr "" #: ../src/dialog.c:537 msgid "Add Track" msgstr "Lägg till spår" #: ../src/dialog.c:545 msgid "Route Name:" msgstr "" #: ../src/dialog.c:545 msgid "Track Name:" msgstr "Spårnamn:" #: ../src/dialog.c:565 msgid "Please enter a name for the track." msgstr "Vänligen skriv in ett namn för spåret" #: ../src/dialog.c:623 msgid "Zoom Factors..." msgstr "" #: ../src/dialog.c:637 msgid "Zoom factor (in meters per pixel):" msgstr "Zoomfaktor (i meter per pixlar)" #: ../src/dialog.c:638 msgid "X (easting): " msgstr "X (östvärde): " #: ../src/dialog.c:639 msgid "Y (northing): " msgstr "Y (norrvärde): " #: ../src/dialog.c:644 msgid "X and Y zoom factors must be equal" msgstr "X och Y zoomfaktorerna måste vara unika" #: ../src/dialog.c:699 msgid "1 min" msgstr "1 min" #: ../src/dialog.c:700 msgid "1 hour" msgstr "1 timme" #: ../src/dialog.c:701 msgid "1 day" msgstr "1 dag" #: ../src/dialog.c:702 msgid "Custom (in minutes):" msgstr "Anpassad (i minuter):" #: ../src/dialog.c:808 msgid "GPS Data and Topo Analyzer, Explorer, and Manager." msgstr "" #: ../src/dialog.c:809 msgid "" "This program is free software; you can redistribute it and/or modify it " "under the terms of the GNU General Public License as published by the Free " "Software Foundation; either version 2 of the License, or (at your option) " "any later version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT " "ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or " "FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for " "more details.\n" "\n" "You should have received a copy of the GNU General Public License along with " "this program; if not, write to the Free Software Foundation, Inc., 59 Temple " "Place, Suite 330, Boston, MA 02111-1307, USA" msgstr "" #: ../src/dialog.c:837 msgid "Translation is coordinated on http://launchpad.net/viking" msgstr "" #: ../src/dialog.c:845 msgid "Download along track" msgstr "Ladda ned längsmed spår" #: ../src/dialog.c:851 msgid "Map type:" msgstr "Karttyp:" #: ../src/dialog.c:856 msgid "Zoom level:" msgstr "Zoomnivå:" #: ../src/dialog.c:896 #, c-format msgid "The map data is licensed: %s." msgstr "" #: ../src/dialog.c:899 #, c-format msgid "" "The data provided by '%s' are licensed under the following license: " "%s.\n" "Please, read the license before continuing." msgstr "" #: ../src/dialog.c:904 msgid "Open license" msgstr "" #: ../src/expedia.c:53 msgid "Expedia Street Maps" msgstr "Expedia Street Maps" #: ../src/expedia.c:81 msgid "Invalid expedia altitude" msgstr "Ogiltig expedia altitud" #: ../src/expedia.c:112 #, c-format msgid "" "Couldn't open EXPEDIA image file (right after successful download! Please " "report and delete image file!): %s" msgstr "" "Kunde inte öppna EXPEDIA-bildfil (Direkt efter lyckad nedladdning! Vänligen " "rapportera och ta bort bildfil!): %s" #: ../src/expedia.c:125 #, c-format msgid "" "Couldn't save EXPEDIA image file (right after successful download! Please " "report and delete image file!): %s" msgstr "" "Kunde inte spara EXPEDIA-bildfil (Direkt efter lyckad nedladdning! Vänligen " "rapportera och ta bort bildfil!): %s" #. * #. * See http://www.geonames.org/export/wikipedia-webservice.html#wikipediaBoundingBox #. #. Translators may wish to change this setting as appropriate to get Wikipedia articles in that language #: ../src/geonamessearch.c:46 msgid "en" msgstr "" #: ../src/geonamessearch.c:121 msgid "Search" msgstr "Sök" #: ../src/geonamessearch.c:123 msgid "No entries found!" msgstr "Inga inlägg hittades!" #. NB could allow columns to be shifted around by doing this after each new #. gtk_tree_view_column_set_reorderable ( column, TRUE ); #. However I don't think is that useful, so I haven't put it in #: ../src/geonamessearch.c:177 ../src/datasource_osm_my_traces.c:425 msgid "Name" msgstr "" #: ../src/geonamessearch.c:182 msgid "Feature" msgstr "" #: ../src/geonamessearch.c:187 ../src/datasource_osm_my_traces.c:440 msgid "Lat/Lon" msgstr "" #: ../src/geonamessearch.c:269 ../src/googlesearch.c:100 msgid "couldn't map temp file" msgstr "" #: ../src/globals.c:44 msgid "Degree format:" msgstr "Gradformat:" #: ../src/globals.c:48 msgid "Distance units:" msgstr "" #: ../src/globals.c:52 msgid "Speed units:" msgstr "" #: ../src/globals.c:56 msgid "Height units:" msgstr "" #: ../src/globals.c:60 msgid "Use large waypoint icons:" msgstr "" #: ../src/globals.c:64 msgid "Default latitude:" msgstr "" #: ../src/globals.c:67 msgid "Default longitude:" msgstr "" #: ../src/globals.c:73 msgid "Alphabetical" msgstr "" #: ../src/globals.c:73 ../src/datasource_osm_my_traces.c:435 msgid "Time" msgstr "" #: ../src/globals.c:76 msgid "KML File Export Units:" msgstr "" #: ../src/globals.c:77 msgid "GPX Track Order:" msgstr "" #: ../src/globals.c:82 msgid "Image Viewer:" msgstr "" #: ../src/globals.c:87 msgid "External GPX Program 1:" msgstr "" #: ../src/globals.c:88 msgid "External GPX Program 2:" msgstr "" #. Defaults for the options are setup here #: ../src/globals.c:96 msgid "General" msgstr "" #. New Tab #: ../src/globals.c:121 msgid "Export/External" msgstr "" #. Webtools #: ../src/google.c:36 msgid "Google" msgstr "Google" #: ../src/datasource_file.c:59 msgid "Import file with GPSBabel" msgstr "" #: ../src/datasource_file.c:60 msgid "Imported file" msgstr "" #. The file selector #: ../src/datasource_file.c:133 msgid "File:" msgstr "" #: ../src/datasource_file.c:134 msgid "File to import" msgstr "" #: ../src/datasource_file.c:141 msgid "All files" msgstr "" #. The file format selector #: ../src/datasource_file.c:148 msgid "File type:" msgstr "" #: ../src/datasource_file.c:193 #, c-format msgid "using babel args '%s' and file '%s'" msgstr "" #: ../src/datasource_gc.c:66 msgid "Download Geocaches" msgstr "Ladda ned Geocachar" #: ../src/datasource_gc.c:67 msgid "Geocaching.com Caches" msgstr "Geocaching.com Cachar" #: ../src/datasource_gc.c:84 msgid "geocaching.com username:" msgstr "geocaching.com användarnamn:" #: ../src/datasource_gc.c:85 msgid "geocaching.com password:" msgstr "geocaching.com lösenord:" #: ../src/datasource_gc.c:126 #, c-format msgid "" "Can't find %s or %s in path! Check that you have installed it correctly." msgstr "" #: ../src/datasource_gc.c:188 msgid "Number geocaches:" msgstr "Antal cahar:" #: ../src/datasource_gc.c:190 msgid "Centered around:" msgstr "Centrera runt:" #: ../src/datasource_gc.c:226 msgid "Broken input - using some defaults" msgstr "" #: ../src/datasource_geotag.c:51 msgid "Create Waypoints from Geotagged Images" msgstr "" #: ../src/datasource_geotag.c:52 msgid "Geotagged Images" msgstr "" #: ../src/datasource_geotag.c:102 ../src/vikwindow.c:2314 #: ../src/vikwindow.c:2382 ../src/vikwindow.c:2824 msgid "All" msgstr "" #: ../src/datasource_geotag.c:107 ../src/vikwindow.c:2829 msgid "JPG" msgstr "" #: ../src/datasource_geotag.c:165 #, c-format msgid "Unable to create waypoint from %s" msgstr "" #: ../src/datasource_google.c:49 ../src/datasource_google.c:50 msgid "Google Directions" msgstr "Google Vägvisning" #: ../src/datasource_google.c:77 msgid "From:" msgstr "Från:" #: ../src/datasource_google.c:79 msgid "To:" msgstr "Till:" #: ../src/datasource_gps.c:57 msgid "Acquire from GPS" msgstr "Hämta från GPS" #: ../src/datasource_gps.c:58 msgid "Acquired from GPS" msgstr "" #: ../src/datasource_gps.c:221 #, c-format msgid "using cmdline '%s' and file '%s'\n" msgstr "" #: ../src/datasource_gps.c:297 ../src/vikgpslayer.c:884 #, c-format msgid "Downloading %d waypoint..." msgid_plural "Downloading %d waypoints..." msgstr[0] "Laddar ned %d waypoint..." msgstr[1] "Laddar ned %d waypoints..." #: ../src/datasource_gps.c:298 ../src/vikgpslayer.c:885 #, c-format msgid "Downloading %d trackpoint..." msgid_plural "Downloading %d trackpoints..." msgstr[0] "Laddar ned %d trackpoint..." msgstr[1] "Laddar ned %d trackpoints..." #: ../src/datasource_gps.c:303 ../src/vikgpslayer.c:890 #, c-format msgid "Downloading %d routepoint..." msgid_plural "Downloading %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/datasource_gps.c:325 ../src/datasource_gps.c:326 #: ../src/datasource_gps.c:327 #, c-format msgid "Downloaded %d out of %d %s..." msgstr "Laddade ned %d av %d %s..." #: ../src/datasource_gps.c:331 ../src/datasource_gps.c:332 #: ../src/datasource_gps.c:333 #, c-format msgid "Downloaded %d %s." msgstr "Laddade ned %d %s." #: ../src/datasource_gps.c:347 ../src/vikgpslayer.c:968 #, c-format msgid "GPS Device: %s" msgstr "GPS enhet: %s" #: ../src/datasource_gps.c:370 ../src/vikgpslayer.c:1042 #: ../src/vikgpslayer.c:1110 msgid "Status: Working..." msgstr "" #: ../src/datasource_gps.c:469 ../src/vikgpslayer.c:150 msgid "GPS Protocol:" msgstr "GPS protokoll" #. List now assigned at runtime #: ../src/datasource_gps.c:488 ../src/vikgpslayer.c:151 msgid "Serial Port:" msgstr "Seriell Port:" #: ../src/datasource_gps.c:509 msgid "" "Turn Off After Transfer\n" "(Garmin/NAViLink Only)" msgstr "" #: ../src/datasource_gps.c:512 msgid "Tracks:" msgstr "" #: ../src/datasource_gps.c:516 msgid "Routes:" msgstr "" #: ../src/datasource_gps.c:520 msgid "Waypoints:" msgstr "" #: ../src/datasource_gps.c:594 ../src/vikgpslayer.c:1305 msgid "GPS device: N/A" msgstr "GPS-enhet: Inte tillgänglig" #: ../src/datasource_osm.c:52 ../src/datasource_osm.c:53 msgid "OSM traces" msgstr "" #: ../src/datasource_osm.c:80 msgid "Page number:" msgstr "" #: ../src/datasource_osm_my_traces.c:63 ../src/datasource_osm_my_traces.c:64 msgid "OSM My Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:108 msgid "Username:" msgstr "" #: ../src/datasource_osm_my_traces.c:113 msgid "The email or username used to login to OSM" msgstr "" #: ../src/datasource_osm_my_traces.c:115 ../src/osm-traces.c:413 msgid "Password:" msgstr "Lösenord:" #: ../src/datasource_osm_my_traces.c:120 msgid "The password used to login to OSM" msgstr "" #: ../src/datasource_osm_my_traces.c:430 msgid "Description" msgstr "" #: ../src/datasource_osm_my_traces.c:445 msgid "Privacy" msgstr "" #: ../src/datasource_osm_my_traces.c:452 msgid "Within Current View" msgstr "" #: ../src/datasource_osm_my_traces.c:518 msgid "GPS Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:520 msgid "None found!" msgstr "" #: ../src/datasource_osm_my_traces.c:629 msgid "My OSM Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:645 #, c-format msgid "Unable to get trace: %s" msgstr "" #: ../src/datasource_wikipedia.c:32 msgid "Create Waypoints from Wikipedia Articles" msgstr "" #: ../src/datasource_wikipedia.c:33 msgid "Wikipedia Waypoints" msgstr "" #: ../src/dem.c:65 ../src/dem.c:79 msgid "Invalid DEM" msgstr "Ogiltig DEM" #: ../src/dem.c:121 msgid "Invalid DEM header" msgstr "" #: ../src/dem.c:190 ../src/dem.c:203 msgid "Incorrect DEM Class B record: expected 1" msgstr "" #: ../src/dem.c:360 #, c-format msgid "Couldn't map file %s: %s" msgstr "" #: ../src/download.c:112 msgid "Tile age (s):" msgstr "" #: ../src/download.c:233 #, c-format msgid "Download error: %s" msgstr "Nedladdningsfel: %s" #: ../src/download.c:313 msgid "couldn't open temp file" msgstr "kunde inte öppna temp fil" #: ../src/file.c:456 ../src/file.c:461 #, c-format msgid "Draw mode '%s' no more supported" msgstr "" #: ../src/geotag_exif.c:433 msgid "Not enough memory." msgstr "" #: ../src/geotag_exif.c:451 msgid "Setting a value for this tag is unsupported!" msgstr "" #: ../src/geotag_exif.c:470 #, c-format msgid "Too few components specified (need %d, found %d)\n" msgstr "" #: ../src/geotag_exif.c:474 msgid "Numeric value expected\n" msgstr "" #: ../src/geotag_exif.c:482 msgid "This shouldn't happen!" msgstr "" #: ../src/geotag_exif.c:552 msgid "Not yet implemented!" msgstr "" #: ../src/geotag_exif.c:565 msgid "Warning; Too many components specified!" msgstr "" #: ../src/osm-traces.c:73 msgid "Identifiable (public w/ timestamps)" msgstr "Indentifierbar (publik med tidsstämpel)" #: ../src/osm-traces.c:74 msgid "Trackable (private w/ timestamps)" msgstr "Spårbar (privat med tidsstämpel)" #: ../src/osm-traces.c:75 msgid "Public" msgstr "Publik" #: ../src/osm-traces.c:76 msgid "Private" msgstr "Privat" #: ../src/osm-traces.c:93 msgid "OSM username:" msgstr "OSM användarnamn:" #: ../src/osm-traces.c:94 msgid "OSM password:" msgstr "OSM lösenord:" #. Preferences #: ../src/osm-traces.c:151 msgid "OpenStreetMap Traces" msgstr "" #: ../src/osm-traces.c:234 #, c-format msgid "failed to upload data: HTTP response is %ld" msgstr "kunde inte ladda upp data: HTTP svar är %ld" #: ../src/osm-traces.c:239 #, c-format msgid "curl_easy_getinfo failed: %d" msgstr "curl_easy_getinfo misslyckades: %d" #: ../src/osm-traces.c:244 #, c-format msgid "curl request failed: %s" msgstr "curlförfrågan misslyckades: %s" #: ../src/osm-traces.c:275 #, c-format msgid "failed to open temporary file: %s" msgstr "kunde inte öppna temporär fil: %s" #. Success #: ../src/osm-traces.c:328 msgid "Uploaded to OSM" msgstr "" #: ../src/osm-traces.c:332 msgid "FAILED TO UPLOAD DATA TO OSM - CURL PROBLEM" msgstr "" #: ../src/osm-traces.c:335 msgid "FAILED TO UPLOAD DATA TO OSM" msgstr "" #: ../src/osm-traces.c:335 msgid "HTTP response code" msgstr "" #: ../src/osm-traces.c:348 #, c-format msgid "failed to unlink temporary file: %s" msgstr "" #: ../src/osm-traces.c:387 msgid "OSM upload" msgstr "OSM-uppladdning" #: ../src/osm-traces.c:405 msgid "Email:" msgstr "E-post:" #: ../src/osm-traces.c:410 msgid "" "The email used as login\n" "Enter the email you use to login into www.openstreetmap.org." msgstr "" #: ../src/osm-traces.c:418 msgid "" "The password used to login\n" "Enter the password you use to login into " "www.openstreetmap.org." msgstr "" "Lösenord för att logga in\n" "Skriv in lösenordet du använder för att logga in till " "www.openstreetmap.org." #: ../src/osm-traces.c:423 msgid "File's name:" msgstr "Filnamn:" #: ../src/osm-traces.c:433 msgid "" "The name of the file on OSM\n" "This is the name of the file created on the server.This is not the " "name of the local file." msgstr "" "Namnet på filen hos OSM\n" "Namnet på filen hos servern. Det är inte samma som namnet på den " "lokala filen." #: ../src/osm-traces.c:442 msgid "The description of the trace" msgstr "Beskrivningen utav spåret" #: ../src/osm-traces.c:444 msgid "Tags:" msgstr "Märken:" #: ../src/osm-traces.c:449 msgid "The tags associated to the trace" msgstr "" #: ../src/osm-traces.c:482 #, c-format msgid "Uploading %s to OSM" msgstr "Laddar upp %s till OSM" #: ../src/mapcache.c:61 msgid "Map cache memory size (MB):" msgstr "" #: ../src/print.c:53 msgid "None" msgstr "Ingen" #: ../src/print.c:54 msgid "Horizontally" msgstr "Horisontell" #: ../src/print.c:55 msgid "Vertically" msgstr "Vertikal" #: ../src/print.c:56 msgid "Both" msgstr "Båda" #: ../src/print.c:120 msgid "Image Settings" msgstr "Bildinställningar" #: ../src/print.c:546 msgid "done" msgstr "färdig" #. Page Size #: ../src/print.c:575 msgid "_Adjust Page Size and Orientation" msgstr "_Justera sidstorlek och orientering" #: ../src/print.c:591 msgid "C_enter:" msgstr "C_entrum:" #. ignore page margins #: ../src/print.c:609 msgid "Ignore Page _Margins" msgstr "Ignorera sid_marginaler" #: ../src/print.c:628 msgid "Image S_ize:" msgstr "Bild S_torlek" #: ../src/util.c:81 msgid "Could not launch web browser." msgstr "Kunde inte starta webbläsare." #: ../src/util.c:92 msgid "Could not create new email." msgstr "Kunde inte skapa nytt e-postmeddelande." #: ../src/vikcoordlayer.c:46 msgid "Color:" msgstr "Färg:" #: ../src/vikcoordlayer.c:47 msgid "Minutes Width:" msgstr "" #: ../src/vikcoordlayer.c:48 msgid "Line Thickness:" msgstr "Linjens tjocklek:" #: ../src/vikcoordlayer.c:56 msgid "Coordinate" msgstr "" #: ../src/datasource_bfilter.c:46 msgid "Max number of points:" msgstr "Max antal punkter:" #: ../src/datasource_bfilter.c:60 msgid "Simplify All Tracks..." msgstr "" #: ../src/datasource_bfilter.c:61 msgid "Simplified Tracks" msgstr "Förenklade spår" #: ../src/datasource_bfilter.c:96 ../src/datasource_bfilter.c:97 msgid "Remove Duplicate Waypoints" msgstr "Ta bort dubbla Waypoints" #: ../src/datasource_bfilter.c:129 msgid "Waypoints Inside This" msgstr "" #: ../src/datasource_bfilter.c:130 msgid "Polygonized Layer" msgstr "" #: ../src/datasource_bfilter.c:165 msgid "Waypoints Outside This" msgstr "" #: ../src/datasource_bfilter.c:166 msgid "Polygonzied Layer" msgstr "Polygoniserade lager" #: ../src/main.c:89 #, c-format msgid "Ignoring Xlib error: error code %d request code %d\n" msgstr "" #: ../src/main.c:102 msgid "Enable debug output" msgstr "Aktivera felsökningsutskrifter" #: ../src/main.c:103 msgid "Enable verbose output" msgstr "Aktivera utförlig utskrift" #: ../src/main.c:104 msgid "Show version" msgstr "Visa version" #: ../src/osm.c:106 msgid "On Disk OSM Tile Format" msgstr "" #: ../src/osm.c:121 msgid "OSM (view)" msgstr "OSM (vy)" #: ../src/osm.c:125 msgid "OSM (edit)" msgstr "OSM (redigera)" #: ../src/osm.c:129 msgid "OSM (render)" msgstr "OSM (rendera)" #. Example: http://127.0.0.1:8111/load_and_zoom?left=8.19&right=8.20&top=48.605&bottom=48.590&select=node413602999 #. JOSM or merkaartor must already be running with remote interface enabled #: ../src/osm.c:136 msgid "Local port 8111 (eg JOSM)" msgstr "" #: ../src/preferences.c:285 msgid "Preferences" msgstr "Inställningar" #: ../src/uibuilder.c:147 msgid "Take care that this password will be stored clearly in a plain file." msgstr "Notera att detta lösenord kommer sparas i klartext." #: ../src/vikaggregatelayer.c:37 msgid "Aggregate" msgstr "" #: ../src/vikdemlayer.c:101 msgid "Absolute height" msgstr "Absolut höjd" #: ../src/vikdemlayer.c:102 msgid "Height gradient" msgstr "" #: ../src/vikdemlayer.c:118 msgid "DEM Files:" msgstr "DEM Filer:" #: ../src/vikdemlayer.c:119 msgid "Download Source:" msgstr "Ladda ned källa:" #: ../src/vikdemlayer.c:120 msgid "Min Elev Color:" msgstr "" #: ../src/vikdemlayer.c:121 msgid "Type:" msgstr "Typ:" #: ../src/vikdemlayer.c:122 msgid "Min Elev:" msgstr "Min höjd:" #: ../src/vikdemlayer.c:123 msgid "Max Elev:" msgstr "Max höjd:" #: ../src/vikdemlayer.c:134 msgid "_DEM Download" msgstr "" #: ../src/vikdemlayer.c:134 msgid "DEM Download" msgstr "" #: ../src/vikdemlayer.c:188 msgid "DEM" msgstr "" #: ../src/vikdemlayer.c:284 #, c-format msgid "Number of files: %d" msgstr "" #: ../src/vikdemlayer.c:385 msgid "DEM Loading" msgstr "" #: ../src/vikdemlayer.c:889 #, c-format msgid "No SRTM data available for %f, %f" msgstr "" #: ../src/vikdemlayer.c:1149 #, c-format msgid "Downloading DEM %s" msgstr "Laddar ned DEM %s" #: ../src/vikfileentry.c:68 msgid "Browse..." msgstr "Bläddra..." #: ../src/vikfileentry.c:96 msgid "Choose file" msgstr "Välj fil" #: ../src/vikfilelist.c:48 msgid "Choose file(s)" msgstr "Välj fil(er)" #: ../src/vikfilelist.c:172 msgid "Add..." msgstr "Lägg till…" #: ../src/vikfilelist.c:173 msgid "Delete" msgstr "Ta bort" #: ../src/vikgeoreflayer.c:70 msgid "_Georef Move Map" msgstr "" #: ../src/vikgeoreflayer.c:70 msgid "Georef Move Map" msgstr "" #: ../src/vikgeoreflayer.c:77 msgid "Georef Z_oom Tool" msgstr "" #: ../src/vikgeoreflayer.c:77 msgid "Georef Zoom Tool" msgstr "" #: ../src/vikgeoreflayer.c:87 msgid "GeoRef Map" msgstr "" #: ../src/vikgeoreflayer.c:335 ../src/vikmapslayer.c:685 #, c-format msgid "Couldn't open image file: %s" msgstr "Kunde inte öppna bildfil: %s" #: ../src/vikgeoreflayer.c:365 msgid "Unexpected end of file reading World file." msgstr "Oväntat slut på filen vid läsning av World-filen." #: ../src/vikgeoreflayer.c:381 ../src/vikgeoreflayer.c:426 msgid "Choose World file" msgstr "Välj World fil" #: ../src/vikgeoreflayer.c:394 msgid "The World file you requested could not be opened for reading." msgstr "Den Word fil du har valt kunde inte öppnas för läsning." #: ../src/vikgeoreflayer.c:439 msgid "The file you requested could not be opened for writing." msgstr "Den fil du valt kunde inte öppnas för skrivning." #: ../src/vikgeoreflayer.c:456 ../src/viklayer.c:480 msgid "Layer Properties" msgstr "Lageregenskaper" #: ../src/vikgeoreflayer.c:478 msgid "World File Parameters:" msgstr "World Fil Parametrar:" #: ../src/vikgeoreflayer.c:479 msgid "Load From File..." msgstr "Ladda från fil..." #: ../src/vikgeoreflayer.c:484 msgid "Corner pixel easting:" msgstr "" #: ../src/vikgeoreflayer.c:486 msgid "the UTM \"easting\" value of the upper-right corner pixel of the map" msgstr "" #: ../src/vikgeoreflayer.c:488 msgid "Corner pixel northing:" msgstr "" #: ../src/vikgeoreflayer.c:490 msgid "the UTM \"northing\" value of the upper-right corner pixel of the map" msgstr "" #: ../src/vikgeoreflayer.c:492 msgid "X (easting) scale (mpp): " msgstr "" #: ../src/vikgeoreflayer.c:493 msgid "Y (northing) scale (mpp): " msgstr "" #: ../src/vikgeoreflayer.c:496 msgid "the scale of the map in the X direction (meters per pixel)" msgstr "" #: ../src/vikgeoreflayer.c:498 msgid "the scale of the map in the Y direction (meters per pixel)" msgstr "" #: ../src/vikgeoreflayer.c:500 msgid "Map Image:" msgstr "Kartbild:" #. Now with icons #: ../src/vikgeoreflayer.c:608 msgid "_Zoom to Fit Map" msgstr "" #: ../src/vikgeoreflayer.c:614 msgid "_Goto Map Center" msgstr "" #: ../src/vikgeoreflayer.c:620 msgid "_Export to World File" msgstr "" #: ../src/vikgoto.c:75 msgid "No goto tool available." msgstr "" #: ../src/vikgoto.c:88 ../src/vikgoto.c:107 msgid "goto" msgstr "" #: ../src/vikgoto.c:90 msgid "I don't know that place. Do you want another goto?" msgstr "" #: ../src/vikgoto.c:109 msgid "goto provider:" msgstr "" #: ../src/vikgoto.c:124 msgid "Enter address or place name:" msgstr "Ange adress eller platsnamn:" #: ../src/vikgpslayer.c:127 msgid "Data Mode" msgstr "" #: ../src/vikgpslayer.c:129 msgid "Realtime Tracking Mode" msgstr "" #: ../src/vikgpslayer.c:137 msgid "Keep vehicle at center" msgstr "" #: ../src/vikgpslayer.c:138 msgid "Keep vehicle on screen" msgstr "" #: ../src/vikgpslayer.c:139 msgid "Disable" msgstr "" #: ../src/vikgpslayer.c:152 msgid "Download Tracks:" msgstr "" #: ../src/vikgpslayer.c:153 msgid "Upload Tracks:" msgstr "" #: ../src/vikgpslayer.c:154 msgid "Download Routes:" msgstr "" #: ../src/vikgpslayer.c:155 msgid "Upload Routes:" msgstr "" #: ../src/vikgpslayer.c:156 msgid "Download Waypoints:" msgstr "" #: ../src/vikgpslayer.c:157 msgid "Upload Waypoints:" msgstr "" #: ../src/vikgpslayer.c:159 msgid "Recording tracks" msgstr "Spelar in spår" #: ../src/vikgpslayer.c:160 msgid "Jump to current position on start" msgstr "Hoppa till nuvarande position vid start" #: ../src/vikgpslayer.c:161 msgid "Moving Map Method:" msgstr "Kartflyttningsläge:" #: ../src/vikgpslayer.c:162 msgid "Gpsd Host:" msgstr "Gpsd Värd:" #: ../src/vikgpslayer.c:163 msgid "Gpsd Port:" msgstr "Gpsd Port:" #: ../src/vikgpslayer.c:164 msgid "Gpsd Retry Interval (seconds):" msgstr "" #: ../src/vikgpslayer.c:179 msgid "GPS" msgstr "" #: ../src/vikgpslayer.c:242 ../src/vikgpslayer.c:1258 msgid "GPS Download" msgstr "GPS nedladdning" #: ../src/vikgpslayer.c:242 ../src/vikgpslayer.c:1258 #: ../src/viktrwlayer.c:3094 msgid "GPS Upload" msgstr "GPS uppladdning" #: ../src/vikgpslayer.c:244 msgid "GPS Realtime Tracking" msgstr "GPS Realtidsspårning" #: ../src/vikgpslayer.c:451 msgid "Unknown GPS Protocol" msgstr "Okänt GPS Protokoll" #: ../src/vikgpslayer.c:469 msgid "Unknown serial port device" msgstr "Okänd serialportsenhet" #: ../src/vikgpslayer.c:572 #, c-format msgid "%s: unknown parameter" msgstr "%s: okänd parameter" #. Now with icons #: ../src/vikgpslayer.c:693 msgid "_Upload to GPS" msgstr "" #: ../src/vikgpslayer.c:699 msgid "Download from _GPS" msgstr "Ladda ned från _GPS" #: ../src/vikgpslayer.c:720 msgid "Empty _Realtime" msgstr "" #: ../src/vikgpslayer.c:727 msgid "E_mpty Upload" msgstr "" #: ../src/vikgpslayer.c:733 msgid "_Empty Download" msgstr "" #: ../src/vikgpslayer.c:739 msgid "Empty _All" msgstr "" #. #. NB It's not fatal if this gives 2 for example! Hence removal of the g_assert #. This happens when copied GPS layer is deleted (not sure why the number_handlers would be 2) #. I don't think there's any side effects and certainly better than the program just aborting #. #: ../src/vikgpslayer.c:756 #, c-format msgid "Unexpected number of disconnected handlers: %d" msgstr "" #: ../src/vikgpslayer.c:898 #, c-format msgid "Uploading %d waypoint..." msgid_plural "Uploading %d waypoints..." msgstr[0] "Laddar upp %d waypoint..." msgstr[1] "Laddar upp %d waypoints..." #: ../src/vikgpslayer.c:899 #, c-format msgid "Uploading %d trackpoint..." msgid_plural "Uploading %d trackpoints..." msgstr[0] "Laddar upp %d trackpoint..." msgstr[1] "Laddar upp %d trackpoints..." #: ../src/vikgpslayer.c:900 #, c-format msgid "Uploading %d routepoint..." msgid_plural "Uploading %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:925 #, c-format msgid "Downloaded %d out of %d waypoint..." msgid_plural "Downloaded %d out of %d waypoints..." msgstr[0] "Laddade ned %d av %d waypoint..." msgstr[1] "Laddade ned %d av %d waypoints..." #: ../src/vikgpslayer.c:926 #, c-format msgid "Downloaded %d out of %d trackpoint..." msgid_plural "Downloaded %d out of %d trackpoints..." msgstr[0] "Laddade ned %d av %d trackpoint..." msgstr[1] "Laddade ned %d av %d trackpoints..." #: ../src/vikgpslayer.c:927 #, c-format msgid "Downloaded %d out of %d routepoint..." msgid_plural "Downloaded %d out of %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:932 #, c-format msgid "Uploaded %d out of %d waypoint..." msgid_plural "Uploaded %d out of %d waypoints..." msgstr[0] "Laddade upp %d av %d waypoint..." msgstr[1] "Laddade upp %d av %d waypoints..." #: ../src/vikgpslayer.c:933 #, c-format msgid "Uploaded %d out of %d trackpoint..." msgid_plural "Uploaded %d out of %d trackpoints..." msgstr[0] "Laddade upp %d av %d trackpoint..." msgstr[1] "Laddade upp %d av %d trackpoints..." #: ../src/vikgpslayer.c:934 #, c-format msgid "Uploaded %d out of %d routepoint..." msgid_plural "Uploaded %d out of %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:942 #, c-format msgid "Downloaded %d waypoint" msgid_plural "Downloaded %d waypoints" msgstr[0] "Laddade ned %d waypoint" msgstr[1] "Laddade ned %d waypoints" #: ../src/vikgpslayer.c:943 #, c-format msgid "Downloaded %d trackpoint" msgid_plural "Downloaded %d trackpoints" msgstr[0] "Laddade ned %d trackpoint" msgstr[1] "Laddade ned %d trackpoints" #: ../src/vikgpslayer.c:944 #, c-format msgid "Downloaded %d routepoint" msgid_plural "Downloaded %d routepoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:949 #, c-format msgid "Uploaded %d waypoint" msgid_plural "Uploaded %d waypoints" msgstr[0] "Laddade upp %d waypoint" msgstr[1] "Laddade upp %d waypoints" #: ../src/vikgpslayer.c:950 #, c-format msgid "Uploaded %d trackpoint" msgid_plural "Uploaded %d trackpoints" msgstr[0] "Laddade upp %d trackpoint" msgstr[1] "Laddade upp %d trackpoints" #: ../src/vikgpslayer.c:951 #, c-format msgid "Uploaded %d routepoint" msgid_plural "Uploaded %d routepoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:1180 msgid "Error: couldn't find gpsbabel." msgstr "Fel: kunde inte hitta gpsbabel." #: ../src/vikgpslayer.c:1269 msgid "Warning - GPS Upload items may overwrite each other" msgstr "" #: ../src/vikgpslayer.c:1301 msgid "Status: detecting gpsbabel" msgstr "Status: letar efter gpsbabel" #: ../src/vikgpslayer.c:1332 msgid "No GPS items selected for transfer." msgstr "" #: ../src/vikgpslayer.c:1347 msgid "Could not turn off device." msgstr "" #: ../src/vikgpslayer.c:1385 msgid "Are you sure you want to delete GPS Upload data?" msgstr "" #: ../src/vikgpslayer.c:1398 msgid "Are you sure you want to delete GPS Download data?" msgstr "" #: ../src/vikgpslayer.c:1412 msgid "Are you sure you want to delete GPS Realtime data?" msgstr "" #: ../src/vikgpslayer.c:1425 msgid "Are you sure you want to delete All GPS data?" msgstr "" #: ../src/viklayerspanel.c:55 msgid "/C_ut" msgstr "/C_ut" #: ../src/viklayerspanel.c:56 msgid "/_Copy" msgstr "/_Kopiera" #: ../src/viklayerspanel.c:57 msgid "/_Paste" msgstr "/_Klistra in" #: ../src/viklayerspanel.c:58 msgid "/_Delete" msgstr "/_Ta bort" #: ../src/viklayerspanel.c:59 msgid "/New Layer" msgstr "/Nytt lager" #: ../src/viklayerspanel.c:127 msgid "Top Layer" msgstr "" #: ../src/viklayerspanel.c:143 msgid "Add new layer" msgstr "Lägg till ett nytt lager" #: ../src/viklayerspanel.c:150 msgid "Remove selected layer" msgstr "Ta bort valt lager" #: ../src/viklayerspanel.c:157 msgid "Move selected layer up" msgstr "Flytta upp valt lager" #: ../src/viklayerspanel.c:164 msgid "Move selected layer down" msgstr "Flytta ned valt lager" #: ../src/viklayerspanel.c:171 msgid "Cut selected layer" msgstr "Skär valt lager" #: ../src/viklayerspanel.c:178 msgid "Copy selected layer" msgstr "Kopiera valt lager" #: ../src/viklayerspanel.c:185 msgid "Paste layer below selected layer" msgstr "Klistra in lager under valt lager" #. TODO: FIXME: if name has a '/' in it it will get all messed up. why not have an itemfactory field with #. name, icon, shortcut, etc.? #: ../src/viklayerspanel.c:204 ../src/vikwindow.c:3292 #, c-format msgid "New _%s Layer" msgstr "" #: ../src/viklayerspanel.c:511 msgid "Aggregate Layers have no settable properties." msgstr "" #: ../src/viklayerspanel.c:555 msgid "You cannot cut the Top Layer." msgstr "" #: ../src/viklayerspanel.c:600 #, c-format msgid "Are you sure you want to delete %s?" msgstr "" #: ../src/viklayerspanel.c:617 msgid "You cannot delete the Top Layer." msgstr "" #: ../src/viklayerspanel.c:701 msgid "Are you sure you wish to delete all layers?" msgstr "Är du säker på att du vill ta bort alla lager?" #. ******* MAPZOOMS ******** #: ../src/vikmapslayer.c:91 msgid "Use Viking Zoom Level" msgstr "" #: ../src/vikmapslayer.c:124 msgid "Map Type:" msgstr "Karttyp:" #: ../src/vikmapslayer.c:125 msgid "Maps Directory:" msgstr "" #: ../src/vikmapslayer.c:126 msgid "Alpha:" msgstr "Alfa:" #: ../src/vikmapslayer.c:127 msgid "Control the Alpha value for transparency effects" msgstr "" #: ../src/vikmapslayer.c:128 msgid "Autodownload maps:" msgstr "" #: ../src/vikmapslayer.c:129 msgid "Autodownload Only Gets Missing Maps:" msgstr "" #: ../src/vikmapslayer.c:130 msgid "" "Using this option avoids attempting to update already acquired tiles. This " "can be useful if you want to restrict the network usage, without having to " "resort to manual control. Only applies when 'Autodownload Maps' is on." msgstr "" #: ../src/vikmapslayer.c:131 msgid "Zoom Level:" msgstr "" #: ../src/vikmapslayer.c:132 msgid "" "Determines the method of displaying map tiles for the current zoom level. " "'Viking Zoom Level' uses the best matching level, otherwise setting a fixed " "value will always use map tiles of the specified value regardless of the " "actual zoom level." msgstr "" #: ../src/vikmapslayer.c:146 msgid "_Maps Download" msgstr "" #: ../src/vikmapslayer.c:146 msgid "Maps Download" msgstr "" #: ../src/vikmapslayer.c:161 msgid "Map" msgstr "Karta" #: ../src/vikmapslayer.c:249 msgid "Default maplayer directory:" msgstr "" #: ../src/vikmapslayer.c:249 msgid "Choose a directory to store cached Map tiles for this layer" msgstr "" #: ../src/vikmapslayer.c:505 msgid "Unknown map type" msgstr "Okänd karttyp" #: ../src/vikmapslayer.c:516 msgid "Unknown Map Zoom" msgstr "" #: ../src/vikmapslayer.c:589 #, c-format msgid "" "New map cannot be displayed in the current drawmode.\n" "Select \"%s\" from View menu to view it." msgstr "" #: ../src/vikmapslayer.c:753 #, c-format msgid "" "Cowardly refusing to draw tiles or existence of tiles beyond %d zoom out " "factor" msgstr "" #: ../src/vikmapslayer.c:1157 #, c-format msgid "Redownloading up to %d %s map..." msgid_plural "Redownloading up to %d %s maps..." msgstr[0] "" msgstr[1] "" #: ../src/vikmapslayer.c:1159 #, c-format msgid "Redownloading %d %s map..." msgid_plural "Redownloading %d %s maps..." msgstr[0] "" msgstr[1] "" #: ../src/vikmapslayer.c:1163 ../src/vikmapslayer.c:1238 #, c-format msgid "Downloading %d %s map..." msgid_plural "Downloading %d %s maps..." msgstr[0] "" msgstr[1] "" #: ../src/vikmapslayer.c:1311 #, c-format msgid "" "\n" "Source: %s\n" "\n" "Tile File: %s\n" "Tile File Timestamp: %s" msgstr "" #: ../src/vikmapslayer.c:1318 #, c-format msgid "" "Source: %s\n" "\n" "No Tile File!" msgstr "" #: ../src/vikmapslayer.c:1356 msgid "Redownload _Bad Map(s)" msgstr "" #: ../src/vikmapslayer.c:1360 msgid "Redownload _New Map(s)" msgstr "" #: ../src/vikmapslayer.c:1364 msgid "Redownload _All Map(s)" msgstr "" #: ../src/vikmapslayer.c:1368 msgid "_Show Tile Information" msgstr "" #: ../src/vikmapslayer.c:1449 #, c-format msgid "" "Wrong drawmode for this map.\n" "Select \"%s\" from View menu and try again." msgstr "" #: ../src/vikmapslayer.c:1454 msgid "Wrong zoom level for this map." msgstr "" #. Now with icons #: ../src/vikmapslayer.c:1485 msgid "Download _Missing Onscreen Maps" msgstr "" #: ../src/vikmapslayer.c:1492 msgid "Download _New Onscreen Maps" msgstr "" #: ../src/vikmapslayer.c:1499 msgid "Reload _All Onscreen Maps" msgstr "" #: ../src/viktreeview.c:263 msgid "Layer Name" msgstr "Lagernamn" #: ../src/viktreeview.c:742 #, c-format msgid "delete data from %s\n" msgstr "Ta bort data från %s\n" #: ../src/viktrwlayer.c:377 msgid "Create _Waypoint" msgstr "" #: ../src/viktrwlayer.c:377 msgid "Create Waypoint" msgstr "Skapa waypoint" #: ../src/viktrwlayer.c:383 msgid "Create _Track" msgstr "" #: ../src/viktrwlayer.c:383 msgid "Create Track" msgstr "Skapa spår" #: ../src/viktrwlayer.c:392 msgid "Create _Route" msgstr "" #: ../src/viktrwlayer.c:392 msgid "Create Route" msgstr "" #: ../src/viktrwlayer.c:401 msgid "_Edit Waypoint" msgstr "" #: ../src/viktrwlayer.c:401 msgid "Edit Waypoint" msgstr "Redigera waypoint" #: ../src/viktrwlayer.c:409 msgid "Edit Trac_kpoint" msgstr "" #: ../src/viktrwlayer.c:409 msgid "Edit Trackpoint" msgstr "Redigera trackpoint" #: ../src/viktrwlayer.c:417 msgid "Show P_icture" msgstr "" #: ../src/viktrwlayer.c:417 msgid "Show Picture" msgstr "Visa Bild" #: ../src/viktrwlayer.c:424 msgid "Route _Finder" msgstr "" #: ../src/viktrwlayer.c:424 msgid "Route Finder" msgstr "" #. ***** PARAMETERS ***** #: ../src/viktrwlayer.c:447 ../src/viktrwlayer.c:1942 #: ../src/viktrwlayer.c:1944 msgid "Waypoints" msgstr "Waypoints" #: ../src/viktrwlayer.c:447 ../src/viktrwlayer.c:1933 #: ../src/viktrwlayer.c:1935 msgid "Tracks" msgstr "Spår" #: ../src/viktrwlayer.c:447 msgid "Waypoint Images" msgstr "Waypoint bilder" #: ../src/viktrwlayer.c:450 msgid "Draw by Track" msgstr "" #: ../src/viktrwlayer.c:450 msgid "Draw by Speed" msgstr "" #: ../src/viktrwlayer.c:450 msgid "All Tracks Same Color" msgstr "" #: ../src/viktrwlayer.c:451 msgid "Filled Square" msgstr "Fylld ruta" #: ../src/viktrwlayer.c:451 msgid "Square" msgstr "Kvadrat" #: ../src/viktrwlayer.c:451 msgid "Circle" msgstr "Cirkel" #: ../src/viktrwlayer.c:451 msgid "X" msgstr "X" #: ../src/viktrwlayer.c:477 msgid "Extra Extra Small" msgstr "" #: ../src/viktrwlayer.c:478 msgid "Extra Small" msgstr "" #: ../src/viktrwlayer.c:479 msgid "Small" msgstr "" #: ../src/viktrwlayer.c:480 msgid "Medium" msgstr "" #: ../src/viktrwlayer.c:481 msgid "Large" msgstr "" #: ../src/viktrwlayer.c:482 msgid "Extra Large" msgstr "" #: ../src/viktrwlayer.c:483 msgid "Extra Extra Large" msgstr "" #: ../src/viktrwlayer.c:491 msgid "Track Drawing Mode:" msgstr "" #: ../src/viktrwlayer.c:492 msgid "All Tracks Color:" msgstr "" #: ../src/viktrwlayer.c:493 msgid "The color used when 'All Tracks Same Color' drawing mode is selected" msgstr "" #: ../src/viktrwlayer.c:494 msgid "Draw Track Lines" msgstr "" #: ../src/viktrwlayer.c:495 msgid "Track Thickness:" msgstr "" #: ../src/viktrwlayer.c:496 msgid "Draw Track Direction" msgstr "" #: ../src/viktrwlayer.c:497 msgid "Direction Size:" msgstr "" #: ../src/viktrwlayer.c:498 msgid "Draw Trackpoints" msgstr "" #: ../src/viktrwlayer.c:499 msgid "Trackpoint Size:" msgstr "" #: ../src/viktrwlayer.c:500 msgid "Draw Elevation" msgstr "" #: ../src/viktrwlayer.c:501 msgid "Draw Elevation Height %:" msgstr "" #: ../src/viktrwlayer.c:503 msgid "Draw Stops" msgstr "" #: ../src/viktrwlayer.c:504 msgid "" "Whether to draw a marker when trackpoints are at the same position but over " "the minimum stop length apart in time" msgstr "" #: ../src/viktrwlayer.c:505 msgid "Min Stop Length (seconds):" msgstr "" #: ../src/viktrwlayer.c:507 msgid "Track BG Thickness:" msgstr "" #: ../src/viktrwlayer.c:508 msgid "Track Background Color" msgstr "" #: ../src/viktrwlayer.c:509 msgid "Draw by Speed Factor (%):" msgstr "" #: ../src/viktrwlayer.c:510 msgid "" "The percentage factor away from the average speed determining the color used" msgstr "" #: ../src/viktrwlayer.c:512 msgid "Draw Labels" msgstr "" #: ../src/viktrwlayer.c:513 msgid "Waypoint Font Size:" msgstr "" #: ../src/viktrwlayer.c:514 msgid "Waypoint Color:" msgstr "Waypoint färg:" #: ../src/viktrwlayer.c:515 msgid "Waypoint Text:" msgstr "Waypoint text:" #: ../src/viktrwlayer.c:516 msgid "Background:" msgstr "Bakgrund:" #: ../src/viktrwlayer.c:517 msgid "Fake BG Color Translucency:" msgstr "" #: ../src/viktrwlayer.c:518 msgid "Waypoint marker:" msgstr "Waypoint markör:" #: ../src/viktrwlayer.c:519 msgid "Waypoint size:" msgstr "Waypoint storlek:" #: ../src/viktrwlayer.c:520 msgid "Draw Waypoint Symbols:" msgstr "" #: ../src/viktrwlayer.c:522 msgid "Draw Waypoint Images" msgstr "" #: ../src/viktrwlayer.c:523 msgid "Image Size (pixels):" msgstr "Bildstorlek (pixlar):" #: ../src/viktrwlayer.c:524 msgid "Image Alpha:" msgstr "" #: ../src/viktrwlayer.c:525 msgid "Image Memory Cache Size:" msgstr "" #: ../src/viktrwlayer.c:610 msgid "TrackWaypoint" msgstr "" #: ../src/viktrwlayer.c:1951 ../src/viktrwlayer.c:1953 msgid "Routes" msgstr "" #: ../src/viktrwlayer.c:2144 #, c-format msgid " in %d:%02d hrs:mins" msgstr "" #: ../src/viktrwlayer.c:2148 #, c-format msgid "" "\n" "%sTotal Length %.1f %s%s" msgstr "" #: ../src/viktrwlayer.c:2154 #, c-format msgid "Tracks: %d - Waypoints: %d - Routes: %d%s" msgstr "" #: ../src/viktrwlayer.c:2174 #, c-format msgid "Tracks: %d" msgstr "" #: ../src/viktrwlayer.c:2184 #, c-format msgid "Routes: %d" msgstr "" #: ../src/viktrwlayer.c:2215 #, c-format msgid "- %d:%02d hrs:mins" msgstr "" #: ../src/viktrwlayer.c:2223 #, c-format msgid "%s%.1f km %s" msgstr "" #: ../src/viktrwlayer.c:2226 #, c-format msgid "%s%.1f miles %s" msgstr "" #: ../src/viktrwlayer.c:2240 #, c-format msgid "Waypoints: %d" msgstr "" #: ../src/viktrwlayer.c:2266 #, c-format msgid "Trkpt: Alt %dft" msgstr "" #. VIK_UNITS_HEIGHT_METRES: #: ../src/viktrwlayer.c:2270 #, c-format msgid "Trkpt: Alt %dm" msgstr "" #. Compact date time format #: ../src/viktrwlayer.c:2277 #, c-format msgid " | Time %x %X" msgstr "" #: ../src/viktrwlayer.c:2295 #, c-format msgid " | Track: %s" msgstr "" #. Combine parts to make overall message #: ../src/viktrwlayer.c:2299 #, c-format msgid "%s%s | %s %s %s" msgstr "" #: ../src/viktrwlayer.c:2314 #, c-format msgid "Wpt: Alt %dft" msgstr "" #. VIK_UNITS_HEIGHT_METRES: #: ../src/viktrwlayer.c:2318 #, c-format msgid "Wpt: Alt %dm" msgstr "" #. Add comment if available #: ../src/viktrwlayer.c:2333 #, c-format msgid "%s | %s %s | Comment: %s" msgstr "" #: ../src/viktrwlayer.c:2335 #, c-format msgid "%s | %s %s" msgstr "" #: ../src/viktrwlayer.c:2563 ../src/viktrwlayer.c:2634 msgid "This layer has no waypoints or trackpoints." msgstr "Detta lager har inga waypoints eller trackpoints." #: ../src/viktrwlayer.c:2661 ../src/vikwindow.c:2407 ../src/vikwindow.c:2848 #, c-format msgid "The file \"%s\" exists, do you wish to overwrite it?" msgstr "Filen \"%s\" finns redan, vill du skriva över den?" #: ../src/viktrwlayer.c:2671 ../src/vikwindow.c:2429 msgid "The filename you requested could not be opened for writing." msgstr "" #: ../src/viktrwlayer.c:2676 ../src/viktrwlayer.c:2681 #: ../src/viktrwlayer.c:2691 ../src/viktrwlayer.c:2703 msgid "Export Layer" msgstr "Exportera lager" #: ../src/viktrwlayer.c:2720 msgid "Could not create temporary file for export." msgstr "" #: ../src/viktrwlayer.c:2729 #, c-format msgid "Could not launch %s." msgstr "" #: ../src/viktrwlayer.c:2773 msgid "Export Track as GPX" msgstr "" #: ../src/viktrwlayer.c:2795 msgid "Find" msgstr "" #: ../src/viktrwlayer.c:2805 msgid "Waypoint Name:" msgstr "Waypoint namn:" #: ../src/viktrwlayer.c:2822 msgid "Waypoint not found in this layer." msgstr "Waypoint hittades inte i detta lager." #: ../src/viktrwlayer.c:3090 msgid "Can not upload invisible track." msgstr "" #: ../src/viktrwlayer.c:3192 ../src/viktrwlayer.c:7785 msgid "Track" msgstr "" #: ../src/viktrwlayer.c:3215 ../src/viktrwlayer.c:7817 msgid "Route" msgstr "" #: ../src/viktrwlayer.c:3296 ../src/viktrwlayer.c:6265 #: ../src/viktrwlayer.c:6314 msgid "_Finish Route" msgstr "" #: ../src/viktrwlayer.c:3298 ../src/viktrwlayer.c:6223 #: ../src/viktrwlayer.c:6312 msgid "_Finish Track" msgstr "" #. Now with icons #: ../src/viktrwlayer.c:3310 msgid "_View Layer" msgstr "" #: ../src/viktrwlayer.c:3317 msgid "V_iew" msgstr "" #: ../src/viktrwlayer.c:3323 msgid "View All _Tracks" msgstr "" #: ../src/viktrwlayer.c:3328 msgid "View All _Routes" msgstr "" #: ../src/viktrwlayer.c:3333 msgid "View All _Waypoints" msgstr "" #: ../src/viktrwlayer.c:3338 msgid "_Goto Center of Layer" msgstr "" #: ../src/viktrwlayer.c:3344 ../src/viktrwlayer.c:6199 msgid "Goto _Waypoint..." msgstr "" #: ../src/viktrwlayer.c:3350 msgid "_Export Layer" msgstr "" #: ../src/viktrwlayer.c:3356 msgid "Export as GPS_Point..." msgstr "" #: ../src/viktrwlayer.c:3361 msgid "Export as GPS_Mapper..." msgstr "" #: ../src/viktrwlayer.c:3366 msgid "Export as _GPX..." msgstr "" #: ../src/viktrwlayer.c:3371 msgid "Export as _KML..." msgstr "" #: ../src/viktrwlayer.c:3376 msgid "Open with External Program_1: " msgstr "" #: ../src/viktrwlayer.c:3383 msgid "Open with External Program_2: " msgstr "" #: ../src/viktrwlayer.c:3391 ../src/vikwindow.c:3145 msgid "_New" msgstr "_Ny" #: ../src/viktrwlayer.c:3397 msgid "New _Waypoint..." msgstr "" #: ../src/viktrwlayer.c:3403 msgid "New _Track" msgstr "" #: ../src/viktrwlayer.c:3411 msgid "New _Route" msgstr "" #: ../src/viktrwlayer.c:3420 ../src/viktrwlayer.c:6597 msgid "Geotag _Images..." msgstr "" #: ../src/viktrwlayer.c:3427 msgid "_Acquire" msgstr "" #: ../src/viktrwlayer.c:3433 ../src/vikwindow.c:3150 msgid "From _GPS..." msgstr "Från _GPS..." #: ../src/viktrwlayer.c:3439 msgid "From Google _Directions..." msgstr "" #: ../src/viktrwlayer.c:3446 msgid "From _OSM Traces..." msgstr "" #: ../src/viktrwlayer.c:3451 msgid "From _My OSM Traces..." msgstr "" #: ../src/viktrwlayer.c:3459 ../src/vikwindow.c:3166 msgid "From _Wikipedia Waypoints" msgstr "" #: ../src/viktrwlayer.c:3465 msgid "Within _Layer Bounds" msgstr "" #: ../src/viktrwlayer.c:3471 msgid "Within _Current View" msgstr "" #: ../src/viktrwlayer.c:3479 msgid "From Geo_caching..." msgstr "" #: ../src/viktrwlayer.c:3486 ../src/vikwindow.c:3163 msgid "From Geotagged _Images..." msgstr "" #: ../src/viktrwlayer.c:3492 msgid "From _File..." msgstr "" #: ../src/viktrwlayer.c:3498 ../src/viktrwlayer.c:6542 msgid "_Upload" msgstr "" #: ../src/viktrwlayer.c:3504 msgid "Upload to _GPS..." msgstr "" #: ../src/viktrwlayer.c:3511 ../src/viktrwlayer.c:6570 msgid "Upload to _OSM..." msgstr "" #: ../src/viktrwlayer.c:3519 msgid "De_lete" msgstr "" #: ../src/viktrwlayer.c:3525 msgid "Delete All _Tracks" msgstr "" #: ../src/viktrwlayer.c:3531 msgid "Delete Tracks _From Selection..." msgstr "" #: ../src/viktrwlayer.c:3537 ../src/viktrwlayer.c:6290 msgid "Delete _All Routes" msgstr "" #: ../src/viktrwlayer.c:3543 ../src/viktrwlayer.c:6296 msgid "_Delete Routes From Selection..." msgstr "" #: ../src/viktrwlayer.c:3549 msgid "Delete All _Waypoints" msgstr "" #: ../src/viktrwlayer.c:3555 msgid "Delete Waypoints From _Selection..." msgstr "" #: ../src/viktrwlayer.c:4128 #, c-format msgid "Are you sure you want to delete all tracks in %s?" msgstr "" #: ../src/viktrwlayer.c:4138 #, c-format msgid "Are you sure you want to delete all routes in %s?" msgstr "" #: ../src/viktrwlayer.c:4148 #, c-format msgid "Are you sure you want to delete all waypoints in %s?" msgstr "" #: ../src/viktrwlayer.c:4165 #, c-format msgid "Are you sure you want to delete the waypoint \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4178 #, c-format msgid "Are you sure you want to delete the track \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4191 #, c-format msgid "Are you sure you want to delete the route \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4351 ../src/viktrwlayer.c:4922 msgid "" "Converting a track to a route removes extra track data such as segments, " "timestamps, etc...\n" "Do you want to continue?" msgstr "" #: ../src/viktrwlayer.c:4711 msgid "Failed. No other tracks with timestamps in this layer found" msgstr "" #: ../src/viktrwlayer.c:4713 msgid "Failed. No other tracks without timestamps in this layer found" msgstr "" #: ../src/viktrwlayer.c:4732 msgid "Merge with..." msgstr "" #: ../src/viktrwlayer.c:4733 msgid "Select route to merge with" msgstr "" #: ../src/viktrwlayer.c:4733 msgid "Select track to merge with" msgstr "" #: ../src/viktrwlayer.c:4818 ../src/viktrwlayer.c:4895 msgid "Append Route" msgstr "" #: ../src/viktrwlayer.c:4818 ../src/viktrwlayer.c:4895 msgid "Append Track" msgstr "" #: ../src/viktrwlayer.c:4819 msgid "Select the route to append after the current route" msgstr "" #: ../src/viktrwlayer.c:4820 msgid "Select the track to append after the current track" msgstr "" #: ../src/viktrwlayer.c:4896 msgid "Select the track to append after the current route" msgstr "" #: ../src/viktrwlayer.c:4897 msgid "Select the route to append after the current track" msgstr "" #: ../src/viktrwlayer.c:4957 #, c-format msgid "%d segment merged" msgid_plural "%d segments merged" msgstr[0] "" msgstr[1] "" #: ../src/viktrwlayer.c:4973 msgid "Failed. This track does not have timestamp" msgstr "" #: ../src/viktrwlayer.c:4985 msgid "Failed. No other track in this layer has timestamp" msgstr "" #: ../src/viktrwlayer.c:4992 msgid "Merge Threshold..." msgstr "" #: ../src/viktrwlayer.c:4993 msgid "Merge when time between tracks less than:" msgstr "" #: ../src/viktrwlayer.c:5128 msgid "Split Threshold..." msgstr "" #: ../src/viktrwlayer.c:5129 msgid "Split when time between trackpoints exceeds:" msgstr "" #: ../src/viktrwlayer.c:5205 msgid "Split Every Nth Point" msgstr "" #: ../src/viktrwlayer.c:5206 msgid "Split on every Nth point:" msgstr "" #: ../src/viktrwlayer.c:5312 msgid "Can not split track as it has no segments" msgstr "" #: ../src/viktrwlayer.c:5340 ../src/viktrwlayer.c:5370 #, c-format msgid "Deleted %ld point" msgid_plural "Deleted %ld points" msgstr[0] "" msgstr[1] "" #: ../src/viktrwlayer.c:5531 msgid "Internal Error in vik_trw_layer_uniquify_tracks" msgstr "" #: ../src/viktrwlayer.c:5588 ../src/viktrwlayer.c:5635 #: ../src/viktrwlayer.c:5814 msgid "" "Multiple entries with the same name exist. This method only works with " "unique names. Force unique names now?" msgstr "" #: ../src/viktrwlayer.c:5599 msgid "No tracks found" msgstr "" #: ../src/viktrwlayer.c:5607 ../src/viktrwlayer.c:5654 #: ../src/viktrwlayer.c:5834 msgid "Delete Selection" msgstr "" #: ../src/viktrwlayer.c:5608 msgid "Select tracks to delete" msgstr "" #: ../src/viktrwlayer.c:5646 msgid "No routes found" msgstr "" #: ../src/viktrwlayer.c:5655 msgid "Select routes to delete" msgstr "" #: ../src/viktrwlayer.c:5761 msgid "Internal Error in vik_trw_layer_uniquify_waypoints" msgstr "" #: ../src/viktrwlayer.c:5824 msgid "No waypoints found" msgstr "" #: ../src/viktrwlayer.c:5835 msgid "Select waypoints to delete" msgstr "" #: ../src/viktrwlayer.c:5896 #, c-format msgid "" "A waypoint with the name \"%s\" already exists. Really rename to the same " "name?" msgstr "" #: ../src/viktrwlayer.c:5926 #, c-format msgid "" "A track with the name \"%s\" already exists. Really rename to the same name?" msgstr "" #: ../src/viktrwlayer.c:5963 #, c-format msgid "" "A route with the name \"%s\" already exists. Really rename to the same name?" msgstr "" #: ../src/viktrwlayer.c:6085 ../src/viktrwlayer.c:6337 msgid "_Goto" msgstr "" #: ../src/viktrwlayer.c:6104 msgid "_Visit Geocache Webpage" msgstr "" #: ../src/viktrwlayer.c:6123 msgid "_Show Picture..." msgstr "" #: ../src/viktrwlayer.c:6131 msgid "Update Geotag on _Image" msgstr "" #: ../src/viktrwlayer.c:6137 msgid "_Update" msgstr "" #: ../src/viktrwlayer.c:6142 msgid "Update and _Keep File Timestamp" msgstr "" #: ../src/viktrwlayer.c:6153 msgid "Visit _Webpage" msgstr "" #: ../src/viktrwlayer.c:6184 msgid "_New Waypoint..." msgstr "" #: ../src/viktrwlayer.c:6193 msgid "_View All Waypoints" msgstr "" #: ../src/viktrwlayer.c:6205 msgid "Delete _All Waypoints" msgstr "" #: ../src/viktrwlayer.c:6211 msgid "_Delete Waypoints From Selection..." msgstr "" #: ../src/viktrwlayer.c:6233 msgid "_View All Tracks" msgstr "" #: ../src/viktrwlayer.c:6239 msgid "_New Track" msgstr "" #: ../src/viktrwlayer.c:6247 msgid "Delete _All Tracks" msgstr "" #: ../src/viktrwlayer.c:6253 msgid "_Delete Tracks From Selection..." msgstr "" #: ../src/viktrwlayer.c:6276 msgid "_View All Routes" msgstr "" #: ../src/viktrwlayer.c:6282 msgid "_New Route" msgstr "" #: ../src/viktrwlayer.c:6327 msgid "_View Track" msgstr "" #: ../src/viktrwlayer.c:6329 msgid "_View Route" msgstr "" #: ../src/viktrwlayer.c:6343 msgid "_Startpoint" msgstr "" #: ../src/viktrwlayer.c:6349 msgid "\"_Center\"" msgstr "" #: ../src/viktrwlayer.c:6355 msgid "_Endpoint" msgstr "" #: ../src/viktrwlayer.c:6361 msgid "_Highest Altitude" msgstr "" #: ../src/viktrwlayer.c:6367 msgid "_Lowest Altitude" msgstr "" #: ../src/viktrwlayer.c:6375 msgid "_Maximum Speed" msgstr "" #: ../src/viktrwlayer.c:6384 msgid "Co_mbine" msgstr "" #: ../src/viktrwlayer.c:6392 msgid "_Merge By Time..." msgstr "" #: ../src/viktrwlayer.c:6397 msgid "Merge _Segments" msgstr "" #: ../src/viktrwlayer.c:6403 msgid "Merge _With Other Tracks..." msgstr "" #: ../src/viktrwlayer.c:6409 msgid "_Append Track..." msgstr "" #: ../src/viktrwlayer.c:6411 msgid "_Append Route..." msgstr "" #: ../src/viktrwlayer.c:6417 msgid "Append _Route..." msgstr "" #: ../src/viktrwlayer.c:6419 msgid "Append _Track..." msgstr "" #: ../src/viktrwlayer.c:6426 msgid "_Split" msgstr "" #: ../src/viktrwlayer.c:6434 msgid "_Split By Time..." msgstr "" #. ATM always enable this entry - don't want to have to analyse the track before displaying the menu - to keep the menu speedy #: ../src/viktrwlayer.c:6440 msgid "Split Se_gments" msgstr "" #: ../src/viktrwlayer.c:6446 msgid "Split By _Number of Points..." msgstr "" #: ../src/viktrwlayer.c:6451 msgid "Split at _Trackpoint" msgstr "" #: ../src/viktrwlayer.c:6460 msgid "Delete Poi_nts" msgstr "" #: ../src/viktrwlayer.c:6466 msgid "Delete Points With The Same _Position" msgstr "" #: ../src/viktrwlayer.c:6471 msgid "Delete Points With The Same _Time" msgstr "" #: ../src/viktrwlayer.c:6477 msgid "_Reverse Track" msgstr "" #: ../src/viktrwlayer.c:6479 msgid "_Reverse Route" msgstr "" #: ../src/viktrwlayer.c:6488 msgid "Down_load Maps Along Track..." msgstr "" #: ../src/viktrwlayer.c:6490 msgid "Down_load Maps Along Route..." msgstr "" #: ../src/viktrwlayer.c:6497 msgid "_Apply DEM Data" msgstr "" #: ../src/viktrwlayer.c:6504 msgid "_Export Track as GPX..." msgstr "" #: ../src/viktrwlayer.c:6506 msgid "_Export Route as GPX..." msgstr "" #: ../src/viktrwlayer.c:6513 msgid "E_xtend Track End" msgstr "" #: ../src/viktrwlayer.c:6515 msgid "E_xtend Route End" msgstr "" #: ../src/viktrwlayer.c:6522 msgid "C_onvert to a Route" msgstr "" #: ../src/viktrwlayer.c:6524 msgid "C_onvert to a Track" msgstr "" #: ../src/viktrwlayer.c:6532 msgid "Extend _Using Route Finder" msgstr "" #: ../src/viktrwlayer.c:6548 msgid "_Upload to GPS..." msgstr "" #: ../src/viktrwlayer.c:6559 msgid "_View Google Directions" msgstr "" #: ../src/viktrwlayer.c:6579 msgid "Use with _Filter" msgstr "" #: ../src/viktrwlayer.c:6612 msgid "_Edit Trackpoint" msgstr "" #: ../src/viktrwlayer.c:7524 #, c-format msgid " - Gain %dm:Loss %dm" msgstr "" #: ../src/viktrwlayer.c:7526 #, c-format msgid " - Gain %dft:Loss %dft" msgstr "" #: ../src/viktrwlayer.c:7531 #, c-format msgid " - Bearing %3.1f° - Step %s" msgstr "" #: ../src/viktrwlayer.c:8124 #, c-format msgid "Could not launch %s to open file." msgstr "" #: ../src/viktrwlayer.c:8205 #, c-format msgid "Creating %d Image Thumbnails..." msgstr "" #: ../src/viktrwlayer.c:8524 msgid "No map layer in use. Create one first" msgstr "" #: ../src/viktrwlayer_propwin.c:898 ../src/viktrwlayer_propwin.c:1155 #, c-format msgid "%.1f kph" msgstr "" #: ../src/viktrwlayer_propwin.c:901 ../src/viktrwlayer_propwin.c:1158 #, c-format msgid "%.1f mph" msgstr "" #: ../src/viktrwlayer_propwin.c:904 ../src/viktrwlayer_propwin.c:1161 #, c-format msgid "%.1f knots" msgstr "" #. VIK_UNITS_SPEED_METRES_PER_SECOND: #: ../src/viktrwlayer_propwin.c:908 ../src/viktrwlayer_propwin.c:1165 #, c-format msgid "%.1f m/s" msgstr "" #: ../src/viktrwlayer_propwin.c:1745 #, c-format msgid "%.1f miles" msgstr "" #: ../src/viktrwlayer_propwin.c:1747 #, c-format msgid "%.1f km" msgstr "" #: ../src/viktrwlayer_propwin.c:2681 msgid "Failed spliting track. Track unchanged" msgstr "" #: ../src/viktrwlayer_propwin.c:2779 ../src/viktrwlayer_propwin.c:3178 #, c-format msgid "%s - Track Properties" msgstr "" #: ../src/viktrwlayer_propwin.c:2784 msgid "Split at _Marker" msgstr "" #: ../src/viktrwlayer_propwin.c:2785 msgid "Split _Segments" msgstr "" #: ../src/viktrwlayer_propwin.c:2786 msgid "_Reverse" msgstr "" #: ../src/viktrwlayer_propwin.c:2787 msgid "_Delete Dupl." msgstr "" #: ../src/viktrwlayer_propwin.c:2813 msgid "Comment:" msgstr "Kommentar:" #: ../src/viktrwlayer_propwin.c:2814 msgid "Description:" msgstr "" #: ../src/viktrwlayer_propwin.c:2815 msgid "Track Length:" msgstr "" #: ../src/viktrwlayer_propwin.c:2816 msgid "Trackpoints:" msgstr "Trackpoints:" #: ../src/viktrwlayer_propwin.c:2817 msgid "Segments:" msgstr "Segment:" #: ../src/viktrwlayer_propwin.c:2818 msgid "Duplicate Points:" msgstr "" #: ../src/viktrwlayer_propwin.c:2819 msgid "Max Speed:" msgstr "Max hastighet:" #: ../src/viktrwlayer_propwin.c:2820 msgid "Avg. Speed:" msgstr "Medelhastighet:" #: ../src/viktrwlayer_propwin.c:2821 msgid "Moving Avg. Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:2822 msgid "Avg. Dist. Between TPs:" msgstr "" #: ../src/viktrwlayer_propwin.c:2823 msgid "Elevation Range:" msgstr "" #: ../src/viktrwlayer_propwin.c:2824 msgid "Total Elevation Gain/Loss:" msgstr "Total höjdskillnad:" #: ../src/viktrwlayer_propwin.c:2825 msgid "Start:" msgstr "Start:" #: ../src/viktrwlayer_propwin.c:2826 msgid "End:" msgstr "Slut:" #: ../src/viktrwlayer_propwin.c:2827 msgid "Duration:" msgstr "" #: ../src/viktrwlayer_propwin.c:2828 msgid "Color:" msgstr "" #: ../src/viktrwlayer_propwin.c:2877 ../src/viktrwlayer_propwin.c:2901 #: ../src/viktrwlayer_propwin.c:2929 ../src/viktrwlayer_propwin.c:2966 #: ../src/viktrwlayer_propwin.c:2984 ../src/viktrwlayer_propwin.c:3034 #: ../src/viktrwlayer_propwin.c:3035 ../src/viktrwlayer_propwin.c:3036 #: ../src/viktrwlayer_propwin.c:3062 ../src/viktrwlayer_propwin.c:3063 #: ../src/viktrwlayer_propwin.c:3078 ../src/viktrwlayer_propwin.c:3079 #: ../src/viktrwlayer_propwin.c:3092 ../src/viktrwlayer_propwin.c:3093 #: ../src/viktrwlayer_propwin.c:3106 ../src/viktrwlayer_propwin.c:3107 #: ../src/viktrwlayer_propwin.c:3120 ../src/viktrwlayer_propwin.c:3121 #: ../src/viktrwlayer_propwin.c:3134 ../src/viktrwlayer_propwin.c:3135 #, c-format msgid "No Data" msgstr "Ingen data" #: ../src/viktrwlayer_propwin.c:3031 #, c-format msgid "%d minutes" msgstr "%d minuter" #: ../src/viktrwlayer_propwin.c:3058 msgid "Statistics" msgstr "Statistik" #: ../src/viktrwlayer_propwin.c:3064 msgid "Show D_EM" msgstr "" #: ../src/viktrwlayer_propwin.c:3065 ../src/viktrwlayer_propwin.c:3080 #: ../src/viktrwlayer_propwin.c:3094 ../src/viktrwlayer_propwin.c:3136 msgid "Show _GPS Speed" msgstr "" #: ../src/viktrwlayer_propwin.c:3067 ../src/viktrwlayer_propwin.c:3082 #: ../src/viktrwlayer_propwin.c:3110 ../src/viktrwlayer_propwin.c:3138 msgid "Track Distance:" msgstr "" #: ../src/viktrwlayer_propwin.c:3068 ../src/viktrwlayer_propwin.c:3125 msgid "Track Height:" msgstr "" #: ../src/viktrwlayer_propwin.c:3073 msgid "Elevation-distance" msgstr "" #: ../src/viktrwlayer_propwin.c:3083 msgid "Track Gradient:" msgstr "" #: ../src/viktrwlayer_propwin.c:3087 msgid "Gradient-distance" msgstr "" #: ../src/viktrwlayer_propwin.c:3096 ../src/viktrwlayer_propwin.c:3111 #: ../src/viktrwlayer_propwin.c:3124 msgid "Track Time:" msgstr "" #: ../src/viktrwlayer_propwin.c:3097 ../src/viktrwlayer_propwin.c:3139 msgid "Track Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:3101 msgid "Speed-time" msgstr "" #: ../src/viktrwlayer_propwin.c:3108 ../src/viktrwlayer_propwin.c:3122 msgid "Show S_peed" msgstr "" #: ../src/viktrwlayer_propwin.c:3115 msgid "Distance-time" msgstr "" #: ../src/viktrwlayer_propwin.c:3129 msgid "Elevation-time" msgstr "" #: ../src/viktrwlayer_propwin.c:3143 msgid "Speed-distance" msgstr "" #: ../src/viktrwlayer_tpwin.c:118 msgid "Part of Track:" msgstr "" #: ../src/viktrwlayer_tpwin.c:119 msgid "Latitude:" msgstr "Latitud:" #: ../src/viktrwlayer_tpwin.c:120 msgid "Longitude:" msgstr "Longitud:" #: ../src/viktrwlayer_tpwin.c:121 msgid "Altitude:" msgstr "Altitud:" #: ../src/viktrwlayer_tpwin.c:122 msgid "Timestamp:" msgstr "Tidsstämpel:" #: ../src/viktrwlayer_tpwin.c:123 msgid "Time:" msgstr "Tid:" #: ../src/viktrwlayer_tpwin.c:124 msgid "Distance Difference:" msgstr "" #: ../src/viktrwlayer_tpwin.c:125 msgid "Time Difference:" msgstr "Tidsskillnad:" #: ../src/viktrwlayer_tpwin.c:126 msgid "\"Speed\" Between:" msgstr "" #: ../src/viktrwlayer_tpwin.c:127 msgid "VDOP:" msgstr "" #: ../src/viktrwlayer_tpwin.c:128 msgid "HDOP:" msgstr "" #: ../src/viktrwlayer_tpwin.c:129 msgid "PDOP:" msgstr "" #: ../src/viktrwlayer_tpwin.c:130 msgid "SAT/FIX:" msgstr "" #: ../src/viktrwlayer_tpwin.c:139 msgid "Trackpoint" msgstr "Trackpoint" #: ../src/viktrwlayer_tpwin.c:142 msgid "_Insert After" msgstr "" #: ../src/viktrwlayer_tpwin.c:144 msgid "Split Here" msgstr "Dela här" #: ../src/viktrwlayer_geotag.c:446 #, c-format msgid "Geotagging %d Images..." msgstr "" #: ../src/viktrwlayer_geotag.c:510 msgid "Geotag Images" msgstr "" #: ../src/viktrwlayer_geotag.c:516 msgid "Images" msgstr "" #: ../src/viktrwlayer_geotag.c:520 msgid "Overwrite Existing Waypoints:" msgstr "" #: ../src/viktrwlayer_geotag.c:523 msgid "Overwrite Existing GPS Information:" msgstr "" #: ../src/viktrwlayer_geotag.c:525 msgid "Keep File Modification Timestamp:" msgstr "" #: ../src/viktrwlayer_geotag.c:555 msgid "Create Waypoints:" msgstr "" #: ../src/viktrwlayer_geotag.c:563 msgid "Write EXIF:" msgstr "" #: ../src/viktrwlayer_geotag.c:575 msgid "Interpolate Between Track Segments:" msgstr "" #: ../src/viktrwlayer_geotag.c:579 msgid "Image Time Offset (Seconds):" msgstr "" #: ../src/viktrwlayer_geotag.c:581 msgid "" "The number of seconds to ADD to the photos time to make it match the GPS " "data. Calculate this with (GPS - Photo). Can be negative or positive. Useful " "to adjust times when a camera's timestamp was incorrect." msgstr "" #: ../src/viktrwlayer_geotag.c:584 msgid "Image Timezone:" msgstr "" #: ../src/viktrwlayer_geotag.c:586 msgid "" "The timezone that was used when the images were created. For example, if a " "camera is set to AWST or +8:00 hours. Enter +8:00 here so that the correct " "adjustment to the images' time can be made. GPS data is always in UTC." msgstr "" #: ../src/viktrwlayer_geotag.c:590 #, c-format msgid "Using track: %s" msgstr "" #: ../src/viktrwlayer_geotag.c:592 #, c-format msgid "Using all tracks in: %s" msgstr "" #: ../src/vikstatus.c:105 msgid "Current zoom level. Click to select a new one." msgstr "" #: ../src/vikwaypoint.c:34 msgid "Waypoint" msgstr "" #. TODO get rid of this as this is unnecessary duplication... #: ../src/vikwindow.c:221 msgid "Pan" msgstr "Panorera" #: ../src/vikwindow.c:221 msgid "Zoom" msgstr "Zoom" #: ../src/vikwindow.c:221 msgid "Ruler" msgstr "Linjal" #: ../src/vikwindow.c:221 msgid "Select" msgstr "" #. Create tooltip #: ../src/vikwindow.c:440 msgid "Select zoom level" msgstr "" #: ../src/vikwindow.c:645 #, c-format msgid "" "Do you want to save the changes you made to the document \"%s\"?\n" "\n" "Your changes will be lost if you don't save them." msgstr "" "Vill du spara de ändringar du gjort i dokumentet \"%s\"?\n" "\n" "Dina ändringar kommer försvinna om du inte sparar dem." #: ../src/vikwindow.c:649 msgid "Don't Save" msgstr "Spara inte" #: ../src/vikwindow.c:696 msgid "mpp" msgstr "mpp" #: ../src/vikwindow.c:696 msgid "pixelfact" msgstr "" #: ../src/vikwindow.c:861 #, c-format msgid "%s %s %dm" msgstr "%s %s %dm" #: ../src/vikwindow.c:863 #, c-format msgid "%s %s %dft" msgstr "" #: ../src/vikwindow.c:866 #, c-format msgid "%s %s" msgstr "%s %s" #. NB Ctrl+Shift+R is used for Refresh (deemed more important), so use 'U' instead #: ../src/vikwindow.c:1254 msgid "_Ruler" msgstr "_Linjal" #: ../src/vikwindow.c:1254 msgid "Ruler Tool" msgstr "Linjalverktyg" #: ../src/vikwindow.c:1502 ../src/vikwindow.c:3138 msgid "_Zoom" msgstr "_Zoom" #: ../src/vikwindow.c:1502 msgid "Zoom Tool" msgstr "Zoomverktyg" #: ../src/vikwindow.c:1547 ../src/vikwindow.c:3139 msgid "_Pan" msgstr "" #: ../src/vikwindow.c:1547 msgid "Pan Tool" msgstr "Panoreringsverktyg" #: ../src/vikwindow.c:1664 msgid "_Select" msgstr "" #: ../src/vikwindow.c:1664 msgid "Select Tool" msgstr "" #: ../src/vikwindow.c:1809 msgid "You must select a layer to show its properties." msgstr "Du måste välja ett lager för att kuna se dess egenskaper." #. No error to show, so unlikely this will get called #: ../src/vikwindow.c:1824 msgid "The help system is not available." msgstr "" #. Main error path #: ../src/vikwindow.c:1827 #, c-format msgid "" "Help is not available because: %s.\n" "Ensure a Mime Type ghelp handler program is installed (e.g. yelp)." msgstr "" #: ../src/vikwindow.c:1850 msgid "You must select a layer to delete." msgstr "Du måste välja ett lager för borttagning." #: ../src/vikwindow.c:2087 msgid "Untitled" msgstr "Namnlös" #: ../src/vikwindow.c:2194 #, c-format msgid "Unable to add '%s' to the list of recently used documents" msgstr "" #: ../src/vikwindow.c:2208 msgid "The file you requested could not be opened." msgstr "Filen du valt kan inte öppnas." #: ../src/vikwindow.c:2211 msgid "" "GPSBabel is required to load files of this type or GPSBabel encountered " "problems." msgstr "" #: ../src/vikwindow.c:2214 #, c-format msgid "Unable to load malformed GPX file %s" msgstr "" #: ../src/vikwindow.c:2217 #, c-format msgid "Unsupported file type for %s" msgstr "" #. Since we can process .vik files with issues just show a warning in the status bar #. Not that a user can do much about it... or tells them what this issue is yet... #: ../src/vikwindow.c:2223 #, c-format msgid "WARNING: issues encountered loading %s" msgstr "" #: ../src/vikwindow.c:2278 msgid "Please select a GPS data file to open. " msgstr "" #: ../src/vikwindow.c:2288 msgid "Geocaching" msgstr "" #: ../src/vikwindow.c:2294 msgid "Google Earth" msgstr "" #: ../src/vikwindow.c:2299 msgid "GPX" msgstr "" #: ../src/vikwindow.c:2304 ../src/vikwindow.c:2387 #: ../src/viking.desktop.in.h:1 msgid "Viking" msgstr "Viking" #: ../src/vikwindow.c:2374 msgid "Save as Viking File." msgstr "Spara som Viking fil." #. Try harder... #: ../src/vikwindow.c:2619 ../src/vikwindow.c:2625 msgid "Generating image file..." msgstr "" #: ../src/vikwindow.c:2647 msgid "" "Failed to generate internal image.\n" "\n" "Try creating a smaller image." msgstr "" #: ../src/vikwindow.c:2655 msgid "Failed to generate image file." msgstr "" #. Success #: ../src/vikwindow.c:2660 msgid "Image file generated." msgstr "" #: ../src/vikwindow.c:2764 msgid "" "Viewable region outside allowable pixel size bounds for image. Clipping " "width/height values." msgstr "" #: ../src/vikwindow.c:2789 #, c-format msgid "Total area: %ldm x %ldm (%.3f sq. km)" msgstr "Total area: %ldm x %ldm (%.3f kvadrat kilometer)" #: ../src/vikwindow.c:2792 #, c-format msgid "Total area: %ldm x %ldm (%.3f sq. miles)" msgstr "" #: ../src/vikwindow.c:2813 msgid "Save Image" msgstr "Spara bild" #: ../src/vikwindow.c:2834 msgid "PNG" msgstr "" #: ../src/vikwindow.c:2857 msgid "You must be in UTM mode to use this feature" msgstr "Du måste vara i UTM läge för att använda denna funktion" #: ../src/vikwindow.c:2862 msgid "Choose a directory to hold images" msgstr "" #. todo: default for answers inside VikWindow or static (thruout instance) #: ../src/vikwindow.c:2883 msgid "Save to Image File" msgstr "" #: ../src/vikwindow.c:2900 msgid "Width (pixels):" msgstr "Bredd (bildpunkter):" #: ../src/vikwindow.c:2902 msgid "Height (pixels):" msgstr "Höjd (bildpunkter):" #: ../src/vikwindow.c:2905 msgid "" "WARNING: USING LARGE IMAGES OVER 10000x10000\n" "MAY CRASH THE PROGRAM!" msgstr "" #: ../src/vikwindow.c:2907 msgid "Zoom (meters per pixel):" msgstr "" #: ../src/vikwindow.c:2921 msgid "Area in current viewable window" msgstr "" #: ../src/vikwindow.c:2931 msgid "Save as PNG" msgstr "Spara som PNG" #: ../src/vikwindow.c:2932 msgid "Save as JPEG" msgstr "Spara som JPEG" #: ../src/vikwindow.c:2954 msgid "East-west image tiles:" msgstr "" #: ../src/vikwindow.c:2956 msgid "North-south image tiles:" msgstr "" #: ../src/vikwindow.c:3097 msgid "Choose a background color" msgstr "Välj en bakgrundsfärg" #: ../src/vikwindow.c:3113 msgid "Choose a track highlight color" msgstr "" #: ../src/vikwindow.c:3134 msgid "_File" msgstr "_Fil" #: ../src/vikwindow.c:3135 msgid "_Edit" msgstr "R_edigera" #: ../src/vikwindow.c:3136 msgid "_View" msgstr "_Visa" #: ../src/vikwindow.c:3137 msgid "_Show" msgstr "" #: ../src/vikwindow.c:3140 msgid "_Layers" msgstr "_Lager" #: ../src/vikwindow.c:3141 msgid "_Tools" msgstr "Verk -tyg" #: ../src/vikwindow.c:3142 msgid "_Webtools" msgstr "" #: ../src/vikwindow.c:3143 ../src/vikwindow.c:3206 msgid "_Help" msgstr "_Hjälp" #: ../src/vikwindow.c:3145 msgid "New file" msgstr "Ny fil" #: ../src/vikwindow.c:3146 msgid "_Open..." msgstr "_Öppna..." #: ../src/vikwindow.c:3146 msgid "Open a file" msgstr "Öppna en fil" #: ../src/vikwindow.c:3147 msgid "Open _Recent File" msgstr "" #: ../src/vikwindow.c:3148 msgid "Append _File..." msgstr "" #: ../src/vikwindow.c:3148 msgid "Append data from a different file" msgstr "" #: ../src/vikwindow.c:3149 msgid "A_cquire" msgstr "" #: ../src/vikwindow.c:3150 msgid "Transfer data from a GPS device" msgstr "Överför data till en GPS enhet" #: ../src/vikwindow.c:3151 msgid "Import File With GPS_Babel..." msgstr "" #: ../src/vikwindow.c:3151 msgid "Import file via GPSBabel converter" msgstr "" #: ../src/vikwindow.c:3153 msgid "Google _Directions..." msgstr "" #: ../src/vikwindow.c:3153 msgid "Get driving directions from Google" msgstr "" #: ../src/vikwindow.c:3156 msgid "_OSM Traces..." msgstr "" #: ../src/vikwindow.c:3156 msgid "Get traces from OpenStreetMap" msgstr "" #: ../src/vikwindow.c:3157 msgid "_My OSM Traces..." msgstr "" #: ../src/vikwindow.c:3157 msgid "Get Your Own Traces from OpenStreetMap" msgstr "" #: ../src/vikwindow.c:3160 msgid "Geo_caches..." msgstr "Geo_cachar..." #: ../src/vikwindow.c:3160 msgid "Get Geocaches from geocaching.com" msgstr "Hämta Geocachar från geocaching.com" #: ../src/vikwindow.c:3163 msgid "Create waypoints from geotagged images" msgstr "" #: ../src/vikwindow.c:3166 msgid "Create waypoints from Wikipedia items in the current view" msgstr "" #: ../src/vikwindow.c:3168 msgid "_Save" msgstr "_Spara" #: ../src/vikwindow.c:3168 msgid "Save the file" msgstr "Spara filen" #: ../src/vikwindow.c:3169 msgid "Save _As..." msgstr "Sp_ara som..." #: ../src/vikwindow.c:3169 msgid "Save the file under different name" msgstr "Spara filen under ett annat namn" #: ../src/vikwindow.c:3170 msgid "_Generate Image File..." msgstr "" #: ../src/vikwindow.c:3170 msgid "Save a snapshot of the workspace into a file" msgstr "" #: ../src/vikwindow.c:3171 msgid "Generate _Directory of Images..." msgstr "" #: ../src/vikwindow.c:3171 msgid "FIXME:IMGDIR" msgstr "" #: ../src/vikwindow.c:3174 msgid "_Print..." msgstr "Skriv _ut..." #: ../src/vikwindow.c:3174 msgid "Print maps" msgstr "Skriv ut kartor" #: ../src/vikwindow.c:3177 msgid "E_xit" msgstr "_Avsluta" #: ../src/vikwindow.c:3177 msgid "Exit the program" msgstr "Avsluta programmet" #: ../src/vikwindow.c:3178 msgid "Save and Exit" msgstr "Spara och avsluta" #: ../src/vikwindow.c:3178 msgid "Save and Exit the program" msgstr "Spara och avsluta programmet" #: ../src/vikwindow.c:3180 msgid "Go to the _Default Location" msgstr "" #: ../src/vikwindow.c:3180 msgid "Go to the default location" msgstr "" #: ../src/vikwindow.c:3181 msgid "Go to _Location..." msgstr "" #: ../src/vikwindow.c:3181 msgid "Go to address/place using text search" msgstr "" #: ../src/vikwindow.c:3182 msgid "_Go to Lat/Lon..." msgstr "" #: ../src/vikwindow.c:3182 msgid "Go to arbitrary lat/lon coordinate" msgstr "" #: ../src/vikwindow.c:3183 msgid "Go to UTM..." msgstr "Gå till UTM..." #: ../src/vikwindow.c:3183 msgid "Go to arbitrary UTM coordinate" msgstr "" #: ../src/vikwindow.c:3184 msgid "_Refresh" msgstr "" #: ../src/vikwindow.c:3184 msgid "Refresh any maps displayed" msgstr "" #: ../src/vikwindow.c:3185 msgid "Set _Highlight Color..." msgstr "" #: ../src/vikwindow.c:3186 msgid "Set Bac_kground Color..." msgstr "" #: ../src/vikwindow.c:3187 msgid "Zoom _In" msgstr "Zooma _in" #: ../src/vikwindow.c:3188 msgid "Zoom _Out" msgstr "Zooma _ut" #: ../src/vikwindow.c:3189 msgid "Zoom _To..." msgstr "Zooma _till..." #: ../src/vikwindow.c:3190 msgid "Pan _North" msgstr "" #: ../src/vikwindow.c:3191 msgid "Pan _East" msgstr "" #: ../src/vikwindow.c:3192 msgid "Pan _South" msgstr "" #: ../src/vikwindow.c:3193 msgid "Pan _West" msgstr "" #: ../src/vikwindow.c:3194 msgid "Background _Jobs" msgstr "" #: ../src/vikwindow.c:3196 msgid "Cu_t" msgstr "Klipp _ut" #: ../src/vikwindow.c:3197 msgid "_Copy" msgstr "_Kopiera" #: ../src/vikwindow.c:3198 msgid "_Paste" msgstr "Klistra _in" #: ../src/vikwindow.c:3199 msgid "_Delete" msgstr "_Ta bort" #: ../src/vikwindow.c:3200 msgid "Delete All" msgstr "Ta bort alla" #: ../src/vikwindow.c:3201 msgid "_Flush Map Cache" msgstr "" #: ../src/vikwindow.c:3202 msgid "_Set the Default Location" msgstr "" #: ../src/vikwindow.c:3202 msgid "Set the Default Location to the current position" msgstr "" #: ../src/vikwindow.c:3203 msgid "_Preferences" msgstr "_Inställningar" #: ../src/vikwindow.c:3204 msgid "_Properties" msgstr "_Egenskaper" #: ../src/vikwindow.c:3207 msgid "_About" msgstr "_Om" #: ../src/vikwindow.c:3213 msgid "_UTM Mode" msgstr "_UTM läge" #: ../src/vikwindow.c:3214 msgid "_Expedia Mode" msgstr "_Expedia läge" #: ../src/vikwindow.c:3215 msgid "_Mercator Mode" msgstr "_Mercator läge" #: ../src/vikwindow.c:3216 msgid "Lat_/Lon Mode" msgstr "" #: ../src/vikwindow.c:3220 msgid "Show _Scale" msgstr "" #: ../src/vikwindow.c:3220 msgid "Show Scale" msgstr "Visa skala" #: ../src/vikwindow.c:3221 msgid "Show _Center Mark" msgstr "" #: ../src/vikwindow.c:3221 msgid "Show Center Mark" msgstr "" #: ../src/vikwindow.c:3222 msgid "Show _Highlight" msgstr "" #: ../src/vikwindow.c:3222 msgid "Show Highlight" msgstr "" #: ../src/vikwindow.c:3223 msgid "_Full Screen" msgstr "Fullskärm" #: ../src/vikwindow.c:3223 msgid "Activate full screen mode" msgstr "Aktivera fullskärmsläge" #: ../src/vikwindow.c:3224 msgid "Show Side _Panel" msgstr "" #: ../src/vikwindow.c:3224 msgid "Show Side Panel" msgstr "" #: ../src/vikwindow.c:3225 msgid "Show Status_bar" msgstr "" #: ../src/vikwindow.c:3225 msgid "Show Statusbar" msgstr "" #: ../src/vikwindow.c:3226 msgid "Show _Toolbar" msgstr "" #: ../src/vikwindow.c:3226 msgid "Show Toolbar" msgstr "" #: ../src/vikwindow.c:3227 msgid "Show _Menu" msgstr "" #: ../src/vikwindow.c:3227 msgid "Show Menu" msgstr "" #: ../src/viking.desktop.in.h:2 msgid "GPS Data Manager" msgstr "" #: ../src/viking.desktop.in.h:3 msgid "Map Based GPS Data Manager (live data capable)." msgstr "" #: ../src/libjpeg/jpeg-data.c:206 msgid "Data does not follow JPEG specification." msgstr "" #: ../src/libjpeg/jpeg-data.c:291 #, c-format msgid "Path '%s' invalid." msgstr "" #: ../src/libjpeg/jpeg-data.c:309 #, c-format msgid "Could not read '%s'." msgstr "" viking-1.4.2/po/nl.po0000644000175000017500000022550312175546146011337 00000000000000# Dutch translation for viking # Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008 # This file is distributed under the same license as the viking package. # FIRST AUTHOR , 2008. # msgid "" msgstr "" "Project-Id-Version: viking\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-02-04 23:29+0100\n" "PO-Revision-Date: 2012-08-15 13:07+0000\n" "Last-Translator: Dirk Roos \n" "Language-Team: Dutch \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2013-03-23 17:12+0000\n" "X-Generator: Launchpad (build 16540)\n" "Language: nl\n" #: ../src/acquire.c:103 ../src/vikgpslayer.c:1185 msgid "Done." msgstr "Klaar." #: ../src/acquire.c:114 msgid "No data." msgstr "" #: ../src/acquire.c:154 ../src/acquire.c:404 msgid "Error: acquisition failed." msgstr "" #: ../src/acquire.c:341 msgid "Working..." msgstr "Bezig…" #. This shouldn't happen... #: ../src/acquire.c:394 msgid "" "Unable to create command\n" "Acquire method failed." msgstr "" #: ../src/acquire.c:486 msgid "_Filter" msgstr "" #: ../src/acquire.c:501 #, c-format msgid "Filter with %s" msgstr "" #: ../src/acquire.c:518 msgid "Filter" msgstr "" #: ../src/background.c:52 #, c-format msgid "%d items" msgstr "%d items" #: ../src/background.c:248 msgid "Job" msgstr "Opdracht" #: ../src/background.c:252 msgid "Progress" msgstr "Voortgang" #: ../src/background.c:268 msgid "Viking Background Jobs" msgstr "Viking achtergrond precessen" #: ../src/bing.c:47 msgid "Bing" msgstr "" #. VIK_GTK_WINDOW_FROM_WIDGET(vp) #: ../src/bingmapsource.c:445 msgid "Bing attribution Loading" msgstr "" #: ../src/clipboard.c:95 msgid "paste failed" msgstr "plakken mislukt" #: ../src/clipboard.c:105 msgid "wrong clipboard data size" msgstr "verkeerde bestandsgrootte op het klembord" #: ../src/clipboard.c:124 #, c-format msgid "" "The clipboard contains sublayer data for %s layers. You must select a layer " "of this type to paste the clipboard data." msgstr "" "Het klembord bevat gegevens van tussenlagen voor %s lagen. U moet een " "soortgelijk type laag selecteren, om de klembord data te kunnen plakken." #: ../src/clipboard.c:236 msgid "" "In order to paste a waypoint, please select an appropriate layer to paste " "into." msgstr "" "Selecteert u alstublieft een passende laag om informatie in te plakken om " "een wegpunt te plakken." #: ../src/dialog.c:52 msgid "Go to Lat/Lon" msgstr "Ga naar breedtegraad/lengtegraad." #: ../src/dialog.c:64 ../src/dialog.c:251 msgid "Latitude:" msgstr "Breedtegraad:" #: ../src/dialog.c:70 ../src/dialog.c:256 msgid "Longitude:" msgstr "Lengtegraad:" #: ../src/dialog.c:102 msgid "Go to UTM" msgstr "Ga naar UTM" #: ../src/dialog.c:115 msgid "Northing:" msgstr "Naar het noorden richten:" #: ../src/dialog.c:121 msgid "Easting:" msgstr "Naar het Oosten richten:" #: ../src/dialog.c:128 msgid "Zone:" msgstr "Zone:" #: ../src/dialog.c:131 msgid "Letter:" msgstr "Brief:" #: ../src/dialog.c:199 msgid "Waypoint Properties" msgstr "Eigenschappen van Waypoint" #: ../src/dialog.c:233 msgid "Name:" msgstr "Naam:" #: ../src/dialog.c:261 msgid "Altitude:" msgstr "Hoogte:" #: ../src/dialog.c:266 msgid "Comment:" msgstr "Opmerking:" #: ../src/dialog.c:274 ../src/osm-traces.c:437 msgid "Description:" msgstr "Omschrijving:" #: ../src/dialog.c:277 msgid "Image:" msgstr "Afbeelding:" #: ../src/dialog.c:282 msgid "Symbol:" msgstr "Symbool:" #: ../src/dialog.c:291 msgid "(none)" msgstr "(geen)" #. TODO: other checks (isalpha or whatever ) #: ../src/dialog.c:356 msgid "Please enter a name for the waypoint." msgstr "Geef alstublieft een name op voor het wegpunt" #: ../src/dialog.c:529 ../src/geonamessearch.c:243 #: ../src/datasource_osm_my_traces.c:507 msgid "Nothing was selected" msgstr "Er was niets geselecteerd" #: ../src/dialog.c:537 msgid "Add Route" msgstr "" #: ../src/dialog.c:537 msgid "Add Track" msgstr "Voeg route toe" #: ../src/dialog.c:545 msgid "Route Name:" msgstr "" #: ../src/dialog.c:545 msgid "Track Name:" msgstr "Naam van de route:" #: ../src/dialog.c:565 msgid "Please enter a name for the track." msgstr "Geef alstublieft een naam op voor de route" #: ../src/dialog.c:623 msgid "Zoom Factors..." msgstr "Vergrotingswaardes:" #: ../src/dialog.c:637 msgid "Zoom factor (in meters per pixel):" msgstr "Zoom factor (in meter per pixel):" #: ../src/dialog.c:638 msgid "X (easting): " msgstr "X (richten naar het oosten) " #: ../src/dialog.c:639 msgid "Y (northing): " msgstr "Y (richten naar het noorden) " #: ../src/dialog.c:644 msgid "X and Y zoom factors must be equal" msgstr "Vergrotingswaarden X en Y moeten hetzelfde zijn" #: ../src/dialog.c:699 msgid "1 min" msgstr "1 min" #: ../src/dialog.c:700 msgid "1 hour" msgstr "1 uur" #: ../src/dialog.c:701 msgid "1 day" msgstr "een dag" #: ../src/dialog.c:702 msgid "Custom (in minutes):" msgstr "Anders (in minuten)" #: ../src/dialog.c:808 msgid "GPS Data and Topo Analyzer, Explorer, and Manager." msgstr "GPS Data en Topo Analyzer, Explorer en Manager." #: ../src/dialog.c:809 msgid "" "This program is free software; you can redistribute it and/or modify it " "under the terms of the GNU General Public License as published by the Free " "Software Foundation; either version 2 of the License, or (at your option) " "any later version.\n" "\n" "This program is distributed in the hope that it will be useful, but WITHOUT " "ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or " "FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for " "more details.\n" "\n" "You should have received a copy of the GNU General Public License along with " "this program; if not, write to the Free Software Foundation, Inc., 59 Temple " "Place, Suite 330, Boston, MA 02111-1307, USA" msgstr "" "Dit programma is vrije software; je kan het wijzigen en/of aanpassen volgens " "de bepalingen van de GNU Algemene Publieke Licentie zoals ze door de Free " "Software Foundation is bekend gemaakt; versie 2 van deze licentie of " "(volgens je eigen keuze) elke latere versie.\n" "\n" "Dit programma wordt verdeeld in de hoop dat het nuttig gebruikt zal worden, " "maar blijft ZONDER ENIGE GARANTIE; ook zonder de impliciete garantie van " "COMMERCIALISERING of AANPASSING AAN EEN BEPAALD DOEL. Voor meer details, " "lees de GNU Algemene Publieke Licentie.\n" "\n" "Een exemplaar van de GNU Algemene Publieke Licentie dient bij dit programma " "geleverd te worden. Indien dit niet het geval is, kan je de Free Software " "Foundation Inc. aanschrijven, 59 Temple Place, Suite 330, Boston, MA 02111-" "1307, USA." #: ../src/dialog.c:837 msgid "Translation is coordinated on http://launchpad.net/viking" msgstr "De vertaling wordt gecoördineerd op http://launchpad.net/viking" #: ../src/dialog.c:845 msgid "Download along track" msgstr "Download langs spoor" #: ../src/dialog.c:851 msgid "Map type:" msgstr "Map type" #: ../src/dialog.c:856 msgid "Zoom level:" msgstr "Zoomniveau:" #: ../src/dialog.c:896 #, c-format msgid "The map data is licensed: %s." msgstr "De kaartgegevens zijn onderheving aan een licentie: %s" #: ../src/dialog.c:899 #, c-format msgid "" "The data provided by '%s' are licensed under the following license: " "%s.\n" "Please, read the license before continuing." msgstr "" "De gegevens geleverd door '%s' zijn gelicenseerd onder de volgende " "licentie: % s .\n" "Lees alstublieft de licentie voordat u verder gaat." #: ../src/dialog.c:904 msgid "Open license" msgstr "Open licentie" #: ../src/expedia.c:53 msgid "Expedia Street Maps" msgstr "Expedia Street Maps" #: ../src/expedia.c:81 msgid "Invalid expedia altitude" msgstr "Ongeldige expedia hoogte" #: ../src/expedia.c:112 #, c-format msgid "" "Couldn't open EXPEDIA image file (right after successful download! Please " "report and delete image file!): %s" msgstr "" "Kon de EXPEDIA afbeelding niet openen (onmiddellijk na succesvolle download! " "Gelieve dit te melden en de afbeelding te verwijderen!): %s" #: ../src/expedia.c:125 #, c-format msgid "" "Couldn't save EXPEDIA image file (right after successful download! Please " "report and delete image file!): %s" msgstr "" "Kon de EXPEDIA afbeelding niet openen (onmiddellijk na succesvolle download! " "Gelieve dit te melden en de afbeelding te verwijderen!): %s" #. * #. * See http://www.geonames.org/export/wikipedia-webservice.html#wikipediaBoundingBox #. #. Translators may wish to change this setting as appropriate to get Wikipedia articles in that language #: ../src/geonamessearch.c:46 msgid "en" msgstr "" #: ../src/geonamessearch.c:121 msgid "Search" msgstr "Zoek" #: ../src/geonamessearch.c:123 msgid "No entries found!" msgstr "Geen ingangen gevonden!" #. NB could allow columns to be shifted around by doing this after each new #. gtk_tree_view_column_set_reorderable ( column, TRUE ); #. However I don't think is that useful, so I haven't put it in #: ../src/geonamessearch.c:177 ../src/datasource_osm_my_traces.c:425 msgid "Name" msgstr "" #: ../src/geonamessearch.c:182 msgid "Feature" msgstr "" #: ../src/geonamessearch.c:187 ../src/datasource_osm_my_traces.c:440 msgid "Lat/Lon" msgstr "" #: ../src/geonamessearch.c:269 ../src/googlesearch.c:100 msgid "couldn't map temp file" msgstr "kon temp bestand niet mappen" #: ../src/globals.c:44 msgid "Degree format:" msgstr "Formaat graden:" #: ../src/globals.c:48 msgid "Distance units:" msgstr "Eenheid afstand:" #: ../src/globals.c:52 msgid "Speed units:" msgstr "Eenheid snelheid:" #: ../src/globals.c:56 msgid "Height units:" msgstr "Eenheid hoogte:" #: ../src/globals.c:60 msgid "Use large waypoint icons:" msgstr "Gebruik grote waypoint ikonen:" #: ../src/globals.c:64 msgid "Default latitude:" msgstr "" #: ../src/globals.c:67 msgid "Default longitude:" msgstr "" #: ../src/globals.c:73 msgid "Alphabetical" msgstr "" #: ../src/globals.c:73 ../src/datasource_osm_my_traces.c:435 msgid "Time" msgstr "" #: ../src/globals.c:76 msgid "KML File Export Units:" msgstr "" #: ../src/globals.c:77 msgid "GPX Track Order:" msgstr "" #: ../src/globals.c:82 msgid "Image Viewer:" msgstr "" #: ../src/globals.c:87 msgid "External GPX Program 1:" msgstr "" #: ../src/globals.c:88 msgid "External GPX Program 2:" msgstr "" #. Defaults for the options are setup here #: ../src/globals.c:96 msgid "General" msgstr "Algemeen" #. New Tab #: ../src/globals.c:121 msgid "Export/External" msgstr "Eport/Extern" #. Webtools #: ../src/google.c:36 msgid "Google" msgstr "Google" #: ../src/datasource_file.c:59 msgid "Import file with GPSBabel" msgstr "Importeer bestand met GPSBabel" #: ../src/datasource_file.c:60 msgid "Imported file" msgstr "Bestand geïmporteerd" #. The file selector #: ../src/datasource_file.c:133 msgid "File:" msgstr "Bestand:" #: ../src/datasource_file.c:134 msgid "File to import" msgstr "Te importeren bestand" #: ../src/datasource_file.c:141 msgid "All files" msgstr "Alle Bestanden" #. The file format selector #: ../src/datasource_file.c:148 msgid "File type:" msgstr "Bestandstype:" #: ../src/datasource_file.c:193 #, c-format msgid "using babel args '%s' and file '%s'" msgstr "gebruik van babel args '%s' en bestand '%s'" #: ../src/datasource_gc.c:66 msgid "Download Geocaches" msgstr "Download Geocaches" #: ../src/datasource_gc.c:67 msgid "Geocaching.com Caches" msgstr "Geocaching.com Cache" #: ../src/datasource_gc.c:84 msgid "geocaching.com username:" msgstr "geocaching.com gebruikersnaam:" #: ../src/datasource_gc.c:85 msgid "geocaching.com password:" msgstr "geocaching.com wachtwoord:" #: ../src/datasource_gc.c:126 #, c-format msgid "" "Can't find %s or %s in path! Check that you have installed it correctly." msgstr "" "Kan %s of %s niet vinden in pad! Controleer dat het correct werd " "geïnstalleerd." #: ../src/datasource_gc.c:188 msgid "Number geocaches:" msgstr "Aantal geocaches:" #: ../src/datasource_gc.c:190 msgid "Centered around:" msgstr "Gecentreerd rond:" #: ../src/datasource_gc.c:226 msgid "Broken input - using some defaults" msgstr "Verstoorde invoer - gebruik van een aantal standaardwaarden" #: ../src/datasource_geotag.c:51 msgid "Create Waypoints from Geotagged Images" msgstr "Maak Waypoints van afbeeldingen met een Geotag" #: ../src/datasource_geotag.c:52 msgid "Geotagged Images" msgstr "Afbeeldingen met Geotags" #: ../src/datasource_geotag.c:102 ../src/vikwindow.c:2314 #: ../src/vikwindow.c:2382 ../src/vikwindow.c:2824 msgid "All" msgstr "Alles" #: ../src/datasource_geotag.c:107 ../src/vikwindow.c:2829 msgid "JPG" msgstr "JPG" #: ../src/datasource_geotag.c:165 #, c-format msgid "Unable to create waypoint from %s" msgstr "Kan geen waypoint maken van %s" #: ../src/datasource_google.c:49 ../src/datasource_google.c:50 msgid "Google Directions" msgstr "Google aanwijzingen" #: ../src/datasource_google.c:77 msgid "From:" msgstr "Van:" #: ../src/datasource_google.c:79 msgid "To:" msgstr "Naar:" #: ../src/datasource_gps.c:57 msgid "Acquire from GPS" msgstr "Opvragen bij GPS" #: ../src/datasource_gps.c:58 msgid "Acquired from GPS" msgstr "Opgevraagd bij GPS" #: ../src/datasource_gps.c:221 #, c-format msgid "using cmdline '%s' and file '%s'\n" msgstr "" #: ../src/datasource_gps.c:297 ../src/vikgpslayer.c:884 #, c-format msgid "Downloading %d waypoint..." msgid_plural "Downloading %d waypoints..." msgstr[0] "%d waypoint aan het downloaden..." msgstr[1] "%d waypoints aan het downloaden..." #: ../src/datasource_gps.c:298 ../src/vikgpslayer.c:885 #, c-format msgid "Downloading %d trackpoint..." msgid_plural "Downloading %d trackpoints..." msgstr[0] "%d trackpoint aan het downloaden..." msgstr[1] "%d trackpoints aan het downloaden..." #: ../src/datasource_gps.c:303 ../src/vikgpslayer.c:890 #, c-format msgid "Downloading %d routepoint..." msgid_plural "Downloading %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/datasource_gps.c:325 ../src/datasource_gps.c:326 #: ../src/datasource_gps.c:327 #, c-format msgid "Downloaded %d out of %d %s..." msgstr "%d van %d %s gedownloaded..." #: ../src/datasource_gps.c:331 ../src/datasource_gps.c:332 #: ../src/datasource_gps.c:333 #, c-format msgid "Downloaded %d %s." msgstr "%d %s gedownloaded." #: ../src/datasource_gps.c:347 ../src/vikgpslayer.c:968 #, c-format msgid "GPS Device: %s" msgstr "GPS Apparaat: %s" #: ../src/datasource_gps.c:370 ../src/vikgpslayer.c:1042 #: ../src/vikgpslayer.c:1110 msgid "Status: Working..." msgstr "" #: ../src/datasource_gps.c:469 ../src/vikgpslayer.c:150 msgid "GPS Protocol:" msgstr "GPS Protocol:" #. List now assigned at runtime #: ../src/datasource_gps.c:488 ../src/vikgpslayer.c:151 msgid "Serial Port:" msgstr "Seriële Poort:" #: ../src/datasource_gps.c:509 msgid "" "Turn Off After Transfer\n" "(Garmin/NAViLink Only)" msgstr "" "Uitschakelen na overdracht\n" "(Enkel Garmin/NAViLink)" #: ../src/datasource_gps.c:512 msgid "Tracks:" msgstr "Sporen:" #: ../src/datasource_gps.c:516 msgid "Routes:" msgstr "" #: ../src/datasource_gps.c:520 msgid "Waypoints:" msgstr "Waypoints:" #: ../src/datasource_gps.c:594 ../src/vikgpslayer.c:1305 msgid "GPS device: N/A" msgstr "GPS Apparaat: N/A" #: ../src/datasource_osm.c:52 ../src/datasource_osm.c:53 msgid "OSM traces" msgstr "OSM traces" #: ../src/datasource_osm.c:80 msgid "Page number:" msgstr "Paginanummer:" #: ../src/datasource_osm_my_traces.c:63 ../src/datasource_osm_my_traces.c:64 msgid "OSM My Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:108 msgid "Username:" msgstr "" #: ../src/datasource_osm_my_traces.c:113 msgid "The email or username used to login to OSM" msgstr "" #: ../src/datasource_osm_my_traces.c:115 ../src/osm-traces.c:413 msgid "Password:" msgstr "Wachtwoord:" #: ../src/datasource_osm_my_traces.c:120 msgid "The password used to login to OSM" msgstr "" #: ../src/datasource_osm_my_traces.c:430 msgid "Description" msgstr "" #: ../src/datasource_osm_my_traces.c:445 msgid "Privacy" msgstr "" #: ../src/datasource_osm_my_traces.c:452 msgid "Within Current View" msgstr "" #: ../src/datasource_osm_my_traces.c:518 msgid "GPS Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:520 msgid "None found!" msgstr "" #: ../src/datasource_osm_my_traces.c:629 msgid "My OSM Traces" msgstr "" #: ../src/datasource_osm_my_traces.c:645 #, c-format msgid "Unable to get trace: %s" msgstr "" #: ../src/datasource_wikipedia.c:32 msgid "Create Waypoints from Wikipedia Articles" msgstr "" #: ../src/datasource_wikipedia.c:33 msgid "Wikipedia Waypoints" msgstr "" #: ../src/dem.c:65 ../src/dem.c:79 msgid "Invalid DEM" msgstr "Ongeldig DEM" #: ../src/dem.c:121 msgid "Invalid DEM header" msgstr "Ongeldige DEM hoofding" #: ../src/dem.c:190 ../src/dem.c:203 msgid "Incorrect DEM Class B record: expected 1" msgstr "Foute DEM Class B record: verwacht 1" #: ../src/dem.c:360 #, c-format msgid "Couldn't map file %s: %s" msgstr "" #: ../src/download.c:112 msgid "Tile age (s):" msgstr "" #: ../src/download.c:233 #, c-format msgid "Download error: %s" msgstr "Download fout: %s" #: ../src/download.c:313 msgid "couldn't open temp file" msgstr "kon temp bestand niet openen" #: ../src/file.c:456 ../src/file.c:461 #, c-format msgid "Draw mode '%s' no more supported" msgstr "" #: ../src/geotag_exif.c:433 msgid "Not enough memory." msgstr "Onvoldoende geheugen." #: ../src/geotag_exif.c:451 msgid "Setting a value for this tag is unsupported!" msgstr "" #: ../src/geotag_exif.c:470 #, c-format msgid "Too few components specified (need %d, found %d)\n" msgstr "" #: ../src/geotag_exif.c:474 msgid "Numeric value expected\n" msgstr "Numerieke waarde verwacht\n" #: ../src/geotag_exif.c:482 msgid "This shouldn't happen!" msgstr "Dit zou niet mogen gebeuren!" #: ../src/geotag_exif.c:552 msgid "Not yet implemented!" msgstr "Nog niet geïmplementeerd!" #: ../src/geotag_exif.c:565 msgid "Warning; Too many components specified!" msgstr "" #: ../src/osm-traces.c:73 msgid "Identifiable (public w/ timestamps)" msgstr "" #: ../src/osm-traces.c:74 msgid "Trackable (private w/ timestamps)" msgstr "" #: ../src/osm-traces.c:75 msgid "Public" msgstr "Publiek" #: ../src/osm-traces.c:76 msgid "Private" msgstr "Privé" #: ../src/osm-traces.c:93 msgid "OSM username:" msgstr "OSM gebruikersnaam:" #: ../src/osm-traces.c:94 msgid "OSM password:" msgstr "OSM wachtwoord" #. Preferences #: ../src/osm-traces.c:151 msgid "OpenStreetMap Traces" msgstr "OpenStreetMap Traces" #: ../src/osm-traces.c:234 #, c-format msgid "failed to upload data: HTTP response is %ld" msgstr "" #: ../src/osm-traces.c:239 #, c-format msgid "curl_easy_getinfo failed: %d" msgstr "curl_easy_getinfo gefaald: %d" #: ../src/osm-traces.c:244 #, c-format msgid "curl request failed: %s" msgstr "curl request gefaald: %s" #: ../src/osm-traces.c:275 #, c-format msgid "failed to open temporary file: %s" msgstr "" #. Success #: ../src/osm-traces.c:328 msgid "Uploaded to OSM" msgstr "Geuploaded naar OSM" #: ../src/osm-traces.c:332 msgid "FAILED TO UPLOAD DATA TO OSM - CURL PROBLEM" msgstr "" #: ../src/osm-traces.c:335 msgid "FAILED TO UPLOAD DATA TO OSM" msgstr "" #: ../src/osm-traces.c:335 msgid "HTTP response code" msgstr "HTTP response code" #: ../src/osm-traces.c:348 #, c-format msgid "failed to unlink temporary file: %s" msgstr "" #: ../src/osm-traces.c:387 msgid "OSM upload" msgstr "OSM upload" #: ../src/osm-traces.c:405 msgid "Email:" msgstr "E-mailadres:" #: ../src/osm-traces.c:410 msgid "" "The email used as login\n" "Enter the email you use to login into www.openstreetmap.org." msgstr "" #: ../src/osm-traces.c:418 msgid "" "The password used to login\n" "Enter the password you use to login into " "www.openstreetmap.org." msgstr "" #: ../src/osm-traces.c:423 msgid "File's name:" msgstr "Bestandsnaam:" #: ../src/osm-traces.c:433 msgid "" "The name of the file on OSM\n" "This is the name of the file created on the server.This is not the " "name of the local file." msgstr "" #: ../src/osm-traces.c:442 msgid "The description of the trace" msgstr "" #: ../src/osm-traces.c:444 msgid "Tags:" msgstr "Labels:" #: ../src/osm-traces.c:449 msgid "The tags associated to the trace" msgstr "" #: ../src/osm-traces.c:482 #, c-format msgid "Uploading %s to OSM" msgstr "" #: ../src/mapcache.c:61 msgid "Map cache memory size (MB):" msgstr "" #: ../src/print.c:53 msgid "None" msgstr "Geen" #: ../src/print.c:54 msgid "Horizontally" msgstr "Horizontaal" #: ../src/print.c:55 msgid "Vertically" msgstr "Verticaal" #: ../src/print.c:56 msgid "Both" msgstr "Beide" #: ../src/print.c:120 msgid "Image Settings" msgstr "Afbeeldinginstellingen" #: ../src/print.c:546 msgid "done" msgstr "voltooid" #. Page Size #: ../src/print.c:575 msgid "_Adjust Page Size and Orientation" msgstr "" #: ../src/print.c:591 msgid "C_enter:" msgstr "_Midden:" #. ignore page margins #: ../src/print.c:609 msgid "Ignore Page _Margins" msgstr "Pagina_marges negeren" #: ../src/print.c:628 msgid "Image S_ize:" msgstr "" #: ../src/util.c:81 msgid "Could not launch web browser." msgstr "" #: ../src/util.c:92 msgid "Could not create new email." msgstr "" #: ../src/vikcoordlayer.c:46 msgid "Color:" msgstr "Kleur:" #: ../src/vikcoordlayer.c:47 msgid "Minutes Width:" msgstr "" #: ../src/vikcoordlayer.c:48 msgid "Line Thickness:" msgstr "" #: ../src/vikcoordlayer.c:56 msgid "Coordinate" msgstr "" #: ../src/datasource_bfilter.c:46 msgid "Max number of points:" msgstr "" #: ../src/datasource_bfilter.c:60 msgid "Simplify All Tracks..." msgstr "" #: ../src/datasource_bfilter.c:61 msgid "Simplified Tracks" msgstr "" #: ../src/datasource_bfilter.c:96 ../src/datasource_bfilter.c:97 msgid "Remove Duplicate Waypoints" msgstr "" #: ../src/datasource_bfilter.c:129 msgid "Waypoints Inside This" msgstr "" #: ../src/datasource_bfilter.c:130 msgid "Polygonized Layer" msgstr "" #: ../src/datasource_bfilter.c:165 msgid "Waypoints Outside This" msgstr "" #: ../src/datasource_bfilter.c:166 msgid "Polygonzied Layer" msgstr "" #: ../src/main.c:89 #, c-format msgid "Ignoring Xlib error: error code %d request code %d\n" msgstr "" #: ../src/main.c:102 msgid "Enable debug output" msgstr "Debug-uitvoer aanzetten" #: ../src/main.c:103 msgid "Enable verbose output" msgstr "Extra uitvoer inschakelen" #: ../src/main.c:104 msgid "Show version" msgstr "Toon versie" #: ../src/osm.c:106 msgid "On Disk OSM Tile Format" msgstr "" #: ../src/osm.c:121 msgid "OSM (view)" msgstr "OSM (bekijken)" #: ../src/osm.c:125 msgid "OSM (edit)" msgstr "OSM (editeren)" #: ../src/osm.c:129 msgid "OSM (render)" msgstr "OSM (weergeven)" #. Example: http://127.0.0.1:8111/load_and_zoom?left=8.19&right=8.20&top=48.605&bottom=48.590&select=node413602999 #. JOSM or merkaartor must already be running with remote interface enabled #: ../src/osm.c:136 msgid "Local port 8111 (eg JOSM)" msgstr "Lokale poort 8111 (vb JOSM)" #: ../src/preferences.c:285 msgid "Preferences" msgstr "Voorkeuren" #: ../src/uibuilder.c:147 msgid "Take care that this password will be stored clearly in a plain file." msgstr "" #: ../src/vikaggregatelayer.c:37 msgid "Aggregate" msgstr "" #: ../src/vikdemlayer.c:101 msgid "Absolute height" msgstr "" #: ../src/vikdemlayer.c:102 msgid "Height gradient" msgstr "" #: ../src/vikdemlayer.c:118 msgid "DEM Files:" msgstr "" #: ../src/vikdemlayer.c:119 msgid "Download Source:" msgstr "" #: ../src/vikdemlayer.c:120 msgid "Min Elev Color:" msgstr "" #: ../src/vikdemlayer.c:121 msgid "Type:" msgstr "Type:" #: ../src/vikdemlayer.c:122 msgid "Min Elev:" msgstr "" #: ../src/vikdemlayer.c:123 msgid "Max Elev:" msgstr "" #: ../src/vikdemlayer.c:134 msgid "_DEM Download" msgstr "" #: ../src/vikdemlayer.c:134 msgid "DEM Download" msgstr "" #: ../src/vikdemlayer.c:188 msgid "DEM" msgstr "" #: ../src/vikdemlayer.c:284 #, c-format msgid "Number of files: %d" msgstr "" #: ../src/vikdemlayer.c:385 msgid "DEM Loading" msgstr "" #: ../src/vikdemlayer.c:889 #, c-format msgid "No SRTM data available for %f, %f" msgstr "" #: ../src/vikdemlayer.c:1149 #, c-format msgid "Downloading DEM %s" msgstr "" #: ../src/vikfileentry.c:68 msgid "Browse..." msgstr "Bladeren..." #: ../src/vikfileentry.c:96 msgid "Choose file" msgstr "Bestand kiezen" #: ../src/vikfilelist.c:48 msgid "Choose file(s)" msgstr "Bestand(en) kiezen" #: ../src/vikfilelist.c:172 msgid "Add..." msgstr "Toevoegen..." #: ../src/vikfilelist.c:173 msgid "Delete" msgstr "Verwijderen" #: ../src/vikgeoreflayer.c:70 msgid "_Georef Move Map" msgstr "" #: ../src/vikgeoreflayer.c:70 msgid "Georef Move Map" msgstr "" #: ../src/vikgeoreflayer.c:77 msgid "Georef Z_oom Tool" msgstr "" #: ../src/vikgeoreflayer.c:77 msgid "Georef Zoom Tool" msgstr "" #: ../src/vikgeoreflayer.c:87 msgid "GeoRef Map" msgstr "" #: ../src/vikgeoreflayer.c:335 ../src/vikmapslayer.c:685 #, c-format msgid "Couldn't open image file: %s" msgstr "" #: ../src/vikgeoreflayer.c:365 msgid "Unexpected end of file reading World file." msgstr "" #: ../src/vikgeoreflayer.c:381 ../src/vikgeoreflayer.c:426 msgid "Choose World file" msgstr "" #: ../src/vikgeoreflayer.c:394 msgid "The World file you requested could not be opened for reading." msgstr "" #: ../src/vikgeoreflayer.c:439 msgid "The file you requested could not be opened for writing." msgstr "" #: ../src/vikgeoreflayer.c:456 ../src/viklayer.c:480 msgid "Layer Properties" msgstr "Eigenschappen voor laag" #: ../src/vikgeoreflayer.c:478 msgid "World File Parameters:" msgstr "" #: ../src/vikgeoreflayer.c:479 msgid "Load From File..." msgstr "Laden uit bestand..." #: ../src/vikgeoreflayer.c:484 msgid "Corner pixel easting:" msgstr "" #: ../src/vikgeoreflayer.c:486 msgid "the UTM \"easting\" value of the upper-right corner pixel of the map" msgstr "" #: ../src/vikgeoreflayer.c:488 msgid "Corner pixel northing:" msgstr "" #: ../src/vikgeoreflayer.c:490 msgid "the UTM \"northing\" value of the upper-right corner pixel of the map" msgstr "" #: ../src/vikgeoreflayer.c:492 msgid "X (easting) scale (mpp): " msgstr "" #: ../src/vikgeoreflayer.c:493 msgid "Y (northing) scale (mpp): " msgstr "" #: ../src/vikgeoreflayer.c:496 msgid "the scale of the map in the X direction (meters per pixel)" msgstr "" #: ../src/vikgeoreflayer.c:498 msgid "the scale of the map in the Y direction (meters per pixel)" msgstr "" #: ../src/vikgeoreflayer.c:500 msgid "Map Image:" msgstr "" #. Now with icons #: ../src/vikgeoreflayer.c:608 msgid "_Zoom to Fit Map" msgstr "" #: ../src/vikgeoreflayer.c:614 msgid "_Goto Map Center" msgstr "" #: ../src/vikgeoreflayer.c:620 msgid "_Export to World File" msgstr "" #: ../src/vikgoto.c:75 msgid "No goto tool available." msgstr "" #: ../src/vikgoto.c:88 ../src/vikgoto.c:107 msgid "goto" msgstr "ga naar" #: ../src/vikgoto.c:90 msgid "I don't know that place. Do you want another goto?" msgstr "" #: ../src/vikgoto.c:109 msgid "goto provider:" msgstr "" #: ../src/vikgoto.c:124 msgid "Enter address or place name:" msgstr "" #: ../src/vikgpslayer.c:127 msgid "Data Mode" msgstr "" #: ../src/vikgpslayer.c:129 msgid "Realtime Tracking Mode" msgstr "" #: ../src/vikgpslayer.c:137 msgid "Keep vehicle at center" msgstr "" #: ../src/vikgpslayer.c:138 msgid "Keep vehicle on screen" msgstr "" #: ../src/vikgpslayer.c:139 msgid "Disable" msgstr "" #: ../src/vikgpslayer.c:152 msgid "Download Tracks:" msgstr "Download Tracks:" #: ../src/vikgpslayer.c:153 msgid "Upload Tracks:" msgstr "Upload Tracks:" #: ../src/vikgpslayer.c:154 msgid "Download Routes:" msgstr "" #: ../src/vikgpslayer.c:155 msgid "Upload Routes:" msgstr "" #: ../src/vikgpslayer.c:156 msgid "Download Waypoints:" msgstr "Download Waypoints:" #: ../src/vikgpslayer.c:157 msgid "Upload Waypoints:" msgstr "Upload Waypoints:" #: ../src/vikgpslayer.c:159 msgid "Recording tracks" msgstr "Track opnemen" #: ../src/vikgpslayer.c:160 msgid "Jump to current position on start" msgstr "" #: ../src/vikgpslayer.c:161 msgid "Moving Map Method:" msgstr "" #: ../src/vikgpslayer.c:162 msgid "Gpsd Host:" msgstr "Gpsd Host:" #: ../src/vikgpslayer.c:163 msgid "Gpsd Port:" msgstr "Gpsd Port:" #: ../src/vikgpslayer.c:164 msgid "Gpsd Retry Interval (seconds):" msgstr "Gpsd Retry Interval (seconden):" #: ../src/vikgpslayer.c:179 msgid "GPS" msgstr "" #: ../src/vikgpslayer.c:242 ../src/vikgpslayer.c:1258 msgid "GPS Download" msgstr "GPS Download" #: ../src/vikgpslayer.c:242 ../src/vikgpslayer.c:1258 #: ../src/viktrwlayer.c:3094 msgid "GPS Upload" msgstr "GPS Upload" #: ../src/vikgpslayer.c:244 msgid "GPS Realtime Tracking" msgstr "GPS Realtime Tracking" #: ../src/vikgpslayer.c:451 msgid "Unknown GPS Protocol" msgstr "Onbekend GPS Protocol" #: ../src/vikgpslayer.c:469 msgid "Unknown serial port device" msgstr "" #: ../src/vikgpslayer.c:572 #, c-format msgid "%s: unknown parameter" msgstr "" #. Now with icons #: ../src/vikgpslayer.c:693 msgid "_Upload to GPS" msgstr "" #: ../src/vikgpslayer.c:699 msgid "Download from _GPS" msgstr "Download van _GPS" #: ../src/vikgpslayer.c:720 msgid "Empty _Realtime" msgstr "" #: ../src/vikgpslayer.c:727 msgid "E_mpty Upload" msgstr "" #: ../src/vikgpslayer.c:733 msgid "_Empty Download" msgstr "" #: ../src/vikgpslayer.c:739 msgid "Empty _All" msgstr "" #. #. NB It's not fatal if this gives 2 for example! Hence removal of the g_assert #. This happens when copied GPS layer is deleted (not sure why the number_handlers would be 2) #. I don't think there's any side effects and certainly better than the program just aborting #. #: ../src/vikgpslayer.c:756 #, c-format msgid "Unexpected number of disconnected handlers: %d" msgstr "" #: ../src/vikgpslayer.c:898 #, c-format msgid "Uploading %d waypoint..." msgid_plural "Uploading %d waypoints..." msgstr[0] "Uploaden %d waypoint..." msgstr[1] "Uploaden %d waypoints..." #: ../src/vikgpslayer.c:899 #, c-format msgid "Uploading %d trackpoint..." msgid_plural "Uploading %d trackpoints..." msgstr[0] "Uploaden %d trackpoint..." msgstr[1] "Uploaden %d trackpoints..." #: ../src/vikgpslayer.c:900 #, c-format msgid "Uploading %d routepoint..." msgid_plural "Uploading %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:925 #, c-format msgid "Downloaded %d out of %d waypoint..." msgid_plural "Downloaded %d out of %d waypoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:926 #, c-format msgid "Downloaded %d out of %d trackpoint..." msgid_plural "Downloaded %d out of %d trackpoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:927 #, c-format msgid "Downloaded %d out of %d routepoint..." msgid_plural "Downloaded %d out of %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:932 #, c-format msgid "Uploaded %d out of %d waypoint..." msgid_plural "Uploaded %d out of %d waypoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:933 #, c-format msgid "Uploaded %d out of %d trackpoint..." msgid_plural "Uploaded %d out of %d trackpoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:934 #, c-format msgid "Uploaded %d out of %d routepoint..." msgid_plural "Uploaded %d out of %d routepoints..." msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:942 #, c-format msgid "Downloaded %d waypoint" msgid_plural "Downloaded %d waypoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:943 #, c-format msgid "Downloaded %d trackpoint" msgid_plural "Downloaded %d trackpoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:944 #, c-format msgid "Downloaded %d routepoint" msgid_plural "Downloaded %d routepoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:949 #, c-format msgid "Uploaded %d waypoint" msgid_plural "Uploaded %d waypoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:950 #, c-format msgid "Uploaded %d trackpoint" msgid_plural "Uploaded %d trackpoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:951 #, c-format msgid "Uploaded %d routepoint" msgid_plural "Uploaded %d routepoints" msgstr[0] "" msgstr[1] "" #: ../src/vikgpslayer.c:1180 msgid "Error: couldn't find gpsbabel." msgstr "Fout: kon gpsbabel niet vinden" #: ../src/vikgpslayer.c:1269 msgid "Warning - GPS Upload items may overwrite each other" msgstr "" #: ../src/vikgpslayer.c:1301 msgid "Status: detecting gpsbabel" msgstr "Status: bezig met het waarnemen van gpsbabel" #: ../src/vikgpslayer.c:1332 msgid "No GPS items selected for transfer." msgstr "" #: ../src/vikgpslayer.c:1347 msgid "Could not turn off device." msgstr "" #: ../src/vikgpslayer.c:1385 msgid "Are you sure you want to delete GPS Upload data?" msgstr "" #: ../src/vikgpslayer.c:1398 msgid "Are you sure you want to delete GPS Download data?" msgstr "" #: ../src/vikgpslayer.c:1412 msgid "Are you sure you want to delete GPS Realtime data?" msgstr "" #: ../src/vikgpslayer.c:1425 msgid "Are you sure you want to delete All GPS data?" msgstr "" #: ../src/viklayerspanel.c:55 msgid "/C_ut" msgstr "" #: ../src/viklayerspanel.c:56 msgid "/_Copy" msgstr "" #: ../src/viklayerspanel.c:57 msgid "/_Paste" msgstr "" #: ../src/viklayerspanel.c:58 msgid "/_Delete" msgstr "/_Verwijderen" #: ../src/viklayerspanel.c:59 msgid "/New Layer" msgstr "" #: ../src/viklayerspanel.c:127 msgid "Top Layer" msgstr "" #: ../src/viklayerspanel.c:143 msgid "Add new layer" msgstr "" #: ../src/viklayerspanel.c:150 msgid "Remove selected layer" msgstr "" #: ../src/viklayerspanel.c:157 msgid "Move selected layer up" msgstr "" #: ../src/viklayerspanel.c:164 msgid "Move selected layer down" msgstr "" #: ../src/viklayerspanel.c:171 msgid "Cut selected layer" msgstr "" #: ../src/viklayerspanel.c:178 msgid "Copy selected layer" msgstr "" #: ../src/viklayerspanel.c:185 msgid "Paste layer below selected layer" msgstr "" #. TODO: FIXME: if name has a '/' in it it will get all messed up. why not have an itemfactory field with #. name, icon, shortcut, etc.? #: ../src/viklayerspanel.c:204 ../src/vikwindow.c:3292 #, c-format msgid "New _%s Layer" msgstr "" #: ../src/viklayerspanel.c:511 msgid "Aggregate Layers have no settable properties." msgstr "" #: ../src/viklayerspanel.c:555 msgid "You cannot cut the Top Layer." msgstr "Toplaag kan niet geknipt worden" #: ../src/viklayerspanel.c:600 #, c-format msgid "Are you sure you want to delete %s?" msgstr "Bent u zeker dat u %s wilt verwijderen?" #: ../src/viklayerspanel.c:617 msgid "You cannot delete the Top Layer." msgstr "Oplaag kan niet verwijderd worden" #: ../src/viklayerspanel.c:701 msgid "Are you sure you wish to delete all layers?" msgstr "Bent u zeker dat u alle lagen wilt verwijderen?" #. ******* MAPZOOMS ******** #: ../src/vikmapslayer.c:91 msgid "Use Viking Zoom Level" msgstr "" #: ../src/vikmapslayer.c:124 msgid "Map Type:" msgstr "Kaarttype:" #: ../src/vikmapslayer.c:125 msgid "Maps Directory:" msgstr "Kaart directory:" #: ../src/vikmapslayer.c:126 msgid "Alpha:" msgstr "Alpha:" #: ../src/vikmapslayer.c:127 msgid "Control the Alpha value for transparency effects" msgstr "" #: ../src/vikmapslayer.c:128 msgid "Autodownload maps:" msgstr "" #: ../src/vikmapslayer.c:129 msgid "Autodownload Only Gets Missing Maps:" msgstr "" #: ../src/vikmapslayer.c:130 msgid "" "Using this option avoids attempting to update already acquired tiles. This " "can be useful if you want to restrict the network usage, without having to " "resort to manual control. Only applies when 'Autodownload Maps' is on." msgstr "" #: ../src/vikmapslayer.c:131 msgid "Zoom Level:" msgstr "" #: ../src/vikmapslayer.c:132 msgid "" "Determines the method of displaying map tiles for the current zoom level. " "'Viking Zoom Level' uses the best matching level, otherwise setting a fixed " "value will always use map tiles of the specified value regardless of the " "actual zoom level." msgstr "" #: ../src/vikmapslayer.c:146 msgid "_Maps Download" msgstr "" #: ../src/vikmapslayer.c:146 msgid "Maps Download" msgstr "" #: ../src/vikmapslayer.c:161 msgid "Map" msgstr "Kaart" #: ../src/vikmapslayer.c:249 msgid "Default maplayer directory:" msgstr "" #: ../src/vikmapslayer.c:249 msgid "Choose a directory to store cached Map tiles for this layer" msgstr "" #: ../src/vikmapslayer.c:505 msgid "Unknown map type" msgstr "" #: ../src/vikmapslayer.c:516 msgid "Unknown Map Zoom" msgstr "" #: ../src/vikmapslayer.c:589 #, c-format msgid "" "New map cannot be displayed in the current drawmode.\n" "Select \"%s\" from View menu to view it." msgstr "" #: ../src/vikmapslayer.c:753 #, c-format msgid "" "Cowardly refusing to draw tiles or existence of tiles beyond %d zoom out " "factor" msgstr "" #: ../src/vikmapslayer.c:1157 #, c-format msgid "Redownloading up to %d %s map..." msgid_plural "Redownloading up to %d %s maps..." msgstr[0] "" msgstr[1] "" #: ../src/vikmapslayer.c:1159 #, c-format msgid "Redownloading %d %s map..." msgid_plural "Redownloading %d %s maps..." msgstr[0] "" msgstr[1] "" #: ../src/vikmapslayer.c:1163 ../src/vikmapslayer.c:1238 #, c-format msgid "Downloading %d %s map..." msgid_plural "Downloading %d %s maps..." msgstr[0] "" msgstr[1] "" #: ../src/vikmapslayer.c:1311 #, c-format msgid "" "\n" "Source: %s\n" "\n" "Tile File: %s\n" "Tile File Timestamp: %s" msgstr "" #: ../src/vikmapslayer.c:1318 #, c-format msgid "" "Source: %s\n" "\n" "No Tile File!" msgstr "" #: ../src/vikmapslayer.c:1356 msgid "Redownload _Bad Map(s)" msgstr "" #: ../src/vikmapslayer.c:1360 msgid "Redownload _New Map(s)" msgstr "" #: ../src/vikmapslayer.c:1364 msgid "Redownload _All Map(s)" msgstr "" #: ../src/vikmapslayer.c:1368 msgid "_Show Tile Information" msgstr "" #: ../src/vikmapslayer.c:1449 #, c-format msgid "" "Wrong drawmode for this map.\n" "Select \"%s\" from View menu and try again." msgstr "" #: ../src/vikmapslayer.c:1454 msgid "Wrong zoom level for this map." msgstr "" #. Now with icons #: ../src/vikmapslayer.c:1485 msgid "Download _Missing Onscreen Maps" msgstr "" #: ../src/vikmapslayer.c:1492 msgid "Download _New Onscreen Maps" msgstr "" #: ../src/vikmapslayer.c:1499 msgid "Reload _All Onscreen Maps" msgstr "" #: ../src/viktreeview.c:263 msgid "Layer Name" msgstr "Naam van de laag" #: ../src/viktreeview.c:742 #, c-format msgid "delete data from %s\n" msgstr "verwijder gegevens van %s\n" #: ../src/viktrwlayer.c:377 msgid "Create _Waypoint" msgstr "" #: ../src/viktrwlayer.c:377 msgid "Create Waypoint" msgstr "Maak Waypoint" #: ../src/viktrwlayer.c:383 msgid "Create _Track" msgstr "" #: ../src/viktrwlayer.c:383 msgid "Create Track" msgstr "Maak Track" #: ../src/viktrwlayer.c:392 msgid "Create _Route" msgstr "" #: ../src/viktrwlayer.c:392 msgid "Create Route" msgstr "" #: ../src/viktrwlayer.c:401 msgid "_Edit Waypoint" msgstr "" #: ../src/viktrwlayer.c:401 msgid "Edit Waypoint" msgstr "Bewerk Waypoint" #: ../src/viktrwlayer.c:409 msgid "Edit Trac_kpoint" msgstr "" #: ../src/viktrwlayer.c:409 msgid "Edit Trackpoint" msgstr "Bewerk Trackpoint" #: ../src/viktrwlayer.c:417 msgid "Show P_icture" msgstr "" #: ../src/viktrwlayer.c:417 msgid "Show Picture" msgstr "Toon Afbeelding" #: ../src/viktrwlayer.c:424 msgid "Route _Finder" msgstr "" #: ../src/viktrwlayer.c:424 msgid "Route Finder" msgstr "" #. ***** PARAMETERS ***** #: ../src/viktrwlayer.c:447 ../src/viktrwlayer.c:1942 #: ../src/viktrwlayer.c:1944 msgid "Waypoints" msgstr "Waypoints" #: ../src/viktrwlayer.c:447 ../src/viktrwlayer.c:1933 #: ../src/viktrwlayer.c:1935 msgid "Tracks" msgstr "Sporen" #: ../src/viktrwlayer.c:447 msgid "Waypoint Images" msgstr "" #: ../src/viktrwlayer.c:450 msgid "Draw by Track" msgstr "" #: ../src/viktrwlayer.c:450 msgid "Draw by Speed" msgstr "" #: ../src/viktrwlayer.c:450 msgid "All Tracks Same Color" msgstr "" #: ../src/viktrwlayer.c:451 msgid "Filled Square" msgstr "" #: ../src/viktrwlayer.c:451 msgid "Square" msgstr "Vierkant" #: ../src/viktrwlayer.c:451 msgid "Circle" msgstr "Cirkel" #: ../src/viktrwlayer.c:451 msgid "X" msgstr "X" #: ../src/viktrwlayer.c:477 msgid "Extra Extra Small" msgstr "" #: ../src/viktrwlayer.c:478 msgid "Extra Small" msgstr "" #: ../src/viktrwlayer.c:479 msgid "Small" msgstr "" #: ../src/viktrwlayer.c:480 msgid "Medium" msgstr "" #: ../src/viktrwlayer.c:481 msgid "Large" msgstr "" #: ../src/viktrwlayer.c:482 msgid "Extra Large" msgstr "" #: ../src/viktrwlayer.c:483 msgid "Extra Extra Large" msgstr "" #: ../src/viktrwlayer.c:491 msgid "Track Drawing Mode:" msgstr "" #: ../src/viktrwlayer.c:492 msgid "All Tracks Color:" msgstr "" #: ../src/viktrwlayer.c:493 msgid "The color used when 'All Tracks Same Color' drawing mode is selected" msgstr "" #: ../src/viktrwlayer.c:494 msgid "Draw Track Lines" msgstr "" #: ../src/viktrwlayer.c:495 msgid "Track Thickness:" msgstr "" #: ../src/viktrwlayer.c:496 msgid "Draw Track Direction" msgstr "" #: ../src/viktrwlayer.c:497 msgid "Direction Size:" msgstr "" #: ../src/viktrwlayer.c:498 msgid "Draw Trackpoints" msgstr "" #: ../src/viktrwlayer.c:499 msgid "Trackpoint Size:" msgstr "" #: ../src/viktrwlayer.c:500 msgid "Draw Elevation" msgstr "" #: ../src/viktrwlayer.c:501 msgid "Draw Elevation Height %:" msgstr "" #: ../src/viktrwlayer.c:503 msgid "Draw Stops" msgstr "" #: ../src/viktrwlayer.c:504 msgid "" "Whether to draw a marker when trackpoints are at the same position but over " "the minimum stop length apart in time" msgstr "" #: ../src/viktrwlayer.c:505 msgid "Min Stop Length (seconds):" msgstr "" #: ../src/viktrwlayer.c:507 msgid "Track BG Thickness:" msgstr "" #: ../src/viktrwlayer.c:508 msgid "Track Background Color" msgstr "" #: ../src/viktrwlayer.c:509 msgid "Draw by Speed Factor (%):" msgstr "" #: ../src/viktrwlayer.c:510 msgid "" "The percentage factor away from the average speed determining the color used" msgstr "" #: ../src/viktrwlayer.c:512 msgid "Draw Labels" msgstr "Labels tonen" #: ../src/viktrwlayer.c:513 msgid "Waypoint Font Size:" msgstr "" #: ../src/viktrwlayer.c:514 msgid "Waypoint Color:" msgstr "" #: ../src/viktrwlayer.c:515 msgid "Waypoint Text:" msgstr "" #: ../src/viktrwlayer.c:516 msgid "Background:" msgstr "Achtergrond:" #: ../src/viktrwlayer.c:517 msgid "Fake BG Color Translucency:" msgstr "" #: ../src/viktrwlayer.c:518 msgid "Waypoint marker:" msgstr "" #: ../src/viktrwlayer.c:519 msgid "Waypoint size:" msgstr "" #: ../src/viktrwlayer.c:520 msgid "Draw Waypoint Symbols:" msgstr "" #: ../src/viktrwlayer.c:522 msgid "Draw Waypoint Images" msgstr "" #: ../src/viktrwlayer.c:523 msgid "Image Size (pixels):" msgstr "" #: ../src/viktrwlayer.c:524 msgid "Image Alpha:" msgstr "" #: ../src/viktrwlayer.c:525 msgid "Image Memory Cache Size:" msgstr "" #: ../src/viktrwlayer.c:610 msgid "TrackWaypoint" msgstr "" #: ../src/viktrwlayer.c:1951 ../src/viktrwlayer.c:1953 msgid "Routes" msgstr "" #: ../src/viktrwlayer.c:2144 #, c-format msgid " in %d:%02d hrs:mins" msgstr "" #: ../src/viktrwlayer.c:2148 #, c-format msgid "" "\n" "%sTotal Length %.1f %s%s" msgstr "" #: ../src/viktrwlayer.c:2154 #, c-format msgid "Tracks: %d - Waypoints: %d - Routes: %d%s" msgstr "" #: ../src/viktrwlayer.c:2174 #, c-format msgid "Tracks: %d" msgstr "" #: ../src/viktrwlayer.c:2184 #, c-format msgid "Routes: %d" msgstr "" #: ../src/viktrwlayer.c:2215 #, c-format msgid "- %d:%02d hrs:mins" msgstr "" #: ../src/viktrwlayer.c:2223 #, c-format msgid "%s%.1f km %s" msgstr "" #: ../src/viktrwlayer.c:2226 #, c-format msgid "%s%.1f miles %s" msgstr "" #: ../src/viktrwlayer.c:2240 #, c-format msgid "Waypoints: %d" msgstr "" #: ../src/viktrwlayer.c:2266 #, c-format msgid "Trkpt: Alt %dft" msgstr "" #. VIK_UNITS_HEIGHT_METRES: #: ../src/viktrwlayer.c:2270 #, c-format msgid "Trkpt: Alt %dm" msgstr "" #. Compact date time format #: ../src/viktrwlayer.c:2277 #, c-format msgid " | Time %x %X" msgstr "" #: ../src/viktrwlayer.c:2295 #, c-format msgid " | Track: %s" msgstr "" #. Combine parts to make overall message #: ../src/viktrwlayer.c:2299 #, c-format msgid "%s%s | %s %s %s" msgstr "" #: ../src/viktrwlayer.c:2314 #, c-format msgid "Wpt: Alt %dft" msgstr "" #. VIK_UNITS_HEIGHT_METRES: #: ../src/viktrwlayer.c:2318 #, c-format msgid "Wpt: Alt %dm" msgstr "" #. Add comment if available #: ../src/viktrwlayer.c:2333 #, c-format msgid "%s | %s %s | Comment: %s" msgstr "" #: ../src/viktrwlayer.c:2335 #, c-format msgid "%s | %s %s" msgstr "" #: ../src/viktrwlayer.c:2563 ../src/viktrwlayer.c:2634 msgid "This layer has no waypoints or trackpoints." msgstr "" #: ../src/viktrwlayer.c:2661 ../src/vikwindow.c:2407 ../src/vikwindow.c:2848 #, c-format msgid "The file \"%s\" exists, do you wish to overwrite it?" msgstr "" #: ../src/viktrwlayer.c:2671 ../src/vikwindow.c:2429 msgid "The filename you requested could not be opened for writing." msgstr "" #: ../src/viktrwlayer.c:2676 ../src/viktrwlayer.c:2681 #: ../src/viktrwlayer.c:2691 ../src/viktrwlayer.c:2703 msgid "Export Layer" msgstr "" #: ../src/viktrwlayer.c:2720 msgid "Could not create temporary file for export." msgstr "" #: ../src/viktrwlayer.c:2729 #, c-format msgid "Could not launch %s." msgstr "" #: ../src/viktrwlayer.c:2773 msgid "Export Track as GPX" msgstr "" #: ../src/viktrwlayer.c:2795 msgid "Find" msgstr "" #: ../src/viktrwlayer.c:2805 msgid "Waypoint Name:" msgstr "" #: ../src/viktrwlayer.c:2822 msgid "Waypoint not found in this layer." msgstr "" #: ../src/viktrwlayer.c:3090 msgid "Can not upload invisible track." msgstr "" #: ../src/viktrwlayer.c:3192 ../src/viktrwlayer.c:7785 msgid "Track" msgstr "" #: ../src/viktrwlayer.c:3215 ../src/viktrwlayer.c:7817 msgid "Route" msgstr "" #: ../src/viktrwlayer.c:3296 ../src/viktrwlayer.c:6265 #: ../src/viktrwlayer.c:6314 msgid "_Finish Route" msgstr "" #: ../src/viktrwlayer.c:3298 ../src/viktrwlayer.c:6223 #: ../src/viktrwlayer.c:6312 msgid "_Finish Track" msgstr "" #. Now with icons #: ../src/viktrwlayer.c:3310 msgid "_View Layer" msgstr "" #: ../src/viktrwlayer.c:3317 msgid "V_iew" msgstr "" #: ../src/viktrwlayer.c:3323 msgid "View All _Tracks" msgstr "" #: ../src/viktrwlayer.c:3328 msgid "View All _Routes" msgstr "" #: ../src/viktrwlayer.c:3333 msgid "View All _Waypoints" msgstr "" #: ../src/viktrwlayer.c:3338 msgid "_Goto Center of Layer" msgstr "" #: ../src/viktrwlayer.c:3344 ../src/viktrwlayer.c:6199 msgid "Goto _Waypoint..." msgstr "" #: ../src/viktrwlayer.c:3350 msgid "_Export Layer" msgstr "" #: ../src/viktrwlayer.c:3356 msgid "Export as GPS_Point..." msgstr "" #: ../src/viktrwlayer.c:3361 msgid "Export as GPS_Mapper..." msgstr "" #: ../src/viktrwlayer.c:3366 msgid "Export as _GPX..." msgstr "" #: ../src/viktrwlayer.c:3371 msgid "Export as _KML..." msgstr "" #: ../src/viktrwlayer.c:3376 msgid "Open with External Program_1: " msgstr "" #: ../src/viktrwlayer.c:3383 msgid "Open with External Program_2: " msgstr "" #: ../src/viktrwlayer.c:3391 ../src/vikwindow.c:3145 msgid "_New" msgstr "" #: ../src/viktrwlayer.c:3397 msgid "New _Waypoint..." msgstr "" #: ../src/viktrwlayer.c:3403 msgid "New _Track" msgstr "" #: ../src/viktrwlayer.c:3411 msgid "New _Route" msgstr "" #: ../src/viktrwlayer.c:3420 ../src/viktrwlayer.c:6597 msgid "Geotag _Images..." msgstr "" #: ../src/viktrwlayer.c:3427 msgid "_Acquire" msgstr "" #: ../src/viktrwlayer.c:3433 ../src/vikwindow.c:3150 msgid "From _GPS..." msgstr "" #: ../src/viktrwlayer.c:3439 msgid "From Google _Directions..." msgstr "" #: ../src/viktrwlayer.c:3446 msgid "From _OSM Traces..." msgstr "" #: ../src/viktrwlayer.c:3451 msgid "From _My OSM Traces..." msgstr "" #: ../src/viktrwlayer.c:3459 ../src/vikwindow.c:3166 msgid "From _Wikipedia Waypoints" msgstr "" #: ../src/viktrwlayer.c:3465 msgid "Within _Layer Bounds" msgstr "" #: ../src/viktrwlayer.c:3471 msgid "Within _Current View" msgstr "" #: ../src/viktrwlayer.c:3479 msgid "From Geo_caching..." msgstr "" #: ../src/viktrwlayer.c:3486 ../src/vikwindow.c:3163 msgid "From Geotagged _Images..." msgstr "" #: ../src/viktrwlayer.c:3492 msgid "From _File..." msgstr "" #: ../src/viktrwlayer.c:3498 ../src/viktrwlayer.c:6542 msgid "_Upload" msgstr "" #: ../src/viktrwlayer.c:3504 msgid "Upload to _GPS..." msgstr "" #: ../src/viktrwlayer.c:3511 ../src/viktrwlayer.c:6570 msgid "Upload to _OSM..." msgstr "" #: ../src/viktrwlayer.c:3519 msgid "De_lete" msgstr "" #: ../src/viktrwlayer.c:3525 msgid "Delete All _Tracks" msgstr "" #: ../src/viktrwlayer.c:3531 msgid "Delete Tracks _From Selection..." msgstr "" #: ../src/viktrwlayer.c:3537 ../src/viktrwlayer.c:6290 msgid "Delete _All Routes" msgstr "" #: ../src/viktrwlayer.c:3543 ../src/viktrwlayer.c:6296 msgid "_Delete Routes From Selection..." msgstr "" #: ../src/viktrwlayer.c:3549 msgid "Delete All _Waypoints" msgstr "" #: ../src/viktrwlayer.c:3555 msgid "Delete Waypoints From _Selection..." msgstr "" #: ../src/viktrwlayer.c:4128 #, c-format msgid "Are you sure you want to delete all tracks in %s?" msgstr "" #: ../src/viktrwlayer.c:4138 #, c-format msgid "Are you sure you want to delete all routes in %s?" msgstr "" #: ../src/viktrwlayer.c:4148 #, c-format msgid "Are you sure you want to delete all waypoints in %s?" msgstr "" #: ../src/viktrwlayer.c:4165 #, c-format msgid "Are you sure you want to delete the waypoint \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4178 #, c-format msgid "Are you sure you want to delete the track \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4191 #, c-format msgid "Are you sure you want to delete the route \"%s\"" msgstr "" #: ../src/viktrwlayer.c:4351 ../src/viktrwlayer.c:4922 msgid "" "Converting a track to a route removes extra track data such as segments, " "timestamps, etc...\n" "Do you want to continue?" msgstr "" #: ../src/viktrwlayer.c:4711 msgid "Failed. No other tracks with timestamps in this layer found" msgstr "" #: ../src/viktrwlayer.c:4713 msgid "Failed. No other tracks without timestamps in this layer found" msgstr "" #: ../src/viktrwlayer.c:4732 msgid "Merge with..." msgstr "" #: ../src/viktrwlayer.c:4733 msgid "Select route to merge with" msgstr "" #: ../src/viktrwlayer.c:4733 msgid "Select track to merge with" msgstr "" #: ../src/viktrwlayer.c:4818 ../src/viktrwlayer.c:4895 msgid "Append Route" msgstr "" #: ../src/viktrwlayer.c:4818 ../src/viktrwlayer.c:4895 msgid "Append Track" msgstr "" #: ../src/viktrwlayer.c:4819 msgid "Select the route to append after the current route" msgstr "" #: ../src/viktrwlayer.c:4820 msgid "Select the track to append after the current track" msgstr "" #: ../src/viktrwlayer.c:4896 msgid "Select the track to append after the current route" msgstr "" #: ../src/viktrwlayer.c:4897 msgid "Select the route to append after the current track" msgstr "" #: ../src/viktrwlayer.c:4957 #, c-format msgid "%d segment merged" msgid_plural "%d segments merged" msgstr[0] "" msgstr[1] "" #: ../src/viktrwlayer.c:4973 msgid "Failed. This track does not have timestamp" msgstr "" #: ../src/viktrwlayer.c:4985 msgid "Failed. No other track in this layer has timestamp" msgstr "" #: ../src/viktrwlayer.c:4992 msgid "Merge Threshold..." msgstr "" #: ../src/viktrwlayer.c:4993 msgid "Merge when time between tracks less than:" msgstr "" #: ../src/viktrwlayer.c:5128 msgid "Split Threshold..." msgstr "" #: ../src/viktrwlayer.c:5129 msgid "Split when time between trackpoints exceeds:" msgstr "" #: ../src/viktrwlayer.c:5205 msgid "Split Every Nth Point" msgstr "" #: ../src/viktrwlayer.c:5206 msgid "Split on every Nth point:" msgstr "" #: ../src/viktrwlayer.c:5312 msgid "Can not split track as it has no segments" msgstr "" #: ../src/viktrwlayer.c:5340 ../src/viktrwlayer.c:5370 #, c-format msgid "Deleted %ld point" msgid_plural "Deleted %ld points" msgstr[0] "" msgstr[1] "" #: ../src/viktrwlayer.c:5531 msgid "Internal Error in vik_trw_layer_uniquify_tracks" msgstr "" #: ../src/viktrwlayer.c:5588 ../src/viktrwlayer.c:5635 #: ../src/viktrwlayer.c:5814 msgid "" "Multiple entries with the same name exist. This method only works with " "unique names. Force unique names now?" msgstr "" #: ../src/viktrwlayer.c:5599 msgid "No tracks found" msgstr "" #: ../src/viktrwlayer.c:5607 ../src/viktrwlayer.c:5654 #: ../src/viktrwlayer.c:5834 msgid "Delete Selection" msgstr "" #: ../src/viktrwlayer.c:5608 msgid "Select tracks to delete" msgstr "" #: ../src/viktrwlayer.c:5646 msgid "No routes found" msgstr "" #: ../src/viktrwlayer.c:5655 msgid "Select routes to delete" msgstr "" #: ../src/viktrwlayer.c:5761 msgid "Internal Error in vik_trw_layer_uniquify_waypoints" msgstr "" #: ../src/viktrwlayer.c:5824 msgid "No waypoints found" msgstr "" #: ../src/viktrwlayer.c:5835 msgid "Select waypoints to delete" msgstr "" #: ../src/viktrwlayer.c:5896 #, c-format msgid "" "A waypoint with the name \"%s\" already exists. Really rename to the same " "name?" msgstr "" #: ../src/viktrwlayer.c:5926 #, c-format msgid "" "A track with the name \"%s\" already exists. Really rename to the same name?" msgstr "" #: ../src/viktrwlayer.c:5963 #, c-format msgid "" "A route with the name \"%s\" already exists. Really rename to the same name?" msgstr "" #: ../src/viktrwlayer.c:6085 ../src/viktrwlayer.c:6337 msgid "_Goto" msgstr "" #: ../src/viktrwlayer.c:6104 msgid "_Visit Geocache Webpage" msgstr "" #: ../src/viktrwlayer.c:6123 msgid "_Show Picture..." msgstr "" #: ../src/viktrwlayer.c:6131 msgid "Update Geotag on _Image" msgstr "" #: ../src/viktrwlayer.c:6137 msgid "_Update" msgstr "" #: ../src/viktrwlayer.c:6142 msgid "Update and _Keep File Timestamp" msgstr "" #: ../src/viktrwlayer.c:6153 msgid "Visit _Webpage" msgstr "" #: ../src/viktrwlayer.c:6184 msgid "_New Waypoint..." msgstr "" #: ../src/viktrwlayer.c:6193 msgid "_View All Waypoints" msgstr "" #: ../src/viktrwlayer.c:6205 msgid "Delete _All Waypoints" msgstr "" #: ../src/viktrwlayer.c:6211 msgid "_Delete Waypoints From Selection..." msgstr "" #: ../src/viktrwlayer.c:6233 msgid "_View All Tracks" msgstr "" #: ../src/viktrwlayer.c:6239 msgid "_New Track" msgstr "" #: ../src/viktrwlayer.c:6247 msgid "Delete _All Tracks" msgstr "" #: ../src/viktrwlayer.c:6253 msgid "_Delete Tracks From Selection..." msgstr "" #: ../src/viktrwlayer.c:6276 msgid "_View All Routes" msgstr "" #: ../src/viktrwlayer.c:6282 msgid "_New Route" msgstr "" #: ../src/viktrwlayer.c:6327 msgid "_View Track" msgstr "" #: ../src/viktrwlayer.c:6329 msgid "_View Route" msgstr "" #: ../src/viktrwlayer.c:6343 msgid "_Startpoint" msgstr "" #: ../src/viktrwlayer.c:6349 msgid "\"_Center\"" msgstr "" #: ../src/viktrwlayer.c:6355 msgid "_Endpoint" msgstr "" #: ../src/viktrwlayer.c:6361 msgid "_Highest Altitude" msgstr "" #: ../src/viktrwlayer.c:6367 msgid "_Lowest Altitude" msgstr "" #: ../src/viktrwlayer.c:6375 msgid "_Maximum Speed" msgstr "" #: ../src/viktrwlayer.c:6384 msgid "Co_mbine" msgstr "" #: ../src/viktrwlayer.c:6392 msgid "_Merge By Time..." msgstr "" #: ../src/viktrwlayer.c:6397 msgid "Merge _Segments" msgstr "" #: ../src/viktrwlayer.c:6403 msgid "Merge _With Other Tracks..." msgstr "" #: ../src/viktrwlayer.c:6409 msgid "_Append Track..." msgstr "" #: ../src/viktrwlayer.c:6411 msgid "_Append Route..." msgstr "" #: ../src/viktrwlayer.c:6417 msgid "Append _Route..." msgstr "" #: ../src/viktrwlayer.c:6419 msgid "Append _Track..." msgstr "" #: ../src/viktrwlayer.c:6426 msgid "_Split" msgstr "" #: ../src/viktrwlayer.c:6434 msgid "_Split By Time..." msgstr "" #. ATM always enable this entry - don't want to have to analyse the track before displaying the menu - to keep the menu speedy #: ../src/viktrwlayer.c:6440 msgid "Split Se_gments" msgstr "" #: ../src/viktrwlayer.c:6446 msgid "Split By _Number of Points..." msgstr "" #: ../src/viktrwlayer.c:6451 msgid "Split at _Trackpoint" msgstr "" #: ../src/viktrwlayer.c:6460 msgid "Delete Poi_nts" msgstr "" #: ../src/viktrwlayer.c:6466 msgid "Delete Points With The Same _Position" msgstr "" #: ../src/viktrwlayer.c:6471 msgid "Delete Points With The Same _Time" msgstr "" #: ../src/viktrwlayer.c:6477 msgid "_Reverse Track" msgstr "" #: ../src/viktrwlayer.c:6479 msgid "_Reverse Route" msgstr "" #: ../src/viktrwlayer.c:6488 msgid "Down_load Maps Along Track..." msgstr "" #: ../src/viktrwlayer.c:6490 msgid "Down_load Maps Along Route..." msgstr "" #: ../src/viktrwlayer.c:6497 msgid "_Apply DEM Data" msgstr "" #: ../src/viktrwlayer.c:6504 msgid "_Export Track as GPX..." msgstr "" #: ../src/viktrwlayer.c:6506 msgid "_Export Route as GPX..." msgstr "" #: ../src/viktrwlayer.c:6513 msgid "E_xtend Track End" msgstr "" #: ../src/viktrwlayer.c:6515 msgid "E_xtend Route End" msgstr "" #: ../src/viktrwlayer.c:6522 msgid "C_onvert to a Route" msgstr "" #: ../src/viktrwlayer.c:6524 msgid "C_onvert to a Track" msgstr "" #: ../src/viktrwlayer.c:6532 msgid "Extend _Using Route Finder" msgstr "" #: ../src/viktrwlayer.c:6548 msgid "_Upload to GPS..." msgstr "" #: ../src/viktrwlayer.c:6559 msgid "_View Google Directions" msgstr "" #: ../src/viktrwlayer.c:6579 msgid "Use with _Filter" msgstr "" #: ../src/viktrwlayer.c:6612 msgid "_Edit Trackpoint" msgstr "" #: ../src/viktrwlayer.c:7524 #, c-format msgid " - Gain %dm:Loss %dm" msgstr "" #: ../src/viktrwlayer.c:7526 #, c-format msgid " - Gain %dft:Loss %dft" msgstr "" #: ../src/viktrwlayer.c:7531 #, c-format msgid " - Bearing %3.1f° - Step %s" msgstr "" #: ../src/viktrwlayer.c:8124 #, c-format msgid "Could not launch %s to open file." msgstr "" #: ../src/viktrwlayer.c:8205 #, c-format msgid "Creating %d Image Thumbnails..." msgstr "" #: ../src/viktrwlayer.c:8524 msgid "No map layer in use. Create one first" msgstr "" #: ../src/viktrwlayer_propwin.c:898 ../src/viktrwlayer_propwin.c:1155 #, c-format msgid "%.1f kph" msgstr "" #: ../src/viktrwlayer_propwin.c:901 ../src/viktrwlayer_propwin.c:1158 #, c-format msgid "%.1f mph" msgstr "" #: ../src/viktrwlayer_propwin.c:904 ../src/viktrwlayer_propwin.c:1161 #, c-format msgid "%.1f knots" msgstr "" #. VIK_UNITS_SPEED_METRES_PER_SECOND: #: ../src/viktrwlayer_propwin.c:908 ../src/viktrwlayer_propwin.c:1165 #, c-format msgid "%.1f m/s" msgstr "" #: ../src/viktrwlayer_propwin.c:1745 #, c-format msgid "%.1f miles" msgstr "" #: ../src/viktrwlayer_propwin.c:1747 #, c-format msgid "%.1f km" msgstr "" #: ../src/viktrwlayer_propwin.c:2681 msgid "Failed spliting track. Track unchanged" msgstr "" #: ../src/viktrwlayer_propwin.c:2779 ../src/viktrwlayer_propwin.c:3178 #, c-format msgid "%s - Track Properties" msgstr "" #: ../src/viktrwlayer_propwin.c:2784 msgid "Split at _Marker" msgstr "" #: ../src/viktrwlayer_propwin.c:2785 msgid "Split _Segments" msgstr "" #: ../src/viktrwlayer_propwin.c:2786 msgid "_Reverse" msgstr "" #: ../src/viktrwlayer_propwin.c:2787 msgid "_Delete Dupl." msgstr "" #: ../src/viktrwlayer_propwin.c:2813 msgid "Comment:" msgstr "" #: ../src/viktrwlayer_propwin.c:2814 msgid "Description:" msgstr "" #: ../src/viktrwlayer_propwin.c:2815 msgid "Track Length:" msgstr "" #: ../src/viktrwlayer_propwin.c:2816 msgid "Trackpoints:" msgstr "" #: ../src/viktrwlayer_propwin.c:2817 msgid "Segments:" msgstr "" #: ../src/viktrwlayer_propwin.c:2818 msgid "Duplicate Points:" msgstr "" #: ../src/viktrwlayer_propwin.c:2819 msgid "Max Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:2820 msgid "Avg. Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:2821 msgid "Moving Avg. Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:2822 msgid "Avg. Dist. Between TPs:" msgstr "" #: ../src/viktrwlayer_propwin.c:2823 msgid "Elevation Range:" msgstr "" #: ../src/viktrwlayer_propwin.c:2824 msgid "Total Elevation Gain/Loss:" msgstr "" #: ../src/viktrwlayer_propwin.c:2825 msgid "Start:" msgstr "" #: ../src/viktrwlayer_propwin.c:2826 msgid "End:" msgstr "" #: ../src/viktrwlayer_propwin.c:2827 msgid "Duration:" msgstr "" #: ../src/viktrwlayer_propwin.c:2828 msgid "Color:" msgstr "" #: ../src/viktrwlayer_propwin.c:2877 ../src/viktrwlayer_propwin.c:2901 #: ../src/viktrwlayer_propwin.c:2929 ../src/viktrwlayer_propwin.c:2966 #: ../src/viktrwlayer_propwin.c:2984 ../src/viktrwlayer_propwin.c:3034 #: ../src/viktrwlayer_propwin.c:3035 ../src/viktrwlayer_propwin.c:3036 #: ../src/viktrwlayer_propwin.c:3062 ../src/viktrwlayer_propwin.c:3063 #: ../src/viktrwlayer_propwin.c:3078 ../src/viktrwlayer_propwin.c:3079 #: ../src/viktrwlayer_propwin.c:3092 ../src/viktrwlayer_propwin.c:3093 #: ../src/viktrwlayer_propwin.c:3106 ../src/viktrwlayer_propwin.c:3107 #: ../src/viktrwlayer_propwin.c:3120 ../src/viktrwlayer_propwin.c:3121 #: ../src/viktrwlayer_propwin.c:3134 ../src/viktrwlayer_propwin.c:3135 #, c-format msgid "No Data" msgstr "" #: ../src/viktrwlayer_propwin.c:3031 #, c-format msgid "%d minutes" msgstr "" #: ../src/viktrwlayer_propwin.c:3058 msgid "Statistics" msgstr "" #: ../src/viktrwlayer_propwin.c:3064 msgid "Show D_EM" msgstr "" #: ../src/viktrwlayer_propwin.c:3065 ../src/viktrwlayer_propwin.c:3080 #: ../src/viktrwlayer_propwin.c:3094 ../src/viktrwlayer_propwin.c:3136 msgid "Show _GPS Speed" msgstr "" #: ../src/viktrwlayer_propwin.c:3067 ../src/viktrwlayer_propwin.c:3082 #: ../src/viktrwlayer_propwin.c:3110 ../src/viktrwlayer_propwin.c:3138 msgid "Track Distance:" msgstr "" #: ../src/viktrwlayer_propwin.c:3068 ../src/viktrwlayer_propwin.c:3125 msgid "Track Height:" msgstr "" #: ../src/viktrwlayer_propwin.c:3073 msgid "Elevation-distance" msgstr "" #: ../src/viktrwlayer_propwin.c:3083 msgid "Track Gradient:" msgstr "" #: ../src/viktrwlayer_propwin.c:3087 msgid "Gradient-distance" msgstr "" #: ../src/viktrwlayer_propwin.c:3096 ../src/viktrwlayer_propwin.c:3111 #: ../src/viktrwlayer_propwin.c:3124 msgid "Track Time:" msgstr "" #: ../src/viktrwlayer_propwin.c:3097 ../src/viktrwlayer_propwin.c:3139 msgid "Track Speed:" msgstr "" #: ../src/viktrwlayer_propwin.c:3101 msgid "Speed-time" msgstr "" #: ../src/viktrwlayer_propwin.c:3108 ../src/viktrwlayer_propwin.c:3122 msgid "Show S_peed" msgstr "" #: ../src/viktrwlayer_propwin.c:3115 msgid "Distance-time" msgstr "" #: ../src/viktrwlayer_propwin.c:3129 msgid "Elevation-time" msgstr "" #: ../src/viktrwlayer_propwin.c:3143 msgid "Speed-distance" msgstr "" #: ../src/viktrwlayer_tpwin.c:118 msgid "Part of Track:" msgstr "" #: ../src/viktrwlayer_tpwin.c:119 msgid "Latitude:" msgstr "" #: ../src/viktrwlayer_tpwin.c:120 msgid "Longitude:" msgstr "" #: ../src/viktrwlayer_tpwin.c:121 msgid "Altitude:" msgstr "" #: ../src/viktrwlayer_tpwin.c:122 msgid "Timestamp:" msgstr "" #: ../src/viktrwlayer_tpwin.c:123 msgid "Time:" msgstr "" #: ../src/viktrwlayer_tpwin.c:124 msgid "Distance Difference:" msgstr "" #: ../src/viktrwlayer_tpwin.c:125 msgid "Time Difference:" msgstr "" #: ../src/viktrwlayer_tpwin.c:126 msgid "\"Speed\" Between:" msgstr "" #: ../src/viktrwlayer_tpwin.c:127 msgid "VDOP:" msgstr "" #: ../src/viktrwlayer_tpwin.c:128 msgid "HDOP:" msgstr "" #: ../src/viktrwlayer_tpwin.c:129 msgid "PDOP:" msgstr "" #: ../src/viktrwlayer_tpwin.c:130 msgid "SAT/FIX:" msgstr "" #: ../src/viktrwlayer_tpwin.c:139 msgid "Trackpoint" msgstr "" #: ../src/viktrwlayer_tpwin.c:142 msgid "_Insert After" msgstr "" #: ../src/viktrwlayer_tpwin.c:144 msgid "Split Here" msgstr "" #: ../src/viktrwlayer_geotag.c:446 #, c-format msgid "Geotagging %d Images..." msgstr "" #: ../src/viktrwlayer_geotag.c:510 msgid "Geotag Images" msgstr "" #: ../src/viktrwlayer_geotag.c:516 msgid "Images" msgstr "" #: ../src/viktrwlayer_geotag.c:520 msgid "Overwrite Existing Waypoints:" msgstr "" #: ../src/viktrwlayer_geotag.c:523 msgid "Overwrite Existing GPS Information:" msgstr "" #: ../src/viktrwlayer_geotag.c:525 msgid "Keep File Modification Timestamp:" msgstr "" #: ../src/viktrwlayer_geotag.c:555 msgid "Create Waypoints:" msgstr "" #: ../src/viktrwlayer_geotag.c:563 msgid "Write EXIF:" msgstr "" #: ../src/viktrwlayer_geotag.c:575 msgid "Interpolate Between Track Segments:" msgstr "" #: ../src/viktrwlayer_geotag.c:579 msgid "Image Time Offset (Seconds):" msgstr "" #: ../src/viktrwlayer_geotag.c:581 msgid "" "The number of seconds to ADD to the photos time to make it match the GPS " "data. Calculate this with (GPS - Photo). Can be negative or positive. Useful " "to adjust times when a camera's timestamp was incorrect." msgstr "" #: ../src/viktrwlayer_geotag.c:584 msgid "Image Timezone:" msgstr "" #: ../src/viktrwlayer_geotag.c:586 msgid "" "The timezone that was used when the images were created. For example, if a " "camera is set to AWST or +8:00 hours. Enter +8:00 here so that the correct " "adjustment to the images' time can be made. GPS data is always in UTC." msgstr "" #: ../src/viktrwlayer_geotag.c:590 #, c-format msgid "Using track: %s" msgstr "" #: ../src/viktrwlayer_geotag.c:592 #, c-format msgid "Using all tracks in: %s" msgstr "" #: ../src/vikstatus.c:105 msgid "Current zoom level. Click to select a new one." msgstr "" #: ../src/vikwaypoint.c:34 msgid "Waypoint" msgstr "" #. TODO get rid of this as this is unnecessary duplication... #: ../src/vikwindow.c:221 msgid "Pan" msgstr "" #: ../src/vikwindow.c:221 msgid "Zoom" msgstr "" #: ../src/vikwindow.c:221 msgid "Ruler" msgstr "" #: ../src/vikwindow.c:221 msgid "Select" msgstr "" #. Create tooltip #: ../src/vikwindow.c:440 msgid "Select zoom level" msgstr "" #: ../src/vikwindow.c:645 #, c-format msgid "" "Do you want to save the changes you made to the document \"%s\"?\n" "\n" "Your changes will be lost if you don't save them." msgstr "" #: ../src/vikwindow.c:649 msgid "Don't Save" msgstr "" #: ../src/vikwindow.c:696 msgid "mpp" msgstr "" #: ../src/vikwindow.c:696 msgid "pixelfact" msgstr "" #: ../src/vikwindow.c:861 #, c-format msgid "%s %s %dm" msgstr "" #: ../src/vikwindow.c:863 #, c-format msgid "%s %s %dft" msgstr "" #: ../src/vikwindow.c:866 #, c-format msgid "%s %s" msgstr "" #. NB Ctrl+Shift+R is used for Refresh (deemed more important), so use 'U' instead #: ../src/vikwindow.c:1254 msgid "_Ruler" msgstr "" #: ../src/vikwindow.c:1254 msgid "Ruler Tool" msgstr "" #: ../src/vikwindow.c:1502 ../src/vikwindow.c:3138 msgid "_Zoom" msgstr "" #: ../src/vikwindow.c:1502 msgid "Zoom Tool" msgstr "" #: ../src/vikwindow.c:1547 ../src/vikwindow.c:3139 msgid "_Pan" msgstr "" #: ../src/vikwindow.c:1547 msgid "Pan Tool" msgstr "" #: ../src/vikwindow.c:1664 msgid "_Select" msgstr "" #: ../src/vikwindow.c:1664 msgid "Select Tool" msgstr "" #: ../src/vikwindow.c:1809 msgid "You must select a layer to show its properties." msgstr "" #. No error to show, so unlikely this will get called #: ../src/vikwindow.c:1824 msgid "The help system is not available." msgstr "" #. Main error path #: ../src/vikwindow.c:1827 #, c-format msgid "" "Help is not available because: %s.\n" "Ensure a Mime Type ghelp handler program is installed (e.g. yelp)." msgstr "" #: ../src/vikwindow.c:1850 msgid "You must select a layer to delete." msgstr "" #: ../src/vikwindow.c:2087 msgid "Untitled" msgstr "" #: ../src/vikwindow.c:2194 #, c-format msgid "Unable to add '%s' to the list of recently used documents" msgstr "" #: ../src/vikwindow.c:2208 msgid "The file you requested could not be opened." msgstr "" #: ../src/vikwindow.c:2211 msgid "" "GPSBabel is required to load files of this type or GPSBabel encountered " "problems." msgstr "" #: ../src/vikwindow.c:2214 #, c-format msgid "Unable to load malformed GPX file %s" msgstr "" #: ../src/vikwindow.c:2217 #, c-format msgid "Unsupported file type for %s" msgstr "" #. Since we can process .vik files with issues just show a warning in the status bar #. Not that a user can do much about it... or tells them what this issue is yet... #: ../src/vikwindow.c:2223 #, c-format msgid "WARNING: issues encountered loading %s" msgstr "" #: ../src/vikwindow.c:2278 msgid "Please select a GPS data file to open. " msgstr "" #: ../src/vikwindow.c:2288 msgid "Geocaching" msgstr "" #: ../src/vikwindow.c:2294 msgid "Google Earth" msgstr "" #: ../src/vikwindow.c:2299 msgid "GPX" msgstr "" #: ../src/vikwindow.c:2304 ../src/vikwindow.c:2387 #: ../src/viking.desktop.in.h:1 msgid "Viking" msgstr "" #: ../src/vikwindow.c:2374 msgid "Save as Viking File." msgstr "" #. Try harder... #: ../src/vikwindow.c:2619 ../src/vikwindow.c:2625 msgid "Generating image file..." msgstr "" #: ../src/vikwindow.c:2647 msgid "" "Failed to generate internal image.\n" "\n" "Try creating a smaller image." msgstr "" #: ../src/vikwindow.c:2655 msgid "Failed to generate image file." msgstr "" #. Success #: ../src/vikwindow.c:2660 msgid "Image file generated." msgstr "" #: ../src/vikwindow.c:2764 msgid "" "Viewable region outside allowable pixel size bounds for image. Clipping " "width/height values." msgstr "" #: ../src/vikwindow.c:2789 #, c-format msgid "Total area: %ldm x %ldm (%.3f sq. km)" msgstr "" #: ../src/vikwindow.c:2792 #, c-format msgid "Total area: %ldm x %ldm (%.3f sq. miles)" msgstr "" #: ../src/vikwindow.c:2813 msgid "Save Image" msgstr "" #: ../src/vikwindow.c:2834 msgid "PNG" msgstr "" #: ../src/vikwindow.c:2857 msgid "You must be in UTM mode to use this feature" msgstr "" #: ../src/vikwindow.c:2862 msgid "Choose a directory to hold images" msgstr "" #. todo: default for answers inside VikWindow or static (thruout instance) #: ../src/vikwindow.c:2883 msgid "Save to Image File" msgstr "" #: ../src/vikwindow.c:2900 msgid "Width (pixels):" msgstr "" #: ../src/vikwindow.c:2902 msgid "Height (pixels):" msgstr "" #: ../src/vikwindow.c:2905 msgid "" "WARNING: USING LARGE IMAGES OVER 10000x10000\n" "MAY CRASH THE PROGRAM!" msgstr "" #: ../src/vikwindow.c:2907 msgid "Zoom (meters per pixel):" msgstr "" #: ../src/vikwindow.c:2921 msgid "Area in current viewable window" msgstr "" #: ../src/vikwindow.c:2931 msgid "Save as PNG" msgstr "" #: ../src/vikwindow.c:2932 msgid "Save as JPEG" msgstr "" #: ../src/vikwindow.c:2954 msgid "East-west image tiles:" msgstr "" #: ../src/vikwindow.c:2956 msgid "North-south image tiles:" msgstr "" #: ../src/vikwindow.c:3097 msgid "Choose a background color" msgstr "" #: ../src/vikwindow.c:3113 msgid "Choose a track highlight color" msgstr "" #: ../src/vikwindow.c:3134 msgid "_File" msgstr "" #: ../src/vikwindow.c:3135 msgid "_Edit" msgstr "" #: ../src/vikwindow.c:3136 msgid "_View" msgstr "" #: ../src/vikwindow.c:3137 msgid "_Show" msgstr "" #: ../src/vikwindow.c:3140 msgid "_Layers" msgstr "" #: ../src/vikwindow.c:3141 msgid "_Tools" msgstr "" #: ../src/vikwindow.c:3142 msgid "_Webtools" msgstr "" #: ../src/vikwindow.c:3143 ../src/vikwindow.c:3206 msgid "_Help" msgstr "" #: ../src/vikwindow.c:3145 msgid "New file" msgstr "" #: ../src/vikwindow.c:3146 msgid "_Open..." msgstr "" #: ../src/vikwindow.c:3146 msgid "Open a file" msgstr "" #: ../src/vikwindow.c:3147 msgid "Open _Recent File" msgstr "" #: ../src/vikwindow.c:3148 msgid "Append _File..." msgstr "" #: ../src/vikwindow.c:3148 msgid "Append data from a different file" msgstr "" #: ../src/vikwindow.c:3149 msgid "A_cquire" msgstr "" #: ../src/vikwindow.c:3150 msgid "Transfer data from a GPS device" msgstr "" #: ../src/vikwindow.c:3151 msgid "Import File With GPS_Babel..." msgstr "" #: ../src/vikwindow.c:3151 msgid "Import file via GPSBabel converter" msgstr "" #: ../src/vikwindow.c:3153 msgid "Google _Directions..." msgstr "" #: ../src/vikwindow.c:3153 msgid "Get driving directions from Google" msgstr "" #: ../src/vikwindow.c:3156 msgid "_OSM Traces..." msgstr "" #: ../src/vikwindow.c:3156 msgid "Get traces from OpenStreetMap" msgstr "" #: ../src/vikwindow.c:3157 msgid "_My OSM Traces..." msgstr "" #: ../src/vikwindow.c:3157 msgid "Get Your Own Traces from OpenStreetMap" msgstr "" #: ../src/vikwindow.c:3160 msgid "Geo_caches..." msgstr "" #: ../src/vikwindow.c:3160 msgid "Get Geocaches from geocaching.com" msgstr "" #: ../src/vikwindow.c:3163 msgid "Create waypoints from geotagged images" msgstr "" #: ../src/vikwindow.c:3166 msgid "Create waypoints from Wikipedia items in the current view" msgstr "" #: ../src/vikwindow.c:3168 msgid "_Save" msgstr "" #: ../src/vikwindow.c:3168 msgid "Save the file" msgstr "" #: ../src/vikwindow.c:3169 msgid "Save _As..." msgstr "" #: ../src/vikwindow.c:3169 msgid "Save the file under different name" msgstr "" #: ../src/vikwindow.c:3170 msgid "_Generate Image File..." msgstr "" #: ../src/vikwindow.c:3170 msgid "Save a snapshot of the workspace into a file" msgstr "" #: ../src/vikwindow.c:3171 msgid "Generate _Directory of Images..." msgstr "" #: ../src/vikwindow.c:3171 msgid "FIXME:IMGDIR" msgstr "" #: ../src/vikwindow.c:3174 msgid "_Print..." msgstr "" #: ../src/vikwindow.c:3174 msgid "Print maps" msgstr "" #: ../src/vikwindow.c:3177 msgid "E_xit" msgstr "" #: ../src/vikwindow.c:3177 msgid "Exit the program" msgstr "" #: ../src/vikwindow.c:3178 msgid "Save and Exit" msgstr "" #: ../src/vikwindow.c:3178 msgid "Save and Exit the program" msgstr "" #: ../src/vikwindow.c:3180 msgid "Go to the _Default Location" msgstr "" #: ../src/vikwindow.c:3180 msgid "Go to the default location" msgstr "" #: ../src/vikwindow.c:3181 msgid "Go to _Location..." msgstr "" #: ../src/vikwindow.c:3181 msgid "Go to address/place using text search" msgstr "" #: ../src/vikwindow.c:3182 msgid "_Go to Lat/Lon..." msgstr "" #: ../src/vikwindow.c:3182 msgid "Go to arbitrary lat/lon coordinate" msgstr "" #: ../src/vikwindow.c:3183 msgid "Go to UTM..." msgstr "" #: ../src/vikwindow.c:3183 msgid "Go to arbitrary UTM coordinate" msgstr "" #: ../src/vikwindow.c:3184 msgid "_Refresh" msgstr "" #: ../src/vikwindow.c:3184 msgid "Refresh any maps displayed" msgstr "" #: ../src/vikwindow.c:3185 msgid "Set _Highlight Color..." msgstr "" #: ../src/vikwindow.c:3186 msgid "Set Bac_kground Color..." msgstr "" #: ../src/vikwindow.c:3187 msgid "Zoom _In" msgstr "" #: ../src/vikwindow.c:3188 msgid "Zoom _Out" msgstr "" #: ../src/vikwindow.c:3189 msgid "Zoom _To..." msgstr "" #: ../src/vikwindow.c:3190 msgid "Pan _North" msgstr "" #: ../src/vikwindow.c:3191 msgid "Pan _East" msgstr "" #: ../src/vikwindow.c:3192 msgid "Pan _South" msgstr "" #: ../src/vikwindow.c:3193 msgid "Pan _West" msgstr "" #: ../src/vikwindow.c:3194 msgid "Background _Jobs" msgstr "" #: ../src/vikwindow.c:3196 msgid "Cu_t" msgstr "" #: ../src/vikwindow.c:3197 msgid "_Copy" msgstr "" #: ../src/vikwindow.c:3198 msgid "_Paste" msgstr "" #: ../src/vikwindow.c:3199 msgid "_Delete" msgstr "" #: ../src/vikwindow.c:3200 msgid "Delete All" msgstr "" #: ../src/vikwindow.c:3201 msgid "_Flush Map Cache" msgstr "" #: ../src/vikwindow.c:3202 msgid "_Set the Default Location" msgstr "" #: ../src/vikwindow.c:3202 msgid "Set the Default Location to the current position" msgstr "" #: ../src/vikwindow.c:3203 msgid "_Preferences" msgstr "" #: ../src/vikwindow.c:3204 msgid "_Properties" msgstr "" #: ../src/vikwindow.c:3207 msgid "_About" msgstr "" #: ../src/vikwindow.c:3213 msgid "_UTM Mode" msgstr "" #: ../src/vikwindow.c:3214 msgid "_Expedia Mode" msgstr "" #: ../src/vikwindow.c:3215 msgid "_Mercator Mode" msgstr "" #: ../src/vikwindow.c:3216 msgid "Lat_/Lon Mode" msgstr "" #: ../src/vikwindow.c:3220 msgid "Show _Scale" msgstr "" #: ../src/vikwindow.c:3220 msgid "Show Scale" msgstr "" #: ../src/vikwindow.c:3221 msgid "Show _Center Mark" msgstr "" #: ../src/vikwindow.c:3221 msgid "Show Center Mark" msgstr "" #: ../src/vikwindow.c:3222 msgid "Show _Highlight" msgstr "" #: ../src/vikwindow.c:3222 msgid "Show Highlight" msgstr "" #: ../src/vikwindow.c:3223 msgid "_Full Screen" msgstr "" #: ../src/vikwindow.c:3223 msgid "Activate full screen mode" msgstr "" #: ../src/vikwindow.c:3224 msgid "Show Side _Panel" msgstr "" #: ../src/vikwindow.c:3224 msgid "Show Side Panel" msgstr "" #: ../src/vikwindow.c:3225 msgid "Show Status_bar" msgstr "" #: ../src/vikwindow.c:3225 msgid "Show Statusbar" msgstr "" #: ../src/vikwindow.c:3226 msgid "Show _Toolbar" msgstr "" #: ../src/vikwindow.c:3226 msgid "Show Toolbar" msgstr "" #: ../src/vikwindow.c:3227 msgid "Show _Menu" msgstr "" #: ../src/vikwindow.c:3227 msgid "Show Menu" msgstr "" #: ../src/viking.desktop.in.h:2 msgid "GPS Data Manager" msgstr "" #: ../src/viking.desktop.in.h:3 msgid "Map Based GPS Data Manager (live data capable)." msgstr "" #: ../src/libjpeg/jpeg-data.c:206 msgid "Data does not follow JPEG specification." msgstr "" #: ../src/libjpeg/jpeg-data.c:291 #, c-format msgid "Path '%s' invalid." msgstr "" #: ../src/libjpeg/jpeg-data.c:309 #, c-format msgid "Could not read '%s'." msgstr "" viking-1.4.2/intltool-extract.in0000644000175000017500000000000012170052156013557 00000000000000viking-1.4.2/missing0000755000175000017500000002415212134470533011333 00000000000000#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2012-01-06.13; # UTC # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, # 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' sed_minuso='s/.* -o \([^ ]*\).*/\1/p' # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case $1 in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' autom4te touch the output file, or create a stub one automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file yacc create \`y.tab.[ch]', if possible, from existing .[ch] Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and \`g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; esac # normalize program name to check for. program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). This is about non-GNU programs, so use $1 not # $program. case $1 in lex*|yacc*) # Not GNU programs, they don't have --version. ;; *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then # Could not run --version or --help. This is probably someone # running `$TOOL --version' or `$TOOL --help' to check whether # $TOOL exists and not knowing $TOOL uses missing. exit 1 fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case $program in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case $f in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te*) echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison*|yacc*) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if test $# -ne 1; then eval LASTARG=\${$#} case $LASTARG in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.h fi ;; esac fi if test ! -f y.tab.h; then echo >y.tab.h fi if test ! -f y.tab.c; then echo 'main() { return 0; }' >y.tab.c fi ;; lex*|flex*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if test $# -ne 1; then eval LASTARG=\${$#} case $LASTARG in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if test ! -f lex.yy.c; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit $? fi ;; makeinfo*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n ' /^@setfilename/{ s/.* \([^ ]*\) *$/\1/ p q }' $infile` # ... or it is derived from the source name (dir/f.texi becomes f.info) test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info fi # If the file does not exist, the user really needs makeinfo; # let's fail without touching anything. test -f $file || exit 1 touch $file ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: viking-1.4.2/src/0000755000175000017500000000000012175546630010606 500000000000000viking-1.4.2/src/osm.h0000644000175000017500000000163711745373131011500 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef __VIKING_OSM_H #define __VIKING_OSM_H void osm_init (); #endif viking-1.4.2/src/srtm_continent.c0000644000175000017500000050660012024715566013746 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2007, Quy Tonthat * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ /* Generated file -- Do not edit */ /* Generated from directory listing of the server. */ const char *_srtm_continent_data[] = { "Africa", "N00E006", "N11W016", "N20W014", "N29E039", "S10E036", "N00E009", "N11W017", "N20W015", "N29E040", "S10E037", "N00E010", "N12E000", "N20W016", "N29E041", "S10E038", "N00E011", "N12E001", "N20W017", "N29E042", "S10E039", "N00E012", "N12E002", "N20W018", "N29E043", "S10E046", "N00E013", "N12E003", "N21E000", "N29E044", "S10E047", "N00E014", "N12E004", "N21E001", "N29E045", "S10E050", "N00E015", "N12E005", "N21E002", "N29E046", "S10E051", "N00E016", "N12E006", "N21E003", "N29E047", "S11E013", "N00E017", "N12E007", "N21E004", "N29E048", "S11E014", "N00E018", "N12E008", "N21E005", "N29E049", "S11E015", "N00E019", "N12E009", "N21E006", "N29E050", "S11E016", "N00E020", "N12E010", "N21E007", "N29E051", "S11E017", "N00E021", "N12E011", "N21E008", "N29E052", "S11E018", "N00E022", "N12E012", "N21E009", "N29E053", "S11E019", "N00E023", "N12E013", "N21E010", "N29E054", "S11E020", "N00E024", "N12E014", "N21E011", "N29E055", "S11E021", "N00E025", "N12E015", "N21E012", "N29E056", "S11E022", "N00E026", "N12E016", "N21E013", "N29E057", "S11E023", "N00E027", "N12E017", "N21E014", "N29E058", "S11E024", "N00E028", "N12E018", "N21E015", "N29E059", "S11E025", "N00E029", "N12E019", "N21E016", "N29W001", "S11E026", "N00E030", "N12E020", "N21E017", "N29W002", "S11E027", "N00E031", "N12E021", "N21E018", "N29W003", "S11E028", "N00E032", "N12E022", "N21E019", "N29W004", "S11E029", "N00E033", "N12E023", "N21E020", "N29W005", "S11E030", "N00E034", "N12E024", "N21E021", "N29W006", "S11E031", "N00E035", "N12E025", "N21E022", "N29W007", "S11E032", "N00E036", "N12E026", "N21E023", "N29W008", "S11E033", "N00E037", "N12E027", "N21E024", "N29W009", "S11E034", "N00E038", "N12E028", "N21E025", "N29W010", "S11E035", "N00E039", "N12E029", "N21E026", "N29W011", "S11E036", "N00E040", "N12E030", "N21E027", "N29W014", "S11E037", "N00E041", "N12E031", "N21E028", "N30E000", "S11E038", "N00E042", "N12E032", "N21E029", "N30E001", "S11E039", "N00E043", "N12E033", "N21E030", "N30E002", "S11E040", "N01E007", "N12E034", "N21E031", "N30E003", "S11E047", "N01E009", "N12E035", "N21E032", "N30E004", "S11E051", "N01E010", "N12E036", "N21E033", "N30E005", "S11E056", "N01E011", "N12E037", "N21E034", "N30E006", "S12E013", "N01E012", "N12E038", "N21E035", "N30E007", "S12E014", "N01E013", "N12E039", "N21E036", "N30E008", "S12E015", "N01E014", "N12E040", "N21E037", "N30E009", "S12E016", "N01E015", "N12E041", "N21E038", "N30E010", "S12E017", "N01E016", "N12E042", "N21E039", "N30E011", "S12E018", "N01E017", "N12E043", "N21E040", "N30E012", "S12E019", "N01E018", "N12E044", "N21E041", "N30E013", "S12E020", "N01E019", "N12E045", "N21E042", "N30E014", "S12E021", "N01E020", "N12E052", "N21E043", "N30E015", "S12E022", "N01E021", "N12E053", "N21E044", "N30E016", "S12E023", "N01E022", "N12E054", "N21E045", "N30E017", "S12E024", "N01E023", "N12W001", "N21E046", "N30E018", "S12E025", "N01E024", "N12W002", "N21E047", "N30E019", "S12E026", "N01E025", "N12W003", "N21E048", "N30E020", "S12E027", "N01E026", "N12W004", "N21E049", "N30E021", "S12E028", "N01E027", "N12W005", "N21E050", "N30E022", "S12E029", "N01E028", "N12W006", "N21E051", "N30E023", "S12E030", "N01E029", "N12W007", "N21E052", "N30E024", "S12E031", "N01E030", "N12W008", "N21E053", "N30E025", "S12E032", "N01E031", "N12W009", "N21E054", "N30E026", "S12E033", "N01E032", "N12W010", "N21E055", "N30E027", "S12E034", "N01E033", "N12W011", "N21E056", "N30E028", "S12E035", "N01E034", "N12W012", "N21E057", "N30E029", "S12E036", "N01E035", "N12W013", "N21E058", "N30E030", "S12E037", "N01E036", "N12W014", "N21E059", "N30E031", "S12E038", "N01E037", "N12W015", "N21W001", "N30E032", "S12E039", "N01E038", "N12W016", "N21W002", "N30E033", "S12E040", "N01E039", "N12W017", "N21W003", "N30E034", "S12E043", "N01E040", "N13E000", "N21W004", "N30E035", "S12E047", "N01E041", "N13E001", "N21W005", "N30E036", "S12E049", "N01E042", "N13E002", "N21W006", "N30E037", "S13E012", "N01E043", "N13E003", "N21W007", "N30E038", "S13E013", "N01E044", "N13E004", "N21W008", "N30E039", "S13E014", "N01E045", "N13E005", "N21W009", "N30E040", "S13E015", "N02E009", "N13E006", "N21W010", "N30E041", "S13E016", "N02E010", "N13E007", "N21W011", "N30E042", "S13E017", "N02E011", "N13E008", "N21W012", "N30E043", "S13E018", "N02E012", "N13E009", "N21W013", "N30E044", "S13E019", "N02E013", "N13E010", "N21W014", "N30E045", "S13E020", "N02E014", "N13E011", "N21W015", "N30E046", "S13E021", "N02E015", "N13E012", "N21W016", "N30E047", "S13E022", "N02E016", "N13E013", "N21W017", "N30E048", "S13E023", "N02E017", "N13E014", "N21W018", "N30E049", "S13E024", "N02E018", "N13E015", "N22E000", "N30E050", "S13E025", "N02E019", "N13E016", "N22E001", "N30E051", "S13E026", "N02E020", "N13E017", "N22E002", "N30E052", "S13E027", "N02E021", "N13E018", "N22E003", "N30E053", "S13E028", "N02E022", "N13E019", "N22E004", "N30E054", "S13E029", "N02E023", "N13E020", "N22E005", "N30E055", "S13E030", "N02E024", "N13E021", "N22E006", "N30E056", "S13E031", "N02E025", "N13E022", "N22E007", "N30E057", "S13E032", "N02E026", "N13E023", "N22E008", "N30E058", "S13E033", "N02E027", "N13E024", "N22E009", "N30E059", "S13E034", "N02E028", "N13E025", "N22E010", "N30W001", "S13E035", "N02E029", "N13E026", "N22E011", "N30W002", "S13E036", "N02E030", "N13E027", "N22E012", "N30W003", "S13E037", "N02E031", "N13E028", "N22E013", "N30W004", "S13E038", "N02E032", "N13E029", "N22E014", "N30W005", "S13E039", "N02E033", "N13E030", "N22E015", "N30W006", "S13E040", "N02E034", "N13E031", "N22E016", "N30W007", "S13E043", "N02E035", "N13E032", "N22E017", "N30W008", "S13E044", "N02E036", "N13E033", "N22E018", "N30W009", "S13E045", "N02E037", "N13E034", "N22E019", "N30W010", "S13E048", "N02E038", "N13E035", "N22E020", "N30W016", "S13E049", "N02E039", "N13E036", "N22E021", "N30W017", "S14E012", "N02E040", "N13E037", "N22E022", "N31E000", "S14E013", "N02E041", "N13E038", "N22E023", "N31E001", "S14E014", "N02E042", "N13E039", "N22E024", "N31E002", "S14E015", "N02E043", "N13E040", "N22E025", "N31E003", "S14E016", "N02E044", "N13E041", "N22E026", "N31E004", "S14E017", "N02E045", "N13E042", "N22E027", "N31E005", "S14E018", "N02E046", "N13E043", "N22E028", "N31E006", "S14E019", "N03E008", "N13E044", "N22E029", "N31E007", "S14E020", "N03E009", "N13E045", "N22E030", "N31E008", "S14E021", "N03E010", "N13E046", "N22E031", "N31E009", "S14E022", "N03E011", "N13E047", "N22E032", "N31E010", "S14E023", "N03E012", "N13E048", "N22E033", "N31E011", "S14E024", "N03E013", "N13W001", "N22E034", "N31E012", "S14E025", "N03E014", "N13W002", "N22E035", "N31E013", "S14E026", "N03E015", "N13W003", "N22E036", "N31E014", "S14E027", "N03E016", "N13W004", "N22E038", "N31E015", "S14E028", "N03E017", "N13W005", "N22E039", "N31E016", "S14E029", "N03E018", "N13W006", "N22E040", "N31E017", "S14E030", "N03E019", "N13W007", "N22E041", "N31E019", "S14E031", "N03E020", "N13W008", "N22E042", "N31E020", "S14E032", "N03E021", "N13W009", "N22E043", "N31E021", "S14E033", "N03E022", "N13W010", "N22E044", "N31E022", "S14E034", "N03E023", "N13W011", "N22E045", "N31E023", "S14E035", "N03E024", "N13W012", "N22E046", "N31E024", "S14E036", "N03E025", "N13W013", "N22E047", "N31E025", "S14E037", "N03E026", "N13W014", "N22E048", "N31E026", "S14E038", "N03E027", "N13W015", "N22E049", "N31E027", "S14E039", "N03E028", "N13W016", "N22E050", "N31E028", "S14E040", "N03E029", "N13W017", "N22E051", "N31E029", "S14E045", "N03E030", "N14E000", "N22E052", "N31E030", "S14E047", "N03E031", "N14E001", "N22E053", "N31E031", "S14E048", "N03E032", "N14E002", "N22E054", "N31E032", "S14E049", "N03E033", "N14E003", "N22E055", "N31E033", "S14E050", "N03E034", "N14E004", "N22E056", "N31E034", "S15E012", "N03E035", "N14E005", "N22E057", "N31E035", "S15E013", "N03E036", "N14E006", "N22E058", "N31E036", "S15E014", "N03E037", "N14E007", "N22E059", "N31E037", "S15E015", "N03E038", "N14E008", "N22W001", "N31E038", "S15E016", "N03E039", "N14E009", "N22W002", "N31E039", "S15E017", "N03E040", "N14E010", "N22W003", "N31E040", "S15E018", "N03E041", "N14E011", "N22W004", "N31E041", "S15E019", "N03E042", "N14E012", "N22W005", "N31E042", "S15E020", "N03E043", "N14E013", "N22W006", "N31E043", "S15E021", "N03E044", "N14E014", "N22W007", "N31E044", "S15E022", "N03E045", "N14E015", "N22W008", "N31E045", "S15E023", "N03E046", "N14E016", "N22W009", "N31E046", "S15E024", "N03E047", "N14E017", "N22W010", "N31E047", "S15E025", "N04E005", "N14E018", "N22W011", "N31E048", "S15E026", "N04E006", "N14E019", "N22W012", "N31E049", "S15E027", "N04E007", "N14E020", "N22W013", "N31E050", "S15E028", "N04E008", "N14E021", "N22W014", "N31E051", "S15E029", "N04E009", "N14E022", "N22W015", "N31E052", "S15E030", "N04E010", "N14E023", "N22W016", "N31E053", "S15E031", "N04E011", "N14E024", "N22W017", "N31E054", "S15E032", "N04E012", "N14E025", "N23E000", "N31E055", "S15E033", "N04E013", "N14E026", "N23E001", "N31E056", "S15E034", "N04E014", "N14E027", "N23E002", "N31E057", "S15E035", "N04E015", "N14E028", "N23E003", "N31E058", "S15E036", "N04E016", "N14E029", "N23E004", "N31E059", "S15E037", "N04E017", "N14E030", "N23E005", "N31W001", "S15E038", "N04E018", "N14E031", "N23E006", "N31W002", "S15E039", "N04E019", "N14E032", "N23E007", "N31W003", "S15E040", "N04E020", "N14E033", "N23E008", "N31W004", "S15E047", "N04E021", "N14E034", "N23E009", "N31W005", "S15E048", "N04E022", "N14E035", "N23E010", "N31W006", "S15E049", "N04E023", "N14E036", "N23E011", "N31W007", "S15E050", "N04E024", "N14E037", "N23E012", "N31W008", "S16E011", "N04E025", "N14E038", "N23E013", "N31W009", "S16E012", "N04E026", "N14E039", "N23E014", "N31W010", "S16E013", "N04E027", "N14E040", "N23E015", "N32E000", "S16E014", "N04E028", "N14E041", "N23E016", "N32E001", "S16E015", "N04E029", "N14E042", "N23E017", "N32E002", "S16E016", "N04E030", "N14E043", "N23E018", "N32E003", "S16E017", "N04E031", "N14E044", "N23E019", "N32E004", "S16E018", "N04E032", "N14E045", "N23E020", "N32E005", "S16E019", "N04E033", "N14E046", "N23E021", "N32E006", "S16E020", "N04E034", "N14E047", "N23E022", "N32E007", "S16E021", "N04E035", "N14E048", "N23E023", "N32E008", "S16E022", "N04E036", "N14E049", "N23E024", "N32E009", "S16E023", "N04E037", "N14E050", "N23E025", "N32E010", "S16E024", "N04E038", "N14W001", "N23E026", "N32E011", "S16E025", "N04E039", "N14W002", "N23E027", "N32E012", "S16E026", "N04E040", "N14W003", "N23E028", "N32E013", "S16E027", "N04E041", "N14W004", "N23E029", "N32E014", "S16E028", "N04E042", "N14W005", "N23E030", "N32E015", "S16E029", "N04E043", "N14W006", "N23E031", "N32E019", "S16E030", "N04E044", "N14W007", "N23E032", "N32E020", "S16E031", "N04E045", "N14W008", "N23E033", "N32E021", "S16E032", "N04E046", "N14W009", "N23E034", "N32E022", "S16E033", "N04E047", "N14W010", "N23E035", "N32E023", "S16E034", "N04E048", "N14W011", "N23E036", "N32E024", "S16E035", "N04W002", "N14W012", "N23E038", "N32E034", "S16E036", "N04W003", "N14W013", "N23E039", "N32E035", "S16E037", "N04W006", "N14W014", "N23E040", "N32E036", "S16E038", "N04W007", "N14W015", "N23E041", "N32E037", "S16E039", "N04W008", "N14W016", "N23E042", "N32E038", "S16E040", "N04W009", "N14W017", "N23E043", "N32E039", "S16E045", "N04W010", "N14W018", "N23E044", "N32E040", "S16E046", "N05E000", "N14W024", "N23E045", "N32E041", "S16E047", "N05E001", "N14W025", "N23E046", "N32E042", "S16E048", "N05E004", "N15E000", "N23E047", "N32E043", "S16E049", "N05E005", "N15E001", "N23E048", "N32E044", "S16E050", "N05E006", "N15E002", "N23E049", "N32E045", "S16E054", "N05E007", "N15E003", "N23E050", "N32E046", "S17E011", "N05E008", "N15E004", "N23E051", "N32E047", "S17E012", "N05E009", "N15E005", "N23E052", "N32E048", "S17E013", "N05E010", "N15E006", "N23E053", "N32E049", "S17E014", "N05E011", "N15E007", "N23E054", "N32E050", "S17E015", "N05E012", "N15E008", "N23E055", "N32E051", "S17E016", "N05E013", "N15E009", "N23E056", "N32E052", "S17E017", "N05E014", "N15E010", "N23E057", "N32E053", "S17E018", "N05E015", "N15E011", "N23E058", "N32E054", "S17E019", "N05E016", "N15E012", "N23E059", "N32E055", "S17E020", "N05E017", "N15E013", "N23W001", "N32E056", "S17E021", "N05E018", "N15E014", "N23W002", "N32E057", "S17E022", "N05E019", "N15E015", "N23W003", "N32E058", "S17E023", "N05E020", "N15E016", "N23W004", "N32E059", "S17E024", "N05E021", "N15E017", "N23W005", "N32W001", "S17E025", "N05E022", "N15E018", "N23W006", "N32W002", "S17E026", "N05E023", "N15E019", "N23W007", "N32W003", "S17E027", "N05E024", "N15E020", "N23W008", "N32W004", "S17E028", "N05E025", "N15E021", "N23W009", "N32W005", "S17E029", "N05E026", "N15E022", "N23W010", "N32W006", "S17E030", "N05E027", "N15E023", "N23W011", "N32W007", "S17E031", "N05E028", "N15E024", "N23W012", "N32W008", "S17E032", "N05E029", "N15E025", "N23W013", "N32W009", "S17E033", "N05E030", "N15E026", "N23W014", "N32W010", "S17E034", "N05E031", "N15E027", "N23W015", "N32W017", "S17E035", "N05E032", "N15E028", "N23W016", "N32W018", "S17E036", "N05E033", "N15E029", "N23W017", "N33E000", "S17E037", "N05E034", "N15E030", "N24E000", "N33E001", "S17E038", "N05E035", "N15E031", "N24E001", "N33E002", "S17E039", "N05E036", "N15E032", "N24E002", "N33E003", "S17E040", "N05E037", "N15E033", "N24E003", "N33E004", "S17E043", "N05E038", "N15E034", "N24E004", "N33E005", "S17E044", "N05E039", "N15E035", "N24E005", "N33E006", "S17E045", "N05E040", "N15E036", "N24E006", "N33E007", "S17E046", "N05E041", "N15E037", "N24E007", "N33E008", "S17E047", "N05E042", "N15E038", "N24E008", "N33E009", "S17E048", "N05E043", "N15E039", "N24E009", "N33E010", "S17E049", "N05E044", "N15E040", "N24E010", "N33E011", "S17E050", "N05E045", "N15E041", "N24E011", "N33E035", "S17E059", "N05E046", "N15E042", "N24E012", "N33E036", "S18E011", "N05E047", "N15E043", "N24E013", "N33E037", "S18E012", "N05E048", "N15E044", "N24E014", "N33E038", "S18E013", "N05W001", "N15E045", "N24E015", "N33E039", "S18E014", "N05W002", "N15E046", "N24E016", "N33E040", "S18E015", "N05W003", "N15E047", "N24E017", "N33E041", "S18E016", "N05W004", "N15E048", "N24E018", "N33E042", "S18E017", "N05W005", "N15E049", "N24E019", "N33E043", "S18E018", "N05W006", "N15E050", "N24E020", "N33E044", "S18E019", "N05W007", "N15E051", "N24E021", "N33E045", "S18E020", "N05W008", "N15E052", "N24E022", "N33E046", "S18E021", "N05W009", "N15W001", "N24E023", "N33E047", "S18E022", "N05W010", "N15W002", "N24E024", "N33E048", "S18E023", "N05W011", "N15W003", "N24E025", "N33E049", "S18E024", "N06E000", "N15W004", "N24E026", "N33E050", "S18E025", "N06E001", "N15W005", "N24E027", "N33E051", "S18E026", "N06E002", "N15W006", "N24E028", "N33E052", "S18E027", "N06E003", "N15W007", "N24E029", "N33E053", "S18E028", "N06E004", "N15W008", "N24E030", "N33E054", "S18E029", "N06E005", "N15W009", "N24E031", "N33E055", "S18E030", "N06E006", "N15W010", "N24E032", "N33E056", "S18E031", "N06E007", "N15W011", "N24E033", "N33E057", "S18E032", "N06E008", "N15W012", "N24E034", "N33E058", "S18E033", "N06E009", "N15W013", "N24E035", "N33E059", "S18E034", "N06E010", "N15W014", "N24E037", "N33W001", "S18E035", "N06E011", "N15W015", "N24E038", "N33W002", "S18E036", "N06E012", "N15W016", "N24E039", "N33W003", "S18E037", "N06E013", "N15W017", "N24E040", "N33W004", "S18E038", "N06E014", "N15W018", "N24E041", "N33W005", "S18E039", "N06E015", "N15W023", "N24E042", "N33W006", "S18E042", "N06E016", "N15W024", "N24E043", "N33W007", "S18E043", "N06E017", "N15W025", "N24E044", "N33W008", "S18E044", "N06E018", "N16E000", "N24E045", "N33W009", "S18E045", "N06E019", "N16E001", "N24E046", "N33W017", "S18E046", "N06E020", "N16E002", "N24E047", "N34E000", "S18E047", "N06E021", "N16E003", "N24E048", "N34E001", "S18E048", "N06E022", "N16E004", "N24E049", "N34E002", "S18E049", "N06E023", "N16E005", "N24E050", "N34E003", "S19E011", "N06E024", "N16E006", "N24E051", "N34E004", "S19E012", "N06E025", "N16E007", "N24E052", "N34E005", "S19E013", "N06E026", "N16E008", "N24E053", "N34E006", "S19E014", "N06E027", "N16E009", "N24E054", "N34E007", "S19E015", "N06E028", "N16E010", "N24E055", "N34E008", "S19E016", "N06E029", "N16E011", "N24E056", "N34E009", "S19E017", "N06E030", "N16E012", "N24E057", "N34E010", "S19E018", "N06E031", "N16E013", "N24W001", "N34E011", "S19E019", "N06E032", "N16E014", "N24W002", "N34E023", "S19E020", "N06E033", "N16E015", "N24W003", "N34E024", "S19E021", "N06E034", "N16E016", "N24W004", "N34E025", "S19E022", "N06E035", "N16E017", "N24W005", "N34E026", "S19E023", "N06E036", "N16E018", "N24W006", "N34E032", "S19E024", "N06E037", "N16E019", "N24W007", "N34E033", "S19E025", "N06E038", "N16E020", "N24W008", "N34E034", "S19E026", "N06E039", "N16E021", "N24W009", "N34E035", "S19E027", "N06E040", "N16E022", "N24W010", "N34E036", "S19E028", "N06E041", "N16E023", "N24W011", "N34E037", "S19E029", "N06E042", "N16E024", "N24W012", "N34E038", "S19E030", "N06E043", "N16E025", "N24W013", "N34E039", "S19E031", "N06E044", "N16E026", "N24W014", "N34E040", "S19E032", "N06E045", "N16E027", "N24W015", "N34E041", "S19E033", "N06E046", "N16E028", "N24W016", "N34E042", "S19E034", "N06E047", "N16E029", "N25E000", "N34E043", "S19E035", "N06E048", "N16E030", "N25E001", "N34E044", "S19E036", "N06E049", "N16E031", "N25E002", "N34E045", "S19E037", "N06W001", "N16E032", "N25E003", "N34E046", "S19E043", "N06W002", "N16E033", "N25E004", "N34E047", "S19E044", "N06W003", "N16E034", "N25E005", "N34E048", "S19E045", "N06W004", "N16E035", "N25E006", "N34E049", "S19E046", "N06W005", "N16E036", "N25E007", "N34E050", "S19E047", "N06W006", "N16E037", "N25E008", "N34E051", "S19E048", "N06W007", "N16E038", "N25E009", "N34E052", "S19E049", "N06W008", "N16E039", "N25E010", "N34E053", "S20E012", "N06W009", "N16E040", "N25E011", "N34E054", "S20E013", "N06W010", "N16E041", "N25E012", "N34E055", "S20E014", "N06W011", "N16E042", "N25E013", "N34E056", "S20E015", "N06W012", "N16E043", "N25E014", "N34E057", "S20E016", "N07E000", "N16E044", "N25E015", "N34E058", "S20E017", "N07E001", "N16E045", "N25E016", "N34E059", "S20E018", "N07E002", "N16E046", "N25E017", "N34W001", "S20E019", "N07E003", "N16E047", "N25E018", "N34W002", "S20E020", "N07E004", "N16E048", "N25E019", "N34W003", "S20E021", "N07E005", "N16E049", "N25E020", "N34W004", "S20E022", "N07E006", "N16E050", "N25E021", "N34W005", "S20E023", "N07E007", "N16E051", "N25E022", "N34W006", "S20E024", "N07E008", "N16E052", "N25E023", "N34W007", "S20E025", "N07E009", "N16E053", "N25E024", "N36W026", "S20E026", "N07E010", "N16E054", "N25E025", "N37W025", "S20E027", "N07E011", "N16E055", "N25E026", "N37W026", "S20E028", "N07E012", "N16W001", "N25E027", "N38W028", "S20E029", "N07E013", "N16W002", "N25E028", "N38W029", "S20E030", "N07E014", "N16W003", "N25E029", "N39W028", "S20E031", "N07E015", "N16W004", "N25E030", "N39W029", "S20E032", "N07E016", "N16W005", "N25E031", "N39W032", "S20E033", "N07E017", "N16W006", "N25E032", "S01E006", "S20E034", "N07E018", "N16W007", "N25E033", "S01E008", "S20E035", "N07E019", "N16W008", "N25E034", "S01E009", "S20E044", "N07E020", "N16W009", "N25E036", "S01E010", "S20E045", "N07E021", "N16W010", "N25E037", "S01E011", "S20E046", "N07E022", "N16W011", "N25E038", "S01E012", "S20E047", "N07E023", "N16W012", "N25E039", "S01E013", "S20E048", "N07E024", "N16W013", "N25E040", "S01E014", "S20E049", "N07E025", "N16W014", "N25E041", "S01E015", "S20E057", "N07E026", "N16W015", "N25E042", "S01E016", "S20E063", "N07E027", "N16W016", "N25E043", "S01E017", "S21E013", "N07E028", "N16W017", "N25E044", "S01E018", "S21E014", "N07E029", "N16W023", "N25E045", "S01E019", "S21E015", "N07E030", "N16W025", "N25E046", "S01E020", "S21E016", "N07E031", "N16W026", "N25E047", "S01E021", "S21E017", "N07E032", "N17E000", "N25E048", "S01E022", "S21E018", "N07E033", "N17E001", "N25E049", "S01E023", "S21E019", "N07E034", "N17E002", "N25E050", "S01E024", "S21E020", "N07E035", "N17E003", "N25E051", "S01E025", "S21E021", "N07E036", "N17E004", "N25E052", "S01E026", "S21E022", "N07E037", "N17E005", "N25E054", "S01E027", "S21E023", "N07E038", "N17E006", "N25E055", "S01E028", "S21E024", "N07E039", "N17E007", "N25E056", "S01E029", "S21E025", "N07E040", "N17E008", "N25E057", "S01E030", "S21E026", "N07E041", "N17E009", "N25E058", "S01E031", "S21E027", "N07E042", "N17E010", "N25E059", "S01E032", "S21E028", "N07E043", "N17E011", "N25W001", "S01E033", "S21E029", "N07E044", "N17E012", "N25W002", "S01E034", "S21E030", "N07E045", "N17E013", "N25W003", "S01E035", "S21E031", "N07E046", "N17E014", "N25W004", "S01E036", "S21E032", "N07E047", "N17E015", "N25W005", "S01E037", "S21E033", "N07E048", "N17E016", "N25W006", "S01E038", "S21E034", "N07E049", "N17E017", "N25W007", "S01E039", "S21E035", "N07W001", "N17E018", "N25W008", "S01E040", "S21E043", "N07W002", "N17E019", "N25W009", "S01E041", "S21E044", "N07W003", "N17E020", "N25W010", "S01E042", "S21E045", "N07W004", "N17E021", "N25W011", "S02E005", "S21E046", "N07W005", "N17E022", "N25W012", "S02E008", "S21E047", "N07W006", "N17E023", "N25W013", "S02E009", "S21E048", "N07W007", "N17E024", "N25W014", "S02E010", "S21E055", "N07W008", "N17E025", "N25W015", "S02E011", "S21E057", "N07W009", "N17E026", "N26E000", "S02E012", "S22E013", "N07W010", "N17E027", "N26E001", "S02E013", "S22E014", "N07W011", "N17E028", "N26E002", "S02E014", "S22E015", "N07W012", "N17E029", "N26E003", "S02E015", "S22E016", "N07W013", "N17E030", "N26E004", "S02E016", "S22E017", "N07W014", "N17E031", "N26E005", "S02E017", "S22E018", "N08E000", "N17E032", "N26E006", "S02E018", "S22E019", "N08E001", "N17E033", "N26E007", "S02E019", "S22E020", "N08E002", "N17E034", "N26E008", "S02E020", "S22E021", "N08E003", "N17E035", "N26E009", "S02E021", "S22E022", "N08E004", "N17E036", "N26E010", "S02E022", "S22E023", "N08E005", "N17E037", "N26E011", "S02E023", "S22E024", "N08E006", "N17E038", "N26E012", "S02E024", "S22E025", "N08E007", "N17E039", "N26E013", "S02E025", "S22E026", "N08E008", "N17E041", "N26E014", "S02E026", "S22E027", "N08E009", "N17E042", "N26E015", "S02E027", "S22E028", "N08E010", "N17E043", "N26E016", "S02E028", "S22E029", "N08E011", "N17E044", "N26E017", "S02E029", "S22E030", "N08E012", "N17E045", "N26E018", "S02E030", "S22E031", "N08E013", "N17E046", "N26E019", "S02E031", "S22E032", "N08E014", "N17E047", "N26E020", "S02E032", "S22E033", "N08E015", "N17E048", "N26E021", "S02E033", "S22E034", "N08E016", "N17E049", "N26E022", "S02E034", "S22E035", "N08E017", "N17E050", "N26E023", "S02E035", "S22E043", "N08E018", "N17E051", "N26E024", "S02E036", "S22E044", "N08E019", "N17E052", "N26E025", "S02E037", "S22E045", "N08E020", "N17E053", "N26E026", "S02E038", "S22E046", "N08E021", "N17E054", "N26E027", "S02E039", "S22E047", "N08E022", "N17E055", "N26E028", "S02E040", "S22E048", "N08E023", "N17E056", "N26E029", "S02E041", "S22E055", "N08E024", "N17W001", "N26E030", "S02E042", "S23E014", "N08E025", "N17W002", "N26E031", "S03E009", "S23E015", "N08E026", "N17W003", "N26E032", "S03E010", "S23E016", "N08E027", "N17W004", "N26E033", "S03E011", "S23E017", "N08E028", "N17W005", "N26E034", "S03E012", "S23E018", "N08E029", "N17W006", "N26E035", "S03E013", "S23E019", "N08E030", "N17W007", "N26E036", "S03E014", "S23E020", "N08E031", "N17W008", "N26E037", "S03E015", "S23E021", "N08E032", "N17W009", "N26E038", "S03E016", "S23E022", "N08E033", "N17W010", "N26E039", "S03E017", "S23E023", "N08E034", "N17W011", "N26E040", "S03E018", "S23E024", "N08E035", "N17W012", "N26E041", "S03E019", "S23E025", "N08E036", "N17W013", "N26E042", "S03E020", "S23E026", "N08E037", "N17W014", "N26E043", "S03E021", "S23E027", "N08E038", "N17W015", "N26E044", "S03E022", "S23E028", "N08E039", "N17W016", "N26E045", "S03E023", "S23E029", "N08E040", "N17W017", "N26E046", "S03E024", "S23E030", "N08E041", "N17W025", "N26E047", "S03E025", "S23E031", "N08E042", "N17W026", "N26E048", "S03E026", "S23E032", "N08E043", "N18E000", "N26E049", "S03E027", "S23E033", "N08E044", "N18E001", "N26E050", "S03E028", "S23E034", "N08E045", "N18E002", "N26E051", "S03E029", "S23E035", "N08E046", "N18E003", "N26E053", "S03E030", "S23E040", "N08E047", "N18E004", "N26E054", "S03E031", "S23E043", "N08E048", "N18E005", "N26E055", "S03E032", "S23E044", "N08E049", "N18E006", "N26E056", "S03E033", "S23E045", "N08E050", "N18E007", "N26E057", "S03E034", "S23E046", "N08W001", "N18E008", "N26E058", "S03E035", "S23E047", "N08W002", "N18E009", "N26E059", "S03E036", "S23E048", "N08W003", "N18E010", "N26W001", "S03E037", "S24E014", "N08W004", "N18E011", "N26W002", "S03E038", "S24E015", "N08W005", "N18E012", "N26W003", "S03E039", "S24E016", "N08W006", "N18E013", "N26W004", "S03E040", "S24E017", "N08W007", "N18E014", "N26W005", "S03E041", "S24E018", "N08W008", "N18E015", "N26W006", "S04E010", "S24E019", "N08W009", "N18E016", "N26W007", "S04E011", "S24E020", "N08W010", "N18E017", "N26W008", "S04E012", "S24E021", "N08W011", "N18E018", "N26W009", "S04E013", "S24E022", "N08W012", "N18E019", "N26W010", "S04E014", "S24E023", "N08W013", "N18E020", "N26W011", "S04E015", "S24E024", "N08W014", "N18E021", "N26W012", "S04E016", "S24E025", "N09E000", "N18E022", "N26W013", "S04E017", "S24E026", "N09E001", "N18E023", "N26W014", "S04E018", "S24E027", "N09E002", "N18E024", "N26W015", "S04E019", "S24E028", "N09E003", "N18E025", "N27E000", "S04E020", "S24E029", "N09E004", "N18E026", "N27E001", "S04E021", "S24E030", "N09E005", "N18E027", "N27E002", "S04E022", "S24E031", "N09E006", "N18E028", "N27E003", "S04E023", "S24E032", "N09E007", "N18E029", "N27E004", "S04E024", "S24E033", "N09E008", "N18E030", "N27E005", "S04E025", "S24E034", "N09E009", "N18E031", "N27E006", "S04E026", "S24E035", "N09E010", "N18E032", "N27E007", "S04E027", "S24E043", "N09E011", "N18E033", "N27E008", "S04E028", "S24E044", "N09E012", "N18E034", "N27E009", "S04E029", "S24E045", "N09E013", "N18E035", "N27E010", "S04E030", "S24E046", "N09E014", "N18E036", "N27E011", "S04E031", "S24E047", "N09E015", "N18E037", "N27E012", "S04E032", "S25E014", "N09E016", "N18E038", "N27E013", "S04E033", "S25E015", "N09E017", "N18E040", "N27E014", "S04E034", "S25E016", "N09E018", "N18E041", "N27E015", "S04E035", "S25E017", "N09E019", "N18E042", "N27E016", "S04E036", "S25E018", "N09E020", "N18E043", "N27E017", "S04E037", "S25E019", "N09E021", "N18E044", "N27E018", "S04E038", "S25E020", "N09E022", "N18E045", "N27E019", "S04E039", "S25E021", "N09E023", "N18E046", "N27E020", "S04E040", "S25E022", "N09E024", "N18E047", "N27E021", "S04E055", "S25E023", "N09E025", "N18E048", "N27E022", "S05E011", "S25E024", "N09E026", "N18E049", "N27E023", "S05E012", "S25E025", "N09E027", "N18E050", "N27E024", "S05E013", "S25E026", "N09E028", "N18E051", "N27E025", "S05E014", "S25E027", "N09E029", "N18E052", "N27E026", "S05E015", "S25E028", "N09E030", "N18E053", "N27E027", "S05E016", "S25E029", "N09E031", "N18E054", "N27E028", "S05E017", "S25E030", "N09E032", "N18E055", "N27E029", "S05E018", "S25E031", "N09E033", "N18E056", "N27E030", "S05E019", "S25E032", "N09E034", "N18E057", "N27E031", "S05E020", "S25E033", "N09E035", "N18W001", "N27E032", "S05E021", "S25E034", "N09E036", "N18W002", "N27E033", "S05E022", "S25E035", "N09E037", "N18W003", "N27E034", "S05E023", "S25E043", "N09E038", "N18W004", "N27E035", "S05E024", "S25E044", "N09E039", "N18W005", "N27E036", "S05E025", "S25E045", "N09E040", "N18W006", "N27E037", "S05E026", "S25E046", "N09E041", "N18W007", "N27E038", "S05E027", "S25E047", "N09E042", "N18W008", "N27E039", "S05E028", "S26E014", "N09E043", "N18W009", "N27E040", "S05E029", "S26E015", "N09E044", "N18W010", "N27E041", "S05E030", "S26E016", "N09E045", "N18W011", "N27E042", "S05E031", "S26E017", "N09E046", "N18W012", "N27E043", "S05E032", "S26E018", "N09E047", "N18W013", "N27E044", "S05E033", "S26E019", "N09E048", "N18W014", "N27E045", "S05E034", "S26E020", "N09E049", "N18W015", "N27E046", "S05E035", "S26E021", "N09E050", "N18W016", "N27E047", "S05E036", "S26E022", "N09W001", "N18W017", "N27E048", "S05E037", "S26E023", "N09W002", "N19E000", "N27E049", "S05E038", "S26E024", "N09W003", "N19E001", "N27E050", "S05E039", "S26E025", "N09W004", "N19E002", "N27E051", "S05E053", "S26E026", "N09W005", "N19E003", "N27E052", "S05E055", "S26E027", "N09W006", "N19E004", "N27E053", "S06E011", "S26E028", "N09W007", "N19E005", "N27E054", "S06E012", "S26E029", "N09W008", "N19E006", "N27E055", "S06E013", "S26E030", "N09W009", "N19E007", "N27E056", "S06E014", "S26E031", "N09W010", "N19E008", "N27E057", "S06E015", "S26E032", "N09W011", "N19E009", "N27E058", "S06E016", "S26E033", "N09W012", "N19E010", "N27E059", "S06E017", "S26E034", "N09W013", "N19E011", "N27W001", "S06E018", "S26E044", "N09W014", "N19E012", "N27W002", "S06E019", "S26E045", "N09W015", "N19E013", "N27W003", "S06E020", "S26E046", "N10E000", "N19E014", "N27W004", "S06E021", "S26E047", "N10E001", "N19E015", "N27W005", "S06E022", "S27E014", "N10E002", "N19E016", "N27W006", "S06E023", "S27E015", "N10E003", "N19E017", "N27W007", "S06E024", "S27E016", "N10E004", "N19E018", "N27W008", "S06E025", "S27E017", "N10E005", "N19E019", "N27W009", "S06E026", "S27E018", "N10E006", "N19E020", "N27W010", "S06E027", "S27E019", "N10E007", "N19E021", "N27W011", "S06E028", "S27E020", "N10E008", "N19E022", "N27W012", "S06E029", "S27E021", "N10E009", "N19E023", "N27W013", "S06E030", "S27E022", "N10E010", "N19E024", "N27W014", "S06E031", "S27E023", "N10E011", "N19E025", "N27W016", "S06E032", "S27E024", "N10E012", "N19E026", "N27W017", "S06E033", "S27E025", "N10E013", "N19E027", "N27W018", "S06E034", "S27E026", "N10E014", "N19E028", "N27W019", "S06E035", "S27E027", "N10E015", "N19E029", "N28E000", "S06E036", "S27E028", "N10E016", "N19E030", "N28E001", "S06E037", "S27E029", "N10E017", "N19E031", "N28E002", "S06E038", "S27E030", "N10E018", "N19E032", "N28E003", "S06E039", "S27E031", "N10E019", "N19E033", "N28E004", "S06E053", "S27E032", "N10E020", "N19E034", "N28E005", "S06E055", "S28E015", "N10E021", "N19E035", "N28E006", "S07E012", "S28E016", "N10E022", "N19E036", "N28E007", "S07E013", "S28E017", "N10E023", "N19E037", "N28E008", "S07E014", "S28E018", "N10E024", "N19E038", "N28E009", "S07E015", "S28E019", "N10E025", "N19E039", "N28E010", "S07E016", "S28E020", "N10E026", "N19E040", "N28E011", "S07E017", "S28E021", "N10E027", "N19E041", "N28E012", "S07E018", "S28E022", "N10E028", "N19E042", "N28E013", "S07E019", "S28E023", "N10E029", "N19E043", "N28E014", "S07E020", "S28E024", "N10E030", "N19E044", "N28E015", "S07E021", "S28E025", "N10E031", "N19E045", "N28E016", "S07E022", "S28E026", "N10E032", "N19E046", "N28E017", "S07E023", "S28E027", "N10E033", "N19E047", "N28E018", "S07E024", "S28E028", "N10E034", "N19E048", "N28E019", "S07E025", "S28E029", "N10E035", "N19E049", "N28E020", "S07E026", "S28E030", "N10E036", "N19E050", "N28E021", "S07E027", "S28E031", "N10E037", "N19E051", "N28E022", "S07E028", "S28E032", "N10E038", "N19E052", "N28E023", "S07E029", "S29E015", "N10E039", "N19E053", "N28E024", "S07E030", "S29E016", "N10E040", "N19E054", "N28E025", "S07E031", "S29E017", "N10E041", "N19E055", "N28E026", "S07E032", "S29E018", "N10E042", "N19E056", "N28E027", "S07E033", "S29E019", "N10E043", "N19E057", "N28E028", "S07E034", "S29E020", "N10E044", "N19W001", "N28E029", "S07E035", "S29E021", "N10E045", "N19W002", "N28E030", "S07E036", "S29E022", "N10E046", "N19W003", "N28E031", "S07E037", "S29E023", "N10E047", "N19W004", "N28E032", "S07E038", "S29E024", "N10E048", "N19W005", "N28E033", "S07E039", "S29E025", "N10E049", "N19W006", "N28E034", "S07E052", "S29E026", "N10E050", "N19W007", "N28E035", "S07E053", "S29E027", "N10E051", "N19W008", "N28E036", "S08E012", "S29E028", "N10W001", "N19W009", "N28E037", "S08E013", "S29E029", "N10W002", "N19W010", "N28E038", "S08E014", "S29E030", "N10W003", "N19W011", "N28E039", "S08E015", "S29E031", "N10W004", "N19W012", "N28E040", "S08E016", "S29E032", "N10W005", "N19W013", "N28E041", "S08E017", "S30E016", "N10W006", "N19W014", "N28E042", "S08E018", "S30E017", "N10W007", "N19W015", "N28E043", "S08E019", "S30E018", "N10W008", "N19W016", "N28E044", "S08E020", "S30E019", "N10W009", "N19W017", "N28E045", "S08E021", "S30E020", "N10W010", "N20E000", "N28E046", "S08E022", "S30E021", "N10W011", "N20E001", "N28E047", "S08E023", "S30E022", "N10W012", "N20E002", "N28E048", "S08E024", "S30E023", "N10W013", "N20E003", "N28E050", "S08E025", "S30E024", "N10W014", "N20E004", "N28E051", "S08E026", "S30E025", "N10W015", "N20E005", "N28E052", "S08E027", "S30E026", "N10W016", "N20E006", "N28E053", "S08E028", "S30E027", "N11E000", "N20E007", "N28E054", "S08E029", "S30E028", "N11E001", "N20E008", "N28E055", "S08E030", "S30E029", "N11E002", "N20E009", "N28E056", "S08E031", "S30E030", "N11E003", "N20E010", "N28E057", "S08E032", "S30E031", "N11E004", "N20E011", "N28E058", "S08E033", "S31E017", "N11E005", "N20E012", "N28E059", "S08E034", "S31E018", "N11E006", "N20E013", "N28W001", "S08E035", "S31E019", "N11E007", "N20E014", "N28W002", "S08E036", "S31E020", "N11E008", "N20E015", "N28W003", "S08E037", "S31E021", "N11E009", "N20E016", "N28W004", "S08E038", "S31E022", "N11E010", "N20E017", "N28W005", "S08E039", "S31E023", "N11E011", "N20E018", "N28W006", "S08E052", "S31E024", "N11E012", "N20E019", "N28W007", "S08E056", "S31E025", "N11E013", "N20E020", "N28W008", "S09E013", "S31E026", "N11E014", "N20E021", "N28W009", "S09E014", "S31E027", "N11E015", "N20E022", "N28W010", "S09E015", "S31E028", "N11E016", "N20E023", "N28W011", "S09E016", "S31E029", "N11E017", "N20E024", "N28W012", "S09E017", "S31E030", "N11E018", "N20E025", "N28W013", "S09E018", "S32E017", "N11E019", "N20E026", "N28W014", "S09E019", "S32E018", "N11E020", "N20E027", "N28W015", "S09E020", "S32E019", "N11E021", "N20E028", "N28W016", "S09E021", "S32E020", "N11E022", "N20E029", "N28W017", "S09E022", "S32E021", "N11E023", "N20E030", "N28W018", "S09E023", "S32E022", "N11E024", "N20E031", "N28W019", "S09E024", "S32E023", "N11E025", "N20E032", "N29E000", "S09E025", "S32E024", "N11E026", "N20E033", "N29E001", "S09E026", "S32E025", "N11E027", "N20E034", "N29E002", "S09E027", "S32E026", "N11E028", "N20E035", "N29E003", "S09E028", "S32E027", "N11E029", "N20E036", "N29E004", "S09E029", "S32E028", "N11E030", "N20E037", "N29E005", "S09E030", "S32E029", "N11E031", "N20E039", "N29E006", "S09E031", "S32E030", "N11E032", "N20E040", "N29E007", "S09E032", "S33E017", "N11E033", "N20E041", "N29E008", "S09E033", "S33E018", "N11E034", "N20E042", "N29E009", "S09E034", "S33E019", "N11E035", "N20E043", "N29E010", "S09E035", "S33E020", "N11E036", "N20E044", "N29E011", "S09E036", "S33E021", "N11E037", "N20E045", "N29E012", "S09E037", "S33E022", "N11E038", "N20E046", "N29E013", "S09E038", "S33E023", "N11E039", "N20E047", "N29E014", "S09E039", "S33E024", "N11E040", "N20E048", "N29E015", "S10E012", "S33E025", "N11E041", "N20E049", "N29E016", "S10E013", "S33E026", "N11E042", "N20E050", "N29E017", "S10E014", "S33E027", "N11E043", "N20E051", "N29E018", "S10E015", "S33E028", "N11E047", "N20E052", "N29E019", "S10E016", "S33E029", "N11E048", "N20E053", "N29E020", "S10E017", "S34E017", "N11E049", "N20E054", "N29E021", "S10E018", "S34E018", "N11E050", "N20E055", "N29E022", "S10E019", "S34E019", "N11E051", "N20E056", "N29E023", "S10E020", "S34E020", "N11W001", "N20E057", "N29E024", "S10E021", "S34E021", "N11W002", "N20E058", "N29E025", "S10E022", "S34E022", "N11W003", "N20W001", "N29E026", "S10E023", "S34E023", "N11W004", "N20W002", "N29E027", "S10E024", "S34E024", "N11W005", "N20W003", "N29E028", "S10E025", "S34E025", "N11W006", "N20W004", "N29E029", "S10E026", "S34E026", "N11W007", "N20W005", "N29E030", "S10E027", "S34E027", "N11W008", "N20W006", "N29E031", "S10E028", "S35E018", "N11W009", "N20W007", "N29E032", "S10E029", "S35E019", "N11W010", "N20W008", "N29E033", "S10E030", "S35E020", "N11W011", "N20W009", "N29E034", "S10E031", "S35E021", "N11W012", "N20W010", "N29E035", "S10E032", "S35E022", "N11W013", "N20W011", "N29E036", "S10E033", "S35E023", "N11W014", "N20W012", "N29E037", "S10E034", "S35E024", "N11W015", "N20W013", "N29E038", "S10E035", "S35E025", (char *)0, "Australia", "S11E119", "S18E128", "S22E138", "S26E147", "S31E151", "S11E120", "S18E129", "S22E139", "S26E148", "S31E152", "S11E121", "S18E130", "S22E140", "S26E149", "S31E153", "S11E122", "S18E131", "S22E141", "S26E150", "S32E115", "S11E123", "S18E132", "S22E142", "S26E151", "S32E116", "S11E124", "S18E133", "S22E143", "S26E152", "S32E117", "S11E132", "S18E134", "S22E144", "S26E153", "S32E118", "S11E133", "S18E135", "S22E145", "S26W131", "S32E119", "S11E141", "S18E136", "S22E146", "S27E113", "S32E120", "S11E142", "S18E137", "S22E147", "S27E114", "S32E121", "S11E143", "S18E138", "S22E148", "S27E115", "S32E122", "S11E147", "S18E139", "S22E149", "S27E116", "S32E123", "S11E148", "S18E140", "S22E150", "S27E117", "S32E124", "S11E149", "S18E141", "S22E151", "S27E118", "S32E125", "S11E150", "S18E142", "S22E152", "S27E119", "S32E126", "S11E151", "S18E143", "S22E153", "S27E120", "S32E127", "S11E152", "S18E144", "S22E154", "S27E121", "S32E128", "S11E153", "S18E145", "S22E155", "S27E122", "S32E129", "S11E161", "S18E146", "S22E158", "S27E123", "S32E130", "S11E162", "S18E148", "S22E164", "S27E124", "S32E131", "S11E165", "S18E155", "S22E165", "S27E125", "S32E132", "S11E166", "S18E168", "S22E166", "S27E126", "S32E133", "S11E179", "S18E176", "S22E167", "S27E127", "S32E134", "S11W140", "S18E177", "S22E168", "S27E128", "S32E135", "S11W151", "S18E178", "S22W136", "S27E129", "S32E136", "S11W161", "S18E179", "S22W137", "S27E130", "S32E137", "S11W162", "S18W139", "S22W139", "S27E131", "S32E138", "S11W166", "S18W141", "S22W140", "S27E132", "S32E139", "S12E122", "S18W142", "S22W141", "S27E133", "S32E140", "S12E130", "S18W143", "S22W155", "S27E134", "S32E141", "S12E131", "S18W144", "S22W158", "S27E135", "S32E142", "S12E132", "S18W145", "S22W160", "S27E136", "S32E143", "S12E133", "S18W146", "S22W175", "S27E137", "S32E144", "S12E134", "S18W149", "S22W176", "S27E138", "S32E145", "S12E135", "S18W150", "S22W179", "S27E139", "S32E146", "S12E136", "S18W151", "S23E113", "S27E140", "S32E147", "S12E141", "S18W179", "S23E114", "S27E141", "S32E148", "S12E142", "S18W180", "S23E115", "S27E142", "S32E149", "S12E143", "S19E121", "S23E116", "S27E143", "S32E150", "S12E144", "S19E122", "S23E117", "S27E144", "S32E151", "S12E151", "S19E123", "S23E118", "S27E145", "S32E152", "S12E152", "S19E124", "S23E119", "S27E146", "S32E153", "S12E153", "S19E125", "S23E120", "S27E147", "S32E159", "S12E154", "S19E126", "S23E121", "S27E148", "S33E115", "S12E159", "S19E127", "S23E122", "S27E149", "S33E116", "S12E160", "S19E128", "S23E123", "S27E150", "S33E117", "S12E166", "S19E129", "S23E124", "S27E151", "S33E118", "S12E169", "S19E130", "S23E125", "S27E152", "S33E119", "S12E170", "S19E131", "S23E126", "S27E153", "S33E120", "S12W152", "S19E132", "S23E127", "S27W106", "S33E121", "S12W166", "S19E133", "S23E128", "S28E113", "S33E122", "S12W172", "S19E134", "S23E129", "S28E114", "S33E123", "S13E122", "S19E135", "S23E130", "S28E115", "S33E124", "S13E123", "S19E136", "S23E131", "S28E116", "S33E125", "S13E130", "S19E137", "S23E132", "S28E117", "S33E126", "S13E131", "S19E138", "S23E133", "S28E118", "S33E127", "S13E132", "S19E139", "S23E134", "S28E119", "S33E128", "S13E133", "S19E140", "S23E135", "S28E120", "S33E132", "S13E134", "S19E141", "S23E136", "S28E121", "S33E133", "S13E135", "S19E142", "S23E137", "S28E122", "S33E134", "S13E136", "S19E143", "S23E138", "S28E123", "S33E135", "S13E141", "S19E144", "S23E139", "S28E124", "S33E136", "S13E142", "S19E145", "S23E140", "S28E125", "S33E137", "S13E143", "S19E146", "S23E141", "S28E126", "S33E138", "S13E168", "S19E162", "S23E142", "S28E127", "S33E139", "S13E176", "S19E163", "S23E143", "S28E128", "S33E140", "S13E177", "S19E168", "S23E144", "S28E129", "S33E141", "S14E125", "S19E169", "S23E145", "S28E130", "S33E142", "S14E126", "S19E177", "S23E146", "S28E131", "S33E143", "S14E127", "S19E178", "S23E147", "S28E132", "S33E144", "S14E129", "S19E179", "S23E148", "S28E133", "S33E145", "S14E130", "S19W137", "S23E149", "S28E134", "S33E146", "S14E131", "S19W138", "S23E150", "S28E135", "S33E147", "S14E132", "S19W139", "S23E152", "S28E136", "S33E148", "S14E133", "S19W140", "S23E155", "S28E137", "S33E149", "S14E134", "S19W141", "S23E165", "S28E138", "S33E150", "S14E135", "S19W142", "S23E166", "S28E139", "S33E151", "S14E136", "S19W143", "S23E167", "S28E140", "S33E152", "S14E141", "S19W160", "S23E168", "S28E141", "S34E114", "S14E142", "S19W164", "S23E171", "S28E142", "S34E115", "S14E143", "S19W170", "S23E172", "S28E143", "S34E116", "S14E144", "S19W174", "S23W135", "S28E144", "S34E117", "S14E166", "S19W175", "S23W137", "S28E145", "S34E118", "S14E167", "S19W179", "S23W139", "S28E146", "S34E119", "S14W164", "S19W180", "S23W152", "S28E147", "S34E120", "S14W172", "S20E118", "S23W153", "S28E148", "S34E121", "S14W173", "S20E119", "S23W177", "S28E149", "S34E122", "S14W177", "S20E120", "S24E113", "S28E150", "S34E123", "S15E121", "S20E121", "S24E114", "S28E151", "S34E124", "S15E123", "S20E122", "S24E115", "S28E152", "S34E134", "S15E124", "S20E123", "S24E116", "S28E153", "S34E135", "S15E125", "S20E124", "S24E117", "S28W110", "S34E136", "S15E126", "S20E125", "S24E118", "S28W144", "S34E137", "S15E127", "S20E126", "S24E119", "S28W145", "S34E138", "S15E128", "S20E127", "S24E120", "S29E113", "S34E139", "S15E129", "S20E128", "S24E121", "S29E114", "S34E140", "S15E130", "S20E129", "S24E122", "S29E115", "S34E141", "S15E131", "S20E130", "S24E123", "S29E116", "S34E142", "S15E132", "S20E131", "S24E124", "S29E117", "S34E143", "S15E133", "S20E132", "S24E125", "S29E118", "S34E144", "S15E134", "S20E133", "S24E126", "S29E119", "S34E145", "S15E135", "S20E134", "S24E127", "S29E120", "S34E146", "S15E136", "S20E135", "S24E128", "S29E121", "S34E147", "S15E141", "S20E136", "S24E129", "S29E122", "S34E148", "S15E142", "S20E137", "S24E130", "S29E123", "S34E149", "S15E143", "S20E138", "S24E131", "S29E124", "S34E150", "S15E144", "S20E139", "S24E132", "S29E125", "S34E151", "S15E145", "S20E140", "S24E133", "S29E126", "S35E114", "S15E166", "S20E141", "S24E134", "S29E127", "S35E115", "S15E167", "S20E142", "S24E135", "S29E128", "S35E116", "S15E168", "S20E143", "S24E136", "S29E129", "S35E117", "S15W139", "S20E144", "S24E137", "S29E130", "S35E118", "S15W142", "S20E145", "S24E138", "S29E131", "S35E119", "S15W145", "S20E146", "S24E139", "S29E132", "S35E120", "S15W146", "S20E147", "S24E140", "S29E133", "S35E121", "S15W147", "S20E148", "S24E141", "S29E134", "S35E122", "S15W148", "S20E158", "S24E142", "S29E135", "S35E123", "S15W149", "S20E163", "S24E143", "S29E136", "S35E134", "S15W169", "S20E169", "S24E144", "S29E137", "S35E135", "S15W170", "S20E170", "S24E145", "S29E138", "S35E136", "S15W171", "S20E177", "S24E146", "S29E139", "S35E137", "S15W172", "S20E178", "S24E147", "S29E140", "S35E138", "S15W178", "S20E179", "S24E148", "S29E141", "S35E139", "S15W179", "S20W139", "S24E149", "S29E142", "S35E140", "S16E123", "S20W140", "S24E150", "S29E143", "S35E141", "S16E124", "S20W141", "S24E151", "S29E144", "S35E142", "S16E125", "S20W142", "S24E152", "S29E145", "S35E143", "S16E126", "S20W145", "S24E155", "S29E146", "S35E144", "S16E127", "S20W146", "S24W131", "S29E147", "S35E145", "S16E128", "S20W158", "S24W135", "S29E148", "S35E146", "S16E129", "S20W159", "S24W136", "S29E149", "S35E147", "S16E130", "S20W170", "S24W138", "S29E150", "S35E148", "S16E131", "S20W175", "S24W148", "S29E151", "S35E149", "S16E132", "S20W176", "S24W150", "S29E152", "S35E150", "S16E133", "S20W179", "S25E113", "S29E153", "S35E151", "S16E134", "S20W180", "S25E114", "S30E114", "S36E116", "S16E135", "S21E115", "S25E115", "S30E115", "S36E117", "S16E136", "S21E116", "S25E116", "S30E116", "S36E118", "S16E137", "S21E117", "S25E117", "S30E117", "S36E135", "S16E141", "S21E118", "S25E118", "S30E118", "S36E136", "S16E142", "S21E119", "S25E119", "S30E119", "S36E137", "S16E143", "S21E120", "S25E120", "S30E120", "S36E138", "S16E144", "S21E121", "S25E121", "S30E121", "S36E139", "S16E145", "S21E122", "S25E122", "S30E122", "S36E140", "S16E166", "S21E123", "S25E123", "S30E123", "S36E141", "S16E167", "S21E124", "S25E124", "S30E124", "S36E142", "S16E168", "S21E125", "S25E125", "S30E125", "S36E143", "S16W141", "S21E126", "S25E126", "S30E126", "S36E144", "S16W143", "S21E127", "S25E127", "S30E127", "S36E145", "S16W145", "S21E128", "S25E128", "S30E128", "S36E146", "S16W146", "S21E129", "S25E129", "S30E129", "S36E147", "S16W147", "S21E130", "S25E130", "S30E130", "S36E148", "S16W148", "S21E131", "S25E131", "S30E131", "S36E149", "S16W149", "S21E132", "S25E132", "S30E132", "S36E150", "S16W155", "S21E133", "S25E133", "S30E133", "S37E136", "S16W174", "S21E134", "S25E134", "S30E134", "S37E137", "S16W176", "S21E135", "S25E135", "S30E135", "S37E139", "S16W180", "S21E136", "S25E136", "S30E136", "S37E140", "S17E122", "S21E137", "S25E137", "S30E137", "S37E141", "S17E123", "S21E138", "S25E138", "S30E138", "S37E142", "S17E124", "S21E139", "S25E139", "S30E139", "S37E143", "S17E125", "S21E140", "S25E140", "S30E140", "S37E144", "S17E126", "S21E141", "S25E141", "S30E141", "S37E145", "S17E127", "S21E142", "S25E142", "S30E142", "S37E146", "S17E128", "S21E143", "S25E143", "S30E143", "S37E147", "S17E129", "S21E144", "S25E144", "S30E144", "S37E148", "S17E130", "S21E145", "S25E145", "S30E145", "S37E149", "S17E131", "S21E146", "S25E146", "S30E146", "S37E150", "S17E132", "S21E147", "S25E147", "S30E147", "S38E139", "S17E133", "S21E148", "S25E148", "S30E148", "S38E140", "S17E134", "S21E149", "S25E149", "S30E149", "S38E141", "S17E135", "S21E150", "S25E150", "S30E150", "S38E142", "S17E136", "S21E154", "S25E151", "S30E151", "S38E143", "S17E137", "S21E163", "S25E152", "S30E152", "S38E144", "S17E138", "S21E164", "S25E153", "S30E153", "S38E145", "S17E139", "S21E165", "S25W125", "S31E114", "S38E146", "S17E140", "S21E166", "S25W129", "S31E115", "S38E147", "S17E141", "S21E167", "S26E112", "S31E116", "S38E148", "S17E142", "S21E169", "S26E113", "S31E117", "S38E149", "S17E143", "S21W139", "S26E114", "S31E118", "S38E150", "S17E144", "S21W140", "S26E115", "S31E119", "S39E140", "S17E145", "S21W144", "S26E116", "S31E120", "S39E141", "S17E146", "S21W158", "S26E117", "S31E121", "S39E142", "S17E149", "S21W159", "S26E118", "S31E122", "S39E143", "S17E150", "S21W175", "S26E119", "S31E123", "S39E144", "S17E167", "S21W176", "S26E120", "S31E124", "S39E145", "S17E168", "S21W179", "S26E121", "S31E125", "S39E146", "S17E177", "S22E113", "S26E122", "S31E126", "S39E147", "S17E178", "S22E114", "S26E123", "S31E127", "S40E143", "S17E179", "S22E115", "S26E124", "S31E128", "S40E144", "S17W141", "S22E116", "S26E125", "S31E129", "S40E146", "S17W142", "S22E117", "S26E126", "S31E130", "S40E147", "S17W143", "S22E118", "S26E127", "S31E131", "S40E148", "S17W144", "S22E119", "S26E128", "S31E132", "S41E143", "S17W145", "S22E120", "S26E129", "S31E133", "S41E144", "S17W146", "S22E121", "S26E130", "S31E134", "S41E145", "S17W147", "S22E122", "S26E131", "S31E135", "S41E146", "S17W150", "S22E123", "S26E132", "S31E136", "S41E147", "S17W151", "S22E124", "S26E133", "S31E137", "S41E148", "S17W152", "S22E125", "S26E134", "S31E138", "S42E144", "S17W153", "S22E126", "S26E135", "S31E139", "S42E145", "S17W154", "S22E127", "S26E136", "S31E140", "S42E146", "S17W155", "S22E128", "S26E137", "S31E141", "S42E147", "S17W180", "S22E129", "S26E138", "S31E142", "S42E148", "S18E118", "S22E130", "S26E139", "S31E143", "S43E145", "S18E119", "S22E131", "S26E140", "S31E144", "S43E146", "S18E122", "S22E132", "S26E141", "S31E145", "S43E147", "S18E123", "S22E133", "S26E142", "S31E146", "S43E148", "S18E124", "S22E134", "S26E143", "S31E147", "S44E145", "S18E125", "S22E135", "S26E144", "S31E148", "S44E146", "S18E126", "S22E136", "S26E145", "S31E149", "S44E147", "S18E127", "S22E137", "S26E146", "S31E150", "S44E148", (char *)0, "Eurasia", "N00E072", "N29E061", "N40E110", "N48W004", "N56E089", "N00E073", "N29E062", "N40E111", "N48W005", "N56E090", "N00E097", "N29E063", "N40E112", "N48W006", "N56E091", "N00E098", "N29E064", "N40E113", "N49E000", "N56E092", "N00E099", "N29E065", "N40E114", "N49E001", "N56E093", "N00E100", "N29E066", "N40E115", "N49E002", "N56E094", "N00E101", "N29E067", "N40E116", "N49E003", "N56E095", "N00E102", "N29E068", "N40E117", "N49E004", "N56E096", "N00E103", "N29E069", "N40E118", "N49E005", "N56E097", "N00E104", "N29E070", "N40E119", "N49E006", "N56E098", "N00E106", "N29E071", "N40E120", "N49E007", "N56E099", "N00E107", "N29E072", "N40E121", "N49E008", "N56E100", "N00E108", "N29E073", "N40E122", "N49E009", "N56E101", "N00E109", "N29E074", "N40E123", "N49E010", "N56E102", "N00E110", "N29E075", "N40E124", "N49E011", "N56E103", "N00E111", "N29E076", "N40E125", "N49E012", "N56E104", "N00E112", "N29E077", "N40E126", "N49E013", "N56E105", "N00E113", "N29E078", "N40E127", "N49E014", "N56E106", "N00E114", "N29E079", "N40E128", "N49E015", "N56E107", "N00E115", "N29E080", "N40E129", "N49E016", "N56E108", "N00E116", "N29E081", "N40E139", "N49E017", "N56E109", "N00E117", "N29E082", "N40E140", "N49E018", "N56E110", "N00E118", "N29E083", "N40E141", "N49E019", "N56E111", "N00E119", "N29E084", "N40W001", "N49E020", "N56E112", "N00E120", "N29E085", "N40W002", "N49E021", "N56E113", "N00E121", "N29E086", "N40W003", "N49E022", "N56E114", "N00E122", "N29E087", "N40W004", "N49E023", "N56E115", "N00E123", "N29E088", "N40W005", "N49E024", "N56E116", "N00E124", "N29E089", "N40W006", "N49E025", "N56E117", "N00E126", "N29E090", "N40W007", "N49E026", "N56E118", "N00E127", "N29E091", "N40W008", "N49E027", "N56E119", "N00E128", "N29E092", "N40W009", "N49E028", "N56E120", "N00E129", "N29E093", "N41E000", "N49E029", "N56E121", "N00E130", "N29E094", "N41E001", "N49E030", "N56E122", "N00E131", "N29E095", "N41E002", "N49E031", "N56E123", "N00E134", "N29E096", "N41E003", "N49E032", "N56E124", "N00E172", "N29E097", "N41E008", "N49E033", "N56E125", "N00E173", "N29E098", "N41E009", "N49E034", "N56E126", "N00W177", "N29E099", "N41E011", "N49E035", "N56E127", "N01E073", "N29E100", "N41E012", "N49E036", "N56E128", "N01E097", "N29E101", "N41E013", "N49E037", "N56E129", "N01E098", "N29E102", "N41E014", "N49E038", "N56E130", "N01E099", "N29E103", "N41E015", "N49E039", "N56E131", "N01E100", "N29E104", "N41E016", "N49E040", "N56E132", "N01E101", "N29E105", "N41E017", "N49E041", "N56E133", "N01E102", "N29E106", "N41E019", "N49E042", "N56E134", "N01E103", "N29E107", "N41E020", "N49E043", "N56E135", "N01E104", "N29E108", "N41E021", "N49E044", "N56E136", "N01E106", "N29E109", "N41E022", "N49E045", "N56E137", "N01E107", "N29E110", "N41E023", "N49E046", "N56E138", "N01E108", "N29E111", "N41E024", "N49E047", "N56E143", "N01E109", "N29E112", "N41E025", "N49E048", "N56E155", "N01E110", "N29E113", "N41E026", "N49E049", "N56E156", "N01E111", "N29E114", "N41E027", "N49E050", "N56E157", "N01E112", "N29E115", "N41E028", "N49E051", "N56E158", "N01E113", "N29E116", "N41E029", "N49E052", "N56E159", "N01E114", "N29E117", "N41E030", "N49E053", "N56E160", "N01E115", "N29E118", "N41E031", "N49E054", "N56E161", "N01E116", "N29E119", "N41E032", "N49E055", "N56E162", "N01E117", "N29E120", "N41E033", "N49E056", "N56E163", "N01E118", "N29E121", "N41E034", "N49E057", "N56W003", "N01E119", "N29E122", "N41E035", "N49E058", "N56W004", "N01E120", "N29E129", "N41E036", "N49E059", "N56W005", "N01E121", "N29E140", "N41E037", "N49E060", "N56W006", "N01E122", "N30E060", "N41E038", "N49E061", "N56W007", "N01E124", "N30E061", "N41E039", "N49E062", "N56W008", "N01E125", "N30E062", "N41E040", "N49E063", "N57E006", "N01E126", "N30E063", "N41E041", "N49E064", "N57E007", "N01E127", "N30E064", "N41E042", "N49E065", "N57E008", "N01E128", "N30E065", "N41E043", "N49E066", "N57E009", "N01E131", "N30E066", "N41E044", "N49E067", "N57E010", "N01E154", "N30E067", "N41E045", "N49E068", "N57E011", "N01E172", "N30E068", "N41E046", "N49E069", "N57E012", "N01E173", "N30E069", "N41E047", "N49E070", "N57E013", "N01W158", "N30E070", "N41E048", "N49E071", "N57E014", "N02E072", "N30E071", "N41E049", "N49E072", "N57E015", "N02E073", "N30E072", "N41E052", "N49E073", "N57E016", "N02E095", "N30E073", "N41E053", "N49E074", "N57E017", "N02E096", "N30E074", "N41E054", "N49E075", "N57E018", "N02E097", "N30E075", "N41E055", "N49E076", "N57E019", "N02E098", "N30E076", "N41E056", "N49E077", "N57E021", "N02E099", "N30E077", "N41E057", "N49E078", "N57E022", "N02E100", "N30E078", "N41E058", "N49E079", "N57E023", "N02E101", "N30E079", "N41E059", "N49E080", "N57E024", "N02E102", "N30E080", "N41E060", "N49E081", "N57E025", "N02E103", "N30E081", "N41E061", "N49E082", "N57E026", "N02E104", "N30E082", "N41E062", "N49E083", "N57E027", "N02E105", "N30E083", "N41E063", "N49E084", "N57E028", "N02E106", "N30E084", "N41E064", "N49E085", "N57E029", "N02E107", "N30E085", "N41E065", "N49E086", "N57E030", "N02E108", "N30E086", "N41E066", "N49E087", "N57E031", "N02E109", "N30E087", "N41E067", "N49E088", "N57E032", "N02E111", "N30E088", "N41E068", "N49E089", "N57E033", "N02E112", "N30E089", "N41E069", "N49E090", "N57E034", "N02E113", "N30E090", "N41E070", "N49E091", "N57E035", "N02E114", "N30E091", "N41E071", "N49E092", "N57E036", "N02E115", "N30E092", "N41E072", "N49E093", "N57E037", "N02E116", "N30E093", "N41E073", "N49E094", "N57E038", "N02E117", "N30E094", "N41E074", "N49E095", "N57E039", "N02E118", "N30E095", "N41E075", "N49E096", "N57E040", "N02E125", "N30E096", "N41E076", "N49E097", "N57E041", "N02E127", "N30E097", "N41E077", "N49E098", "N57E042", "N02E128", "N30E098", "N41E078", "N49E099", "N57E043", "N02E131", "N30E099", "N41E079", "N49E100", "N57E044", "N02E173", "N30E100", "N41E080", "N49E101", "N57E045", "N02W158", "N30E101", "N41E081", "N49E102", "N57E046", "N03E072", "N30E102", "N41E082", "N49E103", "N57E047", "N03E073", "N30E103", "N41E083", "N49E104", "N57E048", "N03E095", "N30E104", "N41E084", "N49E105", "N57E049", "N03E096", "N30E105", "N41E085", "N49E106", "N57E050", "N03E097", "N30E106", "N41E086", "N49E107", "N57E051", "N03E098", "N30E107", "N41E087", "N49E108", "N57E052", "N03E099", "N30E108", "N41E088", "N49E109", "N57E053", "N03E100", "N30E109", "N41E089", "N49E110", "N57E054", "N03E101", "N30E110", "N41E090", "N49E111", "N57E055", "N03E102", "N30E111", "N41E091", "N49E112", "N57E056", "N03E103", "N30E112", "N41E092", "N49E113", "N57E057", "N03E105", "N30E113", "N41E093", "N49E114", "N57E058", "N03E106", "N30E114", "N41E094", "N49E115", "N57E059", "N03E107", "N30E115", "N41E095", "N49E116", "N57E060", "N03E108", "N30E116", "N41E096", "N49E117", "N57E061", "N03E112", "N30E117", "N41E097", "N49E118", "N57E062", "N03E113", "N30E118", "N41E098", "N49E119", "N57E063", "N03E114", "N30E119", "N41E099", "N49E120", "N57E064", "N03E115", "N30E120", "N41E100", "N49E121", "N57E065", "N03E116", "N30E121", "N41E101", "N49E122", "N57E066", "N03E117", "N30E122", "N41E102", "N49E123", "N57E067", "N03E125", "N30E129", "N41E103", "N49E124", "N57E068", "N03E126", "N30E130", "N41E104", "N49E125", "N57E069", "N03E131", "N30E131", "N41E105", "N49E126", "N57E070", "N03E154", "N30E140", "N41E106", "N49E127", "N57E071", "N03E172", "N31E060", "N41E107", "N49E128", "N57E072", "N03E173", "N31E061", "N41E108", "N49E129", "N57E073", "N03W160", "N31E062", "N41E109", "N49E130", "N57E074", "N04E072", "N31E063", "N41E110", "N49E131", "N57E075", "N04E073", "N31E064", "N41E111", "N49E132", "N57E076", "N04E095", "N31E065", "N41E112", "N49E133", "N57E077", "N04E096", "N31E066", "N41E113", "N49E134", "N57E078", "N04E097", "N31E067", "N41E114", "N49E135", "N57E079", "N04E098", "N31E068", "N41E115", "N49E136", "N57E080", "N04E100", "N31E069", "N41E116", "N49E137", "N57E081", "N04E101", "N31E070", "N41E117", "N49E138", "N57E082", "N04E102", "N31E071", "N41E118", "N49E139", "N57E083", "N04E103", "N31E072", "N41E119", "N49E140", "N57E084", "N04E107", "N31E073", "N41E120", "N49E142", "N57E085", "N04E108", "N31E074", "N41E121", "N49E143", "N57E086", "N04E113", "N31E075", "N41E122", "N49E144", "N57E087", "N04E114", "N31E076", "N41E123", "N49E154", "N57E088", "N04E115", "N31E077", "N41E124", "N49E155", "N57E089", "N04E116", "N31E078", "N41E125", "N49W001", "N57E090", "N04E117", "N31E079", "N41E126", "N49W002", "N57E091", "N04E118", "N31E080", "N41E127", "N49W003", "N57E092", "N04E119", "N31E081", "N41E128", "N49W006", "N57E093", "N04E125", "N31E082", "N41E129", "N49W007", "N57E094", "N04E126", "N31E083", "N41E130", "N50E000", "N57E095", "N04E127", "N31E084", "N41E139", "N50E001", "N57E096", "N04E131", "N31E085", "N41E140", "N50E002", "N57E097", "N04E132", "N31E086", "N41E141", "N50E003", "N57E098", "N04E168", "N31E087", "N41E143", "N50E004", "N57E099", "N04W161", "N31E088", "N41W001", "N50E005", "N57E100", "N05E072", "N31E089", "N41W002", "N50E006", "N57E101", "N05E073", "N31E090", "N41W003", "N50E007", "N57E102", "N05E080", "N31E091", "N41W004", "N50E008", "N57E103", "N05E094", "N31E092", "N41W005", "N50E009", "N57E104", "N05E095", "N31E093", "N41W006", "N50E010", "N57E105", "N05E096", "N31E094", "N41W007", "N50E011", "N57E106", "N05E097", "N31E095", "N41W008", "N50E012", "N57E107", "N05E100", "N31E096", "N41W009", "N50E013", "N57E108", "N05E101", "N31E097", "N42E000", "N50E014", "N57E109", "N05E102", "N31E098", "N42E001", "N50E015", "N57E110", "N05E103", "N31E099", "N42E002", "N50E016", "N57E111", "N05E114", "N31E100", "N42E003", "N50E017", "N57E112", "N05E115", "N31E101", "N42E006", "N50E018", "N57E113", "N05E116", "N31E102", "N42E008", "N50E019", "N57E114", "N05E117", "N31E103", "N42E009", "N50E020", "N57E115", "N05E118", "N31E104", "N42E010", "N50E021", "N57E116", "N05E119", "N31E105", "N42E011", "N50E022", "N57E117", "N05E120", "N31E106", "N42E012", "N50E023", "N57E118", "N05E121", "N31E107", "N42E013", "N50E024", "N57E119", "N05E124", "N31E108", "N42E014", "N50E025", "N57E120", "N05E125", "N31E109", "N42E015", "N50E026", "N57E121", "N05E126", "N31E110", "N42E016", "N50E027", "N57E122", "N05E132", "N31E111", "N42E017", "N50E028", "N57E123", "N05E153", "N31E112", "N42E018", "N50E029", "N57E124", "N05E157", "N31E113", "N42E019", "N50E030", "N57E125", "N05E162", "N31E114", "N42E020", "N50E031", "N57E126", "N05E163", "N31E115", "N42E021", "N50E032", "N57E127", "N05E168", "N31E116", "N42E022", "N50E033", "N57E128", "N05E169", "N31E117", "N42E023", "N50E034", "N57E129", "N05E172", "N31E118", "N42E024", "N50E035", "N57E130", "N05W163", "N31E119", "N42E025", "N50E036", "N57E131", "N06E072", "N31E120", "N42E026", "N50E037", "N57E132", "N06E073", "N31E121", "N42E027", "N50E038", "N57E133", "N06E079", "N31E122", "N42E028", "N50E039", "N57E134", "N06E080", "N31E128", "N42E033", "N50E040", "N57E135", "N06E081", "N31E129", "N42E034", "N50E041", "N57E136", "N06E093", "N31E130", "N42E035", "N50E042", "N57E137", "N06E095", "N31E131", "N42E040", "N50E043", "N57E138", "N06E099", "N31E139", "N42E041", "N50E044", "N57E139", "N06E100", "N31E140", "N42E042", "N50E045", "N57E140", "N06E101", "N32E060", "N42E043", "N50E046", "N57E156", "N06E102", "N32E061", "N42E044", "N50E047", "N57E157", "N06E115", "N32E062", "N42E045", "N50E048", "N57E158", "N06E116", "N32E063", "N42E046", "N50E049", "N57E159", "N06E117", "N32E064", "N42E047", "N50E050", "N57E160", "N06E118", "N32E065", "N42E048", "N50E051", "N57E161", "N06E120", "N32E066", "N42E051", "N50E052", "N57E162", "N06E121", "N32E067", "N42E052", "N50E053", "N57E163", "N06E122", "N32E068", "N42E053", "N50E054", "N57W002", "N06E123", "N32E069", "N42E054", "N50E055", "N57W003", "N06E124", "N32E070", "N42E055", "N50E056", "N57W004", "N06E125", "N32E071", "N42E056", "N50E057", "N57W005", "N06E126", "N32E072", "N42E057", "N50E058", "N57W006", "N06E134", "N32E073", "N42E058", "N50E059", "N57W007", "N06E143", "N32E074", "N42E059", "N50E060", "N57W008", "N06E149", "N32E075", "N42E060", "N50E061", "N57W009", "N06E151", "N32E076", "N42E061", "N50E062", "N57W014", "N06E152", "N32E077", "N42E062", "N50E063", "N57W171", "N06E157", "N32E078", "N42E063", "N50E064", "N58E005", "N06E158", "N32E079", "N42E064", "N50E065", "N58E006", "N06E159", "N32E080", "N42E065", "N50E066", "N58E007", "N06E160", "N32E081", "N42E066", "N50E067", "N58E008", "N06E169", "N32E082", "N42E067", "N50E068", "N58E009", "N06E171", "N32E083", "N42E068", "N50E069", "N58E010", "N06E172", "N32E084", "N42E069", "N50E070", "N58E011", "N06W163", "N32E085", "N42E070", "N50E071", "N58E012", "N07E072", "N32E086", "N42E071", "N50E072", "N58E013", "N07E073", "N32E087", "N42E072", "N50E073", "N58E014", "N07E079", "N32E088", "N42E073", "N50E074", "N58E015", "N07E080", "N32E089", "N42E074", "N50E075", "N58E016", "N07E081", "N32E090", "N42E075", "N50E076", "N58E017", "N07E093", "N32E091", "N42E076", "N50E077", "N58E018", "N07E098", "N32E092", "N42E077", "N50E078", "N58E019", "N07E099", "N32E093", "N42E078", "N50E079", "N58E021", "N07E100", "N32E094", "N42E079", "N50E080", "N58E022", "N07E113", "N32E095", "N42E080", "N50E081", "N58E023", "N07E116", "N32E096", "N42E081", "N50E082", "N58E024", "N07E117", "N32E097", "N42E082", "N50E083", "N58E025", "N07E118", "N32E098", "N42E083", "N50E084", "N58E026", "N07E121", "N32E099", "N42E084", "N50E085", "N58E027", "N07E122", "N32E100", "N42E085", "N50E086", "N58E028", "N07E123", "N32E101", "N42E086", "N50E087", "N58E029", "N07E124", "N32E102", "N42E087", "N50E088", "N58E030", "N07E125", "N32E103", "N42E088", "N50E089", "N58E031", "N07E126", "N32E104", "N42E089", "N50E090", "N58E032", "N07E134", "N32E105", "N42E090", "N50E091", "N58E033", "N07E143", "N32E106", "N42E091", "N50E092", "N58E034", "N07E144", "N32E107", "N42E092", "N50E093", "N58E035", "N07E145", "N32E108", "N42E093", "N50E094", "N58E036", "N07E146", "N32E109", "N42E094", "N50E095", "N58E037", "N07E147", "N32E110", "N42E095", "N50E096", "N58E038", "N07E149", "N32E111", "N42E096", "N50E097", "N58E039", "N07E151", "N32E112", "N42E097", "N50E098", "N58E040", "N07E152", "N32E113", "N42E098", "N50E099", "N58E041", "N07E155", "N32E114", "N42E099", "N50E100", "N58E042", "N07E157", "N32E115", "N42E100", "N50E101", "N58E043", "N07E158", "N32E116", "N42E101", "N50E102", "N58E044", "N07E168", "N32E117", "N42E102", "N50E103", "N58E045", "N07E171", "N32E118", "N42E103", "N50E104", "N58E046", "N08E073", "N32E119", "N42E104", "N50E105", "N58E047", "N08E076", "N32E120", "N42E105", "N50E106", "N58E048", "N08E077", "N32E121", "N42E106", "N50E107", "N58E049", "N08E078", "N32E128", "N42E107", "N50E108", "N58E050", "N08E079", "N32E129", "N42E108", "N50E109", "N58E051", "N08E080", "N32E130", "N42E109", "N50E110", "N58E052", "N08E081", "N32E131", "N42E110", "N50E111", "N58E053", "N08E092", "N32E132", "N42E111", "N50E112", "N58E054", "N08E093", "N32E133", "N42E112", "N50E113", "N58E055", "N08E097", "N32E139", "N42E113", "N50E114", "N58E056", "N08E098", "N33E060", "N42E114", "N50E115", "N58E057", "N08E099", "N33E061", "N42E115", "N50E116", "N58E058", "N08E100", "N33E062", "N42E116", "N50E117", "N58E059", "N08E104", "N33E063", "N42E117", "N50E118", "N58E060", "N08E105", "N33E064", "N42E118", "N50E119", "N58E061", "N08E106", "N33E065", "N42E119", "N50E120", "N58E062", "N08E111", "N33E066", "N42E120", "N50E121", "N58E063", "N08E116", "N33E067", "N42E121", "N50E122", "N58E064", "N08E117", "N33E068", "N42E122", "N50E123", "N58E065", "N08E118", "N33E069", "N42E123", "N50E124", "N58E066", "N08E122", "N33E070", "N42E124", "N50E125", "N58E067", "N08E123", "N33E071", "N42E125", "N50E126", "N58E068", "N08E124", "N33E072", "N42E126", "N50E127", "N58E069", "N08E125", "N33E073", "N42E127", "N50E128", "N58E070", "N08E126", "N33E074", "N42E128", "N50E129", "N58E071", "N08E134", "N33E075", "N42E129", "N50E130", "N58E072", "N08E137", "N33E076", "N42E130", "N50E131", "N58E073", "N08E140", "N33E077", "N42E131", "N50E132", "N58E074", "N08E144", "N33E078", "N42E132", "N50E133", "N58E075", "N08E146", "N33E079", "N42E133", "N50E134", "N58E076", "N08E147", "N33E080", "N42E134", "N50E135", "N58E077", "N08E149", "N33E081", "N42E139", "N50E136", "N58E078", "N08E150", "N33E082", "N42E140", "N50E137", "N58E079", "N08E151", "N33E083", "N42E141", "N50E138", "N58E080", "N08E152", "N33E084", "N42E142", "N50E139", "N58E081", "N08E154", "N33E085", "N42E143", "N50E140", "N58E082", "N08E165", "N33E086", "N42E144", "N50E142", "N58E083", "N08E166", "N33E087", "N42E145", "N50E143", "N58E084", "N08E167", "N33E088", "N42W001", "N50E154", "N58E085", "N08E168", "N33E089", "N42W002", "N50E155", "N58E086", "N08E170", "N33E090", "N42W003", "N50E156", "N58E087", "N08E171", "N33E091", "N42W004", "N50W001", "N58E088", "N09E076", "N33E092", "N42W005", "N50W002", "N58E089", "N09E077", "N33E093", "N42W006", "N50W003", "N58E090", "N09E078", "N33E094", "N42W007", "N50W004", "N58E091", "N09E079", "N33E095", "N42W008", "N50W005", "N58E092", "N09E080", "N33E096", "N42W009", "N50W006", "N58E093", "N09E092", "N33E097", "N42W010", "N51E000", "N58E094", "N09E097", "N33E098", "N43E000", "N51E001", "N58E095", "N09E098", "N33E099", "N43E001", "N51E002", "N58E096", "N09E099", "N33E100", "N43E002", "N51E003", "N58E097", "N09E100", "N33E101", "N43E003", "N51E004", "N58E098", "N09E102", "N33E102", "N43E004", "N51E005", "N58E099", "N09E103", "N33E103", "N43E005", "N51E006", "N58E100", "N09E104", "N33E104", "N43E006", "N51E007", "N58E101", "N09E105", "N33E105", "N43E007", "N51E008", "N58E102", "N09E106", "N33E106", "N43E008", "N51E009", "N58E103", "N09E109", "N33E107", "N43E009", "N51E010", "N58E104", "N09E117", "N33E108", "N43E010", "N51E011", "N58E105", "N09E118", "N33E109", "N43E011", "N51E012", "N58E106", "N09E119", "N33E110", "N43E012", "N51E013", "N58E107", "N09E120", "N33E111", "N43E013", "N51E014", "N58E108", "N09E121", "N33E112", "N43E015", "N51E015", "N58E109", "N09E122", "N33E113", "N43E016", "N51E016", "N58E110", "N09E123", "N33E114", "N43E017", "N51E017", "N58E111", "N09E124", "N33E115", "N43E018", "N51E018", "N58E112", "N09E125", "N33E116", "N43E019", "N51E019", "N58E113", "N09E126", "N33E117", "N43E020", "N51E020", "N58E114", "N09E138", "N33E118", "N43E021", "N51E021", "N58E115", "N09E139", "N33E119", "N43E022", "N51E022", "N58E116", "N09E140", "N33E120", "N43E023", "N51E023", "N58E117", "N09E145", "N33E126", "N43E024", "N51E024", "N58E118", "N09E160", "N33E128", "N43E025", "N51E025", "N58E119", "N09E165", "N33E129", "N43E026", "N51E026", "N58E120", "N09E166", "N33E130", "N43E027", "N51E027", "N58E121", "N09E167", "N33E131", "N43E028", "N51E028", "N58E122", "N09E169", "N33E132", "N43E039", "N51E029", "N58E123", "N09E170", "N33E133", "N43E040", "N51E030", "N58E124", "N10E072", "N33E134", "N43E041", "N51E031", "N58E125", "N10E073", "N33E135", "N43E042", "N51E032", "N58E126", "N10E075", "N33E136", "N43E043", "N51E033", "N58E127", "N10E076", "N33E138", "N43E044", "N51E034", "N58E128", "N10E077", "N33E139", "N43E045", "N51E035", "N58E129", "N10E078", "N34E060", "N43E046", "N51E036", "N58E130", "N10E079", "N34E061", "N43E047", "N51E037", "N58E131", "N10E092", "N34E062", "N43E050", "N51E038", "N58E132", "N10E097", "N34E063", "N43E051", "N51E039", "N58E133", "N10E098", "N34E064", "N43E052", "N51E040", "N58E134", "N10E099", "N34E065", "N43E053", "N51E041", "N58E135", "N10E102", "N34E066", "N43E054", "N51E042", "N58E136", "N10E103", "N34E067", "N43E055", "N51E043", "N58E137", "N10E104", "N34E068", "N43E056", "N51E044", "N58E138", "N10E105", "N34E069", "N43E057", "N51E045", "N58E139", "N10E106", "N34E070", "N43E058", "N51E046", "N58E140", "N10E107", "N34E071", "N43E059", "N51E047", "N58E141", "N10E108", "N34E072", "N43E060", "N51E048", "N58E142", "N10E114", "N34E073", "N43E061", "N51E049", "N58E150", "N10E115", "N34E074", "N43E062", "N51E050", "N58E151", "N10E118", "N34E075", "N43E063", "N51E051", "N58E152", "N10E119", "N34E076", "N43E064", "N51E052", "N58E157", "N10E120", "N34E077", "N43E065", "N51E053", "N58E158", "N10E121", "N34E078", "N43E066", "N51E054", "N58E159", "N10E122", "N34E079", "N43E067", "N51E055", "N58E160", "N10E123", "N34E080", "N43E068", "N51E056", "N58E161", "N10E124", "N34E081", "N43E069", "N51E057", "N58E162", "N10E125", "N34E082", "N43E070", "N51E058", "N58E163", "N10E126", "N34E083", "N43E071", "N51E059", "N58E164", "N10E139", "N34E084", "N43E072", "N51E060", "N58W003", "N10E165", "N34E085", "N43E073", "N51E061", "N58W004", "N10E166", "N34E086", "N43E074", "N51E062", "N58W005", "N10E168", "N34E087", "N43E075", "N51E063", "N58W006", "N10E169", "N34E088", "N43E076", "N51E064", "N58W007", "N10E170", "N34E089", "N43E077", "N51E065", "N58W008", "N11E072", "N34E090", "N43E078", "N51E066", "N59E004", "N11E073", "N34E091", "N43E079", "N51E067", "N59E005", "N11E075", "N34E092", "N43E080", "N51E068", "N59E006", "N11E076", "N34E093", "N43E081", "N51E069", "N59E007", "N11E077", "N34E094", "N43E082", "N51E070", "N59E008", "N11E078", "N34E095", "N43E083", "N51E071", "N59E009", "N11E079", "N34E096", "N43E084", "N51E072", "N59E010", "N11E092", "N34E097", "N43E085", "N51E073", "N59E011", "N11E093", "N34E098", "N43E086", "N51E074", "N59E012", "N11E097", "N34E099", "N43E087", "N51E075", "N59E013", "N11E098", "N34E100", "N43E088", "N51E076", "N59E014", "N11E099", "N34E101", "N43E089", "N51E077", "N59E015", "N11E102", "N34E102", "N43E090", "N51E078", "N59E016", "N11E103", "N34E103", "N43E091", "N51E079", "N59E017", "N11E104", "N34E104", "N43E092", "N51E080", "N59E018", "N11E105", "N34E105", "N43E093", "N51E081", "N59E019", "N11E106", "N34E106", "N43E094", "N51E082", "N59E020", "N11E107", "N34E107", "N43E095", "N51E083", "N59E021", "N11E108", "N34E108", "N43E096", "N51E084", "N59E022", "N11E109", "N34E109", "N43E097", "N51E085", "N59E023", "N11E114", "N34E110", "N43E098", "N51E086", "N59E024", "N11E115", "N34E111", "N43E099", "N51E087", "N59E025", "N11E119", "N34E112", "N43E100", "N51E088", "N59E026", "N11E120", "N34E113", "N43E101", "N51E089", "N59E027", "N11E121", "N34E114", "N43E102", "N51E090", "N59E028", "N11E122", "N34E115", "N43E103", "N51E091", "N59E029", "N11E123", "N34E116", "N43E104", "N51E092", "N59E030", "N11E124", "N34E117", "N43E105", "N51E093", "N59E031", "N11E125", "N34E118", "N43E106", "N51E094", "N59E032", "N11E162", "N34E119", "N43E107", "N51E095", "N59E033", "N11E165", "N34E120", "N43E108", "N51E096", "N59E034", "N11E166", "N34E125", "N43E109", "N51E097", "N59E035", "N11E167", "N34E126", "N43E110", "N51E098", "N59E036", "N11E169", "N34E127", "N43E111", "N51E099", "N59E037", "N12E074", "N34E128", "N43E112", "N51E100", "N59E038", "N12E075", "N34E129", "N43E113", "N51E101", "N59E039", "N12E076", "N34E130", "N43E114", "N51E102", "N59E040", "N12E077", "N34E131", "N43E115", "N51E103", "N59E041", "N12E078", "N34E132", "N43E116", "N51E104", "N59E042", "N12E079", "N34E133", "N43E117", "N51E105", "N59E043", "N12E080", "N34E134", "N43E118", "N51E106", "N59E044", "N12E092", "N34E135", "N43E119", "N51E107", "N59E045", "N12E093", "N34E136", "N43E120", "N51E108", "N59E046", "N12E097", "N34E137", "N43E121", "N51E109", "N59E047", "N12E098", "N34E138", "N43E122", "N51E110", "N59E048", "N12E099", "N34E139", "N43E123", "N51E111", "N59E049", "N12E100", "N35E000", "N43E124", "N51E112", "N59E050", "N12E101", "N35E001", "N43E125", "N51E113", "N59E051", "N12E102", "N35E002", "N43E126", "N51E114", "N59E052", "N12E103", "N35E003", "N43E127", "N51E115", "N59E053", "N12E104", "N35E004", "N43E128", "N51E116", "N59E054", "N12E105", "N35E005", "N43E129", "N51E117", "N59E055", "N12E106", "N35E006", "N43E130", "N51E118", "N59E056", "N12E107", "N35E007", "N43E131", "N51E119", "N59E057", "N12E108", "N35E008", "N43E132", "N51E120", "N59E058", "N12E109", "N35E009", "N43E133", "N51E121", "N59E059", "N12E119", "N35E010", "N43E134", "N51E122", "N59E060", "N12E120", "N35E011", "N43E135", "N51E123", "N59E061", "N12E121", "N35E012", "N43E140", "N51E124", "N59E062", "N12E122", "N35E014", "N43E141", "N51E125", "N59E063", "N12E123", "N35E023", "N43E142", "N51E126", "N59E064", "N12E124", "N35E024", "N43E143", "N51E127", "N59E065", "N12E125", "N35E025", "N43E144", "N51E128", "N59E066", "N12E170", "N35E026", "N43E145", "N51E129", "N59E067", "N13E074", "N35E027", "N43E146", "N51E130", "N59E068", "N13E075", "N35E032", "N43W001", "N51E131", "N59E069", "N13E076", "N35E033", "N43W002", "N51E132", "N59E070", "N13E077", "N35E034", "N43W003", "N51E133", "N59E071", "N13E078", "N35E035", "N43W004", "N51E134", "N59E072", "N13E079", "N35E036", "N43W005", "N51E135", "N59E073", "N13E080", "N35E037", "N43W006", "N51E136", "N59E074", "N13E092", "N35E038", "N43W007", "N51E137", "N59E075", "N13E093", "N35E039", "N43W008", "N51E138", "N59E076", "N13E094", "N35E040", "N43W009", "N51E139", "N59E077", "N13E097", "N35E041", "N43W010", "N51E140", "N59E078", "N13E098", "N35E042", "N44E000", "N51E141", "N59E079", "N13E099", "N35E043", "N44E001", "N51E142", "N59E080", "N13E100", "N35E044", "N44E002", "N51E143", "N59E081", "N13E101", "N35E045", "N44E003", "N51E156", "N59E082", "N13E102", "N35E046", "N44E004", "N51E157", "N59E083", "N13E103", "N35E047", "N44E005", "N51E158", "N59E084", "N13E104", "N35E048", "N44E006", "N51E177", "N59E085", "N13E105", "N35E049", "N44E007", "N51E178", "N59E086", "N13E106", "N35E050", "N44E008", "N51E179", "N59E087", "N13E107", "N35E051", "N44E009", "N51W001", "N59E088", "N13E108", "N35E052", "N44E010", "N51W002", "N59E089", "N13E109", "N35E053", "N44E011", "N51W003", "N59E090", "N13E120", "N35E054", "N44E012", "N51W004", "N59E091", "N13E121", "N35E055", "N44E013", "N51W005", "N59E092", "N13E122", "N35E056", "N44E014", "N51W006", "N59E093", "N13E123", "N35E057", "N44E015", "N51W008", "N59E094", "N13E124", "N35E058", "N44E016", "N51W009", "N59E095", "N13E144", "N35E059", "N44E017", "N51W010", "N59E096", "N14E074", "N35E060", "N44E018", "N51W011", "N59E097", "N14E075", "N35E061", "N44E019", "N51W176", "N59E098", "N14E076", "N35E062", "N44E020", "N51W177", "N59E099", "N14E077", "N35E063", "N44E021", "N51W178", "N59E100", "N14E078", "N35E064", "N44E022", "N51W179", "N59E101", "N14E079", "N35E065", "N44E023", "N51W180", "N59E102", "N14E080", "N35E066", "N44E024", "N52E000", "N59E103", "N14E093", "N35E067", "N44E025", "N52E001", "N59E104", "N14E097", "N35E068", "N44E026", "N52E004", "N59E105", "N14E098", "N35E069", "N44E027", "N52E005", "N59E106", "N14E099", "N35E070", "N44E028", "N52E006", "N59E107", "N14E100", "N35E071", "N44E029", "N52E007", "N59E108", "N14E101", "N35E072", "N44E033", "N52E008", "N59E109", "N14E102", "N35E073", "N44E034", "N52E009", "N59E110", "N14E103", "N35E074", "N44E035", "N52E010", "N59E111", "N14E104", "N35E075", "N44E037", "N52E011", "N59E112", "N14E105", "N35E076", "N44E038", "N52E012", "N59E113", "N14E106", "N35E077", "N44E039", "N52E013", "N59E114", "N14E107", "N35E078", "N44E040", "N52E014", "N59E115", "N14E108", "N35E079", "N44E041", "N52E015", "N59E116", "N14E109", "N35E080", "N44E042", "N52E016", "N59E117", "N14E120", "N35E081", "N44E043", "N52E017", "N59E118", "N14E121", "N35E082", "N44E044", "N52E018", "N59E119", "N14E122", "N35E083", "N44E045", "N52E019", "N59E120", "N14E123", "N35E084", "N44E046", "N52E020", "N59E121", "N14E124", "N35E085", "N44E047", "N52E021", "N59E122", "N14E145", "N35E086", "N44E050", "N52E022", "N59E123", "N14E168", "N35E087", "N44E051", "N52E023", "N59E124", "N14E169", "N35E088", "N44E052", "N52E024", "N59E125", "N15E073", "N35E089", "N44E053", "N52E025", "N59E126", "N15E074", "N35E090", "N44E054", "N52E026", "N59E127", "N15E075", "N35E091", "N44E055", "N52E027", "N59E128", "N15E076", "N35E092", "N44E056", "N52E028", "N59E129", "N15E077", "N35E093", "N44E057", "N52E029", "N59E130", "N15E078", "N35E094", "N44E058", "N52E030", "N59E131", "N15E079", "N35E095", "N44E059", "N52E031", "N59E132", "N15E080", "N35E096", "N44E060", "N52E032", "N59E133", "N15E081", "N35E097", "N44E061", "N52E033", "N59E134", "N15E094", "N35E098", "N44E062", "N52E034", "N59E135", "N15E095", "N35E099", "N44E063", "N52E035", "N59E136", "N15E097", "N35E100", "N44E064", "N52E036", "N59E137", "N15E098", "N35E101", "N44E065", "N52E037", "N59E138", "N15E099", "N35E102", "N44E066", "N52E038", "N59E139", "N15E100", "N35E103", "N44E067", "N52E039", "N59E140", "N15E101", "N35E104", "N44E068", "N52E040", "N59E141", "N15E102", "N35E105", "N44E069", "N52E041", "N59E142", "N15E103", "N35E106", "N44E070", "N52E042", "N59E143", "N15E104", "N35E107", "N44E071", "N52E043", "N59E144", "N15E105", "N35E108", "N44E072", "N52E044", "N59E145", "N15E106", "N35E109", "N44E073", "N52E045", "N59E146", "N15E107", "N35E110", "N44E074", "N52E046", "N59E147", "N15E108", "N35E111", "N44E075", "N52E047", "N59E148", "N15E109", "N35E112", "N44E076", "N52E048", "N59E149", "N15E111", "N35E113", "N44E077", "N52E049", "N59E150", "N15E119", "N35E114", "N44E078", "N52E050", "N59E151", "N15E120", "N35E115", "N44E079", "N52E051", "N59E152", "N15E121", "N35E116", "N44E080", "N52E052", "N59E153", "N15E122", "N35E117", "N44E081", "N52E053", "N59E154", "N15E145", "N35E118", "N44E082", "N52E054", "N59E155", "N16E073", "N35E119", "N44E083", "N52E055", "N59E159", "N16E074", "N35E120", "N44E084", "N52E056", "N59E160", "N16E075", "N35E125", "N44E085", "N52E057", "N59E161", "N16E076", "N35E126", "N44E086", "N52E058", "N59E162", "N16E077", "N35E127", "N44E087", "N52E059", "N59E163", "N16E078", "N35E128", "N44E088", "N52E060", "N59E164", "N16E079", "N35E129", "N44E089", "N52E061", "N59E165", "N16E080", "N35E132", "N44E090", "N52E062", "N59E166", "N16E081", "N35E133", "N44E091", "N52E063", "N59W002", "N16E082", "N35E134", "N44E092", "N52E064", "N59W003", "N16E094", "N35E135", "N44E093", "N52E065", "N59W004", "N16E095", "N35E136", "N44E094", "N52E066", "N59W005", "N16E096", "N35E137", "N44E095", "N52E067", "N59W006", "N16E097", "N35E138", "N44E096", "N52E068", "N59W007", "N16E098", "N35E139", "N44E097", "N52E069", "N60E004", "N16E099", "N35E140", "N44E098", "N52E070", "N60E005", "N16E100", "N35W001", "N44E099", "N52E071", "N60E006", "N16E101", "N35W002", "N44E100", "N52E072", "N60E007", "N16E102", "N35W003", "N44E101", "N52E073", "N60E008", "N16E103", "N35W004", "N44E102", "N52E074", "N60E009", "N16E104", "N35W005", "N44E103", "N52E075", "N60E010", "N16E105", "N35W006", "N44E104", "N52E076", "N60E011", "N16E106", "N35W007", "N44E105", "N52E077", "N60E012", "N16E107", "N36E000", "N44E106", "N52E078", "N60E013", "N16E108", "N36E001", "N44E107", "N52E079", "N60E014", "N16E111", "N36E002", "N44E108", "N52E080", "N60E015", "N16E112", "N36E003", "N44E109", "N52E081", "N60E016", "N16E119", "N36E004", "N44E110", "N52E082", "N60E017", "N16E120", "N36E005", "N44E111", "N52E083", "N60E018", "N16E121", "N36E006", "N44E112", "N52E084", "N60E019", "N16E122", "N36E007", "N44E113", "N52E085", "N60E020", "N16E145", "N36E008", "N44E114", "N52E086", "N60E021", "N16E146", "N36E009", "N44E115", "N52E087", "N60E022", "N17E073", "N36E010", "N44E116", "N52E088", "N60E023", "N17E074", "N36E011", "N44E117", "N52E089", "N60E024", "N17E075", "N36E012", "N44E118", "N52E090", "N60E025", "N17E076", "N36E014", "N44E119", "N52E091", "N60E026", "N17E077", "N36E015", "N44E120", "N52E092", "N60E027", "N17E078", "N36E021", "N44E121", "N52E093", "N60E028", "N17E079", "N36E022", "N44E122", "N52E094", "N60E029", "N17E080", "N36E023", "N44E123", "N52E095", "N60E030", "N17E081", "N36E024", "N44E124", "N52E096", "N60E031", "N17E082", "N36E025", "N44E125", "N52E097", "N60E032", "N17E083", "N36E026", "N44E126", "N52E098", "N60E033", "N17E094", "N36E027", "N44E127", "N52E099", "N60E034", "N17E095", "N36E028", "N44E128", "N52E100", "N60E035", "N17E096", "N36E029", "N44E129", "N52E101", "N60E036", "N17E097", "N36E030", "N44E130", "N52E102", "N60E037", "N17E098", "N36E031", "N44E131", "N52E103", "N60E038", "N17E099", "N36E032", "N44E132", "N52E104", "N60E039", "N17E100", "N36E033", "N44E133", "N52E105", "N60E040", "N17E101", "N36E034", "N44E134", "N52E106", "N60E041", "N17E102", "N36E035", "N44E135", "N52E107", "N60E042", "N17E103", "N36E036", "N44E136", "N52E108", "N60E043", "N17E104", "N36E037", "N44E141", "N52E109", "N60E044", "N17E105", "N36E038", "N44E142", "N52E110", "N60E045", "N17E106", "N36E039", "N44E143", "N52E111", "N60E046", "N17E107", "N36E040", "N44E144", "N52E112", "N60E047", "N17E120", "N36E041", "N44E145", "N52E113", "N60E048", "N17E121", "N36E042", "N44E146", "N52E114", "N60E049", "N17E122", "N36E043", "N44E147", "N52E115", "N60E050", "N17E145", "N36E044", "N44W001", "N52E116", "N60E051", "N18E072", "N36E045", "N44W002", "N52E117", "N60E052", "N18E073", "N36E046", "N45E000", "N52E118", "N60E053", "N18E074", "N36E047", "N45E001", "N52E119", "N60E054", "N18E075", "N36E048", "N45E002", "N52E120", "N60E055", "N18E076", "N36E049", "N45E003", "N52E121", "N60E056", "N18E077", "N36E050", "N45E004", "N52E122", "N60E057", "N18E078", "N36E051", "N45E005", "N52E123", "N60E058", "N18E079", "N36E052", "N45E006", "N52E124", "N60E059", "N18E080", "N36E053", "N45E007", "N52E125", "N60E060", "N18E081", "N36E054", "N45E008", "N52E126", "N60E061", "N18E082", "N36E055", "N45E009", "N52E127", "N60E062", "N18E083", "N36E056", "N45E010", "N52E128", "N60E063", "N18E084", "N36E057", "N45E011", "N52E129", "N60E064", "N18E093", "N36E058", "N45E012", "N52E130", "N60E065", "N18E094", "N36E059", "N45E013", "N52E131", "N60E066", "N18E095", "N36E060", "N45E014", "N52E132", "N60E067", "N18E096", "N36E061", "N45E015", "N52E133", "N60E068", "N18E097", "N36E062", "N45E016", "N52E134", "N60E069", "N18E098", "N36E063", "N45E017", "N52E135", "N60E070", "N18E099", "N36E064", "N45E018", "N52E136", "N60E071", "N18E100", "N36E065", "N45E019", "N52E137", "N60E072", "N18E101", "N36E066", "N45E020", "N52E138", "N60E073", "N18E102", "N36E067", "N45E021", "N52E139", "N60E074", "N18E103", "N36E068", "N45E022", "N52E140", "N60E075", "N18E104", "N36E069", "N45E023", "N52E141", "N60E076", "N18E105", "N36E070", "N45E024", "N52E142", "N60E077", "N18E106", "N36E071", "N45E025", "N52E143", "N60E078", "N18E108", "N36E072", "N45E026", "N52E156", "N60E079", "N18E109", "N36E073", "N45E027", "N52E157", "N60E080", "N18E110", "N36E074", "N45E028", "N52E158", "N60E081", "N18E120", "N36E075", "N45E029", "N52E172", "N60E082", "N18E121", "N36E076", "N45E030", "N52E173", "N60E083", "N18E122", "N36E077", "N45E032", "N52E174", "N60E084", "N18E145", "N36E078", "N45E033", "N52E175", "N60E085", "N19E072", "N36E079", "N45E034", "N52E177", "N60E086", "N19E073", "N36E080", "N45E035", "N52E178", "N60E087", "N19E074", "N36E081", "N45E036", "N52E179", "N60E088", "N19E075", "N36E082", "N45E037", "N52W001", "N60E089", "N19E076", "N36E083", "N45E038", "N52W002", "N60E090", "N19E077", "N36E084", "N45E039", "N52W003", "N60E091", "N19E078", "N36E085", "N45E040", "N52W004", "N60E092", "N19E079", "N36E086", "N45E041", "N52W005", "N60E093", "N19E080", "N36E087", "N45E042", "N52W006", "N60E094", "N19E081", "N36E088", "N45E043", "N52W007", "N60E095", "N19E082", "N36E089", "N45E044", "N52W008", "N60E096", "N19E083", "N36E090", "N45E045", "N52W009", "N60E097", "N19E084", "N36E091", "N45E046", "N52W010", "N60E098", "N19E085", "N36E092", "N45E047", "N52W011", "N60E099", "N19E086", "N36E093", "N45E048", "N52W171", "N60E100", "N19E092", "N36E094", "N45E049", "N52W172", "N60E101", "N19E093", "N36E095", "N45E050", "N52W173", "N60E102", "N19E094", "N36E096", "N45E051", "N52W174", "N60E103", "N19E095", "N36E097", "N45E052", "N52W175", "N60E104", "N19E096", "N36E098", "N45E053", "N52W176", "N60E105", "N19E097", "N36E099", "N45E054", "N52W177", "N60E106", "N19E098", "N36E100", "N45E055", "N53E000", "N60E107", "N19E099", "N36E101", "N45E056", "N53E004", "N60E108", "N19E100", "N36E102", "N45E057", "N53E005", "N60E109", "N19E101", "N36E103", "N45E058", "N53E006", "N60E110", "N19E102", "N36E104", "N45E059", "N53E007", "N60E111", "N19E103", "N36E105", "N45E060", "N53E008", "N60E112", "N19E104", "N36E106", "N45E061", "N53E009", "N60E113", "N19E105", "N36E107", "N45E062", "N53E010", "N60E114", "N19E106", "N36E108", "N45E063", "N53E011", "N60E115", "N19E108", "N36E109", "N45E064", "N53E012", "N60E116", "N19E109", "N36E110", "N45E065", "N53E013", "N60E117", "N19E110", "N36E111", "N45E066", "N53E014", "N60E118", "N19E111", "N36E112", "N45E067", "N53E015", "N60E119", "N19E121", "N36E113", "N45E068", "N53E016", "N60E120", "N19E122", "N36E114", "N45E069", "N53E017", "N60E121", "N19E145", "N36E115", "N45E070", "N53E018", "N60E122", "N19E166", "N36E116", "N45E071", "N53E019", "N60E123", "N20E070", "N36E117", "N45E072", "N53E020", "N60E124", "N20E071", "N36E118", "N45E073", "N53E021", "N60E125", "N20E072", "N36E119", "N45E074", "N53E022", "N60E126", "N20E073", "N36E120", "N45E075", "N53E023", "N60E127", "N20E074", "N36E121", "N45E076", "N53E024", "N60E128", "N20E075", "N36E122", "N45E077", "N53E025", "N60E129", "N20E076", "N36E125", "N45E078", "N53E026", "N60E130", "N20E077", "N36E126", "N45E079", "N53E027", "N60E131", "N20E078", "N36E127", "N45E080", "N53E028", "N60E132", "N20E079", "N36E128", "N45E081", "N53E029", "N60E133", "N20E080", "N36E129", "N45E082", "N53E030", "N60E134", "N20E081", "N36E132", "N45E083", "N53E031", "N60E135", "N20E082", "N36E133", "N45E084", "N53E032", "N60E136", "N20E083", "N36E135", "N45E085", "N53E033", "N60E137", "N20E084", "N36E136", "N45E086", "N53E034", "N60E138", "N20E085", "N36E137", "N45E087", "N53E035", "N60E139", "N20E086", "N36E138", "N45E088", "N53E036", "N60E140", "N20E087", "N36E139", "N45E089", "N53E037", "N60E141", "N20E092", "N36E140", "N45E090", "N53E038", "N60E142", "N20E093", "N36W002", "N45E091", "N53E039", "N60E143", "N20E094", "N36W003", "N45E092", "N53E040", "N60E144", "N20E095", "N36W004", "N45E093", "N53E041", "N60E145", "N20E096", "N36W005", "N45E094", "N53E042", "N60E146", "N20E097", "N36W006", "N45E095", "N53E043", "N60E147", "N20E098", "N36W007", "N45E096", "N53E044", "N60E148", "N20E099", "N36W008", "N45E097", "N53E045", "N60E149", "N20E100", "N36W009", "N45E098", "N53E046", "N60E150", "N20E101", "N37E006", "N45E099", "N53E047", "N60E151", "N20E102", "N37E007", "N45E100", "N53E048", "N60E152", "N20E103", "N37E008", "N45E101", "N53E049", "N60E153", "N20E104", "N37E009", "N45E102", "N53E050", "N60E154", "N20E105", "N37E010", "N45E103", "N53E051", "N60E155", "N20E106", "N37E011", "N45E104", "N53E052", "N60E156", "N20E107", "N37E012", "N45E105", "N53E053", "N60E159", "N20E109", "N37E013", "N45E106", "N53E054", "N60E160", "N20E110", "N37E014", "N45E107", "N53E055", "N60E161", "N20E116", "N37E015", "N45E108", "N53E056", "N60E162", "N20E121", "N37E016", "N45E109", "N53E057", "N60E163", "N20E122", "N37E020", "N45E110", "N53E058", "N60E164", "N20E136", "N37E021", "N45E111", "N53E059", "N60E165", "N20E144", "N37E022", "N45E112", "N53E060", "N60E166", "N20E145", "N37E023", "N45E113", "N53E061", "N60E167", "N21E069", "N37E024", "N45E114", "N53E062", "N60E168", "N21E070", "N37E025", "N45E115", "N53E063", "N60E169", "N21E071", "N37E026", "N45E116", "N53E064", "N60E170", "N21E072", "N37E027", "N45E117", "N53E065", "N60E171", "N21E073", "N37E028", "N45E118", "N53E066", "N60E172", "N21E074", "N37E029", "N45E119", "N53E067", "N60W001", "N21E075", "N37E030", "N45E120", "N53E068", "N60W002", "N21E076", "N37E031", "N45E121", "N53E069", "N60W003", "N21E077", "N37E032", "N45E122", "N53E070", "N60W173", "N21E078", "N37E033", "N45E123", "N53E071", "N60W174", "N21E079", "N37E034", "N45E124", "N53E072", "S01E073", "N21E080", "N37E035", "N45E125", "N53E073", "S01E098", "N21E081", "N37E036", "N45E126", "N53E074", "S01E099", "N21E082", "N37E037", "N45E127", "N53E075", "S01E100", "N21E083", "N37E038", "N45E128", "N53E076", "S01E101", "N21E084", "N37E039", "N45E129", "N53E077", "S01E102", "N21E085", "N37E040", "N45E130", "N53E078", "S01E103", "N21E086", "N37E041", "N45E131", "N53E079", "S01E104", "N21E087", "N37E042", "N45E132", "N53E080", "S01E105", "N21E088", "N37E043", "N45E133", "N53E081", "S01E109", "N21E089", "N37E044", "N45E134", "N53E082", "S01E110", "N21E090", "N37E045", "N45E135", "N53E083", "S01E111", "N21E091", "N37E046", "N45E136", "N53E084", "S01E112", "N21E092", "N37E047", "N45E137", "N53E085", "S01E113", "N21E093", "N37E048", "N45E140", "N53E086", "S01E114", "N21E094", "N37E049", "N45E141", "N53E087", "S01E115", "N21E095", "N37E050", "N45E142", "N53E088", "S01E116", "N21E096", "N37E053", "N45E147", "N53E089", "S01E117", "N21E097", "N37E054", "N45E148", "N53E090", "S01E119", "N21E098", "N37E055", "N45E149", "N53E091", "S01E120", "N21E099", "N37E056", "N45E150", "N53E092", "S01E121", "N21E100", "N37E057", "N45W001", "N53E093", "S01E122", "N21E101", "N37E058", "N45W002", "N53E094", "S01E123", "N21E102", "N37E059", "N46E000", "N53E095", "S01E127", "N21E103", "N37E060", "N46E001", "N53E096", "S01E128", "N21E104", "N37E061", "N46E002", "N53E097", "S01E129", "N21E105", "N37E062", "N46E003", "N53E098", "S01E130", "N21E106", "N37E063", "N46E004", "N53E099", "S01E131", "N21E107", "N37E064", "N46E005", "N53E100", "S01E132", "N21E108", "N37E065", "N46E006", "N53E101", "S01E133", "N21E109", "N37E066", "N46E007", "N53E102", "S01E134", "N21E110", "N37E067", "N46E008", "N53E103", "S01E135", "N21E111", "N37E068", "N46E009", "N53E104", "S01E136", "N21E112", "N37E069", "N46E010", "N53E105", "S01E145", "N21E113", "N37E070", "N46E011", "N53E106", "S01E166", "N21E114", "N37E071", "N46E012", "N53E107", "S01E169", "N21E120", "N37E072", "N46E013", "N53E108", "S01E174", "N21E121", "N37E073", "N46E014", "N53E109", "S01W161", "N22E068", "N37E074", "N46E015", "N53E110", "S02E098", "N22E069", "N37E075", "N46E016", "N53E111", "S02E099", "N22E070", "N37E076", "N46E017", "N53E112", "S02E100", "N22E071", "N37E077", "N46E018", "N53E113", "S02E101", "N22E072", "N37E078", "N46E019", "N53E114", "S02E102", "N22E073", "N37E079", "N46E020", "N53E115", "S02E103", "N22E074", "N37E080", "N46E021", "N53E116", "S02E104", "N22E075", "N37E081", "N46E022", "N53E117", "S02E105", "N22E076", "N37E082", "N46E023", "N53E118", "S02E106", "N22E077", "N37E083", "N46E024", "N53E119", "S02E108", "N22E078", "N37E084", "N46E025", "N53E120", "S02E109", "N22E079", "N37E085", "N46E026", "N53E121", "S02E110", "N22E080", "N37E086", "N46E027", "N53E122", "S02E111", "N22E081", "N37E087", "N46E028", "N53E123", "S02E112", "N22E082", "N37E088", "N46E029", "N53E124", "S02E113", "N22E083", "N37E089", "N46E030", "N53E125", "S02E114", "N22E084", "N37E090", "N46E031", "N53E126", "S02E115", "N22E085", "N37E091", "N46E032", "N53E127", "S02E116", "N22E086", "N37E092", "N46E033", "N53E128", "S02E117", "N22E087", "N37E093", "N46E034", "N53E129", "S02E119", "N22E088", "N37E094", "N46E035", "N53E130", "S02E120", "N22E089", "N37E095", "N46E036", "N53E131", "S02E121", "N22E090", "N37E096", "N46E037", "N53E132", "S02E122", "N22E091", "N37E097", "N46E038", "N53E133", "S02E123", "N22E092", "N37E098", "N46E039", "N53E134", "S02E124", "N22E093", "N37E099", "N46E040", "N53E135", "S02E125", "N22E094", "N37E100", "N46E041", "N53E136", "S02E126", "N22E095", "N37E101", "N46E042", "N53E137", "S02E127", "N22E096", "N37E102", "N46E043", "N53E138", "S02E128", "N22E097", "N37E103", "N46E044", "N53E139", "S02E129", "N22E098", "N37E104", "N46E045", "N53E140", "S02E130", "N22E099", "N37E105", "N46E046", "N53E141", "S02E131", "N22E100", "N37E106", "N46E047", "N53E142", "S02E132", "N22E101", "N37E107", "N46E048", "N53E143", "S02E133", "N22E102", "N37E108", "N46E049", "N53E155", "S02E134", "N22E103", "N37E109", "N46E050", "N53E156", "S02E135", "N22E104", "N37E110", "N46E051", "N53E157", "S02E136", "N22E105", "N37E111", "N46E052", "N53E158", "S02E137", "N22E106", "N37E112", "N46E053", "N53E159", "S02E138", "N22E107", "N37E113", "N46E054", "N53E160", "S02E139", "N22E108", "N37E114", "N46E055", "N53E172", "S02E142", "N22E109", "N37E115", "N46E056", "N53W001", "S02E143", "N22E110", "N37E116", "N46E057", "N53W002", "S02E144", "N22E111", "N37E117", "N46E058", "N53W003", "S02E145", "N22E112", "N37E118", "N46E059", "N53W004", "S02E146", "N22E113", "N37E119", "N46E060", "N53W005", "S02E147", "N22E114", "N37E120", "N46E061", "N53W006", "S02E148", "N22E115", "N37E121", "N46E062", "N53W007", "S02E149", "N22E116", "N37E122", "N46E063", "N53W008", "S02E150", "N22E120", "N37E124", "N46E064", "N53W009", "S02E174", "N22E121", "N37E125", "N46E065", "N53W010", "S02E175", "N23E067", "N37E126", "N46E066", "N53W011", "S02E176", "N23E068", "N37E127", "N46E067", "N54E007", "S03E099", "N23E069", "N37E128", "N46E068", "N54E008", "S03E100", "N23E070", "N37E129", "N46E069", "N54E009", "S03E101", "N23E071", "N37E130", "N46E070", "N54E010", "S03E102", "N23E072", "N37E131", "N46E071", "N54E011", "S03E103", "N23E073", "N37E136", "N46E072", "N54E012", "S03E104", "N23E074", "N37E137", "N46E073", "N54E013", "S03E105", "N23E075", "N37E138", "N46E074", "N54E014", "S03E106", "N23E076", "N37E139", "N46E075", "N54E015", "S03E107", "N23E077", "N37E140", "N46E076", "N54E016", "S03E108", "N23E078", "N37E141", "N46E077", "N54E017", "S03E110", "N23E079", "N37W001", "N46E078", "N54E018", "S03E111", "N23E080", "N37W002", "N46E079", "N54E019", "S03E112", "N23E081", "N37W003", "N46E080", "N54E020", "S03E113", "N23E082", "N37W004", "N46E081", "N54E021", "S03E114", "N23E083", "N37W005", "N46E082", "N54E022", "S03E115", "N23E084", "N37W006", "N46E083", "N54E023", "S03E116", "N23E085", "N37W007", "N46E084", "N54E024", "S03E117", "N23E086", "N37W008", "N46E085", "N54E025", "S03E118", "N23E087", "N37W009", "N46E086", "N54E026", "S03E119", "N23E088", "N38E000", "N46E087", "N54E027", "S03E120", "N23E089", "N38E001", "N46E088", "N54E028", "S03E121", "N23E090", "N38E008", "N46E089", "N54E029", "S03E122", "N23E091", "N38E009", "N46E090", "N54E030", "S03E123", "N23E092", "N38E012", "N46E091", "N54E031", "S03E124", "N23E093", "N38E013", "N46E092", "N54E032", "S03E125", "N23E094", "N38E014", "N46E093", "N54E033", "S03E126", "N23E095", "N38E015", "N46E094", "N54E034", "S03E127", "N23E096", "N38E016", "N46E095", "N54E035", "S03E128", "N23E097", "N38E017", "N46E096", "N54E036", "S03E129", "N23E098", "N38E020", "N46E097", "N54E037", "S03E130", "N23E099", "N38E021", "N46E098", "N54E038", "S03E131", "N23E100", "N38E022", "N46E099", "N54E039", "S03E132", "N23E101", "N38E023", "N46E100", "N54E040", "S03E133", "N23E102", "N38E024", "N46E101", "N54E041", "S03E134", "N23E103", "N38E025", "N46E102", "N54E042", "S03E135", "N23E104", "N38E026", "N46E103", "N54E043", "S03E136", "N23E105", "N38E027", "N46E104", "N54E044", "S03E137", "N23E106", "N38E028", "N46E105", "N54E045", "S03E138", "N23E107", "N38E029", "N46E106", "N54E046", "S03E139", "N23E108", "N38E030", "N46E107", "N54E047", "S03E140", "N23E109", "N38E031", "N46E108", "N54E048", "S03E141", "N23E110", "N38E032", "N46E109", "N54E049", "S03E142", "N23E111", "N38E033", "N46E110", "N54E050", "S03E145", "N23E112", "N38E034", "N46E111", "N54E051", "S03E146", "N23E113", "N38E035", "N46E112", "N54E052", "S03E147", "N23E114", "N38E036", "N46E113", "N54E053", "S03E148", "N23E115", "N38E037", "N46E114", "N54E054", "S03E149", "N23E116", "N38E038", "N46E115", "N54E055", "S03E150", "N23E117", "N38E039", "N46E116", "N54E056", "S03E151", "N23E119", "N38E040", "N46E117", "N54E057", "S03E152", "N23E120", "N38E041", "N46E118", "N54E058", "S03E175", "N23E121", "N38E042", "N46E119", "N54E059", "S03E176", "N24E066", "N38E043", "N46E120", "N54E060", "S03W172", "N24E067", "N38E044", "N46E121", "N54E061", "S04E100", "N24E068", "N38E045", "N46E122", "N54E062", "S04E101", "N24E069", "N38E046", "N46E123", "N54E063", "S04E102", "N24E070", "N38E047", "N46E124", "N54E064", "S04E103", "N24E071", "N38E048", "N46E125", "N54E065", "S04E104", "N24E072", "N38E049", "N46E126", "N54E066", "S04E105", "N24E073", "N38E053", "N46E127", "N54E067", "S04E106", "N24E074", "N38E054", "N46E128", "N54E068", "S04E107", "N24E075", "N38E055", "N46E129", "N54E069", "S04E108", "N24E076", "N38E056", "N46E130", "N54E070", "S04E110", "N24E077", "N38E057", "N46E131", "N54E071", "S04E111", "N24E078", "N38E058", "N46E132", "N54E072", "S04E112", "N24E079", "N38E059", "N46E133", "N54E073", "S04E113", "N24E080", "N38E060", "N46E134", "N54E074", "S04E114", "N24E081", "N38E061", "N46E135", "N54E075", "S04E115", "N24E082", "N38E062", "N46E136", "N54E076", "S04E116", "N24E083", "N38E063", "N46E137", "N54E077", "S04E117", "N24E084", "N38E064", "N46E138", "N54E078", "S04E118", "N24E085", "N38E065", "N46E141", "N54E079", "S04E119", "N24E086", "N38E066", "N46E142", "N54E080", "S04E120", "N24E087", "N38E067", "N46E143", "N54E081", "S04E121", "N24E088", "N38E068", "N46E149", "N54E082", "S04E122", "N24E089", "N38E069", "N46E150", "N54E083", "S04E123", "N24E090", "N38E070", "N46E151", "N54E084", "S04E125", "N24E091", "N38E071", "N46E152", "N54E085", "S04E126", "N24E092", "N38E072", "N46W001", "N54E086", "S04E127", "N24E093", "N38E073", "N46W002", "N54E087", "S04E128", "N24E094", "N38E074", "N46W003", "N54E088", "S04E129", "N24E095", "N38E075", "N47E000", "N54E089", "S04E130", "N24E096", "N38E076", "N47E001", "N54E090", "S04E131", "N24E097", "N38E077", "N47E002", "N54E091", "S04E132", "N24E098", "N38E078", "N47E003", "N54E092", "S04E133", "N24E099", "N38E079", "N47E004", "N54E093", "S04E134", "N24E100", "N38E080", "N47E005", "N54E094", "S04E135", "N24E101", "N38E081", "N47E006", "N54E095", "S04E136", "N24E102", "N38E082", "N47E007", "N54E096", "S04E137", "N24E103", "N38E083", "N47E008", "N54E097", "S04E138", "N24E104", "N38E084", "N47E009", "N54E098", "S04E139", "N24E105", "N38E085", "N47E010", "N54E099", "S04E140", "N24E106", "N38E086", "N47E011", "N54E100", "S04E141", "N24E107", "N38E087", "N47E012", "N54E101", "S04E142", "N24E108", "N38E088", "N47E013", "N54E102", "S04E143", "N24E109", "N38E089", "N47E014", "N54E103", "S04E144", "N24E110", "N38E090", "N47E015", "N54E104", "S04E150", "N24E111", "N38E091", "N47E016", "N54E105", "S04E151", "N24E112", "N38E092", "N47E017", "N54E106", "S04E152", "N24E113", "N38E093", "N47E018", "N54E107", "S04E153", "N24E114", "N38E094", "N47E019", "N54E108", "S04E154", "N24E115", "N38E095", "N47E020", "N54E109", "S04W155", "N24E116", "N38E096", "N47E021", "N54E110", "S04W171", "N24E117", "N38E097", "N47E022", "N54E111", "S04W172", "N24E118", "N38E098", "N47E023", "N54E112", "S04W175", "N24E119", "N38E099", "N47E024", "N54E113", "S05E101", "N24E120", "N38E100", "N47E025", "N54E114", "S05E102", "N24E121", "N38E101", "N47E026", "N54E115", "S05E103", "N24E122", "N38E102", "N47E027", "N54E116", "S05E104", "N24E123", "N38E103", "N47E028", "N54E117", "S05E105", "N24E124", "N38E104", "N47E029", "N54E118", "S05E114", "N24E125", "N38E105", "N47E030", "N54E119", "S05E115", "N24E131", "N38E106", "N47E031", "N54E120", "S05E116", "N24E141", "N38E107", "N47E032", "N54E121", "S05E119", "N24E153", "N38E108", "N47E033", "N54E122", "S05E120", "N25E060", "N38E109", "N47E034", "N54E123", "S05E121", "N25E061", "N38E110", "N47E035", "N54E124", "S05E122", "N25E062", "N38E111", "N47E036", "N54E125", "S05E123", "N25E063", "N38E112", "N47E037", "N54E126", "S05E129", "N25E064", "N38E113", "N47E038", "N54E127", "S05E130", "N25E065", "N38E114", "N47E039", "N54E128", "S05E131", "N25E066", "N38E115", "N47E040", "N54E129", "S05E132", "N25E067", "N38E116", "N47E041", "N54E130", "S05E133", "N25E068", "N38E117", "N47E042", "N54E131", "S05E134", "N25E069", "N38E118", "N47E043", "N54E132", "S05E135", "N25E070", "N38E120", "N47E044", "N54E133", "S05E136", "N25E071", "N38E121", "N47E045", "N54E134", "S05E137", "N25E072", "N38E124", "N47E046", "N54E135", "S05E138", "N25E073", "N38E125", "N47E047", "N54E136", "S05E139", "N25E074", "N38E126", "N47E048", "N54E137", "S05E140", "N25E075", "N38E127", "N47E049", "N54E138", "S05E141", "N25E076", "N38E128", "N47E050", "N54E139", "S05E142", "N25E077", "N38E138", "N47E051", "N54E140", "S05E143", "N25E078", "N38E139", "N47E052", "N54E142", "S05E144", "N25E079", "N38E140", "N47E053", "N54E155", "S05E145", "N25E080", "N38E141", "N47E054", "N54E156", "S05E146", "N25E081", "N38W001", "N47E055", "N54E157", "S05E149", "N25E082", "N38W002", "N47E056", "N54E158", "S05E150", "N25E083", "N38W003", "N47E057", "N54E159", "S05E151", "N25E084", "N38W004", "N47E058", "N54E160", "S05E152", "N25E085", "N38W005", "N47E059", "N54E161", "S05E153", "N25E086", "N38W006", "N47E060", "N54E162", "S05E154", "N25E087", "N38W007", "N47E061", "N54E166", "S05E155", "N25E088", "N38W008", "N47E062", "N54E167", "S05E156", "N25E089", "N38W009", "N47E063", "N54E168", "S05E157", "N25E090", "N38W010", "N47E064", "N54W001", "S05E159", "N25E091", "N39E000", "N47E065", "N54W002", "S05W155", "N25E092", "N39E001", "N47E066", "N54W003", "S05W172", "N25E093", "N39E002", "N47E067", "N54W004", "S05W173", "N25E094", "N39E003", "N47E068", "N54W005", "S05W175", "N25E095", "N39E004", "N47E069", "N54W006", "S06E071", "N25E096", "N39E008", "N47E070", "N54W007", "S06E072", "N25E097", "N39E009", "N47E071", "N54W008", "S06E102", "N25E098", "N39E015", "N47E072", "N54W009", "S06E103", "N25E099", "N39E016", "N47E073", "N54W010", "S06E104", "N25E100", "N39E017", "N47E074", "N54W011", "S06E105", "N25E101", "N39E018", "N47E075", "N55E008", "S06E106", "N25E102", "N39E019", "N47E076", "N55E009", "S06E107", "N25E103", "N39E020", "N47E077", "N55E010", "S06E108", "N25E104", "N39E021", "N47E078", "N55E011", "S06E110", "N25E105", "N39E022", "N47E079", "N55E012", "S06E112", "N25E106", "N39E023", "N47E080", "N55E013", "S06E114", "N25E107", "N39E024", "N47E081", "N55E014", "S06E117", "N25E108", "N39E025", "N47E082", "N55E015", "S06E118", "N25E109", "N39E026", "N47E083", "N55E020", "S06E119", "N25E110", "N39E027", "N47E084", "N55E021", "S06E120", "N25E111", "N39E028", "N47E085", "N55E022", "S06E121", "N25E112", "N39E029", "N47E086", "N55E023", "S06E122", "N25E113", "N39E030", "N47E087", "N55E024", "S06E123", "N25E114", "N39E031", "N47E088", "N55E025", "S06E124", "N25E115", "N39E032", "N47E089", "N55E026", "S06E127", "N25E116", "N39E033", "N47E090", "N55E027", "S06E130", "N25E117", "N39E034", "N47E091", "N55E028", "S06E131", "N25E118", "N39E035", "N47E092", "N55E029", "S06E132", "N25E119", "N39E036", "N47E093", "N55E030", "S06E133", "N25E121", "N39E037", "N47E094", "N55E031", "S06E134", "N25E122", "N39E038", "N47E095", "N55E032", "S06E137", "N25E123", "N39E039", "N47E096", "N55E033", "S06E138", "N25E124", "N39E040", "N47E097", "N55E034", "S06E139", "N25E131", "N39E041", "N47E098", "N55E035", "S06E140", "N25E141", "N39E042", "N47E099", "N55E036", "S06E141", "N26E060", "N39E043", "N47E100", "N55E037", "S06E142", "N26E061", "N39E044", "N47E101", "N55E038", "S06E143", "N26E062", "N39E045", "N47E102", "N55E039", "S06E144", "N26E063", "N39E046", "N47E103", "N55E040", "S06E145", "N26E064", "N39E047", "N47E104", "N55E041", "S06E146", "N26E065", "N39E048", "N47E105", "N55E042", "S06E147", "N26E066", "N39E049", "N47E106", "N55E043", "S06E148", "N26E067", "N39E052", "N47E107", "N55E044", "S06E149", "N26E068", "N39E053", "N47E108", "N55E045", "S06E150", "N26E069", "N39E054", "N47E109", "N55E046", "S06E151", "N26E070", "N39E055", "N47E110", "N55E047", "S06E152", "N26E071", "N39E056", "N47E111", "N55E048", "S06E154", "N26E072", "N39E057", "N47E112", "N55E049", "S06E155", "N26E073", "N39E058", "N47E113", "N55E050", "S06E159", "N26E074", "N39E059", "N47E114", "N55E051", "S06E176", "N26E075", "N39E060", "N47E115", "N55E052", "S06W156", "N26E076", "N39E061", "N47E116", "N55E053", "S07E071", "N26E077", "N39E062", "N47E117", "N55E054", "S07E105", "N26E078", "N39E063", "N47E118", "N55E055", "S07E106", "N26E079", "N39E064", "N47E119", "N55E056", "S07E107", "N26E080", "N39E065", "N47E120", "N55E057", "S07E108", "N26E081", "N39E066", "N47E121", "N55E058", "S07E109", "N26E082", "N39E067", "N47E122", "N55E059", "S07E110", "N26E083", "N39E068", "N47E123", "N55E060", "S07E111", "N26E084", "N39E069", "N47E124", "N55E061", "S07E112", "N26E085", "N39E070", "N47E125", "N55E062", "S07E113", "N26E086", "N39E071", "N47E126", "N55E063", "S07E114", "N26E087", "N39E072", "N47E127", "N55E064", "S07E115", "N26E088", "N39E073", "N47E128", "N55E065", "S07E116", "N26E089", "N39E074", "N47E129", "N55E066", "S07E118", "N26E090", "N39E075", "N47E130", "N55E067", "S07E119", "N26E091", "N39E076", "N47E131", "N55E068", "S07E120", "N26E092", "N39E077", "N47E132", "N55E069", "S07E121", "N26E093", "N39E078", "N47E133", "N55E070", "S07E122", "N26E094", "N39E079", "N47E134", "N55E071", "S07E124", "N26E095", "N39E080", "N47E135", "N55E072", "S07E126", "N26E096", "N39E081", "N47E136", "N55E073", "S07E129", "N26E097", "N39E082", "N47E137", "N55E074", "S07E130", "N26E098", "N39E083", "N47E138", "N55E075", "S07E131", "N26E099", "N39E084", "N47E139", "N55E076", "S07E132", "N26E100", "N39E085", "N47E141", "N55E077", "S07E134", "N26E101", "N39E086", "N47E142", "N55E078", "S07E138", "N26E102", "N39E087", "N47E143", "N55E079", "S07E139", "N26E103", "N39E088", "N47E152", "N55E080", "S07E140", "N26E104", "N39E089", "N47E153", "N55E081", "S07E141", "N26E105", "N39E090", "N47W001", "N55E082", "S07E142", "N26E106", "N39E091", "N47W002", "N55E083", "S07E143", "N26E107", "N39E092", "N47W003", "N55E084", "S07E144", "N26E108", "N39E093", "N47W004", "N55E085", "S07E145", "N26E109", "N39E094", "N47W005", "N55E086", "S07E146", "N26E110", "N39E095", "N48E000", "N55E087", "S07E147", "N26E111", "N39E096", "N48E001", "N55E088", "S07E148", "N26E112", "N39E097", "N48E002", "N55E089", "S07E149", "N26E113", "N39E098", "N48E003", "N55E090", "S07E150", "N26E114", "N39E099", "N48E004", "N55E091", "S07E151", "N26E115", "N39E100", "N48E005", "N55E092", "S07E154", "N26E116", "N39E101", "N48E006", "N55E093", "S07E155", "N26E117", "N39E102", "N48E007", "N55E094", "S07E156", "N26E118", "N39E103", "N48E008", "N55E095", "S07E157", "N26E119", "N39E104", "N48E009", "N55E096", "S07E176", "N26E120", "N39E105", "N48E010", "N55E097", "S07E177", "N26E126", "N39E106", "N48E011", "N55E098", "S08E072", "N26E127", "N39E107", "N48E012", "N55E099", "S08E105", "N26E128", "N39E108", "N48E013", "N55E100", "S08E106", "N26E142", "N39E109", "N48E014", "N55E101", "S08E107", "N27E060", "N39E110", "N48E015", "N55E102", "S08E108", "N27E061", "N39E111", "N48E016", "N55E103", "S08E109", "N27E062", "N39E112", "N48E017", "N55E104", "S08E110", "N27E063", "N39E113", "N48E018", "N55E105", "S08E111", "N27E064", "N39E114", "N48E019", "N55E106", "S08E112", "N27E065", "N39E115", "N48E020", "N55E107", "S08E113", "N27E066", "N39E116", "N48E021", "N55E108", "S08E114", "N27E067", "N39E117", "N48E022", "N55E109", "S08E115", "N27E068", "N39E118", "N48E023", "N55E110", "S08E117", "N27E069", "N39E119", "N48E024", "N55E111", "S08E118", "N27E070", "N39E121", "N48E025", "N55E112", "S08E120", "N27E071", "N39E122", "N48E026", "N55E113", "S08E121", "N27E072", "N39E123", "N48E027", "N55E114", "S08E122", "N27E073", "N39E124", "N48E028", "N55E115", "S08E123", "N27E074", "N39E125", "N48E029", "N55E116", "S08E125", "N27E075", "N39E126", "N48E030", "N55E117", "S08E126", "N27E076", "N39E127", "N48E031", "N55E118", "S08E127", "N27E077", "N39E128", "N48E032", "N55E119", "S08E128", "N27E078", "N39E139", "N48E033", "N55E120", "S08E129", "N27E079", "N39E140", "N48E034", "N55E121", "S08E130", "N27E080", "N39E141", "N48E035", "N55E122", "S08E131", "N27E081", "N39E142", "N48E036", "N55E123", "S08E134", "N27E082", "N39W001", "N48E037", "N55E124", "S08E137", "N27E083", "N39W002", "N48E038", "N55E125", "S08E138", "N27E084", "N39W003", "N48E039", "N55E126", "S08E139", "N27E085", "N39W004", "N48E040", "N55E127", "S08E140", "N27E086", "N39W005", "N48E041", "N55E128", "S08E141", "N27E087", "N39W006", "N48E042", "N55E129", "S08E142", "N27E088", "N39W007", "N48E043", "N55E130", "S08E143", "N27E089", "N39W008", "N48E044", "N55E131", "S08E144", "N27E090", "N39W009", "N48E045", "N55E132", "S08E145", "N27E091", "N39W010", "N48E046", "N55E133", "S08E146", "N27E092", "N40E000", "N48E047", "N55E134", "S08E147", "N27E093", "N40E003", "N48E048", "N55E135", "S08E155", "N27E094", "N40E004", "N48E049", "N55E136", "S08E156", "N27E095", "N40E008", "N48E050", "N55E137", "S08E157", "N27E096", "N40E009", "N48E051", "N55E138", "S08E158", "N27E097", "N40E012", "N48E052", "N55E155", "S08E159", "N27E098", "N40E013", "N48E053", "N55E156", "S08E160", "N27E099", "N40E014", "N48E054", "N55E157", "S08E177", "N27E100", "N40E015", "N48E055", "N55E158", "S08E178", "N27E101", "N40E016", "N48E056", "N55E159", "S08W141", "N27E102", "N40E017", "N48E057", "N55E160", "S09E110", "N27E103", "N40E018", "N48E058", "N55E161", "S09E111", "N27E104", "N40E019", "N48E059", "N55E162", "S09E112", "N27E105", "N40E020", "N48E060", "N55E165", "S09E113", "N27E106", "N40E021", "N48E061", "N55E166", "S09E114", "N27E107", "N40E022", "N48E062", "N55W002", "S09E115", "N27E108", "N40E023", "N48E063", "N55W003", "S09E116", "N27E109", "N40E024", "N48E064", "N55W004", "S09E117", "N27E110", "N40E025", "N48E065", "N55W005", "S09E118", "N27E111", "N40E026", "N48E066", "N55W006", "S09E119", "N27E112", "N40E027", "N48E067", "N55W007", "S09E120", "N27E113", "N40E028", "N48E068", "N55W008", "S09E121", "N27E114", "N40E029", "N48E069", "N55W009", "S09E122", "N27E115", "N40E030", "N48E070", "N56E008", "S09E123", "N27E116", "N40E031", "N48E071", "N56E009", "S09E124", "N27E117", "N40E032", "N48E072", "N56E010", "S09E125", "N27E118", "N40E033", "N48E073", "N56E011", "S09E126", "N27E119", "N40E034", "N48E074", "N56E012", "S09E127", "N27E120", "N40E035", "N48E075", "N56E013", "S09E128", "N27E121", "N40E036", "N48E076", "N56E014", "S09E129", "N27E127", "N40E037", "N48E077", "N56E015", "S09E130", "N27E128", "N40E038", "N48E078", "N56E016", "S09E131", "N27E129", "N40E039", "N48E079", "N56E018", "S09E137", "N27E140", "N40E040", "N48E080", "N56E020", "S09E138", "N27E142", "N40E041", "N48E081", "N56E021", "S09E139", "N28E060", "N40E042", "N48E082", "N56E022", "S09E140", "N28E061", "N40E043", "N48E083", "N56E023", "S09E141", "N28E062", "N40E044", "N48E084", "N56E024", "S09E142", "N28E063", "N40E045", "N48E085", "N56E025", "S09E143", "N28E064", "N40E046", "N48E086", "N56E026", "S09E145", "N28E065", "N40E047", "N48E087", "N56E027", "S09E146", "N28E066", "N40E048", "N48E088", "N56E028", "S09E147", "N28E067", "N40E049", "N48E089", "N56E029", "S09E148", "N28E068", "N40E050", "N48E090", "N56E030", "S09E149", "N28E069", "N40E052", "N48E091", "N56E031", "S09E150", "N28E070", "N40E053", "N48E092", "N56E032", "S09E151", "N28E071", "N40E054", "N48E093", "N56E033", "S09E152", "N28E072", "N40E055", "N48E094", "N56E034", "S09E156", "N28E073", "N40E056", "N48E095", "N56E035", "S09E157", "N28E074", "N40E057", "N48E096", "N56E036", "S09E158", "N28E075", "N40E058", "N48E097", "N56E037", "S09E159", "N28E076", "N40E059", "N48E098", "N56E038", "S09E160", "N28E077", "N40E060", "N48E099", "N56E039", "S09E161", "N28E078", "N40E061", "N48E100", "N56E040", "S09E178", "N28E079", "N40E062", "N48E101", "N56E041", "S09E179", "N28E080", "N40E063", "N48E102", "N56E042", "S09W140", "N28E081", "N40E064", "N48E103", "N56E043", "S09W141", "N28E082", "N40E065", "N48E104", "N56E044", "S09W158", "N28E083", "N40E066", "N48E105", "N56E045", "S09W159", "N28E084", "N40E067", "N48E106", "N56E046", "S09W173", "N28E085", "N40E068", "N48E107", "N56E047", "S10E116", "N28E086", "N40E069", "N48E108", "N56E048", "S10E117", "N28E087", "N40E070", "N48E109", "N56E049", "S10E118", "N28E088", "N40E071", "N48E110", "N56E050", "S10E119", "N28E089", "N40E072", "N48E111", "N56E051", "S10E120", "N28E090", "N40E073", "N48E112", "N56E052", "S10E123", "N28E091", "N40E074", "N48E113", "N56E053", "S10E124", "N28E092", "N40E075", "N48E114", "N56E054", "S10E125", "N28E093", "N40E076", "N48E115", "N56E055", "S10E126", "N28E094", "N40E077", "N48E116", "N56E056", "S10E140", "N28E095", "N40E078", "N48E117", "N56E057", "S10E141", "N28E096", "N40E079", "N48E118", "N56E058", "S10E142", "N28E097", "N40E080", "N48E119", "N56E059", "S10E143", "N28E098", "N40E081", "N48E120", "N56E060", "S10E144", "N28E099", "N40E082", "N48E121", "N56E061", "S10E146", "N28E100", "N40E083", "N48E122", "N56E062", "S10E147", "N28E101", "N40E084", "N48E123", "N56E063", "S10E148", "N28E102", "N40E085", "N48E124", "N56E064", "S10E149", "N28E103", "N40E086", "N48E125", "N56E065", "S10E150", "N28E104", "N40E087", "N48E126", "N56E066", "S10E151", "N28E105", "N40E088", "N48E127", "N56E067", "S10E152", "N28E106", "N40E089", "N48E128", "N56E068", "S10E153", "N28E107", "N40E090", "N48E129", "N56E069", "S10E158", "N28E108", "N40E091", "N48E130", "N56E070", "S10E159", "N28E109", "N40E092", "N48E131", "N56E071", "S10E160", "N28E110", "N40E093", "N48E132", "N56E072", "S10E161", "N28E111", "N40E094", "N48E133", "N56E073", "S10E167", "N28E112", "N40E095", "N48E134", "N56E074", "S10E179", "N28E113", "N40E096", "N48E135", "N56E075", "S10W139", "N28E114", "N40E097", "N48E136", "N56E076", "S10W140", "N28E115", "N40E098", "N48E137", "N56E077", "S10W141", "N28E116", "N40E099", "N48E138", "N56E078", "S10W151", "N28E117", "N40E100", "N48E139", "N56E079", "S10W158", "N28E118", "N40E101", "N48E140", "N56E080", "S10W159", "N28E119", "N40E102", "N48E141", "N56E081", "S10W162", "N28E120", "N40E103", "N48E142", "N56E082", "S10W172", "N28E121", "N40E104", "N48E144", "N56E083", "S11E105", "N28E122", "N40E105", "N48E153", "N56E084", "S12E096", "N28E128", "N40E106", "N48E154", "N56E085", "S13E096", "N28E129", "N40E107", "N48W001", "N56E086", "N28E130", "N40E108", "N48W002", "N56E087", "N29E060", "N40E109", "N48W003", "N56E088", (char *)0, "Islands", "N16W170", "S21W030", "S40E174", "S44W176", "S49E068", "N18W156", "S29E167", "S40E175", "S44W177", "S49E069", "N19W155", "S30E167", "S40E176", "S45E167", "S49E166", "N19W156", "S30W178", "S40E177", "S45E168", "S50E068", "N19W157", "S31W179", "S40E178", "S45E169", "S50E069", "N20W156", "S32W179", "S41E172", "S45E170", "S50E070", "N20W157", "S35E172", "S41E173", "S45E171", "S50E178", "N20W158", "S35E173", "S41E174", "S45W176", "S51E068", "N21W157", "S36E173", "S41E175", "S45W177", "S51E165", "N21W158", "S36E174", "S41E176", "S46E050", "S51E166", "N21W159", "S36E175", "S41W010", "S46E166", "S53E073", "N21W160", "S37E173", "S41W011", "S46E167", "S53E168", "N21W161", "S37E174", "S42E171", "S46E168", "S53E169", "N22W160", "S37E175", "S42E172", "S46E169", "S54E072", "N22W161", "S37E176", "S42E173", "S46E170", "S54E073", "N23W162", "S38E077", "S42E174", "S46E171", "S54W038", "N23W165", "S38E174", "S42E175", "S47E037", "S54W039", "N23W167", "S38E175", "S42E176", "S47E038", "S55E003", "N24W168", "S38E176", "S43E170", "S47E050", "S55E158", "N25W168", "S38E177", "S43E171", "S47E051", "S55W036", "N25W172", "S38E178", "S43E172", "S47E052", "S55W037", "N26W174", "S38W013", "S43E173", "S47E166", "S55W038", "N27W176", "S39E077", "S43E174", "S47E167", "S55W039", "N28W178", "S39E174", "S44E168", "S47E168", "S56E158", "N28W179", "S39E175", "S44E169", "S47E169", "S56W035", "S08W015", "S39E176", "S44E170", "S47E170", "S16W006", "S39E177", "S44E171", "S48E167", "S17W006", "S39E178", "S44E172", "S48E168", "S21W029", "S40E173", "S44E173", "S48E179", (char *)0, "North_America", "N10W110", "N32W095", "N42W086", "N49W093", "N55W084", "N15W062", "N32W096", "N42W087", "N49W094", "N55W085", "N15W064", "N32W097", "N42W088", "N49W095", "N55W086", "N15W079", "N32W098", "N42W089", "N49W096", "N55W087", "N15W080", "N32W099", "N42W090", "N49W097", "N55W088", "N15W083", "N32W100", "N42W091", "N49W098", "N55W089", "N15W084", "N32W101", "N42W092", "N49W099", "N55W090", "N15W085", "N32W102", "N42W093", "N49W100", "N55W091", "N15W086", "N32W103", "N42W094", "N49W101", "N55W092", "N15W087", "N32W104", "N42W095", "N49W102", "N55W093", "N15W088", "N32W105", "N42W096", "N49W103", "N55W094", "N15W089", "N32W106", "N42W097", "N49W104", "N55W095", "N15W090", "N32W107", "N42W098", "N49W105", "N55W096", "N15W091", "N32W108", "N42W099", "N49W106", "N55W097", "N15W092", "N32W109", "N42W100", "N49W107", "N55W098", "N15W093", "N32W110", "N42W101", "N49W108", "N55W099", "N15W094", "N32W111", "N42W102", "N49W109", "N55W100", "N15W096", "N32W112", "N42W103", "N49W110", "N55W101", "N15W097", "N32W113", "N42W104", "N49W111", "N55W102", "N15W098", "N32W114", "N42W105", "N49W112", "N55W103", "N16W062", "N32W115", "N42W106", "N49W113", "N55W104", "N16W063", "N32W116", "N42W107", "N49W114", "N55W105", "N16W086", "N32W117", "N42W108", "N49W115", "N55W106", "N16W087", "N32W118", "N42W109", "N49W116", "N55W107", "N16W088", "N32W119", "N42W110", "N49W117", "N55W108", "N16W089", "N33W078", "N42W111", "N49W118", "N55W109", "N16W090", "N33W079", "N42W112", "N49W119", "N55W110", "N16W091", "N33W080", "N42W113", "N49W120", "N55W111", "N16W092", "N33W081", "N42W114", "N49W121", "N55W112", "N16W093", "N33W082", "N42W115", "N49W122", "N55W113", "N16W094", "N33W083", "N42W116", "N49W123", "N55W114", "N16W095", "N33W084", "N42W117", "N49W124", "N55W115", "N16W096", "N33W085", "N42W118", "N49W125", "N55W116", "N16W097", "N33W086", "N42W119", "N49W126", "N55W117", "N16W098", "N33W087", "N42W120", "N49W127", "N55W118", "N16W099", "N33W088", "N42W121", "N49W128", "N55W119", "N16W100", "N33W089", "N42W122", "N50W056", "N55W120", "N16W101", "N33W090", "N42W123", "N50W057", "N55W121", "N17W062", "N33W091", "N42W124", "N50W058", "N55W122", "N17W063", "N33W092", "N42W125", "N50W059", "N55W123", "N17W064", "N33W093", "N43W060", "N50W060", "N55W124", "N17W065", "N33W094", "N43W061", "N50W061", "N55W125", "N17W066", "N33W095", "N43W065", "N50W062", "N55W126", "N17W067", "N33W096", "N43W066", "N50W063", "N55W127", "N17W068", "N33W097", "N43W067", "N50W064", "N55W128", "N17W072", "N33W098", "N43W069", "N50W065", "N55W129", "N17W076", "N33W099", "N43W070", "N50W066", "N55W130", "N17W077", "N33W100", "N43W071", "N50W067", "N55W131", "N17W078", "N33W101", "N43W072", "N50W068", "N55W132", "N17W084", "N33W102", "N43W073", "N50W069", "N55W133", "N17W088", "N33W103", "N43W074", "N50W070", "N55W134", "N17W089", "N33W104", "N43W075", "N50W071", "N55W135", "N17W090", "N33W105", "N43W076", "N50W072", "N55W156", "N17W091", "N33W106", "N43W077", "N50W073", "N55W157", "N17W092", "N33W107", "N43W078", "N50W074", "N55W159", "N17W093", "N33W108", "N43W079", "N50W075", "N55W160", "N17W094", "N33W109", "N43W080", "N50W076", "N55W161", "N17W095", "N33W110", "N43W081", "N50W077", "N55W162", "N17W096", "N33W111", "N43W082", "N50W078", "N55W163", "N17W097", "N33W112", "N43W083", "N50W079", "N55W164", "N17W098", "N33W113", "N43W084", "N50W080", "N56W061", "N17W099", "N33W114", "N43W085", "N50W081", "N56W062", "N17W100", "N33W115", "N43W086", "N50W082", "N56W063", "N17W101", "N33W116", "N43W087", "N50W083", "N56W064", "N17W102", "N33W117", "N43W088", "N50W084", "N56W065", "N17W103", "N33W118", "N43W089", "N50W085", "N56W066", "N18W063", "N33W119", "N43W090", "N50W086", "N56W067", "N18W064", "N33W120", "N43W091", "N50W087", "N56W068", "N18W065", "N33W121", "N43W092", "N50W088", "N56W069", "N18W066", "N34W077", "N43W093", "N50W089", "N56W070", "N18W067", "N34W078", "N43W094", "N50W090", "N56W071", "N18W068", "N34W079", "N43W095", "N50W091", "N56W072", "N18W069", "N34W080", "N43W096", "N50W092", "N56W073", "N18W070", "N34W081", "N43W097", "N50W093", "N56W074", "N18W071", "N34W082", "N43W098", "N50W094", "N56W075", "N18W072", "N34W083", "N43W099", "N50W095", "N56W076", "N18W073", "N34W084", "N43W100", "N50W096", "N56W077", "N18W074", "N34W085", "N43W101", "N50W097", "N56W078", "N18W075", "N34W086", "N43W102", "N50W098", "N56W079", "N18W076", "N34W087", "N43W103", "N50W099", "N56W080", "N18W077", "N34W088", "N43W104", "N50W100", "N56W081", "N18W078", "N34W089", "N43W105", "N50W101", "N56W088", "N18W079", "N34W090", "N43W106", "N50W102", "N56W089", "N18W088", "N34W091", "N43W107", "N50W103", "N56W090", "N18W089", "N34W092", "N43W108", "N50W104", "N56W091", "N18W090", "N34W093", "N43W109", "N50W105", "N56W092", "N18W091", "N34W094", "N43W110", "N50W106", "N56W093", "N18W092", "N34W095", "N43W111", "N50W107", "N56W094", "N18W093", "N34W096", "N43W112", "N50W108", "N56W095", "N18W094", "N34W097", "N43W113", "N50W109", "N56W096", "N18W095", "N34W098", "N43W114", "N50W110", "N56W097", "N18W096", "N34W099", "N43W115", "N50W111", "N56W098", "N18W097", "N34W100", "N43W116", "N50W112", "N56W099", "N18W098", "N34W101", "N43W117", "N50W113", "N56W100", "N18W099", "N34W102", "N43W118", "N50W114", "N56W101", "N18W100", "N34W103", "N43W119", "N50W115", "N56W102", "N18W101", "N34W104", "N43W120", "N50W116", "N56W103", "N18W102", "N34W105", "N43W121", "N50W117", "N56W104", "N18W103", "N34W106", "N43W122", "N50W118", "N56W105", "N18W104", "N34W107", "N43W123", "N50W119", "N56W106", "N18W105", "N34W108", "N43W124", "N50W120", "N56W107", "N18W111", "N34W109", "N43W125", "N50W121", "N56W108", "N18W112", "N34W110", "N44W060", "N50W122", "N56W109", "N18W115", "N34W111", "N44W062", "N50W123", "N56W110", "N19W069", "N34W112", "N44W063", "N50W124", "N56W111", "N19W070", "N34W113", "N44W064", "N50W125", "N56W112", "N19W071", "N34W114", "N44W065", "N50W126", "N56W113", "N19W072", "N34W115", "N44W066", "N50W127", "N56W114", "N19W073", "N34W116", "N44W067", "N50W128", "N56W115", "N19W074", "N34W117", "N44W068", "N50W129", "N56W116", "N19W075", "N34W118", "N44W069", "N50W130", "N56W117", "N19W076", "N34W119", "N44W070", "N51E177", "N56W118", "N19W077", "N34W120", "N44W071", "N51E178", "N56W119", "N19W078", "N34W121", "N44W072", "N51E179", "N56W120", "N19W080", "N35W076", "N44W073", "N51W056", "N56W121", "N19W081", "N35W077", "N44W074", "N51W057", "N56W122", "N19W082", "N35W078", "N44W075", "N51W058", "N56W123", "N19W088", "N35W079", "N44W076", "N51W059", "N56W124", "N19W089", "N35W080", "N44W077", "N51W060", "N56W125", "N19W090", "N35W081", "N44W078", "N51W061", "N56W126", "N19W091", "N35W082", "N44W079", "N51W062", "N56W127", "N19W092", "N35W083", "N44W080", "N51W063", "N56W128", "N19W096", "N35W084", "N44W081", "N51W064", "N56W129", "N19W097", "N35W085", "N44W082", "N51W065", "N56W130", "N19W098", "N35W086", "N44W083", "N51W066", "N56W131", "N19W099", "N35W087", "N44W084", "N51W067", "N56W132", "N19W100", "N35W088", "N44W085", "N51W068", "N56W133", "N19W101", "N35W089", "N44W086", "N51W069", "N56W134", "N19W102", "N35W090", "N44W087", "N51W070", "N56W135", "N19W103", "N35W091", "N44W088", "N51W071", "N56W136", "N19W104", "N35W092", "N44W089", "N51W072", "N56W154", "N19W105", "N35W093", "N44W090", "N51W073", "N56W155", "N19W106", "N35W094", "N44W091", "N51W074", "N56W157", "N19W111", "N35W095", "N44W092", "N51W075", "N56W158", "N20W073", "N35W096", "N44W093", "N51W076", "N56W159", "N20W074", "N35W097", "N44W094", "N51W077", "N56W160", "N20W075", "N35W098", "N44W095", "N51W078", "N56W161", "N20W076", "N35W099", "N44W096", "N51W079", "N56W162", "N20W077", "N35W100", "N44W097", "N51W080", "N56W170", "N20W078", "N35W101", "N44W098", "N51W081", "N57W062", "N20W079", "N35W102", "N44W099", "N51W082", "N57W063", "N20W080", "N35W103", "N44W100", "N51W083", "N57W064", "N20W087", "N35W104", "N44W101", "N51W084", "N57W065", "N20W088", "N35W105", "N44W102", "N51W085", "N57W066", "N20W089", "N35W106", "N44W103", "N51W086", "N57W067", "N20W090", "N35W107", "N44W104", "N51W087", "N57W068", "N20W091", "N35W108", "N44W105", "N51W088", "N57W069", "N20W092", "N35W109", "N44W106", "N51W089", "N57W070", "N20W093", "N35W110", "N44W107", "N51W090", "N57W071", "N20W097", "N35W111", "N44W108", "N51W091", "N57W072", "N20W098", "N35W112", "N44W109", "N51W092", "N57W073", "N20W099", "N35W113", "N44W110", "N51W093", "N57W074", "N20W100", "N35W114", "N44W111", "N51W094", "N57W075", "N20W101", "N35W115", "N44W112", "N51W095", "N57W076", "N20W102", "N35W116", "N44W113", "N51W096", "N57W077", "N20W103", "N35W117", "N44W114", "N51W097", "N57W078", "N20W104", "N35W118", "N44W115", "N51W098", "N57W079", "N20W105", "N35W119", "N44W116", "N51W099", "N57W080", "N20W106", "N35W120", "N44W117", "N51W100", "N57W090", "N21W072", "N35W121", "N44W118", "N51W101", "N57W091", "N21W073", "N35W122", "N44W119", "N51W102", "N57W092", "N21W074", "N36W076", "N44W120", "N51W103", "N57W093", "N21W076", "N36W077", "N44W121", "N51W104", "N57W094", "N21W077", "N36W078", "N44W122", "N51W105", "N57W095", "N21W078", "N36W079", "N44W123", "N51W106", "N57W096", "N21W079", "N36W080", "N44W124", "N51W107", "N57W097", "N21W080", "N36W081", "N44W125", "N51W108", "N57W098", "N21W081", "N36W082", "N45W060", "N51W109", "N57W099", "N21W082", "N36W083", "N45W061", "N51W110", "N57W100", "N21W083", "N36W084", "N45W062", "N51W111", "N57W101", "N21W084", "N36W085", "N45W063", "N51W112", "N57W102", "N21W085", "N36W086", "N45W064", "N51W113", "N57W103", "N21W087", "N36W087", "N45W065", "N51W114", "N57W104", "N21W088", "N36W088", "N45W066", "N51W115", "N57W105", "N21W089", "N36W089", "N45W067", "N51W116", "N57W106", "N21W090", "N36W090", "N45W068", "N51W117", "N57W107", "N21W091", "N36W091", "N45W069", "N51W118", "N57W108", "N21W098", "N36W092", "N45W070", "N51W119", "N57W109", "N21W099", "N36W093", "N45W071", "N51W120", "N57W110", "N21W100", "N36W094", "N45W072", "N51W121", "N57W111", "N21W101", "N36W095", "N45W073", "N51W122", "N57W112", "N21W102", "N36W096", "N45W074", "N51W123", "N57W113", "N21W103", "N36W097", "N45W075", "N51W124", "N57W114", "N21W104", "N36W098", "N45W076", "N51W125", "N57W115", "N21W105", "N36W099", "N45W077", "N51W126", "N57W116", "N21W106", "N36W100", "N45W078", "N51W127", "N57W117", "N21W107", "N36W101", "N45W079", "N51W128", "N57W118", "N22W073", "N36W102", "N45W080", "N51W129", "N57W119", "N22W074", "N36W103", "N45W081", "N51W131", "N57W120", "N22W075", "N36W104", "N45W082", "N51W132", "N57W121", "N22W076", "N36W105", "N45W083", "N51W176", "N57W122", "N22W078", "N36W106", "N45W084", "N51W177", "N57W123", "N22W079", "N36W107", "N45W085", "N51W178", "N57W124", "N22W080", "N36W108", "N45W086", "N51W179", "N57W125", "N22W081", "N36W109", "N45W087", "N51W180", "N57W126", "N22W082", "N36W110", "N45W088", "N52E172", "N57W127", "N22W083", "N36W111", "N45W089", "N52E173", "N57W128", "N22W084", "N36W112", "N45W090", "N52E174", "N57W129", "N22W085", "N36W113", "N45W091", "N52E175", "N57W130", "N22W090", "N36W114", "N45W092", "N52E177", "N57W131", "N22W092", "N36W115", "N45W093", "N52E178", "N57W132", "N22W098", "N36W116", "N45W094", "N52E179", "N57W133", "N22W099", "N36W117", "N45W095", "N52W056", "N57W134", "N22W100", "N36W118", "N45W096", "N52W057", "N57W135", "N22W101", "N36W119", "N45W097", "N52W058", "N57W136", "N22W102", "N36W120", "N45W098", "N52W059", "N57W137", "N22W103", "N36W121", "N45W099", "N52W060", "N57W153", "N22W104", "N36W122", "N45W100", "N52W061", "N57W154", "N22W105", "N36W123", "N45W101", "N52W062", "N57W155", "N22W106", "N37W076", "N45W102", "N52W063", "N57W156", "N22W107", "N37W077", "N45W103", "N52W064", "N57W157", "N22W110", "N37W078", "N45W104", "N52W065", "N57W158", "N22W111", "N37W079", "N45W105", "N52W066", "N57W159", "N23W074", "N37W080", "N45W106", "N52W067", "N57W170", "N23W075", "N37W081", "N45W107", "N52W068", "N57W171", "N23W076", "N37W082", "N45W108", "N52W069", "N58W063", "N23W077", "N37W083", "N45W109", "N52W070", "N58W064", "N23W078", "N37W084", "N45W110", "N52W071", "N58W065", "N23W080", "N37W085", "N45W111", "N52W072", "N58W066", "N23W081", "N37W086", "N45W112", "N52W073", "N58W067", "N23W082", "N37W087", "N45W113", "N52W074", "N58W068", "N23W083", "N37W088", "N45W114", "N52W075", "N58W069", "N23W084", "N37W089", "N45W115", "N52W076", "N58W070", "N23W098", "N37W090", "N45W116", "N52W077", "N58W071", "N23W099", "N37W091", "N45W117", "N52W078", "N58W072", "N23W100", "N37W092", "N45W118", "N52W079", "N58W073", "N23W101", "N37W093", "N45W119", "N52W080", "N58W074", "N23W102", "N37W094", "N45W120", "N52W081", "N58W075", "N23W103", "N37W095", "N45W121", "N52W082", "N58W076", "N23W104", "N37W096", "N45W122", "N52W083", "N58W077", "N23W105", "N37W097", "N45W123", "N52W084", "N58W078", "N23W106", "N37W098", "N45W124", "N52W085", "N58W079", "N23W107", "N37W099", "N45W125", "N52W086", "N58W080", "N23W108", "N37W100", "N46W053", "N52W087", "N58W081", "N23W110", "N37W101", "N46W054", "N52W088", "N58W093", "N23W111", "N37W102", "N46W055", "N52W089", "N58W094", "N24W075", "N37W103", "N46W056", "N52W090", "N58W095", "N24W076", "N37W104", "N46W057", "N52W091", "N58W096", "N24W077", "N37W105", "N46W060", "N52W092", "N58W097", "N24W078", "N37W106", "N46W061", "N52W093", "N58W098", "N24W079", "N37W107", "N46W062", "N52W094", "N58W099", "N24W080", "N37W108", "N46W063", "N52W095", "N58W100", "N24W081", "N37W109", "N46W064", "N52W096", "N58W101", "N24W082", "N37W110", "N46W065", "N52W097", "N58W102", "N24W083", "N37W111", "N46W066", "N52W098", "N58W103", "N24W098", "N37W112", "N46W067", "N52W099", "N58W104", "N24W099", "N37W113", "N46W068", "N52W100", "N58W105", "N24W100", "N37W114", "N46W069", "N52W101", "N58W106", "N24W101", "N37W115", "N46W070", "N52W102", "N58W107", "N24W102", "N37W116", "N46W071", "N52W103", "N58W108", "N24W103", "N37W117", "N46W072", "N52W104", "N58W109", "N24W104", "N37W118", "N46W073", "N52W105", "N58W110", "N24W105", "N37W119", "N46W074", "N52W106", "N58W111", "N24W106", "N37W120", "N46W075", "N52W107", "N58W112", "N24W107", "N37W121", "N46W076", "N52W108", "N58W113", "N24W108", "N37W122", "N46W077", "N52W109", "N58W114", "N24W109", "N37W123", "N46W078", "N52W110", "N58W115", "N24W110", "N37W124", "N46W079", "N52W111", "N58W116", "N24W111", "N38W075", "N46W080", "N52W112", "N58W117", "N24W112", "N38W076", "N46W081", "N52W113", "N58W118", "N24W113", "N38W077", "N46W082", "N52W114", "N58W119", "N24W116", "N38W078", "N46W083", "N52W115", "N58W120", "N25W077", "N38W079", "N46W084", "N52W116", "N58W121", "N25W078", "N38W080", "N46W085", "N52W117", "N58W122", "N25W079", "N38W081", "N46W086", "N52W118", "N58W123", "N25W080", "N38W082", "N46W087", "N52W119", "N58W124", "N25W081", "N38W083", "N46W088", "N52W120", "N58W125", "N25W082", "N38W084", "N46W089", "N52W121", "N58W126", "N25W098", "N38W085", "N46W090", "N52W122", "N58W127", "N25W099", "N38W086", "N46W091", "N52W123", "N58W128", "N25W100", "N38W087", "N46W092", "N52W124", "N58W129", "N25W101", "N38W088", "N46W093", "N52W125", "N58W130", "N25W102", "N38W089", "N46W094", "N52W126", "N58W131", "N25W103", "N38W090", "N46W095", "N52W127", "N58W132", "N25W104", "N38W091", "N46W096", "N52W128", "N58W133", "N25W105", "N38W092", "N46W097", "N52W129", "N58W134", "N25W106", "N38W093", "N46W098", "N52W130", "N58W135", "N25W107", "N38W094", "N46W099", "N52W131", "N58W136", "N25W108", "N38W095", "N46W100", "N52W132", "N58W137", "N25W109", "N38W096", "N46W101", "N52W133", "N58W138", "N25W110", "N38W097", "N46W102", "N52W169", "N58W139", "N25W111", "N38W098", "N46W103", "N52W170", "N58W152", "N25W112", "N38W099", "N46W104", "N52W171", "N58W153", "N25W113", "N38W100", "N46W105", "N52W172", "N58W154", "N26W077", "N38W101", "N46W106", "N52W173", "N58W155", "N26W078", "N38W102", "N46W107", "N52W174", "N58W156", "N26W079", "N38W103", "N46W108", "N52W175", "N58W157", "N26W080", "N38W104", "N46W109", "N52W176", "N58W158", "N26W081", "N38W105", "N46W110", "N52W177", "N58W159", "N26W082", "N38W106", "N46W111", "N53E172", "N58W160", "N26W083", "N38W107", "N46W112", "N53W056", "N58W161", "N26W098", "N38W108", "N46W113", "N53W057", "N58W162", "N26W099", "N38W109", "N46W114", "N53W058", "N58W163", "N26W100", "N38W110", "N46W115", "N53W059", "N59W044", "N26W101", "N38W111", "N46W116", "N53W060", "N59W045", "N26W102", "N38W112", "N46W117", "N53W061", "N59W046", "N26W103", "N38W113", "N46W118", "N53W062", "N59W064", "N26W104", "N38W114", "N46W119", "N53W063", "N59W065", "N26W105", "N38W115", "N46W120", "N53W064", "N59W066", "N26W106", "N38W116", "N46W121", "N53W065", "N59W067", "N26W107", "N38W117", "N46W122", "N53W066", "N59W069", "N26W108", "N38W118", "N46W123", "N53W067", "N59W070", "N26W109", "N38W119", "N46W124", "N53W068", "N59W071", "N26W110", "N38W120", "N46W125", "N53W069", "N59W072", "N26W112", "N38W121", "N47W053", "N53W070", "N59W073", "N26W113", "N38W122", "N47W054", "N53W071", "N59W074", "N26W114", "N38W123", "N47W055", "N53W072", "N59W075", "N26W115", "N38W124", "N47W056", "N53W073", "N59W076", "N27W078", "N39W075", "N47W057", "N53W074", "N59W077", "N27W079", "N39W076", "N47W058", "N53W075", "N59W078", "N27W081", "N39W077", "N47W059", "N53W076", "N59W079", "N27W082", "N39W078", "N47W060", "N53W077", "N59W080", "N27W083", "N39W079", "N47W061", "N53W078", "N59W081", "N27W097", "N39W080", "N47W062", "N53W079", "N59W095", "N27W098", "N39W081", "N47W063", "N53W080", "N59W096", "N27W099", "N39W082", "N47W064", "N53W081", "N59W097", "N27W100", "N39W083", "N47W065", "N53W082", "N59W098", "N27W101", "N39W084", "N47W066", "N53W083", "N59W099", "N27W102", "N39W085", "N47W067", "N53W084", "N59W100", "N27W103", "N39W086", "N47W068", "N53W085", "N59W101", "N27W104", "N39W087", "N47W069", "N53W086", "N59W102", "N27W105", "N39W088", "N47W070", "N53W087", "N59W103", "N27W106", "N39W089", "N47W071", "N53W088", "N59W104", "N27W107", "N39W090", "N47W072", "N53W089", "N59W105", "N27W108", "N39W091", "N47W073", "N53W090", "N59W106", "N27W109", "N39W092", "N47W074", "N53W091", "N59W107", "N27W110", "N39W093", "N47W075", "N53W092", "N59W108", "N27W111", "N39W094", "N47W076", "N53W093", "N59W109", "N27W112", "N39W095", "N47W077", "N53W094", "N59W110", "N27W113", "N39W096", "N47W078", "N53W095", "N59W111", "N27W114", "N39W097", "N47W079", "N53W096", "N59W112", "N27W115", "N39W098", "N47W080", "N53W097", "N59W113", "N27W116", "N39W099", "N47W081", "N53W098", "N59W114", "N28W081", "N39W100", "N47W082", "N53W099", "N59W115", "N28W082", "N39W101", "N47W083", "N53W100", "N59W116", "N28W083", "N39W102", "N47W084", "N53W101", "N59W117", "N28W090", "N39W103", "N47W085", "N53W102", "N59W118", "N28W096", "N39W104", "N47W086", "N53W103", "N59W119", "N28W097", "N39W105", "N47W088", "N53W104", "N59W120", "N28W098", "N39W106", "N47W089", "N53W105", "N59W121", "N28W099", "N39W107", "N47W090", "N53W106", "N59W122", "N28W100", "N39W108", "N47W091", "N53W107", "N59W123", "N28W101", "N39W109", "N47W092", "N53W108", "N59W124", "N28W102", "N39W110", "N47W093", "N53W109", "N59W125", "N28W103", "N39W111", "N47W094", "N53W110", "N59W126", "N28W104", "N39W112", "N47W095", "N53W111", "N59W127", "N28W105", "N39W113", "N47W096", "N53W112", "N59W128", "N28W106", "N39W114", "N47W097", "N53W113", "N59W129", "N28W107", "N39W115", "N47W098", "N53W114", "N59W130", "N28W108", "N39W116", "N47W099", "N53W115", "N59W131", "N28W109", "N39W117", "N47W100", "N53W116", "N59W132", "N28W110", "N39W118", "N47W101", "N53W117", "N59W133", "N28W111", "N39W119", "N47W102", "N53W118", "N59W134", "N28W112", "N39W120", "N47W103", "N53W119", "N59W135", "N28W113", "N39W121", "N47W104", "N53W120", "N59W136", "N28W114", "N39W122", "N47W105", "N53W121", "N59W137", "N28W115", "N39W123", "N47W106", "N53W122", "N59W138", "N28W116", "N39W124", "N47W107", "N53W123", "N59W139", "N28W119", "N39W125", "N47W108", "N53W124", "N59W140", "N29W081", "N40W073", "N47W109", "N53W125", "N59W141", "N29W082", "N40W074", "N47W110", "N53W126", "N59W142", "N29W083", "N40W075", "N47W111", "N53W127", "N59W144", "N29W084", "N40W076", "N47W112", "N53W128", "N59W145", "N29W085", "N40W077", "N47W113", "N53W129", "N59W147", "N29W086", "N40W078", "N47W114", "N53W130", "N59W148", "N29W089", "N40W079", "N47W115", "N53W131", "N59W149", "N29W090", "N40W080", "N47W116", "N53W132", "N59W150", "N29W091", "N40W081", "N47W117", "N53W133", "N59W151", "N29W092", "N40W082", "N47W118", "N53W134", "N59W152", "N29W093", "N40W083", "N47W119", "N53W167", "N59W153", "N29W094", "N40W084", "N47W120", "N53W168", "N59W154", "N29W095", "N40W085", "N47W121", "N53W169", "N59W155", "N29W096", "N40W086", "N47W122", "N53W170", "N59W156", "N29W097", "N40W087", "N47W123", "N54W057", "N59W157", "N29W098", "N40W088", "N47W124", "N54W058", "N59W158", "N29W099", "N40W089", "N47W125", "N54W059", "N59W159", "N29W100", "N40W090", "N48W053", "N54W060", "N59W160", "N29W101", "N40W091", "N48W054", "N54W061", "N59W161", "N29W102", "N40W092", "N48W055", "N54W062", "N59W162", "N29W103", "N40W093", "N48W056", "N54W063", "N59W163", "N29W104", "N40W094", "N48W057", "N54W064", "N59W164", "N29W105", "N40W095", "N48W058", "N54W065", "N59W165", "N29W106", "N40W096", "N48W059", "N54W066", "N60W043", "N29W107", "N40W097", "N48W060", "N54W067", "N60W044", "N29W108", "N40W098", "N48W065", "N54W068", "N60W045", "N29W109", "N40W099", "N48W066", "N54W069", "N60W046", "N29W110", "N40W100", "N48W067", "N54W070", "N60W047", "N29W111", "N40W101", "N48W068", "N54W071", "N60W048", "N29W112", "N40W102", "N48W069", "N54W072", "N60W049", "N29W113", "N40W103", "N48W070", "N54W073", "N60W064", "N29W114", "N40W104", "N48W071", "N54W074", "N60W065", "N29W115", "N40W105", "N48W072", "N54W075", "N60W066", "N29W116", "N40W106", "N48W073", "N54W076", "N60W068", "N29W119", "N40W107", "N48W074", "N54W077", "N60W069", "N30W082", "N40W108", "N48W075", "N54W078", "N60W070", "N30W083", "N40W109", "N48W076", "N54W079", "N60W071", "N30W084", "N40W110", "N48W077", "N54W080", "N60W072", "N30W085", "N40W111", "N48W078", "N54W081", "N60W073", "N30W086", "N40W112", "N48W079", "N54W082", "N60W074", "N30W087", "N40W113", "N48W080", "N54W083", "N60W075", "N30W088", "N40W114", "N48W081", "N54W084", "N60W076", "N30W089", "N40W115", "N48W082", "N54W085", "N60W077", "N30W090", "N40W116", "N48W083", "N54W086", "N60W078", "N30W091", "N40W117", "N48W084", "N54W087", "N60W079", "N30W092", "N40W118", "N48W085", "N54W088", "N60W095", "N30W093", "N40W119", "N48W086", "N54W089", "N60W096", "N30W094", "N40W120", "N48W087", "N54W090", "N60W097", "N30W095", "N40W121", "N48W088", "N54W091", "N60W098", "N30W096", "N40W122", "N48W089", "N54W092", "N60W099", "N30W097", "N40W123", "N48W090", "N54W093", "N60W100", "N30W098", "N40W124", "N48W091", "N54W094", "N60W101", "N30W099", "N40W125", "N48W092", "N54W095", "N60W102", "N30W100", "N41W070", "N48W093", "N54W096", "N60W103", "N30W101", "N41W071", "N48W094", "N54W097", "N60W104", "N30W102", "N41W072", "N48W095", "N54W098", "N60W105", "N30W103", "N41W073", "N48W096", "N54W099", "N60W106", "N30W104", "N41W074", "N48W097", "N54W100", "N60W107", "N30W105", "N41W075", "N48W098", "N54W101", "N60W108", "N30W106", "N41W076", "N48W099", "N54W102", "N60W109", "N30W107", "N41W077", "N48W100", "N54W103", "N60W110", "N30W108", "N41W078", "N48W101", "N54W104", "N60W111", "N30W109", "N41W079", "N48W102", "N54W105", "N60W112", "N30W110", "N41W080", "N48W103", "N54W106", "N60W113", "N30W111", "N41W081", "N48W104", "N54W107", "N60W114", "N30W112", "N41W082", "N48W105", "N54W108", "N60W115", "N30W113", "N41W083", "N48W106", "N54W109", "N60W116", "N30W114", "N41W084", "N48W107", "N54W110", "N60W117", "N30W115", "N41W085", "N48W108", "N54W111", "N60W118", "N30W116", "N41W086", "N48W109", "N54W112", "N60W119", "N30W117", "N41W087", "N48W110", "N54W113", "N60W120", "N31W081", "N41W088", "N48W111", "N54W114", "N60W121", "N31W082", "N41W089", "N48W112", "N54W115", "N60W122", "N31W083", "N41W090", "N48W113", "N54W116", "N60W123", "N31W084", "N41W091", "N48W114", "N54W117", "N60W124", "N31W085", "N41W092", "N48W115", "N54W118", "N60W125", "N31W086", "N41W093", "N48W116", "N54W119", "N60W126", "N31W087", "N41W094", "N48W117", "N54W120", "N60W127", "N31W088", "N41W095", "N48W118", "N54W121", "N60W128", "N31W089", "N41W096", "N48W119", "N54W122", "N60W129", "N31W090", "N41W097", "N48W120", "N54W123", "N60W130", "N31W091", "N41W098", "N48W121", "N54W124", "N60W131", "N31W092", "N41W099", "N48W122", "N54W125", "N60W132", "N31W093", "N41W100", "N48W123", "N54W126", "N60W133", "N31W094", "N41W101", "N48W124", "N54W127", "N60W134", "N31W095", "N41W102", "N48W125", "N54W128", "N60W135", "N31W096", "N41W103", "N48W126", "N54W129", "N60W136", "N31W097", "N41W104", "N49W054", "N54W130", "N60W137", "N31W098", "N41W105", "N49W055", "N54W131", "N60W138", "N31W099", "N41W106", "N49W056", "N54W132", "N60W139", "N31W100", "N41W107", "N49W057", "N54W133", "N60W140", "N31W101", "N41W108", "N49W058", "N54W134", "N60W141", "N31W102", "N41W109", "N49W059", "N54W160", "N60W142", "N31W103", "N41W110", "N49W062", "N54W161", "N60W143", "N31W104", "N41W111", "N49W063", "N54W162", "N60W144", "N31W105", "N41W112", "N49W064", "N54W163", "N60W145", "N31W106", "N41W113", "N49W065", "N54W164", "N60W146", "N31W107", "N41W114", "N49W066", "N54W165", "N60W147", "N31W108", "N41W115", "N49W067", "N54W166", "N60W148", "N31W109", "N41W116", "N49W068", "N54W167", "N60W149", "N31W110", "N41W117", "N49W069", "N55W059", "N60W150", "N31W111", "N41W118", "N49W070", "N55W060", "N60W151", "N31W112", "N41W119", "N49W071", "N55W061", "N60W152", "N31W113", "N41W120", "N49W072", "N55W062", "N60W153", "N31W114", "N41W121", "N49W073", "N55W063", "N60W154", "N31W115", "N41W122", "N49W074", "N55W064", "N60W155", "N31W116", "N41W123", "N49W075", "N55W065", "N60W156", "N31W117", "N41W124", "N49W076", "N55W066", "N60W157", "N32W065", "N41W125", "N49W077", "N55W067", "N60W158", "N32W080", "N42W071", "N49W078", "N55W068", "N60W159", "N32W081", "N42W072", "N49W079", "N55W069", "N60W160", "N32W082", "N42W073", "N49W080", "N55W070", "N60W161", "N32W083", "N42W074", "N49W081", "N55W071", "N60W162", "N32W084", "N42W075", "N49W082", "N55W072", "N60W163", "N32W085", "N42W076", "N49W083", "N55W073", "N60W164", "N32W086", "N42W077", "N49W084", "N55W074", "N60W165", "N32W087", "N42W078", "N49W085", "N55W075", "N60W166", "N32W088", "N42W079", "N49W086", "N55W076", "N60W167", "N32W089", "N42W080", "N49W087", "N55W077", "N60W168", "N32W090", "N42W081", "N49W088", "N55W078", "N60W173", "N32W091", "N42W082", "N49W089", "N55W079", "N60W174", "N32W092", "N42W083", "N49W090", "N55W080", "N32W093", "N42W084", "N49W091", "N55W081", "N32W094", "N42W085", "N49W092", "N55W083", (char *)0, "South_America", "N00W050", "S01W052", "S09W048", "S18W046", "S31W052", "N00W051", "S01W053", "S09W049", "S18W047", "S31W053", "N00W052", "S01W054", "S09W050", "S18W048", "S31W054", "N00W053", "S01W055", "S09W051", "S18W049", "S31W055", "N00W054", "S01W056", "S09W052", "S18W050", "S31W056", "N00W055", "S01W057", "S09W053", "S18W051", "S31W057", "N00W056", "S01W058", "S09W054", "S18W052", "S31W058", "N00W057", "S01W059", "S09W055", "S18W053", "S31W059", "N00W058", "S01W060", "S09W056", "S18W054", "S31W060", "N00W059", "S01W061", "S09W057", "S18W055", "S31W061", "N00W060", "S01W062", "S09W058", "S18W056", "S31W062", "N00W061", "S01W063", "S09W059", "S18W057", "S31W063", "N00W062", "S01W064", "S09W060", "S18W058", "S31W064", "N00W063", "S01W065", "S09W061", "S18W059", "S31W065", "N00W064", "S01W066", "S09W062", "S18W060", "S31W066", "N00W065", "S01W067", "S09W063", "S18W061", "S31W067", "N00W066", "S01W068", "S09W064", "S18W062", "S31W068", "N00W067", "S01W069", "S09W065", "S18W063", "S31W069", "N00W068", "S01W070", "S09W066", "S18W064", "S31W070", "N00W069", "S01W071", "S09W067", "S18W065", "S31W071", "N00W070", "S01W072", "S09W068", "S18W066", "S31W072", "N00W071", "S01W073", "S09W069", "S18W067", "S32W051", "N00W072", "S01W074", "S09W070", "S18W068", "S32W052", "N00W073", "S01W075", "S09W071", "S18W069", "S32W053", "N00W074", "S01W076", "S09W072", "S18W070", "S32W054", "N00W075", "S01W077", "S09W073", "S18W071", "S32W055", "N00W076", "S01W078", "S09W074", "S18W072", "S32W056", "N00W077", "S01W079", "S09W075", "S18W073", "S32W057", "N00W078", "S01W080", "S09W076", "S19W040", "S32W058", "N00W079", "S01W081", "S09W077", "S19W041", "S32W059", "N00W080", "S01W090", "S09W078", "S19W042", "S32W060", "N00W081", "S01W091", "S09W079", "S19W043", "S32W061", "N00W090", "S01W092", "S09W080", "S19W044", "S32W062", "N00W091", "S02W045", "S10W036", "S19W045", "S32W063", "N00W092", "S02W046", "S10W037", "S19W046", "S32W064", "N01W050", "S02W047", "S10W038", "S19W047", "S32W065", "N01W051", "S02W048", "S10W039", "S19W048", "S32W066", "N01W052", "S02W049", "S10W040", "S19W049", "S32W067", "N01W053", "S02W050", "S10W041", "S19W050", "S32W068", "N01W054", "S02W051", "S10W042", "S19W051", "S32W069", "N01W055", "S02W052", "S10W043", "S19W052", "S32W070", "N01W056", "S02W053", "S10W044", "S19W053", "S32W071", "N01W057", "S02W054", "S10W045", "S19W054", "S32W072", "N01W058", "S02W055", "S10W046", "S19W055", "S33W052", "N01W059", "S02W056", "S10W047", "S19W056", "S33W053", "N01W060", "S02W057", "S10W048", "S19W057", "S33W054", "N01W061", "S02W058", "S10W049", "S19W058", "S33W055", "N01W062", "S02W059", "S10W050", "S19W059", "S33W056", "N01W063", "S02W060", "S10W051", "S19W060", "S33W057", "N01W064", "S02W061", "S10W052", "S19W061", "S33W058", "N01W065", "S02W062", "S10W053", "S19W062", "S33W059", "N01W066", "S02W063", "S10W054", "S19W063", "S33W060", "N01W067", "S02W064", "S10W055", "S19W064", "S33W061", "N01W068", "S02W065", "S10W056", "S19W065", "S33W062", "N01W069", "S02W066", "S10W057", "S19W066", "S33W063", "N01W070", "S02W067", "S10W058", "S19W067", "S33W064", "N01W071", "S02W068", "S10W059", "S19W068", "S33W065", "N01W072", "S02W069", "S10W060", "S19W069", "S33W066", "N01W073", "S02W070", "S10W061", "S19W070", "S33W067", "N01W074", "S02W071", "S10W062", "S19W071", "S33W068", "N01W075", "S02W072", "S10W063", "S20W040", "S33W069", "N01W076", "S02W073", "S10W064", "S20W041", "S33W070", "N01W077", "S02W074", "S10W065", "S20W042", "S33W071", "N01W078", "S02W075", "S10W066", "S20W043", "S33W072", "N01W079", "S02W076", "S10W067", "S20W044", "S34W053", "N01W080", "S02W077", "S10W068", "S20W045", "S34W054", "N01W092", "S02W078", "S10W069", "S20W046", "S34W055", "N02W051", "S02W079", "S10W070", "S20W047", "S34W056", "N02W052", "S02W080", "S10W071", "S20W048", "S34W057", "N02W053", "S02W081", "S10W072", "S20W049", "S34W058", "N02W054", "S02W082", "S10W073", "S20W050", "S34W059", "N02W055", "S02W090", "S10W074", "S20W051", "S34W060", "N02W056", "S02W091", "S10W075", "S20W052", "S34W061", "N02W057", "S02W092", "S10W076", "S20W053", "S34W062", "N02W058", "S03W040", "S10W077", "S20W054", "S34W063", "N02W059", "S03W041", "S10W078", "S20W055", "S34W064", "N02W060", "S03W042", "S10W079", "S20W056", "S34W065", "N02W061", "S03W043", "S11W037", "S20W057", "S34W066", "N02W062", "S03W044", "S11W038", "S20W058", "S34W067", "N02W063", "S03W045", "S11W039", "S20W059", "S34W068", "N02W064", "S03W046", "S11W040", "S20W060", "S34W069", "N02W065", "S03W047", "S11W041", "S20W061", "S34W070", "N02W066", "S03W048", "S11W042", "S20W062", "S34W071", "N02W067", "S03W049", "S11W043", "S20W063", "S34W072", "N02W068", "S03W050", "S11W044", "S20W064", "S34W079", "N02W069", "S03W051", "S11W045", "S20W065", "S34W081", "N02W070", "S03W052", "S11W046", "S20W066", "S35W054", "N02W071", "S03W053", "S11W047", "S20W067", "S35W055", "N02W072", "S03W054", "S11W048", "S20W068", "S35W056", "N02W073", "S03W055", "S11W049", "S20W069", "S35W057", "N02W074", "S03W056", "S11W050", "S20W070", "S35W058", "N02W075", "S03W057", "S11W051", "S20W071", "S35W059", "N02W076", "S03W058", "S11W052", "S21W041", "S35W060", "N02W077", "S03W059", "S11W053", "S21W042", "S35W061", "N02W078", "S03W060", "S11W054", "S21W043", "S35W062", "N02W079", "S03W061", "S11W055", "S21W044", "S35W063", "N03W051", "S03W062", "S11W056", "S21W045", "S35W064", "N03W052", "S03W063", "S11W057", "S21W046", "S35W065", "N03W053", "S03W064", "S11W058", "S21W047", "S35W066", "N03W054", "S03W065", "S11W059", "S21W048", "S35W067", "N03W055", "S03W066", "S11W060", "S21W049", "S35W068", "N03W056", "S03W067", "S11W061", "S21W050", "S35W069", "N03W057", "S03W068", "S11W062", "S21W051", "S35W070", "N03W058", "S03W069", "S11W063", "S21W052", "S35W071", "N03W059", "S03W070", "S11W064", "S21W053", "S35W072", "N03W060", "S03W071", "S11W065", "S21W054", "S35W073", "N03W061", "S03W072", "S11W066", "S21W055", "S36W058", "N03W062", "S03W073", "S11W067", "S21W056", "S36W059", "N03W063", "S03W074", "S11W068", "S21W057", "S36W060", "N03W064", "S03W075", "S11W069", "S21W058", "S36W061", "N03W065", "S03W076", "S11W070", "S21W059", "S36W062", "N03W066", "S03W077", "S11W071", "S21W060", "S36W063", "N03W067", "S03W078", "S11W072", "S21W061", "S36W064", "N03W068", "S03W079", "S11W073", "S21W062", "S36W065", "N03W069", "S03W080", "S11W074", "S21W063", "S36W066", "N03W070", "S03W081", "S11W075", "S21W064", "S36W067", "N03W071", "S03W082", "S11W076", "S21W065", "S36W068", "N03W072", "S04W033", "S11W077", "S21W066", "S36W069", "N03W073", "S04W034", "S11W078", "S21W067", "S36W070", "N03W074", "S04W039", "S11W079", "S21W068", "S36W071", "N03W075", "S04W040", "S12W038", "S21W069", "S36W072", "N03W076", "S04W041", "S12W039", "S21W070", "S36W073", "N03W077", "S04W042", "S12W040", "S21W071", "S37W057", "N03W078", "S04W043", "S12W041", "S22W041", "S37W058", "N03W079", "S04W044", "S12W042", "S22W042", "S37W059", "N03W082", "S04W045", "S12W043", "S22W043", "S37W060", "N04W052", "S04W046", "S12W044", "S22W044", "S37W061", "N04W053", "S04W047", "S12W045", "S22W045", "S37W062", "N04W054", "S04W048", "S12W046", "S22W046", "S37W063", "N04W055", "S04W049", "S12W047", "S22W047", "S37W064", "N04W056", "S04W050", "S12W048", "S22W048", "S37W065", "N04W057", "S04W051", "S12W049", "S22W049", "S37W066", "N04W058", "S04W052", "S12W050", "S22W050", "S37W067", "N04W059", "S04W053", "S12W051", "S22W051", "S37W068", "N04W060", "S04W054", "S12W052", "S22W052", "S37W069", "N04W061", "S04W055", "S12W053", "S22W053", "S37W070", "N04W062", "S04W056", "S12W054", "S22W054", "S37W071", "N04W063", "S04W057", "S12W055", "S22W055", "S37W072", "N04W064", "S04W058", "S12W056", "S22W056", "S37W073", "N04W065", "S04W059", "S12W057", "S22W057", "S37W074", "N04W066", "S04W060", "S12W058", "S22W058", "S38W057", "N04W067", "S04W061", "S12W059", "S22W059", "S38W058", "N04W068", "S04W062", "S12W060", "S22W060", "S38W059", "N04W069", "S04W063", "S12W061", "S22W061", "S38W060", "N04W070", "S04W064", "S12W062", "S22W062", "S38W061", "N04W071", "S04W065", "S12W063", "S22W063", "S38W062", "N04W072", "S04W066", "S12W064", "S22W064", "S38W063", "N04W073", "S04W067", "S12W065", "S22W065", "S38W064", "N04W074", "S04W068", "S12W066", "S22W066", "S38W065", "N04W075", "S04W069", "S12W067", "S22W067", "S38W066", "N04W076", "S04W070", "S12W068", "S22W068", "S38W067", "N04W077", "S04W071", "S12W069", "S22W069", "S38W068", "N04W078", "S04W072", "S12W070", "S22W070", "S38W069", "N04W082", "S04W073", "S12W071", "S22W071", "S38W070", "N05W053", "S04W074", "S12W072", "S23W041", "S38W071", "N05W054", "S04W075", "S12W073", "S23W042", "S38W072", "N05W055", "S04W076", "S12W074", "S23W043", "S38W073", "N05W056", "S04W077", "S12W075", "S23W044", "S38W074", "N05W057", "S04W078", "S12W076", "S23W045", "S39W058", "N05W058", "S04W079", "S12W077", "S23W046", "S39W059", "N05W059", "S04W080", "S12W078", "S23W047", "S39W060", "N05W060", "S04W081", "S13W038", "S23W048", "S39W061", "N05W061", "S05W037", "S13W039", "S23W049", "S39W062", "N05W062", "S05W038", "S13W040", "S23W050", "S39W063", "N05W063", "S05W039", "S13W041", "S23W051", "S39W064", "N05W064", "S05W040", "S13W042", "S23W052", "S39W065", "N05W065", "S05W041", "S13W043", "S23W053", "S39W066", "N05W066", "S05W042", "S13W044", "S23W054", "S39W067", "N05W067", "S05W043", "S13W045", "S23W055", "S39W068", "N05W068", "S05W044", "S13W046", "S23W056", "S39W069", "N05W069", "S05W045", "S13W047", "S23W057", "S39W070", "N05W070", "S05W046", "S13W048", "S23W058", "S39W071", "N05W071", "S05W047", "S13W049", "S23W059", "S39W072", "N05W072", "S05W048", "S13W050", "S23W060", "S39W073", "N05W073", "S05W049", "S13W051", "S23W061", "S39W074", "N05W074", "S05W050", "S13W052", "S23W062", "S40W062", "N05W075", "S05W051", "S13W053", "S23W063", "S40W063", "N05W076", "S05W052", "S13W054", "S23W064", "S40W064", "N05W077", "S05W053", "S13W055", "S23W065", "S40W065", "N05W078", "S05W054", "S13W056", "S23W066", "S40W066", "N05W088", "S05W055", "S13W057", "S23W067", "S40W067", "N06W056", "S05W056", "S13W058", "S23W068", "S40W068", "N06W057", "S05W057", "S13W059", "S23W069", "S40W069", "N06W058", "S05W058", "S13W060", "S23W070", "S40W070", "N06W059", "S05W059", "S13W061", "S23W071", "S40W071", "N06W060", "S05W060", "S13W062", "S24W042", "S40W072", "N06W061", "S05W061", "S13W063", "S24W043", "S40W073", "N06W062", "S05W062", "S13W064", "S24W044", "S40W074", "N06W063", "S05W063", "S13W065", "S24W045", "S41W063", "N06W064", "S05W064", "S13W066", "S24W046", "S41W064", "N06W065", "S05W065", "S13W067", "S24W047", "S41W065", "N06W066", "S05W066", "S13W068", "S24W048", "S41W066", "N06W067", "S05W067", "S13W069", "S24W049", "S41W067", "N06W068", "S05W068", "S13W070", "S24W050", "S41W068", "N06W069", "S05W069", "S13W071", "S24W051", "S41W069", "N06W070", "S05W070", "S13W072", "S24W052", "S41W070", "N06W071", "S05W071", "S13W073", "S24W053", "S41W071", "N06W072", "S05W072", "S13W074", "S24W054", "S41W072", "N06W073", "S05W073", "S13W075", "S24W055", "S41W073", "N06W074", "S05W074", "S13W076", "S24W056", "S41W074", "N06W075", "S05W075", "S13W077", "S24W057", "S42W063", "N06W076", "S05W076", "S13W078", "S24W058", "S42W064", "N06W077", "S05W077", "S14W039", "S24W059", "S42W065", "N06W078", "S05W078", "S14W040", "S24W060", "S42W066", "N07W059", "S05W079", "S14W041", "S24W061", "S42W067", "N07W060", "S05W080", "S14W042", "S24W062", "S42W068", "N07W061", "S05W081", "S14W043", "S24W063", "S42W069", "N07W062", "S05W082", "S14W044", "S24W064", "S42W070", "N07W063", "S06W036", "S14W045", "S24W065", "S42W071", "N07W064", "S06W037", "S14W046", "S24W066", "S42W072", "N07W065", "S06W038", "S14W047", "S24W067", "S42W073", "N07W066", "S06W039", "S14W048", "S24W068", "S42W074", "N07W067", "S06W040", "S14W049", "S24W069", "S42W075", "N07W068", "S06W041", "S14W050", "S24W070", "S43W064", "N07W069", "S06W042", "S14W051", "S24W071", "S43W065", "N07W070", "S06W043", "S14W052", "S25W046", "S43W066", "N07W071", "S06W044", "S14W053", "S25W047", "S43W067", "N07W072", "S06W045", "S14W054", "S25W048", "S43W068", "N07W073", "S06W046", "S14W055", "S25W049", "S43W069", "N07W074", "S06W047", "S14W056", "S25W050", "S43W070", "N07W075", "S06W048", "S14W057", "S25W051", "S43W071", "N07W076", "S06W049", "S14W058", "S25W052", "S43W072", "N07W077", "S06W050", "S14W059", "S25W053", "S43W073", "N07W078", "S06W051", "S14W060", "S25W054", "S43W074", "N07W079", "S06W052", "S14W061", "S25W055", "S43W075", "N07W080", "S06W053", "S14W062", "S25W056", "S44W065", "N07W081", "S06W054", "S14W063", "S25W057", "S44W066", "N07W082", "S06W055", "S14W064", "S25W058", "S44W067", "N07W083", "S06W056", "S14W065", "S25W059", "S44W068", "N08W060", "S06W057", "S14W066", "S25W060", "S44W069", "N08W061", "S06W058", "S14W067", "S25W061", "S44W070", "N08W062", "S06W059", "S14W068", "S25W062", "S44W071", "N08W063", "S06W060", "S14W069", "S25W063", "S44W072", "N08W064", "S06W061", "S14W070", "S25W064", "S44W073", "N08W065", "S06W062", "S14W071", "S25W065", "S44W074", "N08W066", "S06W063", "S14W072", "S25W066", "S44W075", "N08W067", "S06W064", "S14W073", "S25W067", "S45W066", "N08W068", "S06W065", "S14W074", "S25W068", "S45W067", "N08W069", "S06W066", "S14W075", "S25W069", "S45W068", "N08W070", "S06W067", "S14W076", "S25W070", "S45W069", "N08W071", "S06W068", "S14W077", "S25W071", "S45W070", "N08W072", "S06W069", "S15W039", "S26W048", "S45W071", "N08W073", "S06W070", "S15W040", "S26W049", "S45W072", "N08W074", "S06W071", "S15W041", "S26W050", "S45W073", "N08W075", "S06W072", "S15W042", "S26W051", "S45W074", "N08W076", "S06W073", "S15W043", "S26W052", "S45W075", "N08W077", "S06W074", "S15W044", "S26W053", "S45W076", "N08W078", "S06W075", "S15W045", "S26W054", "S46W066", "N08W079", "S06W076", "S15W046", "S26W055", "S46W067", "N08W080", "S06W077", "S15W047", "S26W056", "S46W068", "N08W081", "S06W078", "S15W048", "S26W057", "S46W069", "N08W082", "S06W079", "S15W049", "S26W058", "S46W070", "N08W083", "S06W080", "S15W050", "S26W059", "S46W071", "N08W084", "S06W081", "S15W051", "S26W060", "S46W072", "N09W061", "S06W082", "S15W052", "S26W061", "S46W073", "N09W062", "S07W035", "S15W053", "S26W062", "S46W074", "N09W063", "S07W036", "S15W054", "S26W063", "S46W075", "N09W064", "S07W037", "S15W055", "S26W064", "S46W076", "N09W065", "S07W038", "S15W056", "S26W065", "S47W067", "N09W066", "S07W039", "S15W057", "S26W066", "S47W068", "N09W067", "S07W040", "S15W058", "S26W067", "S47W069", "N09W068", "S07W041", "S15W059", "S26W068", "S47W070", "N09W069", "S07W042", "S15W060", "S26W069", "S47W071", "N09W070", "S07W043", "S15W061", "S26W070", "S47W072", "N09W071", "S07W044", "S15W062", "S26W071", "S47W073", "N09W072", "S07W045", "S15W063", "S27W049", "S47W074", "N09W073", "S07W046", "S15W064", "S27W050", "S47W075", "N09W074", "S07W047", "S15W065", "S27W051", "S47W076", "N09W075", "S07W048", "S15W066", "S27W052", "S48W066", "N09W076", "S07W049", "S15W067", "S27W053", "S48W067", "N09W077", "S07W050", "S15W068", "S27W054", "S48W068", "N09W078", "S07W051", "S15W069", "S27W055", "S48W069", "N09W079", "S07W052", "S15W070", "S27W056", "S48W070", "N09W080", "S07W053", "S15W071", "S27W057", "S48W071", "N09W081", "S07W054", "S15W072", "S27W058", "S48W072", "N09W082", "S07W055", "S15W073", "S27W059", "S48W073", "N09W083", "S07W056", "S15W074", "S27W060", "S48W074", "N09W084", "S07W057", "S15W075", "S27W061", "S48W075", "N09W085", "S07W058", "S15W076", "S27W062", "S48W076", "N09W086", "S07W059", "S15W077", "S27W063", "S49W066", "N10W061", "S07W060", "S16W039", "S27W064", "S49W067", "N10W062", "S07W061", "S16W040", "S27W065", "S49W068", "N10W063", "S07W062", "S16W041", "S27W066", "S49W069", "N10W064", "S07W063", "S16W042", "S27W067", "S49W070", "N10W065", "S07W064", "S16W043", "S27W068", "S49W071", "N10W066", "S07W065", "S16W044", "S27W069", "S49W072", "N10W067", "S07W066", "S16W045", "S27W070", "S49W073", "N10W068", "S07W067", "S16W046", "S27W071", "S49W074", "N10W069", "S07W068", "S16W047", "S27W080", "S49W075", "N10W070", "S07W069", "S16W048", "S27W081", "S49W076", "N10W071", "S07W070", "S16W049", "S28W049", "S50W068", "N10W072", "S07W071", "S16W050", "S28W050", "S50W069", "N10W073", "S07W072", "S16W051", "S28W051", "S50W070", "N10W074", "S07W073", "S16W052", "S28W052", "S50W071", "N10W075", "S07W074", "S16W053", "S28W053", "S50W072", "N10W076", "S07W075", "S16W054", "S28W054", "S50W073", "N10W084", "S07W076", "S16W055", "S28W055", "S50W074", "N10W085", "S07W077", "S16W056", "S28W056", "S50W075", "N10W086", "S07W078", "S16W057", "S28W057", "S50W076", "N11W061", "S07W079", "S16W058", "S28W058", "S51W062", "N11W062", "S07W080", "S16W059", "S28W059", "S51W068", "N11W064", "S07W081", "S16W060", "S28W060", "S51W069", "N11W065", "S07W082", "S16W061", "S28W061", "S51W070", "N11W067", "S08W035", "S16W062", "S28W062", "S51W071", "N11W068", "S08W036", "S16W063", "S28W063", "S51W072", "N11W069", "S08W037", "S16W064", "S28W064", "S51W073", "N11W070", "S08W038", "S16W065", "S28W065", "S51W074", "N11W071", "S08W039", "S16W066", "S28W066", "S51W075", "N11W072", "S08W040", "S16W067", "S28W067", "S51W076", "N11W073", "S08W041", "S16W068", "S28W068", "S52W058", "N11W074", "S08W042", "S16W069", "S28W069", "S52W059", "N11W075", "S08W043", "S16W070", "S28W070", "S52W060", "N11W084", "S08W044", "S16W071", "S28W071", "S52W061", "N11W085", "S08W045", "S16W072", "S28W072", "S52W062", "N11W086", "S08W046", "S16W073", "S29W049", "S52W069", "N11W087", "S08W047", "S16W074", "S29W050", "S52W070", "N12W062", "S08W048", "S16W075", "S29W051", "S52W071", "N12W069", "S08W049", "S16W076", "S29W052", "S52W072", "N12W070", "S08W050", "S17W039", "S29W053", "S52W073", "N12W071", "S08W051", "S17W040", "S29W054", "S52W074", "N12W072", "S08W052", "S17W041", "S29W055", "S52W075", "N12W073", "S08W053", "S17W042", "S29W056", "S52W076", "N12W082", "S08W054", "S17W043", "S29W057", "S53W059", "N12W083", "S08W055", "S17W044", "S29W058", "S53W060", "N12W084", "S08W056", "S17W045", "S29W059", "S53W061", "N12W085", "S08W057", "S17W046", "S29W060", "S53W062", "N12W086", "S08W058", "S17W047", "S29W061", "S53W069", "N12W087", "S08W059", "S17W048", "S29W062", "S53W070", "N12W088", "S08W060", "S17W049", "S29W063", "S53W071", "N13W060", "S08W061", "S17W050", "S29W064", "S53W072", "N13W061", "S08W062", "S17W051", "S29W065", "S53W073", "N13W062", "S08W063", "S17W052", "S29W066", "S53W074", "N13W081", "S08W064", "S17W053", "S29W067", "S53W075", "N13W082", "S08W065", "S17W054", "S29W068", "S53W076", "N13W084", "S08W066", "S17W055", "S29W069", "S54W068", "N13W085", "S08W067", "S17W056", "S29W070", "S54W069", "N13W086", "S08W068", "S17W057", "S29W071", "S54W070", "N13W087", "S08W069", "S17W058", "S29W072", "S54W071", "N13W088", "S08W070", "S17W059", "S30W050", "S54W072", "N13W089", "S08W071", "S17W060", "S30W051", "S54W073", "N13W090", "S08W072", "S17W061", "S30W052", "S54W074", "N13W091", "S08W073", "S17W062", "S30W053", "S54W075", "N13W092", "S08W074", "S17W063", "S30W054", "S55W064", "N14W061", "S08W075", "S17W064", "S30W055", "S55W065", "N14W062", "S08W076", "S17W065", "S30W056", "S55W066", "N14W081", "S08W077", "S17W066", "S30W057", "S55W067", "N14W083", "S08W078", "S17W067", "S30W058", "S55W068", "N14W084", "S08W079", "S17W068", "S30W059", "S55W069", "N14W085", "S08W080", "S17W069", "S30W060", "S55W070", "N14W086", "S09W035", "S17W070", "S30W061", "S55W071", "N14W087", "S09W036", "S17W071", "S30W062", "S55W072", "N14W088", "S09W037", "S17W072", "S30W063", "S55W073", "N14W089", "S09W038", "S17W073", "S30W064", "S55W074", "N14W090", "S09W039", "S17W074", "S30W065", "S56W067", "N14W091", "S09W040", "S17W075", "S30W066", "S56W068", "N14W092", "S09W041", "S18W039", "S30W067", "S56W069", "N14W093", "S09W042", "S18W040", "S30W068", "S56W070", "S01W047", "S09W043", "S18W041", "S30W069", "S56W071", "S01W048", "S09W044", "S18W042", "S30W070", "S56W072", "S01W049", "S09W045", "S18W043", "S30W071", "S01W050", "S09W046", "S18W044", "S30W072", "S01W051", "S09W047", "S18W045", "S31W051", (char *)0, (char *) -1 }; viking-1.4.2/src/vikwaypoint.h0000644000175000017500000000427412175546146013274 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef _VIKING_WAYPOINT_H #define _VIKING_WAYPOINT_H #include "vikcoord.h" G_BEGIN_DECLS /* todo important: put these in their own header file, maybe.probably also rename */ #define VIK_WAYPOINT(x) ((VikWaypoint *)(x)) typedef struct _VikWaypoint VikWaypoint; struct _VikWaypoint { VikCoord coord; gboolean visible; gdouble altitude; gchar *name; gchar *comment; gchar *description; gchar *image; /* a rather misleading, ugly hack needed for trwlayer's click image. * these are the height at which the thumbnail is being drawn, not the * dimensions of the original image. */ guint8 image_width; guint8 image_height; gchar *symbol; }; VikWaypoint *vik_waypoint_new(); void vik_waypoint_set_name(VikWaypoint *wp, const gchar *name); void vik_waypoint_set_comment(VikWaypoint *wp, const gchar *comment); void vik_waypoint_set_description(VikWaypoint *wp, const gchar *description); void vik_waypoint_set_image(VikWaypoint *wp, const gchar *image); void vik_waypoint_set_symbol(VikWaypoint *wp, const gchar *symname); void vik_waypoint_free(VikWaypoint * wp); VikWaypoint *vik_waypoint_copy(const VikWaypoint *wp); void vik_waypoint_set_comment_no_copy(VikWaypoint *wp, gchar *comment); void vik_waypoint_marshall ( VikWaypoint *wp, guint8 **data, guint *len); VikWaypoint *vik_waypoint_unmarshall (guint8 *data, guint datalen); G_END_DECLS #endif viking-1.4.2/src/vikgototool.c0000644000175000017500000001524312122673673013257 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2009, Guilhem Bonnefille * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "vikgototool.h" #include "util.h" #include #include #include #include static GObjectClass *parent_class; static void goto_tool_finalize ( GObject *gob ); static gchar *goto_tool_get_label ( VikGotoTool *vw ); static DownloadMapOptions *goto_tool_get_download_options ( VikGotoTool *self ); typedef struct _VikGotoToolPrivate VikGotoToolPrivate; struct _VikGotoToolPrivate { gint id; gchar *label; }; #define GOTO_TOOL_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), \ VIK_GOTO_TOOL_TYPE, \ VikGotoToolPrivate)) G_DEFINE_ABSTRACT_TYPE (VikGotoTool, vik_goto_tool, G_TYPE_OBJECT) enum { PROP_0, PROP_ID, PROP_LABEL, }; static void goto_tool_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { VikGotoTool *self = VIK_GOTO_TOOL (object); VikGotoToolPrivate *priv = GOTO_TOOL_GET_PRIVATE (self); switch (property_id) { case PROP_ID: priv->id = g_value_get_uint (value); g_debug ("VikGotoTool.id: %d", priv->id); break; case PROP_LABEL: g_free (priv->label); priv->label = g_value_dup_string (value); g_debug ("VikGotoTool.label: %s", priv->label); break; default: /* We don't have any other property... */ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void goto_tool_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { VikGotoTool *self = VIK_GOTO_TOOL (object); VikGotoToolPrivate *priv = GOTO_TOOL_GET_PRIVATE (self); switch (property_id) { case PROP_ID: g_value_set_uint (value, priv->id); break; case PROP_LABEL: g_value_set_string (value, priv->label); break; default: /* We don't have any other property... */ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void vik_goto_tool_class_init ( VikGotoToolClass *klass ) { GObjectClass *gobject_class; GParamSpec *pspec; gobject_class = G_OBJECT_CLASS (klass); gobject_class->finalize = goto_tool_finalize; gobject_class->set_property = goto_tool_set_property; gobject_class->get_property = goto_tool_get_property; pspec = g_param_spec_string ("label", "Label", "Set the label", "" /* default value */, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE); g_object_class_install_property (gobject_class, PROP_LABEL, pspec); pspec = g_param_spec_uint ("id", "Id of the tool", "Set the id", 0 /* minimum value */, G_MAXUINT16 /* maximum value */, 0 /* default value */, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE); g_object_class_install_property (gobject_class, PROP_ID, pspec); klass->get_label = goto_tool_get_label; klass->get_download_options = goto_tool_get_download_options; parent_class = g_type_class_peek_parent (klass); g_type_class_add_private (klass, sizeof (VikGotoToolPrivate)); } VikGotoTool *vik_goto_tool_new () { return VIK_GOTO_TOOL ( g_object_new ( VIK_GOTO_TOOL_TYPE, NULL ) ); } static void vik_goto_tool_init ( VikGotoTool *self ) { VikGotoToolPrivate *priv = GOTO_TOOL_GET_PRIVATE (self); priv->label = NULL; } static void goto_tool_finalize ( GObject *gob ) { VikGotoToolPrivate *priv = GOTO_TOOL_GET_PRIVATE ( gob ); g_free ( priv->label ); priv->label = NULL; G_OBJECT_CLASS(parent_class)->finalize(gob); } static gchar *goto_tool_get_label ( VikGotoTool *self ) { VikGotoToolPrivate *priv = NULL; priv = GOTO_TOOL_GET_PRIVATE (self); return g_strdup ( priv->label ); } static DownloadMapOptions *goto_tool_get_download_options ( VikGotoTool *self ) { // Default: return NULL return NULL; } gchar *vik_goto_tool_get_label ( VikGotoTool *self ) { return VIK_GOTO_TOOL_GET_CLASS( self )->get_label( self ); } gchar *vik_goto_tool_get_url_format ( VikGotoTool *self ) { return VIK_GOTO_TOOL_GET_CLASS( self )->get_url_format( self ); } DownloadMapOptions *vik_goto_tool_get_download_options ( VikGotoTool *self ) { return VIK_GOTO_TOOL_GET_CLASS( self )->get_download_options( self ); } gboolean vik_goto_tool_parse_file_for_latlon (VikGotoTool *self, gchar *filename, struct LatLon *ll) { return VIK_GOTO_TOOL_GET_CLASS( self )->parse_file_for_latlon( self, filename, ll ); } int vik_goto_tool_get_coord ( VikGotoTool *self, VikWindow *vw, VikViewport *vvp, gchar *srch_str, VikCoord *coord ) { gchar *tmpname; gchar *uri; gchar *escaped_srch_str; int ret = 0; /* OK */ struct LatLon ll; g_debug("%s: raw goto: %s", __FUNCTION__, srch_str); escaped_srch_str = uri_escape(srch_str); g_debug("%s: escaped goto: %s", __FUNCTION__, escaped_srch_str); uri = g_strdup_printf(vik_goto_tool_get_url_format(self), escaped_srch_str); tmpname = a_download_uri_to_tmp_file ( uri, vik_goto_tool_get_download_options(self) ); g_debug("%s: %s", __FILE__, tmpname); if (!vik_goto_tool_parse_file_for_latlon(self, tmpname, &ll)) { ret = -1; goto done; } vik_coord_load_from_latlon ( coord, vik_viewport_get_coord_mode(vvp), &ll ); done: g_free(escaped_srch_str); g_free(uri); g_remove(tmpname); g_free(tmpname); return ret; } viking-1.4.2/src/vikmapsource.h0000644000175000017500000001034512174331626013406 00000000000000/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * viking * Copyright (C) 2009-2010, Guilhem Bonnefille * * viking is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * viking is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef _VIK_MAP_SOURCE_H_ #define _VIK_MAP_SOURCE_H_ #include #include "vikviewport.h" #include "vikcoord.h" #include "mapcoord.h" #include "bbox.h" G_BEGIN_DECLS #define VIK_TYPE_MAP_SOURCE (vik_map_source_get_type ()) #define VIK_MAP_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIK_TYPE_MAP_SOURCE, VikMapSource)) #define VIK_MAP_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VIK_TYPE_MAP_SOURCE, VikMapSourceClass)) #define VIK_IS_MAP_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIK_TYPE_MAP_SOURCE)) #define VIK_IS_MAP_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VIK_TYPE_MAP_SOURCE)) #define VIK_MAP_SOURCE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VIK_TYPE_MAP_SOURCE, VikMapSourceClass)) typedef struct _VikMapSourceClass VikMapSourceClass; typedef struct _VikMapSource VikMapSource; struct _VikMapSourceClass { GObjectClass parent_class; /* Legal info */ void (* get_copyright) (VikMapSource * self, LatLonBBox bbox, gdouble zoom, void (*fct)(VikViewport*,const gchar*), void *data); const gchar *(* get_license) (VikMapSource * self); const gchar *(* get_license_url) (VikMapSource * self); const GdkPixbuf *(* get_logo) (VikMapSource * self); guint16 (* get_uniq_id) (VikMapSource * self); const gchar * (* get_label) (VikMapSource * self); guint16 (* get_tilesize_x) (VikMapSource * self); guint16 (* get_tilesize_y) (VikMapSource * self); VikViewportDrawMode (* get_drawmode) (VikMapSource * self); gboolean (* is_direct_file_access) (VikMapSource * self); gboolean (* supports_download_only_new) (VikMapSource * self); gboolean (* coord_to_mapcoord) (VikMapSource * self, const VikCoord * src, gdouble xzoom, gdouble yzoom, MapCoord * dest); void (* mapcoord_to_center_coord) (VikMapSource * self, MapCoord * src, VikCoord * dest); int (* download) (VikMapSource * self, MapCoord * src, const gchar * dest_fn, void * handle); void * (* download_handle_init) (VikMapSource * self); void (* download_handle_cleanup) (VikMapSource * self, void * handle); }; struct _VikMapSource { GObject parent_instance; }; GType vik_map_source_get_type (void) G_GNUC_CONST; void vik_map_source_get_copyright (VikMapSource * self, LatLonBBox bbox, gdouble zoom, void (*fct)(VikViewport*,const gchar*), void *data); const gchar *vik_map_source_get_license (VikMapSource * self); const gchar *vik_map_source_get_license_url (VikMapSource * self); const GdkPixbuf *vik_map_source_get_logo (VikMapSource * self); guint16 vik_map_source_get_uniq_id (VikMapSource * self); const gchar *vik_map_source_get_label (VikMapSource * self); guint16 vik_map_source_get_tilesize_x (VikMapSource * self); guint16 vik_map_source_get_tilesize_y (VikMapSource * self); VikViewportDrawMode vik_map_source_get_drawmode (VikMapSource * self); gboolean vik_map_source_is_direct_file_access (VikMapSource * self); gboolean vik_map_source_supports_download_only_new (VikMapSource * self); gboolean vik_map_source_coord_to_mapcoord (VikMapSource * self, const VikCoord *src, gdouble xzoom, gdouble yzoom, MapCoord *dest ); void vik_map_source_mapcoord_to_center_coord (VikMapSource * self, MapCoord *src, VikCoord *dest); int vik_map_source_download (VikMapSource * self, MapCoord * src, const gchar * dest_fn, void * handle); void * vik_map_source_download_handle_init (VikMapSource * self); void vik_map_source_download_handle_cleanup (VikMapSource * self, void * handle); G_END_DECLS #endif /* _VIK_MAP_SOURCE_H_ */ viking-1.4.2/src/gpx.c0000644000175000017500000007124112175546146011477 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2007, Evan Battaglia * Copyright (C) 2007, Quy Tonthat * Copyright (C) 2008, Hein Ragas * Copyright (C) 2009, Tal B * Copyright (c) 2012, Rob Norris * * Some of the code adapted from GPSBabel 1.2.7 * http://gpsbabel.sf.net/ * Copyright (C) 2002, 2003, 2004, 2005 Robert Lipe, robertlipe@usa.net * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #define _XOPEN_SOURCE /* glibc2 needs this */ #include "gpx.h" #include "viking.h" #include #ifdef HAVE_STRING_H #include #endif #include #ifdef HAVE_MATH_H #include #endif #include typedef enum { tt_unknown = 0, tt_gpx, tt_wpt, tt_wpt_cmt, tt_wpt_desc, tt_wpt_name, tt_wpt_ele, tt_wpt_sym, tt_wpt_link, /* New in GPX 1.1 */ tt_trk, tt_trk_cmt, tt_trk_desc, tt_trk_name, tt_rte, tt_trk_trkseg, tt_trk_trkseg_trkpt, tt_trk_trkseg_trkpt_ele, tt_trk_trkseg_trkpt_time, /* extended */ tt_trk_trkseg_trkpt_course, tt_trk_trkseg_trkpt_speed, tt_trk_trkseg_trkpt_fix, tt_trk_trkseg_trkpt_sat, tt_trk_trkseg_trkpt_hdop, tt_trk_trkseg_trkpt_vdop, tt_trk_trkseg_trkpt_pdop, tt_waypoint, tt_waypoint_coord, tt_waypoint_name, } tag_type; typedef struct tag_mapping { tag_type tag_type; /* enum from above for this tag */ const char *tag_name; /* xpath-ish tag name */ } tag_mapping; typedef struct { GpxWritingOptions *options; FILE *file; } GpxWritingContext; /* * xpath(ish) mappings between full tag paths and internal identifers. * These appear in the order they appear in the GPX specification. * If it's not a tag we explictly handle, it doesn't go here. */ tag_mapping tag_path_map[] = { { tt_wpt, "/gpx/wpt" }, { tt_waypoint, "/loc/waypoint" }, { tt_waypoint_coord, "/loc/waypoint/coord" }, { tt_waypoint_name, "/loc/waypoint/name" }, { tt_wpt_ele, "/gpx/wpt/ele" }, { tt_wpt_name, "/gpx/wpt/name" }, { tt_wpt_cmt, "/gpx/wpt/cmt" }, { tt_wpt_desc, "/gpx/wpt/desc" }, { tt_wpt_sym, "/gpx/wpt/sym" }, { tt_wpt_sym, "/loc/waypoint/type" }, { tt_wpt_link, "/gpx/wpt/link" }, /* GPX 1.1 */ { tt_trk, "/gpx/trk" }, { tt_trk_name, "/gpx/trk/name" }, { tt_trk_cmt, "/gpx/trk/cmt" }, { tt_trk_desc, "/gpx/trk/desc" }, { tt_trk_trkseg, "/gpx/trk/trkseg" }, { tt_trk_trkseg_trkpt, "/gpx/trk/trkseg/trkpt" }, { tt_trk_trkseg_trkpt_ele, "/gpx/trk/trkseg/trkpt/ele" }, { tt_trk_trkseg_trkpt_time, "/gpx/trk/trkseg/trkpt/time" }, /* extended */ { tt_trk_trkseg_trkpt_course, "/gpx/trk/trkseg/trkpt/course" }, { tt_trk_trkseg_trkpt_speed, "/gpx/trk/trkseg/trkpt/speed" }, { tt_trk_trkseg_trkpt_fix, "/gpx/trk/trkseg/trkpt/fix" }, { tt_trk_trkseg_trkpt_sat, "/gpx/trk/trkseg/trkpt/sat" }, { tt_trk_trkseg_trkpt_hdop, "/gpx/trk/trkseg/trkpt/hdop" }, { tt_trk_trkseg_trkpt_vdop, "/gpx/trk/trkseg/trkpt/vdop" }, { tt_trk_trkseg_trkpt_pdop, "/gpx/trk/trkseg/trkpt/pdop" }, { tt_rte, "/gpx/rte" }, // NB Route reuses track point feature tags { tt_trk_name, "/gpx/rte/name" }, { tt_trk_cmt, "/gpx/rte/cmt" }, { tt_trk_desc, "/gpx/rte/desc" }, { tt_trk_trkseg_trkpt, "/gpx/rte/rtept" }, { tt_trk_trkseg_trkpt_ele, "/gpx/rte/rtept/ele" }, {0} }; static tag_type get_tag(const char *t) { tag_mapping *tm; for (tm = tag_path_map; tm->tag_type != 0; tm++) if (0 == strcmp(tm->tag_name, t)) return tm->tag_type; return tt_unknown; } /******************************************/ tag_type current_tag = tt_unknown; GString *xpath = NULL; GString *c_cdata = NULL; /* current ("c_") objects */ VikTrackpoint *c_tp = NULL; VikWaypoint *c_wp = NULL; VikTrack *c_tr = NULL; gchar *c_wp_name = NULL; gchar *c_tr_name = NULL; /* temporary things so we don't have to create them lots of times */ const gchar *c_slat, *c_slon; struct LatLon c_ll; /* specialty flags / etc */ gboolean f_tr_newseg; guint unnamed_waypoints = 0; guint unnamed_tracks = 0; static const char *get_attr ( const char **attr, const char *key ) { while ( *attr ) { if ( strcmp(*attr,key) == 0 ) return *(attr + 1); attr += 2; } return NULL; } static gboolean set_c_ll ( const char **attr ) { if ( (c_slat = get_attr ( attr, "lat" )) && (c_slon = get_attr ( attr, "lon" )) ) { c_ll.lat = g_ascii_strtod(c_slat, NULL); c_ll.lon = g_ascii_strtod(c_slon, NULL); return TRUE; } return FALSE; } static void gpx_start(VikTrwLayer *vtl, const char *el, const char **attr) { static const gchar *tmp; g_string_append_c ( xpath, '/' ); g_string_append ( xpath, el ); current_tag = get_tag ( xpath->str ); switch ( current_tag ) { case tt_wpt: if ( set_c_ll( attr ) ) { c_wp = vik_waypoint_new (); c_wp->visible = TRUE; if ( get_attr ( attr, "hidden" ) ) c_wp->visible = FALSE; vik_coord_load_from_latlon ( &(c_wp->coord), vik_trw_layer_get_coord_mode ( vtl ), &c_ll ); } break; case tt_trk: case tt_rte: c_tr = vik_track_new (); c_tr->is_route = (current_tag == tt_rte) ? TRUE : FALSE; c_tr->visible = TRUE; if ( get_attr ( attr, "hidden" ) ) c_tr->visible = FALSE; break; case tt_trk_trkseg: f_tr_newseg = TRUE; break; case tt_trk_trkseg_trkpt: if ( set_c_ll( attr ) ) { c_tp = vik_trackpoint_new (); vik_coord_load_from_latlon ( &(c_tp->coord), vik_trw_layer_get_coord_mode ( vtl ), &c_ll ); if ( f_tr_newseg ) { c_tp->newsegment = TRUE; f_tr_newseg = FALSE; } c_tr->trackpoints = g_list_append ( c_tr->trackpoints, c_tp ); } break; case tt_trk_trkseg_trkpt_ele: case tt_trk_trkseg_trkpt_time: case tt_wpt_cmt: case tt_wpt_desc: case tt_wpt_name: case tt_wpt_ele: case tt_wpt_link: case tt_trk_cmt: case tt_trk_desc: case tt_trk_name: g_string_erase ( c_cdata, 0, -1 ); /* clear the cdata buffer */ break; case tt_waypoint: c_wp = vik_waypoint_new (); c_wp->visible = TRUE; break; case tt_waypoint_coord: if ( set_c_ll( attr ) ) vik_coord_load_from_latlon ( &(c_wp->coord), vik_trw_layer_get_coord_mode ( vtl ), &c_ll ); break; case tt_waypoint_name: if ( ( tmp = get_attr(attr, "id") ) ) { if ( c_wp_name ) g_free ( c_wp_name ); c_wp_name = g_strdup ( tmp ); } g_string_erase ( c_cdata, 0, -1 ); /* clear the cdata buffer for description */ break; default: break; } } static void gpx_end(VikTrwLayer *vtl, const char *el) { static GTimeVal tp_time; g_string_truncate ( xpath, xpath->len - strlen(el) - 1 ); switch ( current_tag ) { case tt_waypoint: case tt_wpt: if ( ! c_wp_name ) c_wp_name = g_strdup_printf("VIKING_WP%d", unnamed_waypoints++); vik_trw_layer_filein_add_waypoint ( vtl, c_wp_name, c_wp ); g_free ( c_wp_name ); c_wp = NULL; c_wp_name = NULL; break; case tt_trk: case tt_rte: if ( ! c_tr_name ) c_tr_name = g_strdup_printf("VIKING_TR%d", unnamed_tracks++); vik_trw_layer_filein_add_track ( vtl, c_tr_name, c_tr ); g_free ( c_tr_name ); c_tr = NULL; c_tr_name = NULL; break; case tt_wpt_name: if ( c_wp_name ) g_free ( c_wp_name ); c_wp_name = g_strdup ( c_cdata->str ); g_string_erase ( c_cdata, 0, -1 ); break; case tt_trk_name: if ( c_tr_name ) g_free ( c_tr_name ); c_tr_name = g_strdup ( c_cdata->str ); g_string_erase ( c_cdata, 0, -1 ); break; case tt_wpt_ele: c_wp->altitude = g_ascii_strtod ( c_cdata->str, NULL ); g_string_erase ( c_cdata, 0, -1 ); break; case tt_trk_trkseg_trkpt_ele: c_tp->altitude = g_ascii_strtod ( c_cdata->str, NULL ); g_string_erase ( c_cdata, 0, -1 ); break; case tt_waypoint_name: /* .loc name is really description. */ case tt_wpt_desc: vik_waypoint_set_description ( c_wp, c_cdata->str ); g_string_erase ( c_cdata, 0, -1 ); break; case tt_wpt_cmt: vik_waypoint_set_comment ( c_wp, c_cdata->str ); g_string_erase ( c_cdata, 0, -1 ); break; case tt_wpt_link: vik_waypoint_set_image ( c_wp, c_cdata->str ); g_string_erase ( c_cdata, 0, -1 ); break; case tt_wpt_sym: { gchar *tmp_lower = g_utf8_strdown(c_cdata->str, -1); /* for things like Geocache */ vik_waypoint_set_symbol ( c_wp, tmp_lower ); g_free ( tmp_lower ); g_string_erase ( c_cdata, 0, -1 ); break; } case tt_trk_desc: vik_track_set_description ( c_tr, c_cdata->str ); g_string_erase ( c_cdata, 0, -1 ); break; case tt_trk_cmt: vik_track_set_comment ( c_tr, c_cdata->str ); g_string_erase ( c_cdata, 0, -1 ); break; case tt_trk_trkseg_trkpt_time: if ( g_time_val_from_iso8601(c_cdata->str, &tp_time) ) { c_tp->timestamp = tp_time.tv_sec; c_tp->has_timestamp = TRUE; } g_string_erase ( c_cdata, 0, -1 ); break; case tt_trk_trkseg_trkpt_course: c_tp->course = g_ascii_strtod ( c_cdata->str, NULL ); g_string_erase ( c_cdata, 0, -1 ); break; case tt_trk_trkseg_trkpt_speed: c_tp->speed = g_ascii_strtod ( c_cdata->str, NULL ); g_string_erase ( c_cdata, 0, -1 ); break; case tt_trk_trkseg_trkpt_fix: if (!strcmp("2d", c_cdata->str)) c_tp->fix_mode = VIK_GPS_MODE_2D; else if (!strcmp("3d", c_cdata->str)) c_tp->fix_mode = VIK_GPS_MODE_3D; else /* TODO: more fix modes here */ c_tp->fix_mode = VIK_GPS_MODE_NOT_SEEN; g_string_erase ( c_cdata, 0, -1 ); break; case tt_trk_trkseg_trkpt_sat: c_tp->nsats = atoi ( c_cdata->str ); g_string_erase ( c_cdata, 0, -1 ); break; case tt_trk_trkseg_trkpt_hdop: c_tp->hdop = g_strtod ( c_cdata->str, NULL ); g_string_erase ( c_cdata, 0, -1 ); break; case tt_trk_trkseg_trkpt_vdop: c_tp->vdop = g_strtod ( c_cdata->str, NULL ); g_string_erase ( c_cdata, 0, -1 ); break; case tt_trk_trkseg_trkpt_pdop: c_tp->pdop = g_strtod ( c_cdata->str, NULL ); g_string_erase ( c_cdata, 0, -1 ); break; default: break; } current_tag = get_tag ( xpath->str ); } static void gpx_cdata(void *dta, const XML_Char *s, int len) { switch ( current_tag ) { case tt_wpt_name: case tt_trk_name: case tt_wpt_ele: case tt_trk_trkseg_trkpt_ele: case tt_wpt_cmt: case tt_wpt_desc: case tt_wpt_sym: case tt_wpt_link: case tt_trk_cmt: case tt_trk_desc: case tt_trk_trkseg_trkpt_time: case tt_trk_trkseg_trkpt_course: case tt_trk_trkseg_trkpt_speed: case tt_trk_trkseg_trkpt_fix: case tt_trk_trkseg_trkpt_sat: case tt_trk_trkseg_trkpt_hdop: case tt_trk_trkseg_trkpt_vdop: case tt_trk_trkseg_trkpt_pdop: case tt_waypoint_name: /* .loc name is really description. */ g_string_append_len ( c_cdata, s, len ); break; default: break; /* ignore cdata from other things */ } } // make like a "stack" of tag names // like gpspoint's separated like /gpx/wpt/whatever gboolean a_gpx_read_file( VikTrwLayer *vtl, FILE *f ) { XML_Parser parser = XML_ParserCreate(NULL); int done=0, len; enum XML_Status status = XML_STATUS_ERROR; XML_SetElementHandler(parser, (XML_StartElementHandler) gpx_start, (XML_EndElementHandler) gpx_end); XML_SetUserData(parser, vtl); /* in the future we could remove all global variables */ XML_SetCharacterDataHandler(parser, (XML_CharacterDataHandler) gpx_cdata); gchar buf[4096]; g_assert ( f != NULL && vtl != NULL ); xpath = g_string_new ( "" ); c_cdata = g_string_new ( "" ); unnamed_waypoints = 0; unnamed_tracks = 0; while (!done) { len = fread(buf, 1, sizeof(buf)-7, f); done = feof(f) || !len; status = XML_Parse(parser, buf, len, done); } XML_ParserFree (parser); g_string_free ( xpath, TRUE ); g_string_free ( c_cdata, TRUE ); return status != XML_STATUS_ERROR; } /**** entitize from GPSBabel ****/ typedef struct { const char * text; const char * entity; int not_html; } entity_types; static entity_types stdentities[] = { { "&", "&", 0 }, { "'", "'", 1 }, { "<", "<", 0 }, { ">", ">", 0 }, { "\"", """, 0 }, { NULL, NULL, 0 } }; void utf8_to_int( const char *cp, int *bytes, int *value ) { if ( (*cp & 0xe0) == 0xc0 ) { if ( (*(cp+1) & 0xc0) != 0x80 ) goto dodefault; *bytes = 2; *value = ((*cp & 0x1f) << 6) | (*(cp+1) & 0x3f); } else if ( (*cp & 0xf0) == 0xe0 ) { if ( (*(cp+1) & 0xc0) != 0x80 ) goto dodefault; if ( (*(cp+2) & 0xc0) != 0x80 ) goto dodefault; *bytes = 3; *value = ((*cp & 0x0f) << 12) | ((*(cp+1) & 0x3f) << 6) | (*(cp+2) & 0x3f); } else if ( (*cp & 0xf8) == 0xf0 ) { if ( (*(cp+1) & 0xc0) != 0x80 ) goto dodefault; if ( (*(cp+2) & 0xc0) != 0x80 ) goto dodefault; if ( (*(cp+3) & 0xc0) != 0x80 ) goto dodefault; *bytes = 4; *value = ((*cp & 0x07) << 18) | ((*(cp+1) & 0x3f) << 12) | ((*(cp+2) & 0x3f) << 6) | (*(cp+3) & 0x3f); } else if ( (*cp & 0xfc) == 0xf8 ) { if ( (*(cp+1) & 0xc0) != 0x80 ) goto dodefault; if ( (*(cp+2) & 0xc0) != 0x80 ) goto dodefault; if ( (*(cp+3) & 0xc0) != 0x80 ) goto dodefault; if ( (*(cp+4) & 0xc0) != 0x80 ) goto dodefault; *bytes = 5; *value = ((*cp & 0x03) << 24) | ((*(cp+1) & 0x3f) << 18) | ((*(cp+2) & 0x3f) << 12) | ((*(cp+3) & 0x3f) << 6) | (*(cp+4) & 0x3f); } else if ( (*cp & 0xfe) == 0xfc ) { if ( (*(cp+1) & 0xc0) != 0x80 ) goto dodefault; if ( (*(cp+2) & 0xc0) != 0x80 ) goto dodefault; if ( (*(cp+3) & 0xc0) != 0x80 ) goto dodefault; if ( (*(cp+4) & 0xc0) != 0x80 ) goto dodefault; if ( (*(cp+5) & 0xc0) != 0x80 ) goto dodefault; *bytes = 6; *value = ((*cp & 0x01) << 30) | ((*(cp+1) & 0x3f) << 24) | ((*(cp+2) & 0x3f) << 18) | ((*(cp+3) & 0x3f) << 12) | ((*(cp+4) & 0x3f) << 6) | (*(cp+5) & 0x3f); } else { dodefault: *bytes = 1; *value = (unsigned char)*cp; } } static char * entitize(const char * str) { int elen, ecount, nsecount; entity_types *ep; const char * cp; char * p, * tmp, * xstr; char tmpsub[20]; int bytes = 0; int value = 0; ep = stdentities; elen = ecount = nsecount = 0; /* figure # of entity replacements and additional size. */ while (ep->text) { cp = str; while ((cp = strstr(cp, ep->text)) != NULL) { elen += strlen(ep->entity) - strlen(ep->text); ecount++; cp += strlen(ep->text); } ep++; } /* figure the same for other than standard entities (i.e. anything * that isn't in the range U+0000 to U+007F */ for ( cp = str; *cp; cp++ ) { if ( *cp & 0x80 ) { utf8_to_int( cp, &bytes, &value ); cp += bytes-1; elen += sprintf( tmpsub, "&#x%x;", value ) - bytes; nsecount++; } } /* enough space for the whole string plus entity replacements, if any */ tmp = g_malloc((strlen(str) + elen + 1)); strcpy(tmp, str); /* no entity replacements */ if (ecount == 0 && nsecount == 0) return (tmp); if ( ecount != 0 ) { for (ep = stdentities; ep->text; ep++) { p = tmp; while ((p = strstr(p, ep->text)) != NULL) { elen = strlen(ep->entity); xstr = g_strdup(p + strlen(ep->text)); strcpy(p, ep->entity); strcpy(p + elen, xstr); g_free(xstr); p += elen; } } } if ( nsecount != 0 ) { p = tmp; while (*p) { if ( *p & 0x80 ) { utf8_to_int( p, &bytes, &value ); if ( p[bytes] ) { xstr = g_strdup( p + bytes ); } else { xstr = NULL; } sprintf( p, "&#x%x;", value ); p = p+strlen(p); if ( xstr ) { strcpy( p, xstr ); g_free(xstr); } } else { p++; } } } return (tmp); } /**** end GPSBabel code ****/ /* export GPX */ static void gpx_write_waypoint ( VikWaypoint *wp, GpxWritingContext *context ) { // Don't write invisible waypoints when specified if (context->options && !context->options->hidden && !wp->visible) return; FILE *f = context->file; static struct LatLon ll; gchar *s_lat,*s_lon; gchar *tmp; vik_coord_to_latlon ( &(wp->coord), &ll ); s_lat = a_coords_dtostr( ll.lat ); s_lon = a_coords_dtostr( ll.lon ); // NB 'hidden' is not part of any GPX standard - this appears to be a made up Viking 'extension' // luckily most other GPX processing software ignores things they don't understand fprintf ( f, "\n", s_lat, s_lon, wp->visible ? "" : " hidden=\"hidden\"" ); g_free ( s_lat ); g_free ( s_lon ); // Sanity clause if ( wp->name ) tmp = entitize ( wp->name ); else tmp = g_strdup ("waypoint"); fprintf ( f, " %s\n", tmp ); g_free ( tmp); if ( wp->altitude != VIK_DEFAULT_ALTITUDE ) { tmp = a_coords_dtostr ( wp->altitude ); fprintf ( f, " %s\n", tmp ); g_free ( tmp ); } if ( wp->comment ) { tmp = entitize(wp->comment); fprintf ( f, " %s\n", tmp ); g_free ( tmp ); } if ( wp->description ) { tmp = entitize(wp->description); fprintf ( f, " %s\n", tmp ); g_free ( tmp ); } if ( wp->image ) { tmp = entitize(wp->image); fprintf ( f, " %s\n", tmp ); g_free ( tmp ); } if ( wp->symbol ) { tmp = entitize(wp->symbol); fprintf ( f, " %s\n", tmp); g_free ( tmp ); } fprintf ( f, "\n" ); } static void gpx_write_trackpoint ( VikTrackpoint *tp, GpxWritingContext *context ) { FILE *f = context->file; static struct LatLon ll; gchar *s_lat,*s_lon, *s_alt, *s_dop; gchar *time_iso8601; vik_coord_to_latlon ( &(tp->coord), &ll ); // No such thing as a rteseg! So make sure we don't put them in if ( context->options && !context->options->is_route && tp->newsegment ) fprintf ( f, " \n \n" ); s_lat = a_coords_dtostr( ll.lat ); s_lon = a_coords_dtostr( ll.lon ); fprintf ( f, " <%spt lat=\"%s\" lon=\"%s\">\n", (context->options && context->options->is_route) ? "rte" : "trk", s_lat, s_lon ); g_free ( s_lat ); s_lat = NULL; g_free ( s_lon ); s_lon = NULL; s_alt = NULL; if ( tp->altitude != VIK_DEFAULT_ALTITUDE ) { s_alt = a_coords_dtostr ( tp->altitude ); } else if ( context->options != NULL && context->options->force_ele ) { s_alt = a_coords_dtostr ( 0 ); } if (s_alt != NULL) fprintf ( f, " %s\n", s_alt ); g_free ( s_alt ); s_alt = NULL; time_iso8601 = NULL; if ( tp->has_timestamp ) { GTimeVal timestamp; timestamp.tv_sec = tp->timestamp; timestamp.tv_usec = 0; time_iso8601 = g_time_val_to_iso8601 ( ×tamp ); } else if ( context->options != NULL && context->options->force_time ) { GTimeVal current; g_get_current_time ( ¤t ); time_iso8601 = g_time_val_to_iso8601 ( ¤t ); } if ( time_iso8601 != NULL ) fprintf ( f, " \n", time_iso8601 ); g_free(time_iso8601); time_iso8601 = NULL; if (!isnan(tp->course)) { gchar *s_course = a_coords_dtostr(tp->course); fprintf ( f, " %s\n", s_course ); g_free(s_course); } if (!isnan(tp->speed)) { gchar *s_speed = a_coords_dtostr(tp->speed); fprintf ( f, " %s\n", s_speed ); g_free(s_speed); } if (tp->fix_mode == VIK_GPS_MODE_2D) fprintf ( f, " 2d\n"); if (tp->fix_mode == VIK_GPS_MODE_3D) fprintf ( f, " 3d\n"); if (tp->nsats > 0) fprintf ( f, " %d\n", tp->nsats ); s_dop = NULL; if ( tp->hdop != VIK_DEFAULT_DOP ) { s_dop = a_coords_dtostr ( tp->hdop ); } if (s_dop != NULL) fprintf ( f, " %s\n", s_dop ); g_free ( s_dop ); s_dop = NULL; if ( tp->vdop != VIK_DEFAULT_DOP ) { s_dop = a_coords_dtostr ( tp->vdop ); } if (s_dop != NULL) fprintf ( f, " %s\n", s_dop ); g_free ( s_dop ); s_dop = NULL; if ( tp->pdop != VIK_DEFAULT_DOP ) { s_dop = a_coords_dtostr ( tp->pdop ); } if (s_dop != NULL) fprintf ( f, " %s\n", s_dop ); g_free ( s_dop ); s_dop = NULL; fprintf ( f, " \n", (context->options && context->options->is_route) ? "rte" : "trk" ); } static void gpx_write_track ( VikTrack *t, GpxWritingContext *context ) { // Don't write invisible tracks when specified if (context->options && !context->options->hidden && !t->visible) return; FILE *f = context->file; gchar *tmp; gboolean first_tp_is_newsegment = FALSE; /* must temporarily make it not so, but we want to restore state. not that it matters. */ // Sanity clause if ( t->name ) tmp = entitize ( t->name ); else tmp = g_strdup ("track"); // NB 'hidden' is not part of any GPX standard - this appears to be a made up Viking 'extension' // luckily most other GPX processing software ignores things they don't understand fprintf ( f, "<%s%s>\n %s\n", t->is_route ? "rte" : "trk", t->visible ? "" : " hidden=\"hidden\"", tmp ); g_free ( tmp ); if ( t->comment ) { tmp = entitize ( t->comment ); fprintf ( f, " %s\n", tmp ); g_free ( tmp ); } if ( t->description ) { tmp = entitize ( t->description ); fprintf ( f, " %s\n", tmp ); g_free ( tmp ); } /* No such thing as a rteseg! */ if ( !t->is_route ) fprintf ( f, " \n" ); if ( t->trackpoints && t->trackpoints->data ) { first_tp_is_newsegment = VIK_TRACKPOINT(t->trackpoints->data)->newsegment; VIK_TRACKPOINT(t->trackpoints->data)->newsegment = FALSE; /* so we won't write already */ g_list_foreach ( t->trackpoints, (GFunc) gpx_write_trackpoint, context ); VIK_TRACKPOINT(t->trackpoints->data)->newsegment = first_tp_is_newsegment; /* restore state */ } /* NB apparently no such thing as a rteseg! */ if (!t->is_route) fprintf ( f, " \n"); fprintf ( f, "\n", t->is_route ? "rte" : "trk" ); } static void gpx_write_header( FILE *f ) { fprintf(f, "\n" "\n"); } static void gpx_write_footer( FILE *f ) { fprintf(f, "\n"); } static int gpx_waypoint_compare(const void *x, const void *y) { VikWaypoint *a = (VikWaypoint *)x; VikWaypoint *b = (VikWaypoint *)y; return strcmp(a->name,b->name); } static int gpx_track_compare_name(const void *x, const void *y) { VikTrack *a = (VikTrack *)x; VikTrack *b = (VikTrack *)y; return strcmp(a->name,b->name); } /* Function to compare two tracks by their first timestamp */ static int gpx_track_compare_timestamp (const void *x, const void *y) { VikTrack *a = (VikTrack *)x; VikTrack *b = (VikTrack *)y; VikTrackpoint *tpa = NULL; VikTrackpoint *tpb = NULL; if ( a->trackpoints ) tpa = VIK_TRACKPOINT(g_list_first(a->trackpoints)->data); if ( b->trackpoints ) tpb = VIK_TRACKPOINT(g_list_first(b->trackpoints)->data); if ( tpa && tpb ) { if ( tpa->timestamp < tpb->timestamp ) return -1; if ( tpa->timestamp > tpb->timestamp ) return 1; } if ( tpa && !tpb ) return 1; if ( !tpa && tpb ) return -1; return 0; } void a_gpx_write_file ( VikTrwLayer *vtl, FILE *f, GpxWritingOptions *options ) { GpxWritingContext context = { options, f }; gpx_write_header ( f ); // gather waypoints in a list, then sort // g_hash_table_get_values: glib 2.14+ GList *gl = g_hash_table_get_values ( vik_trw_layer_get_waypoints ( vtl ) ); gl = g_list_sort ( gl, gpx_waypoint_compare ); GList *iter; for (iter = g_list_first (gl); iter != NULL; iter = g_list_next (iter)) { gpx_write_waypoint ( (VikWaypoint*)iter->data, &context ); } g_list_free ( gl ); gl = g_hash_table_get_values ( vik_trw_layer_get_tracks ( vtl ) ); // Sort method determined by preference if ( a_vik_get_gpx_export_trk_sort() == VIK_GPX_EXPORT_TRK_SORT_TIME ) gl = g_list_sort ( gl, gpx_track_compare_timestamp ); else gl = g_list_sort ( gl, gpx_track_compare_name ); // Routes sorted by name GList *glrte = g_hash_table_get_values ( vik_trw_layer_get_routes ( vtl ) ); glrte = g_list_sort ( glrte, gpx_track_compare_name ); // g_list_concat doesn't copy memory properly // so process each list separately GpxWritingContext context_tmp = context; GpxWritingOptions opt_tmp = { FALSE, FALSE, FALSE }; // Force trackpoints on tracks if ( !context.options ) context_tmp.options = &opt_tmp; context_tmp.options->is_route = FALSE; // Loop around each list and write each one for (iter = g_list_first (gl); iter != NULL; iter = g_list_next (iter)) { gpx_write_track ( (VikTrack*)iter->data, &context_tmp ); } // Routes (to get routepoints) context_tmp.options->is_route = TRUE; for (iter = g_list_first (glrte); iter != NULL; iter = g_list_next (iter)) { gpx_write_track ( (VikTrack*)iter->data, &context_tmp ); } g_list_free ( gl ); g_list_free ( glrte ); gpx_write_footer ( f ); } void a_gpx_write_track_file ( VikTrack *trk, FILE *f, GpxWritingOptions *options ) { GpxWritingContext context = {options, f}; gpx_write_header ( f ); gpx_write_track ( trk, &context ); gpx_write_footer ( f ); } viking-1.4.2/src/gpspoint.h0000644000175000017500000000210212122673673012535 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef _VIKING_GPSPOINT_H #define _VIKING_GPSPOINT_H #include "viktrwlayer.h" G_BEGIN_DECLS gboolean a_gpspoint_read_file ( VikTrwLayer *trw, FILE *f ); void a_gpspoint_write_file ( VikTrwLayer *trw, FILE *f ); G_END_DECLS #endif viking-1.4.2/src/bingmapsource.c0000644000175000017500000003663112175546146013543 00000000000000/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * viking * Copyright (C) 2011, Guilhem Bonnefille * * viking is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * viking is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ /** * SECTION:bingmapsource * @short_description: the class for Bing Maps * * The #BingMapSource class handles Bing map source. * * License and term of use are available here: * http://wiki.openstreetmap.org/wiki/File:Bing_license.pdf * * Technical details are available here: * http://msdn.microsoft.com/en-us/library/dd877180.aspx */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef HAVE_MATH_H #include #endif #ifdef HAVE_STDLIB_H #include #endif #include #include #include #include #include "globals.h" #include "bingmapsource.h" #include "bbox.h" #include "background.h" #include "icons/icons.h" /* Format for URL */ #define URL_ATTR_FMT "http://dev.virtualearth.net/REST/v1/Imagery/Metadata/Aerial/0,0?zl=1&mapVersion=v1&key=%s&include=ImageryProviders&output=xml" static gchar *_get_uri ( VikMapSourceDefault *self, MapCoord *src ); static gchar *_get_hostname ( VikMapSourceDefault *self ); static void _get_copyright (VikMapSource * self, LatLonBBox bbox, gdouble zoom, void (*fct)(VikViewport*,const gchar*), void *data); static const GdkPixbuf *_get_logo ( VikMapSource *self ); static int _load_attributions ( BingMapSource *self ); static void _async_load_attributions ( BingMapSource *self ); struct _Attribution { gchar *attribution; int minZoom; int maxZoom; LatLonBBox bounds; }; typedef struct _BingMapSourcePrivate BingMapSourcePrivate; struct _BingMapSourcePrivate { gchar *hostname; gchar *url; gchar *api_key; GList *attributions; /* Current attribution, when parsing */ gchar *attribution; }; /* The pixbuf to store the logo */ static GdkPixbuf *pixbuf = NULL; #define BING_MAP_SOURCE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), BING_TYPE_MAP_SOURCE, BingMapSourcePrivate)) /* properties */ enum { PROP_0, PROP_HOSTNAME, PROP_URL, PROP_API_KEY, }; G_DEFINE_TYPE (BingMapSource, bing_map_source, VIK_TYPE_SLIPPY_MAP_SOURCE); static void bing_map_source_init (BingMapSource *self) { /* initialize the object here */ BingMapSourcePrivate *priv = BING_MAP_SOURCE_GET_PRIVATE (self); priv->hostname = NULL; priv->url = NULL; priv->api_key = NULL; priv->attributions = NULL; priv->attribution = NULL; } static void bing_map_source_finalize (GObject *object) { BingMapSource *self = BING_MAP_SOURCE (object); BingMapSourcePrivate *priv = BING_MAP_SOURCE_GET_PRIVATE (self); g_free (priv->hostname); priv->hostname = NULL; g_free (priv->url); priv->url = NULL; g_free (priv->api_key); priv->api_key = NULL; G_OBJECT_CLASS (bing_map_source_parent_class)->finalize (object); } static void _set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { BingMapSource *self = BING_MAP_SOURCE (object); BingMapSourcePrivate *priv = BING_MAP_SOURCE_GET_PRIVATE (self); switch (property_id) { case PROP_HOSTNAME: g_free (priv->hostname); priv->hostname = g_value_dup_string (value); break; case PROP_URL: g_free (priv->url); priv->url = g_value_dup_string (value); break; case PROP_API_KEY: priv->api_key = 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); break; } } static void _get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { BingMapSource *self = BING_MAP_SOURCE (object); BingMapSourcePrivate *priv = BING_MAP_SOURCE_GET_PRIVATE (self); switch (property_id) { case PROP_HOSTNAME: g_value_set_string (value, priv->hostname); break; case PROP_URL: g_value_set_string (value, priv->url); break; case PROP_API_KEY: g_value_set_string (value, priv->api_key); break; default: /* We don't have any other property... */ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void bing_map_source_class_init (BingMapSourceClass *klass) { GObjectClass* object_class = G_OBJECT_CLASS (klass); VikMapSourceDefaultClass* grandparent_class = VIK_MAP_SOURCE_DEFAULT_CLASS (klass); VikMapSourceClass* base_class = VIK_MAP_SOURCE_CLASS (klass); GParamSpec *pspec = NULL; /* Overiding methods */ object_class->set_property = _set_property; object_class->get_property = _get_property; grandparent_class->get_uri = _get_uri; grandparent_class->get_hostname = _get_hostname; base_class->get_logo = _get_logo; base_class->get_copyright = _get_copyright; pspec = g_param_spec_string ("hostname", "Hostname", "The hostname of the map server", "" /* default value */, G_PARAM_CONSTRUCT_ONLY | 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", "" /* default value */, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE); g_object_class_install_property (object_class, PROP_URL, pspec); pspec = g_param_spec_string ("api-key", "API key", "The API key to access Bing", "" /* default value */, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE); g_object_class_install_property (object_class, PROP_API_KEY, pspec); g_type_class_add_private (klass, sizeof (BingMapSourcePrivate)); object_class->finalize = bing_map_source_finalize; pixbuf = gdk_pixbuf_from_pixdata ( &bing_maps_pixbuf, TRUE, NULL ); } static gchar * compute_quad_tree(int zoom, int tilex, int tiley) { /* Picked from http://trac.openstreetmap.org/browser/applications/editors/josm/plugins/slippymap/src/org/openstreetmap/josm/plugins/slippymap/SlippyMapPreferences.java?rev=24486 */ gchar k[20]; int ik = 0; int i = 0; for(i = zoom; i > 0; i--) { char digit = 48; int mask = 1 << (i - 1); if ((tilex & mask) != 0) { digit += 1; } if ((tiley & mask) != 0) { digit += 2; } k[ik++] = digit; } k[ik] = '\0'; return g_strdup(k); } static gchar * _get_uri( VikMapSourceDefault *self, MapCoord *src ) { g_return_val_if_fail (BING_IS_MAP_SOURCE(self), NULL); BingMapSourcePrivate *priv = BING_MAP_SOURCE_GET_PRIVATE(self); gchar *quadtree = compute_quad_tree (17 - src->scale, src->x, src->y); gchar *uri = g_strdup_printf ( priv->url, quadtree ); g_free (quadtree); return uri; } static gchar * _get_hostname( VikMapSourceDefault *self ) { g_return_val_if_fail (BING_IS_MAP_SOURCE(self), NULL); BingMapSourcePrivate *priv = BING_MAP_SOURCE_GET_PRIVATE(self); return g_strdup( priv->hostname ); } static const GdkPixbuf * _get_logo( VikMapSource *self ) { return pixbuf; } static void _get_copyright(VikMapSource * self, LatLonBBox bbox, gdouble zoom, void (*fct)(VikViewport*,const gchar*), void *data) { g_return_if_fail (BING_IS_MAP_SOURCE(self)); g_debug("%s: looking for %g %g %g %g at %g", __FUNCTION__, bbox.south, bbox.north, bbox.east, bbox.west, zoom); BingMapSourcePrivate *priv = BING_MAP_SOURCE_GET_PRIVATE(self); int level = vik_slippy_map_source_zoom_to_scale (zoom); /* Loop over all known attributions */ GList *attribution = priv->attributions; if (attribution == NULL && g_strcmp0 ("", priv->api_key)) { _async_load_attributions (BING_MAP_SOURCE (self)); } while (attribution != NULL) { struct _Attribution *current = (struct _Attribution*)attribution->data; /* g_debug("%s %g %g %g %g %d %d", __FUNCTION__, current->bounds.south, current->bounds.north, current->bounds.east, current->bounds.west, current->minZoom, current->maxZoom); */ if (BBOX_INTERSECT(bbox, current->bounds) && (17 - level) > current->minZoom && (17 - level) < current->maxZoom) { (*fct)(data, current->attribution); g_debug("%s: found match %s", __FUNCTION__, current->attribution); } attribution = attribution->next; } } /* Called for open tags */ static void _start_element (GMarkupParseContext *context, const gchar *element_name, const gchar **attribute_names, const gchar **attribute_values, gpointer user_data, GError **error) { BingMapSource *self = BING_MAP_SOURCE (user_data); BingMapSourcePrivate *priv = BING_MAP_SOURCE_GET_PRIVATE (self); const gchar *element = g_markup_parse_context_get_element (context); if (strcmp (element, "CoverageArea") == 0) { /* New Attribution */ struct _Attribution *attribution = g_malloc (sizeof(struct _Attribution)); priv->attributions = g_list_append (priv->attributions, attribution); attribution->attribution = g_strdup (priv->attribution); } } /* Called for character data */ /* text is not nul-terminated */ static void _text (GMarkupParseContext *context, const gchar *text, gsize text_len, gpointer user_data, GError **error) { BingMapSource *self = BING_MAP_SOURCE (user_data); BingMapSourcePrivate *priv = BING_MAP_SOURCE_GET_PRIVATE (self); struct _Attribution *attribution = priv->attributions == NULL ? NULL : g_list_last (priv->attributions)->data; const gchar *element = g_markup_parse_context_get_element (context); gchar *textl = g_strndup (text, text_len); const GSList *stack = g_markup_parse_context_get_element_stack (context); int len = g_slist_length ((GSList *)stack); const gchar *parent = len > 1 ? g_slist_nth_data ((GSList *)stack, 1) : NULL; if (strcmp (element, "Attribution") == 0) { g_free (priv->attribution); priv->attribution = g_strdup (textl); } else if (parent != NULL && strcmp (parent, "CoverageArea") == 0) { if (strcmp (element, "ZoomMin") == 0) { attribution->minZoom = atoi (textl); } else if (strcmp (element, "ZoomMax") == 0) { attribution->maxZoom = atoi (textl); } } else if (parent != NULL && strcmp (parent, "BoundingBox") == 0) { if (strcmp (element, "SouthLatitude") == 0) { attribution->bounds.south = g_ascii_strtod (textl, NULL); } else if (strcmp (element, "WestLongitude") == 0) { attribution->bounds.west = g_ascii_strtod (textl, NULL); } else if (strcmp (element, "NorthLatitude") == 0) { attribution->bounds.north = g_ascii_strtod (textl, NULL); } else if (strcmp (element, "EastLongitude") == 0) { attribution->bounds.east = g_ascii_strtod (textl, NULL); } } if (attribution) g_debug("Current attribution %s from %d to %d %g %g %g %g", attribution->attribution, attribution->minZoom, attribution->maxZoom, attribution->bounds.south, attribution->bounds.north, attribution->bounds.west, attribution->bounds.east); g_free(textl); } static gboolean _parse_file_for_attributions(BingMapSource *self, gchar *filename) { GMarkupParser xml_parser; GMarkupParseContext *xml_context = NULL; GError *error = NULL; BingMapSourcePrivate *priv = BING_MAP_SOURCE_GET_PRIVATE (self); g_return_val_if_fail(priv != NULL, FALSE); FILE *file = g_fopen (filename, "r"); if (file == NULL) /* TODO emit warning */ return FALSE; /* setup context parse (ie callbacks) */ xml_parser.start_element = &_start_element; xml_parser.end_element = NULL; xml_parser.text = &_text; xml_parser.passthrough = NULL; xml_parser.error = NULL; xml_context = g_markup_parse_context_new(&xml_parser, 0, self, NULL); gchar buff[BUFSIZ]; size_t nb; size_t offset = -1; while (xml_context && (nb = fread (buff, sizeof(gchar), BUFSIZ, file)) > 0) { if (offset == -1) /* first run */ /* Avoid possible BOM at begining of the file */ offset = buff[0] == '<' ? 0 : 3; else /* reset offset */ offset = 0; if (!g_markup_parse_context_parse(xml_context, buff+offset, nb-offset, &error)) { fprintf(stderr, "%s: parsing error: %s.\n", __FUNCTION__, error->message); g_markup_parse_context_free(xml_context); xml_context = NULL; } g_clear_error (&error); } /* cleanup */ if (xml_context && !g_markup_parse_context_end_parse(xml_context, &error)) fprintf(stderr, "%s: errors occurred while reading file: %s.\n", __FUNCTION__, error->message); g_clear_error (&error); if (xml_context) g_markup_parse_context_free(xml_context); xml_context = NULL; fclose (file); return TRUE; } static int _load_attributions ( BingMapSource *self ) { int ret = 0; /* OK */ BingMapSourcePrivate *priv = BING_MAP_SOURCE_GET_PRIVATE (self); gchar *uri = g_strdup_printf(URL_ATTR_FMT, priv->api_key); gchar *tmpname = a_download_uri_to_tmp_file ( uri, vik_map_source_default_get_download_options(VIK_MAP_SOURCE_DEFAULT(self)) ); g_debug("%s: %s", __FUNCTION__, tmpname); if (!_parse_file_for_attributions(self, tmpname)) { ret = -1; goto done; } done: g_free(uri); g_remove(tmpname); g_free(tmpname); return ret; } static int _emit_update ( gpointer data ) { gdk_threads_enter(); /* TODO vik_layers_panel_emit_update ( VIK_LAYERS_PANEL (data) ); */ gdk_threads_leave(); return 0; } static int _load_attributions_thread ( BingMapSource *self, gpointer threaddata ) { _load_attributions ( self ); int result = a_background_thread_progress ( threaddata, 1.0 ); if ( result != 0 ) return -1; /* Abort thread */ /* Emit update */ /* As we are on a download thread, * it's better to fire the update from the main loop. */ g_idle_add ( (GSourceFunc)_emit_update, NULL /* FIXME */ ); return 0; } static void _async_load_attributions ( BingMapSource *self ) { a_background_thread ( /*VIK_GTK_WINDOW_FROM_WIDGET(vp)*/NULL, _("Bing attribution Loading"), (vik_thr_func) _load_attributions_thread, self, NULL, NULL, 1 ); } /** * bing_map_source_new_with_id: * @id: internal identifier. * @label: the label to display in map provider selector. * @key: the API key to access Bing's services. * * Constructor for Bing map source. * * Returns: a newly allocated BingMapSource GObject. */ BingMapSource * bing_map_source_new_with_id (guint16 id, const gchar *label, const gchar *key) { /* initialize settings here */ return g_object_new(BING_TYPE_MAP_SOURCE, "id", id, "label", label, "hostname", "ecn.t2.tiles.virtualearth.net", "url", "/tiles/a%s.jpeg?g=587", "api-key", key, "check-file-server-time", TRUE, "copyright", "© 2011 Microsoft Corporation and/or its suppliers", "license", "Microsoft Bing Maps Specific", "license-url", "http://www.microsoft.com/maps/assets/docs/terms.aspx", NULL); } viking-1.4.2/src/background.h0000644000175000017500000000317112122673673013020 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef __VIKING_BACKGROUND_H #define __VIKING_BACKGROUND_H #include #include #include "vikwindow.h" G_BEGIN_DECLS typedef void(*vik_thr_free_func)(gpointer); typedef void(*vik_thr_func)(gpointer,gpointer); /* the new way */ void a_background_thread ( GtkWindow *parent, const gchar *message, vik_thr_func func, gpointer userdata, vik_thr_free_func userdata_free_func, vik_thr_free_func userdata_cancel_cleanup_func, gint number_items ); int a_background_thread_progress ( gpointer callbackdata, gdouble fraction ); int a_background_testcancel ( gpointer callbackdata ); void a_background_show_window (); void a_background_init (); void a_background_uninit (); void a_background_add_window (VikWindow *vw); void a_background_remove_window (VikWindow *vw); G_END_DECLS #endif viking-1.4.2/src/viklayerspanel.c0000644000175000017500000006314112175546146013732 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "viking.h" #include #include #include enum { VLP_UPDATE_SIGNAL, VLP_LAST_SIGNAL }; static guint layers_panel_signals[VLP_LAST_SIGNAL] = { 0 }; static GObjectClass *parent_class; struct _VikLayersPanel { GtkVBox vbox; VikAggregateLayer *toplayer; GtkTreeIter toplayer_iter; VikTreeview *vt; VikViewport *vvp; /* reference */ GtkItemFactory *popup_factory; }; static GtkItemFactoryEntry base_entries[] = { { N_("/C_ut"), NULL, (GtkItemFactoryCallback) vik_layers_panel_cut_selected, -1, "", GTK_STOCK_CUT }, { N_("/_Copy"), NULL, (GtkItemFactoryCallback) vik_layers_panel_copy_selected, -1, "", GTK_STOCK_COPY }, { N_("/_Paste"), NULL, (GtkItemFactoryCallback) vik_layers_panel_paste_selected, -1, "", GTK_STOCK_PASTE }, { N_("/_Delete"), NULL, (GtkItemFactoryCallback) vik_layers_panel_delete_selected, -1, "", GTK_STOCK_DELETE }, { N_("/New Layer"), NULL, NULL, -1, "" }, }; #define NUM_BASE_ENTRIES (sizeof(base_entries)/sizeof(base_entries[0])) static void layers_item_toggled (VikLayersPanel *vlp, GtkTreeIter *iter); static void layers_item_edited (VikLayersPanel *vlp, GtkTreeIter *iter, const gchar *new_text); static void menu_popup_cb (VikLayersPanel *vlp); static void layers_popup_cb (VikLayersPanel *vlp); static void layers_popup ( VikLayersPanel *vlp, GtkTreeIter *iter, gint mouse_button ); static gboolean layers_button_press_cb (VikLayersPanel *vlp, GdkEventButton *event); static gboolean layers_key_press_cb (VikLayersPanel *vlp, GdkEventKey *event); static void layers_move_item ( VikLayersPanel *vlp, gboolean up ); static void layers_move_item_up ( VikLayersPanel *vlp ); static void layers_move_item_down ( VikLayersPanel *vlp ); static void layers_panel_finalize ( GObject *gob ); G_DEFINE_TYPE (VikLayersPanel, vik_layers_panel, GTK_TYPE_VBOX) static void vik_layers_panel_class_init ( VikLayersPanelClass *klass ) { GObjectClass *object_class; object_class = G_OBJECT_CLASS (klass); object_class->finalize = layers_panel_finalize; parent_class = g_type_class_peek_parent (klass); layers_panel_signals[VLP_UPDATE_SIGNAL] = g_signal_new ( "update", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, G_STRUCT_OFFSET (VikLayersPanelClass, update), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); } VikLayersPanel *vik_layers_panel_new () { return VIK_LAYERS_PANEL ( g_object_new ( VIK_LAYERS_PANEL_TYPE, NULL ) ); } void vik_layers_panel_set_viewport ( VikLayersPanel *vlp, VikViewport *vvp ) { vlp->vvp = vvp; /* TODO: also update GCs (?) */ } VikViewport *vik_layers_panel_get_viewport ( VikLayersPanel *vlp ) { return vlp->vvp; } static void vik_layers_panel_init ( VikLayersPanel *vlp ) { GtkWidget *hbox; GtkWidget *addbutton, *addimage; GtkWidget *removebutton, *removeimage; GtkWidget *upbutton, *upimage; GtkWidget *downbutton, *downimage; GtkWidget *cutbutton, *cutimage; GtkWidget *copybutton, *copyimage; GtkWidget *pastebutton, *pasteimage; GtkWidget *scrolledwindow; GtkItemFactoryEntry entry; guint i, tmp; vlp->vvp = NULL; hbox = gtk_hbox_new ( TRUE, 2 ); vlp->vt = vik_treeview_new ( ); vlp->toplayer = vik_aggregate_layer_new (); vik_layer_rename ( VIK_LAYER(vlp->toplayer), _("Top Layer")); g_signal_connect_swapped ( G_OBJECT(vlp->toplayer), "update", G_CALLBACK(vik_layers_panel_emit_update), vlp ); vik_treeview_add_layer ( vlp->vt, NULL, &(vlp->toplayer_iter), VIK_LAYER(vlp->toplayer)->name, NULL, vlp->toplayer, VIK_LAYER_AGGREGATE, VIK_LAYER_AGGREGATE ); vik_layer_realize ( VIK_LAYER(vlp->toplayer), vlp->vt, &(vlp->toplayer_iter) ); g_signal_connect_swapped ( vlp->vt, "popup_menu", G_CALLBACK(menu_popup_cb), vlp); g_signal_connect_swapped ( vlp->vt, "button_press_event", G_CALLBACK(layers_button_press_cb), vlp); g_signal_connect_swapped ( vlp->vt, "item_toggled", G_CALLBACK(layers_item_toggled), vlp); g_signal_connect_swapped ( vlp->vt, "item_edited", G_CALLBACK(layers_item_edited), vlp); g_signal_connect_swapped ( vlp->vt, "key_press_event", G_CALLBACK(layers_key_press_cb), vlp); /* Add button */ addimage = gtk_image_new_from_stock ( GTK_STOCK_ADD, GTK_ICON_SIZE_SMALL_TOOLBAR ); addbutton = gtk_button_new ( ); gtk_container_add ( GTK_CONTAINER(addbutton), addimage ); gtk_widget_set_tooltip_text ( GTK_WIDGET(addbutton), _("Add new layer")); gtk_box_pack_start ( GTK_BOX(hbox), addbutton, TRUE, TRUE, 0 ); g_signal_connect_swapped ( G_OBJECT(addbutton), "clicked", G_CALLBACK(layers_popup_cb), vlp ); /* Remove button */ removeimage = gtk_image_new_from_stock ( GTK_STOCK_REMOVE, GTK_ICON_SIZE_SMALL_TOOLBAR ); removebutton = gtk_button_new ( ); gtk_container_add ( GTK_CONTAINER(removebutton), removeimage ); gtk_widget_set_tooltip_text ( GTK_WIDGET(removebutton), _("Remove selected layer")); gtk_box_pack_start ( GTK_BOX(hbox), removebutton, TRUE, TRUE, 0 ); g_signal_connect_swapped ( G_OBJECT(removebutton), "clicked", G_CALLBACK(vik_layers_panel_delete_selected), vlp ); /* Up button */ upimage = gtk_image_new_from_stock ( GTK_STOCK_GO_UP, GTK_ICON_SIZE_SMALL_TOOLBAR ); upbutton = gtk_button_new ( ); gtk_container_add ( GTK_CONTAINER(upbutton), upimage ); gtk_widget_set_tooltip_text ( GTK_WIDGET(upbutton), _("Move selected layer up")); gtk_box_pack_start ( GTK_BOX(hbox), upbutton, TRUE, TRUE, 0 ); g_signal_connect_swapped ( G_OBJECT(upbutton), "clicked", G_CALLBACK(layers_move_item_up), vlp ); /* Down button */ downimage = gtk_image_new_from_stock ( GTK_STOCK_GO_DOWN, GTK_ICON_SIZE_SMALL_TOOLBAR ); downbutton = gtk_button_new ( ); gtk_container_add ( GTK_CONTAINER(downbutton), downimage ); gtk_widget_set_tooltip_text ( GTK_WIDGET(downbutton), _("Move selected layer down")); gtk_box_pack_start ( GTK_BOX(hbox), downbutton, TRUE, TRUE, 0 ); g_signal_connect_swapped ( G_OBJECT(downbutton), "clicked", G_CALLBACK(layers_move_item_down), vlp ); /* Cut button */ cutimage = gtk_image_new_from_stock ( GTK_STOCK_CUT, GTK_ICON_SIZE_SMALL_TOOLBAR ); cutbutton = gtk_button_new ( ); gtk_container_add ( GTK_CONTAINER(cutbutton), cutimage ); gtk_widget_set_tooltip_text ( GTK_WIDGET(cutbutton), _("Cut selected layer")); gtk_box_pack_start ( GTK_BOX(hbox), cutbutton, TRUE, TRUE, 0 ); g_signal_connect_swapped ( G_OBJECT(cutbutton), "clicked", G_CALLBACK(vik_layers_panel_cut_selected), vlp ); /* Copy button */ copyimage = gtk_image_new_from_stock ( GTK_STOCK_COPY, GTK_ICON_SIZE_SMALL_TOOLBAR ); copybutton = gtk_button_new ( ); gtk_container_add ( GTK_CONTAINER(copybutton), copyimage ); gtk_widget_set_tooltip_text ( GTK_WIDGET(copybutton), _("Copy selected layer")); gtk_box_pack_start ( GTK_BOX(hbox), copybutton, TRUE, TRUE, 0 ); g_signal_connect_swapped ( G_OBJECT(copybutton), "clicked", G_CALLBACK(vik_layers_panel_copy_selected), vlp ); /* Paste button */ pasteimage = gtk_image_new_from_stock ( GTK_STOCK_PASTE, GTK_ICON_SIZE_SMALL_TOOLBAR ); pastebutton = gtk_button_new ( ); gtk_container_add ( GTK_CONTAINER(pastebutton),pasteimage ); gtk_widget_set_tooltip_text ( GTK_WIDGET(pastebutton), _("Paste layer below selected layer")); gtk_box_pack_start ( GTK_BOX(hbox), pastebutton, TRUE, TRUE, 0 ); g_signal_connect_swapped ( G_OBJECT(pastebutton), "clicked", G_CALLBACK(vik_layers_panel_paste_selected), vlp ); scrolledwindow = gtk_scrolled_window_new ( NULL, NULL ); gtk_scrolled_window_set_policy ( GTK_SCROLLED_WINDOW(scrolledwindow), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC ); gtk_container_add ( GTK_CONTAINER(scrolledwindow), GTK_WIDGET(vlp->vt) ); gtk_box_pack_start ( GTK_BOX(vlp), scrolledwindow, TRUE, TRUE, 0 ); gtk_box_pack_start ( GTK_BOX(vlp), hbox, FALSE, FALSE, 0 ); vlp->popup_factory = gtk_item_factory_new ( GTK_TYPE_MENU, "
", NULL ); gtk_item_factory_set_translate_func (vlp->popup_factory, (GtkTranslateFunc) gettext, NULL, NULL); gtk_item_factory_create_items ( vlp->popup_factory, NUM_BASE_ENTRIES, base_entries, vlp ); for ( i = 0; i < VIK_LAYER_NUM_TYPES; i++ ) { /* TODO: FIXME: if name has a '/' in it it will get all messed up. why not have an itemfactory field with name, icon, shortcut, etc.? */ gchar *label = g_strdup_printf(_("New _%s Layer"), vik_layer_get_interface(i)->name ); entry.path = g_strdup_printf("%s/%s", base_entries[NUM_BASE_ENTRIES-1].path, label ); g_free ( label ); entry.accelerator = NULL; entry.callback = (GtkItemFactoryCallback) vik_layers_panel_new_layer; entry.callback_action = i; if ( vik_layer_get_interface(i)->icon ) { entry.item_type = ""; entry.extra_data = gdk_pixdata_serialize ( vik_layer_get_interface(i)->icon, &tmp ); } else entry.item_type = ""; gtk_item_factory_create_item ( vlp->popup_factory, &entry, vlp, 1 ); g_free ( (gpointer) entry.extra_data ); g_free ( entry.path ); } } /** * Invoke the actual drawing via signal method */ static gboolean idle_draw_panel ( VikLayersPanel *vlp ) { g_signal_emit ( G_OBJECT(vlp), layers_panel_signals[VLP_UPDATE_SIGNAL], 0 ); return FALSE; // Nothing else to do } void vik_layers_panel_emit_update ( VikLayersPanel *vlp ) { // Only ever draw when there is time to do so if ( g_thread_self() != vik_window_get_thread (VIK_WINDOW(VIK_GTK_WINDOW_FROM_WIDGET(vlp))) ) // Drawing requested from another (background) thread, so handle via the gdk thread method gdk_threads_add_idle ( (GSourceFunc) idle_draw_panel, vlp ); else g_idle_add ( (GSourceFunc) idle_draw_panel, vlp ); } static void layers_item_toggled (VikLayersPanel *vlp, GtkTreeIter *iter) { gboolean visible; gpointer p; gint type; /* get type and data */ type = vik_treeview_item_get_type ( vlp->vt, iter ); p = vik_treeview_item_get_pointer ( vlp->vt, iter ); switch ( type ) { case VIK_TREEVIEW_TYPE_LAYER: visible = (VIK_LAYER(p)->visible ^= 1); vik_layer_emit_update_although_invisible ( VIK_LAYER(p) ); /* set trigger for half-drawn */ break; case VIK_TREEVIEW_TYPE_SUBLAYER: visible = vik_layer_sublayer_toggle_visible ( VIK_LAYER(vik_treeview_item_get_parent(vlp->vt, iter)), vik_treeview_item_get_data(vlp->vt, iter), p); vik_layer_emit_update_although_invisible ( VIK_LAYER(vik_treeview_item_get_parent(vlp->vt, iter)) ); break; default: return; } vik_treeview_item_set_visible ( vlp->vt, iter, visible ); } static void layers_item_edited (VikLayersPanel *vlp, GtkTreeIter *iter, const gchar *new_text) { if ( !new_text ) return; if ( new_text[0] == '\0' ) { a_dialog_error_msg ( GTK_WINDOW(VIK_WINDOW_FROM_WIDGET(vlp)), _("New name can not be blank.") ); return; } if ( vik_treeview_item_get_type ( vlp->vt, iter ) == VIK_TREEVIEW_TYPE_LAYER ) { VikLayer *l; /* get iter and layer */ l = VIK_LAYER ( vik_treeview_item_get_pointer ( vlp->vt, iter ) ); if ( strcmp ( l->name, new_text ) != 0 ) { vik_layer_rename ( l, new_text ); vik_treeview_item_set_name ( vlp->vt, iter, l->name ); } } else { const gchar *name = vik_layer_sublayer_rename_request ( vik_treeview_item_get_parent ( vlp->vt, iter ), new_text, vlp, vik_treeview_item_get_data ( vlp->vt, iter ), vik_treeview_item_get_pointer ( vlp->vt, iter ), iter ); if ( name ) vik_treeview_item_set_name ( vlp->vt, iter, name); } } static gboolean layers_button_press_cb ( VikLayersPanel *vlp, GdkEventButton *event ) { if (event->button == 3) { static GtkTreeIter iter; if ( vik_treeview_get_iter_at_pos ( vlp->vt, &iter, event->x, event->y ) ) { layers_popup ( vlp, &iter, 3 ); vik_treeview_item_select ( vlp->vt, &iter ); } else layers_popup ( vlp, NULL, 3 ); return TRUE; } return FALSE; } static gboolean layers_key_press_cb ( VikLayersPanel *vlp, GdkEventKey *event ) { // Accept all forms of delete keys if (event->keyval == GDK_Delete || event->keyval == GDK_KP_Delete || event->keyval == GDK_BackSpace) { vik_layers_panel_delete_selected (vlp); return TRUE; } return FALSE; } static void layers_popup ( VikLayersPanel *vlp, GtkTreeIter *iter, gint mouse_button ) { GtkMenu *menu = NULL; if ( iter ) { if ( vik_treeview_item_get_type ( vlp->vt, iter ) == VIK_TREEVIEW_TYPE_LAYER ) { VikLayer *layer = VIK_LAYER(vik_treeview_item_get_pointer ( vlp->vt, iter )); if ( layer->type == VIK_LAYER_AGGREGATE ) menu = GTK_MENU(gtk_item_factory_get_widget ( vlp->popup_factory, "
" )); else { GtkWidget *del, *prop; VikStdLayerMenuItem menu_selection = vik_layer_get_menu_items_selection(layer); menu = GTK_MENU ( gtk_menu_new () ); if (menu_selection & VIK_MENU_ITEM_PROPERTY) { prop = gtk_image_menu_item_new_from_stock ( GTK_STOCK_PROPERTIES, NULL ); g_signal_connect_swapped ( G_OBJECT(prop), "activate", G_CALLBACK(vik_layers_panel_properties), vlp ); gtk_menu_shell_append (GTK_MENU_SHELL (menu), prop); gtk_widget_show ( prop ); } if (menu_selection & VIK_MENU_ITEM_CUT) { del = gtk_image_menu_item_new_from_stock ( GTK_STOCK_CUT, NULL ); g_signal_connect_swapped ( G_OBJECT(del), "activate", G_CALLBACK(vik_layers_panel_cut_selected), vlp ); gtk_menu_shell_append (GTK_MENU_SHELL (menu), del); gtk_widget_show ( del ); } if (menu_selection & VIK_MENU_ITEM_COPY) { del = gtk_image_menu_item_new_from_stock ( GTK_STOCK_COPY, NULL ); g_signal_connect_swapped ( G_OBJECT(del), "activate", G_CALLBACK(vik_layers_panel_copy_selected), vlp ); gtk_menu_shell_append (GTK_MENU_SHELL (menu), del); gtk_widget_show ( del ); } if (menu_selection & VIK_MENU_ITEM_PASTE) { del = gtk_image_menu_item_new_from_stock ( GTK_STOCK_PASTE, NULL ); g_signal_connect_swapped ( G_OBJECT(del), "activate", G_CALLBACK(vik_layers_panel_paste_selected), vlp ); gtk_menu_shell_append (GTK_MENU_SHELL (menu), del); gtk_widget_show ( del ); } if (menu_selection & VIK_MENU_ITEM_DELETE) { del = gtk_image_menu_item_new_from_stock ( GTK_STOCK_DELETE, NULL ); g_signal_connect_swapped ( G_OBJECT(del), "activate", G_CALLBACK(vik_layers_panel_delete_selected), vlp ); gtk_menu_shell_append (GTK_MENU_SHELL (menu), del); gtk_widget_show ( del ); } vik_layer_add_menu_items ( layer, menu, vlp ); } } else { menu = GTK_MENU ( gtk_menu_new () ); if ( ! vik_layer_sublayer_add_menu_items ( vik_treeview_item_get_parent ( vlp->vt, iter ), menu, vlp, vik_treeview_item_get_data ( vlp->vt, iter ), vik_treeview_item_get_pointer ( vlp->vt, iter ), iter, vlp->vvp ) ) { gtk_widget_destroy ( GTK_WIDGET(menu) ); return; } /* TODO: specific things for different types */ } } else menu = GTK_MENU(gtk_item_factory_get_widget ( vlp->popup_factory, base_entries[NUM_BASE_ENTRIES-1].path )); gtk_menu_popup ( menu, NULL, NULL, NULL, NULL, mouse_button, gtk_get_current_event_time() ); } static void menu_popup_cb ( VikLayersPanel *vlp ) { GtkTreeIter iter; layers_popup ( vlp, vik_treeview_get_selected_iter ( vlp->vt, &iter ) ? &iter : NULL, 0 ); } static void layers_popup_cb ( VikLayersPanel *vlp ) { layers_popup ( vlp, NULL, 0 ); } /** * vik_layers_panel_new_layer: * @type: type of the new layer * * Create a new layer and add to panel. */ gboolean vik_layers_panel_new_layer ( VikLayersPanel *vlp, gint type ) { VikLayer *l; g_assert ( vlp->vvp ); l = vik_layer_create ( type, vlp->vvp, VIK_GTK_WINDOW_FROM_WIDGET(vlp), TRUE ); if ( l ) { vik_layers_panel_add_layer ( vlp, l ); return TRUE; } return FALSE; } /** * vik_layers_panel_add_layer: * @l: existing layer * * Add an existing layer to panel. */ void vik_layers_panel_add_layer ( VikLayersPanel *vlp, VikLayer *l ) { GtkTreeIter iter; GtkTreeIter *replace_iter = NULL; /* could be something different so we have to do this */ vik_layer_change_coord_mode ( l, vik_viewport_get_coord_mode(vlp->vvp) ); if ( ! vik_treeview_get_selected_iter ( vlp->vt, &iter ) ) vik_aggregate_layer_add_layer ( vlp->toplayer, l ); else { VikAggregateLayer *addtoagg; if (vik_treeview_item_get_type ( vlp->vt, &iter ) == VIK_TREEVIEW_TYPE_LAYER ) { if ( IS_VIK_AGGREGATE_LAYER(vik_treeview_item_get_pointer ( vlp->vt, &iter )) ) addtoagg = VIK_AGGREGATE_LAYER(vik_treeview_item_get_pointer ( vlp->vt, &iter )); else { VikLayer *vl = VIK_LAYER(vik_treeview_item_get_parent ( vlp->vt, &iter )); while ( ! IS_VIK_AGGREGATE_LAYER(vl) ) { iter = vl->iter; vl = VIK_LAYER(vik_treeview_item_get_parent ( vlp->vt, &vl->iter )); g_assert ( vl->realized ); } addtoagg = VIK_AGGREGATE_LAYER(vl); replace_iter = &iter; } } else { /* a sublayer is selected, first get its parent (layer), then find the layer's parent (aggr. layer) */ VikLayer *vl = VIK_LAYER(vik_treeview_item_get_parent ( vlp->vt, &iter )); replace_iter = &(vl->iter); g_assert ( vl->realized ); VikLayer *grandpa = (vik_treeview_item_get_parent ( vlp->vt, &(vl->iter) ) ); if (IS_VIK_AGGREGATE_LAYER(grandpa)) addtoagg = VIK_AGGREGATE_LAYER(grandpa); else { addtoagg = vlp->toplayer; replace_iter = &grandpa->iter; } } if ( replace_iter ) vik_aggregate_layer_insert_layer ( addtoagg, l, replace_iter ); else vik_aggregate_layer_add_layer ( addtoagg, l ); } vik_layers_panel_emit_update ( vlp ); } static void layers_move_item ( VikLayersPanel *vlp, gboolean up ) { GtkTreeIter iter; VikAggregateLayer *parent; /* TODO: deactivate the buttons and stuff */ if ( ! vik_treeview_get_selected_iter ( vlp->vt, &iter ) ) return; vik_treeview_select_iter ( vlp->vt, &iter, FALSE ); /* cancel any layer-name editing going on... */ if ( vik_treeview_item_get_type ( vlp->vt, &iter ) == VIK_TREEVIEW_TYPE_LAYER ) { parent = VIK_AGGREGATE_LAYER(vik_treeview_item_get_parent ( vlp->vt, &iter )); if ( parent ) /* not toplevel */ { vik_aggregate_layer_move_layer ( parent, &iter, up ); vik_layers_panel_emit_update ( vlp ); } } } gboolean vik_layers_panel_properties ( VikLayersPanel *vlp ) { GtkTreeIter iter; g_assert ( vlp->vvp ); if ( vik_treeview_get_selected_iter ( vlp->vt, &iter ) && vik_treeview_item_get_type ( vlp->vt, &iter ) == VIK_TREEVIEW_TYPE_LAYER ) { if ( vik_treeview_item_get_data ( vlp->vt, &iter ) == VIK_LAYER_AGGREGATE ) a_dialog_info_msg ( VIK_GTK_WINDOW_FROM_WIDGET(vlp), _("Aggregate Layers have no settable properties.") ); VikLayer *layer = VIK_LAYER( vik_treeview_item_get_pointer ( vlp->vt, &iter ) ); if (vik_layer_properties ( layer, vlp->vvp )) vik_layer_emit_update ( layer ); return TRUE; } else return FALSE; } void vik_layers_panel_draw_all ( VikLayersPanel *vlp ) { if ( vlp->vvp && VIK_LAYER(vlp->toplayer)->visible ) vik_aggregate_layer_draw ( vlp->toplayer, vlp->vvp ); } void vik_layers_panel_cut_selected ( VikLayersPanel *vlp ) { gint type; GtkTreeIter iter; if ( ! vik_treeview_get_selected_iter ( vlp->vt, &iter ) ) /* Nothing to do */ return; type = vik_treeview_item_get_type ( vlp->vt, &iter ); if ( type == VIK_TREEVIEW_TYPE_LAYER ) { VikAggregateLayer *parent = vik_treeview_item_get_parent ( vlp->vt, &iter ); if ( parent ) { /* reset trigger if trigger deleted */ if ( vik_layers_panel_get_selected ( vlp ) == vik_viewport_get_trigger ( vlp->vvp ) ) vik_viewport_set_trigger ( vlp->vvp, NULL ); a_clipboard_copy_selected ( vlp ); if (IS_VIK_AGGREGATE_LAYER(parent)) { if ( vik_aggregate_layer_delete ( parent, &iter ) ) vik_layers_panel_emit_update ( vlp ); } } else a_dialog_info_msg ( VIK_GTK_WINDOW_FROM_WIDGET(vlp), _("You cannot cut the Top Layer.") ); } else if (type == VIK_TREEVIEW_TYPE_SUBLAYER) { VikLayer *sel = vik_layers_panel_get_selected ( vlp ); if ( vik_layer_get_interface(sel->type)->cut_item ) { gint subtype = vik_treeview_item_get_data( vlp->vt, &iter); vik_layer_get_interface(sel->type)->cut_item ( sel, subtype, vik_treeview_item_get_pointer(sel->vt, &iter) ); } } } void vik_layers_panel_copy_selected ( VikLayersPanel *vlp ) { GtkTreeIter iter; if ( ! vik_treeview_get_selected_iter ( vlp->vt, &iter ) ) /* Nothing to do */ return; // NB clipboard contains layer vs sublayer logic, so don't need to do it here a_clipboard_copy_selected ( vlp ); } void vik_layers_panel_paste_selected ( VikLayersPanel *vlp ) { GtkTreeIter iter; if ( ! vik_treeview_get_selected_iter ( vlp->vt, &iter ) ) /* Nothing to do */ return; a_clipboard_paste ( vlp ); } void vik_layers_panel_delete_selected ( VikLayersPanel *vlp ) { gint type; GtkTreeIter iter; if ( ! vik_treeview_get_selected_iter ( vlp->vt, &iter ) ) /* Nothing to do */ return; type = vik_treeview_item_get_type ( vlp->vt, &iter ); if ( type == VIK_TREEVIEW_TYPE_LAYER ) { // Get confirmation from the user if ( ! a_dialog_yes_or_no ( VIK_GTK_WINDOW_FROM_WIDGET(vlp), _("Are you sure you want to delete %s?"), vik_layer_get_name ( VIK_LAYER(vik_treeview_item_get_pointer ( vlp->vt, &iter )) ) ) ) return; VikAggregateLayer *parent = vik_treeview_item_get_parent ( vlp->vt, &iter ); if ( parent ) { /* reset trigger if trigger deleted */ if ( vik_layers_panel_get_selected ( vlp ) == vik_viewport_get_trigger ( vlp->vvp ) ) vik_viewport_set_trigger ( vlp->vvp, NULL ); if (IS_VIK_AGGREGATE_LAYER(parent)) { if ( vik_aggregate_layer_delete ( parent, &iter ) ) vik_layers_panel_emit_update ( vlp ); } } else a_dialog_info_msg ( VIK_GTK_WINDOW_FROM_WIDGET(vlp), _("You cannot delete the Top Layer.") ); } else if (type == VIK_TREEVIEW_TYPE_SUBLAYER) { VikLayer *sel = vik_layers_panel_get_selected ( vlp ); if ( vik_layer_get_interface(sel->type)->delete_item ) { gint subtype = vik_treeview_item_get_data( vlp->vt, &iter); vik_layer_get_interface(sel->type)->delete_item ( sel, subtype, vik_treeview_item_get_pointer(sel->vt, &iter) ); } } } VikLayer *vik_layers_panel_get_selected ( VikLayersPanel *vlp ) { GtkTreeIter iter, parent; gint type; if ( ! vik_treeview_get_selected_iter ( vlp->vt, &iter ) ) return NULL; type = vik_treeview_item_get_type ( vlp->vt, &iter ); while ( type != VIK_TREEVIEW_TYPE_LAYER ) { if ( ! vik_treeview_item_get_parent_iter ( vlp->vt, &iter, &parent ) ) return NULL; iter = parent; type = vik_treeview_item_get_type ( vlp->vt, &iter ); } return VIK_LAYER( vik_treeview_item_get_pointer ( vlp->vt, &iter ) ); } static void layers_move_item_up ( VikLayersPanel *vlp ) { layers_move_item ( vlp, TRUE ); } static void layers_move_item_down ( VikLayersPanel *vlp ) { layers_move_item ( vlp, FALSE ); } #if 0 gboolean vik_layers_panel_tool ( VikLayersPanel *vlp, guint16 layer_type, VikToolInterfaceFunc tool_func, GdkEventButton *event, VikViewport *vvp ) { VikLayer *vl = vik_layers_panel_get_selected ( vlp ); if ( vl && vl->type == layer_type ) { tool_func ( vl, event, vvp ); return TRUE; } else if ( VIK_LAYER(vlp->toplayer)->visible && vik_aggregate_layer_tool ( vlp->toplayer, layer_type, tool_func, event, vvp ) != 1 ) /* either accepted or rejected, but a layer was found */ return TRUE; return FALSE; } #endif VikLayer *vik_layers_panel_get_layer_of_type ( VikLayersPanel *vlp, gint type ) { VikLayer *rv = vik_layers_panel_get_selected ( vlp ); if ( rv == NULL || rv->type != type ) if ( VIK_LAYER(vlp->toplayer)->visible ) return vik_aggregate_layer_get_top_visible_layer_of_type ( vlp->toplayer, type ); else return NULL; else return rv; } GList *vik_layers_panel_get_all_layers_of_type(VikLayersPanel *vlp, gint type, gboolean include_invisible) { GList *layers = NULL; return (vik_aggregate_layer_get_all_layers_of_type ( vlp->toplayer, layers, type, include_invisible)); } VikAggregateLayer *vik_layers_panel_get_top_layer ( VikLayersPanel *vlp ) { return vlp->toplayer; } void vik_layers_panel_clear ( VikLayersPanel *vlp ) { if ( (! vik_aggregate_layer_is_empty(vlp->toplayer)) && a_dialog_yes_or_no ( VIK_GTK_WINDOW_FROM_WIDGET(vlp), _("Are you sure you wish to delete all layers?"), NULL ) ) vik_aggregate_layer_clear ( vlp->toplayer ); /* simply deletes all layers */ } void vik_layers_panel_change_coord_mode ( VikLayersPanel *vlp, VikCoordMode mode ) { vik_layer_change_coord_mode ( VIK_LAYER(vlp->toplayer), mode ); } static void layers_panel_finalize ( GObject *gob ) { VikLayersPanel *vlp = VIK_LAYERS_PANEL ( gob ); g_object_unref ( VIK_LAYER(vlp->toplayer) ); g_object_unref ( G_OBJECT(vlp->popup_factory) ); G_OBJECT_CLASS(parent_class)->finalize(gob); } VikTreeview *vik_layers_panel_get_treeview ( VikLayersPanel *vlp ) { return vlp->vt; } viking-1.4.2/src/vikslippymapsource.h0000644000175000017500000000421512175546146014654 00000000000000/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * viking * Copyright (C) 2009, Guilhem Bonnefille * * viking is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * viking is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef _VIK_SLIPPY_MAP_SOURCE_H #define _VIK_SLIPPY_MAP_SOURCE_H #include "vikcoord.h" #include "mapcoord.h" #include "vikmapsourcedefault.h" G_BEGIN_DECLS #define VIK_TYPE_SLIPPY_MAP_SOURCE (vik_slippy_map_source_get_type ()) #define VIK_SLIPPY_MAP_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIK_TYPE_SLIPPY_MAP_SOURCE, VikSlippyMapSource)) #define VIK_SLIPPY_MAP_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VIK_TYPE_SLIPPY_MAP_SOURCE, VikSlippyMapSourceClass)) #define VIK_IS_SLIPPY_MAP_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIK_TYPE_SLIPPY_MAP_SOURCE)) #define VIK_IS_SLIPPY_MAP_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VIK_TYPE_SLIPPY_MAP_SOURCE)) #define VIK_SLIPPY_MAP_SOURCE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VIK_TYPE_SLIPPY_MAP_SOURCE, VikSlippyMapSourceClass)) typedef struct _VikSlippyMapSourceClass VikSlippyMapSourceClass; typedef struct _VikSlippyMapSource VikSlippyMapSource; struct _VikSlippyMapSourceClass { VikMapSourceDefaultClass parent_class; }; struct _VikSlippyMapSource { VikMapSourceDefault parent_instance; }; GType vik_slippy_map_source_get_type (void) G_GNUC_CONST; VikSlippyMapSource * vik_slippy_map_source_new_with_id (guint16 id, const gchar *label, const gchar *hostname, const gchar *url); G_END_DECLS #endif /* _VIK_SLIPPY_MAP_SOURCE_H_ */ viking-1.4.2/src/viktrwlayer.c0000644000175000017500000116765712175546146013306 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2007, Evan Battaglia * Copyright (C) 2005-2008, Alex Foobarian * Copyright (C) 2007, Quy Tonthat * Copyright (C) 2009, Hein Ragas * Copyright (c) 2012, Rob Norris * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ /* WARNING: If you go beyond this point, we are NOT responsible for any ill effects on your sanity */ /* viktrwlayer.c -- 8000+ lines can make a difference in the state of things */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "viking.h" #include "vikmapslayer.h" #include "vikgpslayer.h" #include "viktrwlayer_tpwin.h" #include "viktrwlayer_propwin.h" #ifdef VIK_CONFIG_GEOTAG #include "viktrwlayer_geotag.h" #include "geotag_exif.h" #endif #include "garminsymbols.h" #include "thumbnails.h" #include "background.h" #include "gpx.h" #include "babel.h" #include "dem.h" #include "dems.h" #include "geonamessearch.h" #ifdef VIK_CONFIG_OPENSTREETMAP #include "osm-traces.h" #endif #include "acquire.h" #include "datasources.h" #include "datasource_gps.h" #include "util.h" #include "icons/icons.h" #ifdef HAVE_MATH_H #include #endif #ifdef HAVE_STRING_H #include #endif #ifdef HAVE_STDLIB_H #include #endif #include #include #include #include #include #include #ifdef VIK_CONFIG_GOOGLE #define GOOGLE_DIRECTIONS_STRING "maps.google.com/maps?q=from:%s,%s+to:%s,%s&output=js" #endif #define VIK_TRW_LAYER_TRACK_GC 6 #define VIK_TRW_LAYER_TRACK_GCS 10 #define VIK_TRW_LAYER_TRACK_GC_BLACK 0 #define VIK_TRW_LAYER_TRACK_GC_SLOW 1 #define VIK_TRW_LAYER_TRACK_GC_AVER 2 #define VIK_TRW_LAYER_TRACK_GC_FAST 3 #define VIK_TRW_LAYER_TRACK_GC_STOP 4 #define VIK_TRW_LAYER_TRACK_GC_SINGLE 5 #define DRAWMODE_BY_TRACK 0 #define DRAWMODE_BY_SPEED 1 #define DRAWMODE_ALL_SAME_COLOR 2 // Note using DRAWMODE_BY_SPEED may be slow especially for vast numbers of trackpoints // as we are (re)calculating the colour for every point #define POINTS 1 #define LINES 2 /* this is how it knows when you click if you are clicking close to a trackpoint. */ #define TRACKPOINT_SIZE_APPROX 5 #define WAYPOINT_SIZE_APPROX 5 #define MIN_STOP_LENGTH 15 #define MAX_STOP_LENGTH 86400 #define DRAW_ELEVATION_FACTOR 30 /* height of elevation plotting, sort of relative to zoom level ("mpp" that isn't mpp necessarily) */ /* this is multiplied by user-inputted value from 1-100. */ enum { WP_SYMBOL_FILLED_SQUARE, WP_SYMBOL_SQUARE, WP_SYMBOL_CIRCLE, WP_SYMBOL_X, WP_NUM_SYMBOLS }; // See http://developer.gnome.org/pango/stable/PangoMarkupFormat.html typedef enum { FS_XX_SMALL = 0, // 'xx-small' FS_X_SMALL, FS_SMALL, FS_MEDIUM, // DEFAULT FS_LARGE, FS_X_LARGE, FS_XX_LARGE, FS_NUM_SIZES } font_size_t; struct _VikTrwLayer { VikLayer vl; GHashTable *tracks; GHashTable *tracks_iters; GHashTable *routes; GHashTable *routes_iters; GHashTable *waypoints_iters; GHashTable *waypoints; GtkTreeIter tracks_iter, routes_iter, waypoints_iter; gboolean tracks_visible, routes_visible, waypoints_visible; guint8 drawmode; guint8 drawpoints; guint8 drawpoints_size; guint8 drawelevation; guint8 elevation_factor; guint8 drawstops; guint32 stop_length; guint8 drawlines; guint8 drawdirections; guint8 drawdirections_size; guint8 line_thickness; guint8 bg_line_thickness; guint8 wp_symbol; guint8 wp_size; gboolean wp_draw_symbols; font_size_t wp_font_size; gdouble track_draw_speed_factor; GArray *track_gc; GdkGC *track_1color_gc; GdkColor track_color; GdkGC *current_track_gc; // Separate GC for a track's potential new point as drawn via separate method // (compared to the actual track points drawn in the main trw_layer_draw_track function) GdkGC *current_track_newpoint_gc; GdkGC *track_bg_gc; GdkGC *waypoint_gc; GdkGC *waypoint_text_gc; GdkGC *waypoint_bg_gc; GdkFont *waypoint_font; VikTrack *current_track; // ATM shared between new tracks and new routes guint16 ct_x1, ct_y1, ct_x2, ct_y2; gboolean draw_sync_done; gboolean draw_sync_do; VikCoordMode coord_mode; /* wp editing tool */ VikWaypoint *current_wp; gpointer current_wp_id; gboolean moving_wp; gboolean waypoint_rightclick; /* track editing tool */ GList *current_tpl; VikTrack *current_tp_track; gpointer current_tp_id; VikTrwLayerTpwin *tpwin; /* track editing tool -- more specifically, moving tps */ gboolean moving_tp; /* route finder tool */ gboolean route_finder_started; VikCoord route_finder_coord; gboolean route_finder_check_added_track; VikTrack *route_finder_added_track; VikTrack *route_finder_current_track; gboolean route_finder_append; gboolean drawlabels; gboolean drawimages; guint8 image_alpha; GQueue *image_cache; guint8 image_size; guint16 image_cache_size; /* for waypoint text */ PangoLayout *wplabellayout; gboolean has_verified_thumbnails; GtkMenu *wp_right_click_menu; GtkMenu *track_right_click_menu; /* menu */ VikStdLayerMenuItem menu_selection; gint highest_wp_number; }; /* A caached waypoint image. */ typedef struct { GdkPixbuf *pixbuf; gchar *image; /* filename */ } CachedPixbuf; struct DrawingParams { VikViewport *vp; VikTrwLayer *vtl; VikWindow *vw; gdouble xmpp, ympp; guint16 width, height; gdouble cc; // Cosine factor in track directions gdouble ss; // Sine factor in track directions const VikCoord *center; gboolean one_zone, lat_lon; gdouble ce1, ce2, cn1, cn2; }; static gboolean trw_layer_delete_waypoint ( VikTrwLayer *vtl, VikWaypoint *wp ); static void trw_layer_delete_item ( gpointer pass_along[6] ); static void trw_layer_copy_item_cb ( gpointer pass_along[6] ); static void trw_layer_cut_item_cb ( gpointer pass_along[6] ); static void trw_layer_find_maxmin_waypoints ( const gpointer id, const VikWaypoint *w, struct LatLon maxmin[2] ); static void trw_layer_find_maxmin_tracks ( const gpointer id, const VikTrack *trk, struct LatLon maxmin[2] ); static void trw_layer_find_maxmin (VikTrwLayer *vtl, struct LatLon maxmin[2]); static void trw_layer_new_track_gcs ( VikTrwLayer *vtl, VikViewport *vp ); static void trw_layer_free_track_gcs ( VikTrwLayer *vtl ); static void trw_layer_draw_track_cb ( const gpointer id, VikTrack *track, struct DrawingParams *dp ); static void trw_layer_draw_waypoint ( const gpointer id, VikWaypoint *wp, struct DrawingParams *dp ); static void goto_coord ( gpointer *vlp, gpointer vvp, gpointer vl, const VikCoord *coord ); static void trw_layer_goto_track_startpoint ( gpointer pass_along[6] ); static void trw_layer_goto_track_endpoint ( gpointer pass_along[6] ); static void trw_layer_goto_track_max_speed ( gpointer pass_along[6] ); static void trw_layer_goto_track_max_alt ( gpointer pass_along[6] ); static void trw_layer_goto_track_min_alt ( gpointer pass_along[6] ); static void trw_layer_goto_track_center ( gpointer pass_along[6] ); static void trw_layer_merge_by_segment ( gpointer pass_along[6] ); static void trw_layer_merge_by_timestamp ( gpointer pass_along[6] ); static void trw_layer_merge_with_other ( gpointer pass_along[6] ); static void trw_layer_append_track ( gpointer pass_along[6] ); static void trw_layer_split_by_timestamp ( gpointer pass_along[6] ); static void trw_layer_split_by_n_points ( gpointer pass_along[6] ); static void trw_layer_split_at_trackpoint ( gpointer pass_along[6] ); static void trw_layer_split_segments ( gpointer pass_along[6] ); static void trw_layer_delete_points_same_position ( gpointer pass_along[6] ); static void trw_layer_delete_points_same_time ( gpointer pass_along[6] ); static void trw_layer_reverse ( gpointer pass_along[6] ); static void trw_layer_download_map_along_track_cb ( gpointer pass_along[6] ); static void trw_layer_edit_trackpoint ( gpointer pass_along[6] ); static void trw_layer_show_picture ( gpointer pass_along[6] ); static void trw_layer_gps_upload_any ( gpointer pass_along[6] ); static void trw_layer_centerize ( gpointer layer_and_vlp[2] ); static void trw_layer_auto_view ( gpointer layer_and_vlp[2] ); static void trw_layer_export ( gpointer layer_and_vlp[2], const gchar* title, const gchar* default_name, VikTrack* trk, guint file_type ); static void trw_layer_goto_wp ( gpointer layer_and_vlp[2] ); static void trw_layer_new_wp ( gpointer lav[2] ); static void trw_layer_new_track ( gpointer lav[2] ); static void trw_layer_new_route ( gpointer lav[2] ); static void trw_layer_finish_track ( gpointer lav[2] ); static void trw_layer_auto_waypoints_view ( gpointer lav[2] ); static void trw_layer_auto_tracks_view ( gpointer lav[2] ); static void trw_layer_delete_all_tracks ( gpointer lav[2] ); static void trw_layer_delete_tracks_from_selection ( gpointer lav[2] ); static void trw_layer_delete_all_waypoints ( gpointer lav[2] ); static void trw_layer_delete_waypoints_from_selection ( gpointer lav[2] ); static void trw_layer_new_wikipedia_wp_viewport ( gpointer lav[2] ); static void trw_layer_new_wikipedia_wp_layer ( gpointer lav[2] ); #ifdef VIK_CONFIG_GEOTAG static void trw_layer_geotagging_waypoint_mtime_keep ( gpointer pass_along[6] ); static void trw_layer_geotagging_waypoint_mtime_update ( gpointer pass_along[6] ); static void trw_layer_geotagging_track ( gpointer pass_along[6] ); static void trw_layer_geotagging ( gpointer lav[2] ); #endif static void trw_layer_acquire_gps_cb ( gpointer lav[2] ); #ifdef VIK_CONFIG_GOOGLE static void trw_layer_acquire_google_cb ( gpointer lav[2] ); #endif #ifdef VIK_CONFIG_OPENSTREETMAP static void trw_layer_acquire_osm_cb ( gpointer lav[2] ); static void trw_layer_acquire_osm_my_traces_cb ( gpointer lav[2] ); #endif #ifdef VIK_CONFIG_GEOCACHES static void trw_layer_acquire_geocache_cb ( gpointer lav[2] ); #endif #ifdef VIK_CONFIG_GEOTAG static void trw_layer_acquire_geotagged_cb ( gpointer lav[2] ); #endif static void trw_layer_acquire_file_cb ( gpointer lav[2] ); static void trw_layer_gps_upload ( gpointer lav[2] ); // Specific route versions: // Most track handling functions can handle operating on the route list // However these ones are easier in separate functions static void trw_layer_auto_routes_view ( gpointer lav[2] ); static void trw_layer_delete_all_routes ( gpointer lav[2] ); static void trw_layer_delete_routes_from_selection ( gpointer lav[2] ); /* pop-up items */ static void trw_layer_properties_item ( gpointer pass_along[7] ); static void trw_layer_goto_waypoint ( gpointer pass_along[6] ); static void trw_layer_waypoint_gc_webpage ( gpointer pass_along[6] ); static void trw_layer_waypoint_webpage ( gpointer pass_along[6] ); static void trw_layer_realize_waypoint ( gpointer id, VikWaypoint *wp, gpointer pass_along[5] ); static void trw_layer_realize_track ( gpointer id, VikTrack *track, gpointer pass_along[5] ); static void init_drawing_params ( struct DrawingParams *dp, VikTrwLayer *vtl, VikViewport *vp ); static void trw_layer_insert_tp_after_current_tp ( VikTrwLayer *vtl ); static void trw_layer_cancel_current_tp ( VikTrwLayer *vtl, gboolean destroy ); static void trw_layer_tpwin_response ( VikTrwLayer *vtl, gint response ); static void trw_layer_tpwin_init ( VikTrwLayer *vtl ); static gpointer tool_edit_trackpoint_create ( VikWindow *vw, VikViewport *vvp); static gboolean tool_edit_trackpoint_click ( VikTrwLayer *vtl, GdkEventButton *event, gpointer data ); static gboolean tool_edit_trackpoint_move ( VikTrwLayer *vtl, GdkEventMotion *event, gpointer data ); static gboolean tool_edit_trackpoint_release ( VikTrwLayer *vtl, GdkEventButton *event, gpointer data ); static gpointer tool_show_picture_create ( VikWindow *vw, VikViewport *vvp); static gboolean tool_show_picture_click ( VikTrwLayer *vtl, GdkEventButton *event, VikViewport *vvp ); static gpointer tool_edit_waypoint_create ( VikWindow *vw, VikViewport *vvp); static gboolean tool_edit_waypoint_click ( VikTrwLayer *vtl, GdkEventButton *event, gpointer data ); static gboolean tool_edit_waypoint_move ( VikTrwLayer *vtl, GdkEventMotion *event, gpointer data ); static gboolean tool_edit_waypoint_release ( VikTrwLayer *vtl, GdkEventButton *event, gpointer data ); static gpointer tool_new_route_create ( VikWindow *vw, VikViewport *vvp); static gboolean tool_new_route_click ( VikTrwLayer *vtl, GdkEventButton *event, VikViewport *vvp ); static gpointer tool_new_track_create ( VikWindow *vw, VikViewport *vvp); static gboolean tool_new_track_click ( VikTrwLayer *vtl, GdkEventButton *event, VikViewport *vvp ); static VikLayerToolFuncStatus tool_new_track_move ( VikTrwLayer *vtl, GdkEventMotion *event, VikViewport *vvp ); static void tool_new_track_release ( VikTrwLayer *vtl, GdkEventButton *event, VikViewport *vvp ); static gboolean tool_new_track_key_press ( VikTrwLayer *vtl, GdkEventKey *event, VikViewport *vvp ); static gpointer tool_new_waypoint_create ( VikWindow *vw, VikViewport *vvp); static gboolean tool_new_waypoint_click ( VikTrwLayer *vtl, GdkEventButton *event, VikViewport *vvp ); #ifdef VIK_CONFIG_GOOGLE static gpointer tool_route_finder_create ( VikWindow *vw, VikViewport *vvp); static gboolean tool_route_finder_click ( VikTrwLayer *vtl, GdkEventButton *event, VikViewport *vvp ); #endif static void cached_pixbuf_free ( CachedPixbuf *cp ); static gint cached_pixbuf_cmp ( CachedPixbuf *cp, const gchar *name ); static VikTrackpoint *closest_tp_in_five_pixel_interval ( VikTrwLayer *vtl, VikViewport *vvp, gint x, gint y ); static VikWaypoint *closest_wp_in_five_pixel_interval ( VikTrwLayer *vtl, VikViewport *vvp, gint x, gint y ); static void waypoint_convert ( const gpointer id, VikWaypoint *wp, VikCoordMode *dest_mode ); static void track_convert ( const gpointer id, VikTrack *tr, VikCoordMode *dest_mode ); static gchar *highest_wp_number_get(VikTrwLayer *vtl); static void highest_wp_number_reset(VikTrwLayer *vtl); static void highest_wp_number_add_wp(VikTrwLayer *vtl, const gchar *new_wp_name); static void highest_wp_number_remove_wp(VikTrwLayer *vtl, const gchar *old_wp_name); // Note for the following tool GtkRadioActionEntry texts: // the very first text value is an internal name not displayed anywhere // the first N_ text value is the name used for menu entries - hence has an underscore for the keyboard accelerator // * remember not to clash with the values used for VikWindow level tools (Pan, Zoom, Ruler + Select) // the second N_ text value is used for the button tooltip (i.e. generally don't want an underscore here) // the value is always set to 0 and the tool loader in VikWindow will set the actual appropriate value used static VikToolInterface trw_layer_tools[] = { { { "CreateWaypoint", "vik-icon-Create Waypoint", N_("Create _Waypoint"), "W", N_("Create Waypoint"), 0 }, (VikToolConstructorFunc) tool_new_waypoint_create, NULL, NULL, NULL, (VikToolMouseFunc) tool_new_waypoint_click, NULL, NULL, (VikToolKeyFunc) NULL, FALSE, GDK_CURSOR_IS_PIXMAP, &cursor_addwp_pixbuf }, { { "CreateTrack", "vik-icon-Create Track", N_("Create _Track"), "T", N_("Create Track"), 0 }, (VikToolConstructorFunc) tool_new_track_create, NULL, NULL, NULL, (VikToolMouseFunc) tool_new_track_click, (VikToolMouseMoveFunc) tool_new_track_move, (VikToolMouseFunc) tool_new_track_release, (VikToolKeyFunc) tool_new_track_key_press, TRUE, // Still need to handle clicks when in PAN mode to disable the potential trackpoint drawing GDK_CURSOR_IS_PIXMAP, &cursor_addtr_pixbuf }, { { "CreateRoute", "vik-icon-Create Route", N_("Create _Route"), "B", N_("Create Route"), 0 }, (VikToolConstructorFunc) tool_new_route_create, NULL, NULL, NULL, (VikToolMouseFunc) tool_new_route_click, (VikToolMouseMoveFunc) tool_new_track_move, // -\# (VikToolMouseFunc) tool_new_track_release, // -> Reuse these track methods on a route (VikToolKeyFunc) tool_new_track_key_press, // -/# TRUE, // Still need to handle clicks when in PAN mode to disable the potential trackpoint drawing GDK_CURSOR_IS_PIXMAP, &cursor_new_route_pixbuf }, { { "EditWaypoint", "vik-icon-Edit Waypoint", N_("_Edit Waypoint"), "E", N_("Edit Waypoint"), 0 }, (VikToolConstructorFunc) tool_edit_waypoint_create, NULL, NULL, NULL, (VikToolMouseFunc) tool_edit_waypoint_click, (VikToolMouseMoveFunc) tool_edit_waypoint_move, (VikToolMouseFunc) tool_edit_waypoint_release, (VikToolKeyFunc) NULL, FALSE, GDK_CURSOR_IS_PIXMAP, &cursor_edwp_pixbuf }, { { "EditTrackpoint", "vik-icon-Edit Trackpoint", N_("Edit Trac_kpoint"), "K", N_("Edit Trackpoint"), 0 }, (VikToolConstructorFunc) tool_edit_trackpoint_create, NULL, NULL, NULL, (VikToolMouseFunc) tool_edit_trackpoint_click, (VikToolMouseMoveFunc) tool_edit_trackpoint_move, (VikToolMouseFunc) tool_edit_trackpoint_release, (VikToolKeyFunc) NULL, FALSE, GDK_CURSOR_IS_PIXMAP, &cursor_edtr_pixbuf }, { { "ShowPicture", "vik-icon-Show Picture", N_("Show P_icture"), "I", N_("Show Picture"), 0 }, (VikToolConstructorFunc) tool_show_picture_create, NULL, NULL, NULL, (VikToolMouseFunc) tool_show_picture_click, NULL, NULL, (VikToolKeyFunc) NULL, FALSE, GDK_CURSOR_IS_PIXMAP, &cursor_showpic_pixbuf }, #ifdef VIK_CONFIG_GOOGLE { { "RouteFinder", "vik-icon-Route Finder", N_("Route _Finder"), "F", N_("Route Finder"), 0 }, (VikToolConstructorFunc) tool_route_finder_create, NULL, NULL, NULL, (VikToolMouseFunc) tool_route_finder_click, NULL, NULL, (VikToolKeyFunc) NULL, FALSE, GDK_CURSOR_IS_PIXMAP, &cursor_route_finder_pixbuf }, #endif }; enum { TOOL_CREATE_WAYPOINT=0, TOOL_CREATE_TRACK, TOOL_CREATE_ROUTE, TOOL_EDIT_WAYPOINT, TOOL_EDIT_TRACKPOINT, TOOL_SHOW_PICTURE, #ifdef VIK_CONFIG_GOOGLE TOOL_ROUTE_FINDER, #endif NUM_TOOLS }; /****** PARAMETERS ******/ static gchar *params_groups[] = { N_("Waypoints"), N_("Tracks"), N_("Waypoint Images") }; enum { GROUP_WAYPOINTS, GROUP_TRACKS, GROUP_IMAGES }; static gchar *params_drawmodes[] = { N_("Draw by Track"), N_("Draw by Speed"), N_("All Tracks Same Color"), NULL }; static gchar *params_wpsymbols[] = { N_("Filled Square"), N_("Square"), N_("Circle"), N_("X"), 0 }; #define MIN_POINT_SIZE 2 #define MAX_POINT_SIZE 10 #define MIN_ARROW_SIZE 3 #define MAX_ARROW_SIZE 20 static VikLayerParamScale params_scales[] = { /* min max step digits */ { 1, 10, 1, 0 }, /* line_thickness */ { 0, 100, 1, 0 }, /* track draw speed factor */ { 1.0, 100.0, 1.0, 2 }, /* UNUSED */ /* 5 * step == how much to turn */ { 16, 128, 4, 0 }, // 3: image_size - NB step size ignored when an HSCALE used { 0, 255, 5, 0 }, // 4: image alpha - " " " " { 5, 500, 5, 0 }, // 5: image cache_size - " " { 0, 8, 1, 0 }, // 6: Background line thickness { 1, 64, 1, 0 }, /* wpsize */ { MIN_STOP_LENGTH, MAX_STOP_LENGTH, 1, 0 }, /* stop_length */ { 1, 100, 1, 0 }, // 9: elevation factor { MIN_POINT_SIZE, MAX_POINT_SIZE, 1, 0 }, // 10: track point size { MIN_ARROW_SIZE, MAX_ARROW_SIZE, 1, 0 }, // 11: direction arrow size }; static gchar* params_font_sizes[] = { N_("Extra Extra Small"), N_("Extra Small"), N_("Small"), N_("Medium"), N_("Large"), N_("Extra Large"), N_("Extra Extra Large"), NULL }; VikLayerParam trw_layer_params[] = { { "tracks_visible", VIK_LAYER_PARAM_BOOLEAN, VIK_LAYER_NOT_IN_PROPERTIES, NULL, 0, NULL, NULL }, { "waypoints_visible", VIK_LAYER_PARAM_BOOLEAN, VIK_LAYER_NOT_IN_PROPERTIES, NULL, 0, NULL, NULL }, { "routes_visible", VIK_LAYER_PARAM_BOOLEAN, VIK_LAYER_NOT_IN_PROPERTIES, NULL, 0, NULL, NULL }, { "drawmode", VIK_LAYER_PARAM_UINT, GROUP_TRACKS, N_("Track Drawing Mode:"), VIK_LAYER_WIDGET_COMBOBOX, params_drawmodes, NULL, NULL }, { "trackcolor", VIK_LAYER_PARAM_COLOR, GROUP_TRACKS, N_("All Tracks Color:"), VIK_LAYER_WIDGET_COLOR, NULL, NULL, N_("The color used when 'All Tracks Same Color' drawing mode is selected") }, { "drawlines", VIK_LAYER_PARAM_BOOLEAN, GROUP_TRACKS, N_("Draw Track Lines"), VIK_LAYER_WIDGET_CHECKBUTTON, NULL, NULL, NULL }, { "line_thickness", VIK_LAYER_PARAM_UINT, GROUP_TRACKS, N_("Track Thickness:"), VIK_LAYER_WIDGET_SPINBUTTON, ¶ms_scales[0], NULL, NULL }, { "drawdirections", VIK_LAYER_PARAM_BOOLEAN, GROUP_TRACKS, N_("Draw Track Direction"), VIK_LAYER_WIDGET_CHECKBUTTON, NULL, NULL, NULL }, { "trkdirectionsize", VIK_LAYER_PARAM_UINT, GROUP_TRACKS, N_("Direction Size:"), VIK_LAYER_WIDGET_SPINBUTTON, ¶ms_scales[11], NULL, NULL }, { "drawpoints", VIK_LAYER_PARAM_BOOLEAN, GROUP_TRACKS, N_("Draw Trackpoints"), VIK_LAYER_WIDGET_CHECKBUTTON, NULL, NULL, NULL }, { "trkpointsize", VIK_LAYER_PARAM_UINT, GROUP_TRACKS, N_("Trackpoint Size:"), VIK_LAYER_WIDGET_SPINBUTTON, ¶ms_scales[10], NULL, NULL }, { "drawelevation", VIK_LAYER_PARAM_BOOLEAN, GROUP_TRACKS, N_("Draw Elevation"), VIK_LAYER_WIDGET_CHECKBUTTON, NULL, NULL, NULL }, { "elevation_factor", VIK_LAYER_PARAM_UINT, GROUP_TRACKS, N_("Draw Elevation Height %:"), VIK_LAYER_WIDGET_HSCALE, ¶ms_scales[9], NULL, NULL }, { "drawstops", VIK_LAYER_PARAM_BOOLEAN, GROUP_TRACKS, N_("Draw Stops"), VIK_LAYER_WIDGET_CHECKBUTTON, NULL, NULL, N_("Whether to draw a marker when trackpoints are at the same position but over the minimum stop length apart in time") }, { "stop_length", VIK_LAYER_PARAM_UINT, GROUP_TRACKS, N_("Min Stop Length (seconds):"), VIK_LAYER_WIDGET_SPINBUTTON, ¶ms_scales[8], NULL, NULL }, { "bg_line_thickness", VIK_LAYER_PARAM_UINT, GROUP_TRACKS, N_("Track BG Thickness:"), VIK_LAYER_WIDGET_SPINBUTTON, ¶ms_scales[6], NULL, NULL}, { "trackbgcolor", VIK_LAYER_PARAM_COLOR, GROUP_TRACKS, N_("Track Background Color"), VIK_LAYER_WIDGET_COLOR, NULL, NULL, NULL }, { "speed_factor", VIK_LAYER_PARAM_DOUBLE, GROUP_TRACKS, N_("Draw by Speed Factor (%):"), VIK_LAYER_WIDGET_HSCALE, ¶ms_scales[1], NULL, N_("The percentage factor away from the average speed determining the color used") }, { "drawlabels", VIK_LAYER_PARAM_BOOLEAN, GROUP_WAYPOINTS, N_("Draw Labels"), VIK_LAYER_WIDGET_CHECKBUTTON, NULL, NULL, NULL }, { "wpfontsize", VIK_LAYER_PARAM_UINT, GROUP_WAYPOINTS, N_("Waypoint Font Size:"), VIK_LAYER_WIDGET_COMBOBOX, params_font_sizes, NULL, NULL }, { "wpcolor", VIK_LAYER_PARAM_COLOR, GROUP_WAYPOINTS, N_("Waypoint Color:"), VIK_LAYER_WIDGET_COLOR, NULL, NULL, NULL }, { "wptextcolor", VIK_LAYER_PARAM_COLOR, GROUP_WAYPOINTS, N_("Waypoint Text:"), VIK_LAYER_WIDGET_COLOR, NULL, NULL, NULL }, { "wpbgcolor", VIK_LAYER_PARAM_COLOR, GROUP_WAYPOINTS, N_("Background:"), VIK_LAYER_WIDGET_COLOR, NULL, NULL, NULL }, { "wpbgand", VIK_LAYER_PARAM_BOOLEAN, GROUP_WAYPOINTS, N_("Fake BG Color Translucency:"), VIK_LAYER_WIDGET_CHECKBUTTON, NULL, NULL, NULL }, { "wpsymbol", VIK_LAYER_PARAM_UINT, GROUP_WAYPOINTS, N_("Waypoint marker:"), VIK_LAYER_WIDGET_COMBOBOX, params_wpsymbols, NULL, NULL }, { "wpsize", VIK_LAYER_PARAM_UINT, GROUP_WAYPOINTS, N_("Waypoint size:"), VIK_LAYER_WIDGET_SPINBUTTON, ¶ms_scales[7], NULL, NULL }, { "wpsyms", VIK_LAYER_PARAM_BOOLEAN, GROUP_WAYPOINTS, N_("Draw Waypoint Symbols:"), VIK_LAYER_WIDGET_CHECKBUTTON, NULL, NULL, NULL }, { "drawimages", VIK_LAYER_PARAM_BOOLEAN, GROUP_IMAGES, N_("Draw Waypoint Images"), VIK_LAYER_WIDGET_CHECKBUTTON, NULL, NULL, NULL }, { "image_size", VIK_LAYER_PARAM_UINT, GROUP_IMAGES, N_("Image Size (pixels):"), VIK_LAYER_WIDGET_HSCALE, ¶ms_scales[3], NULL, NULL }, { "image_alpha", VIK_LAYER_PARAM_UINT, GROUP_IMAGES, N_("Image Alpha:"), VIK_LAYER_WIDGET_HSCALE, ¶ms_scales[4], NULL, NULL }, { "image_cache_size", VIK_LAYER_PARAM_UINT, GROUP_IMAGES, N_("Image Memory Cache Size:"), VIK_LAYER_WIDGET_HSCALE, ¶ms_scales[5], NULL, NULL }, }; // ENUMERATION MUST BE IN THE SAME ORDER AS THE NAMED PARAMS ABOVE enum { // Sublayer visibilities PARAM_TV, PARAM_WV, PARAM_RV, // Tracks PARAM_DM, PARAM_TC, PARAM_DL, PARAM_LT, PARAM_DD, PARAM_DDS, PARAM_DP, PARAM_DPS, PARAM_DE, PARAM_EF, PARAM_DS, PARAM_SL, PARAM_BLT, PARAM_TBGC, PARAM_TDSF, // Waypoints PARAM_DLA, PARAM_WPFONTSIZE, PARAM_WPC, PARAM_WPTC, PARAM_WPBC, PARAM_WPBA, PARAM_WPSYM, PARAM_WPSIZE, PARAM_WPSYMS, // WP images PARAM_DI, PARAM_IS, PARAM_IA, PARAM_ICS, NUM_PARAMS }; /*** TO ADD A PARAM: *** 1) Add to trw_layer_params and enumeration *** 2) Handle in get_param & set_param (presumably adding on to VikTrwLayer struct) ***/ /****** END PARAMETERS ******/ static VikTrwLayer* trw_layer_new ( gint drawmode ); /* Layer Interface function definitions */ static VikTrwLayer* trw_layer_create ( VikViewport *vp ); static void trw_layer_realize ( VikTrwLayer *vtl, VikTreeview *vt, GtkTreeIter *layer_iter ); static void trw_layer_post_read ( VikTrwLayer *vtl, GtkWidget *vvp ); static void trw_layer_free ( VikTrwLayer *trwlayer ); static void trw_layer_draw ( VikTrwLayer *l, gpointer data ); static void trw_layer_change_coord_mode ( VikTrwLayer *vtl, VikCoordMode dest_mode ); static void trw_layer_set_menu_selection ( VikTrwLayer *vtl, guint16 ); static guint16 trw_layer_get_menu_selection ( VikTrwLayer *vtl ); static void trw_layer_add_menu_items ( VikTrwLayer *vtl, GtkMenu *menu, gpointer vlp ); static gboolean trw_layer_sublayer_add_menu_items ( VikTrwLayer *l, GtkMenu *menu, gpointer vlp, gint subtype, gpointer sublayer, GtkTreeIter *iter, VikViewport *vvp ); static const gchar* trw_layer_sublayer_rename_request ( VikTrwLayer *l, const gchar *newname, gpointer vlp, gint subtype, gpointer sublayer, GtkTreeIter *iter ); static gboolean trw_layer_sublayer_toggle_visible ( VikTrwLayer *l, gint subtype, gpointer sublayer ); static const gchar* trw_layer_layer_tooltip ( VikTrwLayer *vtl ); static const gchar* trw_layer_sublayer_tooltip ( VikTrwLayer *l, gint subtype, gpointer sublayer ); static gboolean trw_layer_selected ( VikTrwLayer *l, gint subtype, gpointer sublayer, gint type, gpointer vlp ); static void trw_layer_marshall ( VikTrwLayer *vtl, guint8 **data, gint *len ); static VikTrwLayer *trw_layer_unmarshall ( guint8 *data, gint len, VikViewport *vvp ); static gboolean trw_layer_set_param ( VikTrwLayer *vtl, guint16 id, VikLayerParamData data, VikViewport *vp, gboolean is_file_operation ); static VikLayerParamData trw_layer_get_param ( VikTrwLayer *vtl, guint16 id, gboolean is_file_operation ); static void trw_layer_del_item ( VikTrwLayer *vtl, gint subtype, gpointer sublayer ); static void trw_layer_cut_item ( VikTrwLayer *vtl, gint subtype, gpointer sublayer ); static void trw_layer_copy_item ( VikTrwLayer *vtl, gint subtype, gpointer sublayer, guint8 **item, guint *len ); static gboolean trw_layer_paste_item ( VikTrwLayer *vtl, gint subtype, guint8 *item, guint len ); static void trw_layer_free_copied_item ( gint subtype, gpointer item ); static void trw_layer_drag_drop_request ( VikTrwLayer *vtl_src, VikTrwLayer *vtl_dest, GtkTreeIter *src_item_iter, GtkTreePath *dest_path ); static gboolean trw_layer_select_click ( VikTrwLayer *vtl, GdkEventButton *event, VikViewport *vvp, tool_ed_t *t ); static gboolean trw_layer_select_move ( VikTrwLayer *vtl, GdkEventButton *event, VikViewport *vvp, tool_ed_t *t ); static gboolean trw_layer_select_release ( VikTrwLayer *vtl, GdkEventButton *event, VikViewport *vvp, tool_ed_t *t ); static gboolean trw_layer_show_selected_viewport_menu ( VikTrwLayer *vtl, GdkEventButton *event, VikViewport *vvp ); /* End Layer Interface function definitions */ VikLayerInterface vik_trw_layer_interface = { "TrackWaypoint", N_("TrackWaypoint"), "Y", &viktrwlayer_pixbuf, trw_layer_tools, sizeof(trw_layer_tools) / sizeof(VikToolInterface), trw_layer_params, NUM_PARAMS, params_groups, /* params_groups */ sizeof(params_groups)/sizeof(params_groups[0]), /* number of groups */ VIK_MENU_ITEM_ALL, (VikLayerFuncCreate) trw_layer_create, (VikLayerFuncRealize) trw_layer_realize, (VikLayerFuncPostRead) trw_layer_post_read, (VikLayerFuncFree) trw_layer_free, (VikLayerFuncProperties) NULL, (VikLayerFuncDraw) trw_layer_draw, (VikLayerFuncChangeCoordMode) trw_layer_change_coord_mode, (VikLayerFuncSetMenuItemsSelection) trw_layer_set_menu_selection, (VikLayerFuncGetMenuItemsSelection) trw_layer_get_menu_selection, (VikLayerFuncAddMenuItems) trw_layer_add_menu_items, (VikLayerFuncSublayerAddMenuItems) trw_layer_sublayer_add_menu_items, (VikLayerFuncSublayerRenameRequest) trw_layer_sublayer_rename_request, (VikLayerFuncSublayerToggleVisible) trw_layer_sublayer_toggle_visible, (VikLayerFuncSublayerTooltip) trw_layer_sublayer_tooltip, (VikLayerFuncLayerTooltip) trw_layer_layer_tooltip, (VikLayerFuncLayerSelected) trw_layer_selected, (VikLayerFuncMarshall) trw_layer_marshall, (VikLayerFuncUnmarshall) trw_layer_unmarshall, (VikLayerFuncSetParam) trw_layer_set_param, (VikLayerFuncGetParam) trw_layer_get_param, (VikLayerFuncReadFileData) a_gpspoint_read_file, (VikLayerFuncWriteFileData) a_gpspoint_write_file, (VikLayerFuncDeleteItem) trw_layer_del_item, (VikLayerFuncCutItem) trw_layer_cut_item, (VikLayerFuncCopyItem) trw_layer_copy_item, (VikLayerFuncPasteItem) trw_layer_paste_item, (VikLayerFuncFreeCopiedItem) trw_layer_free_copied_item, (VikLayerFuncDragDropRequest) trw_layer_drag_drop_request, (VikLayerFuncSelectClick) trw_layer_select_click, (VikLayerFuncSelectMove) trw_layer_select_move, (VikLayerFuncSelectRelease) trw_layer_select_release, (VikLayerFuncSelectedViewportMenu) trw_layer_show_selected_viewport_menu, }; GType vik_trw_layer_get_type () { static GType vtl_type = 0; if (!vtl_type) { static const GTypeInfo vtl_info = { sizeof (VikTrwLayerClass), NULL, /* base_init */ NULL, /* base_finalize */ NULL, /* class init */ NULL, /* class_finalize */ NULL, /* class_data */ sizeof (VikTrwLayer), 0, NULL /* instance init */ }; vtl_type = g_type_register_static ( VIK_LAYER_TYPE, "VikTrwLayer", &vtl_info, 0 ); } return vtl_type; } static void trw_layer_del_item ( VikTrwLayer *vtl, gint subtype, gpointer sublayer ) { static gpointer pass_along[6]; if (!sublayer) { return; } pass_along[0] = vtl; pass_along[1] = NULL; pass_along[2] = GINT_TO_POINTER (subtype); pass_along[3] = sublayer; pass_along[4] = GINT_TO_POINTER (1); // Confirm delete request pass_along[5] = NULL; trw_layer_delete_item ( pass_along ); } static void trw_layer_cut_item ( VikTrwLayer *vtl, gint subtype, gpointer sublayer ) { static gpointer pass_along[6]; if (!sublayer) { return; } pass_along[0] = vtl; pass_along[1] = NULL; pass_along[2] = GINT_TO_POINTER (subtype); pass_along[3] = sublayer; pass_along[4] = GINT_TO_POINTER (0); // No delete confirmation needed for auto delete pass_along[5] = NULL; trw_layer_copy_item_cb(pass_along); trw_layer_cut_item_cb(pass_along); } static void trw_layer_copy_item_cb ( gpointer pass_along[6]) { VikTrwLayer *vtl = VIK_TRW_LAYER(pass_along[0]); gint subtype = GPOINTER_TO_INT (pass_along[2]); gpointer * sublayer = pass_along[3]; guint8 *data = NULL; guint len; trw_layer_copy_item( vtl, subtype, sublayer, &data, &len); if (data) { const gchar* name; if ( subtype == VIK_TRW_LAYER_SUBLAYER_WAYPOINT ) { VikWaypoint *wp = g_hash_table_lookup ( vtl->waypoints, sublayer); if ( wp && wp->name ) name = wp->name; else name = NULL; // Broken :( } else if ( subtype == VIK_TRW_LAYER_SUBLAYER_TRACK ) { VikTrack *trk = g_hash_table_lookup ( vtl->tracks, sublayer); if ( trk && trk->name ) name = trk->name; else name = NULL; // Broken :( } else { VikTrack *trk = g_hash_table_lookup ( vtl->routes, sublayer); if ( trk && trk->name ) name = trk->name; else name = NULL; // Broken :( } a_clipboard_copy( VIK_CLIPBOARD_DATA_SUBLAYER, VIK_LAYER_TRW, subtype, len, name, data); } } static void trw_layer_cut_item_cb ( gpointer pass_along[6]) { trw_layer_copy_item_cb(pass_along); pass_along[4] = GINT_TO_POINTER (0); // Never need to confirm automatic delete trw_layer_delete_item(pass_along); } static void trw_layer_paste_item_cb ( gpointer pass_along[6]) { // Slightly cheating method, routing via the panels capability a_clipboard_paste (VIK_LAYERS_PANEL(pass_along[1])); } static void trw_layer_copy_item ( VikTrwLayer *vtl, gint subtype, gpointer sublayer, guint8 **item, guint *len ) { guint8 *id; guint il; if (!sublayer) { *item = NULL; return; } GByteArray *ba = g_byte_array_new (); if ( subtype == VIK_TRW_LAYER_SUBLAYER_WAYPOINT ) { vik_waypoint_marshall ( g_hash_table_lookup ( vtl->waypoints, sublayer ), &id, &il ); } else if ( subtype == VIK_TRW_LAYER_SUBLAYER_TRACK ) { vik_track_marshall ( g_hash_table_lookup ( vtl->tracks, sublayer ), &id, &il ); } else { vik_track_marshall ( g_hash_table_lookup ( vtl->routes, sublayer ), &id, &il ); } g_byte_array_append ( ba, id, il ); g_free(id); *len = ba->len; *item = ba->data; } static gboolean trw_layer_paste_item ( VikTrwLayer *vtl, gint subtype, guint8 *item, guint len ) { if ( !item ) return FALSE; gchar *name; if ( subtype == VIK_TRW_LAYER_SUBLAYER_WAYPOINT ) { VikWaypoint *w; w = vik_waypoint_unmarshall ( item, len ); // When copying - we'll create a new name based on the original name = trw_layer_new_unique_sublayer_name(vtl, VIK_TRW_LAYER_SUBLAYER_WAYPOINT, w->name); vik_trw_layer_add_waypoint ( vtl, name, w ); waypoint_convert (NULL, w, &vtl->coord_mode); // Consider if redraw necessary for the new item if ( vtl->vl.visible && vtl->waypoints_visible && w->visible ) vik_layer_emit_update ( VIK_LAYER(vtl) ); return TRUE; } if ( subtype == VIK_TRW_LAYER_SUBLAYER_TRACK ) { VikTrack *t; t = vik_track_unmarshall ( item, len ); // When copying - we'll create a new name based on the original name = trw_layer_new_unique_sublayer_name(vtl, VIK_TRW_LAYER_SUBLAYER_TRACK, t->name); vik_trw_layer_add_track ( vtl, name, t ); vik_track_convert (t, vtl->coord_mode); // Consider if redraw necessary for the new item if ( vtl->vl.visible && vtl->tracks_visible && t->visible ) vik_layer_emit_update ( VIK_LAYER(vtl) ); return TRUE; } if ( subtype == VIK_TRW_LAYER_SUBLAYER_ROUTE ) { VikTrack *t; t = vik_track_unmarshall ( item, len ); // When copying - we'll create a new name based on the original name = trw_layer_new_unique_sublayer_name(vtl, VIK_TRW_LAYER_SUBLAYER_ROUTE, t->name); vik_trw_layer_add_route ( vtl, name, t ); vik_track_convert (t, vtl->coord_mode); // Consider if redraw necessary for the new item if ( vtl->vl.visible && vtl->routes_visible && t->visible ) vik_layer_emit_update ( VIK_LAYER(vtl) ); return TRUE; } return FALSE; } static void trw_layer_free_copied_item ( gint subtype, gpointer item ) { if (item) { g_free(item); } } static gboolean trw_layer_set_param ( VikTrwLayer *vtl, guint16 id, VikLayerParamData data, VikViewport *vp, gboolean is_file_operation ) { switch ( id ) { case PARAM_TV: vtl->tracks_visible = data.b; break; case PARAM_WV: vtl->waypoints_visible = data.b; break; case PARAM_RV: vtl->routes_visible = data.b; break; case PARAM_DM: vtl->drawmode = data.u; break; case PARAM_TC: vtl->track_color = data.c; trw_layer_new_track_gcs ( vtl, vp ); break; case PARAM_DP: vtl->drawpoints = data.b; break; case PARAM_DPS: if ( data.u >= MIN_POINT_SIZE && data.u <= MAX_POINT_SIZE ) vtl->drawpoints_size = data.u; break; case PARAM_DE: vtl->drawelevation = data.b; break; case PARAM_DS: vtl->drawstops = data.b; break; case PARAM_DL: vtl->drawlines = data.b; break; case PARAM_DD: vtl->drawdirections = data.b; break; case PARAM_DDS: if ( data.u >= MIN_ARROW_SIZE && data.u <= MAX_ARROW_SIZE ) vtl->drawdirections_size = data.u; break; case PARAM_SL: if ( data.u >= MIN_STOP_LENGTH && data.u <= MAX_STOP_LENGTH ) vtl->stop_length = data.u; break; case PARAM_EF: if ( data.u >= 1 && data.u <= 100 ) vtl->elevation_factor = data.u; break; case PARAM_LT: if ( data.u > 0 && data.u < 15 && data.u != vtl->line_thickness ) { vtl->line_thickness = data.u; trw_layer_new_track_gcs ( vtl, vp ); } break; case PARAM_BLT: if ( data.u <= 8 && data.u != vtl->bg_line_thickness ) { vtl->bg_line_thickness = data.u; trw_layer_new_track_gcs ( vtl, vp ); } break; case PARAM_TBGC: gdk_gc_set_rgb_fg_color(vtl->track_bg_gc, &(data.c)); break; case PARAM_TDSF: vtl->track_draw_speed_factor = data.d; break; case PARAM_DLA: vtl->drawlabels = data.b; break; case PARAM_DI: vtl->drawimages = data.b; break; case PARAM_IS: if ( data.u != vtl->image_size ) { vtl->image_size = data.u; g_list_foreach ( vtl->image_cache->head, (GFunc) cached_pixbuf_free, NULL ); g_queue_free ( vtl->image_cache ); vtl->image_cache = g_queue_new (); } break; case PARAM_IA: vtl->image_alpha = data.u; break; case PARAM_ICS: vtl->image_cache_size = data.u; while ( vtl->image_cache->length > vtl->image_cache_size ) /* if shrinking cache_size, free pixbuf ASAP */ cached_pixbuf_free ( g_queue_pop_tail ( vtl->image_cache ) ); break; case PARAM_WPC: gdk_gc_set_rgb_fg_color(vtl->waypoint_gc, &(data.c)); break; case PARAM_WPTC: gdk_gc_set_rgb_fg_color(vtl->waypoint_text_gc, &(data.c)); break; case PARAM_WPBC: gdk_gc_set_rgb_fg_color(vtl->waypoint_bg_gc, &(data.c)); break; case PARAM_WPBA: gdk_gc_set_function(vtl->waypoint_bg_gc, data.b ? GDK_AND : GDK_COPY ); break; case PARAM_WPSYM: if ( data.u < WP_NUM_SYMBOLS ) vtl->wp_symbol = data.u; break; case PARAM_WPSIZE: if ( data.u > 0 && data.u <= 64 ) vtl->wp_size = data.u; break; case PARAM_WPSYMS: vtl->wp_draw_symbols = data.b; break; case PARAM_WPFONTSIZE: if ( data.u < FS_NUM_SIZES ) vtl->wp_font_size = data.u; break; } return TRUE; } static VikLayerParamData trw_layer_get_param ( VikTrwLayer *vtl, guint16 id, gboolean is_file_operation ) { VikLayerParamData rv; switch ( id ) { case PARAM_TV: rv.b = vtl->tracks_visible; break; case PARAM_WV: rv.b = vtl->waypoints_visible; break; case PARAM_RV: rv.b = vtl->routes_visible; break; case PARAM_DM: rv.u = vtl->drawmode; break; case PARAM_TC: rv.c = vtl->track_color; break; case PARAM_DP: rv.b = vtl->drawpoints; break; case PARAM_DPS: rv.u = vtl->drawpoints_size; break; case PARAM_DE: rv.b = vtl->drawelevation; break; case PARAM_EF: rv.u = vtl->elevation_factor; break; case PARAM_DS: rv.b = vtl->drawstops; break; case PARAM_SL: rv.u = vtl->stop_length; break; case PARAM_DL: rv.b = vtl->drawlines; break; case PARAM_DD: rv.b = vtl->drawdirections; break; case PARAM_DDS: rv.u = vtl->drawdirections_size; break; case PARAM_LT: rv.u = vtl->line_thickness; break; case PARAM_BLT: rv.u = vtl->bg_line_thickness; break; case PARAM_DLA: rv.b = vtl->drawlabels; break; case PARAM_DI: rv.b = vtl->drawimages; break; case PARAM_TBGC: vik_gc_get_fg_color(vtl->track_bg_gc, &(rv.c)); break; case PARAM_TDSF: rv.d = vtl->track_draw_speed_factor; break; case PARAM_IS: rv.u = vtl->image_size; break; case PARAM_IA: rv.u = vtl->image_alpha; break; case PARAM_ICS: rv.u = vtl->image_cache_size; break; case PARAM_WPC: vik_gc_get_fg_color(vtl->waypoint_gc, &(rv.c)); break; case PARAM_WPTC: vik_gc_get_fg_color(vtl->waypoint_text_gc, &(rv.c)); break; case PARAM_WPBC: vik_gc_get_fg_color(vtl->waypoint_bg_gc, &(rv.c)); break; case PARAM_WPBA: rv.b = (vik_gc_get_function(vtl->waypoint_bg_gc)==GDK_AND); break; case PARAM_WPSYM: rv.u = vtl->wp_symbol; break; case PARAM_WPSIZE: rv.u = vtl->wp_size; break; case PARAM_WPSYMS: rv.b = vtl->wp_draw_symbols; break; case PARAM_WPFONTSIZE: rv.u = vtl->wp_font_size; break; } return rv; } static void trw_layer_marshall( VikTrwLayer *vtl, guint8 **data, gint *len ) { guint8 *pd; gint pl; *data = NULL; // Use byte arrays to store sublayer data // much like done elsewhere e.g. vik_layer_marshall_params() GByteArray *ba = g_byte_array_new ( ); guint8 *sl_data; guint sl_len; guint object_length; guint subtype; // store: // the length of the item // the sublayer type of item // the the actual item #define tlm_append(object_pointer, size, type) \ subtype = (type); \ object_length = (size); \ g_byte_array_append ( ba, (guint8 *)&object_length, sizeof(object_length) ); \ g_byte_array_append ( ba, (guint8 *)&subtype, sizeof(subtype) ); \ g_byte_array_append ( ba, (object_pointer), object_length ); // Layer parameters first vik_layer_marshall_params(VIK_LAYER(vtl), &pd, &pl); g_byte_array_append ( ba, (guint8 *)&pl, sizeof(pl) ); \ g_byte_array_append ( ba, pd, pl ); g_free ( pd ); // Now sublayer data GHashTableIter iter; gpointer key, value; // Waypoints g_hash_table_iter_init ( &iter, vtl->waypoints ); while ( g_hash_table_iter_next (&iter, &key, &value) ) { vik_waypoint_marshall ( VIK_WAYPOINT(value), &sl_data, &sl_len ); tlm_append ( sl_data, sl_len, VIK_TRW_LAYER_SUBLAYER_WAYPOINT ); g_free ( sl_data ); } // Tracks g_hash_table_iter_init ( &iter, vtl->tracks ); while ( g_hash_table_iter_next (&iter, &key, &value) ) { vik_track_marshall ( VIK_TRACK(value), &sl_data, &sl_len ); tlm_append ( sl_data, sl_len, VIK_TRW_LAYER_SUBLAYER_TRACK ); g_free ( sl_data ); } // Routes g_hash_table_iter_init ( &iter, vtl->routes ); while ( g_hash_table_iter_next (&iter, &key, &value) ) { vik_track_marshall ( VIK_TRACK(value), &sl_data, &sl_len ); tlm_append ( sl_data, sl_len, VIK_TRW_LAYER_SUBLAYER_ROUTE ); g_free ( sl_data ); } #undef tlm_append *data = ba->data; *len = ba->len; } static VikTrwLayer *trw_layer_unmarshall( guint8 *data, gint len, VikViewport *vvp ) { VikTrwLayer *vtl = VIK_TRW_LAYER(vik_layer_create ( VIK_LAYER_TRW, vvp, NULL, FALSE )); gint pl; gint consumed_length; // First the overall layer parameters memcpy(&pl, data, sizeof(pl)); data += sizeof(pl); vik_layer_unmarshall_params ( VIK_LAYER(vtl), data, pl, vvp ); data += pl; consumed_length = pl; const gint sizeof_len_and_subtype = sizeof(gint) + sizeof(gint); #define tlm_size (*(gint *)data) // See marshalling above for order of how this is written #define tlm_next \ data += sizeof_len_and_subtype + tlm_size; // Now the individual sublayers: while ( *data && consumed_length < len ) { // Normally four extra bytes at the end of the datastream // (since it's a GByteArray and that's where it's length is stored) // So only attempt read when there's an actual block of sublayer data if ( consumed_length + tlm_size < len ) { // Reuse pl to read the subtype from the data stream memcpy(&pl, data+sizeof(gint), sizeof(pl)); if ( pl == VIK_TRW_LAYER_SUBLAYER_TRACK ) { VikTrack *trk = vik_track_unmarshall ( data + sizeof_len_and_subtype, 0 ); gchar *name = g_strdup ( trk->name ); vik_trw_layer_add_track ( vtl, name, trk ); g_free ( name ); } if ( pl == VIK_TRW_LAYER_SUBLAYER_WAYPOINT ) { VikWaypoint *wp = vik_waypoint_unmarshall ( data + sizeof_len_and_subtype, 0 ); gchar *name = g_strdup ( wp->name ); vik_trw_layer_add_waypoint ( vtl, name, wp ); g_free ( name ); } if ( pl == VIK_TRW_LAYER_SUBLAYER_ROUTE ) { VikTrack *trk = vik_track_unmarshall ( data + sizeof_len_and_subtype, 0 ); gchar *name = g_strdup ( trk->name ); vik_trw_layer_add_route ( vtl, name, trk ); g_free ( name ); } } consumed_length += tlm_size + sizeof_len_and_subtype; tlm_next; } //g_debug ("consumed_length %d vs len %d", consumed_length, len); return vtl; } // Keep interesting hash function at least visible /* static guint strcase_hash(gconstpointer v) { // 31 bit hash function int i; const gchar *t = v; gchar s[128]; // malloc is too slow for reading big files gchar *p = s; for (i = 0; (i < (sizeof(s)- 1)) && t[i]; i++) p[i] = toupper(t[i]); p[i] = '\0'; p = s; guint32 h = *p; if (h) { for (p += 1; *p != '\0'; p++) h = (h << 5) - h + *p; } return h; } */ static VikTrwLayer* trw_layer_new ( gint drawmode ) { VikTrwLayer *rv = VIK_TRW_LAYER ( g_object_new ( VIK_TRW_LAYER_TYPE, NULL ) ); vik_layer_set_type ( VIK_LAYER(rv), VIK_LAYER_TRW ); // It's not entirely clear the benefits of hash tables usage here - possibly the simplicity of first implementation for unique names // Now with the name of the item stored as part of the item - these tables are effectively straightforward lists // For this reworking I've choosen to keep the use of hash tables since for the expected data sizes // - even many hundreds of waypoints and tracks is quite small in the grand scheme of things, // and with normal PC processing capabilities - it has negligibile performance impact // This also minimized the amount of rework - as the management of the hash tables already exists. // The hash tables are indexed by simple integers acting as a UUID hash, which again shouldn't affect performance much // we have to maintain a uniqueness (as before when multiple names where not allowed), // this is to ensure it refers to the same item in the data structures used on the viewport and on the layers panel rv->waypoints = g_hash_table_new_full ( g_direct_hash, g_direct_equal, NULL, (GDestroyNotify) vik_waypoint_free ); rv->waypoints_iters = g_hash_table_new_full ( g_direct_hash, g_direct_equal, NULL, g_free ); rv->tracks = g_hash_table_new_full ( g_direct_hash, g_direct_equal, NULL, (GDestroyNotify) vik_track_free ); rv->tracks_iters = g_hash_table_new_full ( g_direct_hash, g_direct_equal, NULL, g_free ); rv->routes = g_hash_table_new_full ( g_direct_hash, g_direct_equal, NULL, (GDestroyNotify) vik_track_free ); rv->routes_iters = g_hash_table_new_full ( g_direct_hash, g_direct_equal, NULL, g_free ); // Default values rv->waypoints_visible = rv->tracks_visible = rv->routes_visible = TRUE; rv->drawmode = drawmode; rv->drawpoints = TRUE; rv->drawpoints_size = MIN_POINT_SIZE; rv->drawdirections_size = 5; rv->elevation_factor = 30; rv->stop_length = 60; rv->drawlines = TRUE; rv->track_draw_speed_factor = 30.0; rv->line_thickness = 1; rv->draw_sync_done = TRUE; rv->draw_sync_do = TRUE; rv->image_cache = g_queue_new(); rv->image_size = 64; rv->image_alpha = 255; rv->image_cache_size = 300; rv->drawimages = TRUE; rv->drawlabels = TRUE; // Everything else is 0, FALSE or NULL return rv; } static void trw_layer_free ( VikTrwLayer *trwlayer ) { g_hash_table_destroy(trwlayer->waypoints); g_hash_table_destroy(trwlayer->waypoints_iters); g_hash_table_destroy(trwlayer->tracks); g_hash_table_destroy(trwlayer->tracks_iters); g_hash_table_destroy(trwlayer->routes); g_hash_table_destroy(trwlayer->routes_iters); /* ODC: replace with GArray */ trw_layer_free_track_gcs ( trwlayer ); if ( trwlayer->wp_right_click_menu ) g_object_ref_sink ( G_OBJECT(trwlayer->wp_right_click_menu) ); if ( trwlayer->track_right_click_menu ) gtk_object_sink ( GTK_OBJECT(trwlayer->track_right_click_menu) ); if ( trwlayer->wplabellayout != NULL) g_object_unref ( G_OBJECT ( trwlayer->wplabellayout ) ); if ( trwlayer->waypoint_gc != NULL ) g_object_unref ( G_OBJECT ( trwlayer->waypoint_gc ) ); if ( trwlayer->waypoint_text_gc != NULL ) g_object_unref ( G_OBJECT ( trwlayer->waypoint_text_gc ) ); if ( trwlayer->waypoint_bg_gc != NULL ) g_object_unref ( G_OBJECT ( trwlayer->waypoint_bg_gc ) ); if ( trwlayer->tpwin != NULL ) gtk_widget_destroy ( GTK_WIDGET(trwlayer->tpwin) ); g_list_foreach ( trwlayer->image_cache->head, (GFunc) cached_pixbuf_free, NULL ); g_queue_free ( trwlayer->image_cache ); } static void init_drawing_params ( struct DrawingParams *dp, VikTrwLayer *vtl, VikViewport *vp ) { dp->vtl = vtl; dp->vp = vp; dp->vw = (VikWindow *)VIK_GTK_WINDOW_FROM_LAYER(dp->vtl); dp->xmpp = vik_viewport_get_xmpp ( vp ); dp->ympp = vik_viewport_get_ympp ( vp ); dp->width = vik_viewport_get_width ( vp ); dp->height = vik_viewport_get_height ( vp ); dp->cc = vtl->drawdirections_size*cos(DEG2RAD(45)); // Calculate once per vtl update - even if not used dp->ss = vtl->drawdirections_size*sin(DEG2RAD(45)); // Calculate once per vtl update - even if not used dp->center = vik_viewport_get_center ( vp ); dp->one_zone = vik_viewport_is_one_zone ( vp ); /* false if some other projection besides UTM */ dp->lat_lon = vik_viewport_get_coord_mode ( vp ) == VIK_COORD_LATLON; if ( dp->one_zone ) { gint w2, h2; w2 = dp->xmpp * (dp->width / 2) + 1600 / dp->xmpp; h2 = dp->ympp * (dp->height / 2) + 1600 / dp->ympp; /* leniency -- for tracks. Obviously for waypoints this SHOULD be a lot smaller */ dp->ce1 = dp->center->east_west-w2; dp->ce2 = dp->center->east_west+w2; dp->cn1 = dp->center->north_south-h2; dp->cn2 = dp->center->north_south+h2; } else if ( dp->lat_lon ) { VikCoord upperleft, bottomright; /* quick & dirty calculation; really want to check all corners due to lat/lon smaller at top in northern hemisphere */ /* this also DOESN'T WORK if you are crossing 180/-180 lon. I don't plan to in the near future... */ vik_viewport_screen_to_coord ( vp, -500, -500, &upperleft ); vik_viewport_screen_to_coord ( vp, dp->width+500, dp->height+500, &bottomright ); dp->ce1 = upperleft.east_west; dp->ce2 = bottomright.east_west; dp->cn1 = bottomright.north_south; dp->cn2 = upperleft.north_south; } } /* * Determine the colour of the trackpoint (and/or trackline) relative to the average speed * Here a simple traffic like light colour system is used: * . slow points are red * . average is yellow * . fast points are green */ static gint track_section_colour_by_speed ( VikTrwLayer *vtl, VikTrackpoint *tp1, VikTrackpoint *tp2, gdouble average_speed, gdouble low_speed, gdouble high_speed ) { gdouble rv = 0; if ( tp1->has_timestamp && tp2->has_timestamp ) { if ( average_speed > 0 ) { rv = ( vik_coord_diff ( &(tp1->coord), &(tp2->coord) ) / (tp1->timestamp - tp2->timestamp) ); if ( rv < low_speed ) return VIK_TRW_LAYER_TRACK_GC_SLOW; else if ( rv > high_speed ) return VIK_TRW_LAYER_TRACK_GC_FAST; else return VIK_TRW_LAYER_TRACK_GC_AVER; } } return VIK_TRW_LAYER_TRACK_GC_BLACK; } static void draw_utm_skip_insignia ( VikViewport *vvp, GdkGC *gc, gint x, gint y ) { vik_viewport_draw_line ( vvp, gc, x+5, y, x-5, y ); vik_viewport_draw_line ( vvp, gc, x, y+5, x, y-5 ); vik_viewport_draw_line ( vvp, gc, x+5, y+5, x-5, y-5 ); vik_viewport_draw_line ( vvp, gc, x+5, y-5, x-5, y+5 ); } static void trw_layer_draw_track ( const gpointer id, VikTrack *track, struct DrawingParams *dp, gboolean draw_track_outline ) { /* TODO: this function is a mess, get rid of any redundancy */ GList *list = track->trackpoints; GdkGC *main_gc; gboolean useoldvals = TRUE; gboolean drawpoints; gboolean drawstops; gboolean drawelevation; gdouble min_alt, max_alt, alt_diff = 0; const guint8 tp_size_reg = dp->vtl->drawpoints_size; const guint8 tp_size_cur = dp->vtl->drawpoints_size*2; guint8 tp_size; if ( dp->vtl->drawelevation ) { /* assume if it has elevation at the beginning, it has it throughout. not ness a true good assumption */ if ( ( drawelevation = vik_track_get_minmax_alt ( track, &min_alt, &max_alt ) ) ) alt_diff = max_alt - min_alt; } if ( ! track->visible ) return; /* admittedly this is not an efficient way to do it because we go through the whole GC thing all over... */ if ( dp->vtl->bg_line_thickness && !draw_track_outline ) trw_layer_draw_track ( id, track, dp, TRUE ); if ( draw_track_outline ) drawpoints = drawstops = FALSE; else { drawpoints = dp->vtl->drawpoints; drawstops = dp->vtl->drawstops; } gboolean drawing_highlight = FALSE; /* Current track - used for creation */ if ( track == dp->vtl->current_track ) main_gc = dp->vtl->current_track_gc; else { if ( vik_viewport_get_draw_highlight ( dp->vp ) ) { /* Draw all tracks of the layer in special colour */ /* if track is member of selected layer or is the current selected track then draw in the highlight colour. NB this supercedes the drawmode */ if ( ( dp->vtl == vik_window_get_selected_trw_layer ( dp->vw ) ) || ( !track->is_route && ( dp->vtl->tracks == vik_window_get_selected_tracks ( dp->vw ) ) ) || ( track->is_route && ( dp->vtl->routes == vik_window_get_selected_tracks ( dp->vw ) ) ) || ( track == vik_window_get_selected_track ( dp->vw ) ) ) { main_gc = vik_viewport_get_gc_highlight (dp->vp); drawing_highlight = TRUE; } } if ( !drawing_highlight ) { // Still need to figure out the gc according to the drawing mode: switch ( dp->vtl->drawmode ) { case DRAWMODE_BY_TRACK: if ( dp->vtl->track_1color_gc ) g_object_unref ( dp->vtl->track_1color_gc ); dp->vtl->track_1color_gc = vik_viewport_new_gc_from_color ( dp->vp, &track->color, dp->vtl->line_thickness ); main_gc = dp->vtl->track_1color_gc; break; default: // Mostly for DRAWMODE_ALL_SAME_COLOR // but includes DRAWMODE_BY_SPEED, main_gc is set later on as necessary main_gc = g_array_index(dp->vtl->track_gc, GdkGC *, VIK_TRW_LAYER_TRACK_GC_SINGLE); break; } } } if (list) { int x, y, oldx, oldy; VikTrackpoint *tp = VIK_TRACKPOINT(list->data); tp_size = (list == dp->vtl->current_tpl) ? tp_size_cur : tp_size_reg; vik_viewport_coord_to_screen ( dp->vp, &(tp->coord), &x, &y ); // Draw the first point as something a bit different from the normal points // ATM it's slightly bigger and a triangle if ( drawpoints ) { GdkPoint trian[3] = { { x, y-(3*tp_size) }, { x-(2*tp_size), y+(2*tp_size) }, {x+(2*tp_size), y+(2*tp_size)} }; vik_viewport_draw_polygon ( dp->vp, main_gc, TRUE, trian, 3 ); } oldx = x; oldy = y; gdouble average_speed = 0.0; gdouble low_speed = 0.0; gdouble high_speed = 0.0; // If necessary calculate these values - which is done only once per track redraw if ( dp->vtl->drawmode == DRAWMODE_BY_SPEED ) { // the percentage factor away from the average speed determines transistions between the levels average_speed = vik_track_get_average_speed_moving(track, dp->vtl->stop_length); low_speed = average_speed - (average_speed*(dp->vtl->track_draw_speed_factor/100.0)); high_speed = average_speed + (average_speed*(dp->vtl->track_draw_speed_factor/100.0)); } while ((list = g_list_next(list))) { tp = VIK_TRACKPOINT(list->data); tp_size = (list == dp->vtl->current_tpl) ? tp_size_cur : tp_size_reg; /* check some stuff -- but only if we're in UTM and there's only ONE ZONE; or lat lon */ if ( (!dp->one_zone && !dp->lat_lon) || /* UTM & zones; do everything */ ( ((!dp->one_zone) || tp->coord.utm_zone == dp->center->utm_zone) && /* only check zones if UTM & one_zone */ tp->coord.east_west < dp->ce2 && tp->coord.east_west > dp->ce1 && /* both UTM and lat lon */ tp->coord.north_south > dp->cn1 && tp->coord.north_south < dp->cn2 ) ) { vik_viewport_coord_to_screen ( dp->vp, &(tp->coord), &x, &y ); /* * If points are the same in display coordinates, don't draw. */ if ( useoldvals && x == oldx && y == oldy ) { // Still need to process points to ensure 'stops' are drawn if required if ( drawstops && drawpoints && ! draw_track_outline && list->next && (VIK_TRACKPOINT(list->next->data)->timestamp - VIK_TRACKPOINT(list->data)->timestamp > dp->vtl->stop_length) ) vik_viewport_draw_arc ( dp->vp, g_array_index(dp->vtl->track_gc, GdkGC *, 11), TRUE, x-(3*tp_size), y-(3*tp_size), 6*tp_size, 6*tp_size, 0, 360*64 ); goto skip; } VikTrackpoint *tp2 = VIK_TRACKPOINT(list->prev->data); if ( drawpoints || dp->vtl->drawlines ) { // setup main_gc for both point and line drawing if ( !drawing_highlight && (dp->vtl->drawmode == DRAWMODE_BY_SPEED) ) { main_gc = g_array_index(dp->vtl->track_gc, GdkGC *, track_section_colour_by_speed ( dp->vtl, tp, tp2, average_speed, low_speed, high_speed ) ); } } if ( drawpoints && ! draw_track_outline ) { if ( list->next ) { /* * The concept of drawing stops is that a trackpoint * that is if the next trackpoint has a timestamp far into * the future, we draw a circle of 6x trackpoint size, * instead of a rectangle of 2x trackpoint size. * This is drawn first so the trackpoint will be drawn on top */ /* stops */ if ( drawstops && VIK_TRACKPOINT(list->next->data)->timestamp - VIK_TRACKPOINT(list->data)->timestamp > dp->vtl->stop_length ) /* Stop point. Draw 6x circle. Always in redish colour */ vik_viewport_draw_arc ( dp->vp, g_array_index(dp->vtl->track_gc, GdkGC *, VIK_TRW_LAYER_TRACK_GC_STOP), TRUE, x-(3*tp_size), y-(3*tp_size), 6*tp_size, 6*tp_size, 0, 360*64 ); /* Regular point - draw 2x square. */ vik_viewport_draw_rectangle ( dp->vp, main_gc, TRUE, x-tp_size, y-tp_size, 2*tp_size, 2*tp_size ); } else /* Final point - draw 4x circle. */ vik_viewport_draw_arc ( dp->vp, main_gc, TRUE, x-(2*tp_size), y-(2*tp_size), 4*tp_size, 4*tp_size, 0, 360*64 ); } if ((!tp->newsegment) && (dp->vtl->drawlines)) { /* UTM only: zone check */ if ( drawpoints && dp->vtl->coord_mode == VIK_COORD_UTM && tp->coord.utm_zone != dp->center->utm_zone ) draw_utm_skip_insignia ( dp->vp, main_gc, x, y); if (!useoldvals) vik_viewport_coord_to_screen ( dp->vp, &(tp2->coord), &oldx, &oldy ); if ( draw_track_outline ) { vik_viewport_draw_line ( dp->vp, dp->vtl->track_bg_gc, oldx, oldy, x, y); } else { vik_viewport_draw_line ( dp->vp, main_gc, oldx, oldy, x, y); if ( dp->vtl->drawelevation && list->next && VIK_TRACKPOINT(list->next->data)->altitude != VIK_DEFAULT_ALTITUDE ) { GdkPoint tmp[4]; #define FIXALTITUDE(what) ((VIK_TRACKPOINT((what))->altitude-min_alt)/alt_diff*DRAW_ELEVATION_FACTOR*dp->vtl->elevation_factor/dp->xmpp) tmp[0].x = oldx; tmp[0].y = oldy; tmp[1].x = oldx; tmp[1].y = oldy-FIXALTITUDE(list->data); tmp[2].x = x; tmp[2].y = y-FIXALTITUDE(list->next->data); tmp[3].x = x; tmp[3].y = y; GdkGC *tmp_gc; if ( ((oldx - x) > 0 && (oldy - y) > 0) || ((oldx - x) < 0 && (oldy - y) < 0)) tmp_gc = GTK_WIDGET(dp->vp)->style->light_gc[3]; else tmp_gc = GTK_WIDGET(dp->vp)->style->dark_gc[0]; vik_viewport_draw_polygon ( dp->vp, tmp_gc, TRUE, tmp, 4); vik_viewport_draw_line ( dp->vp, main_gc, oldx, oldy-FIXALTITUDE(list->data), x, y-FIXALTITUDE(list->next->data)); } } } if ( (!tp->newsegment) && dp->vtl->drawdirections ) { // Draw an arrow at the mid point to show the direction of the track // Code is a rework from vikwindow::draw_ruler() gint midx = (oldx + x) / 2; gint midy = (oldy + y) / 2; gdouble len = sqrt ( ((midx-oldx) * (midx-oldx)) + ((midy-oldy) * (midy-oldy)) ); // Avoid divide by zero and ensure at least 1 pixel big if ( len > 1 ) { gdouble dx = (oldx - midx) / len; gdouble dy = (oldy - midy) / len; vik_viewport_draw_line ( dp->vp, main_gc, midx, midy, midx + (dx * dp->cc + dy * dp->ss), midy + (dy * dp->cc - dx * dp->ss) ); vik_viewport_draw_line ( dp->vp, main_gc, midx, midy, midx + (dx * dp->cc - dy * dp->ss), midy + (dy * dp->cc + dx * dp->ss) ); } } skip: oldx = x; oldy = y; useoldvals = TRUE; } else { if (useoldvals && dp->vtl->drawlines && (!tp->newsegment)) { VikTrackpoint *tp2 = VIK_TRACKPOINT(list->prev->data); if ( dp->vtl->coord_mode != VIK_COORD_UTM || tp->coord.utm_zone == dp->center->utm_zone ) { vik_viewport_coord_to_screen ( dp->vp, &(tp->coord), &x, &y ); if ( !drawing_highlight && (dp->vtl->drawmode == DRAWMODE_BY_SPEED) ) { main_gc = g_array_index(dp->vtl->track_gc, GdkGC *, track_section_colour_by_speed ( dp->vtl, tp, tp2, average_speed, low_speed, high_speed )); } /* * If points are the same in display coordinates, don't draw. */ if ( x != oldx || y != oldy ) { if ( draw_track_outline ) vik_viewport_draw_line ( dp->vp, dp->vtl->track_bg_gc, oldx, oldy, x, y); else vik_viewport_draw_line ( dp->vp, main_gc, oldx, oldy, x, y); } } else { /* * If points are the same in display coordinates, don't draw. */ if ( x != oldx && y != oldy ) { vik_viewport_coord_to_screen ( dp->vp, &(tp2->coord), &x, &y ); draw_utm_skip_insignia ( dp->vp, main_gc, x, y ); } } } useoldvals = FALSE; } } } } /* the only reason this exists is so that trw_layer_draw_track can first call itself to draw the white track background */ static void trw_layer_draw_track_cb ( const gpointer id, VikTrack *track, struct DrawingParams *dp ) { trw_layer_draw_track ( id, track, dp, FALSE ); } static void cached_pixbuf_free ( CachedPixbuf *cp ) { g_object_unref ( G_OBJECT(cp->pixbuf) ); g_free ( cp->image ); } static gint cached_pixbuf_cmp ( CachedPixbuf *cp, const gchar *name ) { return strcmp ( cp->image, name ); } static void trw_layer_draw_waypoint ( const gpointer id, VikWaypoint *wp, struct DrawingParams *dp ) { if ( wp->visible ) if ( (!dp->one_zone && !dp->lat_lon) || ( ( dp->lat_lon || wp->coord.utm_zone == dp->center->utm_zone ) && wp->coord.east_west < dp->ce2 && wp->coord.east_west > dp->ce1 && wp->coord.north_south > dp->cn1 && wp->coord.north_south < dp->cn2 ) ) { gint x, y; GdkPixbuf *sym = NULL; vik_viewport_coord_to_screen ( dp->vp, &(wp->coord), &x, &y ); /* if in shrunken_cache, get that. If not, get and add to shrunken_cache */ if ( wp->image && dp->vtl->drawimages ) { GdkPixbuf *pixbuf = NULL; GList *l; if ( dp->vtl->image_alpha == 0) return; l = g_list_find_custom ( dp->vtl->image_cache->head, wp->image, (GCompareFunc) cached_pixbuf_cmp ); if ( l ) pixbuf = ((CachedPixbuf *) l->data)->pixbuf; else { gchar *image = wp->image; GdkPixbuf *regularthumb = a_thumbnails_get ( wp->image ); if ( ! regularthumb ) { regularthumb = a_thumbnails_get_default (); /* cache one 'not yet loaded' for all thumbs not loaded */ image = "\x12\x00"; /* this shouldn't occur naturally. */ } if ( regularthumb ) { CachedPixbuf *cp = NULL; cp = g_malloc ( sizeof ( CachedPixbuf ) ); if ( dp->vtl->image_size == 128 ) cp->pixbuf = regularthumb; else { cp->pixbuf = a_thumbnails_scale_pixbuf(regularthumb, dp->vtl->image_size, dp->vtl->image_size); g_assert ( cp->pixbuf ); g_object_unref ( G_OBJECT(regularthumb) ); } cp->image = g_strdup ( image ); /* needed so 'click picture' tool knows how big the pic is; we don't * store it in cp because they may have been freed already. */ wp->image_width = gdk_pixbuf_get_width ( cp->pixbuf ); wp->image_height = gdk_pixbuf_get_height ( cp->pixbuf ); g_queue_push_head ( dp->vtl->image_cache, cp ); if ( dp->vtl->image_cache->length > dp->vtl->image_cache_size ) cached_pixbuf_free ( g_queue_pop_tail ( dp->vtl->image_cache ) ); pixbuf = cp->pixbuf; } else { pixbuf = a_thumbnails_get_default (); /* thumbnail not yet loaded */ } } if ( pixbuf ) { gint w, h; w = gdk_pixbuf_get_width ( pixbuf ); h = gdk_pixbuf_get_height ( pixbuf ); if ( x+(w/2) > 0 && y+(h/2) > 0 && x-(w/2) < dp->width && y-(h/2) < dp->height ) /* always draw within boundaries */ { if ( vik_viewport_get_draw_highlight ( dp->vp ) ) { if ( dp->vtl == vik_window_get_selected_trw_layer ( dp->vw ) || dp->vtl->waypoints == vik_window_get_selected_waypoints ( dp->vw ) || wp == vik_window_get_selected_waypoint ( dp->vw ) ) { // Highlighted - so draw a little border around the chosen one // single line seems a little weak so draw 2 of them vik_viewport_draw_rectangle (dp->vp, vik_viewport_get_gc_highlight (dp->vp), FALSE, x - (w/2) - 1, y - (h/2) - 1, w + 2, h + 2 ); vik_viewport_draw_rectangle (dp->vp, vik_viewport_get_gc_highlight (dp->vp), FALSE, x - (w/2) - 2, y - (h/2) - 2, w + 4, h + 4 ); } } if ( dp->vtl->image_alpha == 255 ) vik_viewport_draw_pixbuf ( dp->vp, pixbuf, 0, 0, x - (w/2), y - (h/2), w, h ); else vik_viewport_draw_pixbuf_with_alpha ( dp->vp, pixbuf, dp->vtl->image_alpha, 0, 0, x - (w/2), y - (h/2), w, h ); } return; /* if failed to draw picture, default to drawing regular waypoint (below) */ } } /* DRAW ACTUAL DOT */ if ( dp->vtl->wp_draw_symbols && wp->symbol && (sym = a_get_wp_sym(wp->symbol)) ) { vik_viewport_draw_pixbuf ( dp->vp, sym, 0, 0, x - gdk_pixbuf_get_width(sym)/2, y - gdk_pixbuf_get_height(sym)/2, -1, -1 ); } else if ( wp == dp->vtl->current_wp ) { switch ( dp->vtl->wp_symbol ) { case WP_SYMBOL_FILLED_SQUARE: vik_viewport_draw_rectangle ( dp->vp, dp->vtl->waypoint_gc, TRUE, x - (dp->vtl->wp_size), y - (dp->vtl->wp_size), dp->vtl->wp_size*2, dp->vtl->wp_size*2 ); break; case WP_SYMBOL_SQUARE: vik_viewport_draw_rectangle ( dp->vp, dp->vtl->waypoint_gc, FALSE, x - (dp->vtl->wp_size), y - (dp->vtl->wp_size), dp->vtl->wp_size*2, dp->vtl->wp_size*2 ); break; case WP_SYMBOL_CIRCLE: vik_viewport_draw_arc ( dp->vp, dp->vtl->waypoint_gc, TRUE, x - dp->vtl->wp_size, y - dp->vtl->wp_size, dp->vtl->wp_size, dp->vtl->wp_size, 0, 360*64 ); break; case WP_SYMBOL_X: vik_viewport_draw_line ( dp->vp, dp->vtl->waypoint_gc, x - dp->vtl->wp_size*2, y - dp->vtl->wp_size*2, x + dp->vtl->wp_size*2, y + dp->vtl->wp_size*2 ); vik_viewport_draw_line ( dp->vp, dp->vtl->waypoint_gc, x - dp->vtl->wp_size*2, y + dp->vtl->wp_size*2, x + dp->vtl->wp_size*2, y - dp->vtl->wp_size*2 ); } } else { switch ( dp->vtl->wp_symbol ) { case WP_SYMBOL_FILLED_SQUARE: vik_viewport_draw_rectangle ( dp->vp, dp->vtl->waypoint_gc, TRUE, x - dp->vtl->wp_size/2, y - dp->vtl->wp_size/2, dp->vtl->wp_size, dp->vtl->wp_size ); break; case WP_SYMBOL_SQUARE: vik_viewport_draw_rectangle ( dp->vp, dp->vtl->waypoint_gc, FALSE, x - dp->vtl->wp_size/2, y - dp->vtl->wp_size/2, dp->vtl->wp_size, dp->vtl->wp_size ); break; case WP_SYMBOL_CIRCLE: vik_viewport_draw_arc ( dp->vp, dp->vtl->waypoint_gc, TRUE, x-dp->vtl->wp_size/2, y-dp->vtl->wp_size/2, dp->vtl->wp_size, dp->vtl->wp_size, 0, 360*64 ); break; case WP_SYMBOL_X: vik_viewport_draw_line ( dp->vp, dp->vtl->waypoint_gc, x-dp->vtl->wp_size, y-dp->vtl->wp_size, x+dp->vtl->wp_size, y+dp->vtl->wp_size ); vik_viewport_draw_line ( dp->vp, dp->vtl->waypoint_gc, x-dp->vtl->wp_size, y+dp->vtl->wp_size, x+dp->vtl->wp_size, y-dp->vtl->wp_size ); break; } } if ( dp->vtl->drawlabels ) { /* thanks to the GPSDrive people (Fritz Ganter et al.) for hints on this part ... yah, I'm too lazy to study documentation */ gint label_x, label_y; gint width, height; // Hopefully name won't break the markup (may need to sanitize - g_markup_escape_text()) // Could this stored in the waypoint rather than recreating each pass? gchar *fsize = NULL; switch (dp->vtl->wp_font_size) { case FS_XX_SMALL: fsize = g_strdup ( "xx-small" ); break; case FS_X_SMALL: fsize = g_strdup ( "x-small" ); break; case FS_SMALL: fsize = g_strdup ( "small" ); break; case FS_LARGE: fsize = g_strdup ( "large" ); break; case FS_X_LARGE: fsize = g_strdup ( "x-large" ); break; case FS_XX_LARGE: fsize = g_strdup ( "xx-large" ); break; default: fsize = g_strdup ( "medium" ); break; } gchar *wp_label_markup = g_strdup_printf ( "%s", fsize, wp->name ); if ( pango_parse_markup ( wp_label_markup, -1, 0, NULL, NULL, NULL, NULL ) ) pango_layout_set_markup ( dp->vtl->wplabellayout, wp_label_markup, -1 ); else // Fallback if parse failure pango_layout_set_text ( dp->vtl->wplabellayout, wp->name, -1 ); g_free ( wp_label_markup ); g_free ( fsize ); pango_layout_get_pixel_size ( dp->vtl->wplabellayout, &width, &height ); label_x = x - width/2; if (sym) label_y = y - height - 2 - gdk_pixbuf_get_height(sym)/2; else label_y = y - dp->vtl->wp_size - height - 2; /* if highlight mode on, then draw background text in highlight colour */ if ( vik_viewport_get_draw_highlight ( dp->vp ) ) { if ( dp->vtl == vik_window_get_selected_trw_layer ( dp->vw ) || dp->vtl->waypoints == vik_window_get_selected_waypoints ( dp->vw ) || wp == vik_window_get_selected_waypoint ( dp->vw ) ) vik_viewport_draw_rectangle ( dp->vp, vik_viewport_get_gc_highlight (dp->vp), TRUE, label_x - 1, label_y-1,width+2,height+2); else vik_viewport_draw_rectangle ( dp->vp, dp->vtl->waypoint_bg_gc, TRUE, label_x - 1, label_y-1,width+2,height+2); } else { vik_viewport_draw_rectangle ( dp->vp, dp->vtl->waypoint_bg_gc, TRUE, label_x - 1, label_y-1,width+2,height+2); } vik_viewport_draw_layout ( dp->vp, dp->vtl->waypoint_text_gc, label_x, label_y, dp->vtl->wplabellayout ); } } } static void trw_layer_draw ( VikTrwLayer *l, gpointer data ) { static struct DrawingParams dp; g_assert ( l != NULL ); init_drawing_params ( &dp, l, VIK_VIEWPORT(data) ); if ( l->tracks_visible ) g_hash_table_foreach ( l->tracks, (GHFunc) trw_layer_draw_track_cb, &dp ); if ( l->routes_visible ) g_hash_table_foreach ( l->routes, (GHFunc) trw_layer_draw_track_cb, &dp ); if (l->waypoints_visible) g_hash_table_foreach ( l->waypoints, (GHFunc) trw_layer_draw_waypoint, &dp ); } static void trw_layer_free_track_gcs ( VikTrwLayer *vtl ) { int i; if ( vtl->track_bg_gc ) { g_object_unref ( vtl->track_bg_gc ); vtl->track_bg_gc = NULL; } if ( vtl->track_1color_gc ) { g_object_unref ( vtl->track_1color_gc ); vtl->track_1color_gc = NULL; } if ( vtl->current_track_gc ) { g_object_unref ( vtl->current_track_gc ); vtl->current_track_gc = NULL; } if ( vtl->current_track_newpoint_gc ) { g_object_unref ( vtl->current_track_newpoint_gc ); vtl->current_track_newpoint_gc = NULL; } if ( ! vtl->track_gc ) return; for ( i = vtl->track_gc->len - 1; i >= 0; i-- ) g_object_unref ( g_array_index ( vtl->track_gc, GObject *, i ) ); g_array_free ( vtl->track_gc, TRUE ); vtl->track_gc = NULL; } static void trw_layer_new_track_gcs ( VikTrwLayer *vtl, VikViewport *vp ) { GdkGC *gc[ VIK_TRW_LAYER_TRACK_GC ]; gint width = vtl->line_thickness; if ( vtl->track_gc ) trw_layer_free_track_gcs ( vtl ); if ( vtl->track_bg_gc ) g_object_unref ( vtl->track_bg_gc ); vtl->track_bg_gc = vik_viewport_new_gc ( vp, "#FFFFFF", width + vtl->bg_line_thickness ); // Ensure new track drawing heeds line thickness setting // however always have a minium of 2, as 1 pixel is really narrow gint new_track_width = (vtl->line_thickness < 2) ? 2 : vtl->line_thickness; if ( vtl->current_track_gc ) g_object_unref ( vtl->current_track_gc ); vtl->current_track_gc = vik_viewport_new_gc ( vp, "#FF0000", new_track_width ); gdk_gc_set_line_attributes ( vtl->current_track_gc, new_track_width, GDK_LINE_ON_OFF_DASH, GDK_CAP_ROUND, GDK_JOIN_ROUND ); // 'newpoint' gc is exactly the same as the current track gc if ( vtl->current_track_newpoint_gc ) g_object_unref ( vtl->current_track_newpoint_gc ); vtl->current_track_newpoint_gc = vik_viewport_new_gc ( vp, "#FF0000", new_track_width ); gdk_gc_set_line_attributes ( vtl->current_track_newpoint_gc, new_track_width, GDK_LINE_ON_OFF_DASH, GDK_CAP_ROUND, GDK_JOIN_ROUND ); vtl->track_gc = g_array_sized_new ( FALSE, FALSE, sizeof ( GdkGC * ), VIK_TRW_LAYER_TRACK_GC ); gc[VIK_TRW_LAYER_TRACK_GC_STOP] = vik_viewport_new_gc ( vp, "#874200", width ); gc[VIK_TRW_LAYER_TRACK_GC_BLACK] = vik_viewport_new_gc ( vp, "#000000", width ); // black gc[VIK_TRW_LAYER_TRACK_GC_SLOW] = vik_viewport_new_gc ( vp, "#E6202E", width ); // red-ish gc[VIK_TRW_LAYER_TRACK_GC_AVER] = vik_viewport_new_gc ( vp, "#D2CD26", width ); // yellow-ish gc[VIK_TRW_LAYER_TRACK_GC_FAST] = vik_viewport_new_gc ( vp, "#2B8700", width ); // green-ish gc[VIK_TRW_LAYER_TRACK_GC_SINGLE] = vik_viewport_new_gc_from_color ( vp, &(vtl->track_color), width ); g_array_append_vals ( vtl->track_gc, gc, VIK_TRW_LAYER_TRACK_GC ); } static VikTrwLayer* trw_layer_create ( VikViewport *vp ) { VikTrwLayer *rv = trw_layer_new ( DRAWMODE_BY_TRACK ); vik_layer_rename ( VIK_LAYER(rv), vik_trw_layer_interface.name ); if ( vp == NULL || GTK_WIDGET(vp)->window == NULL ) { /* early exit, as the rest is GUI related */ return rv; } rv->wplabellayout = gtk_widget_create_pango_layout (GTK_WIDGET(vp), NULL); pango_layout_set_font_description (rv->wplabellayout, GTK_WIDGET(vp)->style->font_desc); gdk_color_parse ( "#000000", &(rv->track_color) ); // Black trw_layer_new_track_gcs ( rv, vp ); rv->waypoint_gc = vik_viewport_new_gc ( vp, "#000000", 2 ); rv->waypoint_text_gc = vik_viewport_new_gc ( vp, "#FFFFFF", 1 ); rv->waypoint_bg_gc = vik_viewport_new_gc ( vp, "#8383C4", 1 ); gdk_gc_set_function ( rv->waypoint_bg_gc, GDK_AND ); rv->has_verified_thumbnails = FALSE; rv->wp_symbol = WP_SYMBOL_FILLED_SQUARE; rv->wp_size = 4; rv->wp_draw_symbols = TRUE; rv->wp_font_size = FS_MEDIUM; rv->coord_mode = vik_viewport_get_coord_mode ( vp ); rv->menu_selection = vik_layer_get_interface(VIK_LAYER(rv)->type)->menu_items_selection; return rv; } #define SMALL_ICON_SIZE 18 /* * Can accept a null symbol, and may return null value */ static GdkPixbuf* get_wp_sym_small ( gchar *symbol ) { GdkPixbuf* wp_icon = a_get_wp_sym (symbol); // ATM a_get_wp_sym returns a cached icon, with the size dependent on the preferences. // So needing a small icon for the treeview may need some resizing: if ( wp_icon && gdk_pixbuf_get_width ( wp_icon ) != SMALL_ICON_SIZE ) wp_icon = gdk_pixbuf_scale_simple ( wp_icon, SMALL_ICON_SIZE, SMALL_ICON_SIZE, GDK_INTERP_BILINEAR ); return wp_icon; } static void trw_layer_realize_track ( gpointer id, VikTrack *track, gpointer pass_along[5] ) { GtkTreeIter *new_iter = g_malloc(sizeof(GtkTreeIter)); GdkPixbuf *pixbuf = NULL; if ( track->has_color ) { pixbuf = gdk_pixbuf_new ( GDK_COLORSPACE_RGB, FALSE, 8, SMALL_ICON_SIZE, SMALL_ICON_SIZE ); // Annoyingly the GdkColor.pixel does not give the correct color when passed to gdk_pixbuf_fill (even when alloc'ed) // Here is some magic found to do the conversion // http://www.cs.binghamton.edu/~sgreene/cs360-2011s/topics/gtk+-2.20.1/gtk/gtkcolorbutton.c guint32 pixel = ((track->color.red & 0xff00) << 16) | ((track->color.green & 0xff00) << 8) | (track->color.blue & 0xff00); gdk_pixbuf_fill ( pixbuf, pixel ); } #ifdef VIK_CONFIG_ALPHABETIZED_TRW vik_treeview_add_sublayer_alphabetized ( (VikTreeview *) pass_along[3], (GtkTreeIter *) pass_along[0], (GtkTreeIter *) pass_along[1], track->name, pass_along[2], id, GPOINTER_TO_INT (pass_along[4]), pixbuf, TRUE, TRUE ); #else vik_treeview_add_sublayer ( (VikTreeview *) pass_along[3], (GtkTreeIter *) pass_along[0], (GtkTreeIter *) pass_along[1], track->name, pass_along[2], id, GPOINTER_TO_INT (pass_along[4]), pixbuf, TRUE, TRUE ); #endif if ( pixbuf ) g_object_unref (pixbuf); *new_iter = *((GtkTreeIter *) pass_along[1]); if ( track->is_route ) g_hash_table_insert ( VIK_TRW_LAYER(pass_along[2])->routes_iters, id, new_iter ); else g_hash_table_insert ( VIK_TRW_LAYER(pass_along[2])->tracks_iters, id, new_iter ); if ( ! track->visible ) vik_treeview_item_set_visible ( (VikTreeview *) pass_along[3], (GtkTreeIter *) pass_along[1], FALSE ); } static void trw_layer_realize_waypoint ( gpointer id, VikWaypoint *wp, gpointer pass_along[5] ) { GtkTreeIter *new_iter = g_malloc(sizeof(GtkTreeIter)); #ifdef VIK_CONFIG_ALPHABETIZED_TRW vik_treeview_add_sublayer_alphabetized ( (VikTreeview *) pass_along[3], (GtkTreeIter *) pass_along[0], (GtkTreeIter *) pass_along[1], wp->name, pass_along[2], id, GPOINTER_TO_INT (pass_along[4]), get_wp_sym_small (wp->symbol), TRUE, TRUE ); #else vik_treeview_add_sublayer ( (VikTreeview *) pass_along[3], (GtkTreeIter *) pass_along[0], (GtkTreeIter *) pass_along[1], wp->name, pass_along[2], id, GPOINTER_TO_UINT (pass_along[4]), get_wp_sym_small (wp->symbol), TRUE, TRUE ); #endif *new_iter = *((GtkTreeIter *) pass_along[1]); g_hash_table_insert ( VIK_TRW_LAYER(pass_along[2])->waypoints_iters, id, new_iter ); if ( ! wp->visible ) vik_treeview_item_set_visible ( (VikTreeview *) pass_along[3], (GtkTreeIter *) pass_along[1], FALSE ); } static void trw_layer_add_sublayer_tracks ( VikTrwLayer *vtl, VikTreeview *vt, GtkTreeIter *layer_iter ) { #ifdef VIK_CONFIG_ALPHABETIZED_TRW vik_treeview_add_sublayer_alphabetized ( (VikTreeview *) vt, layer_iter, &(vtl->tracks_iter), _("Tracks"), vtl, NULL, VIK_TRW_LAYER_SUBLAYER_TRACKS, NULL, TRUE, FALSE ); #else vik_treeview_add_sublayer ( (VikTreeview *) vt, layer_iter, &(vtl->tracks_iter), _("Tracks"), vtl, NULL, VIK_TRW_LAYER_SUBLAYER_TRACKS, NULL, TRUE, FALSE ); #endif } static void trw_layer_add_sublayer_waypoints ( VikTrwLayer *vtl, VikTreeview *vt, GtkTreeIter *layer_iter ) { #ifdef VIK_CONFIG_ALPHABETIZED_TRW vik_treeview_add_sublayer_alphabetized ( (VikTreeview *) vt, layer_iter, &(vtl->waypoints_iter), _("Waypoints"), vtl, NULL, VIK_TRW_LAYER_SUBLAYER_WAYPOINTS, NULL, TRUE, FALSE ); #else vik_treeview_add_sublayer ( (VikTreeview *) vt, layer_iter, &(vtl->waypoints_iter), _("Waypoints"), vtl, NULL, VIK_TRW_LAYER_SUBLAYER_WAYPOINTS, NULL, TRUE, FALSE ); #endif } static void trw_layer_add_sublayer_routes ( VikTrwLayer *vtl, VikTreeview *vt, GtkTreeIter *layer_iter ) { #ifdef VIK_CONFIG_ALPHABETIZED_TRW vik_treeview_add_sublayer_alphabetized ( (VikTreeview *) vt, layer_iter, &(vtl->routes_iter), _("Routes"), vtl, NULL, VIK_TRW_LAYER_SUBLAYER_ROUTES, NULL, TRUE, FALSE ); #else vik_treeview_add_sublayer ( (VikTreeview *) vt, layer_iter, &(vtl->routes_iter), _("Routes"), vtl, NULL, VIK_TRW_LAYER_SUBLAYER_ROUTES, NULL, TRUE, FALSE ); #endif } static void trw_layer_realize ( VikTrwLayer *vtl, VikTreeview *vt, GtkTreeIter *layer_iter ) { GtkTreeIter iter2; gpointer pass_along[5] = { &(vtl->tracks_iter), &iter2, vtl, vt, GINT_TO_POINTER(VIK_TRW_LAYER_SUBLAYER_TRACK) }; if ( g_hash_table_size (vtl->tracks) > 0 ) { trw_layer_add_sublayer_tracks ( vtl, vt , layer_iter ); g_hash_table_foreach ( vtl->tracks, (GHFunc) trw_layer_realize_track, pass_along ); vik_treeview_item_set_visible ( (VikTreeview *) vt, &(vtl->tracks_iter), vtl->tracks_visible ); } if ( g_hash_table_size (vtl->routes) > 0 ) { trw_layer_add_sublayer_routes ( vtl, vt, layer_iter ); pass_along[0] = &(vtl->routes_iter); pass_along[4] = GINT_TO_POINTER(VIK_TRW_LAYER_SUBLAYER_ROUTE); g_hash_table_foreach ( vtl->routes, (GHFunc) trw_layer_realize_track, pass_along ); vik_treeview_item_set_visible ( (VikTreeview *) vt, &(vtl->routes_iter), vtl->routes_visible ); } if ( g_hash_table_size (vtl->waypoints) > 0 ) { trw_layer_add_sublayer_waypoints ( vtl, vt, layer_iter ); pass_along[0] = &(vtl->waypoints_iter); pass_along[4] = GINT_TO_POINTER(VIK_TRW_LAYER_SUBLAYER_WAYPOINT); g_hash_table_foreach ( vtl->waypoints, (GHFunc) trw_layer_realize_waypoint, pass_along ); vik_treeview_item_set_visible ( (VikTreeview *) vt, &(vtl->waypoints_iter), vtl->waypoints_visible ); } } static gboolean trw_layer_sublayer_toggle_visible ( VikTrwLayer *l, gint subtype, gpointer sublayer ) { switch ( subtype ) { case VIK_TRW_LAYER_SUBLAYER_TRACKS: return (l->tracks_visible ^= 1); case VIK_TRW_LAYER_SUBLAYER_WAYPOINTS: return (l->waypoints_visible ^= 1); case VIK_TRW_LAYER_SUBLAYER_ROUTES: return (l->routes_visible ^= 1); case VIK_TRW_LAYER_SUBLAYER_TRACK: { VikTrack *t = g_hash_table_lookup ( l->tracks, sublayer ); if (t) return (t->visible ^= 1); else return TRUE; } case VIK_TRW_LAYER_SUBLAYER_WAYPOINT: { VikWaypoint *t = g_hash_table_lookup ( l->waypoints, sublayer ); if (t) return (t->visible ^= 1); else return TRUE; } case VIK_TRW_LAYER_SUBLAYER_ROUTE: { VikTrack *t = g_hash_table_lookup ( l->routes, sublayer ); if (t) return (t->visible ^= 1); else return TRUE; } } return TRUE; } /* * Return a property about tracks for this layer */ gint vik_trw_layer_get_property_tracks_line_thickness ( VikTrwLayer *vtl ) { return vtl->line_thickness; } // Structure to hold multiple track information for a layer typedef struct { gdouble length; time_t start_time; time_t end_time; gint duration; } tooltip_tracks; /* * Build up layer multiple track information via updating the tooltip_tracks structure */ static void trw_layer_tracks_tooltip ( const gchar *name, VikTrack *tr, tooltip_tracks *tt ) { tt->length = tt->length + vik_track_get_length (tr); // Ensure times are available if ( tr->trackpoints && VIK_TRACKPOINT(tr->trackpoints->data)->has_timestamp && VIK_TRACKPOINT(g_list_last(tr->trackpoints)->data)->has_timestamp ) { time_t t1, t2; t1 = VIK_TRACKPOINT(tr->trackpoints->data)->timestamp; t2 = VIK_TRACKPOINT(g_list_last(tr->trackpoints)->data)->timestamp; // Assume never actually have a track with a time of 0 (1st Jan 1970) // Hence initialize to the first 'proper' value if ( tt->start_time == 0 ) tt->start_time = t1; if ( tt->end_time == 0 ) tt->end_time = t2; // Update find the earliest / last times if ( t1 < tt->start_time ) tt->start_time = t1; if ( t2 > tt->end_time ) tt->end_time = t2; // Keep track of total time // there maybe gaps within a track (eg segments) // but this should be generally good enough for a simple indicator tt->duration = tt->duration + (int)(t2-t1); } } /* * Generate tooltip text for the layer. * This is relatively complicated as it considers information for * no tracks, a single track or multiple tracks * (which may or may not have timing information) */ static const gchar* trw_layer_layer_tooltip ( VikTrwLayer *vtl ) { gchar tbuf1[32]; gchar tbuf2[64]; gchar tbuf3[64]; gchar tbuf4[10]; tbuf1[0] = '\0'; tbuf2[0] = '\0'; tbuf3[0] = '\0'; tbuf4[0] = '\0'; static gchar tmp_buf[128]; tmp_buf[0] = '\0'; // For compact date format I'm using '%x' [The preferred date representation for the current locale without the time.] // Safety check - I think these should always be valid if ( vtl->tracks && vtl->waypoints ) { tooltip_tracks tt = { 0.0, 0, 0 }; g_hash_table_foreach ( vtl->tracks, (GHFunc) trw_layer_tracks_tooltip, &tt ); GDate* gdate_start = g_date_new (); g_date_set_time_t (gdate_start, tt.start_time); GDate* gdate_end = g_date_new (); g_date_set_time_t (gdate_end, tt.end_time); if ( g_date_compare (gdate_start, gdate_end) ) { // Dates differ so print range on separate line g_date_strftime (tbuf1, sizeof(tbuf1), "%x", gdate_start); g_date_strftime (tbuf2, sizeof(tbuf2), "%x", gdate_end); g_snprintf (tbuf3, sizeof(tbuf3), "%s to %s\n", tbuf1, tbuf2); } else { // Same date so just show it and keep rest of text on the same line - provided it's a valid time! if ( tt.start_time != 0 ) g_date_strftime (tbuf3, sizeof(tbuf3), "%x: ", gdate_start); } tbuf2[0] = '\0'; if ( tt.length > 0.0 ) { gdouble len_in_units; // Setup info dependent on distance units if ( a_vik_get_units_distance() == VIK_UNITS_DISTANCE_MILES ) { g_snprintf (tbuf4, sizeof(tbuf4), "miles"); len_in_units = VIK_METERS_TO_MILES(tt.length); } else { g_snprintf (tbuf4, sizeof(tbuf4), "kms"); len_in_units = tt.length/1000.0; } // Timing information if available tbuf1[0] = '\0'; if ( tt.duration > 0 ) { g_snprintf (tbuf1, sizeof(tbuf1), _(" in %d:%02d hrs:mins"), (int)round(tt.duration/3600), (int)round((tt.duration/60)%60)); } g_snprintf (tbuf2, sizeof(tbuf2), _("\n%sTotal Length %.1f %s%s"), tbuf3, len_in_units, tbuf4, tbuf1); } // Put together all the elements to form compact tooltip text g_snprintf (tmp_buf, sizeof(tmp_buf), _("Tracks: %d - Waypoints: %d - Routes: %d%s"), g_hash_table_size (vtl->tracks), g_hash_table_size (vtl->waypoints), g_hash_table_size (vtl->routes), tbuf2); g_date_free (gdate_start); g_date_free (gdate_end); } return tmp_buf; } static const gchar* trw_layer_sublayer_tooltip ( VikTrwLayer *l, gint subtype, gpointer sublayer ) { switch ( subtype ) { case VIK_TRW_LAYER_SUBLAYER_TRACKS: { // Very simple tooltip - may expand detail in the future... static gchar tmp_buf[32]; g_snprintf (tmp_buf, sizeof(tmp_buf), _("Tracks: %d"), g_hash_table_size (l->tracks)); return tmp_buf; } break; case VIK_TRW_LAYER_SUBLAYER_ROUTES: { // Very simple tooltip - may expand detail in the future... static gchar tmp_buf[32]; g_snprintf (tmp_buf, sizeof(tmp_buf), _("Routes: %d"), g_hash_table_size (l->routes)); return tmp_buf; } break; case VIK_TRW_LAYER_SUBLAYER_ROUTE: // Same tooltip for a route case VIK_TRW_LAYER_SUBLAYER_TRACK: { VikTrack *tr; if ( subtype == VIK_TRW_LAYER_SUBLAYER_TRACK ) tr = g_hash_table_lookup ( l->tracks, sublayer ); else tr = g_hash_table_lookup ( l->routes, sublayer ); if ( tr ) { // Could be a better way of handling strings - but this works... gchar time_buf1[20]; gchar time_buf2[20]; time_buf1[0] = '\0'; time_buf2[0] = '\0'; static gchar tmp_buf[100]; // Compact info: Short date eg (11/20/99), duration and length // Hopefully these are the things that are most useful and so promoted into the tooltip if ( tr->trackpoints && VIK_TRACKPOINT(tr->trackpoints->data)->has_timestamp ) { // %x The preferred date representation for the current locale without the time. strftime (time_buf1, sizeof(time_buf1), "%x: ", gmtime(&(VIK_TRACKPOINT(tr->trackpoints->data)->timestamp))); if ( VIK_TRACKPOINT(g_list_last(tr->trackpoints)->data)->has_timestamp ) { gint dur = ( (VIK_TRACKPOINT(g_list_last(tr->trackpoints)->data)->timestamp) - (VIK_TRACKPOINT(tr->trackpoints->data)->timestamp) ); if ( dur > 0 ) g_snprintf ( time_buf2, sizeof(time_buf2), _("- %d:%02d hrs:mins"), (int)round(dur/3600), (int)round((dur/60)%60) ); } } // Get length and consider the appropriate distance units gdouble tr_len = vik_track_get_length(tr); vik_units_distance_t dist_units = a_vik_get_units_distance (); switch (dist_units) { case VIK_UNITS_DISTANCE_KILOMETRES: g_snprintf (tmp_buf, sizeof(tmp_buf), _("%s%.1f km %s"), time_buf1, tr_len/1000.0, time_buf2); break; case VIK_UNITS_DISTANCE_MILES: g_snprintf (tmp_buf, sizeof(tmp_buf), _("%s%.1f miles %s"), time_buf1, VIK_METERS_TO_MILES(tr_len), time_buf2); break; default: break; } return tmp_buf; } } break; case VIK_TRW_LAYER_SUBLAYER_WAYPOINTS: { // Very simple tooltip - may expand detail in the future... static gchar tmp_buf[32]; g_snprintf (tmp_buf, sizeof(tmp_buf), _("Waypoints: %d"), g_hash_table_size (l->waypoints)); return tmp_buf; } break; case VIK_TRW_LAYER_SUBLAYER_WAYPOINT: { VikWaypoint *w = g_hash_table_lookup ( l->waypoints, sublayer ); // NB It's OK to return NULL if ( w ) { if ( w->comment ) return w->comment; else return w->description; } } break; default: break; } return NULL; } /* * Function to show basic track point information on the statusbar */ static void set_statusbar_msg_info_trkpt ( VikTrwLayer *vtl, VikTrackpoint *trkpt ) { gchar tmp_buf1[64]; switch (a_vik_get_units_height ()) { case VIK_UNITS_HEIGHT_FEET: g_snprintf(tmp_buf1, sizeof(tmp_buf1), _("Trkpt: Alt %dft"), (int)round(VIK_METERS_TO_FEET(trkpt->altitude))); break; default: //VIK_UNITS_HEIGHT_METRES: g_snprintf(tmp_buf1, sizeof(tmp_buf1), _("Trkpt: Alt %dm"), (int)round(trkpt->altitude)); } gchar tmp_buf2[64]; tmp_buf2[0] = '\0'; if ( trkpt->has_timestamp ) { // Compact date time format strftime (tmp_buf2, sizeof(tmp_buf2), _(" | Time %x %X"), localtime(&(trkpt->timestamp))); } // Position part // Position is put later on, as this bit may not be seen if the display is not big enough, // one can easily use the current pointer position to see this if needed gchar *lat = NULL, *lon = NULL; static struct LatLon ll; vik_coord_to_latlon (&(trkpt->coord), &ll); a_coords_latlon_to_string ( &ll, &lat, &lon ); // Track name // Again is put later on, as this bit may not be seen if the display is not big enough // trackname can be seen from the treeview (when enabled) // Also name could be very long to not leave room for anything else gchar tmp_buf3[64]; tmp_buf3[0] = '\0'; if ( vtl->current_tp_track ) { g_snprintf(tmp_buf3, sizeof(tmp_buf3), _(" | Track: %s"), vtl->current_tp_track->name ); } // Combine parts to make overall message gchar *msg = g_strdup_printf (_("%s%s | %s %s %s"), tmp_buf1, tmp_buf2, lat, lon, tmp_buf3); vik_statusbar_set_message ( vik_window_get_statusbar (VIK_WINDOW(VIK_GTK_WINDOW_FROM_LAYER(vtl))), VIK_STATUSBAR_INFO, msg ); g_free ( lat ); g_free ( lon ); g_free ( msg ); } /* * Function to show basic waypoint information on the statusbar */ static void set_statusbar_msg_info_wpt ( VikTrwLayer *vtl, VikWaypoint *wpt ) { gchar tmp_buf1[64]; switch (a_vik_get_units_height ()) { case VIK_UNITS_HEIGHT_FEET: g_snprintf(tmp_buf1, sizeof(tmp_buf1), _("Wpt: Alt %dft"), (int)round(VIK_METERS_TO_FEET(wpt->altitude))); break; default: //VIK_UNITS_HEIGHT_METRES: g_snprintf(tmp_buf1, sizeof(tmp_buf1), _("Wpt: Alt %dm"), (int)round(wpt->altitude)); } // Position part // Position is put last, as this bit is most likely not to be seen if the display is not big enough, // one can easily use the current pointer position to see this if needed gchar *lat = NULL, *lon = NULL; static struct LatLon ll; vik_coord_to_latlon (&(wpt->coord), &ll); a_coords_latlon_to_string ( &ll, &lat, &lon ); // Combine parts to make overall message gchar *msg; if ( wpt->comment ) // Add comment if available msg = g_strdup_printf ( _("%s | %s %s | Comment: %s"), tmp_buf1, lat, lon, wpt->comment ); else msg = g_strdup_printf ( _("%s | %s %s"), tmp_buf1, lat, lon ); vik_statusbar_set_message ( vik_window_get_statusbar (VIK_WINDOW(VIK_GTK_WINDOW_FROM_LAYER(vtl))), VIK_STATUSBAR_INFO, msg ); g_free ( lat ); g_free ( lon ); g_free ( msg ); } /** * General layer selection function, find out which bit is selected and take appropriate action */ static gboolean trw_layer_selected ( VikTrwLayer *l, gint subtype, gpointer sublayer, gint type, gpointer vlp ) { // Reset l->current_wp = NULL; l->current_wp_id = NULL; trw_layer_cancel_current_tp ( l, FALSE ); // Clear statusbar vik_statusbar_set_message ( vik_window_get_statusbar (VIK_WINDOW(VIK_GTK_WINDOW_FROM_LAYER(l))), VIK_STATUSBAR_INFO, "" ); switch ( type ) { case VIK_TREEVIEW_TYPE_LAYER: { vik_window_set_selected_trw_layer ( (VikWindow *)VIK_GTK_WINDOW_FROM_LAYER(l), l ); /* Mark for redraw */ return TRUE; } break; case VIK_TREEVIEW_TYPE_SUBLAYER: { switch ( subtype ) { case VIK_TRW_LAYER_SUBLAYER_TRACKS: { vik_window_set_selected_tracks ( (VikWindow *)VIK_GTK_WINDOW_FROM_LAYER(l), l->tracks, l ); /* Mark for redraw */ return TRUE; } break; case VIK_TRW_LAYER_SUBLAYER_TRACK: { VikTrack *track = g_hash_table_lookup ( l->tracks, sublayer ); vik_window_set_selected_track ( (VikWindow *)VIK_GTK_WINDOW_FROM_LAYER(l), (gpointer)track, l ); /* Mark for redraw */ return TRUE; } break; case VIK_TRW_LAYER_SUBLAYER_ROUTES: { vik_window_set_selected_tracks ( (VikWindow *)VIK_GTK_WINDOW_FROM_LAYER(l), l->routes, l ); /* Mark for redraw */ return TRUE; } break; case VIK_TRW_LAYER_SUBLAYER_ROUTE: { VikTrack *track = g_hash_table_lookup ( l->routes, sublayer ); vik_window_set_selected_track ( (VikWindow *)VIK_GTK_WINDOW_FROM_LAYER(l), (gpointer)track, l ); /* Mark for redraw */ return TRUE; } break; case VIK_TRW_LAYER_SUBLAYER_WAYPOINTS: { vik_window_set_selected_waypoints ( (VikWindow *)VIK_GTK_WINDOW_FROM_LAYER(l), l->waypoints, l ); /* Mark for redraw */ return TRUE; } break; case VIK_TRW_LAYER_SUBLAYER_WAYPOINT: { VikWaypoint *wpt = g_hash_table_lookup ( l->waypoints, sublayer ); if ( wpt ) { vik_window_set_selected_waypoint ( (VikWindow *)VIK_GTK_WINDOW_FROM_LAYER(l), (gpointer)wpt, l ); // Show some waypoint info set_statusbar_msg_info_wpt ( l, wpt ); /* Mark for redraw */ return TRUE; } } break; default: { return vik_window_clear_highlight ( (VikWindow *)VIK_GTK_WINDOW_FROM_LAYER(l) ); } break; } return FALSE; } break; default: return vik_window_clear_highlight ( (VikWindow *)VIK_GTK_WINDOW_FROM_LAYER(l) ); break; } } GHashTable *vik_trw_layer_get_tracks ( VikTrwLayer *l ) { return l->tracks; } GHashTable *vik_trw_layer_get_routes ( VikTrwLayer *l ) { return l->routes; } GHashTable *vik_trw_layer_get_waypoints ( VikTrwLayer *l ) { return l->waypoints; } /* * ATM use a case sensitive find * Finds the first one */ static gboolean trw_layer_waypoint_find ( const gpointer id, const VikWaypoint *wp, const gchar *name ) { if ( wp && wp->name ) if ( ! strcmp ( wp->name, name ) ) return TRUE; return FALSE; } /* * Get waypoint by name - not guaranteed to be unique * Finds the first one */ VikWaypoint *vik_trw_layer_get_waypoint ( VikTrwLayer *vtl, const gchar *name ) { return g_hash_table_find ( vtl->waypoints, (GHRFunc) trw_layer_waypoint_find, (gpointer) name ); } /* * ATM use a case sensitive find * Finds the first one */ static gboolean trw_layer_track_find ( const gpointer id, const VikTrack *trk, const gchar *name ) { if ( trk && trk->name ) if ( ! strcmp ( trk->name, name ) ) return TRUE; return FALSE; } /* * Get track by name - not guaranteed to be unique * Finds the first one */ VikTrack *vik_trw_layer_get_track ( VikTrwLayer *vtl, const gchar *name ) { return g_hash_table_find ( vtl->tracks, (GHRFunc) trw_layer_track_find, (gpointer) name ); } /* * Get route by name - not guaranteed to be unique * Finds the first one */ VikTrack *vik_trw_layer_get_route ( VikTrwLayer *vtl, const gchar *name ) { return g_hash_table_find ( vtl->routes, (GHRFunc) trw_layer_track_find, (gpointer) name ); } static void trw_layer_find_maxmin_waypoints ( const gpointer id, const VikWaypoint *w, struct LatLon maxmin[2] ) { static VikCoord fixme; vik_coord_copy_convert ( &(w->coord), VIK_COORD_LATLON, &fixme ); if ( VIK_LATLON(&fixme)->lat > maxmin[0].lat || maxmin[0].lat == 0.0 ) maxmin[0].lat = VIK_LATLON(&fixme)->lat; if ( VIK_LATLON(&fixme)->lat < maxmin[1].lat || maxmin[1].lat == 0.0 ) maxmin[1].lat = VIK_LATLON(&fixme)->lat; if ( VIK_LATLON(&fixme)->lon > maxmin[0].lon || maxmin[0].lon == 0.0 ) maxmin[0].lon = VIK_LATLON(&fixme)->lon; if ( VIK_LATLON(&fixme)->lon < maxmin[1].lon || maxmin[1].lon == 0.0 ) maxmin[1].lon = VIK_LATLON(&fixme)->lon; } static void trw_layer_find_maxmin_tracks ( const gpointer id, const VikTrack *trk, struct LatLon maxmin[2] ) { GList *tr = trk->trackpoints; static VikCoord fixme; while ( tr ) { vik_coord_copy_convert ( &(VIK_TRACKPOINT(tr->data)->coord), VIK_COORD_LATLON, &fixme ); if ( VIK_LATLON(&fixme)->lat > maxmin[0].lat || maxmin[0].lat == 0.0 ) maxmin[0].lat = VIK_LATLON(&fixme)->lat; if ( VIK_LATLON(&fixme)->lat < maxmin[1].lat || maxmin[1].lat == 0.0 ) maxmin[1].lat = VIK_LATLON(&fixme)->lat; if ( VIK_LATLON(&fixme)->lon > maxmin[0].lon || maxmin[0].lon == 0.0 ) maxmin[0].lon = VIK_LATLON(&fixme)->lon; if ( VIK_LATLON(&fixme)->lon < maxmin[1].lon || maxmin[1].lon == 0.0 ) maxmin[1].lon = VIK_LATLON(&fixme)->lon; tr = tr->next; } } static void trw_layer_find_maxmin (VikTrwLayer *vtl, struct LatLon maxmin[2]) { // Continually reuse maxmin to find the latest maximum and minimum values g_hash_table_foreach ( vtl->waypoints, (GHFunc) trw_layer_find_maxmin_waypoints, maxmin ); g_hash_table_foreach ( vtl->tracks, (GHFunc) trw_layer_find_maxmin_tracks, maxmin ); g_hash_table_foreach ( vtl->routes, (GHFunc) trw_layer_find_maxmin_tracks, maxmin ); } gboolean vik_trw_layer_find_center ( VikTrwLayer *vtl, VikCoord *dest ) { /* TODO: what if there's only one waypoint @ 0,0, it will think nothing found. like I don't have more important things to worry about... */ struct LatLon maxmin[2] = { {0.0,0.0}, {0.0,0.0} }; trw_layer_find_maxmin (vtl, maxmin); if (maxmin[0].lat == 0.0 && maxmin[0].lon == 0.0 && maxmin[1].lat == 0.0 && maxmin[1].lon == 0.0) return FALSE; else { struct LatLon average = { (maxmin[0].lat+maxmin[1].lat)/2, (maxmin[0].lon+maxmin[1].lon)/2 }; vik_coord_load_from_latlon ( dest, vtl->coord_mode, &average ); return TRUE; } } static void trw_layer_centerize ( gpointer layer_and_vlp[2] ) { VikCoord coord; if ( vik_trw_layer_find_center ( VIK_TRW_LAYER(layer_and_vlp[0]), &coord ) ) goto_coord ( layer_and_vlp[1], NULL, NULL, &coord ); else a_dialog_info_msg ( VIK_GTK_WINDOW_FROM_LAYER(layer_and_vlp[0]), _("This layer has no waypoints or trackpoints.") ); } static void trw_layer_zoom_to_show_latlons ( VikTrwLayer *vtl, VikViewport *vvp, struct LatLon maxmin[2] ) { /* First set the center [in case previously viewing from elsewhere] */ /* Then loop through zoom levels until provided positions are in view */ /* This method is not particularly fast - but should work well enough */ struct LatLon average = { (maxmin[0].lat+maxmin[1].lat)/2, (maxmin[0].lon+maxmin[1].lon)/2 }; VikCoord coord; vik_coord_load_from_latlon ( &coord, vtl->coord_mode, &average ); vik_viewport_set_center_coord ( vvp, &coord ); /* Convert into definite 'smallest' and 'largest' positions */ struct LatLon minmin; if ( maxmin[0].lat < maxmin[1].lat ) minmin.lat = maxmin[0].lat; else minmin.lat = maxmin[1].lat; struct LatLon maxmax; if ( maxmin[0].lon > maxmin[1].lon ) maxmax.lon = maxmin[0].lon; else maxmax.lon = maxmin[1].lon; /* Never zoom in too far - generally not that useful, as too close ! */ /* Always recalculate the 'best' zoom level */ gdouble zoom = 1.0; vik_viewport_set_zoom ( vvp, zoom ); gdouble min_lat, max_lat, min_lon, max_lon; /* Should only be a maximum of about 18 iterations from min to max zoom levels */ while ( zoom <= VIK_VIEWPORT_MAX_ZOOM ) { vik_viewport_get_min_max_lat_lon ( vvp, &min_lat, &max_lat, &min_lon, &max_lon ); /* NB I think the logic used in this test to determine if the bounds is within view fails if track goes across 180 degrees longitude. Hopefully that situation is not too common... Mind you viking doesn't really do edge locations to well anyway */ if ( min_lat < minmin.lat && max_lat > minmin.lat && min_lon < maxmax.lon && max_lon > maxmax.lon ) /* Found within zoom level */ break; /* Try next */ zoom = zoom * 2; vik_viewport_set_zoom ( vvp, zoom ); } } gboolean vik_trw_layer_auto_set_view ( VikTrwLayer *vtl, VikViewport *vvp ) { /* TODO: what if there's only one waypoint @ 0,0, it will think nothing found. */ struct LatLon maxmin[2] = { {0.0,0.0}, {0.0,0.0} }; trw_layer_find_maxmin (vtl, maxmin); if (maxmin[0].lat == 0.0 && maxmin[0].lon == 0.0 && maxmin[1].lat == 0.0 && maxmin[1].lon == 0.0) return FALSE; else { trw_layer_zoom_to_show_latlons ( vtl, vvp, maxmin ); return TRUE; } } static void trw_layer_auto_view ( gpointer layer_and_vlp[2] ) { if ( vik_trw_layer_auto_set_view ( VIK_TRW_LAYER(layer_and_vlp[0]), vik_layers_panel_get_viewport (VIK_LAYERS_PANEL(layer_and_vlp[1])) ) ) { vik_layers_panel_emit_update ( VIK_LAYERS_PANEL(layer_and_vlp[1]) ); } else a_dialog_info_msg ( VIK_GTK_WINDOW_FROM_LAYER(layer_and_vlp[0]), _("This layer has no waypoints or trackpoints.") ); } static void trw_layer_export ( gpointer layer_and_vlp[2], const gchar *title, const gchar* default_name, VikTrack* trk, guint file_type ) { GtkWidget *file_selector; const gchar *fn; gboolean failed = FALSE; file_selector = gtk_file_chooser_dialog_new (title, NULL, GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, NULL); gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER(file_selector), default_name); while ( gtk_dialog_run ( GTK_DIALOG(file_selector) ) == GTK_RESPONSE_ACCEPT ) { fn = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER(file_selector) ); if ( g_file_test ( fn, G_FILE_TEST_EXISTS ) == FALSE ) { gtk_widget_hide ( file_selector ); failed = ! a_file_export ( VIK_TRW_LAYER(layer_and_vlp[0]), fn, file_type, trk, TRUE ); break; } else { if ( a_dialog_yes_or_no ( GTK_WINDOW(file_selector), _("The file \"%s\" exists, do you wish to overwrite it?"), a_file_basename ( fn ) ) ) { gtk_widget_hide ( file_selector ); failed = ! a_file_export ( VIK_TRW_LAYER(layer_and_vlp[0]), fn, file_type, trk, TRUE ); break; } } } gtk_widget_destroy ( file_selector ); if ( failed ) a_dialog_error_msg ( VIK_GTK_WINDOW_FROM_LAYER(layer_and_vlp[0]), _("The filename you requested could not be opened for writing.") ); } static void trw_layer_export_gpspoint ( gpointer layer_and_vlp[2] ) { trw_layer_export ( layer_and_vlp, _("Export Layer"), vik_layer_get_name(VIK_LAYER(layer_and_vlp[0])), NULL, FILE_TYPE_GPSPOINT ); } static void trw_layer_export_gpsmapper ( gpointer layer_and_vlp[2] ) { trw_layer_export ( layer_and_vlp, _("Export Layer"), vik_layer_get_name(VIK_LAYER(layer_and_vlp[0])), NULL, FILE_TYPE_GPSMAPPER ); } static void trw_layer_export_gpx ( gpointer layer_and_vlp[2] ) { /* Auto append '.gpx' to track name (providing it's not already there) for the default filename */ gchar *auto_save_name = g_strdup ( vik_layer_get_name(VIK_LAYER(layer_and_vlp[0])) ); if ( ! check_file_ext ( auto_save_name, ".gpx" ) ) auto_save_name = g_strconcat ( auto_save_name, ".gpx", NULL ); trw_layer_export ( layer_and_vlp, _("Export Layer"), auto_save_name, NULL, FILE_TYPE_GPX ); g_free ( auto_save_name ); } static void trw_layer_export_kml ( gpointer layer_and_vlp[2] ) { /* Auto append '.kml' to the name (providing it's not already there) for the default filename */ gchar *auto_save_name = g_strdup ( vik_layer_get_name(VIK_LAYER(layer_and_vlp[0])) ); if ( ! check_file_ext ( auto_save_name, ".kml" ) ) auto_save_name = g_strconcat ( auto_save_name, ".kml", NULL ); trw_layer_export ( layer_and_vlp, _("Export Layer"), auto_save_name, NULL, FILE_TYPE_KML ); g_free ( auto_save_name ); } /** * Convert the given TRW layer into a temporary GPX file and open it with the specified program * */ static void trw_layer_export_external_gpx ( gpointer layer_and_vlp[2], const gchar* external_program ) { gchar *name_used = NULL; int fd; if ((fd = g_file_open_tmp("tmp-viking.XXXXXX.gpx", &name_used, NULL)) >= 0) { gboolean failed = ! a_file_export ( VIK_TRW_LAYER(layer_and_vlp[0]), name_used, FILE_TYPE_GPX, NULL, TRUE); if (failed) { a_dialog_error_msg (VIK_GTK_WINDOW_FROM_LAYER(layer_and_vlp[0]), _("Could not create temporary file for export.") ); } else { GError *err = NULL; gchar *quoted_file = g_shell_quote ( name_used ); gchar *cmd = g_strdup_printf ( "%s %s", external_program, quoted_file ); g_free ( quoted_file ); if ( ! g_spawn_command_line_async ( cmd, &err ) ) { a_dialog_error_msg_extra ( VIK_GTK_WINDOW_FROM_LAYER( layer_and_vlp[0]), _("Could not launch %s."), external_program ); g_error_free ( err ); } g_free ( cmd ); } // Note ATM the 'temporary' file is not deleted, as loading via another program is not instantaneous //g_remove ( name_used ); // Perhaps should be deleted when the program ends? // For now leave it to the user to delete it / use system temp cleanup methods. g_free ( name_used ); } } static void trw_layer_export_external_gpx_1 ( gpointer layer_and_vlp[2] ) { trw_layer_export_external_gpx ( layer_and_vlp, a_vik_get_external_gpx_program_1() ); } static void trw_layer_export_external_gpx_2 ( gpointer layer_and_vlp[2] ) { trw_layer_export_external_gpx ( layer_and_vlp, a_vik_get_external_gpx_program_2() ); } static void trw_layer_export_gpx_track ( gpointer pass_along[6] ) { gpointer layer_and_vlp[2]; layer_and_vlp[0] = pass_along[0]; layer_and_vlp[1] = pass_along[1]; VikTrwLayer *vtl = VIK_TRW_LAYER(pass_along[0]); VikTrack *trk; if ( GPOINTER_TO_INT (pass_along[2]) == VIK_TRW_LAYER_SUBLAYER_ROUTE ) trk = (VikTrack *) g_hash_table_lookup ( vtl->routes, pass_along[3] ); else trk = (VikTrack *) g_hash_table_lookup ( vtl->tracks, pass_along[3] ); if ( !trk || !trk->name ) return; /* Auto append '.gpx' to track name (providing it's not already there) for the default filename */ gchar *auto_save_name = g_strdup ( trk->name ); if ( ! check_file_ext ( auto_save_name, ".gpx" ) ) auto_save_name = g_strconcat ( auto_save_name, ".gpx", NULL ); trw_layer_export ( layer_and_vlp, _("Export Track as GPX"), auto_save_name, trk, FILE_TYPE_GPX ); g_free ( auto_save_name ); } typedef struct { VikWaypoint *wp; // input gpointer uuid; // output } wpu_udata; static gboolean trw_layer_waypoint_find_uuid ( const gpointer id, const VikWaypoint *wp, gpointer udata ) { wpu_udata *user_data = udata; if ( wp == user_data->wp ) { user_data->uuid = id; return TRUE; } return FALSE; } static void trw_layer_goto_wp ( gpointer layer_and_vlp[2] ) { GtkWidget *dia = gtk_dialog_new_with_buttons (_("Find"), VIK_GTK_WINDOW_FROM_LAYER(layer_and_vlp[0]), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL); GtkWidget *label, *entry; label = gtk_label_new(_("Waypoint Name:")); entry = gtk_entry_new(); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dia)->vbox), label, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dia)->vbox), entry, FALSE, FALSE, 0); gtk_widget_show_all ( label ); gtk_widget_show_all ( entry ); gtk_dialog_set_default_response ( GTK_DIALOG(dia), GTK_RESPONSE_ACCEPT ); while ( gtk_dialog_run ( GTK_DIALOG(dia) ) == GTK_RESPONSE_ACCEPT ) { gchar *name = g_strdup(gtk_entry_get_text(GTK_ENTRY(entry))); // Find *first* wp with the given name VikWaypoint *wp = vik_trw_layer_get_waypoint ( VIK_TRW_LAYER(layer_and_vlp[0]), name ); if ( !wp ) a_dialog_error_msg ( VIK_GTK_WINDOW_FROM_LAYER(layer_and_vlp[0]), _("Waypoint not found in this layer.") ); else { vik_viewport_set_center_coord ( vik_layers_panel_get_viewport(VIK_LAYERS_PANEL(layer_and_vlp[1])), &(wp->coord) ); vik_layers_panel_emit_update ( VIK_LAYERS_PANEL(layer_and_vlp[1]) ); // Find and select on the side panel wpu_udata udata; udata.wp = wp; udata.uuid = NULL; // Hmmm, want key of it gpointer *wpf = g_hash_table_find ( VIK_TRW_LAYER(layer_and_vlp[0])->waypoints, (GHRFunc) trw_layer_waypoint_find_uuid, (gpointer) &udata ); if ( wpf && udata.uuid ) { GtkTreeIter *it = g_hash_table_lookup ( VIK_TRW_LAYER(layer_and_vlp[0])->waypoints_iters, udata.uuid ); vik_treeview_select_iter ( VIK_LAYER(layer_and_vlp[0])->vt, it, TRUE ); } break; } g_free ( name ); } gtk_widget_destroy ( dia ); } gboolean vik_trw_layer_new_waypoint ( VikTrwLayer *vtl, GtkWindow *w, const VikCoord *def_coord ) { gchar *default_name = highest_wp_number_get(vtl); VikWaypoint *wp = vik_waypoint_new(); gchar *returned_name; gboolean updated; wp->coord = *def_coord; // Attempt to auto set height if DEM data is available gint16 elev = a_dems_get_elev_by_coord ( &(wp->coord), VIK_DEM_INTERPOL_BEST ); if ( elev != VIK_DEM_INVALID_ELEVATION ) wp->altitude = (gdouble)elev; returned_name = a_dialog_waypoint ( w, default_name, wp, vtl->coord_mode, TRUE, &updated ); if ( returned_name ) { wp->visible = TRUE; vik_trw_layer_add_waypoint ( vtl, returned_name, wp ); g_free (default_name); g_free (returned_name); return TRUE; } g_free (default_name); vik_waypoint_free(wp); return FALSE; } static void trw_layer_new_wikipedia_wp_viewport ( gpointer lav[2] ) { struct LatLon maxmin[2] = { {0.0,0.0}, {0.0,0.0} }; VikTrwLayer *vtl = VIK_TRW_LAYER(lav[0]); VikLayersPanel *vlp = VIK_LAYERS_PANEL(lav[1]); VikWindow *vw = (VikWindow *)(VIK_GTK_WINDOW_FROM_LAYER(vtl)); VikViewport *vvp = vik_window_viewport(vw); // Note the order is max part first then min part - thus reverse order of use in min_max function: vik_viewport_get_min_max_lat_lon ( vvp, &maxmin[1].lat, &maxmin[0].lat, &maxmin[1].lon, &maxmin[0].lon ); a_geonames_wikipedia_box((VikWindow *)(VIK_GTK_WINDOW_FROM_LAYER(vtl)), vtl, maxmin); vik_layers_panel_emit_update ( vlp ); } static void trw_layer_new_wikipedia_wp_layer ( gpointer lav[2] ) { VikTrwLayer *vtl = VIK_TRW_LAYER(lav[0]); VikLayersPanel *vlp = VIK_LAYERS_PANEL(lav[1]); struct LatLon maxmin[2] = { {0.0,0.0}, {0.0,0.0} }; trw_layer_find_maxmin (vtl, maxmin); a_geonames_wikipedia_box((VikWindow *)(VIK_GTK_WINDOW_FROM_LAYER(vtl)), vtl, maxmin); vik_layers_panel_emit_update ( vlp ); } #ifdef VIK_CONFIG_GEOTAG static void trw_layer_geotagging_waypoint_mtime_keep ( gpointer pass_along[6] ) { VikWaypoint *wp = g_hash_table_lookup ( VIK_TRW_LAYER(pass_along[0])->waypoints, pass_along[3] ); if ( wp ) // Update directly - not changing the mtime a_geotag_write_exif_gps ( wp->image, wp->coord, wp->altitude, TRUE ); } static void trw_layer_geotagging_waypoint_mtime_update ( gpointer pass_along[6] ) { VikWaypoint *wp = g_hash_table_lookup ( VIK_TRW_LAYER(pass_along[0])->waypoints, pass_along[3] ); if ( wp ) // Update directly a_geotag_write_exif_gps ( wp->image, wp->coord, wp->altitude, FALSE ); } /* * Use code in separate file for this feature as reasonably complex */ static void trw_layer_geotagging_track ( gpointer pass_along[6] ) { VikTrwLayer *vtl = VIK_TRW_LAYER(pass_along[0]); VikTrack *track = g_hash_table_lookup ( VIK_TRW_LAYER(pass_along[0])->tracks, pass_along[3] ); // Unset so can be reverified later if necessary vtl->has_verified_thumbnails = FALSE; trw_layer_geotag_dialog ( VIK_GTK_WINDOW_FROM_LAYER(vtl), vtl, track, track->name ); } static void trw_layer_geotagging ( gpointer lav[2] ) { VikTrwLayer *vtl = VIK_TRW_LAYER(lav[0]); // Unset so can be reverified later if necessary vtl->has_verified_thumbnails = FALSE; trw_layer_geotag_dialog ( VIK_GTK_WINDOW_FROM_LAYER(vtl), vtl, NULL, NULL); } #endif // 'Acquires' - Same as in File Menu -> Acquire - applies into the selected TRW Layer // /* * Acquire into this TRW Layer straight from GPS Device */ static void trw_layer_acquire_gps_cb ( gpointer lav[2] ) { VikTrwLayer *vtl = VIK_TRW_LAYER(lav[0]); VikLayersPanel *vlp = VIK_LAYERS_PANEL(lav[1]); VikWindow *vw = (VikWindow *)(VIK_GTK_WINDOW_FROM_LAYER(vtl)); VikViewport *vvp = vik_window_viewport(vw); vik_datasource_gps_interface.mode = VIK_DATASOURCE_ADDTOLAYER; a_acquire ( vw, vlp, vvp, &vik_datasource_gps_interface ); } #ifdef VIK_CONFIG_GOOGLE /* * Acquire into this TRW Layer from Google Directions */ static void trw_layer_acquire_google_cb ( gpointer lav[2] ) { VikTrwLayer *vtl = VIK_TRW_LAYER(lav[0]); VikLayersPanel *vlp = VIK_LAYERS_PANEL(lav[1]); VikWindow *vw = (VikWindow *)(VIK_GTK_WINDOW_FROM_LAYER(vtl)); VikViewport *vvp = vik_window_viewport(vw); a_acquire ( vw, vlp, vvp, &vik_datasource_google_interface ); } #endif #ifdef VIK_CONFIG_OPENSTREETMAP /* * Acquire into this TRW Layer from OSM */ static void trw_layer_acquire_osm_cb ( gpointer lav[2] ) { VikTrwLayer *vtl = VIK_TRW_LAYER(lav[0]); VikLayersPanel *vlp = VIK_LAYERS_PANEL(lav[1]); VikWindow *vw = (VikWindow *)(VIK_GTK_WINDOW_FROM_LAYER(vtl)); VikViewport *vvp = vik_window_viewport(vw); a_acquire ( vw, vlp, vvp, &vik_datasource_osm_interface ); } /** * Acquire into this TRW Layer from OSM for 'My' Traces */ static void trw_layer_acquire_osm_my_traces_cb ( gpointer lav[2] ) { VikTrwLayer *vtl = VIK_TRW_LAYER(lav[0]); VikLayersPanel *vlp = VIK_LAYERS_PANEL(lav[1]); VikWindow *vw = (VikWindow *)(VIK_GTK_WINDOW_FROM_LAYER(vtl)); VikViewport *vvp = vik_window_viewport(vw); a_acquire ( vw, vlp, vvp, &vik_datasource_osm_my_traces_interface ); } #endif #ifdef VIK_CONFIG_GEOCACHES /* * Acquire into this TRW Layer from Geocaching.com */ static void trw_layer_acquire_geocache_cb ( gpointer lav[2] ) { VikTrwLayer *vtl = VIK_TRW_LAYER(lav[0]); VikLayersPanel *vlp = VIK_LAYERS_PANEL(lav[1]); VikWindow *vw = (VikWindow *)(VIK_GTK_WINDOW_FROM_LAYER(vtl)); VikViewport *vvp = vik_window_viewport(vw); a_acquire ( vw, vlp, vvp, &vik_datasource_gc_interface ); } #endif #ifdef VIK_CONFIG_GEOTAG /* * Acquire into this TRW Layer from images */ static void trw_layer_acquire_geotagged_cb ( gpointer lav[2] ) { VikTrwLayer *vtl = VIK_TRW_LAYER(lav[0]); VikLayersPanel *vlp = VIK_LAYERS_PANEL(lav[1]); VikWindow *vw = (VikWindow *)(VIK_GTK_WINDOW_FROM_LAYER(vtl)); VikViewport *vvp = vik_window_viewport(vw); vik_datasource_geotag_interface.mode = VIK_DATASOURCE_ADDTOLAYER; a_acquire ( vw, vlp, vvp, &vik_datasource_geotag_interface ); // Reverify thumbnails as they may have changed vtl->has_verified_thumbnails = FALSE; trw_layer_verify_thumbnails ( vtl, NULL ); } #endif static void trw_layer_gps_upload ( gpointer lav[2] ) { gpointer pass_along[6]; pass_along[0] = lav[0]; pass_along[1] = lav[1]; pass_along[2] = NULL; // No track - operate on the layer pass_along[3] = NULL; pass_along[4] = NULL; pass_along[5] = NULL; trw_layer_gps_upload_any ( pass_along ); } /** * If pass_along[3] is defined that this will upload just that track */ static void trw_layer_gps_upload_any ( gpointer pass_along[6] ) { VikTrwLayer *vtl = VIK_TRW_LAYER(pass_along[0]); VikLayersPanel *vlp = VIK_LAYERS_PANEL(pass_along[1]); // May not actually get a track here as pass_along[2&3] can be null VikTrack *track = NULL; vik_gps_xfer_type xfer_type = TRK; // VIK_TRW_LAYER_SUBLAYER_TRACKS = 0 so hard to test different from NULL! gboolean xfer_all = FALSE; if ( pass_along[2] ) { xfer_all = FALSE; if ( GPOINTER_TO_INT (pass_along[2]) == VIK_TRW_LAYER_SUBLAYER_ROUTE ) { track = (VikTrack *) g_hash_table_lookup ( vtl->routes, pass_along[3] ); xfer_type = RTE; } else if ( GPOINTER_TO_INT (pass_along[2]) == VIK_TRW_LAYER_SUBLAYER_TRACK ) { track = (VikTrack *) g_hash_table_lookup ( vtl->tracks, pass_along[3] ); xfer_type = TRK; } else if ( GPOINTER_TO_INT (pass_along[2]) == VIK_TRW_LAYER_SUBLAYER_WAYPOINTS ) { xfer_type = WPT; } else if ( GPOINTER_TO_INT (pass_along[2]) == VIK_TRW_LAYER_SUBLAYER_ROUTES ) { xfer_type = RTE; } } else if ( !pass_along[4] ) xfer_all = TRUE; // i.e. whole layer if (track && !track->visible) { a_dialog_error_msg ( VIK_GTK_WINDOW_FROM_LAYER(vtl), _("Can not upload invisible track.") ); return; } GtkWidget *dialog = gtk_dialog_new_with_buttons ( _("GPS Upload"), VIK_GTK_WINDOW_FROM_LAYER(pass_along[0]), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, NULL ); gtk_dialog_set_default_response ( GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT ); GtkWidget *response_w = NULL; #if GTK_CHECK_VERSION (2, 20, 0) response_w = gtk_dialog_get_widget_for_response ( GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT ); #endif if ( response_w ) gtk_widget_grab_focus ( response_w ); gpointer dgs = datasource_gps_setup ( dialog, xfer_type, xfer_all ); if ( gtk_dialog_run ( GTK_DIALOG(dialog) ) != GTK_RESPONSE_ACCEPT ) { datasource_gps_clean_up ( dgs ); gtk_widget_destroy ( dialog ); return; } // Get info from reused datasource dialog widgets gchar* protocol = datasource_gps_get_protocol ( dgs ); gchar* port = datasource_gps_get_descriptor ( dgs ); // NB don't free the above strings as they're references to values held elsewhere gboolean do_tracks = datasource_gps_get_do_tracks ( dgs ); gboolean do_routes = datasource_gps_get_do_routes ( dgs ); gboolean do_waypoints = datasource_gps_get_do_waypoints ( dgs ); gboolean turn_off = datasource_gps_get_off ( dgs ); gtk_widget_destroy ( dialog ); // When called from the viewport - work the corresponding layerspanel: if ( !vlp ) { vlp = vik_window_layers_panel ( VIK_WINDOW(VIK_GTK_WINDOW_FROM_LAYER(vtl)) ); } // Apply settings to transfer to the GPS device vik_gps_comm ( vtl, track, GPS_UP, protocol, port, FALSE, vik_layers_panel_get_viewport (vlp), vlp, do_tracks, do_routes, do_waypoints, turn_off ); } /* * Acquire into this TRW Layer from any GPS Babel supported file */ static void trw_layer_acquire_file_cb ( gpointer lav[2] ) { VikTrwLayer *vtl = VIK_TRW_LAYER(lav[0]); VikLayersPanel *vlp = VIK_LAYERS_PANEL(lav[1]); VikWindow *vw = (VikWindow *)(VIK_GTK_WINDOW_FROM_LAYER(vtl)); VikViewport *vvp = vik_window_viewport(vw); a_acquire ( vw, vlp, vvp, &vik_datasource_file_interface ); } static void trw_layer_new_wp ( gpointer lav[2] ) { VikTrwLayer *vtl = VIK_TRW_LAYER(lav[0]); VikLayersPanel *vlp = VIK_LAYERS_PANEL(lav[1]); /* TODO longone: okay, if layer above (aggregate) is invisible but vtl->visible is true, this redraws for no reason. instead return true if you want to update. */ if ( vik_trw_layer_new_waypoint ( vtl, VIK_GTK_WINDOW_FROM_LAYER(vtl), vik_viewport_get_center(vik_layers_panel_get_viewport(vlp))) && VIK_LAYER(vtl)->visible ) vik_layers_panel_emit_update ( vlp ); } static void new_track_create_common ( VikTrwLayer *vtl, gchar *name ) { vtl->current_track = vik_track_new(); vtl->current_track->visible = TRUE; if ( vtl->drawmode == DRAWMODE_ALL_SAME_COLOR ) // Create track with the preferred colour from the layer properties vtl->current_track->color = vtl->track_color; else gdk_color_parse ( "#000000", &(vtl->current_track->color) ); vtl->current_track->has_color = TRUE; vik_trw_layer_add_track ( vtl, name, vtl->current_track ); } static void trw_layer_new_track ( gpointer lav[2] ) { VikTrwLayer *vtl = VIK_TRW_LAYER(lav[0]); if ( ! vtl->current_track ) { gchar *name = trw_layer_new_unique_sublayer_name ( vtl, VIK_TRW_LAYER_SUBLAYER_TRACK, _("Track")) ; new_track_create_common ( vtl, name ); vik_window_enable_layer_tool ( VIK_WINDOW(VIK_GTK_WINDOW_FROM_LAYER(vtl)), VIK_LAYER_TRW, TOOL_CREATE_TRACK ); } } static void new_route_create_common ( VikTrwLayer *vtl, gchar *name ) { vtl->current_track = vik_track_new(); vtl->current_track->visible = TRUE; vtl->current_track->is_route = TRUE; // By default make all routes red vtl->current_track->has_color = TRUE; gdk_color_parse ( "red", &vtl->current_track->color ); vik_trw_layer_add_route ( vtl, name, vtl->current_track ); } static void trw_layer_new_route ( gpointer lav[2] ) { VikTrwLayer *vtl = VIK_TRW_LAYER(lav[0]); if ( ! vtl->current_track ) { gchar *name = trw_layer_new_unique_sublayer_name ( vtl, VIK_TRW_LAYER_SUBLAYER_ROUTE, _("Route")) ; new_route_create_common ( vtl, name ); vik_window_enable_layer_tool ( VIK_WINDOW(VIK_GTK_WINDOW_FROM_LAYER(vtl)), VIK_LAYER_TRW, TOOL_CREATE_ROUTE ); } } static void trw_layer_auto_routes_view ( gpointer lav[2] ) { VikTrwLayer *vtl = VIK_TRW_LAYER(lav[0]); VikLayersPanel *vlp = VIK_LAYERS_PANEL(lav[1]); if ( g_hash_table_size (vtl->routes) > 0 ) { struct LatLon maxmin[2] = { {0,0}, {0,0} }; g_hash_table_foreach ( vtl->routes, (GHFunc) trw_layer_find_maxmin_tracks, maxmin ); trw_layer_zoom_to_show_latlons ( vtl, vik_layers_panel_get_viewport (vlp), maxmin ); vik_layers_panel_emit_update ( vlp ); } } static void trw_layer_finish_track ( gpointer lav[2] ) { VikTrwLayer *vtl = VIK_TRW_LAYER(lav[0]); vtl->current_track = NULL; vik_layer_emit_update ( VIK_LAYER(vtl) ); } static void trw_layer_auto_tracks_view ( gpointer lav[2] ) { VikTrwLayer *vtl = VIK_TRW_LAYER(lav[0]); VikLayersPanel *vlp = VIK_LAYERS_PANEL(lav[1]); if ( g_hash_table_size (vtl->tracks) > 0 ) { struct LatLon maxmin[2] = { {0,0}, {0,0} }; g_hash_table_foreach ( vtl->tracks, (GHFunc) trw_layer_find_maxmin_tracks, maxmin ); trw_layer_zoom_to_show_latlons ( vtl, vik_layers_panel_get_viewport (vlp), maxmin ); vik_layers_panel_emit_update ( vlp ); } } static void trw_layer_single_waypoint_jump ( const gpointer id, const VikWaypoint *wp, gpointer vvp ) { /* NB do not care if wp is visible or not */ vik_viewport_set_center_coord ( VIK_VIEWPORT(vvp), &(wp->coord) ); } static void trw_layer_auto_waypoints_view ( gpointer lav[2] ) { VikTrwLayer *vtl = VIK_TRW_LAYER(lav[0]); VikLayersPanel *vlp = VIK_LAYERS_PANEL(lav[1]); /* Only 1 waypoint - jump straight to it */ if ( g_hash_table_size (vtl->waypoints) == 1 ) { VikViewport *vvp = vik_layers_panel_get_viewport (vlp); g_hash_table_foreach ( vtl->waypoints, (GHFunc) trw_layer_single_waypoint_jump, (gpointer) vvp ); } /* If at least 2 waypoints - find center and then zoom to fit */ else if ( g_hash_table_size (vtl->waypoints) > 1 ) { struct LatLon maxmin[2] = { {0,0}, {0,0} }; g_hash_table_foreach ( vtl->waypoints, (GHFunc) trw_layer_find_maxmin_waypoints, maxmin ); trw_layer_zoom_to_show_latlons ( vtl, vik_layers_panel_get_viewport (vlp), maxmin ); } vik_layers_panel_emit_update ( vlp ); } static void trw_layer_add_menu_items ( VikTrwLayer *vtl, GtkMenu *menu, gpointer vlp ) { static gpointer pass_along[2]; GtkWidget *item; GtkWidget *export_submenu; pass_along[0] = vtl; pass_along[1] = vlp; item = gtk_menu_item_new(); gtk_menu_shell_append ( GTK_MENU_SHELL(menu), item ); gtk_widget_show ( item ); if ( vtl->current_track ) { if ( vtl->current_track->is_route ) item = gtk_menu_item_new_with_mnemonic ( _("_Finish Route") ); else item = gtk_menu_item_new_with_mnemonic ( _("_Finish Track") ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_finish_track), pass_along ); gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); gtk_widget_show ( item ); // Add separator item = gtk_menu_item_new (); gtk_menu_shell_append ( GTK_MENU_SHELL(menu), item ); gtk_widget_show ( item ); } /* Now with icons */ item = gtk_image_menu_item_new_with_mnemonic ( _("_View Layer") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_ZOOM_FIT, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_auto_view), pass_along ); gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); gtk_widget_show ( item ); GtkWidget *view_submenu = gtk_menu_new(); item = gtk_image_menu_item_new_with_mnemonic ( _("V_iew") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_FIND, GTK_ICON_SIZE_MENU) ); gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); gtk_widget_show ( item ); gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), view_submenu ); item = gtk_menu_item_new_with_mnemonic ( _("View All _Tracks") ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_auto_tracks_view), pass_along ); gtk_menu_shell_append (GTK_MENU_SHELL (view_submenu), item); gtk_widget_show ( item ); item = gtk_menu_item_new_with_mnemonic ( _("View All _Routes") ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_auto_routes_view), pass_along ); gtk_menu_shell_append (GTK_MENU_SHELL (view_submenu), item); gtk_widget_show ( item ); item = gtk_menu_item_new_with_mnemonic ( _("View All _Waypoints") ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_auto_waypoints_view), pass_along ); gtk_menu_shell_append (GTK_MENU_SHELL (view_submenu), item); gtk_widget_show ( item ); item = gtk_image_menu_item_new_with_mnemonic ( _("_Goto Center of Layer") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_JUMP_TO, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_centerize), pass_along ); gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); gtk_widget_show ( item ); item = gtk_menu_item_new_with_mnemonic ( _("Goto _Waypoint...") ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_goto_wp), pass_along ); gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); gtk_widget_show ( item ); export_submenu = gtk_menu_new (); item = gtk_image_menu_item_new_with_mnemonic ( _("_Export Layer") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_HARDDISK, GTK_ICON_SIZE_MENU) ); gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); gtk_widget_show ( item ); gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), export_submenu ); item = gtk_menu_item_new_with_mnemonic ( _("Export as GPS_Point...") ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_export_gpspoint), pass_along ); gtk_menu_shell_append (GTK_MENU_SHELL (export_submenu), item); gtk_widget_show ( item ); item = gtk_menu_item_new_with_mnemonic ( _("Export as GPS_Mapper...") ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_export_gpsmapper), pass_along ); gtk_menu_shell_append (GTK_MENU_SHELL (export_submenu), item); gtk_widget_show ( item ); item = gtk_menu_item_new_with_mnemonic ( _("Export as _GPX...") ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_export_gpx), pass_along ); gtk_menu_shell_append (GTK_MENU_SHELL (export_submenu), item); gtk_widget_show ( item ); item = gtk_menu_item_new_with_mnemonic ( _("Export as _KML...") ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_export_kml), pass_along ); gtk_menu_shell_append (GTK_MENU_SHELL (export_submenu), item); gtk_widget_show ( item ); gchar* external1 = g_strconcat ( _("Open with External Program_1: "), a_vik_get_external_gpx_program_1(), NULL ); item = gtk_menu_item_new_with_mnemonic ( external1 ); g_free ( external1 ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_export_external_gpx_1), pass_along ); gtk_menu_shell_append (GTK_MENU_SHELL (export_submenu), item); gtk_widget_show ( item ); gchar* external2 = g_strconcat ( _("Open with External Program_2: "), a_vik_get_external_gpx_program_2(), NULL ); item = gtk_menu_item_new_with_mnemonic ( external2 ); g_free ( external2 ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_export_external_gpx_2), pass_along ); gtk_menu_shell_append (GTK_MENU_SHELL (export_submenu), item); gtk_widget_show ( item ); GtkWidget *new_submenu = gtk_menu_new(); item = gtk_image_menu_item_new_with_mnemonic ( _("_New") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_NEW, GTK_ICON_SIZE_MENU) ); gtk_menu_shell_append(GTK_MENU_SHELL (menu), item); gtk_widget_show(item); gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), new_submenu); item = gtk_image_menu_item_new_with_mnemonic ( _("New _Waypoint...") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_NEW, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_new_wp), pass_along ); gtk_menu_shell_append (GTK_MENU_SHELL (new_submenu), item); gtk_widget_show ( item ); item = gtk_image_menu_item_new_with_mnemonic ( _("New _Track") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_NEW, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_new_track), pass_along ); gtk_menu_shell_append (GTK_MENU_SHELL (new_submenu), item); gtk_widget_show ( item ); // Make it available only when a new track *not* already in progress gtk_widget_set_sensitive ( item, ! (gboolean)GPOINTER_TO_INT(vtl->current_track) ); item = gtk_image_menu_item_new_with_mnemonic ( _("New _Route") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_NEW, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_new_route), pass_along ); gtk_menu_shell_append (GTK_MENU_SHELL (new_submenu), item); gtk_widget_show ( item ); // Make it available only when a new track *not* already in progress gtk_widget_set_sensitive ( item, ! (gboolean)GPOINTER_TO_INT(vtl->current_track) ); #ifdef VIK_CONFIG_GEOTAG item = gtk_menu_item_new_with_mnemonic ( _("Geotag _Images...") ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_geotagging), pass_along ); gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); gtk_widget_show ( item ); #endif GtkWidget *acquire_submenu = gtk_menu_new (); item = gtk_image_menu_item_new_with_mnemonic ( _("_Acquire") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_GO_DOWN, GTK_ICON_SIZE_MENU) ); gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); gtk_widget_show ( item ); gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), acquire_submenu ); item = gtk_menu_item_new_with_mnemonic ( _("From _GPS...") ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_acquire_gps_cb), pass_along ); gtk_menu_shell_append (GTK_MENU_SHELL (acquire_submenu), item); gtk_widget_show ( item ); #ifdef VIK_CONFIG_GOOGLE item = gtk_menu_item_new_with_mnemonic ( _("From Google _Directions...") ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_acquire_google_cb), pass_along ); gtk_menu_shell_append (GTK_MENU_SHELL (acquire_submenu), item); gtk_widget_show ( item ); #endif #ifdef VIK_CONFIG_OPENSTREETMAP item = gtk_menu_item_new_with_mnemonic ( _("From _OSM Traces...") ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_acquire_osm_cb), pass_along ); gtk_menu_shell_append (GTK_MENU_SHELL (acquire_submenu), item); gtk_widget_show ( item ); item = gtk_menu_item_new_with_mnemonic ( _("From _My OSM Traces...") ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_acquire_osm_my_traces_cb), pass_along ); gtk_menu_shell_append (GTK_MENU_SHELL (acquire_submenu), item); gtk_widget_show ( item ); #endif #ifdef VIK_CONFIG_GEONAMES GtkWidget *wikipedia_submenu = gtk_menu_new(); item = gtk_image_menu_item_new_with_mnemonic ( _("From _Wikipedia Waypoints") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_ADD, GTK_ICON_SIZE_MENU) ); gtk_menu_shell_append(GTK_MENU_SHELL (acquire_submenu), item); gtk_widget_show(item); gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), wikipedia_submenu); item = gtk_image_menu_item_new_with_mnemonic ( _("Within _Layer Bounds") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_ZOOM_FIT, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_new_wikipedia_wp_layer), pass_along ); gtk_menu_shell_append (GTK_MENU_SHELL (wikipedia_submenu), item); gtk_widget_show ( item ); item = gtk_image_menu_item_new_with_mnemonic ( _("Within _Current View") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_ZOOM_100, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_new_wikipedia_wp_viewport), pass_along ); gtk_menu_shell_append (GTK_MENU_SHELL (wikipedia_submenu), item); gtk_widget_show ( item ); #endif #ifdef VIK_CONFIG_GEOCACHES item = gtk_menu_item_new_with_mnemonic ( _("From Geo_caching...") ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_acquire_geocache_cb), pass_along ); gtk_menu_shell_append (GTK_MENU_SHELL (acquire_submenu), item); gtk_widget_show ( item ); #endif #ifdef VIK_CONFIG_GEOTAG item = gtk_menu_item_new_with_mnemonic ( _("From Geotagged _Images...") ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_acquire_geotagged_cb), pass_along ); gtk_menu_shell_append (GTK_MENU_SHELL (acquire_submenu), item); gtk_widget_show ( item ); #endif item = gtk_menu_item_new_with_mnemonic ( _("From _File...") ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_acquire_file_cb), pass_along ); gtk_menu_shell_append (GTK_MENU_SHELL (acquire_submenu), item); gtk_widget_show ( item ); GtkWidget *upload_submenu = gtk_menu_new (); item = gtk_image_menu_item_new_with_mnemonic ( _("_Upload") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_GO_UP, GTK_ICON_SIZE_MENU) ); gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); gtk_widget_show ( item ); gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), upload_submenu ); item = gtk_image_menu_item_new_with_mnemonic ( _("Upload to _GPS...") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_GO_FORWARD, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_gps_upload), pass_along ); gtk_menu_shell_append (GTK_MENU_SHELL (upload_submenu), item); gtk_widget_show ( item ); #ifdef VIK_CONFIG_OPENSTREETMAP item = gtk_image_menu_item_new_with_mnemonic ( _("Upload to _OSM...") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_GO_UP, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(osm_traces_upload_cb), pass_along ); gtk_menu_shell_append (GTK_MENU_SHELL (upload_submenu), item); gtk_widget_show ( item ); #endif GtkWidget *delete_submenu = gtk_menu_new (); item = gtk_image_menu_item_new_with_mnemonic ( _("De_lete") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_REMOVE, GTK_ICON_SIZE_MENU) ); gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); gtk_widget_show ( item ); gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), delete_submenu ); item = gtk_image_menu_item_new_with_mnemonic ( _("Delete All _Tracks") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_REMOVE, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_delete_all_tracks), pass_along ); gtk_menu_shell_append ( GTK_MENU_SHELL(delete_submenu), item ); gtk_widget_show ( item ); item = gtk_image_menu_item_new_with_mnemonic ( _("Delete Tracks _From Selection...") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_INDEX, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_delete_tracks_from_selection), pass_along ); gtk_menu_shell_append ( GTK_MENU_SHELL(delete_submenu), item ); gtk_widget_show ( item ); item = gtk_image_menu_item_new_with_mnemonic ( _("Delete _All Routes") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_REMOVE, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_delete_all_routes), pass_along ); gtk_menu_shell_append ( GTK_MENU_SHELL(delete_submenu), item ); gtk_widget_show ( item ); item = gtk_image_menu_item_new_with_mnemonic ( _("_Delete Routes From Selection...") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_INDEX, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_delete_routes_from_selection), pass_along ); gtk_menu_shell_append ( GTK_MENU_SHELL(delete_submenu), item ); gtk_widget_show ( item ); item = gtk_image_menu_item_new_with_mnemonic ( _("Delete All _Waypoints") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_REMOVE, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_delete_all_waypoints), pass_along ); gtk_menu_shell_append ( GTK_MENU_SHELL(delete_submenu), item ); gtk_widget_show ( item ); item = gtk_image_menu_item_new_with_mnemonic ( _("Delete Waypoints From _Selection...") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_INDEX, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_delete_waypoints_from_selection), pass_along ); gtk_menu_shell_append ( GTK_MENU_SHELL(delete_submenu), item ); gtk_widget_show ( item ); item = a_acquire_trwlayer_menu ( VIK_WINDOW(VIK_GTK_WINDOW_FROM_LAYER(vtl)), vlp, vik_layers_panel_get_viewport(VIK_LAYERS_PANEL(vlp)), vtl ); if ( item ) { gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); gtk_widget_show ( item ); } item = a_acquire_trwlayer_track_menu ( VIK_WINDOW(VIK_GTK_WINDOW_FROM_LAYER(vtl)), vlp, vik_layers_panel_get_viewport(VIK_LAYERS_PANEL(vlp)), vtl ); if ( item ) { gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); gtk_widget_show ( item ); } } // Fake Waypoint UUIDs vi simple increasing integer static guint wp_uuid = 0; void vik_trw_layer_add_waypoint ( VikTrwLayer *vtl, gchar *name, VikWaypoint *wp ) { wp_uuid++; vik_waypoint_set_name (wp, name); if ( VIK_LAYER(vtl)->realized ) { // Do we need to create the sublayer: if ( g_hash_table_size (vtl->waypoints) == 0 ) { trw_layer_add_sublayer_waypoints ( vtl, VIK_LAYER(vtl)->vt, &(VIK_LAYER(vtl)->iter) ); } GtkTreeIter *iter = g_malloc(sizeof(GtkTreeIter)); // Visibility column always needed for waypoints #ifdef VIK_CONFIG_ALPHABETIZED_TRW vik_treeview_add_sublayer_alphabetized ( VIK_LAYER(vtl)->vt, &(vtl->waypoints_iter), iter, name, vtl, GUINT_TO_POINTER(wp_uuid), VIK_TRW_LAYER_SUBLAYER_WAYPOINT, get_wp_sym_small (wp->symbol), TRUE, TRUE ); #else vik_treeview_add_sublayer ( VIK_LAYER(vtl)->vt, &(vtl->waypoints_iter), iter, name, vtl, GUINT_TO_POINTER(wp_uuid), VIK_TRW_LAYER_SUBLAYER_WAYPOINT, get_wp_sym_small (wp->symbol), TRUE, TRUE ); #endif // Actual setting of visibility dependent on the waypoint vik_treeview_item_set_visible ( VIK_LAYER(vtl)->vt, iter, wp->visible ); g_hash_table_insert ( vtl->waypoints_iters, GUINT_TO_POINTER(wp_uuid), iter ); } highest_wp_number_add_wp(vtl, name); g_hash_table_insert ( vtl->waypoints, GUINT_TO_POINTER(wp_uuid), wp ); } // Fake Track UUIDs vi simple increasing integer static guint tr_uuid = 0; void vik_trw_layer_add_track ( VikTrwLayer *vtl, gchar *name, VikTrack *t ) { tr_uuid++; vik_track_set_name (t, name); if ( VIK_LAYER(vtl)->realized ) { // Do we need to create the sublayer: if ( g_hash_table_size (vtl->tracks) == 0 ) { trw_layer_add_sublayer_tracks ( vtl, VIK_LAYER(vtl)->vt, &(VIK_LAYER(vtl)->iter) ); } GtkTreeIter *iter = g_malloc(sizeof(GtkTreeIter)); // Visibility column always needed for tracks #ifdef VIK_CONFIG_ALPHABETIZED_TRW vik_treeview_add_sublayer_alphabetized ( VIK_LAYER(vtl)->vt, &(vtl->tracks_iter), iter, name, vtl, GUINT_TO_POINTER(tr_uuid), VIK_TRW_LAYER_SUBLAYER_TRACK, NULL, TRUE, TRUE ); #else vik_treeview_add_sublayer ( VIK_LAYER(vtl)->vt, &(vtl->tracks_iter), iter, name, vtl, GUINT_TO_POINTER(tr_uuid), VIK_TRW_LAYER_SUBLAYER_TRACK, NULL, TRUE, TRUE ); #endif // Actual setting of visibility dependent on the track vik_treeview_item_set_visible ( VIK_LAYER(vtl)->vt, iter, t->visible ); g_hash_table_insert ( vtl->tracks_iters, GUINT_TO_POINTER(tr_uuid), iter ); } g_hash_table_insert ( vtl->tracks, GUINT_TO_POINTER(tr_uuid), t ); trw_layer_update_treeview ( vtl, t, GUINT_TO_POINTER(tr_uuid) ); } // Fake Route UUIDs vi simple increasing integer static guint rt_uuid = 0; void vik_trw_layer_add_route ( VikTrwLayer *vtl, gchar *name, VikTrack *t ) { rt_uuid++; vik_track_set_name (t, name); if ( VIK_LAYER(vtl)->realized ) { // Do we need to create the sublayer: if ( g_hash_table_size (vtl->routes) == 0 ) { trw_layer_add_sublayer_routes ( vtl, VIK_LAYER(vtl)->vt, &(VIK_LAYER(vtl)->iter) ); } GtkTreeIter *iter = g_malloc(sizeof(GtkTreeIter)); // Visibility column always needed for tracks #ifdef VIK_CONFIG_ALPHABETIZED_TRW vik_treeview_add_sublayer_alphabetized ( VIK_LAYER(vtl)->vt, &(vtl->routes_iter), iter, name, vtl, GUINT_TO_POINTER(rt_uuid), VIK_TRW_LAYER_SUBLAYER_ROUTE, NULL, TRUE, TRUE ); #else vik_treeview_add_sublayer ( VIK_LAYER(vtl)->vt, &(vtl->routes_iter), iter, name, vtl, GUINT_TO_POINTER(rt_uuid), VIK_TRW_LAYER_SUBLAYER_ROUTE, NULL, TRUE, TRUE ); #endif // Actual setting of visibility dependent on the track vik_treeview_item_set_visible ( VIK_LAYER(vtl)->vt, iter, t->visible ); g_hash_table_insert ( vtl->routes_iters, GUINT_TO_POINTER(rt_uuid), iter ); } g_hash_table_insert ( vtl->routes, GUINT_TO_POINTER(rt_uuid), t ); trw_layer_update_treeview ( vtl, t, GUINT_TO_POINTER(rt_uuid) ); } /* to be called whenever a track has been deleted or may have been changed. */ void trw_layer_cancel_tps_of_track ( VikTrwLayer *vtl, VikTrack *trk ) { if (vtl->current_tp_track == trk ) trw_layer_cancel_current_tp ( vtl, FALSE ); } gchar *trw_layer_new_unique_sublayer_name (VikTrwLayer *vtl, gint sublayer_type, const gchar *name) { gint i = 2; gchar *newname = g_strdup(name); gpointer id = NULL; do { id = NULL; switch ( sublayer_type ) { case VIK_TRW_LAYER_SUBLAYER_TRACK: id = (gpointer) vik_trw_layer_get_track ( vtl, newname ); break; case VIK_TRW_LAYER_SUBLAYER_WAYPOINT: id = (gpointer) vik_trw_layer_get_waypoint ( vtl, newname ); break; default: id = (gpointer) vik_trw_layer_get_route ( vtl, newname ); break; } // If found a name already in use try adding 1 to it and we try again if ( id ) { gchar *new_newname = g_strdup_printf("%s#%d", name, i); g_free(newname); newname = new_newname; i++; } } while ( id != NULL); return newname; } void vik_trw_layer_filein_add_waypoint ( VikTrwLayer *vtl, gchar *name, VikWaypoint *wp ) { // No more uniqueness of name forced when loading from a file // This now makes this function a little redunant as we just flow the parameters through vik_trw_layer_add_waypoint ( vtl, name, wp ); } void vik_trw_layer_filein_add_track ( VikTrwLayer *vtl, gchar *name, VikTrack *tr ) { if ( vtl->route_finder_append && vtl->route_finder_current_track ) { vik_track_remove_dup_points ( tr ); /* make "double point" track work to undo */ vik_track_steal_and_append_trackpoints ( vtl->route_finder_current_track, tr ); vik_track_free ( tr ); vtl->route_finder_append = FALSE; /* this means we have added it */ } else { // No more uniqueness of name forced when loading from a file if ( tr->is_route ) vik_trw_layer_add_route ( vtl, name, tr ); else vik_trw_layer_add_track ( vtl, name, tr ); if ( vtl->route_finder_check_added_track ) { vik_track_remove_dup_points ( tr ); /* make "double point" track work to undo */ vtl->route_finder_added_track = tr; } } } static void trw_layer_enum_item ( gpointer id, GList **tr, GList **l ) { *l = g_list_append(*l, id); } /* * Move an item from one TRW layer to another TRW layer */ static void trw_layer_move_item ( VikTrwLayer *vtl_src, VikTrwLayer *vtl_dest, gpointer id, gint type ) { if (type == VIK_TRW_LAYER_SUBLAYER_TRACK) { VikTrack *trk = g_hash_table_lookup ( vtl_src->tracks, id ); gchar *newname = trw_layer_new_unique_sublayer_name(vtl_dest, type, trk->name); VikTrack *trk2 = vik_track_copy ( trk, TRUE ); vik_trw_layer_add_track ( vtl_dest, newname, trk2 ); vik_trw_layer_delete_track ( vtl_src, trk ); } if (type == VIK_TRW_LAYER_SUBLAYER_ROUTE) { VikTrack *trk = g_hash_table_lookup ( vtl_src->routes, id ); gchar *newname = trw_layer_new_unique_sublayer_name(vtl_dest, type, trk->name); VikTrack *trk2 = vik_track_copy ( trk, TRUE ); vik_trw_layer_add_route ( vtl_dest, newname, trk2 ); vik_trw_layer_delete_route ( vtl_src, trk ); } if (type == VIK_TRW_LAYER_SUBLAYER_WAYPOINT) { VikWaypoint *wp = g_hash_table_lookup ( vtl_src->waypoints, id ); gchar *newname = trw_layer_new_unique_sublayer_name(vtl_dest, type, wp->name); VikWaypoint *wp2 = vik_waypoint_copy ( wp ); vik_trw_layer_add_waypoint ( vtl_dest, newname, wp2 ); trw_layer_delete_waypoint ( vtl_src, wp ); } } static void trw_layer_drag_drop_request ( VikTrwLayer *vtl_src, VikTrwLayer *vtl_dest, GtkTreeIter *src_item_iter, GtkTreePath *dest_path ) { VikTreeview *vt = VIK_LAYER(vtl_src)->vt; gint type = vik_treeview_item_get_data(vt, src_item_iter); if (!vik_treeview_item_get_pointer(vt, src_item_iter)) { GList *items = NULL; GList *iter; if (type==VIK_TRW_LAYER_SUBLAYER_TRACKS) { g_hash_table_foreach ( vtl_src->tracks, (GHFunc)trw_layer_enum_item, &items); } if (type==VIK_TRW_LAYER_SUBLAYER_WAYPOINTS) { g_hash_table_foreach ( vtl_src->waypoints, (GHFunc)trw_layer_enum_item, &items); } if (type==VIK_TRW_LAYER_SUBLAYER_ROUTES) { g_hash_table_foreach ( vtl_src->routes, (GHFunc)trw_layer_enum_item, &items); } iter = items; while (iter) { if (type==VIK_TRW_LAYER_SUBLAYER_TRACKS) { trw_layer_move_item ( vtl_src, vtl_dest, iter->data, VIK_TRW_LAYER_SUBLAYER_TRACK); } else if (type==VIK_TRW_LAYER_SUBLAYER_ROUTES) { trw_layer_move_item ( vtl_src, vtl_dest, iter->data, VIK_TRW_LAYER_SUBLAYER_ROUTE); } else { trw_layer_move_item ( vtl_src, vtl_dest, iter->data, VIK_TRW_LAYER_SUBLAYER_WAYPOINT); } iter = iter->next; } if (items) g_list_free(items); } else { gchar *name = vik_treeview_item_get_pointer(vt, src_item_iter); trw_layer_move_item(vtl_src, vtl_dest, name, type); } } typedef struct { VikTrack *trk; // input gpointer uuid; // output } trku_udata; static gboolean trw_layer_track_find_uuid ( const gpointer id, const VikTrack *trk, gpointer udata ) { trku_udata *user_data = udata; if ( trk == user_data->trk ) { user_data->uuid = id; return TRUE; } return FALSE; } gboolean vik_trw_layer_delete_track ( VikTrwLayer *vtl, VikTrack *trk ) { gboolean was_visible = FALSE; if ( trk && trk->name ) { if ( trk == vtl->current_track ) { vtl->current_track = NULL; vtl->current_tp_track = NULL; vtl->current_tp_id = NULL; vtl->moving_tp = FALSE; } was_visible = trk->visible; if ( trk == vtl->route_finder_current_track ) vtl->route_finder_current_track = NULL; if ( trk == vtl->route_finder_added_track ) vtl->route_finder_added_track = NULL; trku_udata udata; udata.trk = trk; udata.uuid = NULL; // Hmmm, want key of it gpointer *trkf = g_hash_table_find ( vtl->tracks, (GHRFunc) trw_layer_track_find_uuid, &udata ); if ( trkf && udata.uuid ) { /* could be current_tp, so we have to check */ trw_layer_cancel_tps_of_track ( vtl, trk ); GtkTreeIter *it = g_hash_table_lookup ( vtl->tracks_iters, udata.uuid ); if ( it ) { vik_treeview_item_delete ( VIK_LAYER(vtl)->vt, it ); g_hash_table_remove ( vtl->tracks_iters, udata.uuid ); g_hash_table_remove ( vtl->tracks, udata.uuid ); // If last sublayer, then remove sublayer container if ( g_hash_table_size (vtl->tracks) == 0 ) { vik_treeview_item_delete ( VIK_LAYER(vtl)->vt, &(vtl->tracks_iter) ); } } } } return was_visible; } gboolean vik_trw_layer_delete_route ( VikTrwLayer *vtl, VikTrack *trk ) { gboolean was_visible = FALSE; if ( trk && trk->name ) { if ( trk == vtl->current_track ) { vtl->current_track = NULL; vtl->current_tp_track = NULL; vtl->current_tp_id = NULL; vtl->moving_tp = FALSE; } was_visible = trk->visible; if ( trk == vtl->route_finder_current_track ) vtl->route_finder_current_track = NULL; if ( trk == vtl->route_finder_added_track ) vtl->route_finder_added_track = NULL; trku_udata udata; udata.trk = trk; udata.uuid = NULL; // Hmmm, want key of it gpointer *trkf = g_hash_table_find ( vtl->routes, (GHRFunc) trw_layer_track_find_uuid, &udata ); if ( trkf && udata.uuid ) { /* could be current_tp, so we have to check */ trw_layer_cancel_tps_of_track ( vtl, trk ); GtkTreeIter *it = g_hash_table_lookup ( vtl->routes_iters, udata.uuid ); if ( it ) { vik_treeview_item_delete ( VIK_LAYER(vtl)->vt, it ); g_hash_table_remove ( vtl->routes_iters, udata.uuid ); g_hash_table_remove ( vtl->routes, udata.uuid ); // If last sublayer, then remove sublayer container if ( g_hash_table_size (vtl->routes) == 0 ) { vik_treeview_item_delete ( VIK_LAYER(vtl)->vt, &(vtl->routes_iter) ); } } } } return was_visible; } static gboolean trw_layer_delete_waypoint ( VikTrwLayer *vtl, VikWaypoint *wp ) { gboolean was_visible = FALSE; if ( wp && wp->name ) { if ( wp == vtl->current_wp ) { vtl->current_wp = NULL; vtl->current_wp_id = NULL; vtl->moving_wp = FALSE; } was_visible = wp->visible; wpu_udata udata; udata.wp = wp; udata.uuid = NULL; // Hmmm, want key of it gpointer *wpf = g_hash_table_find ( vtl->waypoints, (GHRFunc) trw_layer_waypoint_find_uuid, (gpointer) &udata ); if ( wpf && udata.uuid ) { GtkTreeIter *it = g_hash_table_lookup ( vtl->waypoints_iters, udata.uuid ); if ( it ) { vik_treeview_item_delete ( VIK_LAYER(vtl)->vt, it ); g_hash_table_remove ( vtl->waypoints_iters, udata.uuid ); highest_wp_number_remove_wp(vtl, wp->name); g_hash_table_remove ( vtl->waypoints, udata.uuid ); // last because this frees the name // If last sublayer, then remove sublayer container if ( g_hash_table_size (vtl->waypoints) == 0 ) { vik_treeview_item_delete ( VIK_LAYER(vtl)->vt, &(vtl->waypoints_iter) ); } } } } return was_visible; } // Only for temporary use by trw_layer_delete_waypoint_by_name static gboolean trw_layer_waypoint_find_uuid_by_name ( const gpointer id, const VikWaypoint *wp, gpointer udata ) { wpu_udata *user_data = udata; if ( ! strcmp ( wp->name, user_data->wp->name ) ) { user_data->uuid = id; return TRUE; } return FALSE; } /* * Delete a waypoint by the given name * NOTE: ATM this will delete the first encountered Waypoint with the specified name * as there be multiple waypoints with the same name */ static gboolean trw_layer_delete_waypoint_by_name ( VikTrwLayer *vtl, const gchar *name ) { wpu_udata udata; // Fake a waypoint with the given name udata.wp = vik_waypoint_new (); vik_waypoint_set_name (udata.wp, name); // Currently only the name is used in this waypoint find function udata.uuid = NULL; // Hmmm, want key of it gpointer *wpf = g_hash_table_find ( vtl->waypoints, (GHRFunc) trw_layer_waypoint_find_uuid_by_name, (gpointer) &udata ); vik_waypoint_free (udata.wp); if ( wpf && udata.uuid ) return trw_layer_delete_waypoint (vtl, g_hash_table_lookup ( vtl->waypoints, udata.uuid )); else return FALSE; } typedef struct { VikTrack *trk; // input gpointer uuid; // output } tpu_udata; // Only for temporary use by trw_layer_delete_track_by_name static gboolean trw_layer_track_find_uuid_by_name ( const gpointer id, const VikTrack *trk, gpointer udata ) { tpu_udata *user_data = udata; if ( ! strcmp ( trk->name, user_data->trk->name ) ) { user_data->uuid = id; return TRUE; } return FALSE; } /* * Delete a track by the given name * NOTE: ATM this will delete the first encountered Track with the specified name * as there may be multiple tracks with the same name within the specified hash table */ static gboolean trw_layer_delete_track_by_name ( VikTrwLayer *vtl, const gchar *name, GHashTable *ht_tracks ) { tpu_udata udata; // Fake a track with the given name udata.trk = vik_track_new (); vik_track_set_name (udata.trk, name); // Currently only the name is used in this waypoint find function udata.uuid = NULL; // Hmmm, want key of it gpointer *trkf = g_hash_table_find ( ht_tracks, (GHRFunc) trw_layer_track_find_uuid_by_name, &udata ); vik_track_free (udata.trk); if ( trkf && udata.uuid ) { // This could be a little better written... if ( vtl->tracks == ht_tracks ) return vik_trw_layer_delete_track (vtl, g_hash_table_lookup ( ht_tracks, udata.uuid )); if ( vtl->routes == ht_tracks ) return vik_trw_layer_delete_route (vtl, g_hash_table_lookup ( ht_tracks, udata.uuid )); return FALSE; } else return FALSE; } static void remove_item_from_treeview ( const gpointer id, GtkTreeIter *it, VikTreeview * vt ) { vik_treeview_item_delete (vt, it ); } void vik_trw_layer_delete_all_routes ( VikTrwLayer *vtl ) { vtl->current_track = NULL; vtl->route_finder_current_track = NULL; vtl->route_finder_added_track = NULL; if (vtl->current_tp_track) trw_layer_cancel_current_tp(vtl, FALSE); g_hash_table_foreach(vtl->routes_iters, (GHFunc) remove_item_from_treeview, VIK_LAYER(vtl)->vt); g_hash_table_remove_all(vtl->routes_iters); g_hash_table_remove_all(vtl->routes); vik_treeview_item_delete ( VIK_LAYER(vtl)->vt, &(vtl->routes_iter) ); vik_layer_emit_update ( VIK_LAYER(vtl) ); } void vik_trw_layer_delete_all_tracks ( VikTrwLayer *vtl ) { vtl->current_track = NULL; vtl->route_finder_current_track = NULL; vtl->route_finder_added_track = NULL; if (vtl->current_tp_track) trw_layer_cancel_current_tp(vtl, FALSE); g_hash_table_foreach(vtl->tracks_iters, (GHFunc) remove_item_from_treeview, VIK_LAYER(vtl)->vt); g_hash_table_remove_all(vtl->tracks_iters); g_hash_table_remove_all(vtl->tracks); vik_treeview_item_delete ( VIK_LAYER(vtl)->vt, &(vtl->tracks_iter) ); vik_layer_emit_update ( VIK_LAYER(vtl) ); } void vik_trw_layer_delete_all_waypoints ( VikTrwLayer *vtl ) { vtl->current_wp = NULL; vtl->current_wp_id = NULL; vtl->moving_wp = FALSE; highest_wp_number_reset(vtl); g_hash_table_foreach(vtl->waypoints_iters, (GHFunc) remove_item_from_treeview, VIK_LAYER(vtl)->vt); g_hash_table_remove_all(vtl->waypoints_iters); g_hash_table_remove_all(vtl->waypoints); vik_treeview_item_delete ( VIK_LAYER(vtl)->vt, &(vtl->waypoints_iter) ); vik_layer_emit_update ( VIK_LAYER(vtl) ); } static void trw_layer_delete_all_tracks ( gpointer lav[2] ) { VikTrwLayer *vtl = VIK_TRW_LAYER(lav[0]); // Get confirmation from the user if ( a_dialog_yes_or_no ( VIK_GTK_WINDOW_FROM_LAYER(vtl), _("Are you sure you want to delete all tracks in %s?"), vik_layer_get_name ( VIK_LAYER(vtl) ) ) ) vik_trw_layer_delete_all_tracks (vtl); } static void trw_layer_delete_all_routes ( gpointer lav[2] ) { VikTrwLayer *vtl = VIK_TRW_LAYER(lav[0]); // Get confirmation from the user if ( a_dialog_yes_or_no ( VIK_GTK_WINDOW_FROM_LAYER(vtl), _("Are you sure you want to delete all routes in %s?"), vik_layer_get_name ( VIK_LAYER(vtl) ) ) ) vik_trw_layer_delete_all_routes (vtl); } static void trw_layer_delete_all_waypoints ( gpointer lav[2] ) { VikTrwLayer *vtl = VIK_TRW_LAYER(lav[0]); // Get confirmation from the user if ( a_dialog_yes_or_no ( VIK_GTK_WINDOW_FROM_LAYER(vtl), _("Are you sure you want to delete all waypoints in %s?"), vik_layer_get_name ( VIK_LAYER(vtl) ) ) ) vik_trw_layer_delete_all_waypoints (vtl); } static void trw_layer_delete_item ( gpointer pass_along[6] ) { VikTrwLayer *vtl = VIK_TRW_LAYER(pass_along[0]); gboolean was_visible = FALSE; if ( GPOINTER_TO_INT (pass_along[2]) == VIK_TRW_LAYER_SUBLAYER_WAYPOINT ) { VikWaypoint *wp = g_hash_table_lookup ( vtl->waypoints, pass_along[3] ); if ( wp && wp->name ) { if ( GPOINTER_TO_INT ( pass_along[4]) ) // Get confirmation from the user // Maybe this Waypoint Delete should be optional as is it could get annoying... if ( ! a_dialog_yes_or_no ( VIK_GTK_WINDOW_FROM_LAYER(vtl), _("Are you sure you want to delete the waypoint \"%s\""), wp->name ) ) return; was_visible = trw_layer_delete_waypoint ( vtl, wp ); } } else if ( GPOINTER_TO_INT (pass_along[2]) == VIK_TRW_LAYER_SUBLAYER_TRACK ) { VikTrack *trk = g_hash_table_lookup ( vtl->tracks, pass_along[3] ); if ( trk && trk->name ) { if ( GPOINTER_TO_INT ( pass_along[4]) ) // Get confirmation from the user if ( ! a_dialog_yes_or_no ( VIK_GTK_WINDOW_FROM_LAYER(vtl), _("Are you sure you want to delete the track \"%s\""), trk->name ) ) return; was_visible = vik_trw_layer_delete_track ( vtl, trk ); } } else { VikTrack *trk = g_hash_table_lookup ( vtl->routes, pass_along[3] ); if ( trk && trk->name ) { if ( GPOINTER_TO_INT ( pass_along[4]) ) // Get confirmation from the user if ( ! a_dialog_yes_or_no ( VIK_GTK_WINDOW_FROM_LAYER(vtl), _("Are you sure you want to delete the route \"%s\""), trk->name ) ) return; was_visible = vik_trw_layer_delete_route ( vtl, trk ); } } if ( was_visible ) vik_layer_emit_update ( VIK_LAYER(vtl) ); } static void trw_layer_properties_item ( gpointer pass_along[7] ) { VikTrwLayer *vtl = VIK_TRW_LAYER(pass_along[0]); if ( GPOINTER_TO_INT (pass_along[2]) == VIK_TRW_LAYER_SUBLAYER_WAYPOINT ) { VikWaypoint *wp = g_hash_table_lookup ( vtl->waypoints, pass_along[3] ); // sublayer if ( wp && wp->name ) { gboolean updated = FALSE; a_dialog_waypoint ( VIK_GTK_WINDOW_FROM_LAYER(vtl), wp->name, wp, vtl->coord_mode, FALSE, &updated ); if ( updated && pass_along[6] ) vik_treeview_item_set_icon ( VIK_LAYER(vtl)->vt, pass_along[6], get_wp_sym_small (wp->symbol) ); if ( updated && VIK_LAYER(vtl)->visible ) vik_layer_emit_update ( VIK_LAYER(vtl) ); } } else { VikTrack *tr; if ( GPOINTER_TO_INT (pass_along[2]) == VIK_TRW_LAYER_SUBLAYER_TRACK ) tr = g_hash_table_lookup ( vtl->tracks, pass_along[3] ); else tr = g_hash_table_lookup ( vtl->routes, pass_along[3] ); if ( tr && tr->name ) { vik_trw_layer_propwin_run ( VIK_GTK_WINDOW_FROM_LAYER(vtl), vtl, tr, pass_along[1], /* vlp */ pass_along[5], /* vvp */ pass_along[6]); /* iter */ } } } /* * Update the treeview of the track id - primarily to update the icon */ void trw_layer_update_treeview ( VikTrwLayer *vtl, VikTrack *trk, gpointer *trk_id ) { trku_udata udata; udata.trk = trk; udata.uuid = NULL; gpointer *trkf = NULL; if ( trk->is_route ) trkf = g_hash_table_find ( vtl->routes, (GHRFunc) trw_layer_track_find_uuid, &udata ); else trkf = g_hash_table_find ( vtl->tracks, (GHRFunc) trw_layer_track_find_uuid, &udata ); if ( trkf && udata.uuid ) { GtkTreeIter *iter = NULL; if ( trk->is_route ) iter = g_hash_table_lookup ( vtl->routes_iters, udata.uuid ); else iter = g_hash_table_lookup ( vtl->tracks_iters, udata.uuid ); if ( iter ) { // TODO: Make this a function GdkPixbuf *pixbuf = gdk_pixbuf_new ( GDK_COLORSPACE_RGB, FALSE, 8, 18, 18); guint32 pixel = ((trk->color.red & 0xff00) << 16) | ((trk->color.green & 0xff00) << 8) | (trk->color.blue & 0xff00); gdk_pixbuf_fill ( pixbuf, pixel ); vik_treeview_item_set_icon ( VIK_LAYER(vtl)->vt, iter, pixbuf ); g_object_unref (pixbuf); } } } /* Parameter 1 -> VikLayersPanel Parameter 2 -> VikLayer Parameter 3 -> VikViewport */ static void goto_coord ( gpointer *vlp, gpointer vl, gpointer vvp, const VikCoord *coord ) { if ( vlp ) { vik_viewport_set_center_coord ( vik_layers_panel_get_viewport (VIK_LAYERS_PANEL(vlp)), coord ); vik_layers_panel_emit_update ( VIK_LAYERS_PANEL(vlp) ); } else { /* since vlp not set, vl & vvp should be valid instead! */ if ( vl && vvp ) { vik_viewport_set_center_coord ( VIK_VIEWPORT(vvp), coord ); vik_layer_emit_update ( VIK_LAYER(vl) ); } } } static void trw_layer_goto_track_startpoint ( gpointer pass_along[6] ) { VikTrwLayer *vtl = (VikTrwLayer *)pass_along[0]; VikTrack *track; if ( GPOINTER_TO_INT (pass_along[2]) == VIK_TRW_LAYER_SUBLAYER_ROUTE ) track = (VikTrack *) g_hash_table_lookup ( vtl->routes, pass_along[3] ); else track = (VikTrack *) g_hash_table_lookup ( vtl->tracks, pass_along[3] ); if ( track && track->trackpoints ) goto_coord ( pass_along[1], pass_along[0], pass_along[5], &(((VikTrackpoint *) track->trackpoints->data)->coord) ); } static void trw_layer_goto_track_center ( gpointer pass_along[6] ) { VikTrwLayer *vtl = (VikTrwLayer *)pass_along[0]; VikTrack *track; if ( GPOINTER_TO_INT (pass_along[2]) == VIK_TRW_LAYER_SUBLAYER_ROUTE ) track = (VikTrack *) g_hash_table_lookup ( vtl->routes, pass_along[3] ); else track = (VikTrack *) g_hash_table_lookup ( vtl->tracks, pass_along[3] ); if ( track && track->trackpoints ) { struct LatLon average, maxmin[2] = { {0,0}, {0,0} }; VikCoord coord; trw_layer_find_maxmin_tracks ( NULL, track, maxmin ); average.lat = (maxmin[0].lat+maxmin[1].lat)/2; average.lon = (maxmin[0].lon+maxmin[1].lon)/2; vik_coord_load_from_latlon ( &coord, vtl->coord_mode, &average ); goto_coord ( pass_along[1], pass_along[0], pass_along[5], &coord); } } static void trw_layer_convert_track_route ( gpointer pass_along[6] ) { VikTrwLayer *vtl = (VikTrwLayer *)pass_along[0]; VikTrack *trk; if ( GPOINTER_TO_INT (pass_along[2]) == VIK_TRW_LAYER_SUBLAYER_ROUTE ) trk = (VikTrack *) g_hash_table_lookup ( vtl->routes, pass_along[3] ); else trk = (VikTrack *) g_hash_table_lookup ( vtl->tracks, pass_along[3] ); if ( !trk ) return; // Converting a track to a route can be a bit more complicated, // so give a chance to change our minds: if ( !trk->is_route && ( ( vik_track_get_segment_count ( trk ) > 1 ) || ( vik_track_get_average_speed ( trk ) > 0.0 ) ) ) { if ( ! a_dialog_yes_or_no ( VIK_GTK_WINDOW_FROM_LAYER(vtl), _("Converting a track to a route removes extra track data such as segments, timestamps, etc...\nDo you want to continue?"), NULL ) ) return; } // Copy it VikTrack *trk_copy = vik_track_copy ( trk, TRUE ); // Convert trk_copy->is_route = !trk_copy->is_route; // ATM can't set name to self - so must create temporary copy gchar *name = g_strdup ( trk_copy->name ); // Delete old one and then add new one if ( trk->is_route ) { vik_trw_layer_delete_route ( vtl, trk ); vik_trw_layer_add_track ( vtl, name, trk_copy ); } else { // Extra route conversion bits... vik_track_merge_segments ( trk_copy ); vik_track_to_routepoints ( trk_copy ); vik_trw_layer_delete_track ( vtl, trk ); vik_trw_layer_add_route ( vtl, name, trk_copy ); } g_free ( name ); // Update in case color of track / route changes when moving between sublayers vik_layer_emit_update ( VIK_LAYER(pass_along[0]) ); } static void trw_layer_extend_track_end ( gpointer pass_along[6] ) { VikTrwLayer *vtl = VIK_TRW_LAYER(pass_along[0]); VikTrack *track; if ( GPOINTER_TO_INT (pass_along[2]) == VIK_TRW_LAYER_SUBLAYER_ROUTE ) track = (VikTrack *) g_hash_table_lookup ( vtl->routes, pass_along[3] ); else track = (VikTrack *) g_hash_table_lookup ( vtl->tracks, pass_along[3] ); if ( !track ) return; vtl->current_track = track; vik_window_enable_layer_tool ( VIK_WINDOW(VIK_GTK_WINDOW_FROM_LAYER(vtl)), VIK_LAYER_TRW, track->is_route ? TOOL_CREATE_ROUTE : TOOL_CREATE_TRACK); if ( track->trackpoints ) goto_coord ( pass_along[1], pass_along[0], pass_along[5], &(((VikTrackpoint *)g_list_last(track->trackpoints)->data)->coord) ); } #ifdef VIK_CONFIG_GOOGLE /** * extend a track using route finder */ static void trw_layer_extend_track_end_route_finder ( gpointer pass_along[6] ) { VikTrwLayer *vtl = VIK_TRW_LAYER(pass_along[0]); VikTrack *track = g_hash_table_lookup ( VIK_TRW_LAYER(pass_along[0])->routes, pass_along[3] ); if ( !track ) return; VikCoord last_coord = (((VikTrackpoint *)g_list_last(track->trackpoints)->data)->coord); vik_window_enable_layer_tool ( VIK_WINDOW(VIK_GTK_WINDOW_FROM_LAYER(vtl)), VIK_LAYER_TRW, TOOL_ROUTE_FINDER ); vtl->route_finder_coord = last_coord; vtl->route_finder_current_track = track; vtl->route_finder_started = TRUE; if ( track->trackpoints ) goto_coord ( pass_along[1], pass_along[0], pass_along[5], &last_coord) ; } #endif static void trw_layer_apply_dem_data ( gpointer pass_along[6] ) { /* TODO: check & warn if no DEM data, or no applicable DEM data. */ /* Also warn if overwrite old elevation data */ VikTrwLayer *vtl = (VikTrwLayer *)pass_along[0]; VikTrack *track; if ( GPOINTER_TO_INT (pass_along[2]) == VIK_TRW_LAYER_SUBLAYER_ROUTE ) track = (VikTrack *) g_hash_table_lookup ( vtl->routes, pass_along[3] ); else track = (VikTrack *) g_hash_table_lookup ( vtl->tracks, pass_along[3] ); if ( track ) vik_track_apply_dem_data ( track ); } static void trw_layer_goto_track_endpoint ( gpointer pass_along[6] ) { VikTrwLayer *vtl = (VikTrwLayer *)pass_along[0]; VikTrack *track; if ( GPOINTER_TO_INT (pass_along[2]) == VIK_TRW_LAYER_SUBLAYER_ROUTE ) track = (VikTrack *) g_hash_table_lookup ( vtl->routes, pass_along[3] ); else track = (VikTrack *) g_hash_table_lookup ( vtl->tracks, pass_along[3] ); if ( !track ) return; GList *trps = track->trackpoints; if ( !trps ) return; trps = g_list_last(trps); goto_coord ( pass_along[1], pass_along[0], pass_along[5], &(((VikTrackpoint *) trps->data)->coord)); } static void trw_layer_goto_track_max_speed ( gpointer pass_along[6] ) { VikTrwLayer *vtl = (VikTrwLayer *)pass_along[0]; VikTrack *track; if ( GPOINTER_TO_INT (pass_along[2]) == VIK_TRW_LAYER_SUBLAYER_ROUTE ) track = (VikTrack *) g_hash_table_lookup ( vtl->routes, pass_along[3] ); else track = (VikTrack *) g_hash_table_lookup ( vtl->tracks, pass_along[3] ); if ( !track ) return; VikTrackpoint* vtp = vik_track_get_tp_by_max_speed ( track ); if ( !vtp ) return; goto_coord ( pass_along[1], pass_along[0], pass_along[5], &(vtp->coord)); } static void trw_layer_goto_track_max_alt ( gpointer pass_along[6] ) { VikTrwLayer *vtl = (VikTrwLayer *)pass_along[0]; VikTrack *track; if ( GPOINTER_TO_INT (pass_along[2]) == VIK_TRW_LAYER_SUBLAYER_ROUTE ) track = (VikTrack *) g_hash_table_lookup ( vtl->routes, pass_along[3] ); else track = (VikTrack *) g_hash_table_lookup ( vtl->tracks, pass_along[3] ); if ( !track ) return; VikTrackpoint* vtp = vik_track_get_tp_by_max_alt ( track ); if ( !vtp ) return; goto_coord ( pass_along[1], pass_along[0], pass_along[5], &(vtp->coord)); } static void trw_layer_goto_track_min_alt ( gpointer pass_along[6] ) { VikTrwLayer *vtl = (VikTrwLayer *)pass_along[0]; VikTrack *track; if ( GPOINTER_TO_INT (pass_along[2]) == VIK_TRW_LAYER_SUBLAYER_ROUTE ) track = (VikTrack *) g_hash_table_lookup ( vtl->routes, pass_along[3] ); else track = (VikTrack *) g_hash_table_lookup ( vtl->tracks, pass_along[3] ); if ( !track ) return; VikTrackpoint* vtp = vik_track_get_tp_by_min_alt ( track ); if ( !vtp ) return; goto_coord ( pass_along[1], pass_along[0], pass_along[5], &(vtp->coord)); } /* * Automatically change the viewport to center on the track and zoom to see the extent of the track */ static void trw_layer_auto_track_view ( gpointer pass_along[6] ) { VikTrwLayer *vtl = (VikTrwLayer *)pass_along[0]; VikTrack *trk; if ( GPOINTER_TO_INT (pass_along[2]) == VIK_TRW_LAYER_SUBLAYER_ROUTE ) trk = (VikTrack *) g_hash_table_lookup ( vtl->routes, pass_along[3] ); else trk = (VikTrack *) g_hash_table_lookup ( vtl->tracks, pass_along[3] ); if ( trk && trk->trackpoints ) { struct LatLon maxmin[2] = { {0,0}, {0,0} }; trw_layer_find_maxmin_tracks ( NULL, trk, maxmin ); trw_layer_zoom_to_show_latlons ( VIK_TRW_LAYER(pass_along[0]), pass_along[5], maxmin ); if ( pass_along[1] ) vik_layers_panel_emit_update ( VIK_LAYERS_PANEL(pass_along[1]) ); else vik_layer_emit_update ( VIK_LAYER(pass_along[0]) ); } } static void trw_layer_edit_trackpoint ( gpointer pass_along[6] ) { VikTrwLayer *vtl = VIK_TRW_LAYER(pass_along[0]); trw_layer_tpwin_init ( vtl ); } /************************************* * merge/split by time routines *************************************/ /* called for each key in track hash table. * If the current track has the same time stamp type, add it to the result, * except the one pointed by "exclude". * set exclude to NULL if there is no exclude to check. * Note that the result is in reverse (for performance reasons). */ typedef struct { GList **result; GList *exclude; gboolean with_timestamps; } twt_udata; static void find_tracks_with_timestamp_type(gpointer key, gpointer value, gpointer udata) { twt_udata *user_data = udata; VikTrackpoint *p1, *p2; if (VIK_TRACK(value)->trackpoints == user_data->exclude) { return; } if (VIK_TRACK(value)->trackpoints) { p1 = VIK_TRACKPOINT(VIK_TRACK(value)->trackpoints->data); p2 = VIK_TRACKPOINT(g_list_last(VIK_TRACK(value)->trackpoints)->data); if ( user_data->with_timestamps ) { if (!p1->has_timestamp || !p2->has_timestamp) { return; } } else { // Don't add tracks with timestamps when getting non timestamp tracks if (p1->has_timestamp || p2->has_timestamp) { return; } } } *(user_data->result) = g_list_prepend(*(user_data->result), key); } /* called for each key in track hash table. if original track user_data[1] is close enough * to the passed one, add it to list in user_data[0] */ static void find_nearby_tracks_by_time (gpointer key, gpointer value, gpointer user_data) { time_t t1, t2; VikTrackpoint *p1, *p2; VikTrack *trk = VIK_TRACK(value); GList **nearby_tracks = ((gpointer *)user_data)[0]; GList *tpoints = ((gpointer *)user_data)[1]; /* outline: * detect reasons for not merging, and return * if no reason is found not to merge, then do it. */ // Exclude the original track from the compiled list if (trk->trackpoints == tpoints) { return; } t1 = VIK_TRACKPOINT(g_list_first(tpoints)->data)->timestamp; t2 = VIK_TRACKPOINT(g_list_last(tpoints)->data)->timestamp; if (trk->trackpoints) { p1 = VIK_TRACKPOINT(g_list_first(trk->trackpoints)->data); p2 = VIK_TRACKPOINT(g_list_last(trk->trackpoints)->data); if (!p1->has_timestamp || !p2->has_timestamp) { //g_print("no timestamp\n"); return; } guint threshold = GPOINTER_TO_UINT (((gpointer *)user_data)[2]); //g_print("Got track named %s, times %d, %d\n", trk->name, p1->timestamp, p2->timestamp); if (! (abs(t1 - p2->timestamp) < threshold || /* p1 p2 t1 t2 */ abs(p1->timestamp - t2) < threshold) /* t1 t2 p1 p2 */ ) { return; } } *nearby_tracks = g_list_prepend(*nearby_tracks, value); } /* comparison function used to sort tracks; a and b are hash table keys */ /* Not actively used - can be restored if needed static gint track_compare(gconstpointer a, gconstpointer b, gpointer user_data) { GHashTable *tracks = user_data; time_t t1, t2; t1 = VIK_TRACKPOINT(VIK_TRACK(g_hash_table_lookup(tracks, a))->trackpoints->data)->timestamp; t2 = VIK_TRACKPOINT(VIK_TRACK(g_hash_table_lookup(tracks, b))->trackpoints->data)->timestamp; if (t1 < t2) return -1; if (t1 > t2) return 1; return 0; } */ /* comparison function used to sort trackpoints */ static gint trackpoint_compare(gconstpointer a, gconstpointer b) { time_t t1 = VIK_TRACKPOINT(a)->timestamp, t2 = VIK_TRACKPOINT(b)->timestamp; if (t1 < t2) return -1; if (t1 > t2) return 1; return 0; } /** * comparison function which can be used to sort tracks or waypoints by name */ static gint sort_alphabetically (gconstpointer a, gconstpointer b, gpointer user_data) { const gchar* namea = (const gchar*) a; const gchar* nameb = (const gchar*) b; if ( namea == NULL || nameb == NULL) return 0; else // Same sort method as used in the vik_treeview_*_alphabetize functions return strcmp ( namea, nameb ); } /** * Attempt to merge selected track with other tracks specified by the user * Tracks to merge with must be of the same 'type' as the selected track - * either all with timestamps, or all without timestamps */ static void trw_layer_merge_with_other ( gpointer pass_along[6] ) { VikTrwLayer *vtl = (VikTrwLayer *)pass_along[0]; GList *other_tracks = NULL; GHashTable *ght_tracks; if ( GPOINTER_TO_INT (pass_along[2]) == VIK_TRW_LAYER_SUBLAYER_ROUTE ) ght_tracks = vtl->routes; else ght_tracks = vtl->tracks; VikTrack *track = (VikTrack *) g_hash_table_lookup ( ght_tracks, pass_along[3] ); if ( !track ) return; if ( !track->trackpoints ) return; twt_udata udata; udata.result = &other_tracks; udata.exclude = track->trackpoints; // Allow merging with 'similar' time type time tracks // i.e. either those times, or those without udata.with_timestamps = (VIK_TRACKPOINT(track->trackpoints->data)->has_timestamp); g_hash_table_foreach(ght_tracks, find_tracks_with_timestamp_type, (gpointer)&udata); other_tracks = g_list_reverse(other_tracks); if ( !other_tracks ) { if ( udata.with_timestamps ) a_dialog_error_msg(VIK_GTK_WINDOW_FROM_LAYER(vtl), _("Failed. No other tracks with timestamps in this layer found")); else a_dialog_error_msg(VIK_GTK_WINDOW_FROM_LAYER(vtl), _("Failed. No other tracks without timestamps in this layer found")); return; } // Sort alphabetically for user presentation // Convert into list of names for usage with dialog function // TODO: Need to consider how to work best when we can have multiple tracks the same name... GList *other_tracks_names = NULL; GList *iter = g_list_first ( other_tracks ); while ( iter ) { other_tracks_names = g_list_append ( other_tracks_names, VIK_TRACK(g_hash_table_lookup (ght_tracks, iter->data))->name ); iter = g_list_next ( iter ); } other_tracks_names = g_list_sort_with_data (other_tracks_names, sort_alphabetically, NULL); GList *merge_list = a_dialog_select_from_list(VIK_GTK_WINDOW_FROM_LAYER(vtl), other_tracks_names, TRUE, _("Merge with..."), track->is_route ? _("Select route to merge with") : _("Select track to merge with")); g_list_free(other_tracks); g_list_free(other_tracks_names); if (merge_list) { GList *l; for (l = merge_list; l != NULL; l = g_list_next(l)) { VikTrack *merge_track; if ( track->is_route ) merge_track = vik_trw_layer_get_route ( vtl, l->data ); else merge_track = vik_trw_layer_get_track ( vtl, l->data ); if (merge_track) { track->trackpoints = g_list_concat(track->trackpoints, merge_track->trackpoints); merge_track->trackpoints = NULL; if ( track->is_route ) vik_trw_layer_delete_route (vtl, merge_track); else vik_trw_layer_delete_track (vtl, merge_track); track->trackpoints = g_list_sort(track->trackpoints, trackpoint_compare); } } /* TODO: free data before free merge_list */ for (l = merge_list; l != NULL; l = g_list_next(l)) g_free(l->data); g_list_free(merge_list); vik_layer_emit_update( VIK_LAYER(vtl) ); } } // c.f. trw_layer_sorted_track_id_by_name_list // but don't add the specified track to the list (normally current track) static void trw_layer_sorted_track_id_by_name_list_exclude_self (const gpointer id, const VikTrack *trk, gpointer udata) { twt_udata *user_data = udata; // Skip self if (trk->trackpoints == user_data->exclude) { return; } // Sort named list alphabetically *(user_data->result) = g_list_insert_sorted_with_data (*(user_data->result), trk->name, sort_alphabetically, NULL); } /** * Join - this allows combining 'tracks' and 'track routes' * i.e. doesn't care about whether tracks have consistent timestamps * ATM can only append one track at a time to the currently selected track */ static void trw_layer_append_track ( gpointer pass_along[6] ) { VikTrwLayer *vtl = (VikTrwLayer *)pass_along[0]; VikTrack *trk; GHashTable *ght_tracks; if ( GPOINTER_TO_INT (pass_along[2]) == VIK_TRW_LAYER_SUBLAYER_ROUTE ) ght_tracks = vtl->routes; else ght_tracks = vtl->tracks; trk = (VikTrack *) g_hash_table_lookup ( ght_tracks, pass_along[3] ); if ( !trk ) return; GList *other_tracks_names = NULL; // Sort alphabetically for user presentation // Convert into list of names for usage with dialog function // TODO: Need to consider how to work best when we can have multiple tracks the same name... twt_udata udata; udata.result = &other_tracks_names; udata.exclude = trk->trackpoints; g_hash_table_foreach(ght_tracks, (GHFunc) trw_layer_sorted_track_id_by_name_list_exclude_self, (gpointer)&udata); // Note the limit to selecting one track only // this is to control the ordering of appending tracks, i.e. the selected track always goes after the current track // (otherwise with multiple select the ordering would not be controllable by the user - automatically being alphabetically) GList *append_list = a_dialog_select_from_list(VIK_GTK_WINDOW_FROM_LAYER(vtl), other_tracks_names, FALSE, trk->is_route ? _("Append Route"): _("Append Track"), trk->is_route ? _("Select the route to append after the current route") : _("Select the track to append after the current track") ); g_list_free(other_tracks_names); // It's a list, but shouldn't contain more than one other track! if ( append_list ) { GList *l; for (l = append_list; l != NULL; l = g_list_next(l)) { // TODO: at present this uses the first track found by name, // which with potential multiple same named tracks may not be the one selected... VikTrack *append_track; if ( trk->is_route ) append_track = vik_trw_layer_get_route ( vtl, l->data ); else append_track = vik_trw_layer_get_track ( vtl, l->data ); if ( append_track ) { trk->trackpoints = g_list_concat(trk->trackpoints, append_track->trackpoints); append_track->trackpoints = NULL; if ( trk->is_route ) vik_trw_layer_delete_route (vtl, append_track); else vik_trw_layer_delete_track (vtl, append_track); } } for (l = append_list; l != NULL; l = g_list_next(l)) g_free(l->data); g_list_free(append_list); vik_layer_emit_update( VIK_LAYER(vtl) ); } } /** * Very similar to trw_layer_append_track for joining * but this allows selection from the 'other' list * If a track is selected, then is shows routes and joins the selected one * If a route is selected, then is shows tracks and joins the selected one */ static void trw_layer_append_other ( gpointer pass_along[6] ) { VikTrwLayer *vtl = (VikTrwLayer *)pass_along[0]; VikTrack *trk; GHashTable *ght_mykind, *ght_others; if ( GPOINTER_TO_INT (pass_along[2]) == VIK_TRW_LAYER_SUBLAYER_ROUTE ) { ght_mykind = vtl->routes; ght_others = vtl->tracks; } else { ght_mykind = vtl->tracks; ght_others = vtl->routes; } trk = (VikTrack *) g_hash_table_lookup ( ght_mykind, pass_along[3] ); if ( !trk ) return; GList *other_tracks_names = NULL; // Sort alphabetically for user presentation // Convert into list of names for usage with dialog function // TODO: Need to consider how to work best when we can have multiple tracks the same name... twt_udata udata; udata.result = &other_tracks_names; udata.exclude = trk->trackpoints; g_hash_table_foreach(ght_others, (GHFunc) trw_layer_sorted_track_id_by_name_list_exclude_self, (gpointer)&udata); // Note the limit to selecting one track only // this is to control the ordering of appending tracks, i.e. the selected track always goes after the current track // (otherwise with multiple select the ordering would not be controllable by the user - automatically being alphabetically) GList *append_list = a_dialog_select_from_list(VIK_GTK_WINDOW_FROM_LAYER(vtl), other_tracks_names, FALSE, trk->is_route ? _("Append Track"): _("Append Route"), trk->is_route ? _("Select the track to append after the current route") : _("Select the route to append after the current track") ); g_list_free(other_tracks_names); // It's a list, but shouldn't contain more than one other track! if ( append_list ) { GList *l; for (l = append_list; l != NULL; l = g_list_next(l)) { // TODO: at present this uses the first track found by name, // which with potential multiple same named tracks may not be the one selected... // Get FROM THE OTHER TYPE list VikTrack *append_track; if ( trk->is_route ) append_track = vik_trw_layer_get_track ( vtl, l->data ); else append_track = vik_trw_layer_get_route ( vtl, l->data ); if ( append_track ) { if ( !append_track->is_route && ( ( vik_track_get_segment_count ( append_track ) > 1 ) || ( vik_track_get_average_speed ( append_track ) > 0.0 ) ) ) { if ( a_dialog_yes_or_no ( VIK_GTK_WINDOW_FROM_LAYER(vtl), _("Converting a track to a route removes extra track data such as segments, timestamps, etc...\nDo you want to continue?"), NULL ) ) { vik_track_merge_segments ( append_track ); vik_track_to_routepoints ( append_track ); } else { break; } } trk->trackpoints = g_list_concat(trk->trackpoints, append_track->trackpoints); append_track->trackpoints = NULL; // Delete copied which is FROM THE OTHER TYPE list if ( trk->is_route ) vik_trw_layer_delete_track (vtl, append_track); else vik_trw_layer_delete_route (vtl, append_track); } } for (l = append_list; l != NULL; l = g_list_next(l)) g_free(l->data); g_list_free(append_list); vik_layer_emit_update( VIK_LAYER(vtl) ); } } /* merge by segments */ static void trw_layer_merge_by_segment ( gpointer pass_along[6] ) { VikTrwLayer *vtl = (VikTrwLayer *)pass_along[0]; VikTrack *trk = (VikTrack *) g_hash_table_lookup ( vtl->tracks, pass_along[3] ); guint segments = vik_track_merge_segments ( trk ); // NB currently no need to redraw as segments not actually shown on the display // However inform the user of what happened: gchar str[64]; const gchar *tmp_str = ngettext("%d segment merged", "%d segments merged", segments); g_snprintf(str, 64, tmp_str, segments); a_dialog_info_msg (VIK_GTK_WINDOW_FROM_LAYER(vtl), str ); } /* merge by time routine */ static void trw_layer_merge_by_timestamp ( gpointer pass_along[6] ) { VikTrwLayer *vtl = (VikTrwLayer *)pass_along[0]; //time_t t1, t2; GList *tracks_with_timestamp = NULL; VikTrack *orig_trk = (VikTrack *) g_hash_table_lookup ( vtl->tracks, pass_along[3] ); if (orig_trk->trackpoints && !VIK_TRACKPOINT(orig_trk->trackpoints->data)->has_timestamp) { a_dialog_error_msg(VIK_GTK_WINDOW_FROM_LAYER(vtl), _("Failed. This track does not have timestamp")); return; } twt_udata udata; udata.result = &tracks_with_timestamp; udata.exclude = orig_trk->trackpoints; udata.with_timestamps = TRUE; g_hash_table_foreach(vtl->tracks, find_tracks_with_timestamp_type, (gpointer)&udata); tracks_with_timestamp = g_list_reverse(tracks_with_timestamp); if (!tracks_with_timestamp) { a_dialog_error_msg(VIK_GTK_WINDOW_FROM_LAYER(vtl), _("Failed. No other track in this layer has timestamp")); return; } g_list_free(tracks_with_timestamp); static guint threshold_in_minutes = 1; if (!a_dialog_time_threshold(VIK_GTK_WINDOW_FROM_LAYER(vtl), _("Merge Threshold..."), _("Merge when time between tracks less than:"), &threshold_in_minutes)) { return; } // keep attempting to merge all tracks until no merges within the time specified is possible gboolean attempt_merge = TRUE; GList *nearby_tracks = NULL; GList *trps; static gpointer params[3]; while ( attempt_merge ) { // Don't try again unless tracks have changed attempt_merge = FALSE; trps = orig_trk->trackpoints; if ( !trps ) return; if (nearby_tracks) { g_list_free(nearby_tracks); nearby_tracks = NULL; } //t1 = ((VikTrackpoint *)trps->data)->timestamp; //t2 = ((VikTrackpoint *)g_list_last(trps)->data)->timestamp; /* g_print("Original track times: %d and %d\n", t1, t2); */ params[0] = &nearby_tracks; params[1] = (gpointer)trps; params[2] = GUINT_TO_POINTER (threshold_in_minutes*60); // In seconds /* get a list of adjacent-in-time tracks */ g_hash_table_foreach(vtl->tracks, find_nearby_tracks_by_time, params); /* merge them */ GList *l = nearby_tracks; while ( l ) { /* #define get_first_trackpoint(x) VIK_TRACKPOINT(VIK_TRACK(x)->trackpoints->data) #define get_last_trackpoint(x) VIK_TRACKPOINT(g_list_last(VIK_TRACK(x)->trackpoints)->data) time_t t1, t2; t1 = get_first_trackpoint(l)->timestamp; t2 = get_last_trackpoint(l)->timestamp; #undef get_first_trackpoint #undef get_last_trackpoint g_print(" %20s: track %d - %d\n", VIK_TRACK(l->data)->name, (int)t1, (int)t2); */ /* remove trackpoints from merged track, delete track */ orig_trk->trackpoints = g_list_concat(orig_trk->trackpoints, VIK_TRACK(l->data)->trackpoints); VIK_TRACK(l->data)->trackpoints = NULL; vik_trw_layer_delete_track (vtl, VIK_TRACK(l->data)); // Tracks have changed, therefore retry again against all the remaining tracks attempt_merge = TRUE; l = g_list_next(l); } orig_trk->trackpoints = g_list_sort(orig_trk->trackpoints, trackpoint_compare); } g_list_free(nearby_tracks); vik_layer_emit_update( VIK_LAYER(vtl) ); } /** * Split a track at the currently selected trackpoint */ static void trw_layer_split_at_selected_trackpoint ( VikTrwLayer *vtl, gint subtype ) { if ( !vtl->current_tpl ) return; if ( vtl->current_tpl->next && vtl->current_tpl->prev ) { gchar *name = trw_layer_new_unique_sublayer_name(vtl, subtype, vtl->current_tp_track->name); if ( name ) { VikTrack *tr = vik_track_copy ( vtl->current_tp_track, FALSE ); GList *newglist = g_list_alloc (); newglist->prev = NULL; newglist->next = vtl->current_tpl->next; newglist->data = vik_trackpoint_copy(VIK_TRACKPOINT(vtl->current_tpl->data)); tr->trackpoints = newglist; vtl->current_tpl->next->prev = newglist; /* end old track here */ vtl->current_tpl->next = NULL; vtl->current_tpl = newglist; /* change tp to first of new track. */ vtl->current_tp_track = tr; if ( tr->is_route ) vik_trw_layer_add_route ( vtl, name, tr ); else vik_trw_layer_add_track ( vtl, name, tr ); trku_udata udata; udata.trk = tr; udata.uuid = NULL; // Also need id of newly created track gpointer *trkf; if ( tr->is_route ) trkf = g_hash_table_find ( vtl->routes, (GHRFunc) trw_layer_track_find_uuid, &udata ); else trkf = g_hash_table_find ( vtl->tracks, (GHRFunc) trw_layer_track_find_uuid, &udata ); if ( trkf && udata.uuid ) vtl->current_tp_id = udata.uuid; else vtl->current_tp_id = NULL; vik_layer_emit_update(VIK_LAYER(vtl)); } } } /* split by time routine */ static void trw_layer_split_by_timestamp ( gpointer pass_along[6] ) { VikTrwLayer *vtl = (VikTrwLayer *)pass_along[0]; VikTrack *track = (VikTrack *) g_hash_table_lookup ( vtl->tracks, pass_along[3] ); GList *trps = track->trackpoints; GList *iter; GList *newlists = NULL; GList *newtps = NULL; static guint thr = 1; time_t ts, prev_ts; if ( !trps ) return; if (!a_dialog_time_threshold(VIK_GTK_WINDOW_FROM_LAYER(pass_along[0]), _("Split Threshold..."), _("Split when time between trackpoints exceeds:"), &thr)) { return; } /* iterate through trackpoints, and copy them into new lists without touching original list */ prev_ts = VIK_TRACKPOINT(trps->data)->timestamp; iter = trps; while (iter) { ts = VIK_TRACKPOINT(iter->data)->timestamp; // Check for unordered time points - this is quite a rare occurence - unless one has reversed a track. if (ts < prev_ts) { gchar tmp_str[64]; strftime ( tmp_str, sizeof(tmp_str), "%c", localtime(&ts) ); if ( a_dialog_yes_or_no ( VIK_GTK_WINDOW_FROM_LAYER(vtl), _("Can not split track due to trackpoints not ordered in time - such as at %s.\n\nGoto this trackpoint?"), tmp_str ) ) { goto_coord ( pass_along[1], vtl, pass_along[5], &(VIK_TRACKPOINT(iter->data)->coord) ); } return; } if (ts - prev_ts > thr*60) { /* flush accumulated trackpoints into new list */ newlists = g_list_append(newlists, g_list_reverse(newtps)); newtps = NULL; } /* accumulate trackpoint copies in newtps, in reverse order */ newtps = g_list_prepend(newtps, vik_trackpoint_copy(VIK_TRACKPOINT(iter->data))); prev_ts = ts; iter = g_list_next(iter); } if (newtps) { newlists = g_list_append(newlists, g_list_reverse(newtps)); } /* put lists of trackpoints into tracks */ iter = newlists; // Only bother updating if the split results in new tracks if (g_list_length (newlists) > 1) { while (iter) { gchar *new_tr_name; VikTrack *tr; tr = vik_track_copy ( track, FALSE ); tr->trackpoints = (GList *)(iter->data); new_tr_name = trw_layer_new_unique_sublayer_name ( vtl, VIK_TRW_LAYER_SUBLAYER_TRACK, track->name); vik_trw_layer_add_track(vtl, new_tr_name, tr); /* g_print("adding track %s, times %d - %d\n", new_tr_name, VIK_TRACKPOINT(tr->trackpoints->data)->timestamp, VIK_TRACKPOINT(g_list_last(tr->trackpoints)->data)->timestamp);*/ iter = g_list_next(iter); } // Remove original track and then update the display vik_trw_layer_delete_track (vtl, track); vik_layer_emit_update(VIK_LAYER(pass_along[0])); } g_list_free(newlists); } /** * Split a track by the number of points as specified by the user */ static void trw_layer_split_by_n_points ( gpointer pass_along[6] ) { VikTrwLayer *vtl = (VikTrwLayer *)pass_along[0]; VikTrack *track; if ( GPOINTER_TO_INT (pass_along[2]) == VIK_TRW_LAYER_SUBLAYER_ROUTE ) track = (VikTrack *) g_hash_table_lookup ( vtl->routes, pass_along[3] ); else track = (VikTrack *) g_hash_table_lookup ( vtl->tracks, pass_along[3] ); if ( !track ) return; // Check valid track GList *trps = track->trackpoints; if ( !trps ) return; gint points = a_dialog_get_positive_number(VIK_GTK_WINDOW_FROM_LAYER(pass_along[0]), _("Split Every Nth Point"), _("Split on every Nth point:"), 250, // Default value as per typical limited track capacity of various GPS devices 2, // Min 65536, // Max 5); // Step // Was a valid number returned? if (!points) return; // Now split... GList *iter; GList *newlists = NULL; GList *newtps = NULL; gint count = 0; iter = trps; while (iter) { /* accumulate trackpoint copies in newtps, in reverse order */ newtps = g_list_prepend(newtps, vik_trackpoint_copy(VIK_TRACKPOINT(iter->data))); count++; if (count >= points) { /* flush accumulated trackpoints into new list */ newlists = g_list_append(newlists, g_list_reverse(newtps)); newtps = NULL; count = 0; } iter = g_list_next(iter); } // If there is a remaining chunk put that into the new split list // This may well be the whole track if no split points were encountered if (newtps) { newlists = g_list_append(newlists, g_list_reverse(newtps)); } /* put lists of trackpoints into tracks */ iter = newlists; // Only bother updating if the split results in new tracks if (g_list_length (newlists) > 1) { while (iter) { gchar *new_tr_name; VikTrack *tr; tr = vik_track_copy ( track, FALSE ); tr->trackpoints = (GList *)(iter->data); if ( track->is_route ) { new_tr_name = trw_layer_new_unique_sublayer_name ( vtl, VIK_TRW_LAYER_SUBLAYER_ROUTE, track->name); vik_trw_layer_add_route(vtl, new_tr_name, tr); } else { new_tr_name = trw_layer_new_unique_sublayer_name ( vtl, VIK_TRW_LAYER_SUBLAYER_TRACK, track->name); vik_trw_layer_add_track(vtl, new_tr_name, tr); } iter = g_list_next(iter); } // Remove original track and then update the display if ( track->is_route ) vik_trw_layer_delete_route (vtl, track); else vik_trw_layer_delete_track (vtl, track); vik_layer_emit_update(VIK_LAYER(pass_along[0])); } g_list_free(newlists); } /** * Split a track at the currently selected trackpoint */ static void trw_layer_split_at_trackpoint ( gpointer pass_along[6] ) { VikTrwLayer *vtl = (VikTrwLayer *)pass_along[0]; gint subtype = GPOINTER_TO_INT (pass_along[2]); trw_layer_split_at_selected_trackpoint ( vtl, subtype ); } /** * Split a track by its segments * Routes do not have segments so don't call this for routes */ static void trw_layer_split_segments ( gpointer pass_along[6] ) { VikTrwLayer *vtl = (VikTrwLayer *)pass_along[0]; VikTrack *trk = g_hash_table_lookup ( vtl->tracks, pass_along[3] ); if ( !trk ) return; guint ntracks; VikTrack **tracks = vik_track_split_into_segments (trk, &ntracks); gchar *new_tr_name; guint i; for ( i = 0; i < ntracks; i++ ) { if ( tracks[i] ) { new_tr_name = trw_layer_new_unique_sublayer_name ( vtl, VIK_TRW_LAYER_SUBLAYER_TRACK, trk->name); vik_trw_layer_add_track ( vtl, new_tr_name, tracks[i] ); } } if ( tracks ) { g_free ( tracks ); // Remove original track vik_trw_layer_delete_track ( vtl, trk ); vik_layer_emit_update ( VIK_LAYER(vtl) ); } else { a_dialog_error_msg (VIK_GTK_WINDOW_FROM_LAYER(vtl), _("Can not split track as it has no segments")); } } /* end of split/merge routines */ /** * Delete adjacent track points at the same position * AKA Delete Dulplicates on the Properties Window */ static void trw_layer_delete_points_same_position ( gpointer pass_along[6] ) { VikTrwLayer *vtl = (VikTrwLayer *)pass_along[0]; VikTrack *trk; if ( GPOINTER_TO_INT (pass_along[2]) == VIK_TRW_LAYER_SUBLAYER_ROUTE ) trk = (VikTrack *) g_hash_table_lookup ( vtl->routes, pass_along[3] ); else trk = (VikTrack *) g_hash_table_lookup ( vtl->tracks, pass_along[3] ); if ( !trk ) return; gulong removed = vik_track_remove_dup_points ( trk ); // Track has been updated so update tps: trw_layer_cancel_tps_of_track ( vtl, trk ); // Inform user how much was deleted as it's not obvious from the normal view gchar str[64]; const gchar *tmp_str = ngettext("Deleted %ld point", "Deleted %ld points", removed); g_snprintf(str, 64, tmp_str, removed); a_dialog_info_msg (VIK_GTK_WINDOW_FROM_LAYER(vtl), str); vik_layer_emit_update ( VIK_LAYER(vtl) ); } /** * Delete adjacent track points with the same timestamp * Normally new tracks that are 'routes' won't have any timestamps so should be OK to clean up the track */ static void trw_layer_delete_points_same_time ( gpointer pass_along[6] ) { VikTrwLayer *vtl = (VikTrwLayer *)pass_along[0]; VikTrack *trk; if ( GPOINTER_TO_INT (pass_along[2]) == VIK_TRW_LAYER_SUBLAYER_ROUTE ) trk = (VikTrack *) g_hash_table_lookup ( vtl->routes, pass_along[3] ); else trk = (VikTrack *) g_hash_table_lookup ( vtl->tracks, pass_along[3] ); if ( !trk ) return; gulong removed = vik_track_remove_same_time_points ( trk ); // Track has been updated so update tps: trw_layer_cancel_tps_of_track ( vtl, trk ); // Inform user how much was deleted as it's not obvious from the normal view gchar str[64]; const gchar *tmp_str = ngettext("Deleted %ld point", "Deleted %ld points", removed); g_snprintf(str, 64, tmp_str, removed); a_dialog_info_msg (VIK_GTK_WINDOW_FROM_LAYER(vtl), str); vik_layer_emit_update ( VIK_LAYER(vtl) ); } /** * Reverse a track */ static void trw_layer_reverse ( gpointer pass_along[6] ) { VikTrwLayer *vtl = (VikTrwLayer *)pass_along[0]; VikTrack *track; if ( GPOINTER_TO_INT (pass_along[2]) == VIK_TRW_LAYER_SUBLAYER_ROUTE ) track = (VikTrack *) g_hash_table_lookup ( vtl->routes, pass_along[3] ); else track = (VikTrack *) g_hash_table_lookup ( vtl->tracks, pass_along[3] ); if ( ! track ) return; // Check valid track GList *trps = track->trackpoints; if ( !trps ) return; vik_track_reverse ( track ); vik_layer_emit_update ( VIK_LAYER(pass_along[0]) ); } /** * Similar to trw_layer_enum_item, but this uses a sorted method */ /* Currently unused static void trw_layer_sorted_name_list(gpointer key, gpointer value, gpointer udata) { GList **list = (GList**)udata; // *list = g_list_prepend(*all, key); //unsorted method // Sort named list alphabetically *list = g_list_insert_sorted_with_data (*list, key, sort_alphabetically, NULL); } */ /** * Now Waypoint specific sort */ static void trw_layer_sorted_wp_id_by_name_list (const gpointer id, const VikWaypoint *wp, gpointer udata) { GList **list = (GList**)udata; // Sort named list alphabetically *list = g_list_insert_sorted_with_data (*list, wp->name, sort_alphabetically, NULL); } /** * Track specific sort */ static void trw_layer_sorted_track_id_by_name_list (const gpointer id, const VikTrack *trk, gpointer udata) { GList **list = (GList**)udata; // Sort named list alphabetically *list = g_list_insert_sorted_with_data (*list, trk->name, sort_alphabetically, NULL); } typedef struct { gboolean has_same_track_name; const gchar *same_track_name; } same_track_name_udata; static gint check_tracks_for_same_name ( gconstpointer aa, gconstpointer bb, gpointer udata ) { const gchar* namea = (const gchar*) aa; const gchar* nameb = (const gchar*) bb; // the test gint result = strcmp ( namea, nameb ); if ( result == 0 ) { // Found two names the same same_track_name_udata *user_data = udata; user_data->has_same_track_name = TRUE; user_data->same_track_name = namea; } // Leave ordering the same return 0; } /** * Find out if any tracks have the same name in this hash table */ static gboolean trw_layer_has_same_track_names ( GHashTable *ht_tracks ) { // Sort items by name, then compare if any next to each other are the same GList *track_names = NULL; g_hash_table_foreach ( ht_tracks, (GHFunc) trw_layer_sorted_track_id_by_name_list, &track_names ); // No tracks if ( ! track_names ) return FALSE; same_track_name_udata udata; udata.has_same_track_name = FALSE; // Use sort routine to traverse list comparing items // Don't care how this list ends up ordered ( doesn't actually change ) - care about the returned status GList *dummy_list = g_list_sort_with_data ( track_names, check_tracks_for_same_name, &udata ); // Still no tracks... if ( ! dummy_list ) return FALSE; return udata.has_same_track_name; } /** * Force unqiue track names for the track table specified * Note the panel is a required parameter to enable the update of the names displayed * Specify if on tracks or else on routes */ static void vik_trw_layer_uniquify_tracks ( VikTrwLayer *vtl, VikLayersPanel *vlp, GHashTable *track_table, gboolean ontrack ) { // . Search list for an instance of repeated name // . get track of this name // . create new name // . rename track & update equiv. treeview iter // . repeat until all different same_track_name_udata udata; GList *track_names = NULL; udata.has_same_track_name = FALSE; udata.same_track_name = NULL; g_hash_table_foreach ( track_table, (GHFunc) trw_layer_sorted_track_id_by_name_list, &track_names ); // No tracks if ( ! track_names ) return; GList *dummy_list1 = g_list_sort_with_data ( track_names, check_tracks_for_same_name, &udata ); // Still no tracks... if ( ! dummy_list1 ) return; while ( udata.has_same_track_name ) { // Find a track with the same name VikTrack *trk; if ( ontrack ) trk = vik_trw_layer_get_track ( vtl, (gpointer) udata.same_track_name ); else trk = vik_trw_layer_get_route ( vtl, (gpointer) udata.same_track_name ); if ( ! trk ) { // Broken :( g_critical("Houston, we've had a problem."); vik_statusbar_set_message ( vik_window_get_statusbar (VIK_WINDOW(VIK_GTK_WINDOW_FROM_LAYER(vtl))), VIK_STATUSBAR_INFO, _("Internal Error in vik_trw_layer_uniquify_tracks") ); return; } // Rename it gchar *newname = trw_layer_new_unique_sublayer_name ( vtl, VIK_TRW_LAYER_SUBLAYER_TRACK, udata.same_track_name ); vik_track_set_name ( trk, newname ); trku_udata udataU; udataU.trk = trk; udataU.uuid = NULL; // Need want key of it for treeview update gpointer *trkf = g_hash_table_find ( track_table, (GHRFunc) trw_layer_track_find_uuid, &udataU ); if ( trkf && udataU.uuid ) { GtkTreeIter *it; if ( ontrack ) it = g_hash_table_lookup ( vtl->tracks_iters, udataU.uuid ); else it = g_hash_table_lookup ( vtl->routes_iters, udataU.uuid ); if ( it ) { vik_treeview_item_set_name ( VIK_LAYER(vtl)->vt, it, newname ); #ifdef VIK_CONFIG_ALPHABETIZED_TRW vik_treeview_sublayer_realphabetize ( VIK_LAYER(vtl)->vt, it, newname ); #endif } } // Start trying to find same names again... track_names = NULL; g_hash_table_foreach ( track_table, (GHFunc) trw_layer_sorted_track_id_by_name_list, &track_names ); udata.has_same_track_name = FALSE; GList *dummy_list2 = g_list_sort_with_data ( track_names, check_tracks_for_same_name, &udata ); // No tracks any more - give up searching if ( ! dummy_list2 ) udata.has_same_track_name = FALSE; } // Update vik_layers_panel_emit_update ( vlp ); } /** * */ static void trw_layer_delete_tracks_from_selection ( gpointer lav[2] ) { VikTrwLayer *vtl = VIK_TRW_LAYER(lav[0]); GList *all = NULL; // Ensure list of track names offered is unique if ( trw_layer_has_same_track_names ( vtl->tracks ) ) { if ( a_dialog_yes_or_no ( VIK_GTK_WINDOW_FROM_LAYER(vtl), _("Multiple entries with the same name exist. This method only works with unique names. Force unique names now?"), NULL ) ) { vik_trw_layer_uniquify_tracks ( vtl, VIK_LAYERS_PANEL(lav[1]), vtl->tracks, TRUE ); } else return; } // Sort list alphabetically for better presentation g_hash_table_foreach(vtl->tracks, (GHFunc) trw_layer_sorted_track_id_by_name_list, &all); if ( ! all ) { a_dialog_error_msg (VIK_GTK_WINDOW_FROM_LAYER(vtl), _("No tracks found")); return; } // Get list of items to delete from the user GList *delete_list = a_dialog_select_from_list(VIK_GTK_WINDOW_FROM_LAYER(vtl), all, TRUE, _("Delete Selection"), _("Select tracks to delete")); g_list_free(all); // Delete requested tracks // since specificly requested, IMHO no need for extra confirmation if ( delete_list ) { GList *l; for (l = delete_list; l != NULL; l = g_list_next(l)) { // This deletes first trk it finds of that name (but uniqueness is enforced above) trw_layer_delete_track_by_name (vtl, l->data, vtl->tracks); } g_list_free(delete_list); vik_layer_emit_update( VIK_LAYER(vtl) ); } } /** * */ static void trw_layer_delete_routes_from_selection ( gpointer lav[2] ) { VikTrwLayer *vtl = VIK_TRW_LAYER(lav[0]); GList *all = NULL; // Ensure list of track names offered is unique if ( trw_layer_has_same_track_names ( vtl->routes ) ) { if ( a_dialog_yes_or_no ( VIK_GTK_WINDOW_FROM_LAYER(vtl), _("Multiple entries with the same name exist. This method only works with unique names. Force unique names now?"), NULL ) ) { vik_trw_layer_uniquify_tracks ( vtl, VIK_LAYERS_PANEL(lav[1]), vtl->routes, FALSE ); } else return; } // Sort list alphabetically for better presentation g_hash_table_foreach(vtl->routes, (GHFunc) trw_layer_sorted_track_id_by_name_list, &all); if ( ! all ) { a_dialog_error_msg (VIK_GTK_WINDOW_FROM_LAYER(vtl), _("No routes found")); return; } // Get list of items to delete from the user GList *delete_list = a_dialog_select_from_list ( VIK_GTK_WINDOW_FROM_LAYER(vtl), all, TRUE, _("Delete Selection"), _("Select routes to delete") ); g_list_free(all); // Delete requested routes // since specificly requested, IMHO no need for extra confirmation if ( delete_list ) { GList *l; for (l = delete_list; l != NULL; l = g_list_next(l)) { // This deletes first route it finds of that name (but uniqueness is enforced above) trw_layer_delete_track_by_name (vtl, l->data, vtl->routes); } g_list_free(delete_list); vik_layer_emit_update( VIK_LAYER(vtl) ); } } typedef struct { gboolean has_same_waypoint_name; const gchar *same_waypoint_name; } same_waypoint_name_udata; static gint check_waypoints_for_same_name ( gconstpointer aa, gconstpointer bb, gpointer udata ) { const gchar* namea = (const gchar*) aa; const gchar* nameb = (const gchar*) bb; // the test gint result = strcmp ( namea, nameb ); if ( result == 0 ) { // Found two names the same same_waypoint_name_udata *user_data = udata; user_data->has_same_waypoint_name = TRUE; user_data->same_waypoint_name = namea; } // Leave ordering the same return 0; } /** * Find out if any waypoints have the same name in this layer */ gboolean trw_layer_has_same_waypoint_names ( VikTrwLayer *vtl ) { // Sort items by name, then compare if any next to each other are the same GList *waypoint_names = NULL; g_hash_table_foreach ( vtl->waypoints, (GHFunc) trw_layer_sorted_wp_id_by_name_list, &waypoint_names ); // No waypoints if ( ! waypoint_names ) return FALSE; same_waypoint_name_udata udata; udata.has_same_waypoint_name = FALSE; // Use sort routine to traverse list comparing items // Don't care how this list ends up ordered ( doesn't actually change ) - care about the returned status GList *dummy_list = g_list_sort_with_data ( waypoint_names, check_waypoints_for_same_name, &udata ); // Still no waypoints... if ( ! dummy_list ) return FALSE; return udata.has_same_waypoint_name; } /** * Force unqiue waypoint names for this layer * Note the panel is a required parameter to enable the update of the names displayed */ static void vik_trw_layer_uniquify_waypoints ( VikTrwLayer *vtl, VikLayersPanel *vlp ) { // . Search list for an instance of repeated name // . get waypoint of this name // . create new name // . rename waypoint & update equiv. treeview iter // . repeat until all different same_waypoint_name_udata udata; GList *waypoint_names = NULL; udata.has_same_waypoint_name = FALSE; udata.same_waypoint_name = NULL; g_hash_table_foreach ( vtl->waypoints, (GHFunc) trw_layer_sorted_wp_id_by_name_list, &waypoint_names ); // No waypoints if ( ! waypoint_names ) return; GList *dummy_list1 = g_list_sort_with_data ( waypoint_names, check_waypoints_for_same_name, &udata ); // Still no waypoints... if ( ! dummy_list1 ) return; while ( udata.has_same_waypoint_name ) { // Find a waypoint with the same name VikWaypoint *waypoint = vik_trw_layer_get_waypoint ( vtl, (gpointer) udata.same_waypoint_name ); if ( ! waypoint ) { // Broken :( g_critical("Houston, we've had a problem."); vik_statusbar_set_message ( vik_window_get_statusbar (VIK_WINDOW(VIK_GTK_WINDOW_FROM_LAYER(vtl))), VIK_STATUSBAR_INFO, _("Internal Error in vik_trw_layer_uniquify_waypoints") ); return; } // Rename it gchar *newname = trw_layer_new_unique_sublayer_name ( vtl, VIK_TRW_LAYER_SUBLAYER_WAYPOINT, udata.same_waypoint_name ); vik_waypoint_set_name ( waypoint, newname ); wpu_udata udataU; udataU.wp = waypoint; udataU.uuid = NULL; // Need want key of it for treeview update gpointer *wpf = g_hash_table_find ( vtl->waypoints, (GHRFunc) trw_layer_waypoint_find_uuid, &udataU ); if ( wpf && udataU.uuid ) { GtkTreeIter *it = g_hash_table_lookup ( vtl->waypoints_iters, udataU.uuid ); if ( it ) { vik_treeview_item_set_name ( VIK_LAYER(vtl)->vt, it, newname ); #ifdef VIK_CONFIG_ALPHABETIZED_TRW vik_treeview_sublayer_realphabetize ( VIK_LAYER(vtl)->vt, it, newname ); #endif } } // Start trying to find same names again... waypoint_names = NULL; g_hash_table_foreach ( vtl->waypoints, (GHFunc) trw_layer_sorted_wp_id_by_name_list, &waypoint_names ); udata.has_same_waypoint_name = FALSE; GList *dummy_list2 = g_list_sort_with_data ( waypoint_names, check_waypoints_for_same_name, &udata ); // No waypoints any more - give up searching if ( ! dummy_list2 ) udata.has_same_waypoint_name = FALSE; } // Update vik_layers_panel_emit_update ( vlp ); } /** * */ static void trw_layer_delete_waypoints_from_selection ( gpointer lav[2] ) { VikTrwLayer *vtl = VIK_TRW_LAYER(lav[0]); GList *all = NULL; // Ensure list of waypoint names offered is unique if ( trw_layer_has_same_waypoint_names ( vtl ) ) { if ( a_dialog_yes_or_no ( VIK_GTK_WINDOW_FROM_LAYER(vtl), _("Multiple entries with the same name exist. This method only works with unique names. Force unique names now?"), NULL ) ) { vik_trw_layer_uniquify_waypoints ( vtl, VIK_LAYERS_PANEL(lav[1]) ); } else return; } // Sort list alphabetically for better presentation g_hash_table_foreach ( vtl->waypoints, (GHFunc) trw_layer_sorted_wp_id_by_name_list, &all); if ( ! all ) { a_dialog_error_msg (VIK_GTK_WINDOW_FROM_LAYER(vtl), _("No waypoints found")); return; } all = g_list_sort_with_data(all, sort_alphabetically, NULL); // Get list of items to delete from the user GList *delete_list = a_dialog_select_from_list(VIK_GTK_WINDOW_FROM_LAYER(vtl), all, TRUE, _("Delete Selection"), _("Select waypoints to delete")); g_list_free(all); // Delete requested waypoints // since specificly requested, IMHO no need for extra confirmation if ( delete_list ) { GList *l; for (l = delete_list; l != NULL; l = g_list_next(l)) { // This deletes first waypoint it finds of that name (but uniqueness is enforced above) trw_layer_delete_waypoint_by_name (vtl, l->data); } g_list_free(delete_list); vik_layer_emit_update( VIK_LAYER(vtl) ); } } static void trw_layer_goto_waypoint ( gpointer pass_along[6] ) { VikWaypoint *wp = g_hash_table_lookup ( VIK_TRW_LAYER(pass_along[0])->waypoints, pass_along[3] ); if ( wp ) goto_coord ( pass_along[1], pass_along[0], pass_along[5], &(wp->coord) ); } static void trw_layer_waypoint_gc_webpage ( gpointer pass_along[6] ) { VikWaypoint *wp = g_hash_table_lookup ( VIK_TRW_LAYER(pass_along[0])->waypoints, pass_along[3] ); if ( !wp ) return; gchar *webpage = g_strdup_printf("http://www.geocaching.com/seek/cache_details.aspx?wp=%s", wp->name ); open_url(VIK_GTK_WINDOW_FROM_LAYER(VIK_LAYER(pass_along[0])), webpage); g_free ( webpage ); } static void trw_layer_waypoint_webpage ( gpointer pass_along[6] ) { VikWaypoint *wp = g_hash_table_lookup ( VIK_TRW_LAYER(pass_along[0])->waypoints, pass_along[3] ); if ( !wp ) return; if ( !strncmp(wp->comment, "http", 4) ) { open_url(VIK_GTK_WINDOW_FROM_LAYER(VIK_LAYER(pass_along[0])), wp->comment); } else if ( !strncmp(wp->description, "http", 4) ) { open_url(VIK_GTK_WINDOW_FROM_LAYER(VIK_LAYER(pass_along[0])), wp->description); } } static const gchar* trw_layer_sublayer_rename_request ( VikTrwLayer *l, const gchar *newname, gpointer vlp, gint subtype, gpointer sublayer, GtkTreeIter *iter ) { if ( subtype == VIK_TRW_LAYER_SUBLAYER_WAYPOINT ) { VikWaypoint *wp = g_hash_table_lookup ( l->waypoints, sublayer ); // No actual change to the name supplied if ( wp->name ) if (strcmp(newname, wp->name) == 0 ) return NULL; VikWaypoint *wpf = vik_trw_layer_get_waypoint ( l, newname ); if ( wpf ) { // An existing waypoint has been found with the requested name if ( ! a_dialog_yes_or_no ( VIK_GTK_WINDOW_FROM_LAYER(l), _("A waypoint with the name \"%s\" already exists. Really rename to the same name?"), newname ) ) return NULL; } // Update WP name and refresh the treeview vik_waypoint_set_name (wp, newname); #ifdef VIK_CONFIG_ALPHABETIZED_TRW vik_treeview_sublayer_realphabetize ( VIK_LAYER(l)->vt, iter, newname ); #endif vik_layers_panel_emit_update ( VIK_LAYERS_PANEL(vlp) ); return newname; } if ( subtype == VIK_TRW_LAYER_SUBLAYER_TRACK ) { VikTrack *trk = g_hash_table_lookup ( l->tracks, sublayer ); // No actual change to the name supplied if ( trk->name ) if (strcmp(newname, trk->name) == 0) return NULL; VikTrack *trkf = vik_trw_layer_get_track ( l, (gpointer) newname ); if ( trkf ) { // An existing track has been found with the requested name if ( ! a_dialog_yes_or_no ( VIK_GTK_WINDOW_FROM_LAYER(l), _("A track with the name \"%s\" already exists. Really rename to the same name?"), newname ) ) return NULL; } // Update track name and refresh GUI parts vik_track_set_name (trk, newname); // Update any subwindows that could be displaying this track which has changed name // Only one Track Edit Window if ( l->current_tp_track == trk && l->tpwin ) { vik_trw_layer_tpwin_set_track_name ( l->tpwin, newname ); } // Property Dialog of the track vik_trw_layer_propwin_update ( trk ); #ifdef VIK_CONFIG_ALPHABETIZED_TRW vik_treeview_sublayer_realphabetize ( VIK_LAYER(l)->vt, iter, newname ); #endif vik_layers_panel_emit_update ( VIK_LAYERS_PANEL(vlp) ); return newname; } if ( subtype == VIK_TRW_LAYER_SUBLAYER_ROUTE ) { VikTrack *trk = g_hash_table_lookup ( l->routes, sublayer ); // No actual change to the name supplied if ( trk->name ) if (strcmp(newname, trk->name) == 0) return NULL; VikTrack *trkf = vik_trw_layer_get_route ( l, (gpointer) newname ); if ( trkf ) { // An existing track has been found with the requested name if ( ! a_dialog_yes_or_no ( VIK_GTK_WINDOW_FROM_LAYER(l), _("A route with the name \"%s\" already exists. Really rename to the same name?"), newname ) ) return NULL; } // Update track name and refresh GUI parts vik_track_set_name (trk, newname); // Update any subwindows that could be displaying this track which has changed name // Only one Track Edit Window if ( l->current_tp_track == trk && l->tpwin ) { vik_trw_layer_tpwin_set_track_name ( l->tpwin, newname ); } // Property Dialog of the track vik_trw_layer_propwin_update ( trk ); #ifdef VIK_CONFIG_ALPHABETIZED_TRW vik_treeview_sublayer_realphabetize ( VIK_LAYER(l)->vt, iter, newname ); #endif vik_layers_panel_emit_update ( VIK_LAYERS_PANEL(vlp) ); return newname; } return NULL; } static gboolean is_valid_geocache_name ( gchar *str ) { gint len = strlen ( str ); return len >= 3 && len <= 7 && str[0] == 'G' && str[1] == 'C' && isalnum(str[2]) && (len < 4 || isalnum(str[3])) && (len < 5 || isalnum(str[4])) && (len < 6 || isalnum(str[5])) && (len < 7 || isalnum(str[6])); } static void trw_layer_track_use_with_filter ( gpointer pass_along[6] ) { VikTrack *trk = g_hash_table_lookup ( VIK_TRW_LAYER(pass_along[0])->tracks, pass_along[3] ); a_acquire_set_filter_track ( trk ); } #ifdef VIK_CONFIG_GOOGLE static gboolean is_valid_google_route ( VikTrwLayer *vtl, const gpointer track_id ) { VikTrack *tr = g_hash_table_lookup ( vtl->routes, track_id ); return ( tr && tr->comment && strlen(tr->comment) > 7 && !strncmp(tr->comment, "from:", 5) ); } static void trw_layer_google_route_webpage ( gpointer pass_along[6] ) { VikTrack *tr = g_hash_table_lookup ( VIK_TRW_LAYER(pass_along[0])->routes, pass_along[3] ); if ( tr ) { gchar *escaped = uri_escape ( tr->comment ); gchar *webpage = g_strdup_printf("http://maps.google.com/maps?f=q&hl=en&q=%s", escaped ); open_url(VIK_GTK_WINDOW_FROM_LAYER(VIK_LAYER(pass_along[0])), webpage); g_free ( escaped ); g_free ( webpage ); } } #endif /* vlp can be NULL if necessary - i.e. right-click from a tool */ /* viewpoint is now available instead */ static gboolean trw_layer_sublayer_add_menu_items ( VikTrwLayer *l, GtkMenu *menu, gpointer vlp, gint subtype, gpointer sublayer, GtkTreeIter *iter, VikViewport *vvp ) { static gpointer pass_along[8]; GtkWidget *item; gboolean rv = FALSE; pass_along[0] = l; pass_along[1] = vlp; pass_along[2] = GINT_TO_POINTER (subtype); pass_along[3] = sublayer; pass_along[4] = GINT_TO_POINTER (1); // Confirm delete request pass_along[5] = vvp; pass_along[6] = iter; pass_along[7] = NULL; // For misc purposes - maybe track or waypoint if ( subtype == VIK_TRW_LAYER_SUBLAYER_WAYPOINT || subtype == VIK_TRW_LAYER_SUBLAYER_TRACK || subtype == VIK_TRW_LAYER_SUBLAYER_ROUTE ) { rv = TRUE; item = gtk_image_menu_item_new_from_stock ( GTK_STOCK_PROPERTIES, NULL ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_properties_item), pass_along ); gtk_menu_shell_append ( GTK_MENU_SHELL(menu), item ); gtk_widget_show ( item ); if (subtype == VIK_TRW_LAYER_SUBLAYER_TRACK) { VikTrack *tr = g_hash_table_lookup ( l->tracks, sublayer ); if (tr && tr->property_dialog) gtk_widget_set_sensitive(GTK_WIDGET(item), FALSE ); } if (subtype == VIK_TRW_LAYER_SUBLAYER_ROUTE) { VikTrack *tr = g_hash_table_lookup ( l->routes, sublayer ); if (tr && tr->property_dialog) gtk_widget_set_sensitive(GTK_WIDGET(item), FALSE ); } item = gtk_image_menu_item_new_from_stock ( GTK_STOCK_CUT, NULL ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_cut_item_cb), pass_along ); gtk_menu_shell_append ( GTK_MENU_SHELL(menu), item ); gtk_widget_show ( item ); item = gtk_image_menu_item_new_from_stock ( GTK_STOCK_COPY, NULL ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_copy_item_cb), pass_along ); gtk_menu_shell_append ( GTK_MENU_SHELL(menu), item ); gtk_widget_show ( item ); item = gtk_image_menu_item_new_from_stock ( GTK_STOCK_DELETE, NULL ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_delete_item), pass_along ); gtk_menu_shell_append ( GTK_MENU_SHELL(menu), item ); gtk_widget_show ( item ); if ( subtype == VIK_TRW_LAYER_SUBLAYER_WAYPOINT ) { gboolean separator_created = FALSE; /* could be a right-click using the tool */ if ( vlp != NULL ) { item = gtk_menu_item_new (); gtk_menu_shell_append ( GTK_MENU_SHELL(menu), item ); gtk_widget_show ( item ); separator_created = TRUE; item = gtk_image_menu_item_new_with_mnemonic ( _("_Goto") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_JUMP_TO, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_goto_waypoint), pass_along ); gtk_menu_shell_append ( GTK_MENU_SHELL(menu), item ); gtk_widget_show ( item ); } VikWaypoint *wp = g_hash_table_lookup ( VIK_TRW_LAYER(l)->waypoints, sublayer ); if ( wp && wp->name ) { if ( is_valid_geocache_name ( wp->name ) ) { if ( !separator_created ) { item = gtk_menu_item_new (); gtk_menu_shell_append ( GTK_MENU_SHELL(menu), item ); gtk_widget_show ( item ); separator_created = TRUE; } item = gtk_menu_item_new_with_mnemonic ( _("_Visit Geocache Webpage") ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_waypoint_gc_webpage), pass_along ); gtk_menu_shell_append ( GTK_MENU_SHELL(menu), item ); gtk_widget_show ( item ); } } if ( wp && wp->image ) { if ( !separator_created ) { item = gtk_menu_item_new (); gtk_menu_shell_append ( GTK_MENU_SHELL(menu), item ); gtk_widget_show ( item ); separator_created = TRUE; } // Set up image paramater pass_along[5] = wp->image; item = gtk_image_menu_item_new_with_mnemonic ( _("_Show Picture...") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock ("vik-icon-Show Picture", GTK_ICON_SIZE_MENU) ); // Own icon - see stock_icons in vikwindow.c g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_show_picture), pass_along ); gtk_menu_shell_append ( GTK_MENU_SHELL(menu), item ); gtk_widget_show ( item ); #ifdef VIK_CONFIG_GEOTAG GtkWidget *geotag_submenu = gtk_menu_new (); item = gtk_image_menu_item_new_with_mnemonic ( _("Update Geotag on _Image") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_REFRESH, GTK_ICON_SIZE_MENU) ); gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); gtk_widget_show ( item ); gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), geotag_submenu ); item = gtk_menu_item_new_with_mnemonic ( _("_Update") ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_geotagging_waypoint_mtime_update), pass_along ); gtk_menu_shell_append (GTK_MENU_SHELL (geotag_submenu), item); gtk_widget_show ( item ); item = gtk_menu_item_new_with_mnemonic ( _("Update and _Keep File Timestamp") ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_geotagging_waypoint_mtime_keep), pass_along ); gtk_menu_shell_append (GTK_MENU_SHELL (geotag_submenu), item); gtk_widget_show ( item ); #endif } if ( wp ) { if ( ( wp->comment && !strncmp(wp->comment, "http", 4) ) || ( wp->description && !strncmp(wp->description, "http", 4) )) { item = gtk_image_menu_item_new_with_mnemonic ( _("Visit _Webpage") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_NETWORK, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_waypoint_webpage), pass_along ); gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); gtk_widget_show ( item ); } } } } if ( subtype == VIK_TRW_LAYER_SUBLAYER_WAYPOINTS || subtype == VIK_TRW_LAYER_SUBLAYER_TRACKS || subtype == VIK_TRW_LAYER_SUBLAYER_ROUTES ) { item = gtk_image_menu_item_new_from_stock ( GTK_STOCK_PASTE, NULL ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_paste_item_cb), pass_along ); gtk_menu_shell_append ( GTK_MENU_SHELL(menu), item ); gtk_widget_show ( item ); // TODO: only enable if suitable item is in clipboard - want to determine *which* sublayer type if ( a_clipboard_type ( ) == VIK_CLIPBOARD_DATA_SUBLAYER ) gtk_widget_set_sensitive ( item, TRUE ); else gtk_widget_set_sensitive ( item, FALSE ); // Add separator item = gtk_menu_item_new (); gtk_menu_shell_append ( GTK_MENU_SHELL(menu), item ); gtk_widget_show ( item ); } if ( vlp && (subtype == VIK_TRW_LAYER_SUBLAYER_WAYPOINTS || subtype == VIK_TRW_LAYER_SUBLAYER_WAYPOINT) ) { rv = TRUE; item = gtk_image_menu_item_new_with_mnemonic ( _("_New Waypoint...") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_NEW, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_new_wp), pass_along ); gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); gtk_widget_show ( item ); } if ( subtype == VIK_TRW_LAYER_SUBLAYER_WAYPOINTS ) { item = gtk_image_menu_item_new_with_mnemonic ( _("_View All Waypoints") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_ZOOM_FIT, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_auto_waypoints_view), pass_along ); gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); gtk_widget_show ( item ); item = gtk_image_menu_item_new_with_mnemonic ( _("Goto _Waypoint...") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_JUMP_TO, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_goto_wp), pass_along ); gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); gtk_widget_show ( item ); item = gtk_image_menu_item_new_with_mnemonic ( _("Delete _All Waypoints") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_REMOVE, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_delete_all_waypoints), pass_along ); gtk_menu_shell_append ( GTK_MENU_SHELL(menu), item ); gtk_widget_show ( item ); item = gtk_image_menu_item_new_with_mnemonic ( _("_Delete Waypoints From Selection...") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_INDEX, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_delete_waypoints_from_selection), pass_along ); gtk_menu_shell_append ( GTK_MENU_SHELL(menu), item ); gtk_widget_show ( item ); } if ( subtype == VIK_TRW_LAYER_SUBLAYER_TRACKS ) { rv = TRUE; if ( l->current_track && !l->current_track->is_route ) { item = gtk_menu_item_new_with_mnemonic ( _("_Finish Track") ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_finish_track), pass_along ); gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); gtk_widget_show ( item ); // Add separator item = gtk_menu_item_new (); gtk_menu_shell_append ( GTK_MENU_SHELL(menu), item ); gtk_widget_show ( item ); } item = gtk_image_menu_item_new_with_mnemonic ( _("_View All Tracks") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_ZOOM_FIT, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_auto_tracks_view), pass_along ); gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); gtk_widget_show ( item ); item = gtk_image_menu_item_new_with_mnemonic ( _("_New Track") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_NEW, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_new_track), pass_along ); gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); gtk_widget_show ( item ); // Make it available only when a new track *not* already in progress gtk_widget_set_sensitive ( item, ! (gboolean)GPOINTER_TO_INT(l->current_track) ); item = gtk_image_menu_item_new_with_mnemonic ( _("Delete _All Tracks") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_REMOVE, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_delete_all_tracks), pass_along ); gtk_menu_shell_append ( GTK_MENU_SHELL(menu), item ); gtk_widget_show ( item ); item = gtk_image_menu_item_new_with_mnemonic ( _("_Delete Tracks From Selection...") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_INDEX, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_delete_tracks_from_selection), pass_along ); gtk_menu_shell_append ( GTK_MENU_SHELL(menu), item ); gtk_widget_show ( item ); } if ( subtype == VIK_TRW_LAYER_SUBLAYER_ROUTES ) { rv = TRUE; if ( l->current_track && l->current_track->is_route ) { item = gtk_menu_item_new_with_mnemonic ( _("_Finish Route") ); // Reuse finish track method g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_finish_track), pass_along ); gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); gtk_widget_show ( item ); // Add separator item = gtk_menu_item_new (); gtk_menu_shell_append ( GTK_MENU_SHELL(menu), item ); gtk_widget_show ( item ); } item = gtk_image_menu_item_new_with_mnemonic ( _("_View All Routes") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_ZOOM_FIT, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_auto_routes_view), pass_along ); gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); gtk_widget_show ( item ); item = gtk_image_menu_item_new_with_mnemonic ( _("_New Route") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_NEW, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_new_route), pass_along ); gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); gtk_widget_show ( item ); // Make it available only when a new track *not* already in progress gtk_widget_set_sensitive ( item, ! (gboolean)GPOINTER_TO_INT(l->current_track) ); item = gtk_image_menu_item_new_with_mnemonic ( _("Delete _All Routes") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_REMOVE, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_delete_all_routes), pass_along ); gtk_menu_shell_append ( GTK_MENU_SHELL(menu), item ); gtk_widget_show ( item ); item = gtk_image_menu_item_new_with_mnemonic ( _("_Delete Routes From Selection...") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_INDEX, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_delete_routes_from_selection), pass_along ); gtk_menu_shell_append ( GTK_MENU_SHELL(menu), item ); gtk_widget_show ( item ); } GtkWidget *upload_submenu = gtk_menu_new (); if ( subtype == VIK_TRW_LAYER_SUBLAYER_TRACK || subtype == VIK_TRW_LAYER_SUBLAYER_ROUTE ) { item = gtk_menu_item_new (); gtk_menu_shell_append ( GTK_MENU_SHELL(menu), item ); gtk_widget_show ( item ); if ( l->current_track && subtype == VIK_TRW_LAYER_SUBLAYER_TRACK && !l->current_track->is_route ) item = gtk_menu_item_new_with_mnemonic ( _("_Finish Track") ); if ( l->current_track && subtype == VIK_TRW_LAYER_SUBLAYER_ROUTE && l->current_track->is_route ) item = gtk_menu_item_new_with_mnemonic ( _("_Finish Route") ); if ( l->current_track ) { g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_finish_track), pass_along ); gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); gtk_widget_show ( item ); // Add separator item = gtk_menu_item_new (); gtk_menu_shell_append ( GTK_MENU_SHELL(menu), item ); gtk_widget_show ( item ); } if ( subtype == VIK_TRW_LAYER_SUBLAYER_TRACK ) item = gtk_image_menu_item_new_with_mnemonic ( _("_View Track") ); else item = gtk_image_menu_item_new_with_mnemonic ( _("_View Route") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_ZOOM_FIT, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_auto_track_view), pass_along ); gtk_menu_shell_append ( GTK_MENU_SHELL(menu), item ); gtk_widget_show ( item ); GtkWidget *goto_submenu; goto_submenu = gtk_menu_new (); item = gtk_image_menu_item_new_with_mnemonic ( _("_Goto") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_JUMP_TO, GTK_ICON_SIZE_MENU) ); gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); gtk_widget_show ( item ); gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), goto_submenu ); item = gtk_image_menu_item_new_with_mnemonic ( _("_Startpoint") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_GOTO_FIRST, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_goto_track_startpoint), pass_along ); gtk_menu_shell_append ( GTK_MENU_SHELL(goto_submenu), item ); gtk_widget_show ( item ); item = gtk_image_menu_item_new_with_mnemonic ( _("\"_Center\"") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_JUMP_TO, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_goto_track_center), pass_along ); gtk_menu_shell_append ( GTK_MENU_SHELL(goto_submenu), item ); gtk_widget_show ( item ); item = gtk_image_menu_item_new_with_mnemonic ( _("_Endpoint") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_GOTO_LAST, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_goto_track_endpoint), pass_along ); gtk_menu_shell_append ( GTK_MENU_SHELL(goto_submenu), item ); gtk_widget_show ( item ); item = gtk_image_menu_item_new_with_mnemonic ( _("_Highest Altitude") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_GOTO_TOP, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_goto_track_max_alt), pass_along ); gtk_menu_shell_append ( GTK_MENU_SHELL(goto_submenu), item ); gtk_widget_show ( item ); item = gtk_image_menu_item_new_with_mnemonic ( _("_Lowest Altitude") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_GOTO_BOTTOM, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_goto_track_min_alt), pass_along ); gtk_menu_shell_append ( GTK_MENU_SHELL(goto_submenu), item ); gtk_widget_show ( item ); // Routes don't have speeds if ( subtype == VIK_TRW_LAYER_SUBLAYER_TRACK ) { item = gtk_image_menu_item_new_with_mnemonic ( _("_Maximum Speed") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_MEDIA_FORWARD, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_goto_track_max_speed), pass_along ); gtk_menu_shell_append ( GTK_MENU_SHELL(goto_submenu), item ); gtk_widget_show ( item ); } GtkWidget *combine_submenu; combine_submenu = gtk_menu_new (); item = gtk_image_menu_item_new_with_mnemonic ( _("Co_mbine") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_CONNECT, GTK_ICON_SIZE_MENU) ); gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); gtk_widget_show ( item ); gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), combine_submenu ); // Routes don't have times or segments... if ( subtype == VIK_TRW_LAYER_SUBLAYER_TRACK ) { item = gtk_menu_item_new_with_mnemonic ( _("_Merge By Time...") ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_merge_by_timestamp), pass_along ); gtk_menu_shell_append ( GTK_MENU_SHELL(combine_submenu), item ); gtk_widget_show ( item ); item = gtk_menu_item_new_with_mnemonic ( _("Merge _Segments") ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_merge_by_segment), pass_along ); gtk_menu_shell_append ( GTK_MENU_SHELL(combine_submenu), item ); gtk_widget_show ( item ); } item = gtk_menu_item_new_with_mnemonic ( _("Merge _With Other Tracks...") ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_merge_with_other), pass_along ); gtk_menu_shell_append ( GTK_MENU_SHELL(combine_submenu), item ); gtk_widget_show ( item ); if ( subtype == VIK_TRW_LAYER_SUBLAYER_TRACK ) item = gtk_menu_item_new_with_mnemonic ( _("_Append Track...") ); else item = gtk_menu_item_new_with_mnemonic ( _("_Append Route...") ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_append_track), pass_along ); gtk_menu_shell_append ( GTK_MENU_SHELL(combine_submenu), item ); gtk_widget_show ( item ); if ( subtype == VIK_TRW_LAYER_SUBLAYER_TRACK ) item = gtk_menu_item_new_with_mnemonic ( _("Append _Route...") ); else item = gtk_menu_item_new_with_mnemonic ( _("Append _Track...") ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_append_other), pass_along ); gtk_menu_shell_append ( GTK_MENU_SHELL(combine_submenu), item ); gtk_widget_show ( item ); GtkWidget *split_submenu; split_submenu = gtk_menu_new (); item = gtk_image_menu_item_new_with_mnemonic ( _("_Split") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_DISCONNECT, GTK_ICON_SIZE_MENU) ); gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); gtk_widget_show ( item ); gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), split_submenu ); // Routes don't have times or segments... if ( subtype == VIK_TRW_LAYER_SUBLAYER_TRACK ) { item = gtk_menu_item_new_with_mnemonic ( _("_Split By Time...") ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_split_by_timestamp), pass_along ); gtk_menu_shell_append ( GTK_MENU_SHELL(split_submenu), item ); gtk_widget_show ( item ); // ATM always enable this entry - don't want to have to analyse the track before displaying the menu - to keep the menu speedy item = gtk_menu_item_new_with_mnemonic ( _("Split Se_gments") ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_split_segments), pass_along ); gtk_menu_shell_append ( GTK_MENU_SHELL(split_submenu), item ); gtk_widget_show ( item ); } item = gtk_menu_item_new_with_mnemonic ( _("Split By _Number of Points...") ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_split_by_n_points), pass_along ); gtk_menu_shell_append ( GTK_MENU_SHELL(split_submenu), item ); gtk_widget_show ( item ); item = gtk_menu_item_new_with_mnemonic ( _("Split at _Trackpoint") ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_split_at_trackpoint), pass_along ); gtk_menu_shell_append ( GTK_MENU_SHELL(split_submenu), item ); gtk_widget_show ( item ); // Make it available only when a trackpoint is selected. gtk_widget_set_sensitive ( item, (gboolean)GPOINTER_TO_INT(l->current_tpl) ); GtkWidget *delete_submenu; delete_submenu = gtk_menu_new (); item = gtk_image_menu_item_new_with_mnemonic ( _("Delete Poi_nts") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_DELETE, GTK_ICON_SIZE_MENU) ); gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); gtk_widget_show ( item ); gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), delete_submenu ); item = gtk_menu_item_new_with_mnemonic ( _("Delete Points With The Same _Position") ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_delete_points_same_position), pass_along ); gtk_menu_shell_append ( GTK_MENU_SHELL(delete_submenu), item ); gtk_widget_show ( item ); item = gtk_menu_item_new_with_mnemonic ( _("Delete Points With The Same _Time") ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_delete_points_same_time), pass_along ); gtk_menu_shell_append ( GTK_MENU_SHELL(delete_submenu), item ); gtk_widget_show ( item ); if ( subtype == VIK_TRW_LAYER_SUBLAYER_TRACK ) item = gtk_image_menu_item_new_with_mnemonic ( _("_Reverse Track") ); else item = gtk_image_menu_item_new_with_mnemonic ( _("_Reverse Route") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_GO_BACK, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_reverse), pass_along ); gtk_menu_shell_append ( GTK_MENU_SHELL(menu), item ); gtk_widget_show ( item ); /* ATM This function is only available via the layers panel, due to the method in finding out the maps in use */ if ( vlp ) { if ( subtype == VIK_TRW_LAYER_SUBLAYER_TRACK ) item = gtk_image_menu_item_new_with_mnemonic ( _("Down_load Maps Along Track...") ); else item = gtk_image_menu_item_new_with_mnemonic ( _("Down_load Maps Along Route...") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock ("vik-icon-Maps Download", GTK_ICON_SIZE_MENU) ); // Own icon - see stock_icons in vikwindow.c g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_download_map_along_track_cb), pass_along ); gtk_menu_shell_append ( GTK_MENU_SHELL(menu), item ); gtk_widget_show ( item ); } item = gtk_image_menu_item_new_with_mnemonic ( _("_Apply DEM Data") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock ("vik-icon-DEM Download", GTK_ICON_SIZE_MENU) ); // Own icon - see stock_icons in vikwindow.c g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_apply_dem_data), pass_along ); gtk_menu_shell_append ( GTK_MENU_SHELL(menu), item ); gtk_widget_show ( item ); if ( subtype == VIK_TRW_LAYER_SUBLAYER_TRACK ) item = gtk_image_menu_item_new_with_mnemonic ( _("_Export Track as GPX...") ); else item = gtk_image_menu_item_new_with_mnemonic ( _("_Export Route as GPX...") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_HARDDISK, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_export_gpx_track), pass_along ); gtk_menu_shell_append ( GTK_MENU_SHELL(menu), item ); gtk_widget_show ( item ); if ( subtype == VIK_TRW_LAYER_SUBLAYER_TRACK ) item = gtk_image_menu_item_new_with_mnemonic ( _("E_xtend Track End") ); else item = gtk_image_menu_item_new_with_mnemonic ( _("E_xtend Route End") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_ADD, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_extend_track_end), pass_along ); gtk_menu_shell_append ( GTK_MENU_SHELL(menu), item ); gtk_widget_show ( item ); if ( subtype == VIK_TRW_LAYER_SUBLAYER_TRACK ) item = gtk_image_menu_item_new_with_mnemonic ( _("C_onvert to a Route") ); else item = gtk_image_menu_item_new_with_mnemonic ( _("C_onvert to a Track") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_CONVERT, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_convert_track_route), pass_along ); gtk_menu_shell_append ( GTK_MENU_SHELL(menu), item ); gtk_widget_show ( item ); #ifdef VIK_CONFIG_GOOGLE if ( subtype == VIK_TRW_LAYER_SUBLAYER_ROUTE ) { item = gtk_image_menu_item_new_with_mnemonic ( _("Extend _Using Route Finder") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock ("vik-icon-Route Finder", GTK_ICON_SIZE_MENU) ); // Own icon - see stock_icons in vikwindow.c g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_extend_track_end_route_finder), pass_along ); gtk_menu_shell_append ( GTK_MENU_SHELL(menu), item ); gtk_widget_show ( item ); } #endif // ATM can't upload a single waypoint but can do waypoints to a GPS if ( subtype != VIK_TRW_LAYER_SUBLAYER_WAYPOINT ) { item = gtk_image_menu_item_new_with_mnemonic ( _("_Upload") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_GO_UP, GTK_ICON_SIZE_MENU) ); gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); gtk_widget_show ( item ); gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), upload_submenu ); item = gtk_image_menu_item_new_with_mnemonic ( _("_Upload to GPS...") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_GO_FORWARD, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_gps_upload_any), pass_along ); gtk_menu_shell_append ( GTK_MENU_SHELL(upload_submenu), item ); gtk_widget_show ( item ); } } #ifdef VIK_CONFIG_GOOGLE if ( subtype == VIK_TRW_LAYER_SUBLAYER_ROUTE && is_valid_google_route ( l, sublayer ) ) { item = gtk_image_menu_item_new_with_mnemonic ( _("_View Google Directions") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_NETWORK, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_google_route_webpage), pass_along ); gtk_menu_shell_append ( GTK_MENU_SHELL(menu), item ); gtk_widget_show ( item ); } #endif // Some things aren't usable with routes if ( subtype == VIK_TRW_LAYER_SUBLAYER_TRACK ) { #ifdef VIK_CONFIG_OPENSTREETMAP item = gtk_image_menu_item_new_with_mnemonic ( _("Upload to _OSM...") ); // Convert internal pointer into actual track for usage outside this file pass_along[7] = g_hash_table_lookup ( l->tracks, sublayer); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_GO_UP, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(osm_traces_upload_track_cb), pass_along ); gtk_menu_shell_append ( GTK_MENU_SHELL(upload_submenu), item ); gtk_widget_show ( item ); #endif item = gtk_image_menu_item_new_with_mnemonic ( _("Use with _Filter") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_INDEX, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_track_use_with_filter), pass_along ); gtk_menu_shell_append ( GTK_MENU_SHELL(menu), item ); gtk_widget_show ( item ); /* ATM This function is only available via the layers panel, due to needing a vlp */ if ( vlp ) { item = a_acquire_track_menu ( VIK_WINDOW(VIK_GTK_WINDOW_FROM_LAYER(l)), vlp, vik_layers_panel_get_viewport(VIK_LAYERS_PANEL(vlp)), g_hash_table_lookup ( l->tracks, (gchar *) sublayer ) ); if ( item ) { gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); gtk_widget_show ( item ); } } #ifdef VIK_CONFIG_GEOTAG item = gtk_menu_item_new_with_mnemonic ( _("Geotag _Images...") ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_geotagging_track), pass_along ); gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); gtk_widget_show ( item ); #endif } if ( subtype == VIK_TRW_LAYER_SUBLAYER_TRACK || subtype == VIK_TRW_LAYER_SUBLAYER_ROUTE ) { // Only show on viewport popmenu when a trackpoint is selected if ( ! vlp && l->current_tpl ) { // Add separator item = gtk_menu_item_new (); gtk_menu_shell_append ( GTK_MENU_SHELL(menu), item ); gtk_widget_show ( item ); item = gtk_image_menu_item_new_with_mnemonic ( _("_Edit Trackpoint") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_PROPERTIES, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(trw_layer_edit_trackpoint), pass_along ); gtk_menu_shell_append ( GTK_MENU_SHELL(menu), item ); gtk_widget_show ( item ); } } return rv; } static void trw_layer_insert_tp_after_current_tp ( VikTrwLayer *vtl ) { /* sanity checks */ if (!vtl->current_tpl) return; if (!vtl->current_tpl->next) return; VikTrackpoint *tp_current = VIK_TRACKPOINT(vtl->current_tpl->data); VikTrackpoint *tp_next = VIK_TRACKPOINT(vtl->current_tpl->next->data); /* Use current and next trackpoints to form a new track point which is inserted into the tracklist */ if ( tp_next ) { VikTrackpoint *tp_new = vik_trackpoint_new(); struct LatLon ll_current, ll_next; vik_coord_to_latlon ( &tp_current->coord, &ll_current ); vik_coord_to_latlon ( &tp_next->coord, &ll_next ); /* main positional interpolation */ struct LatLon ll_new = { (ll_current.lat+ll_next.lat)/2, (ll_current.lon+ll_next.lon)/2 }; vik_coord_load_from_latlon ( &(tp_new->coord), vtl->coord_mode, &ll_new ); /* Now other properties that can be interpolated */ tp_new->altitude = (tp_current->altitude + tp_next->altitude) / 2; if (tp_current->has_timestamp && tp_next->has_timestamp) { /* Note here the division is applied to each part, then added This is to avoid potential overflow issues with a 32 time_t for dates after midpoint of this Unix time on 2004/01/04 */ tp_new->timestamp = (tp_current->timestamp/2) + (tp_next->timestamp/2); tp_new->has_timestamp = TRUE; } if (tp_current->speed != NAN && tp_next->speed != NAN) tp_new->speed = (tp_current->speed + tp_next->speed)/2; /* TODO - improve interpolation of course, as it may not be correct. if courses in degrees are 350 + 020, the mid course more likely to be 005 (not 185) [similar applies if value is in radians] */ if (tp_current->course != NAN && tp_next->course != NAN) tp_new->course = (tp_current->course + tp_next->course)/2; /* DOP / sat values remain at defaults as not they do not seem applicable to a dreamt up point */ /* Insert new point into the trackpoints list after the current TP */ VikTrack *trk = g_hash_table_lookup ( vtl->tracks, vtl->current_tp_id ); if ( !trk ) // Otherwise try routes trk = g_hash_table_lookup ( vtl->routes, vtl->current_tp_id ); if ( !trk ) return; gint index = g_list_index ( trk->trackpoints, tp_current ); if ( index > -1 ) { trk->trackpoints = g_list_insert ( trk->trackpoints, tp_new, index+1 ); } } } static void trw_layer_cancel_current_tp ( VikTrwLayer *vtl, gboolean destroy ) { if ( vtl->tpwin ) { if ( destroy) { gtk_widget_destroy ( GTK_WIDGET(vtl->tpwin) ); vtl->tpwin = NULL; } else vik_trw_layer_tpwin_set_empty ( vtl->tpwin ); } if ( vtl->current_tpl ) { vtl->current_tpl = NULL; vtl->current_tp_track = NULL; vtl->current_tp_id = NULL; vik_layer_emit_update(VIK_LAYER(vtl)); } } static void trw_layer_tpwin_response ( VikTrwLayer *vtl, gint response ) { g_assert ( vtl->tpwin != NULL ); if ( response == VIK_TRW_LAYER_TPWIN_CLOSE ) trw_layer_cancel_current_tp ( vtl, TRUE ); if ( vtl->current_tpl == NULL ) return; if ( response == VIK_TRW_LAYER_TPWIN_SPLIT && vtl->current_tpl->next && vtl->current_tpl->prev ) { trw_layer_split_at_selected_trackpoint ( vtl, vtl->current_tp_track->is_route ? VIK_TRW_LAYER_SUBLAYER_ROUTE : VIK_TRW_LAYER_SUBLAYER_TRACK ); vik_trw_layer_tpwin_set_tp ( vtl->tpwin, vtl->current_tpl, vtl->current_tp_track->name ); } else if ( response == VIK_TRW_LAYER_TPWIN_DELETE ) { VikTrack *tr = g_hash_table_lookup ( vtl->tracks, vtl->current_tp_id ); if ( tr == NULL ) tr = g_hash_table_lookup ( vtl->routes, vtl->current_tp_id ); if ( tr == NULL ) return; GList *new_tpl; // Find available adjacent trackpoint if ( (new_tpl = vtl->current_tpl->next) || (new_tpl = vtl->current_tpl->prev) ) { if ( VIK_TRACKPOINT(vtl->current_tpl->data)->newsegment && vtl->current_tpl->next ) VIK_TRACKPOINT(vtl->current_tpl->next->data)->newsegment = TRUE; /* don't concat segments on del */ // Delete current trackpoint vik_trackpoint_free ( vtl->current_tpl->data ); tr->trackpoints = g_list_delete_link ( tr->trackpoints, vtl->current_tpl ); // Set to current to the available adjacent trackpoint vtl->current_tpl = new_tpl; // Reset dialog with the available adjacent trackpoint if ( vtl->current_tp_track ) vik_trw_layer_tpwin_set_tp ( vtl->tpwin, new_tpl, vtl->current_tp_track->name ); vik_layer_emit_update(VIK_LAYER(vtl)); } else { // Delete current trackpoint vik_trackpoint_free ( vtl->current_tpl->data ); tr->trackpoints = g_list_delete_link ( tr->trackpoints, vtl->current_tpl ); trw_layer_cancel_current_tp ( vtl, FALSE ); } } else if ( response == VIK_TRW_LAYER_TPWIN_FORWARD && vtl->current_tpl->next ) { if ( vtl->current_tp_track ) vik_trw_layer_tpwin_set_tp ( vtl->tpwin, vtl->current_tpl = vtl->current_tpl->next, vtl->current_tp_track->name ); vik_layer_emit_update(VIK_LAYER(vtl)); /* TODO longone: either move or only update if tp is inside drawing window */ } else if ( response == VIK_TRW_LAYER_TPWIN_BACK && vtl->current_tpl->prev ) { if ( vtl->current_tp_track ) vik_trw_layer_tpwin_set_tp ( vtl->tpwin, vtl->current_tpl = vtl->current_tpl->prev, vtl->current_tp_track->name ); vik_layer_emit_update(VIK_LAYER(vtl)); } else if ( response == VIK_TRW_LAYER_TPWIN_INSERT && vtl->current_tpl->next ) { trw_layer_insert_tp_after_current_tp ( vtl ); vik_layer_emit_update(VIK_LAYER(vtl)); } else if ( response == VIK_TRW_LAYER_TPWIN_DATA_CHANGED ) vik_layer_emit_update(VIK_LAYER(vtl)); } static void trw_layer_tpwin_init ( VikTrwLayer *vtl ) { if ( ! vtl->tpwin ) { vtl->tpwin = vik_trw_layer_tpwin_new ( VIK_GTK_WINDOW_FROM_LAYER(vtl) ); g_signal_connect_swapped ( GTK_DIALOG(vtl->tpwin), "response", G_CALLBACK(trw_layer_tpwin_response), vtl ); /* connect signals -- DELETE SIGNAL VERY IMPORTANT TO SET TO NULL */ g_signal_connect_swapped ( vtl->tpwin, "delete-event", G_CALLBACK(trw_layer_cancel_current_tp), vtl ); gtk_widget_show_all ( GTK_WIDGET(vtl->tpwin) ); } if ( vtl->current_tpl ) if ( vtl->current_tp_track ) vik_trw_layer_tpwin_set_tp ( vtl->tpwin, vtl->current_tpl, vtl->current_tp_track->name ); /* set layer name and TP data */ } /*************************************************************************** ** Tool code ***************************************************************************/ /*** Utility data structures and functions ****/ typedef struct { gint x, y; gint closest_x, closest_y; gboolean draw_images; gpointer *closest_wp_id; VikWaypoint *closest_wp; VikViewport *vvp; } WPSearchParams; typedef struct { gint x, y; gint closest_x, closest_y; gpointer closest_track_id; VikTrackpoint *closest_tp; VikViewport *vvp; GList *closest_tpl; } TPSearchParams; static void waypoint_search_closest_tp ( gpointer id, VikWaypoint *wp, WPSearchParams *params ) { gint x, y; if ( !wp->visible ) return; vik_viewport_coord_to_screen ( params->vvp, &(wp->coord), &x, &y ); // If waypoint has an image then use the image size to select if ( params->draw_images && wp->image ) { gint slackx, slacky; slackx = wp->image_width / 2; slacky = wp->image_height / 2; if ( x <= params->x + slackx && x >= params->x - slackx && y <= params->y + slacky && y >= params->y - slacky ) { params->closest_wp_id = id; params->closest_wp = wp; params->closest_x = x; params->closest_y = y; } } else if ( abs (x - params->x) <= WAYPOINT_SIZE_APPROX && abs (y - params->y) <= WAYPOINT_SIZE_APPROX && ((!params->closest_wp) || /* was the old waypoint we already found closer than this one? */ abs(x - params->x)+abs(y - params->y) < abs(x - params->closest_x)+abs(y - params->closest_y))) { params->closest_wp_id = id; params->closest_wp = wp; params->closest_x = x; params->closest_y = y; } } static void track_search_closest_tp ( gpointer id, VikTrack *t, TPSearchParams *params ) { GList *tpl = t->trackpoints; VikTrackpoint *tp; if ( !t->visible ) return; while (tpl) { gint x, y; tp = VIK_TRACKPOINT(tpl->data); vik_viewport_coord_to_screen ( params->vvp, &(tp->coord), &x, &y ); if ( abs (x - params->x) <= TRACKPOINT_SIZE_APPROX && abs (y - params->y) <= TRACKPOINT_SIZE_APPROX && ((!params->closest_tp) || /* was the old trackpoint we already found closer than this one? */ abs(x - params->x)+abs(y - params->y) < abs(x - params->closest_x)+abs(y - params->closest_y))) { params->closest_track_id = id; params->closest_tp = tp; params->closest_tpl = tpl; params->closest_x = x; params->closest_y = y; } tpl = tpl->next; } } // ATM: Leave this as 'Track' only. // Not overly bothered about having a snap to route trackpoint capability static VikTrackpoint *closest_tp_in_five_pixel_interval ( VikTrwLayer *vtl, VikViewport *vvp, gint x, gint y ) { TPSearchParams params; params.x = x; params.y = y; params.vvp = vvp; params.closest_track_id = NULL; params.closest_tp = NULL; g_hash_table_foreach ( vtl->tracks, (GHFunc) track_search_closest_tp, ¶ms); return params.closest_tp; } static VikWaypoint *closest_wp_in_five_pixel_interval ( VikTrwLayer *vtl, VikViewport *vvp, gint x, gint y ) { WPSearchParams params; params.x = x; params.y = y; params.vvp = vvp; params.draw_images = vtl->drawimages; params.closest_wp = NULL; params.closest_wp_id = NULL; g_hash_table_foreach ( vtl->waypoints, (GHFunc) waypoint_search_closest_tp, ¶ms); return params.closest_wp; } // Some forward declarations static void marker_begin_move ( tool_ed_t *t, gint x, gint y ); static void marker_moveto ( tool_ed_t *t, gint x, gint y ); static void marker_end_move ( tool_ed_t *t ); // static gboolean trw_layer_select_move ( VikTrwLayer *vtl, GdkEventButton *event, VikViewport *vvp, tool_ed_t* t ) { if ( t->holding ) { VikCoord new_coord; vik_viewport_screen_to_coord ( vvp, event->x, event->y, &new_coord ); // Here always allow snapping back to the original location // this is useful when one decides not to move the thing afterall // If one wants to move the item only a little bit then don't hold down the 'snap' key! // snap to TP if ( event->state & GDK_CONTROL_MASK ) { VikTrackpoint *tp = closest_tp_in_five_pixel_interval ( vtl, vvp, event->x, event->y ); if ( tp ) new_coord = tp->coord; } // snap to WP if ( event->state & GDK_SHIFT_MASK ) { VikWaypoint *wp = closest_wp_in_five_pixel_interval ( vtl, vvp, event->x, event->y ); if ( wp ) new_coord = wp->coord; } gint x, y; vik_viewport_coord_to_screen ( vvp, &new_coord, &x, &y ); marker_moveto ( t, x, y ); return TRUE; } return FALSE; } static gboolean trw_layer_select_release ( VikTrwLayer *vtl, GdkEventButton *event, VikViewport *vvp, tool_ed_t* t ) { if ( t->holding && event->button == 1 ) { VikCoord new_coord; vik_viewport_screen_to_coord ( vvp, event->x, event->y, &new_coord ); // snap to TP if ( event->state & GDK_CONTROL_MASK ) { VikTrackpoint *tp = closest_tp_in_five_pixel_interval ( vtl, vvp, event->x, event->y ); if ( tp ) new_coord = tp->coord; } // snap to WP if ( event->state & GDK_SHIFT_MASK ) { VikWaypoint *wp = closest_wp_in_five_pixel_interval ( vtl, vvp, event->x, event->y ); if ( wp ) new_coord = wp->coord; } marker_end_move ( t ); // Determine if working on a waypoint or a trackpoint if ( t->is_waypoint ) vtl->current_wp->coord = new_coord; else { if ( vtl->current_tpl ) { VIK_TRACKPOINT(vtl->current_tpl->data)->coord = new_coord; if ( vtl->tpwin ) if ( vtl->current_tp_track ) vik_trw_layer_tpwin_set_tp ( vtl->tpwin, vtl->current_tpl, vtl->current_tp_track->name ); } } // Reset vtl->current_wp = NULL; vtl->current_wp_id = NULL; trw_layer_cancel_current_tp ( vtl, FALSE ); vik_layer_emit_update ( VIK_LAYER(vtl) ); return TRUE; } return FALSE; } /* Returns true if a waypoint or track is found near the requested event position for this particular layer The item found is automatically selected This is a tool like feature but routed via the layer interface, since it's instigated by a 'global' layer tool in vikwindow.c */ static gboolean trw_layer_select_click ( VikTrwLayer *vtl, GdkEventButton *event, VikViewport *vvp, tool_ed_t* tet ) { if ( event->button != 1 ) return FALSE; if (!vtl || vtl->vl.type != VIK_LAYER_TRW) return FALSE; if ( !vtl->tracks_visible && !vtl->waypoints_visible && !vtl->routes_visible ) return FALSE; // Go for waypoints first as these often will be near a track, but it's likely the wp is wanted rather then the track if (vtl->waypoints_visible) { WPSearchParams wp_params; wp_params.vvp = vvp; wp_params.x = event->x; wp_params.y = event->y; wp_params.draw_images = vtl->drawimages; wp_params.closest_wp_id = NULL; wp_params.closest_wp = NULL; g_hash_table_foreach ( vtl->waypoints, (GHFunc) waypoint_search_closest_tp, &wp_params); if ( wp_params.closest_wp ) { // Select vik_treeview_select_iter ( VIK_LAYER(vtl)->vt, g_hash_table_lookup ( vtl->waypoints_iters, wp_params.closest_wp_id ), TRUE ); // Too easy to move it so must be holding shift to start immediately moving it // or otherwise be previously selected but not have an image (otherwise clicking within image bounds (again) moves it) if ( event->state & GDK_SHIFT_MASK || ( vtl->current_wp == wp_params.closest_wp && !vtl->current_wp->image ) ) { // Put into 'move buffer' // NB vvp & vw already set in tet tet->vtl = (gpointer)vtl; tet->is_waypoint = TRUE; marker_begin_move (tet, event->x, event->y); } vtl->current_wp = wp_params.closest_wp; vtl->current_wp_id = wp_params.closest_wp_id; vik_layer_emit_update ( VIK_LAYER(vtl) ); return TRUE; } } // Used for both track and route lists TPSearchParams tp_params; tp_params.vvp = vvp; tp_params.x = event->x; tp_params.y = event->y; tp_params.closest_track_id = NULL; tp_params.closest_tp = NULL; if (vtl->tracks_visible) { g_hash_table_foreach ( vtl->tracks, (GHFunc) track_search_closest_tp, &tp_params); if ( tp_params.closest_tp ) { // Always select + highlight the track vik_treeview_select_iter ( VIK_LAYER(vtl)->vt, g_hash_table_lookup ( vtl->tracks_iters, tp_params.closest_track_id ), TRUE ); tet->is_waypoint = FALSE; // Select the Trackpoint // Can move it immediately when control held or it's the previously selected tp if ( event->state & GDK_CONTROL_MASK || vtl->current_tpl == tp_params.closest_tpl ) { // Put into 'move buffer' // NB vvp & vw already set in tet tet->vtl = (gpointer)vtl; marker_begin_move (tet, event->x, event->y); } vtl->current_tpl = tp_params.closest_tpl; vtl->current_tp_id = tp_params.closest_track_id; vtl->current_tp_track = g_hash_table_lookup ( vtl->tracks, tp_params.closest_track_id ); set_statusbar_msg_info_trkpt ( vtl, tp_params.closest_tp ); if ( vtl->tpwin ) vik_trw_layer_tpwin_set_tp ( vtl->tpwin, vtl->current_tpl, vtl->current_tp_track->name ); vik_layer_emit_update ( VIK_LAYER(vtl) ); return TRUE; } } // Try again for routes if (vtl->routes_visible) { g_hash_table_foreach ( vtl->routes, (GHFunc) track_search_closest_tp, &tp_params); if ( tp_params.closest_tp ) { // Always select + highlight the track vik_treeview_select_iter ( VIK_LAYER(vtl)->vt, g_hash_table_lookup ( vtl->routes_iters, tp_params.closest_track_id ), TRUE ); tet->is_waypoint = FALSE; // Select the Trackpoint // Can move it immediately when control held or it's the previously selected tp if ( event->state & GDK_CONTROL_MASK || vtl->current_tpl == tp_params.closest_tpl ) { // Put into 'move buffer' // NB vvp & vw already set in tet tet->vtl = (gpointer)vtl; marker_begin_move (tet, event->x, event->y); } vtl->current_tpl = tp_params.closest_tpl; vtl->current_tp_id = tp_params.closest_track_id; vtl->current_tp_track = g_hash_table_lookup ( vtl->routes, tp_params.closest_track_id ); set_statusbar_msg_info_trkpt ( vtl, tp_params.closest_tp ); if ( vtl->tpwin ) vik_trw_layer_tpwin_set_tp ( vtl->tpwin, vtl->current_tpl, vtl->current_tp_track->name ); vik_layer_emit_update ( VIK_LAYER(vtl) ); return TRUE; } } /* these aren't the droids you're looking for */ vtl->current_wp = NULL; vtl->current_wp_id = NULL; trw_layer_cancel_current_tp ( vtl, FALSE ); // Blank info vik_statusbar_set_message ( vik_window_get_statusbar (VIK_WINDOW(VIK_GTK_WINDOW_FROM_LAYER(vtl))), VIK_STATUSBAR_INFO, "" ); return FALSE; } static gboolean trw_layer_show_selected_viewport_menu ( VikTrwLayer *vtl, GdkEventButton *event, VikViewport *vvp ) { if ( event->button != 3 ) return FALSE; if (!vtl || vtl->vl.type != VIK_LAYER_TRW) return FALSE; if ( !vtl->tracks_visible && !vtl->waypoints_visible && !vtl->routes_visible ) return FALSE; /* Post menu for the currently selected item */ /* See if a track is selected */ VikTrack *track = (VikTrack*)vik_window_get_selected_track ( (VikWindow *)VIK_GTK_WINDOW_FROM_LAYER(vtl) ); if ( track && track->visible ) { if ( track->name ) { if ( vtl->track_right_click_menu ) gtk_object_sink ( GTK_OBJECT(vtl->track_right_click_menu) ); vtl->track_right_click_menu = GTK_MENU ( gtk_menu_new () ); trku_udata udataU; udataU.trk = track; udataU.uuid = NULL; gpointer *trkf; if ( track->is_route ) trkf = g_hash_table_find ( vtl->routes, (GHRFunc) trw_layer_track_find_uuid, &udataU ); else trkf = g_hash_table_find ( vtl->tracks, (GHRFunc) trw_layer_track_find_uuid, &udataU ); if ( trkf && udataU.uuid ) { GtkTreeIter *iter; if ( track->is_route ) iter = g_hash_table_lookup ( vtl->routes_iters, udataU.uuid ); else iter = g_hash_table_lookup ( vtl->tracks_iters, udataU.uuid ); trw_layer_sublayer_add_menu_items ( vtl, vtl->track_right_click_menu, NULL, track->is_route ? VIK_TRW_LAYER_SUBLAYER_ROUTE : VIK_TRW_LAYER_SUBLAYER_TRACK, udataU.uuid, iter, vvp ); } gtk_menu_popup ( vtl->track_right_click_menu, NULL, NULL, NULL, NULL, event->button, gtk_get_current_event_time() ); return TRUE; } } /* See if a waypoint is selected */ VikWaypoint *waypoint = (VikWaypoint*)vik_window_get_selected_waypoint ( (VikWindow *)VIK_GTK_WINDOW_FROM_LAYER(vtl) ); if ( waypoint && waypoint->visible ) { if ( waypoint->name ) { if ( vtl->wp_right_click_menu ) gtk_object_sink ( GTK_OBJECT(vtl->wp_right_click_menu) ); vtl->wp_right_click_menu = GTK_MENU ( gtk_menu_new () ); wpu_udata udata; udata.wp = waypoint; udata.uuid = NULL; gpointer *wpf = g_hash_table_find ( vtl->waypoints, (GHRFunc) trw_layer_waypoint_find_uuid, (gpointer) &udata ); if ( wpf && udata.uuid ) { GtkTreeIter *iter = g_hash_table_lookup ( vtl->waypoints_iters, udata.uuid ); trw_layer_sublayer_add_menu_items ( vtl, vtl->wp_right_click_menu, NULL, VIK_TRW_LAYER_SUBLAYER_WAYPOINT, udata.uuid, iter, vvp ); } gtk_menu_popup ( vtl->wp_right_click_menu, NULL, NULL, NULL, NULL, event->button, gtk_get_current_event_time() ); return TRUE; } } return FALSE; } /* background drawing hook, to be passed the viewport */ static gboolean tool_sync_done = TRUE; static gboolean tool_sync(gpointer data) { VikViewport *vvp = data; gdk_threads_enter(); vik_viewport_sync(vvp); tool_sync_done = TRUE; gdk_threads_leave(); return FALSE; } static void marker_begin_move ( tool_ed_t *t, gint x, gint y ) { t->holding = TRUE; t->gc = vik_viewport_new_gc (t->vvp, "black", 2); gdk_gc_set_function ( t->gc, GDK_INVERT ); vik_viewport_draw_rectangle ( t->vvp, t->gc, FALSE, x-3, y-3, 6, 6 ); vik_viewport_sync(t->vvp); t->oldx = x; t->oldy = y; } static void marker_moveto ( tool_ed_t *t, gint x, gint y ) { VikViewport *vvp = t->vvp; vik_viewport_draw_rectangle ( vvp, t->gc, FALSE, t->oldx-3, t->oldy-3, 6, 6 ); vik_viewport_draw_rectangle ( vvp, t->gc, FALSE, x-3, y-3, 6, 6 ); t->oldx = x; t->oldy = y; if (tool_sync_done) { g_idle_add_full (G_PRIORITY_HIGH_IDLE + 10, tool_sync, vvp, NULL); tool_sync_done = FALSE; } } static void marker_end_move ( tool_ed_t *t ) { vik_viewport_draw_rectangle ( t->vvp, t->gc, FALSE, t->oldx-3, t->oldy-3, 6, 6 ); g_object_unref ( t->gc ); t->holding = FALSE; } /*** Edit waypoint ****/ static gpointer tool_edit_waypoint_create ( VikWindow *vw, VikViewport *vvp) { tool_ed_t *t = g_new(tool_ed_t, 1); t->vvp = vvp; t->holding = FALSE; return t; } static gboolean tool_edit_waypoint_click ( VikTrwLayer *vtl, GdkEventButton *event, gpointer data ) { WPSearchParams params; tool_ed_t *t = data; VikViewport *vvp = t->vvp; if (!vtl || vtl->vl.type != VIK_LAYER_TRW) return FALSE; if ( t->holding ) { return TRUE; } if ( !vtl->vl.visible || !vtl->waypoints_visible ) return FALSE; if ( vtl->current_wp && vtl->current_wp->visible ) { /* first check if current WP is within area (other may be 'closer', but we want to move the current) */ gint x, y; vik_viewport_coord_to_screen ( vvp, &(vtl->current_wp->coord), &x, &y ); if ( abs(x - event->x) <= WAYPOINT_SIZE_APPROX && abs(y - event->y) <= WAYPOINT_SIZE_APPROX ) { if ( event->button == 3 ) vtl->waypoint_rightclick = TRUE; /* remember that we're clicking; other layers will ignore release signal */ else { marker_begin_move(t, event->x, event->y); } return TRUE; } } params.vvp = vvp; params.x = event->x; params.y = event->y; params.draw_images = vtl->drawimages; params.closest_wp_id = NULL; /* TODO: should get track listitem so we can break it up, make a new track, mess it up, all that. */ params.closest_wp = NULL; g_hash_table_foreach ( vtl->waypoints, (GHFunc) waypoint_search_closest_tp, ¶ms); if ( vtl->current_wp == params.closest_wp && vtl->current_wp != NULL ) { // how do we get here? marker_begin_move(t, event->x, event->y); g_critical("shouldn't be here"); return FALSE; } else if ( params.closest_wp ) { if ( event->button == 3 ) vtl->waypoint_rightclick = TRUE; /* remember that we're clicking; other layers will ignore release signal */ else vtl->waypoint_rightclick = FALSE; vik_treeview_select_iter ( VIK_LAYER(vtl)->vt, g_hash_table_lookup ( vtl->waypoints_iters, params.closest_wp_id ), TRUE ); vtl->current_wp = params.closest_wp; vtl->current_wp_id = params.closest_wp_id; /* could make it so don't update if old WP is off screen and new is null but oh well */ vik_layer_emit_update ( VIK_LAYER(vtl) ); return TRUE; } vtl->current_wp = NULL; vtl->current_wp_id = NULL; vtl->waypoint_rightclick = FALSE; vik_layer_emit_update ( VIK_LAYER(vtl) ); return FALSE; } static gboolean tool_edit_waypoint_move ( VikTrwLayer *vtl, GdkEventMotion *event, gpointer data ) { tool_ed_t *t = data; VikViewport *vvp = t->vvp; if (!vtl || vtl->vl.type != VIK_LAYER_TRW) return FALSE; if ( t->holding ) { VikCoord new_coord; vik_viewport_screen_to_coord ( vvp, event->x, event->y, &new_coord ); /* snap to TP */ if ( event->state & GDK_CONTROL_MASK ) { VikTrackpoint *tp = closest_tp_in_five_pixel_interval ( vtl, vvp, event->x, event->y ); if ( tp ) new_coord = tp->coord; } /* snap to WP */ if ( event->state & GDK_SHIFT_MASK ) { VikWaypoint *wp = closest_wp_in_five_pixel_interval ( vtl, vvp, event->x, event->y ); if ( wp && wp != vtl->current_wp ) new_coord = wp->coord; } { gint x, y; vik_viewport_coord_to_screen ( vvp, &new_coord, &x, &y ); marker_moveto ( t, x, y ); } return TRUE; } return FALSE; } static gboolean tool_edit_waypoint_release ( VikTrwLayer *vtl, GdkEventButton *event, gpointer data ) { tool_ed_t *t = data; VikViewport *vvp = t->vvp; if (!vtl || vtl->vl.type != VIK_LAYER_TRW) return FALSE; if ( t->holding && event->button == 1 ) { VikCoord new_coord; vik_viewport_screen_to_coord ( vvp, event->x, event->y, &new_coord ); /* snap to TP */ if ( event->state & GDK_CONTROL_MASK ) { VikTrackpoint *tp = closest_tp_in_five_pixel_interval ( vtl, vvp, event->x, event->y ); if ( tp ) new_coord = tp->coord; } /* snap to WP */ if ( event->state & GDK_SHIFT_MASK ) { VikWaypoint *wp = closest_wp_in_five_pixel_interval ( vtl, vvp, event->x, event->y ); if ( wp && wp != vtl->current_wp ) new_coord = wp->coord; } marker_end_move ( t ); vtl->current_wp->coord = new_coord; vik_layer_emit_update ( VIK_LAYER(vtl) ); return TRUE; } /* PUT IN RIGHT PLACE!!! */ if ( event->button == 3 && vtl->waypoint_rightclick ) { if ( vtl->wp_right_click_menu ) g_object_ref_sink ( G_OBJECT(vtl->wp_right_click_menu) ); if ( vtl->current_wp ) { vtl->wp_right_click_menu = GTK_MENU ( gtk_menu_new () ); trw_layer_sublayer_add_menu_items ( vtl, vtl->wp_right_click_menu, NULL, VIK_TRW_LAYER_SUBLAYER_WAYPOINT, vtl->current_wp_id, g_hash_table_lookup ( vtl->waypoints_iters, vtl->current_wp_id ), vvp ); gtk_menu_popup ( vtl->wp_right_click_menu, NULL, NULL, NULL, NULL, event->button, gtk_get_current_event_time() ); } vtl->waypoint_rightclick = FALSE; } return FALSE; } /*** New track ****/ static gpointer tool_new_track_create ( VikWindow *vw, VikViewport *vvp) { return vvp; } typedef struct { VikTrwLayer *vtl; GdkDrawable *drawable; GdkGC *gc; GdkPixmap *pixmap; } draw_sync_t; /* * Draw specified pixmap */ static gboolean draw_sync ( gpointer data ) { draw_sync_t *ds = (draw_sync_t*) data; // Sometimes don't want to draw // normally because another update has taken precedent such as panning the display // which means this pixmap is no longer valid if ( ds->vtl->draw_sync_do ) { gdk_threads_enter(); gdk_draw_drawable (ds->drawable, ds->gc, ds->pixmap, 0, 0, 0, 0, -1, -1); ds->vtl->draw_sync_done = TRUE; gdk_threads_leave(); } g_free ( ds ); return FALSE; } static gchar* distance_string (gdouble distance) { gchar str[128]; /* draw label with distance */ vik_units_distance_t dist_units = a_vik_get_units_distance (); switch (dist_units) { case VIK_UNITS_DISTANCE_MILES: if (distance >= VIK_MILES_TO_METERS(1) && distance < VIK_MILES_TO_METERS(100)) { g_sprintf(str, "%3.2f miles", VIK_METERS_TO_MILES(distance)); } else if (distance < 1609.4) { g_sprintf(str, "%d yards", (int)(distance*1.0936133)); } else { g_sprintf(str, "%d miles", (int)VIK_METERS_TO_MILES(distance)); } break; default: // VIK_UNITS_DISTANCE_KILOMETRES if (distance >= 1000 && distance < 100000) { g_sprintf(str, "%3.2f km", distance/1000.0); } else if (distance < 1000) { g_sprintf(str, "%d m", (int)distance); } else { g_sprintf(str, "%d km", (int)distance/1000); } break; } return g_strdup (str); } /* * Actually set the message in statusbar */ static void statusbar_write (gdouble distance, gdouble elev_gain, gdouble elev_loss, gdouble last_step, gdouble angle, VikTrwLayer *vtl ) { // Only show elevation data when track has some elevation properties gchar str_gain_loss[64]; str_gain_loss[0] = '\0'; gchar str_last_step[64]; str_last_step[0] = '\0'; gchar *str_total = distance_string (distance); if ( (elev_gain > 0.1) || (elev_loss > 0.1) ) { if ( a_vik_get_units_height () == VIK_UNITS_HEIGHT_METRES ) g_sprintf(str_gain_loss, _(" - Gain %dm:Loss %dm"), (int)elev_gain, (int)elev_loss); else g_sprintf(str_gain_loss, _(" - Gain %dft:Loss %dft"), (int)VIK_METERS_TO_FEET(elev_gain), (int)VIK_METERS_TO_FEET(elev_loss)); } if ( last_step > 0 ) { gchar *tmp = distance_string (last_step); g_sprintf(str_last_step, _(" - Bearing %3.1f° - Step %s"), RAD2DEG(angle), tmp); g_free ( tmp ); } VikWindow *vw = VIK_WINDOW(VIK_GTK_WINDOW_FROM_LAYER(vtl)); // Write with full gain/loss information gchar *msg = g_strdup_printf ( "Total %s%s%s", str_total, str_last_step, str_gain_loss); vik_statusbar_set_message ( vik_window_get_statusbar (vw), VIK_STATUSBAR_INFO, msg ); g_free ( msg ); g_free ( str_total ); } /* * Figure out what information should be set in the statusbar and then write it */ static void update_statusbar ( VikTrwLayer *vtl ) { // Get elevation data gdouble elev_gain, elev_loss; vik_track_get_total_elevation_gain ( vtl->current_track, &elev_gain, &elev_loss); /* Find out actual distance of current track */ gdouble distance = vik_track_get_length (vtl->current_track); statusbar_write (distance, elev_gain, elev_loss, 0, 0, vtl); } static VikLayerToolFuncStatus tool_new_track_move ( VikTrwLayer *vtl, GdkEventMotion *event, VikViewport *vvp ) { /* if we haven't sync'ed yet, we don't have time to do more. */ if ( vtl->draw_sync_done && vtl->current_track && vtl->current_track->trackpoints ) { GList *iter = g_list_last ( vtl->current_track->trackpoints ); VikTrackpoint *last_tpt = VIK_TRACKPOINT(iter->data); static GdkPixmap *pixmap = NULL; int w1, h1, w2, h2; // Need to check in case window has been resized w1 = vik_viewport_get_width(vvp); h1 = vik_viewport_get_height(vvp); if (!pixmap) { pixmap = gdk_pixmap_new ( GTK_WIDGET(vvp)->window, w1, h1, -1 ); } gdk_drawable_get_size (pixmap, &w2, &h2); if (w1 != w2 || h1 != h2) { g_object_unref ( G_OBJECT ( pixmap ) ); pixmap = gdk_pixmap_new ( GTK_WIDGET(vvp)->window, w1, h1, -1 ); } // Reset to background gdk_draw_drawable (pixmap, vtl->current_track_newpoint_gc, vik_viewport_get_pixmap(vvp), 0, 0, 0, 0, -1, -1); draw_sync_t *passalong; gint x1, y1; vik_viewport_coord_to_screen ( vvp, &(last_tpt->coord), &x1, &y1 ); // FOR SCREEN OVERLAYS WE MUST DRAW INTO THIS PIXMAP (when using the reset method) // otherwise using vik_viewport_draw_* functions puts the data into the base pixmap, // thus when we come to reset to the background it would include what we have already drawn!! gdk_draw_line ( pixmap, vtl->current_track_newpoint_gc, x1, y1, event->x, event->y ); // Using this reset method is more reliable than trying to undraw previous efforts via the GDK_INVERT method /* Find out actual distance of current track */ gdouble distance = vik_track_get_length (vtl->current_track); // Now add distance to where the pointer is // VikCoord coord; struct LatLon ll; vik_viewport_screen_to_coord ( vvp, (gint) event->x, (gint) event->y, &coord ); vik_coord_to_latlon ( &coord, &ll ); gdouble last_step = vik_coord_diff( &coord, &(last_tpt->coord)); distance = distance + last_step; // Get elevation data gdouble elev_gain, elev_loss; vik_track_get_total_elevation_gain ( vtl->current_track, &elev_gain, &elev_loss); // Adjust elevation data (if available) for the current pointer position gdouble elev_new; elev_new = (gdouble) a_dems_get_elev_by_coord ( &coord, VIK_DEM_INTERPOL_BEST ); if ( elev_new != VIK_DEM_INVALID_ELEVATION ) { if ( last_tpt->altitude != VIK_DEFAULT_ALTITUDE ) { // Adjust elevation of last track point if ( elev_new > last_tpt->altitude ) // Going up elev_gain += elev_new - last_tpt->altitude; else // Going down elev_loss += last_tpt->altitude - elev_new; } } gchar *str = distance_string (distance); PangoLayout *pl = gtk_widget_create_pango_layout (GTK_WIDGET(vvp), NULL); pango_layout_set_font_description (pl, GTK_WIDGET(vvp)->style->font_desc); pango_layout_set_text (pl, str, -1); gint wd, hd; pango_layout_get_pixel_size ( pl, &wd, &hd ); gint xd,yd; // offset from cursor a bit depending on font size xd = event->x + 10; yd = event->y - hd; // Create a background block to make the text easier to read over the background map GdkGC *background_block_gc = vik_viewport_new_gc ( vvp, "#cccccc", 1); gdk_draw_rectangle (pixmap, background_block_gc, TRUE, xd-2, yd-2, wd+4, hd+2); gdk_draw_layout (pixmap, vtl->current_track_newpoint_gc, xd, yd, pl); g_object_unref ( G_OBJECT ( pl ) ); g_object_unref ( G_OBJECT ( background_block_gc ) ); passalong = g_new(draw_sync_t,1); // freed by draw_sync() passalong->vtl = vtl; passalong->pixmap = pixmap; passalong->drawable = GTK_WIDGET(vvp)->window; passalong->gc = vtl->current_track_newpoint_gc; gdouble angle; gdouble baseangle; vik_viewport_compute_bearing ( vvp, x1, y1, event->x, event->y, &angle, &baseangle ); // Update statusbar with full gain/loss information statusbar_write (distance, elev_gain, elev_loss, last_step, angle, vtl); g_free (str); // draw pixmap when we have time to g_idle_add_full (G_PRIORITY_HIGH_IDLE + 10, draw_sync, passalong, NULL); vtl->draw_sync_done = FALSE; return VIK_LAYER_TOOL_ACK_GRAB_FOCUS; } return VIK_LAYER_TOOL_ACK; } static gboolean tool_new_track_key_press ( VikTrwLayer *vtl, GdkEventKey *event, VikViewport *vvp ) { if ( vtl->current_track && event->keyval == GDK_Escape ) { vtl->current_track = NULL; vik_layer_emit_update ( VIK_LAYER(vtl) ); return TRUE; } else if ( vtl->current_track && event->keyval == GDK_BackSpace ) { /* undo */ if ( vtl->current_track->trackpoints ) { GList *last = g_list_last(vtl->current_track->trackpoints); g_free ( last->data ); vtl->current_track->trackpoints = g_list_remove_link ( vtl->current_track->trackpoints, last ); } update_statusbar ( vtl ); vik_layer_emit_update ( VIK_LAYER(vtl) ); return TRUE; } return FALSE; } /* * Common function to handle trackpoint button requests on either a route or a track * . enables adding a point via normal click * . enables removal of last point via right click * . finishing of the track or route via double clicking */ static gboolean tool_new_track_or_route_click ( VikTrwLayer *vtl, GdkEventButton *event, VikViewport *vvp ) { VikTrackpoint *tp; if (!vtl || vtl->vl.type != VIK_LAYER_TRW) return FALSE; if ( event->button == 2 ) { // As the display is panning, the new track pixmap is now invalid so don't draw it // otherwise this drawing done results in flickering back to an old image vtl->draw_sync_do = FALSE; return FALSE; } if ( event->button == 3 ) { if ( !vtl->current_track ) return FALSE; /* undo */ if ( vtl->current_track->trackpoints ) { GList *last = g_list_last(vtl->current_track->trackpoints); g_free ( last->data ); vtl->current_track->trackpoints = g_list_remove_link ( vtl->current_track->trackpoints, last ); } update_statusbar ( vtl ); vik_layer_emit_update ( VIK_LAYER(vtl) ); return TRUE; } if ( event->type == GDK_2BUTTON_PRESS ) { /* subtract last (duplicate from double click) tp then end */ if ( vtl->current_track && vtl->current_track->trackpoints && vtl->ct_x1 == vtl->ct_x2 && vtl->ct_y1 == vtl->ct_y2 ) { GList *last = g_list_last(vtl->current_track->trackpoints); g_free ( last->data ); vtl->current_track->trackpoints = g_list_remove_link ( vtl->current_track->trackpoints, last ); /* undo last, then end */ vtl->current_track = NULL; } vik_layer_emit_update ( VIK_LAYER(vtl) ); return TRUE; } tp = vik_trackpoint_new(); vik_viewport_screen_to_coord ( vvp, event->x, event->y, &(tp->coord) ); /* snap to other TP */ if ( event->state & GDK_CONTROL_MASK ) { VikTrackpoint *other_tp = closest_tp_in_five_pixel_interval ( vtl, vvp, event->x, event->y ); if ( other_tp ) tp->coord = other_tp->coord; } tp->newsegment = FALSE; tp->has_timestamp = FALSE; tp->timestamp = 0; if ( vtl->current_track ) { vtl->current_track->trackpoints = g_list_append ( vtl->current_track->trackpoints, tp ); /* Auto attempt to get elevation from DEM data (if it's available) */ vik_track_apply_dem_data_last_trackpoint ( vtl->current_track ); } vtl->ct_x1 = vtl->ct_x2; vtl->ct_y1 = vtl->ct_y2; vtl->ct_x2 = event->x; vtl->ct_y2 = event->y; vik_layer_emit_update ( VIK_LAYER(vtl) ); return TRUE; } static gboolean tool_new_track_click ( VikTrwLayer *vtl, GdkEventButton *event, VikViewport *vvp ) { // ----------------------------------------------------- if current is a route - switch to new track if ( event->button == 1 && ( ! vtl->current_track || (vtl->current_track && vtl->current_track->is_route ) )) { gchar *name = trw_layer_new_unique_sublayer_name(vtl, VIK_TRW_LAYER_SUBLAYER_TRACK, _("Track")); if ( ( name = a_dialog_new_track ( VIK_GTK_WINDOW_FROM_LAYER(vtl), vtl->tracks, name, FALSE ) ) ) { new_track_create_common ( vtl, name ); } else return TRUE; } return tool_new_track_or_route_click ( vtl, event, vvp ); } static void tool_new_track_release ( VikTrwLayer *vtl, GdkEventButton *event, VikViewport *vvp ) { if ( event->button == 2 ) { // Pan moving ended - enable potential point drawing again vtl->draw_sync_do = TRUE; vtl->draw_sync_done = TRUE; } } /*** New route ****/ static gpointer tool_new_route_create ( VikWindow *vw, VikViewport *vvp) { return vvp; } static gboolean tool_new_route_click ( VikTrwLayer *vtl, GdkEventButton *event, VikViewport *vvp ) { // -------------------------- if current is a track - switch to new route if ( event->button == 1 && ( ! vtl->current_track || (vtl->current_track && !vtl->current_track->is_route ) ) ) { gchar *name = trw_layer_new_unique_sublayer_name(vtl, VIK_TRW_LAYER_SUBLAYER_ROUTE, _("Route")); if ( ( name = a_dialog_new_track ( VIK_GTK_WINDOW_FROM_LAYER(vtl), vtl->routes, name, TRUE ) ) ) new_route_create_common ( vtl, name ); else return TRUE; } return tool_new_track_or_route_click ( vtl, event, vvp ); } /*** New waypoint ****/ static gpointer tool_new_waypoint_create ( VikWindow *vw, VikViewport *vvp) { return vvp; } static gboolean tool_new_waypoint_click ( VikTrwLayer *vtl, GdkEventButton *event, VikViewport *vvp ) { VikCoord coord; if (!vtl || vtl->vl.type != VIK_LAYER_TRW) return FALSE; vik_viewport_screen_to_coord ( vvp, event->x, event->y, &coord ); if (vik_trw_layer_new_waypoint ( vtl, VIK_GTK_WINDOW_FROM_LAYER(vtl), &coord ) && VIK_LAYER(vtl)->visible) vik_layer_emit_update ( VIK_LAYER(vtl) ); return TRUE; } /*** Edit trackpoint ****/ static gpointer tool_edit_trackpoint_create ( VikWindow *vw, VikViewport *vvp) { tool_ed_t *t = g_new(tool_ed_t, 1); t->vvp = vvp; t->holding = FALSE; return t; } static gboolean tool_edit_trackpoint_click ( VikTrwLayer *vtl, GdkEventButton *event, gpointer data ) { tool_ed_t *t = data; VikViewport *vvp = t->vvp; TPSearchParams params; /* OUTDATED DOCUMENTATION: find 5 pixel range on each side. then put these UTM, and a pointer to the winning track name (and maybe the winning track itself), and a pointer to the winning trackpoint, inside an array or struct. pass this along, do a foreach on the tracks which will do a foreach on the trackpoints. */ params.vvp = vvp; params.x = event->x; params.y = event->y; params.closest_track_id = NULL; /* TODO: should get track listitem so we can break it up, make a new track, mess it up, all that. */ params.closest_tp = NULL; if ( event->button != 1 ) return FALSE; if (!vtl || vtl->vl.type != VIK_LAYER_TRW) return FALSE; if ( !vtl->vl.visible || !vtl->tracks_visible || !vtl->routes_visible ) return FALSE; if ( vtl->current_tpl ) { /* first check if it is within range of prev. tp. and if current_tp track is shown. (if it is, we are moving that trackpoint.) */ VikTrackpoint *tp = VIK_TRACKPOINT(vtl->current_tpl->data); VikTrack *current_tr = VIK_TRACK(g_hash_table_lookup(vtl->tracks, vtl->current_tp_id)); if ( !current_tr ) return FALSE; gint x, y; vik_viewport_coord_to_screen ( vvp, &(tp->coord), &x, &y ); if ( current_tr->visible && abs(x - event->x) < TRACKPOINT_SIZE_APPROX && abs(y - event->y) < TRACKPOINT_SIZE_APPROX ) { marker_begin_move ( t, event->x, event->y ); return TRUE; } } if ( vtl->tracks_visible ) g_hash_table_foreach ( vtl->tracks, (GHFunc) track_search_closest_tp, ¶ms); if ( params.closest_tp ) { vik_treeview_select_iter ( VIK_LAYER(vtl)->vt, g_hash_table_lookup ( vtl->tracks_iters, params.closest_track_id ), TRUE ); vtl->current_tpl = params.closest_tpl; vtl->current_tp_id = params.closest_track_id; vtl->current_tp_track = g_hash_table_lookup ( vtl->tracks, params.closest_track_id ); trw_layer_tpwin_init ( vtl ); set_statusbar_msg_info_trkpt ( vtl, params.closest_tp ); vik_layer_emit_update ( VIK_LAYER(vtl) ); return TRUE; } if ( vtl->routes_visible ) g_hash_table_foreach ( vtl->routes, (GHFunc) track_search_closest_tp, ¶ms); if ( params.closest_tp ) { vik_treeview_select_iter ( VIK_LAYER(vtl)->vt, g_hash_table_lookup ( vtl->routes_iters, params.closest_track_id ), TRUE ); vtl->current_tpl = params.closest_tpl; vtl->current_tp_id = params.closest_track_id; vtl->current_tp_track = g_hash_table_lookup ( vtl->routes, params.closest_track_id ); trw_layer_tpwin_init ( vtl ); set_statusbar_msg_info_trkpt ( vtl, params.closest_tp ); vik_layer_emit_update ( VIK_LAYER(vtl) ); return TRUE; } /* these aren't the droids you're looking for */ return FALSE; } static gboolean tool_edit_trackpoint_move ( VikTrwLayer *vtl, GdkEventMotion *event, gpointer data ) { tool_ed_t *t = data; VikViewport *vvp = t->vvp; if (!vtl || vtl->vl.type != VIK_LAYER_TRW) return FALSE; if ( t->holding ) { VikCoord new_coord; vik_viewport_screen_to_coord ( vvp, event->x, event->y, &new_coord ); /* snap to TP */ if ( event->state & GDK_CONTROL_MASK ) { VikTrackpoint *tp = closest_tp_in_five_pixel_interval ( vtl, vvp, event->x, event->y ); if ( tp && tp != vtl->current_tpl->data ) new_coord = tp->coord; } // VIK_TRACKPOINT(vtl->current_tpl->data)->coord = new_coord; { gint x, y; vik_viewport_coord_to_screen ( vvp, &new_coord, &x, &y ); marker_moveto ( t, x, y ); } return TRUE; } return FALSE; } static gboolean tool_edit_trackpoint_release ( VikTrwLayer *vtl, GdkEventButton *event, gpointer data ) { tool_ed_t *t = data; VikViewport *vvp = t->vvp; if (!vtl || vtl->vl.type != VIK_LAYER_TRW) return FALSE; if ( event->button != 1) return FALSE; if ( t->holding ) { VikCoord new_coord; vik_viewport_screen_to_coord ( vvp, event->x, event->y, &new_coord ); /* snap to TP */ if ( event->state & GDK_CONTROL_MASK ) { VikTrackpoint *tp = closest_tp_in_five_pixel_interval ( vtl, vvp, event->x, event->y ); if ( tp && tp != vtl->current_tpl->data ) new_coord = tp->coord; } VIK_TRACKPOINT(vtl->current_tpl->data)->coord = new_coord; marker_end_move ( t ); /* diff dist is diff from orig */ if ( vtl->tpwin ) vik_trw_layer_tpwin_set_tp ( vtl->tpwin, vtl->current_tpl, vtl->current_tp_track->name ); vik_layer_emit_update ( VIK_LAYER(vtl) ); return TRUE; } return FALSE; } #ifdef VIK_CONFIG_GOOGLE /*** Route Finder ***/ static gpointer tool_route_finder_create ( VikWindow *vw, VikViewport *vvp) { return vvp; } static gboolean tool_route_finder_click ( VikTrwLayer *vtl, GdkEventButton *event, VikViewport *vvp ) { VikCoord tmp; if ( !vtl ) return FALSE; vik_viewport_screen_to_coord ( vvp, event->x, event->y, &tmp ); if ( event->button == 3 && vtl->route_finder_current_track ) { VikCoord *new_end; new_end = vik_track_cut_back_to_double_point ( vtl->route_finder_current_track ); if ( new_end ) { vtl->route_finder_coord = *new_end; g_free ( new_end ); vik_layer_emit_update ( VIK_LAYER(vtl) ); /* remove last ' to:...' */ if ( vtl->route_finder_current_track->comment ) { gchar *last_to = strrchr ( vtl->route_finder_current_track->comment, 't' ); if ( last_to && (last_to - vtl->route_finder_current_track->comment > 1) ) { gchar *new_comment = g_strndup ( vtl->route_finder_current_track->comment, last_to - vtl->route_finder_current_track->comment - 1); vik_track_set_comment_no_copy ( vtl->route_finder_current_track, new_comment ); } } } } else if ( vtl->route_finder_started || (event->state & GDK_CONTROL_MASK && vtl->route_finder_current_track) ) { struct LatLon start, end; gchar startlat[G_ASCII_DTOSTR_BUF_SIZE], startlon[G_ASCII_DTOSTR_BUF_SIZE]; gchar endlat[G_ASCII_DTOSTR_BUF_SIZE], endlon[G_ASCII_DTOSTR_BUF_SIZE]; gchar *url; vik_coord_to_latlon ( &(vtl->route_finder_coord), &start ); vik_coord_to_latlon ( &(tmp), &end ); vtl->route_finder_coord = tmp; /* for continuations */ /* these are checked when adding a track from a file (vik_trw_layer_filein_add_track) */ if ( event->state & GDK_CONTROL_MASK && vtl->route_finder_current_track ) { vtl->route_finder_append = TRUE; // merge tracks. keep started true. } else { vtl->route_finder_check_added_track = TRUE; vtl->route_finder_started = FALSE; } url = g_strdup_printf(GOOGLE_DIRECTIONS_STRING, g_ascii_dtostr (startlat, G_ASCII_DTOSTR_BUF_SIZE, (gdouble) start.lat), g_ascii_dtostr (startlon, G_ASCII_DTOSTR_BUF_SIZE, (gdouble) start.lon), g_ascii_dtostr (endlat, G_ASCII_DTOSTR_BUF_SIZE, (gdouble) end.lat), g_ascii_dtostr (endlon, G_ASCII_DTOSTR_BUF_SIZE, (gdouble) end.lon)); // NB normally this returns a GPX Route - so subsequent usage of it must lookup via the routes hash a_babel_convert_from_url ( vtl, url, "google", NULL, NULL, NULL ); g_free ( url ); /* see if anything was done -- a track was added or appended to */ if ( vtl->route_finder_check_added_track && vtl->route_finder_added_track ) { vik_track_set_comment_no_copy ( vtl->route_finder_added_track, g_strdup_printf("from: %f,%f to: %f,%f", start.lat, start.lon, end.lat, end.lon ) ); } else if ( vtl->route_finder_append == FALSE && vtl->route_finder_current_track ) { /* route_finder_append was originally TRUE but set to FALSE by filein_add_track */ gchar *new_comment = g_strdup_printf("%s to: %f,%f", vtl->route_finder_current_track->comment, end.lat, end.lon ); vik_track_set_comment_no_copy ( vtl->route_finder_current_track, new_comment ); } vtl->route_finder_added_track = NULL; vtl->route_finder_check_added_track = FALSE; vtl->route_finder_append = FALSE; vik_layer_emit_update ( VIK_LAYER(vtl) ); } else { vtl->route_finder_started = TRUE; vtl->route_finder_coord = tmp; vtl->route_finder_current_track = NULL; } return TRUE; } #endif /*** Show picture ****/ static gpointer tool_show_picture_create ( VikWindow *vw, VikViewport *vvp) { return vvp; } /* Params are: vvp, event, last match found or NULL */ static void tool_show_picture_wp ( const gpointer id, VikWaypoint *wp, gpointer params[3] ) { if ( wp->image && wp->visible ) { gint x, y, slackx, slacky; GdkEventButton *event = (GdkEventButton *) params[1]; vik_viewport_coord_to_screen ( VIK_VIEWPORT(params[0]), &(wp->coord), &x, &y ); slackx = wp->image_width / 2; slacky = wp->image_height / 2; if ( x <= event->x + slackx && x >= event->x - slackx && y <= event->y + slacky && y >= event->y - slacky ) { params[2] = wp->image; /* we've found a match. however continue searching * since we want to find the last match -- that * is, the match that was drawn last. */ } } } static void trw_layer_show_picture ( gpointer pass_along[6] ) { /* thanks to the Gaim people for showing me ShellExecute and g_spawn_command_line_async */ #ifdef WINDOWS ShellExecute(NULL, "open", (char *) pass_along[5], NULL, NULL, SW_SHOWNORMAL); #else /* WINDOWS */ GError *err = NULL; gchar *quoted_file = g_shell_quote ( (gchar *) pass_along[5] ); gchar *cmd = g_strdup_printf ( "%s %s", a_vik_get_image_viewer(), quoted_file ); g_free ( quoted_file ); if ( ! g_spawn_command_line_async ( cmd, &err ) ) { a_dialog_error_msg_extra ( VIK_GTK_WINDOW_FROM_LAYER( pass_along[0]), _("Could not launch %s to open file."), a_vik_get_image_viewer() ); g_error_free ( err ); } g_free ( cmd ); #endif /* WINDOWS */ } static gboolean tool_show_picture_click ( VikTrwLayer *vtl, GdkEventButton *event, VikViewport *vvp ) { gpointer params[3] = { vvp, event, NULL }; if (!vtl || vtl->vl.type != VIK_LAYER_TRW) return FALSE; g_hash_table_foreach ( vtl->waypoints, (GHFunc) tool_show_picture_wp, params ); if ( params[2] ) { static gpointer pass_along[6]; pass_along[0] = vtl; pass_along[5] = params[2]; trw_layer_show_picture ( pass_along ); return TRUE; /* found a match */ } else return FALSE; /* go through other layers, searching for a match */ } /*************************************************************************** ** End tool code ***************************************************************************/ static void image_wp_make_list ( const gpointer id, VikWaypoint *wp, GSList **pics ) { if ( wp->image && ( ! a_thumbnails_exists ( wp->image ) ) ) *pics = g_slist_append ( *pics, (gpointer) g_strdup ( wp->image ) ); } /* Structure for thumbnail creating data used in the background thread */ typedef struct { VikTrwLayer *vtl; // Layer needed for redrawing GSList *pics; // Image list } thumbnail_create_thread_data; static int create_thumbnails_thread ( thumbnail_create_thread_data *tctd, gpointer threaddata ) { guint total = g_slist_length(tctd->pics), done = 0; while ( tctd->pics ) { a_thumbnails_create ( (gchar *) tctd->pics->data ); int result = a_background_thread_progress ( threaddata, ((gdouble) ++done) / total ); if ( result != 0 ) return -1; /* Abort thread */ tctd->pics = tctd->pics->next; } // Redraw to show the thumbnails as they are now created if ( IS_VIK_LAYER(tctd->vtl) ) vik_layer_emit_update ( VIK_LAYER(tctd->vtl) ); // NB update from background thread return 0; } static void thumbnail_create_thread_free ( thumbnail_create_thread_data *tctd ) { while ( tctd->pics ) { g_free ( tctd->pics->data ); tctd->pics = g_slist_delete_link ( tctd->pics, tctd->pics ); } g_free ( tctd ); } void trw_layer_verify_thumbnails ( VikTrwLayer *vtl, GtkWidget *vp ) { if ( ! vtl->has_verified_thumbnails ) { GSList *pics = NULL; g_hash_table_foreach ( vtl->waypoints, (GHFunc) image_wp_make_list, &pics ); if ( pics ) { gint len = g_slist_length ( pics ); gchar *tmp = g_strdup_printf ( _("Creating %d Image Thumbnails..."), len ); thumbnail_create_thread_data *tctd = g_malloc ( sizeof(thumbnail_create_thread_data) ); tctd->vtl = vtl; tctd->pics = pics; a_background_thread ( VIK_GTK_WINDOW_FROM_LAYER(vtl), tmp, (vik_thr_func) create_thumbnails_thread, tctd, (vik_thr_free_func) thumbnail_create_thread_free, NULL, len ); g_free ( tmp ); } } } static const gchar* my_track_colors ( gint ii ) { static const gchar* colors[VIK_TRW_LAYER_TRACK_GCS] = { "#2d870a", "#135D34", "#0a8783", "#0e4d87", "#05469f", "#695CBB", "#2d059f", "#4a059f", "#5A171A", "#96059f" }; // Fast and reliable way of returning a colour return colors[(ii % VIK_TRW_LAYER_TRACK_GCS)]; } static void trw_layer_track_alloc_colors ( VikTrwLayer *vtl ) { GHashTableIter iter; gpointer key, value; gint ii = 0; // Tracks g_hash_table_iter_init ( &iter, vtl->tracks ); while ( g_hash_table_iter_next (&iter, &key, &value) ) { // Tracks get a random spread of colours if not already assigned if ( ! VIK_TRACK(value)->has_color ) { if ( vtl->drawmode == DRAWMODE_ALL_SAME_COLOR ) VIK_TRACK(value)->color = vtl->track_color; else { gdk_color_parse ( my_track_colors (ii), &(VIK_TRACK(value)->color) ); } VIK_TRACK(value)->has_color = TRUE; } trw_layer_update_treeview ( vtl, VIK_TRACK(value), key ); ii++; if (ii > VIK_TRW_LAYER_TRACK_GCS) ii = 0; } // Routes ii = 0; g_hash_table_iter_init ( &iter, vtl->routes ); while ( g_hash_table_iter_next (&iter, &key, &value) ) { // Routes get an intermix of reds if ( ! VIK_TRACK(value)->has_color ) { if ( ii ) gdk_color_parse ( "#FF0000" , &(VIK_TRACK(value)->color) ); // Red else gdk_color_parse ( "#B40916" , &(VIK_TRACK(value)->color) ); // Dark Red VIK_TRACK(value)->has_color = TRUE; } trw_layer_update_treeview ( vtl, VIK_TRACK(value), key ); ii = !ii; } } static void trw_layer_post_read ( VikTrwLayer *vtl, GtkWidget *vp ) { trw_layer_verify_thumbnails ( vtl, vp ); trw_layer_track_alloc_colors ( vtl ); } VikCoordMode vik_trw_layer_get_coord_mode ( VikTrwLayer *vtl ) { return vtl->coord_mode; } /** * Uniquify the whole layer * Also requires the layers panel as the names shown there need updating too * Returns whether the operation was successful or not */ gboolean vik_trw_layer_uniquify ( VikTrwLayer *vtl, VikLayersPanel *vlp ) { if ( vtl && vlp ) { vik_trw_layer_uniquify_tracks ( vtl, vlp, vtl->tracks, TRUE ); vik_trw_layer_uniquify_tracks ( vtl, vlp, vtl->routes, FALSE ); vik_trw_layer_uniquify_waypoints ( vtl, vlp ); return TRUE; } return FALSE; } static void waypoint_convert ( const gpointer id, VikWaypoint *wp, VikCoordMode *dest_mode ) { vik_coord_convert ( &(wp->coord), *dest_mode ); } static void track_convert ( const gpointer id, VikTrack *tr, VikCoordMode *dest_mode ) { vik_track_convert ( tr, *dest_mode ); } static void trw_layer_change_coord_mode ( VikTrwLayer *vtl, VikCoordMode dest_mode ) { if ( vtl->coord_mode != dest_mode ) { vtl->coord_mode = dest_mode; g_hash_table_foreach ( vtl->waypoints, (GHFunc) waypoint_convert, &dest_mode ); g_hash_table_foreach ( vtl->tracks, (GHFunc) track_convert, &dest_mode ); g_hash_table_foreach ( vtl->routes, (GHFunc) track_convert, &dest_mode ); } } static void trw_layer_set_menu_selection ( VikTrwLayer *vtl, guint16 selection ) { vtl->menu_selection = selection; } static guint16 trw_layer_get_menu_selection ( VikTrwLayer *vtl ) { return (vtl->menu_selection); } /* ----------- Downloading maps along tracks --------------- */ static int get_download_area_width(VikViewport *vvp, gdouble zoom_level, struct LatLon *wh) { /* TODO: calculating based on current size of viewport */ const gdouble w_at_zoom_0_125 = 0.0013; const gdouble h_at_zoom_0_125 = 0.0011; gdouble zoom_factor = zoom_level/0.125; wh->lat = h_at_zoom_0_125 * zoom_factor; wh->lon = w_at_zoom_0_125 * zoom_factor; return 0; /* all OK */ } static VikCoord *get_next_coord(VikCoord *from, VikCoord *to, struct LatLon *dist, gdouble gradient) { if ((dist->lon >= ABS(to->east_west - from->east_west)) && (dist->lat >= ABS(to->north_south - from->north_south))) return NULL; VikCoord *coord = g_malloc(sizeof(VikCoord)); coord->mode = VIK_COORD_LATLON; if (ABS(gradient) < 1) { if (from->east_west > to->east_west) coord->east_west = from->east_west - dist->lon; else coord->east_west = from->east_west + dist->lon; coord->north_south = gradient * (coord->east_west - from->east_west) + from->north_south; } else { if (from->north_south > to->north_south) coord->north_south = from->north_south - dist->lat; else coord->north_south = from->north_south + dist->lat; coord->east_west = (1/gradient) * (coord->north_south - from->north_south) + from->north_south; } return coord; } static GList *add_fillins(GList *list, VikCoord *from, VikCoord *to, struct LatLon *dist) { /* TODO: handle virtical track (to->east_west - from->east_west == 0) */ gdouble gradient = (to->north_south - from->north_south)/(to->east_west - from->east_west); VikCoord *next = from; while (TRUE) { if ((next = get_next_coord(next, to, dist, gradient)) == NULL) break; list = g_list_prepend(list, next); } return list; } void vik_track_download_map(VikTrack *tr, VikMapsLayer *vml, VikViewport *vvp, gdouble zoom_level) { typedef struct _Rect { VikCoord tl; VikCoord br; VikCoord center; } Rect; #define GLRECT(iter) ((Rect *)((iter)->data)) struct LatLon wh; GList *rects_to_download = NULL; GList *rect_iter; if (get_download_area_width(vvp, zoom_level, &wh)) return; GList *iter = tr->trackpoints; if (!iter) return; gboolean new_map = TRUE; VikCoord *cur_coord, tl, br; Rect *rect; while (iter) { cur_coord = &(VIK_TRACKPOINT(iter->data))->coord; if (new_map) { vik_coord_set_area(cur_coord, &wh, &tl, &br); rect = g_malloc(sizeof(Rect)); rect->tl = tl; rect->br = br; rect->center = *cur_coord; rects_to_download = g_list_prepend(rects_to_download, rect); new_map = FALSE; iter = iter->next; continue; } gboolean found = FALSE; for (rect_iter = rects_to_download; rect_iter; rect_iter = rect_iter->next) { if (vik_coord_inside(cur_coord, &GLRECT(rect_iter)->tl, &GLRECT(rect_iter)->br)) { found = TRUE; break; } } if (found) iter = iter->next; else new_map = TRUE; } GList *fillins = NULL; /* 'fillin' doesn't work in UTM mode - potentially ending up in massive loop continually allocating memory - hence don't do it */ /* seems that ATM the function get_next_coord works only for LATLON */ if ( cur_coord->mode == VIK_COORD_LATLON ) { /* fill-ins for far apart points */ GList *cur_rect, *next_rect; for (cur_rect = rects_to_download; (next_rect = cur_rect->next) != NULL; cur_rect = cur_rect->next) { if ((wh.lon < ABS(GLRECT(cur_rect)->center.east_west - GLRECT(next_rect)->center.east_west)) || (wh.lat < ABS(GLRECT(cur_rect)->center.north_south - GLRECT(next_rect)->center.north_south))) { fillins = add_fillins(fillins, &GLRECT(cur_rect)->center, &GLRECT(next_rect)->center, &wh); } } } else g_message("%s: this feature works only in Mercator mode", __FUNCTION__); if (fillins) { GList *iter = fillins; while (iter) { cur_coord = (VikCoord *)(iter->data); vik_coord_set_area(cur_coord, &wh, &tl, &br); rect = g_malloc(sizeof(Rect)); rect->tl = tl; rect->br = br; rect->center = *cur_coord; rects_to_download = g_list_prepend(rects_to_download, rect); iter = iter->next; } } for (rect_iter = rects_to_download; rect_iter; rect_iter = rect_iter->next) { maps_layer_download_section (vml, vvp, &(((Rect *)(rect_iter->data))->tl), &(((Rect *)(rect_iter->data))->br), zoom_level); } if (fillins) { for (iter = fillins; iter; iter = iter->next) g_free(iter->data); g_list_free(fillins); } if (rects_to_download) { for (rect_iter = rects_to_download; rect_iter; rect_iter = rect_iter->next) g_free(rect_iter->data); g_list_free(rects_to_download); } } static void trw_layer_download_map_along_track_cb ( gpointer pass_along[6] ) { VikMapsLayer *vml; gint selected_map, default_map; gchar *zoomlist[] = {"0.125", "0.25", "0.5", "1", "2", "4", "8", "16", "32", "64", "128", "256", "512", "1024", NULL }; gdouble zoom_vals[] = {0.125, 0.25, 0.5, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024}; gint selected_zoom, default_zoom; int i,j; VikTrwLayer *vtl = pass_along[0]; VikLayersPanel *vlp = pass_along[1]; VikTrack *trk; if ( GPOINTER_TO_INT (pass_along[2]) == VIK_TRW_LAYER_SUBLAYER_ROUTE ) trk = (VikTrack *) g_hash_table_lookup ( vtl->routes, pass_along[3] ); else trk = (VikTrack *) g_hash_table_lookup ( vtl->tracks, pass_along[3] ); if ( !trk ) return; VikViewport *vvp = vik_window_viewport((VikWindow *)(VIK_GTK_WINDOW_FROM_LAYER(vtl))); GList *vmls = vik_layers_panel_get_all_layers_of_type(vlp, VIK_LAYER_MAPS, TRUE); // Includes hidden map layer types int num_maps = g_list_length(vmls); if (!num_maps) { a_dialog_msg(VIK_GTK_WINDOW_FROM_LAYER(vtl), GTK_MESSAGE_ERROR, _("No map layer in use. Create one first"), NULL); return; } gchar **map_names = g_malloc(1 + num_maps * sizeof(gpointer)); VikMapsLayer **map_layers = g_malloc(1 + num_maps * sizeof(gpointer)); gchar **np = map_names; VikMapsLayer **lp = map_layers; for (i = 0; i < num_maps; i++) { gboolean dup = FALSE; vml = (VikMapsLayer *)(vmls->data); for (j = 0; j < i; j++) { /* no duplicate allowed */ if (vik_maps_layer_get_map_type(vml) == vik_maps_layer_get_map_type(map_layers[j])) { dup = TRUE; break; } } if (!dup) { *lp++ = vml; *np++ = vik_maps_layer_get_map_label(vml); } vmls = vmls->next; } *lp = NULL; *np = NULL; num_maps = lp - map_layers; for (default_map = 0; default_map < num_maps; default_map++) { /* TODO: check for parent layer's visibility */ if (VIK_LAYER(map_layers[default_map])->visible) break; } default_map = (default_map == num_maps) ? 0 : default_map; gdouble cur_zoom = vik_viewport_get_zoom(vvp); for (default_zoom = 0; default_zoom < sizeof(zoom_vals)/sizeof(gdouble); default_zoom++) { if (cur_zoom == zoom_vals[default_zoom]) break; } default_zoom = (default_zoom == sizeof(zoom_vals)/sizeof(gdouble)) ? sizeof(zoom_vals)/sizeof(gdouble) - 1 : default_zoom; if (!a_dialog_map_n_zoom(VIK_GTK_WINDOW_FROM_LAYER(vtl), map_names, default_map, zoomlist, default_zoom, &selected_map, &selected_zoom)) goto done; vik_track_download_map(trk, map_layers[selected_map], vvp, zoom_vals[selected_zoom]); done: for (i = 0; i < num_maps; i++) g_free(map_names[i]); g_free(map_names); g_free(map_layers); g_list_free(vmls); } /**** lowest waypoint number calculation ***/ static gint highest_wp_number_name_to_number(const gchar *name) { if ( strlen(name) == 3 ) { int n = atoi(name); if ( n < 100 && name[0] != '0' ) return -1; if ( n < 10 && name[0] != '0' ) return -1; return n; } return -1; } static void highest_wp_number_reset(VikTrwLayer *vtl) { vtl->highest_wp_number = -1; } static void highest_wp_number_add_wp(VikTrwLayer *vtl, const gchar *new_wp_name) { /* if is bigger that top, add it */ gint new_wp_num = highest_wp_number_name_to_number(new_wp_name); if ( new_wp_num > vtl->highest_wp_number ) vtl->highest_wp_number = new_wp_num; } static void highest_wp_number_remove_wp(VikTrwLayer *vtl, const gchar *old_wp_name) { /* if wasn't top, do nothing. if was top, count backwards until we find one used */ gint old_wp_num = highest_wp_number_name_to_number(old_wp_name); if ( vtl->highest_wp_number == old_wp_num ) { gchar buf[4]; vtl->highest_wp_number--; g_snprintf(buf,4,"%03d", vtl->highest_wp_number ); /* search down until we find something that *does* exist */ while ( vtl->highest_wp_number > 0 && ! vik_trw_layer_get_waypoint ( vtl, buf )) { vtl->highest_wp_number--; g_snprintf(buf,4,"%03d", vtl->highest_wp_number ); } } } /* get lowest unused number */ static gchar *highest_wp_number_get(VikTrwLayer *vtl) { gchar buf[4]; if ( vtl->highest_wp_number < 0 || vtl->highest_wp_number >= 999 ) return NULL; g_snprintf(buf,4,"%03d", vtl->highest_wp_number+1 ); return g_strdup(buf); } viking-1.4.2/src/config.h.in0000644000175000017500000001473512175546627012571 00000000000000/* src/config.h.in. Generated from configure.ac by autoheader. */ /* always defined to indicate that i18n is enabled */ #undef ENABLE_NLS /* Gettext package name */ #undef GETTEXT_PACKAGE /* Define to 1 if you have the `bind_textdomain_codeset' function. */ #undef HAVE_BIND_TEXTDOMAIN_CODESET /* Define to 1 if you have the `dcgettext' function. */ #undef HAVE_DCGETTEXT /* Define to 1 if you have the header file. */ #undef HAVE_EXPAT_H /* Define to 1 if you have the `floor' function. */ #undef HAVE_FLOOR /* Define if the GNU gettext() function is already present or preinstalled. */ #undef HAVE_GETTEXT /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define if your file defines LC_MESSAGES. */ #undef HAVE_LC_MESSAGES /* Define to 1 if you have a functional curl library. */ #undef HAVE_LIBCURL /* Define to 1 if you have the `exif' library (-lexif). */ #undef HAVE_LIBEXIF /* Define to 1 if you have the `gps' library (-lgps). */ #undef HAVE_LIBGPS /* Define to 1 if you have the `m' library (-lm). */ #undef HAVE_LIBM /* Define to 1 if you have the `X11' library (-lX11). */ #undef HAVE_LIBX11 /* Define to 1 if you have the `z' library (-lz). */ #undef HAVE_LIBZ /* Define to 1 if you have the header file. */ #undef HAVE_LOCALE_H /* Define to 1 if you have the header file. */ #undef HAVE_MALLOC_H /* Define to 1 if you have the header file. */ #undef HAVE_MATH_H /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the `memset' function. */ #undef HAVE_MEMSET /* Define to 1 if you have the `mkdtemp' function. */ #undef HAVE_MKDTEMP /* Define to 1 if you have the `pow' function. */ #undef HAVE_POW /* Define to 1 if you have the `realpath' function. */ #undef HAVE_REALPATH /* Define to 1 if you have the `sqrt' function. */ #undef HAVE_SQRT /* Define to 1 if `stat' has the bug that it succeeds when given the zero-length file name argument. */ #undef HAVE_STAT_EMPTY_STRING_BUG /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the `strcasecmp' function. */ #undef HAVE_STRCASECMP /* Define to 1 if you have the `strchr' function. */ #undef HAVE_STRCHR /* Define to 1 if you have the `strdup' function. */ #undef HAVE_STRDUP /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the `strncasecmp' function. */ #undef HAVE_STRNCASECMP /* Define to 1 if you have the `strtol' function. */ #undef HAVE_STRTOL /* Define to 1 if you have the `strtoul' function. */ #undef HAVE_STRTOUL /* Define to 1 if you have the header file. */ #undef HAVE_SYS_PARAM_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if you have the header file. */ #undef HAVE_UTIME_H /* Define to 1 if you have the header file. */ #undef HAVE_X11_XLIB_H /* Defined if libcurl supports AsynchDNS */ #undef LIBCURL_FEATURE_ASYNCHDNS /* Defined if libcurl supports IDN */ #undef LIBCURL_FEATURE_IDN /* Defined if libcurl supports IPv6 */ #undef LIBCURL_FEATURE_IPV6 /* Defined if libcurl supports KRB4 */ #undef LIBCURL_FEATURE_KRB4 /* Defined if libcurl supports libz */ #undef LIBCURL_FEATURE_LIBZ /* Defined if libcurl supports NTLM */ #undef LIBCURL_FEATURE_NTLM /* Defined if libcurl supports SSL */ #undef LIBCURL_FEATURE_SSL /* Defined if libcurl supports SSPI */ #undef LIBCURL_FEATURE_SSPI /* Defined if libcurl supports DICT */ #undef LIBCURL_PROTOCOL_DICT /* Defined if libcurl supports FILE */ #undef LIBCURL_PROTOCOL_FILE /* Defined if libcurl supports FTP */ #undef LIBCURL_PROTOCOL_FTP /* Defined if libcurl supports FTPS */ #undef LIBCURL_PROTOCOL_FTPS /* Defined if libcurl supports HTTP */ #undef LIBCURL_PROTOCOL_HTTP /* Defined if libcurl supports HTTPS */ #undef LIBCURL_PROTOCOL_HTTPS /* Defined if libcurl supports LDAP */ #undef LIBCURL_PROTOCOL_LDAP /* Defined if libcurl supports TELNET */ #undef LIBCURL_PROTOCOL_TELNET /* Defined if libcurl supports TFTP */ #undef LIBCURL_PROTOCOL_TFTP /* Define the location where the catalogs will be installed */ #undef LOCALEDIR /* Define to 1 if `lstat' dereferences a symlink specified with a trailing slash. */ #undef LSTAT_FOLLOWS_SLASHED_SYMLINK /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Version number of package */ #undef VERSION /* NO ALPHABETIZED TRW */ #undef VIK_CONFIG_ALPHABETIZED_TRW /* BING STUFF */ #undef VIK_CONFIG_BING /* BLUEMARBLE STUFF */ #undef VIK_CONFIG_BLUEMARBLE /* Age of tiles before checking it (in seconds) */ #undef VIK_CONFIG_DEFAULT_TILE_AGE /* DEM24K STUFF */ #undef VIK_CONFIG_DEM24K /* EXPEDIA STUFF */ #undef VIK_CONFIG_EXPEDIA /* GEOCACHES STUFF */ #undef VIK_CONFIG_GEOCACHES /* GEONAMES STUFF */ #undef VIK_CONFIG_GEONAMES /* GEOTAG STUFF */ #undef VIK_CONFIG_GEOTAG /* GOOGLE STUFF */ #undef VIK_CONFIG_GOOGLE /* Size of the map cache */ #undef VIK_CONFIG_MAPCACHE_SIZE /* OPENSTREETMAP STUFF */ #undef VIK_CONFIG_OPENSTREETMAP /* REALTIME GPS TRACKING STUFF */ #undef VIK_CONFIG_REALTIME_GPS_TRACKING /* Method for the search */ #undef VIK_CONFIG_SEARCH /* Id. for searching via GEONAMES */ #undef VIK_CONFIG_SEARCH_GEONAMES /* Id. for searching via GOOGLE */ #undef VIK_CONFIG_SEARCH_GOOGLE /* SPOTMAPS STUFF */ #undef VIK_CONFIG_SPOTMAPS /* TERRASERVER STUFF */ #undef VIK_CONFIG_TERRASERVER /* Define to empty if `const' does not conform to ANSI C. */ #undef const /* Define curl_free() as free() if our version of curl lacks curl_free. */ #undef curl_free /* Define to `int' if does not define. */ #undef mode_t viking-1.4.2/src/thumbnails.h0000644000175000017500000000240112122673673013042 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef __VIKING_THUMBNAILS_H #define __VIKING_THUMBNAILS_H #include #include G_BEGIN_DECLS gboolean a_thumbnails_exists ( const gchar *filename ); void a_thumbnails_create ( const gchar *filename ); GdkPixbuf *a_thumbnails_get(const gchar *filename); GdkPixbuf *a_thumbnails_get_default (); GdkPixbuf *a_thumbnails_scale_pixbuf(GdkPixbuf *src, int max_w, int max_h); G_END_DECLS #endif viking-1.4.2/src/vikmapsourcedefault.c0000644000175000017500000003527312174331626014755 00000000000000/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * viking * Copyright (C) 2009-2010, Guilhem Bonnefille * * viking is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * viking is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * 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 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 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); static VikViewportDrawMode map_source_get_drawmode (VikMapSource *self); static int _download ( VikMapSource *self, MapCoord *src, const gchar *dest_fn, void *handle ); static void * _download_handle_init ( VikMapSource *self ); static void _download_handle_cleanup ( VikMapSource *self, void *handle ); typedef struct _VikMapSourceDefaultPrivate VikMapSourceDefaultPrivate; struct _VikMapSourceDefaultPrivate { /* legal stuff */ gchar *copyright; gchar *license; gchar *license_url; GdkPixbuf *logo; guint16 uniq_id; gchar *label; guint16 tilesize_x; guint16 tilesize_y; VikViewportDrawMode drawmode; }; #define VIK_MAP_SOURCE_DEFAULT_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), VIK_TYPE_MAP_SOURCE_DEFAULT, VikMapSourceDefaultPrivate)) /* properties */ enum { PROP_0, PROP_ID, PROP_LABEL, PROP_TILESIZE_X, PROP_TILESIZE_Y, PROP_DRAWMODE, PROP_COPYRIGHT, PROP_LICENSE, PROP_LICENSE_URL, }; G_DEFINE_ABSTRACT_TYPE (VikMapSourceDefault, vik_map_source_default, VIK_TYPE_MAP_SOURCE); static void vik_map_source_default_init (VikMapSourceDefault *object) { VikMapSourceDefault *self = VIK_MAP_SOURCE_DEFAULT (object); VikMapSourceDefaultPrivate *priv = VIK_MAP_SOURCE_DEFAULT_PRIVATE (self); priv->label = NULL; priv->copyright = NULL; priv->license = NULL; priv->license_url = NULL; priv->logo = NULL; } static void vik_map_source_default_finalize (GObject *object) { VikMapSourceDefault *self = VIK_MAP_SOURCE_DEFAULT (object); VikMapSourceDefaultPrivate *priv = VIK_MAP_SOURCE_DEFAULT_PRIVATE (self); g_free (priv->label); 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); } static void vik_map_source_default_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { VikMapSourceDefault *self = VIK_MAP_SOURCE_DEFAULT (object); VikMapSourceDefaultPrivate *priv = VIK_MAP_SOURCE_DEFAULT_PRIVATE (self); switch (property_id) { case PROP_ID: priv->uniq_id = g_value_get_uint (value); break; case PROP_LABEL: g_free (priv->label); priv->label = g_strdup(g_value_get_string (value)); break; case PROP_TILESIZE_X: priv->tilesize_x = g_value_get_uint (value); break; case PROP_TILESIZE_Y: priv->tilesize_y = g_value_get_uint (value); break; case PROP_DRAWMODE: priv->drawmode = g_value_get_enum(value); break; case PROP_COPYRIGHT: g_free (priv->copyright); 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); break; } } static void vik_map_source_default_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { VikMapSourceDefault *self = VIK_MAP_SOURCE_DEFAULT (object); VikMapSourceDefaultPrivate *priv = VIK_MAP_SOURCE_DEFAULT_PRIVATE (self); switch (property_id) { case PROP_ID: g_value_set_uint (value, priv->uniq_id); break; case PROP_LABEL: g_value_set_string (value, priv->label); break; case PROP_TILESIZE_X: g_value_set_uint (value, priv->tilesize_x); break; case PROP_TILESIZE_Y: g_value_set_uint (value, priv->tilesize_y); break; case PROP_DRAWMODE: g_value_set_enum (value, priv->drawmode); break; case PROP_COPYRIGHT: 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); break; } } static void vik_map_source_default_class_init (VikMapSourceDefaultClass *klass) { GObjectClass* object_class = G_OBJECT_CLASS (klass); VikMapSourceClass* parent_class = VIK_MAP_SOURCE_CLASS (klass); GParamSpec *pspec = NULL; object_class->set_property = vik_map_source_default_set_property; object_class->get_property = vik_map_source_default_get_property; /* 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; parent_class->get_tilesize_y = map_source_get_tilesize_y; parent_class->get_drawmode = map_source_get_drawmode; parent_class->download = _download; parent_class->download_handle_init = _download_handle_init; parent_class->download_handle_cleanup = _download_handle_cleanup; /* Default implementation of methods */ klass->get_uri = NULL; klass->get_hostname = NULL; klass->get_download_options = NULL; pspec = g_param_spec_uint ("id", "Id of the tool", "Set the id", 0 /* minimum value */, G_MAXUINT /* maximum value */, 0 /* default value */, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE); g_object_class_install_property (object_class, PROP_ID, pspec); pspec = g_param_spec_string ("label", "Label", "The label of the map source", "" /* default value */, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE); g_object_class_install_property (object_class, PROP_LABEL, pspec); pspec = g_param_spec_uint ("tilesize-x", "TileSizeX", "Set the size of the tile (x)", 0 /* minimum value */, G_MAXUINT16 /* maximum value */, 0 /* default value */, G_PARAM_READWRITE); g_object_class_install_property (object_class, PROP_TILESIZE_X, pspec); pspec = g_param_spec_uint ("tilesize-y", "TileSizeY", "Set the size of the tile (y)", 0 /* minimum value */, G_MAXUINT16 /* maximum value */, 0 /* default value */, G_PARAM_READWRITE); g_object_class_install_property (object_class, PROP_TILESIZE_Y, pspec); pspec = g_param_spec_enum("drawmode", "Drawmode", "The mode used to draw map", VIK_TYPE_VIEWPORT_DRAW_MODE, VIK_VIEWPORT_DRAWMODE_UTM, G_PARAM_READWRITE); g_object_class_install_property(object_class, PROP_DRAWMODE, pspec); pspec = g_param_spec_string ("copyright", "Copyright", "The copyright of the map source", NULL, 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_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->license_url; } 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), (guint16)0); VikMapSourceDefaultPrivate *priv = VIK_MAP_SOURCE_DEFAULT_PRIVATE(self); return priv->uniq_id; } static const gchar * map_source_get_label (VikMapSource *self) { g_return_val_if_fail (VIK_IS_MAP_SOURCE_DEFAULT(self), NULL); VikMapSourceDefaultPrivate *priv = VIK_MAP_SOURCE_DEFAULT_PRIVATE(self); return priv->label; } static guint16 map_source_get_tilesize_x (VikMapSource *self) { g_return_val_if_fail (VIK_IS_MAP_SOURCE_DEFAULT(self), (guint16)0); VikMapSourceDefaultPrivate *priv = VIK_MAP_SOURCE_DEFAULT_PRIVATE(self); return priv->tilesize_x; } static guint16 map_source_get_tilesize_y (VikMapSource *self) { g_return_val_if_fail (VIK_IS_MAP_SOURCE_DEFAULT(self), (guint16)0); VikMapSourceDefaultPrivate *priv = VIK_MAP_SOURCE_DEFAULT_PRIVATE(self); return priv->tilesize_y; } static VikViewportDrawMode map_source_get_drawmode (VikMapSource *self) { g_return_val_if_fail (VIK_IS_MAP_SOURCE_DEFAULT(self), (VikViewportDrawMode)0); VikMapSourceDefaultPrivate *priv = VIK_MAP_SOURCE_DEFAULT_PRIVATE(self); return priv->drawmode; } static int _download ( VikMapSource *self, MapCoord *src, const gchar *dest_fn, void *handle ) { int res; gchar *uri = vik_map_source_default_get_uri(VIK_MAP_SOURCE_DEFAULT(self), src); gchar *host = vik_map_source_default_get_hostname(VIK_MAP_SOURCE_DEFAULT(self)); DownloadMapOptions *options = vik_map_source_default_get_download_options(VIK_MAP_SOURCE_DEFAULT(self)); res = a_http_download_get_url ( host, uri, dest_fn, options, handle ); g_free ( uri ); g_free ( host ); return res; } static void * _download_handle_init ( VikMapSource *self ) { return a_download_handle_init (); } static void _download_handle_cleanup ( VikMapSource *self, void *handle ) { a_download_handle_cleanup ( handle ); } gchar * vik_map_source_default_get_uri( VikMapSourceDefault *self, MapCoord *src ) { VikMapSourceDefaultClass *klass; g_return_val_if_fail (self != NULL, 0); g_return_val_if_fail (VIK_IS_MAP_SOURCE_DEFAULT (self), 0); klass = VIK_MAP_SOURCE_DEFAULT_GET_CLASS(self); g_return_val_if_fail (klass->get_uri != NULL, 0); return (*klass->get_uri)(self, src); } gchar * vik_map_source_default_get_hostname( VikMapSourceDefault *self ) { VikMapSourceDefaultClass *klass; g_return_val_if_fail (self != NULL, 0); g_return_val_if_fail (VIK_IS_MAP_SOURCE_DEFAULT (self), 0); klass = VIK_MAP_SOURCE_DEFAULT_GET_CLASS(self); g_return_val_if_fail (klass->get_hostname != NULL, 0); return (*klass->get_hostname)(self); } DownloadMapOptions * vik_map_source_default_get_download_options( VikMapSourceDefault *self ) { VikMapSourceDefaultClass *klass; g_return_val_if_fail (self != NULL, 0); g_return_val_if_fail (VIK_IS_MAP_SOURCE_DEFAULT (self), 0); klass = VIK_MAP_SOURCE_DEFAULT_GET_CLASS(self); g_return_val_if_fail (klass->get_download_options != NULL, 0); return (*klass->get_download_options)(self); } viking-1.4.2/src/expedia.c0000644000175000017500000001506512172046434012312 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2005, Evan Battaglia * * Some formulas or perhaps even code derived from GPSDrive * GPSDrive Copyright (C) 2001-2004 Fritz Ganter * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #ifdef HAVE_MATH_H #include #endif #include "globals.h" #include "coords.h" #include "vikcoord.h" #include "mapcoord.h" #include "download.h" #include "vikmapslayer.h" #include "expedia.h" static gboolean expedia_coord_to_mapcoord ( const VikCoord *src, gdouble xzoom, gdouble yzoom, MapCoord *dest ); static void expedia_mapcoord_to_center_coord ( MapCoord *src, VikCoord *dest ); static int expedia_download ( MapCoord *src, const gchar *dest_fn, void *handle ); static void * expedia_handle_init ( ); static void expedia_handle_cleanup ( void *handle ); static DownloadMapOptions expedia_options = { FALSE, FALSE, NULL, 2, a_check_map_file }; void expedia_init() { VikMapsLayer_MapType map_type = { 5, 0, 0, VIK_VIEWPORT_DRAWMODE_EXPEDIA, expedia_coord_to_mapcoord, expedia_mapcoord_to_center_coord, expedia_download, expedia_handle_init, expedia_handle_cleanup }; maps_layer_register_type(_("Expedia Street Maps"), 5, &map_type); } #define EXPEDIA_SITE "expedia.com" #define MPP_MARGIN_OF_ERROR 0.01 #define DEGREES_TO_RADS 0.0174532925 #define HEIGHT_OF_LAT_DEGREE (111318.84502/ALTI_TO_MPP) #define HEIGHT_OF_LAT_MINUTE (1855.3140837/ALTI_TO_MPP) #define WIDTH_BUFFER 0 #define HEIGHT_BUFFER 25 #define REAL_WIDTH_BUFFER 1 #define REAL_HEIGHT_BUFFER 26 /* first buffer is to cut off the expedia/microsoft logo. Annoying little buggers ;) */ /* second is to allow for a 1-pixel overlap on each side. this is a good thing (tm) */ static const guint expedia_altis[] = { 1, 2, 4, 8, 16, 32, 64, 128, 256, 512 }; /* square this number to find out how many per square degree. */ static const gdouble expedia_altis_degree_freq[] = { 120, 60, 30, 15, 8, 4, 2, 1, 1, 1 }; static const guint expedia_altis_count = sizeof(expedia_altis) / sizeof(expedia_altis[0]); gdouble expedia_altis_freq ( gint alti ) { static gint i; for ( i = 0; i < expedia_altis_count; i++ ) if ( expedia_altis[i] == alti ) return expedia_altis_degree_freq [ i ]; g_error ( _("Invalid expedia altitude") ); return 0; } /* returns -1 if none of the above. */ gint expedia_zoom_to_alti ( gdouble zoom ) { guint i; for ( i = 0; i < expedia_altis_count; i++ ) if ( fabs(expedia_altis[i] - zoom) / zoom < MPP_MARGIN_OF_ERROR ) return expedia_altis[i]; return -1; } /* gint expedia_pseudo_zone ( gint alti, gint x, gint y ) { return (int) (x/expedia_altis_freq(alti)*180) + (int) (y/expedia_altis_freq(alti)*90); } */ void expedia_snip ( const gchar *file ) { /* Load the pixbuf */ GError *gx = NULL; GdkPixbuf *old, *cropped; gint width, height; old = gdk_pixbuf_new_from_file ( file, &gx ); if (gx) { g_warning ( _("Couldn't open EXPEDIA image file (right after successful download! Please report and delete image file!): %s"), gx->message ); g_error_free ( gx ); return; } width = gdk_pixbuf_get_width ( old ); height = gdk_pixbuf_get_height ( old ); cropped = gdk_pixbuf_new_subpixbuf ( old, WIDTH_BUFFER, HEIGHT_BUFFER, width - 2*WIDTH_BUFFER, height - 2*HEIGHT_BUFFER ); gdk_pixbuf_save ( cropped, file, "png", &gx, NULL ); if ( gx ) { g_warning ( _("Couldn't save EXPEDIA image file (right after successful download! Please report and delete image file!): %s"), gx->message ); g_error_free ( gx ); } g_object_unref ( cropped ); g_object_unref ( old ); } /* if degree_freeq = 60 -> nearest minute (in middle) */ /* everything starts at -90,-180 -> 0,0. then increments by (1/degree_freq) */ static gboolean expedia_coord_to_mapcoord ( const VikCoord *src, gdouble xzoom, gdouble yzoom, MapCoord *dest ) { gint alti; g_assert ( src->mode == VIK_COORD_LATLON ); if ( xzoom != yzoom ) return FALSE; alti = expedia_zoom_to_alti ( xzoom ); if ( alti != -1 ) { dest->scale = alti; dest->x = (int) (((src->east_west+180) * expedia_altis_freq(alti))+0.5); dest->y = (int) (((src->north_south+90) * expedia_altis_freq(alti))+0.5); /* + 0.5 to round off and not floor */ /* just to space out tiles on the filesystem */ dest->z = 0; return TRUE; } return FALSE; } void expedia_xy_to_latlon_middle ( gint alti, gint x, gint y, struct LatLon *ll ) { ll->lon = (((gdouble)x) / expedia_altis_freq(alti)) - 180; ll->lat = (((gdouble)y) / expedia_altis_freq(alti)) - 90; } static void expedia_mapcoord_to_center_coord ( MapCoord *src, VikCoord *dest ) { dest->mode = VIK_COORD_LATLON; dest->east_west = (((gdouble)src->x) / expedia_altis_freq(src->scale)) - 180; dest->north_south = (((gdouble)src->y) / expedia_altis_freq(src->scale)) - 90; } static int expedia_download ( MapCoord *src, const gchar *dest_fn, void *handle ) { gint height, width; struct LatLon ll; gchar *uri; int res = -1; expedia_xy_to_latlon_middle ( src->scale, src->x, src->y, &ll ); height = HEIGHT_OF_LAT_DEGREE / expedia_altis_freq(src->scale) / (src->scale); width = height * cos ( ll.lat * DEGREES_TO_RADS ); height += 2*REAL_HEIGHT_BUFFER; width += 2*REAL_WIDTH_BUFFER; uri = g_strdup_printf ( "/pub/agent.dll?qscr=mrdt&ID=3XNsF.&CenP=%lf,%lf&Lang=%s&Alti=%d&Size=%d,%d&Offs=0.000000,0.000000&BCheck&tpid=1", ll.lat, ll.lon, (ll.lon > -30) ? "EUR0809" : "USA0409", src->scale, width, height ); if ((res = a_http_download_get_url ( EXPEDIA_SITE, uri, dest_fn, &expedia_options, NULL )) == 0) /* All OK */ expedia_snip ( dest_fn ); g_free(uri); return(res); } static void * expedia_handle_init ( ) { // Not much going on here return 0; } static void expedia_handle_cleanup ( void *handle ) { // Even less here! } viking-1.4.2/src/googlesearch.h0000644000175000017500000000373712122673673013353 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Quy Tonthat * Copyright (C) 2009, Guilhem Bonnefille * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef __VIK_GOOGLEGOTO_H #define __VIK_GOOGLEGOTO_H #include #include "vikwindow.h" #include "vikgototool.h" G_BEGIN_DECLS #define GOOGLE_GOTO_TOOL_TYPE (google_goto_tool_get_type ()) #define GOOGLE_GOTO_TOOL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GOOGLE_GOTO_TOOL_TYPE, GoogleGotoTool)) #define GOOGLE_GOTO_TOOL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GOOGLE_GOTO_TOOL_TYPE, GoogleGotoToolClass)) #define IS_GOOGLE_GOTO_TOOL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GOOGLE_GOTO_TOOL_TYPE)) #define IS_GOOGLE_GOTO_TOOL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GOOGLE_GOTO_TOOL_TYPE)) #define GOOGLE_GOTO_TOOL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GOOGLE_GOTO_TOOL_TYPE, GoogleGotoToolClass)) typedef struct _GoogleGotoTool GoogleGotoTool; typedef struct _GoogleGotoToolClass GoogleGotoToolClass; struct _GoogleGotoToolClass { VikGotoToolClass object_class; }; GType google_goto_tool_get_type (); struct _GoogleGotoTool { VikGotoTool obj; }; GoogleGotoTool *google_goto_tool_new (); G_END_DECLS #endif viking-1.4.2/src/vikexttool.h0000644000175000017500000000373212122673673013114 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2008, Guilhem Bonnefille * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef _VIKING_EXT_TOOL_H #define _VIKING_EXT_TOOL_H #include #include "vikwindow.h" G_BEGIN_DECLS #define VIK_EXT_TOOL_TYPE (vik_ext_tool_get_type ()) #define VIK_EXT_TOOL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIK_EXT_TOOL_TYPE, VikExtTool)) #define VIK_EXT_TOOL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VIK_EXT_TOOL_TYPE, VikExtToolClass)) #define IS_VIK_EXT_TOOL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIK_EXT_TOOL_TYPE)) #define IS_VIK_EXT_TOOL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VIK_EXT_TOOL_TYPE)) #define VIK_EXT_TOOL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VIK_EXT_TOOL_TYPE, VikExtToolClass)) typedef struct _VikExtTool VikExtTool; typedef struct _VikExtToolClass VikExtToolClass; struct _VikExtToolClass { GObjectClass object_class; gchar *(* get_label) (VikExtTool *self); void (* open) (VikExtTool *self, VikWindow *vwindow); }; GType vik_ext_tool_get_type (); struct _VikExtTool { GObject obj; }; gchar *vik_ext_tool_get_label ( VikExtTool *self ); void vik_ext_tool_open ( VikExtTool *self, VikWindow *vwindow ); G_END_DECLS #endif viking-1.4.2/src/viktreeview.c0000644000175000017500000006244512175546146013253 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include "viking.h" #include "config.h" #define TREEVIEW_GET(model,iter,what,dest) gtk_tree_model_get(GTK_TREE_MODEL(model),(iter),(what),(dest),-1) enum { VT_ITEM_EDITED_SIGNAL, VT_ITEM_TOGGLED_SIGNAL, VT_LAST_SIGNAL }; static guint treeview_signals[VT_LAST_SIGNAL] = { 0, 0 }; static GObjectClass *parent_class; enum { NAME_COLUMN = 0, VISIBLE_COLUMN, ICON_COLUMN, /* invisible */ TYPE_COLUMN, ITEM_PARENT_COLUMN, ITEM_POINTER_COLUMN, ITEM_DATA_COLUMN, HAS_VISIBLE_COLUMN, EDITABLE_COLUMN, /* properties dialog, delete, rename, etc. */ NUM_COLUMNS }; struct _VikTreeview { GtkTreeView treeview; GtkTreeModel *model; GdkPixbuf *layer_type_icons[VIK_LAYER_NUM_TYPES]; gboolean was_a_toggle; }; /* TODO: find, make "static" and put up here all non-"a_" functions */ static void vik_treeview_finalize ( GObject *gob ); static void vik_treeview_add_columns ( VikTreeview *vt ); static gboolean vik_treeview_drag_data_received ( GtkTreeDragDest *drag_dest, GtkTreePath *dest, GtkSelectionData *selection_data ); static gboolean vik_treeview_drag_data_delete ( GtkTreeDragSource *drag_source, GtkTreePath *path ); G_DEFINE_TYPE (VikTreeview, vik_treeview, GTK_TYPE_TREE_VIEW) static void vik_treeview_class_init ( VikTreeviewClass *klass ) { /* Destructor */ GObjectClass *object_class; object_class = G_OBJECT_CLASS (klass); object_class->finalize = vik_treeview_finalize; parent_class = g_type_class_peek_parent (klass); treeview_signals[VT_ITEM_EDITED_SIGNAL] = g_signal_new ( "item_edited", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, G_STRUCT_OFFSET (VikTreeviewClass, item_edited), NULL, NULL, gtk_marshal_VOID__POINTER_POINTER, G_TYPE_NONE, 2, GTK_TYPE_POINTER, G_TYPE_POINTER); /* VOID__UINT_POINTER: kinda hack-ish, but it works. */ treeview_signals[VT_ITEM_TOGGLED_SIGNAL] = g_signal_new ( "item_toggled", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, G_STRUCT_OFFSET (VikTreeviewClass, item_toggled), NULL, NULL, g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1, GTK_TYPE_POINTER ); } static void vik_treeview_edited_cb (GtkCellRendererText *cell, gchar *path_str, const gchar *new_name, VikTreeview *vt) { GtkTreeIter iter; /* get type and data */ vik_treeview_get_iter_from_path_str ( vt, &iter, path_str ); g_signal_emit ( G_OBJECT(vt), treeview_signals[VT_ITEM_EDITED_SIGNAL], 0, &iter, new_name ); } static void vik_treeview_toggled_cb (GtkCellRendererToggle *cell, gchar *path_str, VikTreeview *vt) { GtkTreeIter iter_toggle; GtkTreeIter iter_selected; /* get type and data */ vik_treeview_get_iter_from_path_str ( vt, &iter_toggle, path_str ); GtkTreePath *tp_toggle = gtk_tree_model_get_path ( vt->model, &iter_toggle ); if ( gtk_tree_selection_get_selected ( gtk_tree_view_get_selection ( GTK_TREE_VIEW ( vt ) ), NULL, &iter_selected ) ) { GtkTreePath *tp_selected = gtk_tree_model_get_path ( vt->model, &iter_selected ); if ( gtk_tree_path_compare ( tp_toggle, tp_selected ) ) // Toggle set on different path // therefore prevent subsequent auto selection (otherwise no action needed) vt->was_a_toggle = TRUE; gtk_tree_path_free ( tp_selected ); } else // Toggle set on new path // therefore prevent subsequent auto selection vt->was_a_toggle = TRUE; gtk_tree_path_free ( tp_toggle ); g_signal_emit ( G_OBJECT(vt), treeview_signals[VT_ITEM_TOGGLED_SIGNAL], 0, &iter_toggle ); } /* Inspired by GTK+ test * http://git.gnome.org/browse/gtk+/tree/tests/testtooltips.c */ static gboolean vik_treeview_tooltip_cb (GtkWidget *widget, gint x, gint y, gboolean keyboard_tip, GtkTooltip *tooltip, gpointer data) { GtkTreeIter iter; GtkTreeView *tree_view = GTK_TREE_VIEW (widget); GtkTreeModel *model = gtk_tree_view_get_model (tree_view); GtkTreePath *path = NULL; char buffer[256]; if (!gtk_tree_view_get_tooltip_context (tree_view, &x, &y, keyboard_tip, &model, &path, &iter)) return FALSE; /* ATM normally treeview doesn't call into layers - maybe another level of redirection required? */ gint rv; gtk_tree_model_get (model, &iter, TYPE_COLUMN, &rv, -1); if ( rv == VIK_TREEVIEW_TYPE_SUBLAYER ) { gtk_tree_model_get (model, &iter, ITEM_DATA_COLUMN, &rv, -1); gpointer sublayer; gtk_tree_model_get (model, &iter, ITEM_POINTER_COLUMN, &sublayer, -1); gpointer parent; gtk_tree_model_get (model, &iter, ITEM_PARENT_COLUMN, &parent, -1); g_snprintf (buffer, sizeof(buffer), "%s", vik_layer_sublayer_tooltip (VIK_LAYER(parent), rv, sublayer)); } else if ( rv == VIK_TREEVIEW_TYPE_LAYER ) { gpointer layer; gtk_tree_model_get (model, &iter, ITEM_POINTER_COLUMN, &layer, -1); g_snprintf (buffer, sizeof(buffer), "%s", vik_layer_layer_tooltip (VIK_LAYER(layer))); } else { gtk_tree_path_free (path); return FALSE; } // Don't display null strings :) if ( strncmp (buffer, "(null)", 6) == 0 ) { gtk_tree_path_free (path); return FALSE; } else { // No point in using (Pango) markup verson - gtk_tooltip_set_markup() // especially as waypoint comments may well contain HTML markup which confuses the pango markup parser // This plain text is probably faster too. gtk_tooltip_set_text (tooltip, buffer); } gtk_tree_view_set_tooltip_row (tree_view, tooltip, path); gtk_tree_path_free (path); return TRUE; } VikTreeview *vik_treeview_new () { return VIK_TREEVIEW ( g_object_new ( VIK_TREEVIEW_TYPE, NULL ) ); } gint vik_treeview_item_get_type ( VikTreeview *vt, GtkTreeIter *iter ) { gint rv; TREEVIEW_GET ( vt->model, iter, TYPE_COLUMN, &rv ); return rv; } gchar* vik_treeview_item_get_name ( VikTreeview *vt, GtkTreeIter *iter ) { gchar *rv; TREEVIEW_GET ( vt->model, iter, NAME_COLUMN, &rv ); return rv; } gint vik_treeview_item_get_data ( VikTreeview *vt, GtkTreeIter *iter ) { gint rv; TREEVIEW_GET ( vt->model, iter, ITEM_DATA_COLUMN, &rv ); return rv; } gpointer vik_treeview_item_get_pointer ( VikTreeview *vt, GtkTreeIter *iter ) { gpointer rv; TREEVIEW_GET ( vt->model, iter, ITEM_POINTER_COLUMN, &rv ); return rv; } void vik_treeview_item_set_pointer ( VikTreeview *vt, GtkTreeIter *iter, gpointer pointer ) { gtk_tree_store_set ( GTK_TREE_STORE(vt->model), iter, ITEM_POINTER_COLUMN, pointer, -1 ); } gpointer vik_treeview_item_get_parent ( VikTreeview *vt, GtkTreeIter *iter ) { gpointer rv; TREEVIEW_GET ( vt->model, iter, ITEM_PARENT_COLUMN, &rv ); return rv; } gboolean vik_treeview_get_iter_from_path_str ( VikTreeview *vt, GtkTreeIter *iter, const gchar *path_str ) { return gtk_tree_model_get_iter_from_string ( GTK_TREE_MODEL(vt->model), iter, path_str ); } static void vik_treeview_add_columns ( VikTreeview *vt ) { gint col_offset; GtkCellRenderer *renderer; GtkTreeViewColumn *column; /* Layer column */ renderer = gtk_cell_renderer_text_new (); g_signal_connect (renderer, "edited", G_CALLBACK (vik_treeview_edited_cb), vt); g_object_set (G_OBJECT (renderer), "xalign", 0.0, "ellipsize", PANGO_ELLIPSIZE_END, NULL); col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (vt), -1, _("Layer Name"), renderer, "text", NAME_COLUMN, "editable", EDITABLE_COLUMN, NULL); /* ATM the minimum overall width (and starting default) of the treeview size is determined by the buttons added to the bottom of the layerspanel */ column = gtk_tree_view_get_column (GTK_TREE_VIEW (vt), col_offset - 1); gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column), GTK_TREE_VIEW_COLUMN_FIXED); gtk_tree_view_column_set_expand (GTK_TREE_VIEW_COLUMN (column), TRUE); /* Layer type */ renderer = gtk_cell_renderer_pixbuf_new (); g_object_set (G_OBJECT (renderer), "xalign", 0.5, NULL); col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (vt), -1, "", renderer, "pixbuf", ICON_COLUMN, NULL); column = gtk_tree_view_get_column (GTK_TREE_VIEW (vt), col_offset - 1); gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column), GTK_TREE_VIEW_COLUMN_AUTOSIZE); /* Layer visible */ renderer = gtk_cell_renderer_toggle_new (); g_object_set (G_OBJECT (renderer), "xalign", 0.5, NULL); g_signal_connect (renderer, "toggled", G_CALLBACK (vik_treeview_toggled_cb), vt); col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (vt), -1, "", renderer, "active", VISIBLE_COLUMN, "visible", HAS_VISIBLE_COLUMN, "activatable", HAS_VISIBLE_COLUMN, NULL); column = gtk_tree_view_get_column (GTK_TREE_VIEW (vt), col_offset - 1); gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column), GTK_TREE_VIEW_COLUMN_AUTOSIZE); g_object_set (GTK_TREE_VIEW (vt), "has-tooltip", TRUE, NULL); g_signal_connect (GTK_TREE_VIEW (vt), "query-tooltip", G_CALLBACK (vik_treeview_tooltip_cb), vt); } static void select_cb(GtkTreeSelection *selection, gpointer data) { VikTreeview *vt = data; gint type; GtkTreeIter iter, parent; VikLayer *vl; VikWindow * vw; gpointer tmp_layer; VikLayer *tmp_vl = NULL; gint tmp_subtype = 0; gint tmp_type = VIK_TREEVIEW_TYPE_LAYER; if (!gtk_tree_selection_get_selected(selection, NULL, &iter)) return; type = vik_treeview_item_get_type( vt, &iter); /* Find the Sublayer type if possible */ tmp_layer = vik_treeview_item_get_pointer ( vt, &iter ); if (tmp_layer) { if (type == VIK_TREEVIEW_TYPE_SUBLAYER) { tmp_vl = VIK_LAYER(vik_treeview_item_get_parent(vt, &iter)); tmp_subtype = vik_treeview_item_get_data(vt, &iter); tmp_type = VIK_TREEVIEW_TYPE_SUBLAYER; } } else { tmp_subtype = vik_treeview_item_get_data(vt, &iter); tmp_type = VIK_TREEVIEW_TYPE_SUBLAYER; } /* Go up the tree to find the Vik Layer */ while ( type != VIK_TREEVIEW_TYPE_LAYER ) { if ( ! vik_treeview_item_get_parent_iter ( vt, &iter, &parent ) ) return; iter = parent; type = vik_treeview_item_get_type (vt, &iter ); } vl = VIK_LAYER( vik_treeview_item_get_pointer ( vt, &iter ) ); vw = VIK_WINDOW(VIK_GTK_WINDOW_FROM_LAYER(vl)); vik_window_selected_layer(vw, vl); if (tmp_vl == NULL) tmp_vl = vl; /* Apply settings now we have the all details */ if ( vik_layer_selected ( tmp_vl, tmp_subtype, tmp_layer, tmp_type, vik_window_layers_panel(vw) ) ) { /* Redraw required */ vik_layers_panel_emit_update ( vik_window_layers_panel(vw) ); } } static gboolean vik_treeview_selection_filter(GtkTreeSelection *selection, GtkTreeModel *model, GtkTreePath *path, gboolean path_currently_selected, gpointer data) { VikTreeview *vt = data; if (vt->was_a_toggle) { vt->was_a_toggle = FALSE; return FALSE; } return TRUE; } void vik_treeview_init ( VikTreeview *vt ) { guint16 i; vt->was_a_toggle = FALSE; vt->model = GTK_TREE_MODEL(gtk_tree_store_new ( NUM_COLUMNS, G_TYPE_STRING, G_TYPE_BOOLEAN, GDK_TYPE_PIXBUF, G_TYPE_INT, G_TYPE_POINTER, G_TYPE_POINTER, G_TYPE_INT, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN )); /* create tree view */ gtk_tree_selection_set_select_function(gtk_tree_view_get_selection (GTK_TREE_VIEW(vt)), vik_treeview_selection_filter, vt, NULL); gtk_tree_view_set_model ( GTK_TREE_VIEW(vt), vt->model ); vik_treeview_add_columns ( vt ); g_object_unref (vt->model); gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (vt), TRUE); gtk_tree_selection_set_mode (gtk_tree_view_get_selection (GTK_TREE_VIEW (vt)), GTK_SELECTION_SINGLE); /* Override treestore's dnd methods only; this is easier than deriving from GtkTreeStore. * The downside is that all treestores will have this behavior, so this needs to be * changed if we add more treeviews in the future. //Alex */ if (1) { GtkTreeDragSourceIface *isrc; GtkTreeDragDestIface *idest; isrc = g_type_interface_peek (g_type_class_peek(G_OBJECT_TYPE(vt->model)), GTK_TYPE_TREE_DRAG_SOURCE); isrc->drag_data_delete = vik_treeview_drag_data_delete; idest = g_type_interface_peek (g_type_class_peek(G_OBJECT_TYPE(vt->model)), GTK_TYPE_TREE_DRAG_DEST); idest->drag_data_received = vik_treeview_drag_data_received; } for ( i = 0; i < VIK_LAYER_NUM_TYPES; i++ ) vt->layer_type_icons[i] = vik_layer_load_icon ( i ); /* if icon can't be loaded, it will be null and simply not be shown. */ gtk_tree_view_set_reorderable (GTK_TREE_VIEW(vt), TRUE); g_signal_connect(gtk_tree_view_get_selection (GTK_TREE_VIEW (vt)), "changed", G_CALLBACK(select_cb), vt); } gboolean vik_treeview_item_get_parent_iter ( VikTreeview *vt, GtkTreeIter *iter, GtkTreeIter *parent ) { return gtk_tree_model_iter_parent ( GTK_TREE_MODEL(vt->model), parent, iter ); } gboolean vik_treeview_move_item ( VikTreeview *vt, GtkTreeIter *iter, gboolean up ) { gint t = vik_treeview_item_get_type ( vt, iter ); if ( t == VIK_TREEVIEW_TYPE_LAYER ) { GtkTreeIter switch_iter; if (up) { /* iter to path to iter */ GtkTreePath *path = gtk_tree_model_get_path ( vt->model, iter ); if ( !gtk_tree_path_prev ( path ) || !gtk_tree_model_get_iter ( vt->model, &switch_iter, path ) ) { gtk_tree_path_free ( path ); return FALSE; } gtk_tree_path_free ( path ); } else { switch_iter = *iter; if ( !gtk_tree_model_iter_next ( vt->model, &switch_iter ) ) return FALSE; } gtk_tree_store_swap ( GTK_TREE_STORE(vt->model), iter, &switch_iter ); return TRUE; /* now, the easy part. actually switching them, not the GUI */ } /* if item is map */ return FALSE; } gboolean vik_treeview_get_iter_at_pos ( VikTreeview *vt, GtkTreeIter *iter, gint x, gint y ) { GtkTreePath *path; gtk_tree_view_get_path_at_pos ( GTK_TREE_VIEW(vt), x, y, &path, NULL, NULL, NULL ); if ( ! path ) return FALSE; gtk_tree_model_get_iter (GTK_TREE_MODEL(vt->model), iter, path); gtk_tree_path_free ( path ); return TRUE; } /* Option to ensure visible */ void vik_treeview_select_iter ( VikTreeview *vt, GtkTreeIter *iter, gboolean view_all ) { GtkTreeView *tree_view = GTK_TREE_VIEW ( vt ); GtkTreePath *path; if ( view_all ) { path = gtk_tree_model_get_path ( gtk_tree_view_get_model (tree_view), iter ); gtk_tree_view_expand_to_path ( tree_view, path ); } gtk_tree_selection_select_iter ( gtk_tree_view_get_selection ( tree_view ), iter ); if ( view_all ) { gtk_tree_view_scroll_to_cell ( tree_view, path, gtk_tree_view_get_expander_column (tree_view), FALSE, 0.0, 0.0 ); gtk_tree_path_free ( path ); } } gboolean vik_treeview_get_selected_iter ( VikTreeview *vt, GtkTreeIter *iter ) { return gtk_tree_selection_get_selected ( gtk_tree_view_get_selection ( GTK_TREE_VIEW ( vt ) ), NULL, iter ); } void vik_treeview_item_delete ( VikTreeview *vt, GtkTreeIter *iter ) { gtk_tree_store_remove ( GTK_TREE_STORE(vt->model), iter ); } /* Treeview Reform Project */ void vik_treeview_item_set_icon ( VikTreeview *vt, GtkTreeIter *iter, const GdkPixbuf *icon ) { g_return_if_fail ( iter != NULL ); gtk_tree_store_set ( GTK_TREE_STORE(vt->model), iter, ICON_COLUMN, icon, -1); } void vik_treeview_item_set_name ( VikTreeview *vt, GtkTreeIter *iter, const gchar *to ) { g_return_if_fail ( iter != NULL && to != NULL ); gtk_tree_store_set ( GTK_TREE_STORE(vt->model), iter, NAME_COLUMN, to, -1); } void vik_treeview_item_set_visible ( VikTreeview *vt, GtkTreeIter *iter, gboolean to ) { g_return_if_fail ( iter != NULL ); gtk_tree_store_set ( GTK_TREE_STORE(vt->model), iter, VISIBLE_COLUMN, to, -1 ); } void vik_treeview_expand ( VikTreeview *vt, GtkTreeIter *iter ) { GtkTreePath *path; path = gtk_tree_model_get_path ( vt->model, iter ); gtk_tree_view_expand_row ( GTK_TREE_VIEW(vt), path, FALSE ); gtk_tree_path_free ( path ); } void vik_treeview_item_select ( VikTreeview *vt, GtkTreeIter *iter ) { gtk_tree_selection_select_iter ( gtk_tree_view_get_selection ( GTK_TREE_VIEW ( vt ) ), iter ); } void vik_treeview_item_unselect ( VikTreeview *vt, GtkTreeIter *iter ) { gtk_tree_selection_unselect_iter ( gtk_tree_view_get_selection ( GTK_TREE_VIEW ( vt ) ), iter ); } void vik_treeview_add_layer ( VikTreeview *vt, GtkTreeIter *parent_iter, GtkTreeIter *iter, const gchar *name, gpointer parent, gpointer item, gint data, gint icon_type ) { g_assert ( iter != NULL ); g_assert ( icon_type < VIK_LAYER_NUM_TYPES ); gtk_tree_store_prepend ( GTK_TREE_STORE(vt->model), iter, parent_iter ); gtk_tree_store_set ( GTK_TREE_STORE(vt->model), iter, NAME_COLUMN, name, VISIBLE_COLUMN, TRUE, TYPE_COLUMN, VIK_TREEVIEW_TYPE_LAYER, ITEM_PARENT_COLUMN, parent, ITEM_POINTER_COLUMN, item, ITEM_DATA_COLUMN, data, HAS_VISIBLE_COLUMN, TRUE, EDITABLE_COLUMN, parent == NULL ? FALSE : TRUE, ICON_COLUMN, icon_type >= 0 ? vt->layer_type_icons[icon_type] : NULL, -1 ); } void vik_treeview_insert_layer ( VikTreeview *vt, GtkTreeIter *parent_iter, GtkTreeIter *iter, const gchar *name, gpointer parent, gpointer item, gint data, gint icon_type, GtkTreeIter *sibling ) { g_assert ( iter != NULL ); g_assert ( icon_type < VIK_LAYER_NUM_TYPES ); if (sibling) { gtk_tree_store_insert_before ( GTK_TREE_STORE(vt->model), iter, parent_iter, sibling ); } else { gtk_tree_store_append ( GTK_TREE_STORE(vt->model), iter, parent_iter ); } gtk_tree_store_set ( GTK_TREE_STORE(vt->model), iter, NAME_COLUMN, name, VISIBLE_COLUMN, TRUE, TYPE_COLUMN, VIK_TREEVIEW_TYPE_LAYER, ITEM_PARENT_COLUMN, parent, ITEM_POINTER_COLUMN, item, ITEM_DATA_COLUMN, data, HAS_VISIBLE_COLUMN, TRUE, EDITABLE_COLUMN, TRUE, ICON_COLUMN, icon_type >= 0 ? vt->layer_type_icons[icon_type] : NULL, -1 ); } void vik_treeview_add_sublayer ( VikTreeview *vt, GtkTreeIter *parent_iter, GtkTreeIter *iter, const gchar *name, gpointer parent, gpointer item, gint data, GdkPixbuf *icon, gboolean has_visible, gboolean editable ) { g_assert ( iter != NULL ); gtk_tree_store_prepend ( GTK_TREE_STORE(vt->model), iter, parent_iter ); gtk_tree_store_set ( GTK_TREE_STORE(vt->model), iter, NAME_COLUMN, name, VISIBLE_COLUMN, TRUE, TYPE_COLUMN, VIK_TREEVIEW_TYPE_SUBLAYER, ITEM_PARENT_COLUMN, parent, ITEM_POINTER_COLUMN, item, ITEM_DATA_COLUMN, data, HAS_VISIBLE_COLUMN, has_visible, EDITABLE_COLUMN, editable, ICON_COLUMN, icon, -1 ); } #ifdef VIK_CONFIG_ALPHABETIZED_TRW void vik_treeview_sublayer_realphabetize ( VikTreeview *vt, GtkTreeIter *iter, const gchar *newname ) { GtkTreeIter search_iter, parent_iter; gchar *search_name = NULL; g_assert ( iter != NULL ); gtk_tree_model_iter_parent ( vt->model, &parent_iter, iter ); g_assert ( gtk_tree_model_iter_children ( vt->model, &search_iter, &parent_iter ) ); do { gtk_tree_model_get ( vt->model, &search_iter, NAME_COLUMN, &search_name, -1 ); if ( strcmp ( search_name, newname ) > 0 ) /* not >= or would trip on itself */ { gtk_tree_store_move_before ( GTK_TREE_STORE(vt->model), iter, &search_iter ); g_free (search_name); search_name = NULL; return; } g_free (search_name); search_name = NULL; } while ( gtk_tree_model_iter_next ( vt->model, &search_iter ) ); gtk_tree_store_move_before ( GTK_TREE_STORE(vt->model), iter, NULL ); } void vik_treeview_add_sublayer_alphabetized ( VikTreeview *vt, GtkTreeIter *parent_iter, GtkTreeIter *iter, const gchar *name, gpointer parent, gpointer item, gint data, GdkPixbuf *icon, gboolean has_visible, gboolean editable ) { GtkTreeIter search_iter; gchar *search_name = NULL; g_assert ( iter != NULL ); if ( gtk_tree_model_iter_children ( vt->model, &search_iter, parent_iter ) ) { gboolean found_greater_string = FALSE; do { gtk_tree_model_get ( vt->model, &search_iter, NAME_COLUMN, &search_name, -1 ); if ( strcmp ( search_name, name ) >= 0 ) { gtk_tree_store_insert_before ( GTK_TREE_STORE(vt->model), iter, parent_iter, &search_iter ); found_greater_string = TRUE; g_free (search_name); search_name = NULL; break; } g_free (search_name); search_name = NULL; } while ( gtk_tree_model_iter_next ( vt->model, &search_iter ) ); if ( ! found_greater_string ) gtk_tree_store_append ( GTK_TREE_STORE(vt->model), iter, parent_iter ); } else gtk_tree_store_prepend ( GTK_TREE_STORE(vt->model), iter, parent_iter ); gtk_tree_store_set ( GTK_TREE_STORE(vt->model), iter, NAME_COLUMN, name, VISIBLE_COLUMN, TRUE, TYPE_COLUMN, VIK_TREEVIEW_TYPE_SUBLAYER, ITEM_PARENT_COLUMN, parent, ITEM_POINTER_COLUMN, item, ITEM_DATA_COLUMN, data, HAS_VISIBLE_COLUMN, has_visible, EDITABLE_COLUMN, editable, ICON_COLUMN, icon, -1 ); } #endif static void vik_treeview_finalize ( GObject *gob ) { VikTreeview *vt = VIK_TREEVIEW ( gob ); guint16 i; for ( i = 0; i < VIK_LAYER_NUM_TYPES; i++ ) if ( vt->layer_type_icons[i] != NULL ) g_object_unref ( G_OBJECT(vt->layer_type_icons[i]) ); G_OBJECT_CLASS(parent_class)->finalize(gob); } static gboolean vik_treeview_drag_data_received (GtkTreeDragDest *drag_dest, GtkTreePath *dest, GtkSelectionData *selection_data) { GtkTreeModel *tree_model; GtkTreeModel *src_model = NULL; GtkTreePath *src_path = NULL, *dest_cp = NULL; gboolean retval = FALSE; GtkTreeIter src_iter, root_iter, dest_parent; VikTreeview *vt; VikLayer *vl; g_return_val_if_fail (GTK_IS_TREE_STORE (drag_dest), FALSE); tree_model = GTK_TREE_MODEL (drag_dest); if (gtk_tree_get_row_drag_data (selection_data, &src_model, &src_path) && src_model == tree_model) { /* * Copy src_path to dest. There are two subcases here, depending on what * is being dragged. * * 1. src_path is a layer. In this case, interpret the drop * as a request to move the layer to a different aggregate layer. * If the destination is not an aggregate layer, use the first * ancestor that is. * * 2. src_path is a sublayer. In this case, find ancestors of * both source and destination nodes who are full layers, * and call the move method of that layer type. * */ if (!gtk_tree_model_get_iter (src_model, &src_iter, src_path)) { goto out; } if (!gtk_tree_path_compare(src_path, dest)) { goto out; } dest_cp = gtk_tree_path_copy (dest); gtk_tree_model_get_iter_first(tree_model, &root_iter); TREEVIEW_GET(tree_model, &root_iter, ITEM_POINTER_COLUMN, &vl); vt = vl->vt; if (gtk_tree_path_get_depth(dest_cp)>1) { /* can't be sibling of top layer */ VikLayer *vl_src, *vl_dest; /* Find the first ancestor that is a full layer, and store in dest_parent. */ do { gtk_tree_path_up(dest_cp); gtk_tree_model_get_iter (src_model, &dest_parent, dest_cp); } while (gtk_tree_path_get_depth(dest_cp)>1 && vik_treeview_item_get_type(vt, &dest_parent) != VIK_TREEVIEW_TYPE_LAYER); g_assert ( vik_treeview_item_get_parent(vt, &src_iter) ); vl_src = vik_treeview_item_get_parent(vt, &src_iter); vl_dest = vik_treeview_item_get_pointer(vt, &dest_parent); /* TODO: might want to allow different types, and let the clients handle how they want */ if (vl_src->type == vl_dest->type && vik_layer_get_interface(vl_dest->type)->drag_drop_request) { // g_print("moving an item from layer '%s' into layer '%s'\n", vl_src->name, vl_dest->name); vik_layer_get_interface(vl_dest->type)->drag_drop_request(vl_src, vl_dest, &src_iter, dest); } } } out: if (dest_cp) gtk_tree_path_free(dest_cp); if (src_path) gtk_tree_path_free (src_path); return retval; } /* * This may not be necessary. */ static gboolean vik_treeview_drag_data_delete ( GtkTreeDragSource *drag_source, GtkTreePath *path ) { gchar *s_dest = gtk_tree_path_to_string(path); g_print(_("delete data from %s\n"), s_dest); g_free(s_dest); return FALSE; } viking-1.4.2/src/expedia.h0000644000175000017500000000200612122673673012314 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef __VIKING_EXPEDIA_H #define __VIKING_EXPEDIA_H #include #include "vikcoord.h" #include "mapcoord.h" G_BEGIN_DECLS void expedia_init(); G_END_DECLS #endif viking-1.4.2/src/vikwebtoolcenter.c0000644000175000017500000001600312175546146014262 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2008, Guilhem Bonnefille * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "vikwebtoolcenter.h" #include #include #include #include "util.h" #include "globals.h" static GObjectClass *parent_class; static void webtool_center_finalize ( GObject *gob ); static guint8 webtool_center_mpp_to_zoom ( VikWebtool *self, gdouble mpp ); static gchar *webtool_center_get_url ( VikWebtool *vw, VikWindow *vwindow ); typedef struct _VikWebtoolCenterPrivate VikWebtoolCenterPrivate; struct _VikWebtoolCenterPrivate { gchar *url; }; #define WEBTOOL_CENTER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), \ VIK_WEBTOOL_CENTER_TYPE, \ VikWebtoolCenterPrivate)) G_DEFINE_TYPE (VikWebtoolCenter, vik_webtool_center, VIK_WEBTOOL_TYPE) enum { PROP_0, PROP_URL, }; static void webtool_center_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { VikWebtoolCenter *self = VIK_WEBTOOL_CENTER (object); VikWebtoolCenterPrivate *priv = WEBTOOL_CENTER_GET_PRIVATE (self); switch (property_id) { case PROP_URL: g_free (priv->url); priv->url = g_value_dup_string (value); g_debug ("VikWebtoolCenter.url: %s", priv->url); break; default: /* We don't have any other property... */ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void webtool_center_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { VikWebtoolCenter *self = VIK_WEBTOOL_CENTER (object); VikWebtoolCenterPrivate *priv = WEBTOOL_CENTER_GET_PRIVATE (self); switch (property_id) { case PROP_URL: g_value_set_string (value, priv->url); break; default: /* We don't have any other property... */ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void vik_webtool_center_class_init ( VikWebtoolCenterClass *klass ) { GObjectClass *gobject_class; VikWebtoolClass *base_class; GParamSpec *pspec; gobject_class = G_OBJECT_CLASS (klass); gobject_class->finalize = webtool_center_finalize; gobject_class->set_property = webtool_center_set_property; gobject_class->get_property = webtool_center_get_property; pspec = g_param_spec_string ("url", "Template Url", "Set the template url", VIKING_URL /* default value */, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE); g_object_class_install_property (gobject_class, PROP_URL, pspec); parent_class = g_type_class_peek_parent (klass); base_class = VIK_WEBTOOL_CLASS ( klass ); base_class->get_url = webtool_center_get_url; klass->mpp_to_zoom = webtool_center_mpp_to_zoom; g_type_class_add_private (klass, sizeof (VikWebtoolCenterPrivate)); } VikWebtoolCenter *vik_webtool_center_new () { return VIK_WEBTOOL_CENTER ( g_object_new ( VIK_WEBTOOL_CENTER_TYPE, NULL ) ); } VikWebtoolCenter *vik_webtool_center_new_with_members ( const gchar *label, const gchar *url ) { VikWebtoolCenter *result = VIK_WEBTOOL_CENTER ( g_object_new ( VIK_WEBTOOL_CENTER_TYPE, "label", label, "url", url, NULL ) ); return result; } static void vik_webtool_center_init ( VikWebtoolCenter *self ) { VikWebtoolCenterPrivate *priv = WEBTOOL_CENTER_GET_PRIVATE (self); priv->url = NULL; } static void webtool_center_finalize ( GObject *gob ) { VikWebtoolCenterPrivate *priv = WEBTOOL_CENTER_GET_PRIVATE ( gob ); g_free ( priv->url ); priv->url = NULL; G_OBJECT_CLASS(parent_class)->finalize(gob); } /* 1 << (x) is like a 2**(x) */ #define GZ(x) (1<<(x)) static const gdouble scale_mpps[] = { GZ(0), GZ(1), GZ(2), GZ(3), GZ(4), GZ(5), GZ(6), GZ(7), GZ(8), GZ(9), GZ(10), GZ(11), GZ(12), GZ(13), GZ(14), GZ(15), GZ(16), GZ(17) }; static const gint num_scales = (sizeof(scale_mpps) / sizeof(scale_mpps[0])); #define ERROR_MARGIN 0.01 static guint8 webtool_center_mpp_to_zoom ( VikWebtool *self, gdouble mpp ) { gint i; for ( i = 0; i < num_scales; i++ ) { if ( ABS(scale_mpps[i] - mpp) < ERROR_MARGIN ) { g_debug ( "webtool_center_mpp_to_zoom: %f -> %d", mpp, i ); return i; } } // Handle mpp smaller than 1 // return a useful value such that '17 - this number' gives a natural number. // Ideally should return '-1' or '0.5' but that's tricky with an unsigned int type! // (i.e. should rework to support zoom levels of 18 or 19) return 0; } static gchar *webtool_center_get_url ( VikWebtool *self, VikWindow *vwindow ) { VikWebtoolCenterPrivate *priv = NULL; VikViewport *viewport = NULL; const VikCoord *coord = NULL; guint8 zoom = 0; struct LatLon ll; gchar strlat[G_ASCII_DTOSTR_BUF_SIZE], strlon[G_ASCII_DTOSTR_BUF_SIZE]; priv = WEBTOOL_CENTER_GET_PRIVATE (self); viewport = vik_window_viewport ( vwindow ); // Coords coord = vik_viewport_get_center ( viewport ); vik_coord_to_latlon ( coord, &ll ); // zoom - ideally x & y factors need to be the same otherwise use a default if ( vik_viewport_get_xmpp ( viewport ) == vik_viewport_get_ympp ( viewport ) ) zoom = vik_webtool_center_mpp_to_zoom ( self, vik_viewport_get_zoom ( viewport ) ); else zoom = 1.0; // Cannot simply use g_strdup_printf and gdouble due to locale. // As we compute an URL, we have to think in C locale. g_ascii_dtostr (strlat, G_ASCII_DTOSTR_BUF_SIZE, ll.lat); g_ascii_dtostr (strlon, G_ASCII_DTOSTR_BUF_SIZE, ll.lon); return g_strdup_printf ( priv->url, strlat, strlon, 17-zoom ); } guint8 vik_webtool_center_mpp_to_zoom (VikWebtool *self, gdouble mpp) { return VIK_WEBTOOL_CENTER_GET_CLASS( self )->mpp_to_zoom( self, mpp ); } viking-1.4.2/src/globals.c0000644000175000017500000002212612175546146012322 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * Copyright (C) 2008, Guilhem Bonnefille * Copyright (C) 2010, Rob Norris * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef HAVE_STDLIB_H #include #endif #include #include "globals.h" #include "preferences.h" #include "math.h" gboolean vik_debug = FALSE; gboolean vik_verbose = FALSE; gboolean vik_version = FALSE; /** * viking_version_to_number: * @version: The string of the Viking version. * This should be in the form of N.N.N.N, where the 3rd + 4th numbers are optional * Often you'll want to pass in VIKING_VERSION * * Returns: a single number useful for comparison */ gint viking_version_to_number ( gchar *version ) { // Basic method, probably can be improved gint version_number = 0; gchar** parts = g_strsplit ( version, ".", 0 ); gint part_num = 0; gchar *part = parts[part_num]; // Allow upto 4 parts to the version number while ( part && part_num < 4 ) { // Allow each part to have upto 100 version_number = version_number + ( atol(part) * pow(100, 3-part_num) ); part_num++; part = parts[part_num]; } g_strfreev ( parts ); return version_number; } static gchar * params_degree_formats[] = {"DDD", "DMM", "DMS", NULL}; static gchar * params_units_distance[] = {"Kilometres", "Miles", NULL}; static gchar * params_units_speed[] = {"km/h", "mph", "m/s", "knots", NULL}; static gchar * params_units_height[] = {"Metres", "Feet", NULL}; static VikLayerParamScale params_scales_lat[] = { {-90.0, 90.0, 0.05, 2} }; static VikLayerParamScale params_scales_long[] = { {-180.0, 180.0, 0.05, 2} }; static VikLayerParam prefs1[] = { { VIKING_PREFERENCES_NAMESPACE "degree_format", VIK_LAYER_PARAM_UINT, VIK_LAYER_GROUP_NONE, N_("Degree format:"), VIK_LAYER_WIDGET_COMBOBOX, params_degree_formats, NULL, NULL }, }; static VikLayerParam prefs2[] = { { VIKING_PREFERENCES_NAMESPACE "units_distance", VIK_LAYER_PARAM_UINT, VIK_LAYER_GROUP_NONE, N_("Distance units:"), VIK_LAYER_WIDGET_COMBOBOX, params_units_distance, NULL, NULL }, }; static VikLayerParam prefs3[] = { { VIKING_PREFERENCES_NAMESPACE "units_speed", VIK_LAYER_PARAM_UINT, VIK_LAYER_GROUP_NONE, N_("Speed units:"), VIK_LAYER_WIDGET_COMBOBOX, params_units_speed, NULL, NULL }, }; static VikLayerParam prefs4[] = { { VIKING_PREFERENCES_NAMESPACE "units_height", VIK_LAYER_PARAM_UINT, VIK_LAYER_GROUP_NONE, N_("Height units:"), VIK_LAYER_WIDGET_COMBOBOX, params_units_height, NULL, NULL }, }; static VikLayerParam prefs5[] = { { VIKING_PREFERENCES_NAMESPACE "use_large_waypoint_icons", VIK_LAYER_PARAM_BOOLEAN, VIK_LAYER_GROUP_NONE, N_("Use large waypoint icons:"), VIK_LAYER_WIDGET_CHECKBUTTON, NULL, NULL, NULL }, }; static VikLayerParam prefs6[] = { { VIKING_PREFERENCES_NAMESPACE "default_latitude", VIK_LAYER_PARAM_DOUBLE, VIK_LAYER_GROUP_NONE, N_("Default latitude:"), VIK_LAYER_WIDGET_SPINBUTTON, params_scales_lat, NULL, NULL }, }; static VikLayerParam prefs7[] = { { VIKING_PREFERENCES_NAMESPACE "default_longitude", VIK_LAYER_PARAM_DOUBLE, VIK_LAYER_GROUP_NONE, N_("Default longitude:"), VIK_LAYER_WIDGET_SPINBUTTON, params_scales_long, NULL, NULL }, }; /* External/Export Options */ static gchar * params_kml_export_units[] = {"Metric", "Statute", "Nautical", NULL}; static gchar * params_gpx_export_trk_sort[] = {N_("Alphabetical"), N_("Time"), NULL}; static VikLayerParam io_prefs[] = { { VIKING_PREFERENCES_IO_NAMESPACE "kml_export_units", VIK_LAYER_PARAM_UINT, VIK_LAYER_GROUP_NONE, N_("KML File Export Units:"), VIK_LAYER_WIDGET_COMBOBOX, params_kml_export_units, NULL, NULL }, { VIKING_PREFERENCES_IO_NAMESPACE "gpx_export_track_sort", VIK_LAYER_PARAM_UINT, VIK_LAYER_GROUP_NONE, N_("GPX Track Order:"), VIK_LAYER_WIDGET_COMBOBOX, params_gpx_export_trk_sort, NULL, NULL }, }; #ifndef WINDOWS static VikLayerParam io_prefs_non_windows[] = { { VIKING_PREFERENCES_IO_NAMESPACE "image_viewer", VIK_LAYER_PARAM_STRING, VIK_LAYER_GROUP_NONE, N_("Image Viewer:"), VIK_LAYER_WIDGET_FILEENTRY, NULL, NULL, NULL }, }; #endif static VikLayerParam io_prefs_external_gpx[] = { { VIKING_PREFERENCES_IO_NAMESPACE "external_gpx_1", VIK_LAYER_PARAM_STRING, VIK_LAYER_GROUP_NONE, N_("External GPX Program 1:"), VIK_LAYER_WIDGET_FILEENTRY, NULL, NULL, NULL }, { VIKING_PREFERENCES_IO_NAMESPACE "external_gpx_2", VIK_LAYER_PARAM_STRING, VIK_LAYER_GROUP_NONE, N_("External GPX Program 2:"), VIK_LAYER_WIDGET_FILEENTRY, NULL, NULL, NULL }, }; /* End of Options static stuff */ void a_vik_preferences_init () { g_debug ( "VIKING VERSION as number: %d", viking_version_to_number (VIKING_VERSION) ); // Defaults for the options are setup here a_preferences_register_group ( VIKING_PREFERENCES_GROUP_KEY, _("General") ); VikLayerParamData tmp; tmp.u = VIK_DEGREE_FORMAT_DMS; a_preferences_register(prefs1, tmp, VIKING_PREFERENCES_GROUP_KEY); tmp.u = VIK_UNITS_DISTANCE_KILOMETRES; a_preferences_register(prefs2, tmp, VIKING_PREFERENCES_GROUP_KEY); tmp.u = VIK_UNITS_SPEED_KILOMETRES_PER_HOUR; a_preferences_register(prefs3, tmp, VIKING_PREFERENCES_GROUP_KEY); tmp.u = VIK_UNITS_HEIGHT_METRES; a_preferences_register(prefs4, tmp, VIKING_PREFERENCES_GROUP_KEY); tmp.b = TRUE; a_preferences_register(prefs5, tmp, VIKING_PREFERENCES_GROUP_KEY); /* Maintain the default location to New York */ tmp.d = 40.714490; a_preferences_register(prefs6, tmp, VIKING_PREFERENCES_GROUP_KEY); tmp.d = -74.007130; a_preferences_register(prefs7, tmp, VIKING_PREFERENCES_GROUP_KEY); // New Tab a_preferences_register_group ( VIKING_PREFERENCES_IO_GROUP_KEY, _("Export/External") ); tmp.u = VIK_KML_EXPORT_UNITS_METRIC; a_preferences_register(&io_prefs[0], tmp, VIKING_PREFERENCES_IO_GROUP_KEY); tmp.u = VIK_GPX_EXPORT_TRK_SORT_TIME; a_preferences_register(&io_prefs[1], tmp, VIKING_PREFERENCES_IO_GROUP_KEY); #ifndef WINDOWS tmp.s = "xdg-open"; a_preferences_register(&io_prefs_non_windows[0], tmp, VIKING_PREFERENCES_IO_GROUP_KEY); #endif // JOSM for OSM editing around a GPX track tmp.s = "josm"; a_preferences_register(&io_prefs_external_gpx[0], tmp, VIKING_PREFERENCES_IO_GROUP_KEY); // Add a second external program - another OSM editor by default tmp.s = "merkaartor"; a_preferences_register(&io_prefs_external_gpx[1], tmp, VIKING_PREFERENCES_IO_GROUP_KEY); } vik_degree_format_t a_vik_get_degree_format ( ) { vik_degree_format_t format; format = a_preferences_get(VIKING_PREFERENCES_NAMESPACE "degree_format")->u; return format; } vik_units_distance_t a_vik_get_units_distance ( ) { vik_units_distance_t units; units = a_preferences_get(VIKING_PREFERENCES_NAMESPACE "units_distance")->u; return units; } vik_units_speed_t a_vik_get_units_speed ( ) { vik_units_speed_t units; units = a_preferences_get(VIKING_PREFERENCES_NAMESPACE "units_speed")->u; return units; } vik_units_height_t a_vik_get_units_height ( ) { vik_units_height_t units; units = a_preferences_get(VIKING_PREFERENCES_NAMESPACE "units_height")->u; return units; } gboolean a_vik_get_use_large_waypoint_icons ( ) { gboolean use_large_waypoint_icons; use_large_waypoint_icons = a_preferences_get(VIKING_PREFERENCES_NAMESPACE "use_large_waypoint_icons")->b; return use_large_waypoint_icons; } gdouble a_vik_get_default_lat ( ) { gdouble data; data = a_preferences_get(VIKING_PREFERENCES_NAMESPACE "default_latitude")->d; return data; } gdouble a_vik_get_default_long ( ) { gdouble data; data = a_preferences_get(VIKING_PREFERENCES_NAMESPACE "default_longitude")->d; return data; } /* External/Export Options */ vik_kml_export_units_t a_vik_get_kml_export_units ( ) { vik_kml_export_units_t units; units = a_preferences_get(VIKING_PREFERENCES_IO_NAMESPACE "kml_export_units")->u; return units; } vik_gpx_export_trk_sort_t a_vik_get_gpx_export_trk_sort ( ) { vik_gpx_export_trk_sort_t sort; sort = a_preferences_get(VIKING_PREFERENCES_IO_NAMESPACE "gpx_export_track_sort")->u; return sort; } #ifndef WINDOWS const gchar* a_vik_get_image_viewer ( ) { return a_preferences_get(VIKING_PREFERENCES_IO_NAMESPACE "image_viewer")->s; } #endif const gchar* a_vik_get_external_gpx_program_1 ( ) { return a_preferences_get(VIKING_PREFERENCES_IO_NAMESPACE "external_gpx_1")->s; } const gchar* a_vik_get_external_gpx_program_2 ( ) { return a_preferences_get(VIKING_PREFERENCES_IO_NAMESPACE "external_gpx_2")->s; } viking-1.4.2/src/vikstatus.h0000644000175000017500000000404712152216677012741 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef _VIKING_STATUS_H #define _VIKING_STATUS_H #include #include #include G_BEGIN_DECLS #define VIK_STATUSBAR_TYPE (vik_statusbar_get_type ()) #define VIK_STATUSBAR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIK_STATUSBAR_TYPE, VikStatusbar)) #define VIK_STATUSBAR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VIK_STATUSBAR_TYPE, VikStatusbarClass)) #define IS_VIK_STATUSBAR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIK_STATUSBAR_TYPE)) #define IS_VIK_STATUSBAR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VIK_STATUSBAR_TYPE)) typedef struct _VikStatusbar VikStatusbar; typedef struct _VikStatusbarClass VikStatusbarClass; struct _VikStatusbarClass { GtkStatusbarClass statusbar_class; void (* clicked) (VikStatusbar *vs, gint item); }; GType vik_statusbar_get_type (); typedef enum { VIK_STATUSBAR_TOOL, VIK_STATUSBAR_ITEMS, VIK_STATUSBAR_ZOOM, VIK_STATUSBAR_INFO, VIK_STATUSBAR_POSITION, VIK_STATUSBAR_NUM_TYPES } vik_statusbar_type_t; VikStatusbar *vik_statusbar_new (); void vik_statusbar_set_message ( VikStatusbar *vs, vik_statusbar_type_t field, const gchar *message ); G_END_DECLS #endif viking-1.4.2/src/vikfilelist.h0000644000175000017500000000351012122673673013223 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef _VIKING_FILELIST_H #define _VIKING_FILELIST_H #include #include #include G_BEGIN_DECLS #define VIK_FILE_LIST_TYPE (vik_file_list_get_type ()) #define VIK_FILE_LIST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIK_FILE_LIST_TYPE, VikFileList)) #define VIK_FILE_LIST_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VIK_FILE_LIST_TYPE, VikFileListClass)) #define IS_VIK_FILE_LIST(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIK_FILE_LIST_TYPE)) #define IS_VIK_FILE_LIST_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VIK_FILE_LIST_TYPE)) typedef struct _VikFileList VikFileList; typedef struct _VikFileListClass VikFileListClass; struct _VikFileListClass { GtkVBoxClass vbox_class; }; GType vik_file_list_get_type (); GtkWidget *vik_file_list_new ( const gchar *title ); /* result must be freed */ GList *vik_file_list_get_files ( VikFileList *vfl ); void vik_file_list_set_files ( VikFileList *vfl, GList * ); G_END_DECLS #endif viking-1.4.2/src/dir.c0000644000175000017500000000600112175546146011447 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * Copyright (C) 2012, Guilhem Bonnefille * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "viking.h" #include #ifdef HAVE_UNISTD_H #include #endif #include #include const gchar *a_get_viking_dir() { static gchar *viking_dir = NULL; // TODO: use g_get_user_config_dir ? if (!viking_dir) { const gchar *home = g_getenv("HOME"); if (!home || g_access(home, W_OK)) home = g_get_home_dir (); #ifdef HAVE_MKDTEMP if (!home || g_access(home, W_OK)) { static gchar temp[] = {"/tmp/vikXXXXXX"}; home = mkdtemp(temp); } #endif if (!home || g_access(home, W_OK)) /* Fatal error */ g_critical("Unable to find a base directory"); /* Build the name of the directory */ #ifdef __APPLE__ viking_dir = g_build_filename(home, "/Library/Application Support/Viking", NULL); #else viking_dir = g_build_filename(home, ".viking", NULL); #endif if (g_file_test(viking_dir, G_FILE_TEST_EXISTS) == FALSE) g_mkdir(viking_dir, 0755); } return viking_dir; } /** * a_get_viking_data_home: * * Retrieves the XDG compliant user's data directory. * * Retuns: the directory (can be NULL). Should be freed with g_free. */ gchar * a_get_viking_data_home() { const gchar *xdg_data_home = g_getenv("XDG_DATA_HOME"); if (xdg_data_home) { return g_build_filename(xdg_data_home, PACKAGE, NULL); } else { return NULL; } } /** * a_get_viking_data_path: * * Retrieves the configuration path. * * Returns: list of directories to scan for data. Should be freed with g_strfreev. */ gchar ** a_get_viking_data_path() { const gchar *xdg_data_dirs = g_getenv("XDG_DATA_DIRS"); if (xdg_data_dirs == NULL) { /* Default value specified in http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html */ xdg_data_dirs = "/usr/local/share/:/usr/share/"; } gchar **data_path = g_strsplit(xdg_data_dirs, ":", 0); /* Append the viking dir */ gchar **path; for (path = data_path ; *path != NULL ; path++) { gchar *dir = *path; *path = g_build_filename(dir, PACKAGE, NULL); g_free(dir); } return data_path; } viking-1.4.2/src/viktmsmapsource.c0000644000175000017500000003061612175546146014136 00000000000000/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * viking * Copyright (C) 2010, Guilhem Bonnefille * * viking is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * viking is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ /** * SECTION:viktmsmapsource * @short_description: the class for TMS oriented map sources * * The #VikTmsMapSource class handles TMS oriented map sources. * * The tiles are in 'equirectangular'. * http://en.wikipedia.org/wiki/Equirectangular_projection * * Such service is also a type of TMS (Tile Map Service) as defined in * OSGeo's wiki. * http://wiki.osgeo.org/wiki/Tile_Map_Service_Specification * Following this specification, the protocol handled by this class * follows the global-geodetic profile. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef HAVE_MATH_H #include #endif #include "globals.h" #include "viktmsmapsource.h" 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 _supports_download_only_new ( VikMapSource *self ); static gboolean _is_direct_file_access ( VikMapSource *self ); static gchar *_get_uri( VikMapSourceDefault *self, MapCoord *src ); static gchar *_get_hostname( VikMapSourceDefault *self ); static DownloadMapOptions *_get_download_options( VikMapSourceDefault *self ); typedef struct _VikTmsMapSourcePrivate VikTmsMapSourcePrivate; struct _VikTmsMapSourcePrivate { gchar *hostname; gchar *url; DownloadMapOptions options; }; #define VIK_TMS_MAP_SOURCE_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), VIK_TYPE_TMS_MAP_SOURCE, VikTmsMapSourcePrivate)) /* properties */ enum { PROP_0, PROP_HOSTNAME, PROP_URL, PROP_REFERER, PROP_FOLLOW_LOCATION, PROP_CHECK_FILE_SERVER_TIME, }; G_DEFINE_TYPE (VikTmsMapSource, vik_tms_map_source, VIK_TYPE_MAP_SOURCE_DEFAULT); static void vik_tms_map_source_init (VikTmsMapSource *self) { /* initialize the object here */ VikTmsMapSourcePrivate *priv = VIK_TMS_MAP_SOURCE_PRIVATE (self); priv->hostname = NULL; priv->url = NULL; priv->options.referer = NULL; priv->options.follow_location = 0; priv->options.check_file = a_check_map_file; priv->options.check_file_server_time = FALSE; g_object_set (G_OBJECT (self), "tilesize-x", 256, "tilesize-y", 256, "drawmode", VIK_VIEWPORT_DRAWMODE_LATLON, NULL); } static void vik_tms_map_source_finalize (GObject *object) { VikTmsMapSource *self = VIK_TMS_MAP_SOURCE (object); VikTmsMapSourcePrivate *priv = VIK_TMS_MAP_SOURCE_PRIVATE (self); g_free (priv->hostname); priv->hostname = NULL; g_free (priv->url); priv->url = NULL; g_free (priv->options.referer); priv->options.referer = NULL; G_OBJECT_CLASS (vik_tms_map_source_parent_class)->finalize (object); } static void vik_tms_map_source_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { VikTmsMapSource *self = VIK_TMS_MAP_SOURCE (object); VikTmsMapSourcePrivate *priv = VIK_TMS_MAP_SOURCE_PRIVATE (self); switch (property_id) { case PROP_HOSTNAME: g_free (priv->hostname); priv->hostname = g_value_dup_string (value); break; case PROP_URL: g_free (priv->url); priv->url = g_value_dup_string (value); break; case PROP_REFERER: g_free (priv->options.referer); priv->options.referer = g_value_dup_string (value); break; case PROP_FOLLOW_LOCATION: priv->options.follow_location = g_value_get_long (value); break; case PROP_CHECK_FILE_SERVER_TIME: priv->options.check_file_server_time = g_value_get_boolean (value); break; default: /* We don't have any other property... */ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void vik_tms_map_source_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { VikTmsMapSource *self = VIK_TMS_MAP_SOURCE (object); VikTmsMapSourcePrivate *priv = VIK_TMS_MAP_SOURCE_PRIVATE (self); switch (property_id) { case PROP_HOSTNAME: g_value_set_string (value, priv->hostname); break; case PROP_URL: g_value_set_string (value, priv->url); break; case PROP_REFERER: g_value_set_string (value, priv->options.referer); break; case PROP_FOLLOW_LOCATION: g_value_set_long (value, priv->options.follow_location); break; case PROP_CHECK_FILE_SERVER_TIME: g_value_set_boolean (value, priv->options.check_file_server_time); break; default: /* We don't have any other property... */ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void vik_tms_map_source_class_init (VikTmsMapSourceClass *klass) { GObjectClass* object_class = G_OBJECT_CLASS (klass); VikMapSourceClass* grandparent_class = VIK_MAP_SOURCE_CLASS (klass); VikMapSourceDefaultClass* parent_class = VIK_MAP_SOURCE_DEFAULT_CLASS (klass); GParamSpec *pspec = NULL; object_class->set_property = vik_tms_map_source_set_property; object_class->get_property = vik_tms_map_source_get_property; /* Overiding methods */ grandparent_class->coord_to_mapcoord = _coord_to_mapcoord; grandparent_class->mapcoord_to_center_coord = _mapcoord_to_center_coord; grandparent_class->supports_download_only_new = _supports_download_only_new; grandparent_class->is_direct_file_access = _is_direct_file_access; parent_class->get_uri = _get_uri; parent_class->get_hostname = _get_hostname; parent_class->get_download_options = _get_download_options; pspec = g_param_spec_string ("hostname", "Hostname", "The hostname of the map server", "" /* default value */, G_PARAM_CONSTRUCT_ONLY | 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", "" /* default value */, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE); g_object_class_install_property (object_class, PROP_URL, pspec); pspec = g_param_spec_string ("referer", "Referer", "The REFERER string to use in HTTP request", NULL /* default value */, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE); g_object_class_install_property (object_class, PROP_REFERER, pspec); pspec = g_param_spec_long ("follow-location", "Follow location", "Specifies the number of retries to follow a redirect while downloading a page", 0 /* minimum value */, G_MAXLONG /* maximum value */, 0 /* default value */, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE); g_object_class_install_property (object_class, PROP_FOLLOW_LOCATION, pspec); pspec = g_param_spec_boolean ("check-file-server-time", "Check file server time", "Age of current cache before redownloading tile", FALSE /* default value */, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE); g_object_class_install_property (object_class, PROP_CHECK_FILE_SERVER_TIME, pspec); g_type_class_add_private (klass, sizeof (VikTmsMapSourcePrivate)); object_class->finalize = vik_tms_map_source_finalize; } /* 1 << (x) is like a 2**(x) */ #define GZ(x) ((1<<(x))) static const gdouble scale_mpps[] = { GZ(0), GZ(1), GZ(2), GZ(3), GZ(4), GZ(5), GZ(6), GZ(7), GZ(8), GZ(9), GZ(10), GZ(11), GZ(12), GZ(13), GZ(14), GZ(15), GZ(16), GZ(17) }; static const gint num_scales = (sizeof(scale_mpps) / sizeof(scale_mpps[0])); static const gdouble scale_neg_mpps[] = { 1.0/GZ(0), 1.0/GZ(1), 1.0/GZ(2), 1.0/GZ(3) }; static const gint num_scales_neg = (sizeof(scale_neg_mpps) / sizeof(scale_neg_mpps[0])); #define ERROR_MARGIN 0.01 static gint tms_zoom ( gdouble mpp ) { gint i; for ( i = 0; i < num_scales; i++ ) { if ( ABS(scale_mpps[i] - mpp) < ERROR_MARGIN ) { return i; } } for ( i = 0; i < num_scales_neg; i++ ) { if ( ABS(scale_neg_mpps[i] - mpp) < 0.000001 ) { return -i; } } return 255; } static gboolean _is_direct_file_access ( VikMapSource *self ) { return FALSE; } static gboolean _supports_download_only_new ( VikMapSource *self ) { g_return_val_if_fail (VIK_IS_TMS_MAP_SOURCE(self), FALSE); VikTmsMapSourcePrivate *priv = VIK_TMS_MAP_SOURCE_PRIVATE(self); return priv->options.check_file_server_time; } static gboolean _coord_to_mapcoord ( VikMapSource *self, const VikCoord *src, gdouble xzoom, gdouble yzoom, MapCoord *dest ) { g_assert ( src->mode == VIK_COORD_LATLON ); if ( xzoom != yzoom ) return FALSE; dest->scale = tms_zoom ( xzoom ); if ( dest->scale == 255 ) return FALSE; /* Note : GZ(17) / xzoom / 2 = number of tile on Y axis */ g_debug("%s: xzoom=%f yzoom=%f -> %f", __FUNCTION__, xzoom, yzoom, GZ(17) / xzoom / 2); dest->x = floor((src->east_west + 180) / 180 * GZ(17) / xzoom / 2); /* We should restore logic of viking: * tile index on Y axis follow a screen logic (top -> down) */ dest->y = floor((180 - (src->north_south + 90)) / 180 * GZ(17) / xzoom / 2); dest->z = 0; g_debug("%s: %f,%f -> %d,%d", __FUNCTION__, src->east_west, src->north_south, dest->x, dest->y); return TRUE; } static void _mapcoord_to_center_coord ( VikMapSource *self, MapCoord *src, VikCoord *dest ) { gdouble socalled_mpp; if (src->scale >= 0) socalled_mpp = GZ(src->scale); else socalled_mpp = 1.0/GZ(-src->scale); dest->mode = VIK_COORD_LATLON; dest->east_west = (src->x+0.5) * 180 / GZ(17) * socalled_mpp * 2 - 180; /* We should restore logic of viking: * tile index on Y axis follow a screen logic (top -> down) */ dest->north_south = -((src->y+0.5) * 180 / GZ(17) * socalled_mpp * 2 - 90); g_debug("%s: %d,%d -> %f,%f", __FUNCTION__, src->x, src->y, dest->east_west, dest->north_south); } static gchar * _get_uri( VikMapSourceDefault *self, MapCoord *src ) { g_return_val_if_fail (VIK_IS_TMS_MAP_SOURCE(self), NULL); VikTmsMapSourcePrivate *priv = VIK_TMS_MAP_SOURCE_PRIVATE(self); /* We should restore logic of viking: * tile index on Y axis follow a screen logic (top -> down) */ /* Note : nb tiles on Y axis */ gint nb_tiles = GZ(17 - src->scale - 1); gchar *uri = g_strdup_printf (priv->url, 17 - src->scale - 1, src->x, nb_tiles - src->y - 1); return uri; } static gchar * _get_hostname( VikMapSourceDefault *self ) { g_return_val_if_fail (VIK_IS_TMS_MAP_SOURCE(self), NULL); VikTmsMapSourcePrivate *priv = VIK_TMS_MAP_SOURCE_PRIVATE(self); return g_strdup( priv->hostname ); } static DownloadMapOptions * _get_download_options( VikMapSourceDefault *self ) { g_return_val_if_fail (VIK_IS_TMS_MAP_SOURCE(self), NULL); VikTmsMapSourcePrivate *priv = VIK_TMS_MAP_SOURCE_PRIVATE(self); return &(priv->options); } VikTmsMapSource * vik_tms_map_source_new_with_id (guint16 id, const gchar *label, const gchar *hostname, const gchar *url) { return g_object_new(VIK_TYPE_TMS_MAP_SOURCE, "id", id, "label", label, "hostname", hostname, "url", url, NULL); } viking-1.4.2/src/preferences.h0000644000175000017500000000355712175546146013214 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2007, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef __VIKING_PREFERENCES_H #define __VIKING_PREFERENCES_H #include "uibuilder.h" // TODO IMPORTANT!!!! add REGISTER_GROUP !!! OR SOMETHING!!! CURRENTLY GROUPLESS!!! void a_preferences_init(); void a_preferences_uninit(); /* pref should be persistent thruout the life of the preference. */ /* must call FIRST */ void a_preferences_register_group ( const gchar *key, const gchar *name ); /* nothing in pref is copied neither but pref itself is copied. (TODO: COPY EVERYTHING IN PREF WE NEED, IF ANYTHING), so pref key is not copied. default param data IS copied. */ /* group field (integer) will be overwritten */ void a_preferences_register( VikLayerParam *pref, VikLayerParamData defaultval, const gchar *group_key ); void a_preferences_show_window(GtkWindow *parent); VikLayerParamData *a_preferences_get(const gchar *key); /* Allow preferences to be manipulated externally */ void a_preferences_run_setparam ( VikLayerParamData data, VikLayerParam *params ); /* TRUE on success */ gboolean a_preferences_save_to_file(); #endif viking-1.4.2/src/vikmapslayer.c0000644000175000017500000015370712175546146013420 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2005, Evan Battaglia * Copyright (C) 2010, Guilhem Bonnefille * UTM multi-zone stuff by Kit Transue * Dynamic map type by Guilhem Bonnefille * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #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 */ #define REAL_MIN_SHRINKFACTOR 0.0039062499 /* if shrinkfactor is between MAX and REAL_MAX, will only check for existence */ #include #include #include #include #include #ifdef HAVE_STRING_H #include #endif #ifdef HAVE_MATH_H #include #endif #include "globals.h" #include "util.h" #include "coords.h" #include "vikcoord.h" #include "viktreeview.h" #include "vikviewport.h" #include "viklayer.h" #include "vikmapslayer.h" #ifdef HAVE_UNISTD_H #include #endif #include "vikmapsourcedefault.h" #include "mapcache.h" /* only for dialog.h -- ugh */ #include "vikwaypoint.h" #include "dialog.h" #include "preferences.h" #include "vikstatus.h" #include "background.h" #include "vikaggregatelayer.h" #include "viklayerspanel.h" #include "mapcoord.h" #include "icons/icons.h" /****** MAP TYPES ******/ static GList *__map_types = NULL; #define NUM_MAP_TYPES g_list_length(__map_types) /* List of label for each map type */ static gchar **params_maptypes = NULL; /* Corresponding IDS. (Cf. field uniq_id in VikMapsLayer struct) */ static guint *params_maptypes_ids = NULL; /******** MAPZOOMS *********/ static gchar *params_mapzooms[] = { N_("Use Viking Zoom Level"), "0.25", "0.5", "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, 0.5, 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, 0.5, 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 }; #define NUM_MAPZOOMS (sizeof(params_mapzooms)/sizeof(params_mapzooms[0]) - 1) /**************************/ static void maps_layer_post_read (VikLayer *vl, VikViewport *vp, gboolean from_file); static const gchar* maps_layer_tooltip ( VikMapsLayer *vml ); static void maps_layer_marshall( VikMapsLayer *vml, guint8 **data, gint *len ); static VikMapsLayer *maps_layer_unmarshall( guint8 *data, gint len, VikViewport *vvp ); static gboolean maps_layer_set_param ( VikMapsLayer *vml, guint16 id, VikLayerParamData data, VikViewport *vvp, gboolean is_file_operation ); static VikLayerParamData maps_layer_get_param ( VikMapsLayer *vml, guint16 id, gboolean is_file_operation ); static void maps_layer_draw ( VikMapsLayer *vml, VikViewport *vvp ); static VikMapsLayer *maps_layer_new ( VikViewport *vvp ); static void maps_layer_free ( VikMapsLayer *vml ); static gboolean maps_layer_download_release ( VikMapsLayer *vml, GdkEventButton *event, VikViewport *vvp ); static gboolean maps_layer_download_click ( VikMapsLayer *vml, GdkEventButton *event, VikViewport *vvp ); static gpointer maps_layer_download_create ( VikWindow *vw, VikViewport *vvp ); static void maps_layer_set_cache_dir ( VikMapsLayer *vml, const gchar *dir ); static void start_download_thread ( VikMapsLayer *vml, VikViewport *vvp, const VikCoord *ul, const VikCoord *br, gint redownload ); static void maps_layer_add_menu_items ( VikMapsLayer *vml, GtkMenu *menu, VikLayersPanel *vlp ); static guint map_uniq_id_to_index ( guint uniq_id ); static VikLayerParamScale params_scales[] = { /* min, max, step, digits (decimal places) */ { 0, 255, 3, 0 }, /* alpha */ }; VikLayerParam maps_layer_params[] = { { "mode", VIK_LAYER_PARAM_UINT, VIK_LAYER_GROUP_NONE, N_("Map Type:"), VIK_LAYER_WIDGET_COMBOBOX, NULL, NULL, NULL }, { "directory", VIK_LAYER_PARAM_STRING, VIK_LAYER_GROUP_NONE, N_("Maps Directory:"), VIK_LAYER_WIDGET_FOLDERENTRY, NULL, NULL, NULL }, { "alpha", VIK_LAYER_PARAM_UINT, VIK_LAYER_GROUP_NONE, N_("Alpha:"), VIK_LAYER_WIDGET_HSCALE, params_scales, NULL, N_("Control the Alpha value for transparency effects") }, { "autodownload", VIK_LAYER_PARAM_BOOLEAN, VIK_LAYER_GROUP_NONE, N_("Autodownload maps:"), VIK_LAYER_WIDGET_CHECKBUTTON, NULL, NULL, NULL }, { "adlonlymissing", VIK_LAYER_PARAM_BOOLEAN, VIK_LAYER_GROUP_NONE, N_("Autodownload Only Gets Missing Maps:"), VIK_LAYER_WIDGET_CHECKBUTTON, NULL, NULL, N_("Using this option avoids attempting to update already acquired tiles. This can be useful if you want to restrict the network usage, without having to resort to manual control. Only applies when 'Autodownload Maps' is on.") }, { "mapzoom", VIK_LAYER_PARAM_UINT, VIK_LAYER_GROUP_NONE, N_("Zoom Level:"), VIK_LAYER_WIDGET_COMBOBOX, params_mapzooms, NULL, N_("Determines the method of displaying map tiles for the current zoom level. 'Viking Zoom Level' uses the best matching level, otherwise setting a fixed value will always use map tiles of the specified value regardless of the actual zoom level.") }, }; enum { PARAM_MAPTYPE=0, PARAM_CACHE_DIR, PARAM_ALPHA, PARAM_AUTODOWNLOAD, PARAM_ONLYMISSING, PARAM_MAPZOOM, NUM_PARAMS }; static VikToolInterface maps_tools[] = { { { "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"), "M", &vikmapslayer_pixbuf, maps_tools, sizeof(maps_tools) / sizeof(maps_tools[0]), maps_layer_params, NUM_PARAMS, NULL, 0, VIK_MENU_ITEM_ALL, (VikLayerFuncCreate) maps_layer_new, (VikLayerFuncRealize) NULL, (VikLayerFuncPostRead) maps_layer_post_read, (VikLayerFuncFree) maps_layer_free, (VikLayerFuncProperties) NULL, (VikLayerFuncDraw) maps_layer_draw, (VikLayerFuncChangeCoordMode) NULL, (VikLayerFuncSetMenuItemsSelection) NULL, (VikLayerFuncGetMenuItemsSelection) NULL, (VikLayerFuncAddMenuItems) maps_layer_add_menu_items, (VikLayerFuncSublayerAddMenuItems) NULL, (VikLayerFuncSublayerRenameRequest) NULL, (VikLayerFuncSublayerToggleVisible) NULL, (VikLayerFuncSublayerTooltip) NULL, (VikLayerFuncLayerTooltip) maps_layer_tooltip, (VikLayerFuncLayerSelected) NULL, (VikLayerFuncMarshall) maps_layer_marshall, (VikLayerFuncUnmarshall) maps_layer_unmarshall, (VikLayerFuncSetParam) maps_layer_set_param, (VikLayerFuncGetParam) maps_layer_get_param, (VikLayerFuncReadFileData) NULL, (VikLayerFuncWriteFileData) NULL, (VikLayerFuncDeleteItem) NULL, (VikLayerFuncCutItem) NULL, (VikLayerFuncCopyItem) NULL, (VikLayerFuncPasteItem) NULL, (VikLayerFuncFreeCopiedItem) NULL, (VikLayerFuncDragDropRequest) NULL, (VikLayerFuncSelectClick) NULL, (VikLayerFuncSelectMove) NULL, (VikLayerFuncSelectRelease) NULL, (VikLayerFuncSelectedViewportMenu) NULL, }; struct _VikMapsLayer { VikLayer vl; guint maptype; gchar *cache_dir; guint8 alpha; guint mapzoom_id; gdouble xmapzoom, ymapzoom; gboolean autodownload; gboolean adl_only_missing; VikCoord *last_center; gdouble last_xmpp; gdouble last_ympp; gint dl_tool_x, dl_tool_y; GtkMenu *dl_right_click_menu; VikCoord redownload_ul, redownload_br; /* right click menu only */ VikViewport *redownload_vvp; gboolean license_notice_shown; // FALSE for new maps only, otherwise // TRUE for saved maps & other layer changes as we don't need to show it again }; enum { REDOWNLOAD_NONE = 0, /* download only missing maps */ REDOWNLOAD_BAD, /* download missing and bad maps */ REDOWNLOAD_NEW, /* download missing maps that are newer on server only */ REDOWNLOAD_ALL, /* download all maps */ DOWNLOAD_OR_REFRESH }; /* download missing maps and refresh cache */ static VikLayerParam prefs[] = { { VIKING_PREFERENCES_NAMESPACE "maplayer_default_dir", VIK_LAYER_PARAM_STRING, VIK_LAYER_GROUP_NONE, N_("Default maplayer directory:"), VIK_LAYER_WIDGET_FOLDERENTRY, NULL, NULL, N_("Choose a directory to store cached Map tiles for this layer") }, }; void maps_layer_init () { VikLayerParamData tmp; tmp.s = maps_layer_default_dir(); a_preferences_register(prefs, tmp, VIKING_PREFERENCES_GROUP_KEY); } /****************************************/ /******** MAPS LAYER TYPES **************/ /****************************************/ int _get_index_for_id ( guint id ) { int index = 0 ; while (params_maptypes_ids[index] != 0) { if (params_maptypes_ids[index] == id) return index; index++; } return -1; } void _add_map_source ( guint id, const char *label, VikMapSource *map ) { gsize len = 0; if (params_maptypes) len = g_strv_length (params_maptypes); /* Add the label */ params_maptypes = g_realloc (params_maptypes, (len+2)*sizeof(gchar*)); params_maptypes[len] = g_strdup (label); params_maptypes[len+1] = NULL; /* Add the id */ params_maptypes_ids = g_realloc (params_maptypes_ids, (len+2)*sizeof(guint)); params_maptypes_ids[len] = id; params_maptypes_ids[len+1] = 0; /* We have to clone */ VikMapSource *clone = VIK_MAP_SOURCE(g_object_ref(map)); /* Register the clone in the list */ __map_types = g_list_append(__map_types, clone); /* Hack We have to ensure the mode LayerParam references the up-to-date GLists. */ /* memcpy(&maps_layer_params[0].widget_data, ¶ms_maptypes, sizeof(gpointer)); memcpy(&maps_layer_params[0].extra_widget_data, ¶ms_maptypes_ids, sizeof(gpointer)); */ maps_layer_params[0].widget_data = params_maptypes; maps_layer_params[0].extra_widget_data = params_maptypes_ids; } void _update_map_source ( const char *label, VikMapSource *map, int index ) { GList *item = g_list_nth (__map_types, index); g_object_unref (item->data); item->data = g_object_ref (map); /* Change previous data */ g_free (params_maptypes[index]); 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); guint id = vik_map_source_get_uniq_id(map); const char *label = vik_map_source_get_label(map); g_assert(label != NULL); int previous = map_uniq_id_to_index (id); if (previous != NUM_MAP_TYPES) { _update_map_source (label, map, previous); } else { _add_map_source (id, label, map); } } #define MAPS_LAYER_NTH_LABEL(n) (params_maptypes[n]) #define MAPS_LAYER_NTH_ID(n) (params_maptypes_ids[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) { return(vml->maptype); } gchar *vik_maps_layer_get_map_label(VikMapsLayer *vml) { return(g_strdup(MAPS_LAYER_NTH_LABEL(vml->maptype))); } /****************************************/ /******** 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() #ifdef WINDOWS #include #define GLOBAL_MAPS_DIR "C:\\VIKING-MAPS\\" #define LOCAL_MAPS_DIR "VIKING-MAPS" #elif defined __APPLE__ #include #define GLOBAL_MAPS_DIR "/Library/cache/Viking/maps/" #define LOCAL_MAPS_DIR "/Library/Application Support/Viking/viking-maps" #else /* POSIX */ #include #define GLOBAL_MAPS_DIR "/var/cache/maps/" #define LOCAL_MAPS_DIR ".viking-maps" #endif gchar *maps_layer_default_dir () { static gchar *defaultdir = NULL; if ( ! defaultdir ) { /* Thanks to Mike Davison for the $VIKING_MAPS usage */ const gchar *mapdir = g_getenv("VIKING_MAPS"); if ( mapdir ) { defaultdir = g_strdup ( mapdir ); } else if ( g_access ( GLOBAL_MAPS_DIR, W_OK ) == 0 ) { defaultdir = g_strdup ( GLOBAL_MAPS_DIR ); } else { 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, LOCAL_MAPS_DIR, NULL ); else defaultdir = g_strdup ( LOCAL_MAPS_DIR ); } if (defaultdir && (defaultdir[strlen(defaultdir)-1] != G_DIR_SEPARATOR)) { /* Add the separator at the end */ gchar *tmp = defaultdir; defaultdir = g_strconcat(tmp, G_DIR_SEPARATOR_S, NULL); g_free(tmp); } g_debug("%s: defaultdir=%s", __FUNCTION__, defaultdir); } return defaultdir; } static void maps_layer_mkdir_if_default_dir ( VikMapsLayer *vml ) { if ( vml->cache_dir && strcmp ( vml->cache_dir, MAPS_CACHE_DIR ) == 0 && g_file_test ( vml->cache_dir, G_FILE_TEST_EXISTS ) == FALSE ) { g_mkdir ( vml->cache_dir, 0777 ); } } static void maps_layer_set_cache_dir ( VikMapsLayer *vml, const gchar *dir ) { guint len; g_assert ( vml != NULL); g_free ( vml->cache_dir ); vml->cache_dir = NULL; if ( dir == NULL || dir[0] == '\0' ) { if ( a_preferences_get(VIKING_PREFERENCES_NAMESPACE "maplayer_default_dir") ) vml->cache_dir = g_strdup ( a_preferences_get(VIKING_PREFERENCES_NAMESPACE "maplayer_default_dir")->s ); } else { len = strlen(dir); if ( dir[len-1] != G_DIR_SEPARATOR ) { vml->cache_dir = g_malloc ( len+2 ); strncpy ( vml->cache_dir, dir, len ); vml->cache_dir[len] = G_DIR_SEPARATOR; vml->cache_dir[len+1] = '\0'; } else vml->cache_dir = g_strdup ( dir ); } maps_layer_mkdir_if_default_dir ( vml ); } /****************************************/ /******** GOBJECT STUFF *****************/ /****************************************/ GType vik_maps_layer_get_type () { static GType vml_type = 0; if (!vml_type) { static const GTypeInfo vml_info = { sizeof (VikMapsLayerClass), NULL, /* base_init */ NULL, /* base_finalize */ NULL, /* class init */ NULL, /* class_finalize */ NULL, /* class_data */ sizeof (VikMapsLayer), 0, NULL /* instance init */ }; vml_type = g_type_register_static ( VIK_LAYER_TYPE, "VikMapsLayer", &vml_info, 0 ); } return vml_type; } /****************************************/ /************** PARAMETERS **************/ /****************************************/ static guint map_index_to_uniq_id (guint16 index) { g_assert ( index < NUM_MAP_TYPES ); 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 ( vik_map_source_get_uniq_id(MAPS_LAYER_NTH_TYPE(i)) == uniq_id ) return i; return NUM_MAP_TYPES; /* no such thing */ } static gboolean maps_layer_set_param ( VikMapsLayer *vml, guint16 id, VikLayerParamData data, VikViewport *vvp, gboolean is_file_operation ) { // When loading from a file don't need the license reminder if ( is_file_operation ) vml->license_notice_shown = TRUE; switch ( id ) { 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")); else vml->maptype = maptype; break; } case PARAM_ALPHA: if ( data.u <= 255 ) vml->alpha = data.u; break; case PARAM_AUTODOWNLOAD: vml->autodownload = data.b; break; case PARAM_ONLYMISSING: vml->adl_only_missing = data.b; break; case PARAM_MAPZOOM: if ( data.u < NUM_MAPZOOMS ) { vml->mapzoom_id = data.u; vml->xmapzoom = __mapzooms_x [data.u]; vml->ymapzoom = __mapzooms_y [data.u]; }else g_warning (_("Unknown Map Zoom")); break; } return TRUE; } static VikLayerParamData maps_layer_get_param ( VikMapsLayer *vml, guint16 id, gboolean is_file_operation ) { VikLayerParamData rv; switch ( id ) { case PARAM_CACHE_DIR: rv.s = vml->cache_dir ? vml->cache_dir : ""; break; case PARAM_MAPTYPE: rv.u = map_index_to_uniq_id ( vml->maptype ); break; case PARAM_ALPHA: rv.u = vml->alpha; break; case PARAM_AUTODOWNLOAD: rv.u = vml->autodownload; break; case PARAM_ONLYMISSING: rv.u = vml->adl_only_missing; break; case PARAM_MAPZOOM: rv.u = vml->mapzoom_id; break; } return rv; } /****************************************/ /****** CREATING, COPYING, FREEING ******/ /****************************************/ static VikMapsLayer *maps_layer_new ( VikViewport *vvp ) { int idx; VikMapsLayer *vml = VIK_MAPS_LAYER ( g_object_new ( VIK_MAPS_LAYER_TYPE, NULL ) ); 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; maps_layer_set_cache_dir ( vml, NULL ); vml->autodownload = FALSE; vml->adl_only_missing = FALSE; vml->last_center = NULL; vml->last_xmpp = 0.0; vml->last_ympp = 0.0; vml->dl_right_click_menu = NULL; vml->license_notice_shown = FALSE; return vml; } static void maps_layer_free ( VikMapsLayer *vml ) { g_free ( vml->cache_dir ); vml->cache_dir = NULL; if ( vml->dl_right_click_menu ) g_object_ref_sink ( G_OBJECT(vml->dl_right_click_menu) ); g_free(vml->last_center); vml->last_center = NULL; } static void maps_layer_post_read (VikLayer *vl, VikViewport *vp, gboolean from_file) { if (from_file != TRUE) { /* If this method is not called in file reading context * it is called in GUI context. * So, we can check if we have to inform the user about inconsistency */ VikViewportDrawMode vp_drawmode; VikMapsLayer *vml = VIK_MAPS_LAYER(vl); VikMapSource *map = NULL; vp_drawmode = vik_viewport_get_drawmode ( vp ); 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 (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_WIDGET(vp), msg ); g_free(msg); } if (vik_map_source_get_license (map) != NULL) { if ( ! vml->license_notice_shown ) { a_dialog_license (VIK_GTK_WINDOW_FROM_WIDGET(vp), vik_map_source_get_label (map), vik_map_source_get_license (map), vik_map_source_get_license_url (map) ); vml->license_notice_shown = TRUE; } } } } static const gchar* maps_layer_tooltip ( VikMapsLayer *vml ) { return vik_maps_layer_get_map_label ( vml ); } static void maps_layer_marshall( VikMapsLayer *vml, guint8 **data, gint *len ) { vik_layer_marshall_params ( VIK_LAYER(vml), data, len ); } static VikMapsLayer *maps_layer_unmarshall( guint8 *data, gint len, VikViewport *vvp ) { VikMapsLayer *rv = maps_layer_new ( vvp ); vik_layer_unmarshall_params ( VIK_LAYER(rv), data, len, vvp ); return rv; } /*********************/ /****** DRAWING ******/ /*********************/ static GdkPixbuf *pixbuf_set_alpha ( GdkPixbuf *pixbuf, guint8 alpha ) { guchar *pixels; gint width, height, iii, jjj; if ( ! gdk_pixbuf_get_has_alpha ( pixbuf ) ) { GdkPixbuf *tmp = gdk_pixbuf_add_alpha(pixbuf,FALSE,0,0,0); g_object_unref(G_OBJECT(pixbuf)); pixbuf = tmp; } pixels = gdk_pixbuf_get_pixels(pixbuf); width = gdk_pixbuf_get_width(pixbuf); height = gdk_pixbuf_get_height(pixbuf); /* r,g,b,a,r,g,b,a.... */ for (iii = 0; iii < width; iii++) for (jjj = 0; jjj < height; jjj++) { pixels += 3; *pixels++ = alpha; } return pixbuf; } static GdkPixbuf *pixbuf_shrink ( GdkPixbuf *pixbuf, gdouble xshrinkfactor, gdouble yshrinkfactor ) { GdkPixbuf *tmp; guint16 width = gdk_pixbuf_get_width(pixbuf), height = gdk_pixbuf_get_height(pixbuf); tmp = gdk_pixbuf_scale_simple(pixbuf, ceil(width * xshrinkfactor), ceil(height * yshrinkfactor), GDK_INTERP_NEAREST); g_object_unref ( G_OBJECT(pixbuf) ); return tmp; } static GdkPixbuf *get_pixbuf( VikMapsLayer *vml, gint mode, MapCoord *mapcoord, gchar *filename_buf, gint buf_len, gdouble xshrinkfactor, gdouble yshrinkfactor ) { GdkPixbuf *pixbuf; /* get the thing */ pixbuf = a_mapcache_get ( mapcoord->x, mapcoord->y, mapcoord->z, mode, mapcoord->scale, vml->alpha, xshrinkfactor, yshrinkfactor ); if ( ! pixbuf ) { 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; pixbuf = gdk_pixbuf_new_from_file ( filename_buf, &gx ); /* free the pixbuf on error */ 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_error_free ( gx ); if ( pixbuf ) g_object_unref ( G_OBJECT(pixbuf) ); pixbuf = NULL; } else { if ( vml->alpha < 255 ) pixbuf = pixbuf_set_alpha ( pixbuf, vml->alpha ); if ( xshrinkfactor != 1.0 || yshrinkfactor != 1.0 ) pixbuf = pixbuf_shrink ( pixbuf, xshrinkfactor, yshrinkfactor ); a_mapcache_add ( pixbuf, mapcoord->x, mapcoord->y, mapcoord->z, vik_map_source_get_uniq_id(MAPS_LAYER_NTH_TYPE(vml->maptype)), mapcoord->scale, vml->alpha, xshrinkfactor, yshrinkfactor ); } } } return pixbuf; } gboolean should_start_autodownload(VikMapsLayer *vml, VikViewport *vvp) { const VikCoord *center = vik_viewport_get_center ( vvp ); if (vik_window_get_pan_move (VIK_WINDOW(VIK_GTK_WINDOW_FROM_WIDGET(GTK_WIDGET(vvp))))) /* D'n'D pan in action: do not download */ return FALSE; if (vml->last_center == NULL) { VikCoord *new_center = g_malloc(sizeof(VikCoord)); *new_center = *center; vml->last_center = new_center; vml->last_xmpp = vik_viewport_get_xmpp(vvp); vml->last_ympp = vik_viewport_get_ympp(vvp); return TRUE; } /* TODO: perhaps vik_coord_diff() */ if (vik_coord_equals(vml->last_center, center) && (vml->last_xmpp == vik_viewport_get_xmpp(vvp)) && (vml->last_ympp == vik_viewport_get_ympp(vvp))) return FALSE; *(vml->last_center) = *center; vml->last_xmpp = vik_viewport_get_xmpp(vvp); vml->last_ympp = vik_viewport_get_ympp(vvp); return TRUE; } static void maps_layer_draw_section ( VikMapsLayer *vml, VikViewport *vvp, VikCoord *ul, VikCoord *br ) { MapCoord ulm, brm; gdouble xzoom = vik_viewport_get_xmpp ( vvp ); gdouble yzoom = vik_viewport_get_ympp ( vvp ); gdouble xshrinkfactor = 1.0, yshrinkfactor = 1.0; gboolean existence_only = FALSE; if ( vml->xmapzoom && (vml->xmapzoom != xzoom || vml->ymapzoom != yzoom) ) { xshrinkfactor = vml->xmapzoom / xzoom; yshrinkfactor = vml->ymapzoom / yzoom; xzoom = vml->xmapzoom; yzoom = vml->xmapzoom; if ( ! (xshrinkfactor > MIN_SHRINKFACTOR && xshrinkfactor < MAX_SHRINKFACTOR && yshrinkfactor > MIN_SHRINKFACTOR && yshrinkfactor < MAX_SHRINKFACTOR ) ) { 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)); return; } } } /* coord -> ID */ 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 = vik_map_source_get_uniq_id(map); VikCoord coord; gint xx, yy, width, height; GdkPixbuf *pixbuf; guint max_path_len = strlen(vml->cache_dir) + 40; gchar *path_buf = g_malloc ( max_path_len * sizeof(char) ); if ( (!existence_only) && vml->autodownload && should_start_autodownload(vml, vvp)) { g_debug("%s: Starting autodownload", __FUNCTION__); if ( !vml->adl_only_missing && vik_map_source_supports_download_only_new (map) ) // Try to download newer tiles start_download_thread ( vml, vvp, ul, br, REDOWNLOAD_NEW ); else // Download only missing tiles start_download_thread ( vml, vvp, ul, br, REDOWNLOAD_NONE ); } 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; ulm.y = y; pixbuf = get_pixbuf ( vml, mode, &ulm, path_buf, max_path_len, xshrinkfactor, yshrinkfactor ); if ( pixbuf ) { width = gdk_pixbuf_get_width ( pixbuf ); height = gdk_pixbuf_get_height ( pixbuf ); 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); vik_viewport_draw_pixbuf ( vvp, pixbuf, 0, 0, xx, yy, width, height ); } } } } else { /* tilesize is known, don't have to keep converting coords */ 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 ); gint8 xinc = (ulm.x == xmin) ? 1 : -1; gint8 yinc = (ulm.y == ymin) ? 1 : -1; gdouble xx, yy; gint xx_tmp, yy_tmp; gint base_yy, xend, yend; xend = (xinc == 1) ? (xmax+1) : (xmin-1); yend = (yinc == 1) ? (ymax+1) : (ymin-1); 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 * eg if tile size 128, shrinkfactor 0.333 */ xx -= (tilesize_x/2); base_yy = yy - (tilesize_y/2); for ( x = ((xinc == 1) ? xmin : xmax); x != xend; x+=xinc ) { yy = base_yy; for ( y = ((yinc == 1) ? ymin : ymax); y != yend; y+=yinc ) { ulm.x = x; ulm.y = y; if ( existence_only ) { 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 ); } } else { int scale_inc; for (scale_inc = 0; scale_inc < 4; scale_inc ++) { /* try with correct then smaller zooms */ int scale_factor = 1 << scale_inc; /* 2^scale_inc */ MapCoord ulm2 = ulm; ulm2.x = ulm.x / scale_factor; ulm2.y = ulm.y / scale_factor; ulm2.scale = ulm.scale + scale_inc; pixbuf = get_pixbuf ( vml, mode, &ulm2, path_buf, max_path_len, xshrinkfactor * scale_factor, yshrinkfactor * scale_factor ); if ( pixbuf ) { gint src_x = (ulm.x % scale_factor) * tilesize_x_ceil; gint src_y = (ulm.y % scale_factor) * tilesize_y_ceil; #ifdef DEBUG printf("maps_layer_draw_section - x=%d, y=%d, z=%d, src_x=%d, src_y=%d, xx=%d, yy=%d - %x\n", ulm.x, ulm.y, ulm.scale, src_x, src_y, (int)xx, (int)yy, vvp); #endif vik_viewport_draw_pixbuf ( vvp, pixbuf, src_x, src_y, xx, yy, tilesize_x_ceil, tilesize_y_ceil ); break; } } if ( !pixbuf ) { /* retry with bigger zooms */ int scale_dec; for (scale_dec = 1; scale_dec < 2; scale_dec ++) { int pict_x, pict_y; int scale_factor = 1 << scale_dec; /* 2^scale_dec */ MapCoord ulm2 = ulm; ulm2.x = ulm.x * scale_factor; ulm2.y = ulm.y * scale_factor; ulm2.scale = ulm.scale - scale_dec; for (pict_x = 0; pict_x < scale_factor; pict_x ++) { for (pict_y = 0; pict_y < scale_factor; pict_y ++) { MapCoord ulm3 = ulm2; ulm3.x += pict_x; ulm3.y += pict_y; pixbuf = get_pixbuf ( vml, mode, &ulm3, path_buf, max_path_len, xshrinkfactor / scale_factor, yshrinkfactor / scale_factor ); if ( pixbuf ) { gint src_x = 0; gint src_y = 0; gint dest_x = xx + pict_x * (tilesize_x_ceil / scale_factor); gint dest_y = yy + pict_y * (tilesize_y_ceil / scale_factor); vik_viewport_draw_pixbuf ( vvp, pixbuf, src_x, src_y, dest_x, dest_y, tilesize_x_ceil / scale_factor, tilesize_y_ceil / scale_factor ); } } } } } } yy += tilesize_y; } xx += tilesize_x; } } g_free ( path_buf ); } } static void maps_layer_draw ( VikMapsLayer *vml, VikViewport *vvp ) { if ( vik_map_source_get_drawmode(MAPS_LAYER_NTH_TYPE(vml->maptype)) == vik_viewport_get_drawmode ( vvp ) ) { VikCoord ul, br; /* Copyright */ gdouble level = vik_viewport_get_zoom ( vvp ); LatLonBBox bbox; vik_viewport_get_min_max_lat_lon ( vvp, &bbox.south, &bbox.north, &bbox.west, &bbox.east ); vik_map_source_get_copyright ( MAPS_LAYER_NTH_TYPE(vml->maptype), bbox, level, vik_viewport_add_copyright, vvp ); /* Logo */ const GdkPixbuf *logo = vik_map_source_get_logo ( MAPS_LAYER_NTH_TYPE(vml->maptype) ); vik_viewport_add_logo ( vvp, logo ); /* get corner coords */ if ( vik_viewport_get_coord_mode ( vvp ) == VIK_COORD_UTM && ! vik_viewport_is_one_zone ( vvp ) ) { /* UTM multi-zone stuff by Kit Transue */ gchar leftmost_zone, rightmost_zone, i; leftmost_zone = vik_viewport_leftmost_zone( vvp ); rightmost_zone = vik_viewport_rightmost_zone( vvp ); for ( i = leftmost_zone; i <= rightmost_zone; ++i ) { vik_viewport_corners_for_zonen ( vvp, i, &ul, &br ); maps_layer_draw_section ( vml, vvp, &ul, &br ); } } else { 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 ); maps_layer_draw_section ( vml, vvp, &ul, &br ); } } } /*************************/ /****** DOWNLOADING ******/ /*************************/ /* pass along data to thread, exists even if layer is deleted. */ typedef struct { gchar *cache_dir; gchar *filename_buf; gint x0, y0, xf, yf; MapCoord mapcoord; gint maptype; gint maxlen; gint mapstoget; gint redownload; gboolean refresh_display; VikMapsLayer *vml; VikViewport *vvp; gboolean map_layer_alive; GMutex *mutex; } MapDownloadInfo; static void mdi_free ( MapDownloadInfo *mdi ) { g_mutex_free(mdi->mutex); g_free ( mdi->cache_dir ); mdi->cache_dir = NULL; g_free ( mdi->filename_buf ); mdi->filename_buf = NULL; g_free ( mdi ); } static void weak_ref_cb(gpointer ptr, GObject * dead_vml) { MapDownloadInfo *mdi = ptr; g_mutex_lock(mdi->mutex); mdi->map_layer_alive = FALSE; g_mutex_unlock(mdi->mutex); } static int map_download_thread ( MapDownloadInfo *mdi, gpointer threaddata ) { void *handle = vik_map_source_download_handle_init(MAPS_LAYER_NTH_TYPE(mdi->maptype)); guint donemaps = 0; gint x, y; for ( x = mdi->x0; x <= mdi->xf; x++ ) { for ( y = mdi->y0; y <= mdi->yf; y++ ) { gboolean remove_mem_cache = FALSE; gboolean need_download = FALSE; g_snprintf ( mdi->filename_buf, mdi->maxlen, DIRSTRUCTURE, mdi->cache_dir, vik_map_source_get_uniq_id(MAPS_LAYER_NTH_TYPE(mdi->maptype)), mdi->mapcoord.scale, mdi->mapcoord.z, x, y ); donemaps++; int res = a_background_thread_progress ( threaddata, ((gdouble)donemaps) / mdi->mapstoget ); /* this also calls testcancel */ if (res != 0) { vik_map_source_download_handle_cleanup(MAPS_LAYER_NTH_TYPE(mdi->maptype), handle); return -1; } if ( g_file_test ( mdi->filename_buf, G_FILE_TEST_EXISTS ) == FALSE ) { need_download = TRUE; remove_mem_cache = TRUE; } else { /* in case map file already exists */ switch (mdi->redownload) { case REDOWNLOAD_NONE: continue; case REDOWNLOAD_BAD: { /* 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)) { g_remove ( mdi->filename_buf ); need_download = TRUE; remove_mem_cache = TRUE; g_error_free ( gx ); } else { g_object_unref ( pixbuf ); } break; } case REDOWNLOAD_NEW: need_download = TRUE; remove_mem_cache = TRUE; break; case REDOWNLOAD_ALL: /* FIXME: need a better way than to erase file in case of server/network problem */ g_remove ( mdi->filename_buf ); need_download = TRUE; remove_mem_cache = TRUE; break; case DOWNLOAD_OR_REFRESH: remove_mem_cache = TRUE; break; default: g_warning ( "redownload state %d unknown\n", mdi->redownload); } } mdi->mapcoord.x = x; mdi->mapcoord.y = y; if (need_download) { if ( vik_map_source_download( MAPS_LAYER_NTH_TYPE(mdi->maptype), &(mdi->mapcoord), mdi->filename_buf, handle)) continue; } g_mutex_lock(mdi->mutex); if (remove_mem_cache) 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) ); // NB update display from background } g_mutex_unlock(mdi->mutex); mdi->mapcoord.x = mdi->mapcoord.y = 0; /* we're temporarily between downloads */ } } vik_map_source_download_handle_cleanup(MAPS_LAYER_NTH_TYPE(mdi->maptype), handle); g_mutex_lock(mdi->mutex); if (mdi->map_layer_alive) g_object_weak_unref(G_OBJECT(mdi->vml), weak_ref_cb, mdi); g_mutex_unlock(mdi->mutex); return 0; } static void mdi_cancel_cleanup ( MapDownloadInfo *mdi ) { if ( mdi->mapcoord.x || mdi->mapcoord.y ) { g_snprintf ( mdi->filename_buf, mdi->maxlen, DIRSTRUCTURE, 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 ( g_file_test ( mdi->filename_buf, G_FILE_TEST_EXISTS ) == TRUE) { g_remove ( mdi->filename_buf ); } } } static void start_download_thread ( VikMapsLayer *vml, VikViewport *vvp, const VikCoord *ul, const VikCoord *br, gint redownload ) { 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; 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 ) ) { MapDownloadInfo *mdi = g_malloc ( sizeof(MapDownloadInfo) ); gint a, b; mdi->vml = vml; mdi->vvp = vvp; mdi->map_layer_alive = TRUE; mdi->mutex = g_mutex_new(); mdi->refresh_display = TRUE; /* cache_dir and buffer for dest filename */ mdi->cache_dir = g_strdup ( vml->cache_dir ); mdi->maxlen = strlen ( vml->cache_dir ) + 40; mdi->filename_buf = g_malloc ( mdi->maxlen * sizeof(gchar) ); mdi->maptype = vml->maptype; mdi->mapcoord = ulm; mdi->redownload = redownload; mdi->x0 = MIN(ulm.x, brm.x); mdi->xf = MAX(ulm.x, brm.x); mdi->y0 = MIN(ulm.y, brm.y); mdi->yf = MAX(ulm.y, brm.y); mdi->mapstoget = 0; if ( mdi->redownload ) { mdi->mapstoget = (mdi->xf - mdi->x0 + 1) * (mdi->yf - mdi->y0 + 1); } else { /* calculate how many we need */ for ( a = mdi->x0; a <= mdi->xf; a++ ) { for ( b = mdi->y0; b <= mdi->yf; b++ ) { g_snprintf ( mdi->filename_buf, mdi->maxlen, DIRSTRUCTURE, vml->cache_dir, vik_map_source_get_uniq_id(map), ulm.scale, ulm.z, a, b ); 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 ) { 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 */ tmp, /* description string */ (vik_thr_func) map_download_thread, /* function to call within thread */ mdi, /* pass along data */ (vik_thr_free_func) mdi_free, /* function to free pass along data */ (vik_thr_free_func) mdi_cancel_cleanup, mdi->mapstoget ); g_free ( tmp ); } else mdi_free ( mdi ); } } 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__); return; } MapDownloadInfo *mdi = g_malloc(sizeof(MapDownloadInfo)); gint i, j; mdi->vml = vml; mdi->vvp = vvp; mdi->map_layer_alive = TRUE; mdi->mutex = g_mutex_new(); mdi->refresh_display = TRUE; mdi->cache_dir = g_strdup ( vml->cache_dir ); mdi->maxlen = strlen ( vml->cache_dir ) + 40; mdi->filename_buf = g_malloc ( mdi->maxlen * sizeof(gchar) ); mdi->maptype = vml->maptype; mdi->mapcoord = ulm; mdi->redownload = REDOWNLOAD_NONE; mdi->x0 = MIN(ulm.x, brm.x); mdi->xf = MAX(ulm.x, brm.x); mdi->y0 = MIN(ulm.y, brm.y); mdi->yf = MAX(ulm.y, brm.y); mdi->mapstoget = 0; 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, vik_map_source_get_uniq_id(map), ulm.scale, ulm.z, i, j ); 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; 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 */ a_background_thread ( VIK_GTK_WINDOW_FROM_LAYER(vml), /* parent window */ tmp, /* description string */ (vik_thr_func) map_download_thread, /* function to call within thread */ mdi, /* pass along data */ (vik_thr_free_func) mdi_free, /* function to free pass along data */ (vik_thr_free_func) mdi_cancel_cleanup, mdi->mapstoget ); g_free ( tmp ); } else mdi_free ( mdi ); } static void maps_layer_redownload_bad ( VikMapsLayer *vml ) { start_download_thread ( vml, vml->redownload_vvp, &(vml->redownload_ul), &(vml->redownload_br), REDOWNLOAD_BAD ); } static void maps_layer_redownload_all ( VikMapsLayer *vml ) { start_download_thread ( vml, vml->redownload_vvp, &(vml->redownload_ul), &(vml->redownload_br), REDOWNLOAD_ALL ); } static void maps_layer_redownload_new ( VikMapsLayer *vml ) { start_download_thread ( vml, vml->redownload_vvp, &(vml->redownload_ul), &(vml->redownload_br), REDOWNLOAD_NEW ); } /** * Display a simple dialog with information about this particular map tile */ static void maps_layer_tile_info ( VikMapsLayer *vml ) { VikMapSource *map = MAPS_LAYER_NTH_TYPE(vml->maptype); gdouble xzoom = vml->xmapzoom ? vml->xmapzoom : vik_viewport_get_xmpp ( vml->redownload_vvp ); gdouble yzoom = vml->ymapzoom ? vml->ymapzoom : vik_viewport_get_ympp ( vml->redownload_vvp ); MapCoord ulm; if ( !vik_map_source_coord_to_mapcoord ( map, &(vml->redownload_ul), xzoom, yzoom, &ulm ) ) return; gchar *filename = NULL; gchar *message = NULL; gchar *source = NULL; if ( vik_map_source_is_direct_file_access ( map ) ) { filename = g_strdup_printf ( DIRECTDIRACCESS, vml->cache_dir, ulm.scale, ulm.x, ulm.y, ".png" ); source = g_strconcat ( "file://", filename, NULL ); } else { filename = g_strdup_printf ( DIRSTRUCTURE, vml->cache_dir, vik_map_source_get_uniq_id(map), ulm.scale, ulm.z, ulm.x, ulm.y ); source = g_strdup_printf ( "http://%s%s", vik_map_source_default_get_hostname ( VIK_MAP_SOURCE_DEFAULT(map) ), vik_map_source_default_get_uri ( VIK_MAP_SOURCE_DEFAULT(map), &ulm ) ); } if ( g_file_test ( filename, G_FILE_TEST_EXISTS ) ) { // Get some timestamp information of the tile struct stat stat_buf; if ( g_stat ( filename, &stat_buf ) == 0 ) { time_t file_time = stat_buf.st_mtime; #if GLIB_CHECK_VERSION(2,26,0) GDateTime* gdt = g_date_time_new_from_unix_utc ( file_time ); gchar *time = g_date_time_format ( gdt, "%c" ); #else GDate* gdate = g_date_new (); g_date_set_time_t ( gdate, file_time ); char time[32]; g_date_strftime ( time, sizeof(time), "%c", gdate ); g_date_free ( gdate ); #endif message = g_strdup_printf ( _("\nSource: %s\n\nTile File: %s\nTile File Timestamp: %s"), source, filename, time ); #if GLIB_CHECK_VERSION(2,26,0) g_free ( time ); g_date_time_unref ( gdt); #endif } } else message = g_strdup_printf ( _("Source: %s\n\nNo Tile File!"), source ); // Show the info a_dialog_info_msg ( VIK_GTK_WINDOW_FROM_LAYER(vml), message ); g_free ( message ); g_free ( source ); g_free ( filename ); } static gboolean maps_layer_download_release ( VikMapsLayer *vml, GdkEventButton *event, VikViewport *vvp ) { if (!vml || vml->vl.type != VIK_LAYER_MAPS) return FALSE; if ( vml->dl_tool_x != -1 && vml->dl_tool_y != -1 ) { if ( event->button == 1 ) { VikCoord ul, br; vik_viewport_screen_to_coord ( vvp, MAX(0, MIN(event->x, vml->dl_tool_x)), MAX(0, MIN(event->y, vml->dl_tool_y)), &ul ); vik_viewport_screen_to_coord ( vvp, MIN(vik_viewport_get_width(vvp), MAX(event->x, vml->dl_tool_x)), MIN(vik_viewport_get_height(vvp), MAX ( event->y, vml->dl_tool_y ) ), &br ); start_download_thread ( vml, vvp, &ul, &br, DOWNLOAD_OR_REFRESH ); vml->dl_tool_x = vml->dl_tool_y = -1; return TRUE; } else { vik_viewport_screen_to_coord ( vvp, MAX(0, MIN(event->x, vml->dl_tool_x)), MAX(0, MIN(event->y, vml->dl_tool_y)), &(vml->redownload_ul) ); vik_viewport_screen_to_coord ( vvp, MIN(vik_viewport_get_width(vvp), MAX(event->x, vml->dl_tool_x)), MIN(vik_viewport_get_height(vvp), MAX ( event->y, vml->dl_tool_y ) ), &(vml->redownload_br) ); vml->redownload_vvp = vvp; vml->dl_tool_x = vml->dl_tool_y = -1; if ( ! vml->dl_right_click_menu ) { GtkWidget *item; vml->dl_right_click_menu = GTK_MENU ( gtk_menu_new () ); item = gtk_menu_item_new_with_mnemonic ( _("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_mnemonic ( _("Redownload _New Map(s)") ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(maps_layer_redownload_new), vml ); gtk_menu_shell_append ( GTK_MENU_SHELL(vml->dl_right_click_menu), item ); item = gtk_menu_item_new_with_mnemonic ( _("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 ); item = gtk_image_menu_item_new_with_mnemonic ( _("_Show Tile Information") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_INFO, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(maps_layer_tile_info), vml ); gtk_menu_shell_append (GTK_MENU_SHELL(vml->dl_right_click_menu), item); } gtk_menu_popup ( vml->dl_right_click_menu, NULL, NULL, NULL, NULL, event->button, event->time ); gtk_widget_show_all ( GTK_WIDGET(vml->dl_right_click_menu) ); } } return FALSE; } static gpointer maps_layer_download_create ( VikWindow *vw, VikViewport *vvp) { return vvp; } static gboolean maps_layer_download_click ( VikMapsLayer *vml, GdkEventButton *event, VikViewport *vvp ) { MapCoord tmp; if (!vml || vml->vl.type != VIK_LAYER_MAPS) return FALSE; 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 ) ) { vml->dl_tool_x = event->x, vml->dl_tool_y = event->y; return TRUE; } return FALSE; #if 0 if ( __map_types[vml->maptype].drawmode == vik_viewport_get_drawmode ( vvp ) ) { VikCoord coord; MapCoord mapcoord; vik_viewport_screen_to_coord ( vvp, event->x, event->y, &coord ); if ( __map_types[vml->maptype].coord_to_mapcoord ( &coord, vml->xmapzoom ? vml->xmapzoom : vik_viewport_get_xmpp ( vvp ), vml->ymapzoom ? vml->ymapzoom : vik_viewport_get_ympp ( vvp ), &mapcoord ) ) { gchar *filename_buf = g_strdup_printf ( DIRSTRUCTURE, vml->cache_dir, __map_types[vml->maptype].uniq_id, mapcoord.scale, mapcoord.z, mapcoord.x, mapcoord.y ); __map_types[vml->maptype].download ( &mapcoord, filename_buf ); g_free ( filename_buf ); vik_layer_emit_update ( VIK_LAYER(vml) ); return TRUE; } } return FALSE; #endif } static void download_onscreen_maps ( gpointer vml_vvp[2], gint redownload ) { VikMapsLayer *vml = vml_vvp[0]; VikViewport *vvp = vml_vvp[1]; VikViewportDrawMode vp_drawmode = vik_viewport_get_drawmode ( vvp ); gdouble xzoom = vml->xmapzoom ? vml->xmapzoom : vik_viewport_get_xmpp ( vvp ); gdouble yzoom = vml->ymapzoom ? vml->ymapzoom : vik_viewport_get_ympp ( vvp ); VikCoord ul, br; MapCoord ulm, brm; 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 ); 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 (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.") ); } static void maps_layer_download_missing_onscreen_maps ( gpointer vml_vvp[2] ) { download_onscreen_maps( vml_vvp, REDOWNLOAD_NONE); } static void maps_layer_download_new_onscreen_maps ( gpointer vml_vvp[2] ) { download_onscreen_maps( vml_vvp, REDOWNLOAD_NEW); } static void maps_layer_redownload_all_onscreen_maps ( gpointer vml_vvp[2] ) { download_onscreen_maps( vml_vvp, REDOWNLOAD_ALL); } static void maps_layer_add_menu_items ( VikMapsLayer *vml, GtkMenu *menu, VikLayersPanel *vlp ) { static gpointer pass_along[2]; GtkWidget *item; pass_along[0] = vml; pass_along[1] = vik_layers_panel_get_viewport( VIK_LAYERS_PANEL(vlp) ); item = gtk_menu_item_new(); gtk_menu_shell_append ( GTK_MENU_SHELL(menu), item ); gtk_widget_show ( item ); /* Now with icons */ item = gtk_image_menu_item_new_with_mnemonic ( _("Download _Missing Onscreen Maps") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_ADD, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(maps_layer_download_missing_onscreen_maps), pass_along ); gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); gtk_widget_show ( item ); if ( vik_map_source_supports_download_only_new (MAPS_LAYER_NTH_TYPE(vml->maptype)) ) { item = gtk_image_menu_item_new_with_mnemonic ( _("Download _New Onscreen Maps") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_REDO, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(maps_layer_download_new_onscreen_maps), pass_along ); gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); gtk_widget_show ( item ); } item = gtk_image_menu_item_new_with_mnemonic ( _("Reload _All Onscreen Maps") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_REFRESH, GTK_ICON_SIZE_MENU) ); 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 ); } /** * 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 ); } viking-1.4.2/src/vikmapsource.c0000644000175000017500000002142612175546146013411 00000000000000/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * viking * Copyright (C) 2009-2010, Guilhem Bonnefille * * viking is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * viking is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ /** * SECTION:vikmapsource * @short_description: the base class to describe map source * * The #VikMapSource class is both the interface and the base class * for the hierarchie of map source. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "vikviewport.h" #include "vikcoord.h" #include "mapcoord.h" #include "vikmapsource.h" static void vik_map_source_init (VikMapSource *object); static void vik_map_source_finalize (GObject *object); static void vik_map_source_class_init (VikMapSourceClass *klass); static gboolean _supports_download_only_new (VikMapSource *object); G_DEFINE_ABSTRACT_TYPE (VikMapSource, vik_map_source, G_TYPE_OBJECT); static void vik_map_source_init (VikMapSource *object) { /* TODO: Add initialization code here */ } static void vik_map_source_finalize (GObject *object) { /* TODO: Add deinitalization code here */ G_OBJECT_CLASS (vik_map_source_parent_class)->finalize (object); } static void vik_map_source_class_init (VikMapSourceClass *klass) { GObjectClass* object_class = G_OBJECT_CLASS (klass); klass->get_copyright = NULL; klass->get_license = NULL; klass->get_license_url = NULL; klass->get_logo = NULL; klass->get_uniq_id = NULL; klass->get_label = NULL; klass->get_tilesize_x = NULL; klass->get_tilesize_y = NULL; klass->get_drawmode = NULL; klass->is_direct_file_access = NULL; klass->supports_download_only_new = _supports_download_only_new; klass->coord_to_mapcoord = NULL; klass->mapcoord_to_center_coord = NULL; klass->download = NULL; klass->download_handle_init = NULL; klass->download_handle_cleanup = NULL; object_class->finalize = vik_map_source_finalize; } gboolean _supports_download_only_new (VikMapSource *self) { // Default feature: does not support return FALSE; } /** * vik_map_source_get_copyright: * @self: the VikMapSource of interest. * @bbox: bounding box of interest. * @zoom: the zoom level of interest. * @fct: the callback function to use to return matching copyrights. * @data: the user data to use to call the callbaack function. * * Retrieve copyright(s) for the corresponding bounding box and zoom level. */ void vik_map_source_get_copyright (VikMapSource *self, LatLonBBox bbox, gdouble zoom, void (*fct)(VikViewport*,const gchar*), void *data) { VikMapSourceClass *klass; g_return_if_fail (self != NULL); g_return_if_fail (VIK_IS_MAP_SOURCE (self)); klass = VIK_MAP_SOURCE_GET_CLASS(self); g_return_if_fail (klass->get_copyright != NULL); (*klass->get_copyright)(self, bbox, zoom, fct, data); } const gchar * vik_map_source_get_license (VikMapSource *self) { VikMapSourceClass *klass; g_return_val_if_fail (self != NULL, NULL); g_return_val_if_fail (VIK_IS_MAP_SOURCE (self), NULL); klass = VIK_MAP_SOURCE_GET_CLASS(self); g_return_val_if_fail (klass->get_license != NULL, NULL); return (*klass->get_license)(self); } const gchar * vik_map_source_get_license_url (VikMapSource *self) { VikMapSourceClass *klass; g_return_val_if_fail (self != NULL, NULL); g_return_val_if_fail (VIK_IS_MAP_SOURCE (self), NULL); klass = VIK_MAP_SOURCE_GET_CLASS(self); g_return_val_if_fail (klass->get_license_url != NULL, NULL); return (*klass->get_license_url)(self); } const GdkPixbuf * vik_map_source_get_logo (VikMapSource *self) { VikMapSourceClass *klass; g_return_val_if_fail (self != NULL, NULL); g_return_val_if_fail (VIK_IS_MAP_SOURCE (self), NULL); klass = VIK_MAP_SOURCE_GET_CLASS(self); g_return_val_if_fail (klass->get_logo != NULL, NULL); return (*klass->get_logo)(self); } guint16 vik_map_source_get_uniq_id (VikMapSource *self) { VikMapSourceClass *klass; g_return_val_if_fail (self != NULL, (guint16 )0); g_return_val_if_fail (VIK_IS_MAP_SOURCE (self), (guint16 )0); klass = VIK_MAP_SOURCE_GET_CLASS(self); g_return_val_if_fail (klass->get_uniq_id != NULL, (guint16 )0); return (*klass->get_uniq_id)(self); } const gchar * vik_map_source_get_label (VikMapSource *self) { VikMapSourceClass *klass; g_return_val_if_fail (self != NULL, NULL); g_return_val_if_fail (VIK_IS_MAP_SOURCE (self), NULL); klass = VIK_MAP_SOURCE_GET_CLASS(self); g_return_val_if_fail (klass->get_label != NULL, NULL); return (*klass->get_label)(self); } guint16 vik_map_source_get_tilesize_x (VikMapSource *self) { VikMapSourceClass *klass; g_return_val_if_fail (self != NULL, (guint16 )0); g_return_val_if_fail (VIK_IS_MAP_SOURCE (self), (guint16 )0); klass = VIK_MAP_SOURCE_GET_CLASS(self); g_return_val_if_fail (klass->get_tilesize_x != NULL, (guint16 )0); return (*klass->get_tilesize_x)(self); } guint16 vik_map_source_get_tilesize_y (VikMapSource *self) { VikMapSourceClass *klass; g_return_val_if_fail (self != NULL, (guint16 )0); g_return_val_if_fail (VIK_IS_MAP_SOURCE (self), (guint16 )0); klass = VIK_MAP_SOURCE_GET_CLASS(self); g_return_val_if_fail (klass->get_tilesize_y != NULL, (guint16 )0); return (*klass->get_tilesize_y)(self); } VikViewportDrawMode vik_map_source_get_drawmode (VikMapSource *self) { VikMapSourceClass *klass; g_return_val_if_fail (self != NULL, (VikViewportDrawMode )0); g_return_val_if_fail (VIK_IS_MAP_SOURCE (self), (VikViewportDrawMode )0); klass = VIK_MAP_SOURCE_GET_CLASS(self); g_return_val_if_fail (klass->get_drawmode != NULL, (VikViewportDrawMode )0); return (*klass->get_drawmode)(self); } /** * vik_map_source_is_direct_file_access: * @self: the VikMapSource of interest. * * Return true when we can bypass all this download malarky * Treat the files as a pre generated data set in OSM tile server layout: /%d/%d/%d.png */ gboolean vik_map_source_is_direct_file_access (VikMapSource * self) { VikMapSourceClass *klass; g_return_val_if_fail (self != NULL, 0); g_return_val_if_fail (VIK_IS_MAP_SOURCE (self), 0); klass = VIK_MAP_SOURCE_GET_CLASS(self); g_return_val_if_fail (klass->is_direct_file_access != NULL, 0); return (*klass->is_direct_file_access)(self); } gboolean vik_map_source_supports_download_only_new (VikMapSource * self) { VikMapSourceClass *klass; g_return_val_if_fail (self != NULL, 0); g_return_val_if_fail (VIK_IS_MAP_SOURCE (self), 0); klass = VIK_MAP_SOURCE_GET_CLASS(self); g_return_val_if_fail (klass->supports_download_only_new != NULL, 0); return (*klass->supports_download_only_new)(self); } gboolean vik_map_source_coord_to_mapcoord (VikMapSource *self, const VikCoord *src, gdouble xzoom, gdouble yzoom, MapCoord *dest ) { VikMapSourceClass *klass; g_return_val_if_fail (self != NULL, FALSE); g_return_val_if_fail (VIK_IS_MAP_SOURCE (self), FALSE); klass = VIK_MAP_SOURCE_GET_CLASS(self); g_return_val_if_fail (klass->coord_to_mapcoord != NULL, FALSE); return (*klass->coord_to_mapcoord)(self, src, xzoom, yzoom, dest); } void vik_map_source_mapcoord_to_center_coord (VikMapSource *self, MapCoord *src, VikCoord *dest) { VikMapSourceClass *klass; g_return_if_fail (self != NULL); g_return_if_fail (VIK_IS_MAP_SOURCE (self)); klass = VIK_MAP_SOURCE_GET_CLASS(self); g_return_if_fail (klass->mapcoord_to_center_coord != NULL); (*klass->mapcoord_to_center_coord)(self, src, dest); } int vik_map_source_download (VikMapSource * self, MapCoord * src, const gchar * dest_fn, void *handle) { VikMapSourceClass *klass; g_return_val_if_fail (self != NULL, 0); g_return_val_if_fail (VIK_IS_MAP_SOURCE (self), 0); klass = VIK_MAP_SOURCE_GET_CLASS(self); g_return_val_if_fail (klass->download != NULL, 0); return (*klass->download)(self, src, dest_fn, handle); } void * vik_map_source_download_handle_init (VikMapSource *self) { VikMapSourceClass *klass; g_return_val_if_fail (self != NULL, 0); g_return_val_if_fail (VIK_IS_MAP_SOURCE (self), 0); klass = VIK_MAP_SOURCE_GET_CLASS(self); g_return_val_if_fail (klass->download_handle_init != NULL, 0); return (*klass->download_handle_init)(self); } void vik_map_source_download_handle_cleanup (VikMapSource * self, void * handle) { VikMapSourceClass *klass; g_return_if_fail (self != NULL); g_return_if_fail (VIK_IS_MAP_SOURCE (self)); klass = VIK_MAP_SOURCE_GET_CLASS(self); g_return_if_fail (klass->download_handle_cleanup != NULL); (*klass->download_handle_cleanup)(self, handle); } viking-1.4.2/src/terraservermapsource.c0000644000175000017500000001775712174331626015172 00000000000000/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * viking * Copyright (C) 2009, Guilhem Bonnefille * * viking is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * viking is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef HAVE_MATH_H #include #endif #include "globals.h" #include "terraservermapsource.h" 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 gchar *_get_uri( VikMapSourceDefault *self, MapCoord *src ); static gchar *_get_hostname( VikMapSourceDefault *self ); static DownloadMapOptions *_get_download_options( VikMapSourceDefault *self ); /* FIXME Huge gruik */ static DownloadMapOptions terraserver_options = { FALSE, FALSE, NULL, 0, a_check_map_file }; typedef struct _TerraserverMapSourcePrivate TerraserverMapSourcePrivate; struct _TerraserverMapSourcePrivate { guint8 type; }; #define TERRASERVER_MAP_SOURCE_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TERRASERVER_TYPE_MAP_SOURCE, TerraserverMapSourcePrivate)) /* properties */ enum { PROP_0, PROP_TYPE, }; G_DEFINE_TYPE (TerraserverMapSource, terraserver_map_source, VIK_TYPE_MAP_SOURCE_DEFAULT); static void terraserver_map_source_init (TerraserverMapSource *self) { /* initialize the object here */ g_object_set (G_OBJECT (self), "tilesize-x", 200, "tilesize-y", 200, "drawmode", VIK_VIEWPORT_DRAWMODE_UTM, NULL); } static void terraserver_map_source_finalize (GObject *object) { /* TODO: Add deinitalization code here */ G_OBJECT_CLASS (terraserver_map_source_parent_class)->finalize (object); } static void terraserver_map_source_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { TerraserverMapSource *self = TERRASERVER_MAP_SOURCE (object); TerraserverMapSourcePrivate *priv = TERRASERVER_MAP_SOURCE_PRIVATE (self); switch (property_id) { case PROP_TYPE: priv->type = g_value_get_uint (value); break; default: /* We don't have any other property... */ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void terraserver_map_source_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { TerraserverMapSource *self = TERRASERVER_MAP_SOURCE (object); TerraserverMapSourcePrivate *priv = TERRASERVER_MAP_SOURCE_PRIVATE (self); switch (property_id) { case PROP_TYPE: g_value_set_uint (value, priv->type); break; default: /* We don't have any other property... */ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void terraserver_map_source_class_init (TerraserverMapSourceClass *klass) { GObjectClass* object_class = G_OBJECT_CLASS (klass); VikMapSourceClass* grandparent_class = VIK_MAP_SOURCE_CLASS (klass); VikMapSourceDefaultClass* parent_class = VIK_MAP_SOURCE_DEFAULT_CLASS (klass); GParamSpec *pspec = NULL; object_class->set_property = terraserver_map_source_set_property; object_class->get_property = terraserver_map_source_get_property; /* 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; parent_class->get_uri = _get_uri; parent_class->get_hostname = _get_hostname; parent_class->get_download_options = _get_download_options; pspec = g_param_spec_uint ("type", "Type", "Type of Terraserver map", 0 /* minimum value */, G_MAXUINT8 /* maximum value */, 0 /* default value */, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE); g_object_class_install_property (object_class, PROP_TYPE, pspec); g_type_class_add_private (klass, sizeof (TerraserverMapSourcePrivate)); object_class->finalize = terraserver_map_source_finalize; } #define TERRASERVER_SITE "msrmaps.com" #define MARGIN_OF_ERROR 0.001 static int mpp_to_scale ( gdouble mpp, guint8 type ) { mpp *= 4; gint t = (gint) mpp; if ( ABS(mpp - t) > MARGIN_OF_ERROR ) return FALSE; switch ( t ) { case 1: return (type == 4) ? 8 : 0; case 2: return (type == 4) ? 9 : 0; case 4: return (type != 2) ? 10 : 0; case 8: return 11; case 16: return 12; case 32: return 13; case 64: return 14; case 128: return 15; case 256: return 16; case 512: return 17; case 1024: return 18; case 2048: return 19; default: return 0; } } static gdouble scale_to_mpp ( gint scale ) { return pow(2,scale - 10); } static gboolean _coord_to_mapcoord ( VikMapSource *self, const VikCoord *src, gdouble xmpp, gdouble ympp, MapCoord *dest ) { g_return_val_if_fail(TERRASERVER_IS_MAP_SOURCE(self), FALSE); TerraserverMapSourcePrivate *priv = TERRASERVER_MAP_SOURCE_PRIVATE(self); int type = priv->type; if ( src->mode != VIK_COORD_UTM ) return FALSE; if ( xmpp != ympp ) return FALSE; dest->scale = mpp_to_scale ( xmpp, type ); if ( ! dest->scale ) return FALSE; dest->x = (gint)(((gint)(src->east_west))/(200*xmpp)); dest->y = (gint)(((gint)(src->north_south))/(200*xmpp)); dest->z = src->utm_zone; return TRUE; } static gboolean _is_direct_file_access ( VikMapSource *self ) { return FALSE; } static void _mapcoord_to_center_coord ( VikMapSource *self, MapCoord *src, VikCoord *dest ) { // FIXME: slowdown here! gdouble mpp = scale_to_mpp ( src->scale ); dest->mode = VIK_COORD_UTM; dest->utm_zone = src->z; dest->east_west = ((src->x * 200) + 100) * mpp; dest->north_south = ((src->y * 200) + 100) * mpp; } static gchar * _get_uri( VikMapSourceDefault *self, MapCoord *src ) { g_return_val_if_fail (TERRASERVER_IS_MAP_SOURCE(self), NULL); TerraserverMapSourcePrivate *priv = TERRASERVER_MAP_SOURCE_PRIVATE(self); int type = priv->type; gchar *uri = g_strdup_printf ( "/tile.ashx?T=%d&S=%d&X=%d&Y=%d&Z=%d", type, src->scale, src->x, src->y, src->z ); return uri; } static gchar * _get_hostname( VikMapSourceDefault *self ) { g_return_val_if_fail (TERRASERVER_IS_MAP_SOURCE(self), NULL); return g_strdup( TERRASERVER_SITE ); } static DownloadMapOptions * _get_download_options( VikMapSourceDefault *self ) { g_return_val_if_fail (TERRASERVER_IS_MAP_SOURCE(self), NULL); return &terraserver_options; } TerraserverMapSource * terraserver_map_source_new_with_id (guint16 id, const char *label, int type) { char *copyright = NULL; switch (type) { case 1: copyright = "© DigitalGlobe"; break; case 2: copyright = "© LandVoyage"; break; case 4: copyright = "© DigitalGlobe"; break; default: g_critical("Houston, we've had a problem. type=%d", type); } return g_object_new(TERRASERVER_TYPE_MAP_SOURCE, "id", id, "label", label, "type", type, "copyright", copyright, NULL); } viking-1.4.2/src/geonamessearch.h0000644000175000017500000000210312122673673013657 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2009, Hein Ragas * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef __VIK_GEONAMESSEARCH_H #define __VIK_GEONAMESSEARCH_H #include "viking.h" G_BEGIN_DECLS /* Finding Wikipedia entries within a certain box */ void a_geonames_wikipedia_box ( VikWindow *vw, VikTrwLayer *vtl, struct LatLon maxmin[2] ); G_END_DECLS #endif viking-1.4.2/src/vikmapsourcedefault.h0000644000175000017500000000473112175546146014763 00000000000000/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * viking * Copyright (C) 2009, Guilhem Bonnefille * * viking is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * viking is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef _VIK_MAP_SOURCE_DEFAULT_H_ #define _VIK_MAP_SOURCE_DEFAULT_H_ #include #include "vikmapsource.h" #include "download.h" G_BEGIN_DECLS #define VIK_TYPE_MAP_SOURCE_DEFAULT (vik_map_source_default_get_type ()) #define VIK_MAP_SOURCE_DEFAULT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIK_TYPE_MAP_SOURCE_DEFAULT, VikMapSourceDefault)) #define VIK_MAP_SOURCE_DEFAULT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VIK_TYPE_MAP_SOURCE_DEFAULT, VikMapSourceDefaultClass)) #define VIK_IS_MAP_SOURCE_DEFAULT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIK_TYPE_MAP_SOURCE_DEFAULT)) #define VIK_IS_MAP_SOURCE_DEFAULT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VIK_TYPE_MAP_SOURCE_DEFAULT)) #define VIK_MAP_SOURCE_DEFAULT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VIK_TYPE_MAP_SOURCE_DEFAULT, VikMapSourceDefaultClass)) typedef struct _VikMapSourceDefaultClass VikMapSourceDefaultClass; typedef struct _VikMapSourceDefault VikMapSourceDefault; struct _VikMapSourceDefaultClass { VikMapSourceClass parent_class; gchar * (*get_uri) ( VikMapSourceDefault *self, MapCoord *src ); gchar * (*get_hostname) ( VikMapSourceDefault *self ); DownloadMapOptions * (*get_download_options) ( VikMapSourceDefault *self ); }; struct _VikMapSourceDefault { VikMapSource parent_instance; }; GType vik_map_source_default_get_type (void) G_GNUC_CONST; gchar * vik_map_source_default_get_uri( VikMapSourceDefault *self, MapCoord *src ); gchar * vik_map_source_default_get_hostname( VikMapSourceDefault *self ); DownloadMapOptions * vik_map_source_default_get_download_options( VikMapSourceDefault *self ); G_END_DECLS #endif /* _VIK_MAP_SOURCE_DEFAULT_H_ */ viking-1.4.2/src/vikcoordlayer.h0000644000175000017500000000372112175546146013561 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef _VIKING_COORDLAYER_H #define _VIKING_COORDLAYER_H #include "viklayer.h" G_BEGIN_DECLS #define VIK_COORD_LAYER_TYPE (vik_coord_layer_get_type ()) #define VIK_COORD_LAYER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIK_COORD_LAYER_TYPE, VikCoordLayer)) #define VIK_COORD_LAYER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VIK_COORD_LAYER_TYPE, VikCoordLayerClass)) #define IS_VIK_COORD_LAYER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIK_COORD_LAYER_TYPE)) #define IS_VIK_COORD_LAYER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VIK_COORD_LAYER_TYPE)) typedef struct _VikCoordLayerClass VikCoordLayerClass; struct _VikCoordLayerClass { VikLayerClass object_class; }; GType vik_coord_layer_get_type (); typedef struct _VikCoordLayer VikCoordLayer; /* TODO 0.0.8: yup, everything goes. */ VikCoordLayer *vik_coord_layer_new ( ); void vik_coord_layer_draw ( VikCoordLayer *vcl, gpointer data ); void vik_coord_layer_free ( VikCoordLayer *vcl ); VikCoordLayer *vik_coord_layer_create ( VikViewport *vp ); gboolean vik_coord_layer_properties ( VikCoordLayer *vcl, gpointer vp ); G_END_DECLS #endif viking-1.4.2/src/datasource_bfilter.c0000644000175000017500000001507212175546146014542 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2007, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include "viking.h" #include "babel.h" #include "gpx.h" #include "acquire.h" /************************************ Simplify ***********************************/ static void datasource_bfilter_simplify_get_cmd_string ( VikLayerParamData *paramdatas, gchar **cmd, gchar **input_file_type, const gchar *input_filename, gpointer not_used ); /* TODO: shell_escape stuff */ /* TODO: name is useless for filters */ /* spin button scales */ VikLayerParamScale simplify_params_scales[] = { {1, 10000, 10, 0}, }; VikLayerParam bfilter_simplify_params[] = { { "numberofpoints", VIK_LAYER_PARAM_UINT, VIK_LAYER_GROUP_NONE, N_("Max number of points:"), VIK_LAYER_WIDGET_SPINBUTTON, simplify_params_scales, NULL, NULL }, }; VikLayerParamData bfilter_simplify_params_defaults[] = { /* Annoyingly 'C' cannot initialize unions properly */ /* It's dependent on the standard used or the compiler support... */ #if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L || __GNUC__ { .i = 100 }, #else { 100 }, #endif }; VikDataSourceInterface vik_datasource_bfilter_simplify_interface = { N_("Simplify All Tracks..."), N_("Simplified Tracks"), VIK_DATASOURCE_CREATENEWLAYER, VIK_DATASOURCE_INPUTTYPE_TRWLAYER, TRUE, FALSE, /* keep dialog open after success */ TRUE, NULL, NULL, NULL, (VikDataSourceGetCmdStringFunc) datasource_bfilter_simplify_get_cmd_string, (VikDataSourceProcessFunc) a_babel_convert_from_shellcommand, NULL, NULL, NULL, (VikDataSourceOffFunc) NULL, bfilter_simplify_params, sizeof(bfilter_simplify_params)/sizeof(bfilter_simplify_params[0]), bfilter_simplify_params_defaults, NULL, 0 }; static void datasource_bfilter_simplify_get_cmd_string ( VikLayerParamData *paramdatas, gchar **cmd, gchar **input_file_type, const gchar *input_filename, gpointer not_used ) { *input_file_type = NULL; *cmd = g_strdup_printf ( "gpsbabel -i gpx -f %s -x simplify,count=%d -o gpx -F -", input_filename, paramdatas[0].u ); } /************************************ Duplicate Location ***********************************/ static void datasource_bfilter_dup_get_cmd_string ( VikLayerParamData *paramdatas, gchar **cmd, gchar **input_file_type, const gchar *input_filename, gpointer not_used ); /* TODO: shell_escape stuff */ /* TODO: name is useless for filters */ VikDataSourceInterface vik_datasource_bfilter_dup_interface = { N_("Remove Duplicate Waypoints"), N_("Remove Duplicate Waypoints"), VIK_DATASOURCE_CREATENEWLAYER, VIK_DATASOURCE_INPUTTYPE_TRWLAYER, TRUE, FALSE, /* keep dialog open after success */ TRUE, NULL, NULL, NULL, (VikDataSourceGetCmdStringFunc) datasource_bfilter_dup_get_cmd_string, (VikDataSourceProcessFunc) a_babel_convert_from_shellcommand, NULL, NULL, NULL, (VikDataSourceOffFunc) NULL, NULL, 0, NULL, NULL, 0 }; static void datasource_bfilter_dup_get_cmd_string ( VikLayerParamData *paramdatas, gchar **cmd, gchar **input_file_type, const gchar *input_filename, gpointer not_used ) { *input_file_type = NULL; *cmd = g_strdup_printf ( "gpsbabel -i gpx -f %s -x duplicate,location -o gpx -F -", input_filename ); } /************************************ Polygon ***********************************/ static void datasource_bfilter_polygon_get_cmd_string ( VikLayerParamData *paramdatas, gchar **cmd, gchar **input_file_type, const gchar *input_filename, const gchar *input_track_filename, gpointer not_used ); /* TODO: shell_escape stuff */ /* TODO: name is useless for filters */ VikDataSourceInterface vik_datasource_bfilter_polygon_interface = { N_("Waypoints Inside This"), N_("Polygonized Layer"), VIK_DATASOURCE_CREATENEWLAYER, VIK_DATASOURCE_INPUTTYPE_TRWLAYER_TRACK, TRUE, FALSE, /* keep dialog open after success */ TRUE, NULL, NULL, NULL, (VikDataSourceGetCmdStringFunc) datasource_bfilter_polygon_get_cmd_string, (VikDataSourceProcessFunc) a_babel_convert_from_shellcommand, NULL, NULL, NULL, (VikDataSourceOffFunc) NULL, NULL, 0, NULL, NULL, 0 }; static void datasource_bfilter_polygon_get_cmd_string ( VikLayerParamData *paramdatas, gchar **cmd, gchar **input_file_type, const gchar *input_filename, const gchar *input_track_filename, gpointer not_used ) { *input_file_type = NULL; *cmd = g_strdup_printf ( "gpsbabel -i gpx -f %s -o arc -F - | gpsbabel -i gpx -f %s -x polygon,file=- -o gpx -F -", input_track_filename, input_filename ); } /************************************ Exclude Polygon ***********************************/ static void datasource_bfilter_exclude_polygon_get_cmd_string ( VikLayerParamData *paramdatas, gchar **cmd, gchar **input_file_type, const gchar *input_filename, const gchar *input_track_filename, gpointer not_used ); /* TODO: shell_escape stuff */ /* TODO: name is useless for filters */ VikDataSourceInterface vik_datasource_bfilter_exclude_polygon_interface = { N_("Waypoints Outside This"), N_("Polygonzied Layer"), VIK_DATASOURCE_CREATENEWLAYER, VIK_DATASOURCE_INPUTTYPE_TRWLAYER_TRACK, TRUE, FALSE, /* keep dialog open after success */ TRUE, NULL, NULL, NULL, (VikDataSourceGetCmdStringFunc) datasource_bfilter_exclude_polygon_get_cmd_string, (VikDataSourceProcessFunc) a_babel_convert_from_shellcommand, NULL, NULL, NULL, (VikDataSourceOffFunc) NULL, NULL, 0, NULL, NULL, 0 }; static void datasource_bfilter_exclude_polygon_get_cmd_string ( VikLayerParamData *paramdatas, gchar **cmd, gchar **input_file_type, const gchar *input_filename, const gchar *input_track_filename, gpointer not_used ) { *input_file_type = NULL; *cmd = g_strdup_printf ( "gpsbabel -i gpx -f %s -o arc -F - | gpsbabel -i gpx -f %s -x polygon,exclude,file=- -o gpx -F -", input_track_filename, input_filename ); } viking-1.4.2/src/globals.h0000644000175000017500000001127412175546146012331 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef __VIKING_GLOBALS_H #define __VIKING_GLOBALS_H #include G_BEGIN_DECLS #define PROJECT "Viking" #define VIKING_VERSION PACKAGE_VERSION #define VIKING_VERSION_NAME "This Name For Rent" #define VIKING_URL "http://viking.sf.net/" #define ALTI_TO_MPP 1.4017295 #define MPP_TO_ALTI 0.7134044 #define VIK_FEET_IN_METER 3.2808399 #define VIK_METERS_TO_FEET(X) ((X)*VIK_FEET_IN_METER) #define VIK_FEET_TO_METERS(X) ((X)/VIK_FEET_IN_METER) #define VIK_MILES_IN_METER 0.000621371192 #define VIK_METERS_TO_MILES(X) ((X)*VIK_MILES_IN_METER) #define VIK_MILES_TO_METERS(X) ((X)/VIK_MILES_IN_METER) /* MPS - Metres Per Second */ /* MPH - Metres Per Hour */ #define VIK_MPH_IN_MPS 2.23693629 #define VIK_MPS_TO_MPH(X) ((X)*VIK_MPH_IN_MPS) #define VIK_MPH_TO_MPS(X) ((X)/VIK_MPH_IN_MPS) /* KPH - Kilometres Per Hour */ #define VIK_KPH_IN_MPS 3.6 #define VIK_MPS_TO_KPH(X) ((X)*VIK_KPH_IN_MPS) #define VIK_KPH_TO_MPS(X) ((X)/VIK_KPH_IN_MPS) #define VIK_KNOTS_IN_MPS 1.94384449 #define VIK_MPS_TO_KNOTS(X) ((X)*VIK_KNOTS_IN_MPS) #define VIK_KNOTS_TO_MPS(X) ((X)/VIK_KNOTS_IN_MPS) #define VIK_DEFAULT_ALTITUDE 0.0 #define VIK_DEFAULT_DOP 0.0 #define VIK_GTK_WINDOW_FROM_WIDGET(x) GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(x))) #define VIK_GTK_WINDOW_FROM_LAYER(x) VIK_GTK_WINDOW_FROM_WIDGET(VIK_LAYER(x)->vt) #define DEG2RAD(x) ((x)*(M_PI/180)) #define RAD2DEG(x) ((x)*(180/M_PI)) /* mercator projection, latitude conversion (degrees) */ #define MERCLAT(x) (RAD2DEG(log(tan((0.25 * M_PI) + (0.5 * DEG2RAD(x)))))) #define DEMERCLAT(x) (RAD2DEG(atan(sinh(DEG2RAD(x))))) /* Some command line options */ extern gboolean vik_debug; extern gboolean vik_verbose; extern gboolean vik_version; /* Allow comparing versions */ gint viking_version_to_number ( gchar *version ); /* Global preferences */ void a_vik_preferences_init (); /* Coord display preferences */ typedef enum { VIK_DEGREE_FORMAT_DDD, VIK_DEGREE_FORMAT_DMM, VIK_DEGREE_FORMAT_DMS, } vik_degree_format_t; vik_degree_format_t a_vik_get_degree_format ( ); /* Distance preferences */ typedef enum { VIK_UNITS_DISTANCE_KILOMETRES, VIK_UNITS_DISTANCE_MILES, } vik_units_distance_t; vik_units_distance_t a_vik_get_units_distance ( ); /* Speed preferences */ typedef enum { VIK_UNITS_SPEED_KILOMETRES_PER_HOUR, VIK_UNITS_SPEED_MILES_PER_HOUR, VIK_UNITS_SPEED_METRES_PER_SECOND, VIK_UNITS_SPEED_KNOTS, } vik_units_speed_t; vik_units_speed_t a_vik_get_units_speed ( ); /* Height (Depth) preferences */ typedef enum { VIK_UNITS_HEIGHT_METRES, VIK_UNITS_HEIGHT_FEET, } vik_units_height_t; vik_units_height_t a_vik_get_units_height ( ); gboolean a_vik_get_use_large_waypoint_icons ( ); /* Location preferences */ typedef enum { VIK_LOCATION_LAT, VIK_LOCATION_LONG, } vik_location_t; gdouble a_vik_get_default_lat ( ); gdouble a_vik_get_default_long ( ); /* KML export preferences */ typedef enum { VIK_KML_EXPORT_UNITS_METRIC, VIK_KML_EXPORT_UNITS_STATUTE, VIK_KML_EXPORT_UNITS_NAUTICAL, } vik_kml_export_units_t; vik_kml_export_units_t a_vik_get_kml_export_units ( ); typedef enum { VIK_GPX_EXPORT_TRK_SORT_ALPHA, VIK_GPX_EXPORT_TRK_SORT_TIME, } vik_gpx_export_trk_sort_t; vik_gpx_export_trk_sort_t a_vik_get_gpx_export_trk_sort ( ); #ifndef WINDOWS /* Windows automatically uses the system defined viewer ATM for other systems need to specify the program to use */ const gchar* a_vik_get_image_viewer ( ); #endif const gchar* a_vik_get_external_gpx_program_1 ( ); const gchar* a_vik_get_external_gpx_program_2 ( ); /* Group for global preferences */ #define VIKING_PREFERENCES_GROUP_KEY "viking.globals" #define VIKING_PREFERENCES_NAMESPACE "viking.globals." /* Another group of global preferences, but in a separate section to try to keep things organized */ /* AKA Export/External Prefs */ #define VIKING_PREFERENCES_IO_GROUP_KEY "viking.io" #define VIKING_PREFERENCES_IO_NAMESPACE "viking.io." G_END_DECLS #endif viking-1.4.2/src/background.c0000644000175000017500000002115712175546146013021 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include #include "background.h" static GThreadPool *thread_pool = NULL; static gboolean stop_all_threads = FALSE; static GtkWidget *bgwindow = NULL; static GtkWidget *bgtreeview = NULL; static GtkListStore *bgstore = NULL; // Still only actually updating the statusbar though static GSList *windows_to_update = NULL; static gint bgitemcount = 0; #define VIK_BG_NUM_ARGS 7 enum { TITLE_COLUMN = 0, PROGRESS_COLUMN, DATA_COLUMN, N_COLUMNS, }; void a_background_update_status ( VikWindow *vw, gpointer data ) { static gchar buf[20]; g_snprintf(buf, sizeof(buf), _("%d items"), bgitemcount); vik_window_statusbar_update ( vw, buf, VIK_STATUSBAR_ITEMS ); } static void background_thread_update () { g_slist_foreach ( windows_to_update, (GFunc) a_background_update_status, NULL ); } int a_background_thread_progress ( gpointer callbackdata, gdouble fraction ) { gpointer *args = (gpointer *) callbackdata; int res = a_background_testcancel ( callbackdata ); if (args[5] != NULL) { gdk_threads_enter(); gtk_list_store_set( GTK_LIST_STORE(bgstore), (GtkTreeIter *) args[5], PROGRESS_COLUMN, fraction*100, -1 ); gdk_threads_leave(); } args[6] = GINT_TO_POINTER(GPOINTER_TO_INT(args[6])-1); bgitemcount--; background_thread_update(); return res; } static void thread_die ( gpointer args[VIK_BG_NUM_ARGS] ) { vik_thr_free_func userdata_free_func = args[3]; if ( userdata_free_func != NULL ) userdata_free_func ( args[2] ); if ( GPOINTER_TO_INT(args[6]) ) { bgitemcount -= GPOINTER_TO_INT(args[6]); background_thread_update (); } g_free ( args[5] ); /* free iter */ g_free ( args ); } int a_background_testcancel ( gpointer callbackdata ) { gpointer *args = (gpointer *) callbackdata; if ( stop_all_threads ) return -1; if ( args && args[0] ) { vik_thr_free_func cleanup = args[4]; if ( cleanup ) cleanup ( args[2] ); return -1; } return 0; } static void thread_helper ( gpointer args[VIK_BG_NUM_ARGS], gpointer user_data ) { /* unpack args */ vik_thr_func func = args[1]; gpointer userdata = args[2]; g_debug(__FUNCTION__); func ( userdata, args ); gdk_threads_enter(); if ( ! args[0] ) gtk_list_store_remove ( bgstore, (GtkTreeIter *) args[5] ); gdk_threads_leave(); thread_die ( args ); } /** * a_background_thread: * @parent: * @message: * @func: worker function * @userdata: * @userdata_free_func: free function for userdata * @userdata_cancel_cleanup_func: * @number_items: * * Function to enlist new background function. */ void a_background_thread ( GtkWindow *parent, const gchar *message, vik_thr_func func, gpointer userdata, vik_thr_free_func userdata_free_func, vik_thr_free_func userdata_cancel_cleanup_func, gint number_items ) { GtkTreeIter *piter = g_malloc ( sizeof ( GtkTreeIter ) ); gpointer *args = g_malloc ( sizeof(gpointer) * VIK_BG_NUM_ARGS ); g_debug(__FUNCTION__); args[0] = GINT_TO_POINTER(0); args[1] = func; args[2] = userdata; args[3] = userdata_free_func; args[4] = userdata_cancel_cleanup_func; args[5] = piter; args[6] = GINT_TO_POINTER(number_items); bgitemcount += number_items; gtk_list_store_append ( bgstore, piter ); gtk_list_store_set ( bgstore, piter, TITLE_COLUMN, message, PROGRESS_COLUMN, 0.0, DATA_COLUMN, args, -1 ); /* run the thread in the background */ g_thread_pool_push( thread_pool, args, NULL ); } /** * a_background_show_window: * * Display the background window. */ void a_background_show_window () { gtk_widget_show_all ( bgwindow ); } static void cancel_job_with_iter ( GtkTreeIter *piter ) { gpointer *args; g_debug(__FUNCTION__); gtk_tree_model_get( GTK_TREE_MODEL(bgstore), piter, DATA_COLUMN, &args, -1 ); /* we know args still exists because it is free _after_ the list item is destroyed */ /* need MUTEX ? */ args[0] = GINT_TO_POINTER(1); /* set killswitch */ gtk_list_store_remove ( bgstore, piter ); args[5] = NULL; } static void bgwindow_response (GtkDialog *dialog, gint arg1 ) { /* note this function is a signal handler called back from the GTK main loop, * so GDK is already locked. We need to release the lock before calling * thread-safe routines */ if ( arg1 == 1 ) /* cancel */ { GtkTreeIter iter; if ( gtk_tree_selection_get_selected ( gtk_tree_view_get_selection ( GTK_TREE_VIEW(bgtreeview) ), NULL, &iter ) ) cancel_job_with_iter ( &iter ); gdk_threads_leave(); background_thread_update(); gdk_threads_enter(); } else if ( arg1 == 2 ) /* clear */ { GtkTreeIter iter; while ( gtk_tree_model_get_iter_first ( GTK_TREE_MODEL(bgstore), &iter ) ) cancel_job_with_iter ( &iter ); gdk_threads_leave(); background_thread_update(); gdk_threads_enter(); } else /* OK */ gtk_widget_hide ( bgwindow ); } /** * a_background_init: * * Initialize background feature. */ void a_background_init() { /* initialize thread pool */ /* TODO parametrize this via preference and/or command line arg */ gint max_threads = 10; /* limit maximum number of threads running at one time */ thread_pool = g_thread_pool_new ( (GFunc) thread_helper, NULL, max_threads, FALSE, NULL ); GtkCellRenderer *renderer; GtkTreeViewColumn *column; GtkWidget *scrolled_window; g_debug(__FUNCTION__); /* store & treeview */ bgstore = gtk_list_store_new ( N_COLUMNS, G_TYPE_STRING, G_TYPE_DOUBLE, G_TYPE_POINTER ); bgtreeview = gtk_tree_view_new_with_model ( GTK_TREE_MODEL(bgstore) ); gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (bgtreeview), TRUE); gtk_tree_selection_set_mode (gtk_tree_view_get_selection (GTK_TREE_VIEW (bgtreeview)), GTK_SELECTION_SINGLE); /* add columns */ renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ( _("Job"), renderer, "text", TITLE_COLUMN, NULL ); gtk_tree_view_append_column ( GTK_TREE_VIEW(bgtreeview), column ); renderer = gtk_cell_renderer_progress_new (); column = gtk_tree_view_column_new_with_attributes ( _("Progress"), renderer, "value", PROGRESS_COLUMN, NULL ); gtk_tree_view_append_column ( GTK_TREE_VIEW(bgtreeview), column ); /* setup window */ scrolled_window = gtk_scrolled_window_new ( NULL, NULL ); gtk_container_add ( GTK_CONTAINER(scrolled_window), bgtreeview ); gtk_scrolled_window_set_policy ( GTK_SCROLLED_WINDOW(scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC ); bgwindow = gtk_dialog_new_with_buttons ( "", NULL, 0, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, GTK_STOCK_DELETE, 1, GTK_STOCK_CLEAR, 2, NULL ); gtk_dialog_set_default_response ( GTK_DIALOG(bgwindow), GTK_RESPONSE_ACCEPT ); GtkWidget *response_w = NULL; #if GTK_CHECK_VERSION (2, 20, 0) response_w = gtk_dialog_get_widget_for_response ( GTK_DIALOG(bgwindow), GTK_RESPONSE_ACCEPT ); #endif gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(bgwindow)->vbox), scrolled_window, TRUE, TRUE, 0 ); gtk_window_set_default_size ( GTK_WINDOW(bgwindow), 400, 400 ); gtk_window_set_title ( GTK_WINDOW(bgwindow), _("Viking Background Jobs") ); if ( response_w ) gtk_widget_grab_focus ( response_w ); /* don't destroy win */ g_signal_connect ( G_OBJECT(bgwindow), "delete-event", G_CALLBACK(gtk_widget_hide_on_delete), NULL ); g_signal_connect ( G_OBJECT(bgwindow), "response", G_CALLBACK(bgwindow_response), 0 ); } /** * a_background_uninit: * * Uninitialize background feature. */ void a_background_uninit() { /* wait until all running threads stop */ stop_all_threads = TRUE; g_thread_pool_free ( thread_pool, TRUE, TRUE ); } void a_background_add_window (VikWindow *vw) { windows_to_update = g_slist_prepend(windows_to_update,vw); } void a_background_remove_window (VikWindow *vw) { windows_to_update = g_slist_remove(windows_to_update,vw); } viking-1.4.2/src/datasource_gps.h0000644000175000017500000000304712122673673013706 00000000000000/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2012, Rob Norris * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef _DATASOURCE_GPS_H #define _DATASOURCE_GPS_H #include "viking.h" #include "gtk/gtk.h" G_BEGIN_DECLS gpointer datasource_gps_setup ( GtkWidget *dialog, vik_gps_xfer_type xfer, gboolean xfer_all ); void datasource_gps_clean_up ( gpointer user_data ); gchar* datasource_gps_get_protocol ( gpointer user_data ); gchar* datasource_gps_get_descriptor ( gpointer user_data ); gboolean datasource_gps_get_do_tracks ( gpointer user_data ); gboolean datasource_gps_get_do_routes ( gpointer user_data ); gboolean datasource_gps_get_do_waypoints ( gpointer user_data ); gboolean datasource_gps_get_off ( gpointer user_data ); G_END_DECLS #endif viking-1.4.2/src/coords.h0000644000175000017500000000521312122673673012171 00000000000000/* coords.h borrowed from: http://acme.com/software/coords/ I (Evan Battaglia have only made some small changes such as renaming functions and defining LatLon and UTM structs. */ /* coords.h - include file for coords routines ** ** Copyright 2001 by Jef Poskanzer . ** All rights reserved. ** ** Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions ** are met: ** 1. Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** 2. Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in the ** documentation and/or other materials provided with the distribution. ** ** THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ** ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ** ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE ** FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL ** DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS ** OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ** HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT ** LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY ** OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ** SUCH DAMAGE. */ #ifndef _VIKING_COORDS_H #define _VIKING_COORDS_H #include G_BEGIN_DECLS struct UTM { gdouble northing; gdouble easting; gchar zone; gchar letter; }; struct LatLon { gdouble lat; gdouble lon; }; int a_coords_utm_equal( const struct UTM *utm1, const struct UTM *utm2 ); void a_coords_latlon_to_utm ( const struct LatLon *latlon, struct UTM *utm ); void a_coords_utm_to_latlon ( const struct UTM *utm, struct LatLon *latlon ); double a_coords_utm_diff( const struct UTM *utm1, const struct UTM *utm2 ); double a_coords_latlon_diff ( const struct LatLon *ll1, const struct LatLon *ll2 ); /** * Convert a double to a string WITHOUT LOCALE. * * Following GPX specifications, decimal values are xsd:decimal * So, they must use the period separator, not the localized one. * * The returned value must be freed by g_free. */ char *a_coords_dtostr ( double d ); /** * Convert a LatLon to strings. * * Use the prefered representation. */ void a_coords_latlon_to_string ( const struct LatLon *latlon, gchar **lat, gchar **lon ); G_END_DECLS #endif viking-1.4.2/src/vikstatus.c0000644000175000017500000001164712175546146012742 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * Copyright (C) 2011, Rob Norris * Copyright (C) 2012, Guilhem Bonnefille * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ /* gtk status bars: just plain dumb. this file shouldn't have to exist. NB as of gtk 2.18 there are 'info bars' that could be useful... */ #include #include #include #include "vikstatus.h" enum { CLICKED, LAST_SIGNAL }; struct _VikStatusbar { GtkHBox hbox; GtkWidget *status[VIK_STATUSBAR_NUM_TYPES]; gboolean empty[VIK_STATUSBAR_NUM_TYPES]; }; G_DEFINE_TYPE (VikStatusbar, vik_statusbar, GTK_TYPE_HBOX) static guint vik_statusbar_signals[LAST_SIGNAL] = { 0 }; static gint forward_signal (GtkObject *object, gpointer user_data) { gint item = GPOINTER_TO_INT (gtk_object_get_data ( object, "type" )); VikStatusbar *vs = VIK_STATUSBAR (user_data); g_signal_emit (G_OBJECT (vs), vik_statusbar_signals[CLICKED], 0, item); return TRUE; } static void vik_statusbar_class_init (VikStatusbarClass *klass) { vik_statusbar_signals[CLICKED] = g_signal_new ("clicked", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET (VikStatusbarClass, clicked), NULL, NULL, g_cclosure_marshal_VOID__INT, G_TYPE_NONE, 1, G_TYPE_INT); klass->clicked = NULL; } static void vik_statusbar_init (VikStatusbar *vs) { gint i; for ( i = 0; i < VIK_STATUSBAR_NUM_TYPES; i++ ) { vs->empty[i] = TRUE; if (i == VIK_STATUSBAR_ZOOM) vs->status[i] = gtk_button_new(); else { vs->status[i] = gtk_statusbar_new(); gtk_statusbar_set_has_resize_grip ( GTK_STATUSBAR(vs->status[i]), FALSE ); } gtk_object_set_data (GTK_OBJECT (vs->status[i]), "type", GINT_TO_POINTER(i)); } gtk_box_pack_start ( GTK_BOX(vs), vs->status[VIK_STATUSBAR_TOOL], FALSE, FALSE, 1); gtk_widget_set_size_request ( vs->status[VIK_STATUSBAR_TOOL], 125, -1 ); gtk_box_pack_start ( GTK_BOX(vs), vs->status[VIK_STATUSBAR_ITEMS], FALSE, FALSE, 1); gtk_widget_set_size_request ( vs->status[VIK_STATUSBAR_ITEMS], 100, -1 ); g_signal_connect ( G_OBJECT(vs->status[VIK_STATUSBAR_ZOOM]), "clicked", G_CALLBACK (forward_signal), vs); gtk_button_set_relief ( GTK_BUTTON(vs->status[VIK_STATUSBAR_ZOOM]), GTK_RELIEF_NONE ); gtk_widget_set_tooltip_text (GTK_WIDGET (vs->status[VIK_STATUSBAR_ZOOM]), _("Current zoom level. Click to select a new one.")); gtk_box_pack_start ( GTK_BOX(vs), vs->status[VIK_STATUSBAR_ZOOM], FALSE, FALSE, 1); gtk_widget_set_size_request ( vs->status[VIK_STATUSBAR_ZOOM], 100, -1 ); gtk_box_pack_start ( GTK_BOX(vs), vs->status[VIK_STATUSBAR_POSITION], FALSE, FALSE, 1); gtk_widget_set_size_request ( vs->status[VIK_STATUSBAR_POSITION], 275, -1 ); gtk_box_pack_end ( GTK_BOX(vs), vs->status[VIK_STATUSBAR_INFO], TRUE, TRUE, 1); // Set minimum overall size // otherwise the individual size_requests above create an implicit overall size, // and so one can't downsize horizontally as much as may be desired when the statusbar is on gtk_widget_set_size_request ( GTK_WIDGET(vs), 50, -1 ); } /** * vik_statusbar_new: * * Creates a new #VikStatusbar widget. * * Return value: the new #VikStatusbar widget. **/ VikStatusbar * vik_statusbar_new () { VikStatusbar *vs = VIK_STATUSBAR ( g_object_new ( VIK_STATUSBAR_TYPE, NULL ) ); return vs; } /** * vik_statusbar_set_message: * @vs: the #VikStatusbar itself * @field: the field to update * @message: the message to use * * Update the message of the given field. **/ void vik_statusbar_set_message ( VikStatusbar *vs, vik_statusbar_type_t field, const gchar *message ) { if ( field >= 0 && field < VIK_STATUSBAR_NUM_TYPES ) { if ( field == VIK_STATUSBAR_ZOOM ) { gtk_button_set_label ( GTK_BUTTON(vs->status[field]), message); } else { GtkStatusbar *gsb = GTK_STATUSBAR(vs->status[field]); if ( !vs->empty[field] ) gtk_statusbar_pop ( gsb, 0 ); else vs->empty[field] = FALSE; gtk_statusbar_push ( gsb, 0, message ); } } } viking-1.4.2/src/vikgobjectbuilder.h0000644000175000017500000000415412175546146014403 00000000000000/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * viking * Copyright (C) 2009, Guilhem Bonnefille * * viking is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * viking is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef _VIK_GOBJECT_BUILDER_H_ #define _VIK_GOBJECT_BUILDER_H_ #include G_BEGIN_DECLS #define VIK_TYPE_GOBJECT_BUILDER (vik_gobject_builder_get_type ()) #define VIK_GOBJECT_BUILDER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIK_TYPE_GOBJECT_BUILDER, VikGobjectBuilder)) #define VIK_GOBJECT_BUILDER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VIK_TYPE_GOBJECT_BUILDER, VikGobjectBuilderClass)) #define VIK_IS_GOBJECT_BUILDER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIK_TYPE_GOBJECT_BUILDER)) #define VIK_IS_GOBJECT_BUILDER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VIK_TYPE_GOBJECT_BUILDER)) #define VIK_GOBJECT_BUILDER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VIK_TYPE_GOBJECT_BUILDER, VikGobjectBuilderClass)) typedef struct _VikGobjectBuilderClass VikGobjectBuilderClass; typedef struct _VikGobjectBuilder VikGobjectBuilder; struct _VikGobjectBuilderClass { GObjectClass parent_class; /* Signals */ void(* new_object) (VikGobjectBuilder *self, GObject *object); }; struct _VikGobjectBuilder { GObject parent_instance; }; GType vik_gobject_builder_get_type (void) G_GNUC_CONST; VikGobjectBuilder *vik_gobject_builder_new (void); void vik_gobject_builder_parse (VikGobjectBuilder *self, const gchar *filename); G_END_DECLS #endif /* _VIK_GOBJECT_BUILDER_H_ */ viking-1.4.2/src/bluemarble.h0000644000175000017500000000177512051463117013012 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * Copyright (C) 2008, Guilhem Bonnefille * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef __VIKING_BLUEMARBLE_H #define __VIKING_BLUEMARBLE_H void bluemarble_init (); #endif viking-1.4.2/src/print.h0000644000175000017500000000210112175546146012027 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * print.h * Copyright (C) 2007, Quy Tonthat * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #if GTK_CHECK_VERSION(2,10,0) #ifndef __VIKING_PRINT_H #define __VIKING_PRINT_H void a_print(VikWindow *vw, VikViewport *vvp); #endif /*__VIKING_PRINT_H*/ #endif viking-1.4.2/src/uibuilder.h0000644000175000017500000000707212175546146012673 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2007, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef _VIKING_UIBUILDER_H #define _VIKING_UIBUILDER_H #include G_BEGIN_DECLS /* Parameters (for I/O and Properties) */ typedef union { gdouble d; guint32 u; gint32 i; gboolean b; const gchar *s; GdkColor c; GList *sl; } VikLayerParamData; typedef struct { const gchar *name; guint8 type; gint16 group; const gchar *title; guint8 widget_type; gpointer widget_data; gpointer extra_widget_data; const gchar *tooltip; } VikLayerParam; enum { VIK_LAYER_NOT_IN_PROPERTIES=-2, VIK_LAYER_GROUP_NONE=-1 }; enum { VIK_LAYER_WIDGET_CHECKBUTTON=0, VIK_LAYER_WIDGET_RADIOGROUP, VIK_LAYER_WIDGET_RADIOGROUP_STATIC, VIK_LAYER_WIDGET_SPINBUTTON, VIK_LAYER_WIDGET_ENTRY, VIK_LAYER_WIDGET_PASSWORD, VIK_LAYER_WIDGET_FILEENTRY, VIK_LAYER_WIDGET_FOLDERENTRY, VIK_LAYER_WIDGET_HSCALE, VIK_LAYER_WIDGET_COLOR, VIK_LAYER_WIDGET_COMBOBOX, VIK_LAYER_WIDGET_FILELIST, }; typedef struct { gdouble min; gdouble max; gdouble step; guint8 digits; } VikLayerParamScale; /* id is index */ enum { VIK_LAYER_PARAM_DOUBLE=1, VIK_LAYER_PARAM_UINT, VIK_LAYER_PARAM_INT, /* in my_layer_set_param, if you want to use the string, you should dup it * in my_layer_get_param, the string returned will NOT be free'd, you are responsible for managing it (I think) */ VIK_LAYER_PARAM_STRING, VIK_LAYER_PARAM_BOOLEAN, VIK_LAYER_PARAM_COLOR, /* NOTE: string list works uniquely: data.sl should NOT be free'd when * the internals call get_param -- i.e. it should be managed w/in the layer. * The value passed by the internals into set_param should also be managed * by the layer -- i.e. free'd by the layer. */ VIK_LAYER_PARAM_STRING_LIST, }; GtkWidget *a_uibuilder_new_widget ( VikLayerParam *param, VikLayerParamData data ); VikLayerParamData a_uibuilder_widget_get_value ( GtkWidget *widget, VikLayerParam *param ); gint a_uibuilder_properties_factory ( const gchar *dialog_name, GtkWindow *parent, VikLayerParam *params, guint16 params_count, gchar **groups, guint8 groups_count, gboolean (*setparam) (gpointer,guint16,VikLayerParamData,gpointer,gboolean), gpointer pass_along1, gpointer pass_along2, VikLayerParamData (*getparam) (gpointer,guint16,gboolean), gpointer pass_along_getparam ); /* pass_along1 and pass_along2 are for set_param first and last params */ VikLayerParamData *a_uibuilder_run_dialog ( const gchar *dialog_name, GtkWindow *parent, VikLayerParam *params, guint16 params_count, gchar **groups, guint8 groups_count, VikLayerParamData *params_defaults ); /* frees data from last (if ness) */ void a_uibuilder_free_paramdatas ( VikLayerParamData *paramdatas, VikLayerParam *params, guint16 params_count ); G_END_DECLS #endif viking-1.4.2/src/vikgototool.h0000644000175000017500000000471412122673673013265 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2009, Guilhem Bonnefille * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef _VIKING_GOTO_TOOL_H #define _VIKING_GOTO_TOOL_H #include #include "vikwindow.h" #include "download.h" G_BEGIN_DECLS #define VIK_GOTO_TOOL_TYPE (vik_goto_tool_get_type ()) #define VIK_GOTO_TOOL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIK_GOTO_TOOL_TYPE, VikGotoTool)) #define VIK_GOTO_TOOL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VIK_GOTO_TOOL_TYPE, VikGotoToolClass)) #define IS_VIK_GOTO_TOOL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIK_GOTO_TOOL_TYPE)) #define IS_VIK_GOTO_TOOL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VIK_GOTO_TOOL_TYPE)) #define VIK_GOTO_TOOL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VIK_GOTO_TOOL_TYPE, VikGotoToolClass)) typedef struct _VikGotoTool VikGotoTool; typedef struct _VikGotoToolClass VikGotoToolClass; struct _VikGotoToolClass { GObjectClass object_class; gchar *(* get_label) (VikGotoTool *self); gchar *(* get_url_format) (VikGotoTool *self); DownloadMapOptions *(* get_download_options) (VikGotoTool *self); gboolean (* parse_file_for_latlon) (VikGotoTool *self, gchar *filename, struct LatLon *ll); }; GType vik_goto_tool_get_type (); struct _VikGotoTool { GObject obj; }; gchar *vik_goto_tool_get_label ( VikGotoTool *self ); gchar *vik_goto_tool_get_url_format ( VikGotoTool *self ); DownloadMapOptions *vik_goto_tool_get_download_options ( VikGotoTool *self ); gboolean vik_goto_tool_parse_file_for_latlon ( VikGotoTool *self, gchar *filename, struct LatLon *ll ); int vik_goto_tool_get_coord ( VikGotoTool *self, VikWindow *vw, VikViewport *vvp, gchar *srch_str, VikCoord *coord ); G_END_DECLS #endif viking-1.4.2/src/dem.c0000644000175000017500000004404412175546146011447 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2008, Evan Battaglia * Copyright (C) 2007, Quy Tonthat * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #ifdef HAVE_STRING_H #include #endif #include #ifdef HAVE_MATH_H #include #endif #ifdef HAVE_STDLIB_H #include #endif #include #include #include #ifdef HAVE_UNISTD_H #include #endif #include #include #include "dem.h" #include "file.h" /* Compatibility */ #if ! GLIB_CHECK_VERSION(2,22,0) #define g_mapped_file_unref g_mapped_file_free #endif #define DEM_BLOCK_SIZE 1024 #define GET_COLUMN(dem,n) ((VikDEMColumn *)g_ptr_array_index( (dem)->columns, (n) )) static gboolean get_double_and_continue ( gchar **buffer, gdouble *tmp, gboolean warn ) { gchar *endptr; *tmp = g_strtod(*buffer, &endptr); if ( endptr == NULL|| endptr == *buffer ) { if ( warn ) g_warning(_("Invalid DEM")); return FALSE; } *buffer=endptr; return TRUE; } static gboolean get_int_and_continue ( gchar **buffer, gint *tmp, gboolean warn ) { gchar *endptr; *tmp = strtol(*buffer, &endptr, 10); if ( endptr == NULL|| endptr == *buffer ) { if ( warn ) g_warning(_("Invalid DEM")); return FALSE; } *buffer=endptr; return TRUE; } static gboolean dem_parse_header ( gchar *buffer, VikDEM *dem ) { gdouble val; gint int_val; guint i; gchar *tmp = buffer; /* incomplete header */ if ( strlen(buffer) != 1024 ) return FALSE; /* fix Fortran-style exponentiation 1.0D5 -> 1.0E5 */ while (*tmp) { if ( *tmp=='D') *tmp='E'; tmp++; } /* skip name */ buffer += 149; /* "DEM level code, pattern code, palaimetric reference system code" -- skip */ get_int_and_continue(&buffer, &int_val, TRUE); get_int_and_continue(&buffer, &int_val, TRUE); get_int_and_continue(&buffer, &int_val, TRUE); /* zone */ get_int_and_continue(&buffer, &int_val, TRUE); dem->utm_zone = int_val; /* TODO -- southern or northern hemisphere?! */ dem->utm_letter = 'N'; /* skip numbers 5-19 */ for ( i = 0; i < 15; i++ ) { if ( ! get_double_and_continue(&buffer, &val, FALSE) ) { g_warning (_("Invalid DEM header")); return FALSE; } } /* number 20 -- horizontal unit code (utm/ll) */ get_double_and_continue(&buffer, &val, TRUE); dem->horiz_units = val; get_double_and_continue(&buffer, &val, TRUE); /* dem->orig_vert_units = val; now done below */ /* TODO: do this for real. these are only for 1:24k and 1:250k USGS */ if ( dem->horiz_units == VIK_DEM_HORIZ_UTM_METERS ) { dem->east_scale = 10.0; /* meters */ dem->north_scale = 10.0; dem->orig_vert_units = VIK_DEM_VERT_DECIMETERS; } else { dem->east_scale = 3.0; /* arcseconds */ dem->north_scale = 3.0; dem->orig_vert_units = VIK_DEM_VERT_METERS; } /* skip next */ get_double_and_continue(&buffer, &val, TRUE); /* now we get the four corner points. record the min and max. */ get_double_and_continue(&buffer, &val, TRUE); dem->min_east = dem->max_east = val; get_double_and_continue(&buffer, &val, TRUE); dem->min_north = dem->max_north = val; for ( i = 0; i < 3; i++ ) { get_double_and_continue(&buffer, &val, TRUE); if ( val < dem->min_east ) dem->min_east = val; if ( val > dem->max_east ) dem->max_east = val; get_double_and_continue(&buffer, &val, TRUE); if ( val < dem->min_north ) dem->min_north = val; if ( val > dem->max_north ) dem->max_north = val; } return TRUE; } static void dem_parse_block_as_cont ( gchar *buffer, VikDEM *dem, gint *cur_column, gint *cur_row ) { gint tmp; while ( *cur_row < GET_COLUMN(dem, *cur_column)->n_points ) { if ( get_int_and_continue(&buffer, &tmp,FALSE) ) { if ( dem->orig_vert_units == VIK_DEM_VERT_DECIMETERS ) GET_COLUMN(dem, *cur_column)->points[*cur_row] = (gint16) (tmp / 10); else GET_COLUMN(dem, *cur_column)->points[*cur_row] = (gint16) tmp; } else return; (*cur_row)++; } *cur_row = -1; /* expecting new column */ } static void dem_parse_block_as_header ( gchar *buffer, VikDEM *dem, gint *cur_column, gint *cur_row ) { guint n_rows; gint i; gdouble east_west, south; gdouble tmp; /* 1 x n_rows 1 east_west south x x x DATA */ if ( (!get_double_and_continue(&buffer, &tmp, TRUE)) || tmp != 1 ) { g_warning(_("Incorrect DEM Class B record: expected 1")); return; } /* don't need this */ if ( !get_double_and_continue(&buffer, &tmp, TRUE ) ) return; /* n_rows */ if ( !get_double_and_continue(&buffer, &tmp, TRUE ) ) return; n_rows = (guint) tmp; if ( (!get_double_and_continue(&buffer, &tmp, TRUE)) || tmp != 1 ) { g_warning(_("Incorrect DEM Class B record: expected 1")); return; } if ( !get_double_and_continue(&buffer, &east_west, TRUE) ) return; if ( !get_double_and_continue(&buffer, &south, TRUE) ) return; /* next three things we don't need */ if ( !get_double_and_continue(&buffer, &tmp, TRUE)) return; if ( !get_double_and_continue(&buffer, &tmp, TRUE)) return; if ( !get_double_and_continue(&buffer, &tmp, TRUE)) return; dem->n_columns ++; (*cur_column) ++; /* empty spaces for things before that were skipped */ (*cur_row) = (south - dem->min_north) / dem->north_scale; if ( south > dem->max_north || (*cur_row) < 0 ) (*cur_row) = 0; n_rows += *cur_row; g_ptr_array_add ( dem->columns, g_malloc(sizeof(VikDEMColumn)) ); GET_COLUMN(dem,*cur_column)->east_west = east_west; GET_COLUMN(dem,*cur_column)->south = south; GET_COLUMN(dem,*cur_column)->n_points = n_rows; GET_COLUMN(dem,*cur_column)->points = g_malloc(sizeof(gint16)*n_rows); /* no information for things before that */ for ( i = 0; i < (*cur_row); i++ ) GET_COLUMN(dem,*cur_column)->points[i] = VIK_DEM_INVALID_ELEVATION; /* now just continue */ dem_parse_block_as_cont ( buffer, dem, cur_column, cur_row ); } static void dem_parse_block ( gchar *buffer, VikDEM *dem, gint *cur_column, gint *cur_row ) { /* if haven't read anything or have read all items in a columns and are expecting a new column */ if ( *cur_column == -1 || *cur_row == -1 ) { dem_parse_block_as_header(buffer, dem, cur_column, cur_row); } else { dem_parse_block_as_cont(buffer, dem, cur_column, cur_row); } } /* return size of unzip data or 0 if failed */ /* can be made generic to uncompress zip, gzip, bzip2 data */ static guint uncompress_data(void *uncompressed_buffer, guint uncompressed_size, void *compressed_data, guint compressed_size) { z_stream stream; int err; stream.next_in = compressed_data; stream.avail_in = compressed_size; stream.next_out = uncompressed_buffer; stream.avail_out = uncompressed_size; stream.zalloc = (alloc_func)0; stream.zfree = (free_func)0; stream.opaque = (voidpf)0; /* negative windowBits to inflateInit2 means "no header" */ if ((err = inflateInit2(&stream, -MAX_WBITS)) != Z_OK) { g_warning("%s(): inflateInit2 failed", __PRETTY_FUNCTION__); return 0; } err = inflate(&stream, Z_FINISH); if ((err != Z_OK) && (err != Z_STREAM_END) && stream.msg) { g_warning("%s() inflate failed err=%d \"%s\"", __PRETTY_FUNCTION__, err, stream.msg == NULL ? "unknown" : stream.msg); inflateEnd(&stream); return 0; } inflateEnd(&stream); return(stream.total_out); } static void *unzip_hgt_file(gchar *zip_file, gulong *unzip_size) { void *unzip_data = NULL; gchar *zip_data; struct _lfh { guint32 sig; guint16 extract_version; guint16 flags; guint16 comp_method; guint16 time; guint16 date; guint32 crc_32; guint32 compressed_size; guint32 uncompressed_size; guint16 filename_len; guint16 extra_field_len; } __attribute__ ((__packed__)) *local_file_header = NULL; local_file_header = (struct _lfh *) zip_file; if (GUINT32_FROM_LE(local_file_header->sig) != 0x04034b50) { g_warning("%s(): wrong format", __PRETTY_FUNCTION__); g_free(unzip_data); goto end; } zip_data = zip_file + sizeof(struct _lfh) + GUINT16_FROM_LE(local_file_header->filename_len) + GUINT16_FROM_LE(local_file_header->extra_field_len); gulong uncompressed_size = GUINT32_FROM_LE(local_file_header->uncompressed_size); unzip_data = g_malloc(uncompressed_size); if (!(*unzip_size = uncompress_data(unzip_data, uncompressed_size, zip_data, GUINT32_FROM_LE(local_file_header->compressed_size)))) { g_free(unzip_data); unzip_data = NULL; goto end; } end: return(unzip_data); } static VikDEM *vik_dem_read_srtm_hgt(const gchar *file_name, const gchar *basename, gboolean zip) { gint i, j; VikDEM *dem; off_t file_size; gint16 *dem_mem = NULL; gchar *dem_file = NULL; const gint num_rows_3sec = 1201; const gint num_rows_1sec = 3601; gint num_rows; GMappedFile *mf; gint arcsec; GError *error = NULL; dem = g_malloc(sizeof(VikDEM)); dem->horiz_units = VIK_DEM_HORIZ_LL_ARCSECONDS; dem->orig_vert_units = VIK_DEM_VERT_DECIMETERS; /* TODO */ dem->min_north = atoi(basename+1) * 3600; dem->min_east = atoi(basename+4) * 3600; if ( basename[0] == 'S' ) dem->min_north = - dem->min_north; if ( basename[3] == 'W' ) dem->min_east = - dem->min_east; dem->max_north = 3600 + dem->min_north; dem->max_east = 3600 + dem->min_east; dem->columns = g_ptr_array_new(); dem->n_columns = 0; if ((mf = g_mapped_file_new(file_name, FALSE, &error)) == NULL) { g_critical(_("Couldn't map file %s: %s"), file_name, error->message); g_error_free(error); g_free(dem); return NULL; } file_size = g_mapped_file_get_length(mf); dem_file = g_mapped_file_get_contents(mf); if (zip) { void *unzip_mem = NULL; gulong ucsize; if ((unzip_mem = unzip_hgt_file(dem_file, &ucsize)) == NULL) { g_mapped_file_unref(mf); g_ptr_array_foreach ( dem->columns, (GFunc)g_free, NULL ); g_ptr_array_free(dem->columns, TRUE); g_free(dem); return NULL; } dem_mem = unzip_mem; file_size = ucsize; } else dem_mem = (gint16 *)dem_file; if (file_size == (num_rows_3sec * num_rows_3sec * sizeof(gint16))) arcsec = 3; else if (file_size == (num_rows_1sec * num_rows_1sec * sizeof(gint16))) arcsec = 1; else { g_warning("%s(): file %s does not have right size", __PRETTY_FUNCTION__, basename); g_mapped_file_unref(mf); g_free(dem); return NULL; } num_rows = (arcsec == 3) ? num_rows_3sec : num_rows_1sec; dem->east_scale = dem->north_scale = arcsec; for ( i = 0; i < num_rows; i++ ) { dem->n_columns++; g_ptr_array_add ( dem->columns, g_malloc(sizeof(VikDEMColumn)) ); GET_COLUMN(dem,i)->east_west = dem->min_east + arcsec*i; GET_COLUMN(dem,i)->south = dem->min_north; GET_COLUMN(dem,i)->n_points = num_rows; GET_COLUMN(dem,i)->points = g_malloc(sizeof(gint16)*num_rows); } int ent = 0; for ( i = (num_rows - 1); i >= 0; i-- ) { for ( j = 0; j < num_rows; j++ ) { GET_COLUMN(dem,j)->points[i] = GINT16_FROM_BE(dem_mem[ent]); ent++; } } if (zip) g_free(dem_mem); g_mapped_file_unref(mf); return dem; } #define IS_SRTM_HGT(fn) (strlen((fn))==11 && (fn)[7]=='.' && (fn)[8]=='h' && (fn)[9]=='g' && (fn)[10]=='t' && ((fn)[0]=='N' || (fn)[0]=='S') && ((fn)[3]=='E' || (fn)[3]=='W')) VikDEM *vik_dem_new_from_file(const gchar *file) { FILE *f=NULL; VikDEM *rv; gchar buffer[DEM_BLOCK_SIZE+1]; /* use to record state for dem_parse_block */ gint cur_column = -1; gint cur_row = -1; const gchar *basename = a_file_basename(file); if ( g_access ( file, R_OK ) != 0 ) return NULL; if ( (strlen(basename)==11 || ((strlen(basename) == 15) && (basename[11] == '.' && basename[12] == 'z' && basename[13] == 'i' && basename[14] == 'p'))) && basename[7]=='.' && basename[8]=='h' && basename[9]=='g' && basename[10]=='t' && (basename[0] == 'N' || basename[0] == 'S') && (basename[3] == 'E' || basename[3] =='W')) { gboolean is_zip_file = (strlen(basename) == 15); rv = vik_dem_read_srtm_hgt(file, basename, is_zip_file); return(rv); } /* Create Structure */ rv = g_malloc(sizeof(VikDEM)); /* Header */ f = g_fopen(file, "r"); if ( !f ) { g_free ( rv ); return NULL; } buffer[fread(buffer, 1, DEM_BLOCK_SIZE, f)] = '\0'; if ( ! dem_parse_header ( buffer, rv ) ) { g_free ( rv ); fclose(f); return NULL; } /* TODO: actually use header -- i.e. GET # OF COLUMNS EXPECTED */ rv->columns = g_ptr_array_new(); rv->n_columns = 0; /* Column -- Data */ while (! feof(f) ) { gchar *tmp; /* read block */ buffer[fread(buffer, 1, DEM_BLOCK_SIZE, f)] = '\0'; /* Fix Fortran-style exponentiation */ tmp = buffer; while (*tmp) { if ( *tmp=='D') *tmp='E'; tmp++; } dem_parse_block(buffer, rv, &cur_column, &cur_row); } /* TODO - class C records (right now says 'Invalid' and dies) */ fclose(f); f = NULL; /* 24k scale */ if ( rv->horiz_units == VIK_DEM_HORIZ_UTM_METERS && rv->n_columns >= 2 ) rv->north_scale = rv->east_scale = GET_COLUMN(rv, 1)->east_west - GET_COLUMN(rv,0)->east_west; /* FIXME bug in 10m DEM's */ if ( rv->horiz_units == VIK_DEM_HORIZ_UTM_METERS && rv->north_scale == 10 ) { rv->min_east -= 100; rv->min_north += 200; } return rv; } void vik_dem_free ( VikDEM *dem ) { guint i; for ( i = 0; i < dem->n_columns; i++) g_free ( GET_COLUMN(dem, i)->points ); g_ptr_array_foreach ( dem->columns, (GFunc)g_free, NULL ); g_ptr_array_free ( dem->columns, TRUE ); g_free ( dem ); } gint16 vik_dem_get_xy ( VikDEM *dem, guint col, guint row ) { if ( col < dem->n_columns ) if ( row < GET_COLUMN(dem, col)->n_points ) return GET_COLUMN(dem, col)->points[row]; return VIK_DEM_INVALID_ELEVATION; } gint16 vik_dem_get_east_north ( VikDEM *dem, gdouble east, gdouble north ) { gint col, row; if ( east > dem->max_east || east < dem->min_east || north > dem->max_north || north < dem->min_north ) return VIK_DEM_INVALID_ELEVATION; col = (gint) floor((east - dem->min_east) / dem->east_scale); row = (gint) floor((north - dem->min_north) / dem->north_scale); return vik_dem_get_xy ( dem, col, row ); } static gboolean dem_get_ref_points_elev_dist(VikDEM *dem, gdouble east, gdouble north, /* in seconds */ gint16 *elevs, gint16 *dists) { int i; int cols[4], rows[4]; struct LatLon ll[4]; struct LatLon pos; if ( east > dem->max_east || east < dem->min_east || north > dem->max_north || north < dem->min_north ) return FALSE; /* got nothing */ pos.lon = east/3600; pos.lat = north/3600; /* order of the data: sw, nw, ne, se */ /* sw */ cols[0] = (gint) floor((east - dem->min_east) / dem->east_scale); rows[0] = (gint) floor((north - dem->min_north) / dem->north_scale); ll[0].lon = (dem->min_east + dem->east_scale*cols[0])/3600; ll[0].lat = (dem->min_north + dem->north_scale*rows[0])/3600; /* nw */ cols[1] = cols[0]; rows[1] = rows[0] + 1; ll[1].lon = ll[0].lon; ll[1].lat = ll[0].lat + (gdouble)dem->north_scale/3600; /* ne */ cols[2] = cols[0] + 1; rows[2] = rows[0] + 1; ll[2].lon = ll[0].lon + (gdouble)dem->east_scale/3600; ll[2].lat = ll[0].lat + (gdouble)dem->north_scale/3600; /* se */ cols[3] = cols[0] + 1; rows[3] = rows[0]; ll[3].lon = ll[0].lon + (gdouble)dem->east_scale/3600; ll[3].lat = ll[0].lat; for (i = 0; i < 4; i++) { if ((elevs[i] = vik_dem_get_xy(dem, cols[i], rows[i])) == VIK_DEM_INVALID_ELEVATION) return FALSE; dists[i] = a_coords_latlon_diff(&pos, &ll[i]); } #if 0 /* debug */ for (i = 0; i < 4; i++) fprintf(stderr, "%f:%f:%d:%d ", ll[i].lat, ll[i].lon, dists[i], elevs[i]); fprintf(stderr, " north_scale=%f\n", dem->north_scale); #endif return TRUE; /* all OK */ } gint16 vik_dem_get_simple_interpol ( VikDEM *dem, gdouble east, gdouble north ) { int i; gint16 elevs[4], dists[4]; if (!dem_get_ref_points_elev_dist(dem, east, north, elevs, dists)) return VIK_DEM_INVALID_ELEVATION; for (i = 0; i < 4; i++) { if (dists[i] < 1) { return(elevs[i]); } } gdouble t = (gdouble)elevs[0]/dists[0] + (gdouble)elevs[1]/dists[1] + (gdouble)elevs[2]/dists[2] + (gdouble)elevs[3]/dists[3]; gdouble b = 1.0/dists[0] + 1.0/dists[1] + 1.0/dists[2] + 1.0/dists[3]; return(t/b); } gint16 vik_dem_get_shepard_interpol ( VikDEM *dem, gdouble east, gdouble north ) { int i; gint16 elevs[4], dists[4]; gint16 max_dist; gdouble t = 0.0; gdouble b = 0.0; if (!dem_get_ref_points_elev_dist(dem, east, north, elevs, dists)) return VIK_DEM_INVALID_ELEVATION; max_dist = 0; for (i = 0; i < 4; i++) { if (dists[i] < 1) { return(elevs[i]); } if (dists[i] > max_dist) max_dist = dists[i]; } gdouble tmp; #if 0 /* derived method by Franke & Nielson. Does not seem to work too well here */ for (i = 0; i < 4; i++) { tmp = pow((1.0*(max_dist - dists[i])/max_dist*dists[i]), 2); t += tmp*elevs[i]; b += tmp; } #endif for (i = 0; i < 4; i++) { tmp = pow((1.0/dists[i]), 2); t += tmp*elevs[i]; b += tmp; } // fprintf(stderr, "DEBUG: tmp=%f t=%f b=%f %f\n", tmp, t, b, t/b); return(t/b); } void vik_dem_east_north_to_xy ( VikDEM *dem, gdouble east, gdouble north, guint *col, guint *row ) { *col = (gint) floor((east - dem->min_east) / dem->east_scale); *row = (gint) floor((north - dem->min_north) / dem->north_scale); if ( *col < 0 ) *col = 0; if ( *row < 0 ) *row = 0; } viking-1.4.2/src/vikradiogroup.c0000644000175000017500000001044712122673673013565 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include #include "vikradiogroup.h" static GObjectClass *parent_class; static void radio_group_finalize ( GObject *gob ); static void radio_group_class_init ( VikRadioGroupClass *klass ); struct _VikRadioGroup { GtkVBox parent; GSList *radios; guint options_count; }; GType vik_radio_group_get_type (void) { static GType vrg_type = 0; if (!vrg_type) { static const GTypeInfo vrg_info = { sizeof (VikRadioGroupClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) radio_group_class_init, /* class init */ NULL, /* class_finalize */ NULL, /* class_data */ sizeof (VikRadioGroup), 0, NULL /* instance init */ }; vrg_type = g_type_register_static ( GTK_TYPE_VBOX, "VikRadioGroup", &vrg_info, 0 ); } return vrg_type; } static void radio_group_class_init ( VikRadioGroupClass *klass ) { /* Destructor */ GObjectClass *object_class; object_class = G_OBJECT_CLASS (klass); object_class->finalize = radio_group_finalize; parent_class = g_type_class_peek_parent (klass); } GtkWidget *vik_radio_group_new ( GList *options ) { VikRadioGroup *vrg; GtkWidget *t; gchar *label; GList *option = options; if ( ! options ) return NULL; vrg = VIK_RADIO_GROUP ( g_object_new ( VIK_RADIO_GROUP_TYPE, NULL ) ); label = g_list_nth_data(options, 0); t = gtk_radio_button_new_with_label ( NULL, gettext(label) ); gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON(t), TRUE ); gtk_box_pack_start ( GTK_BOX(vrg), t, FALSE, FALSE, 0 ); vrg->radios = g_slist_append ( NULL, t ); vrg->options_count = 1; while ( ( option = g_list_next(option) ) != NULL ) { label = option->data; t = gtk_radio_button_new_with_label_from_widget ( GTK_RADIO_BUTTON(vrg->radios->data), gettext(label)); vrg->radios = g_slist_append( vrg->radios, t ); gtk_box_pack_start ( GTK_BOX(vrg), GTK_WIDGET(t), FALSE, FALSE, 0 ); vrg->options_count++; } return GTK_WIDGET(vrg); } GtkWidget *vik_radio_group_new_static ( const gchar **options ) { VikRadioGroup *vrg; GtkWidget *t; if ( ! *options ) return NULL; vrg = VIK_RADIO_GROUP ( g_object_new ( VIK_RADIO_GROUP_TYPE, NULL ) ); t = gtk_radio_button_new_with_label ( NULL, options[0] ); gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON(t), TRUE ); gtk_box_pack_start ( GTK_BOX(vrg), t, FALSE, FALSE, 0 ); vrg->radios = g_slist_append ( NULL, t ); vrg->options_count = 1; for ( options++ ; *options ; options++ ) { t = gtk_radio_button_new_with_label_from_widget ( GTK_RADIO_BUTTON(vrg->radios->data), *options ); vrg->radios = g_slist_append( vrg->radios, t ); gtk_box_pack_start ( GTK_BOX(vrg), GTK_WIDGET(t), FALSE, FALSE, 0 ); vrg->options_count++; } return GTK_WIDGET(vrg); } void vik_radio_group_set_selected ( VikRadioGroup *vrg, guint8 i ) { if ( i < vrg->options_count ) gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON(g_slist_nth_data(vrg->radios,i)), TRUE ); } guint8 vik_radio_group_get_selected ( VikRadioGroup *vrg ) { guint8 i = 0; GSList *iter = vrg->radios; while ( iter ) { if ( gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON(iter->data) ) ) return i; iter = iter->next; i++; } return 0; } static void radio_group_finalize ( GObject *gob ) { VikRadioGroup *vrg = VIK_RADIO_GROUP ( gob ); if ( vrg->radios ) g_slist_free ( vrg->radios ); G_OBJECT_CLASS(parent_class)->finalize(gob); } viking-1.4.2/src/spotmaps.h0000644000175000017500000000167211745373131012547 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2010, Guilhem Bonnefille * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef __VIKING_SPOTMAPS_H #define __VIKING_SPOTMAPS_H void spotmaps_init(); #endif viking-1.4.2/src/vikviewport.c0000644000175000017500000012117012175546146013267 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2007, Evan Battaglia * * Lat/Lon plotting functions calcxy* are from GPSDrive * GPSDrive Copyright (C) 2001-2004 Fritz Ganter * * Multiple UTM zone patch by Kit Transue * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #define DEFAULT_BACKGROUND_COLOR "#CCCCCC" #define DEFAULT_HIGHLIGHT_COLOR "#EEA500" /* Default highlight in orange */ #include #ifdef HAVE_MATH_H #include #endif #ifdef HAVE_STRING_H #include #endif #include "coords.h" #include "vikcoord.h" #include "vikwindow.h" #include "vikviewport.h" #include "mapcoord.h" /* for ALTI_TO_MPP */ #include "globals.h" static gdouble EASTING_OFFSET = 500000.0; static gint PAD = 10; static void viewport_finalize ( GObject *gob ); static void viewport_utm_zone_check ( VikViewport *vvp ); static gboolean calcxy(double *x, double *y, double lg, double lt, double zero_long, double zero_lat, double pixelfact_x, double pixelfact_y, gint mapSizeX2, gint mapSizeY2 ); static gboolean calcxy_rev(double *lg, double *lt, gint x, gint y, double zero_long, double zero_lat, double pixelfact_x, double pixelfact_y, gint mapSizeX2, gint mapSizeY2 ); double calcR (double lat); static double Radius[181]; static void viewport_init_ra(); static GObjectClass *parent_class; struct _VikViewport { GtkDrawingArea drawing_area; GdkPixmap *scr_buffer; gint width, height; VikCoord center; VikCoordMode coord_mode; gdouble xmpp, ympp; GdkPixbuf *alpha_pixbuf; guint8 alpha_pixbuf_width; guint8 alpha_pixbuf_height; gdouble utm_zone_width; gboolean one_utm_zone; GdkGC *background_gc; GdkColor background_color; GdkGC *scale_bg_gc; GSList *copyrights; GSList *logos; /* Wether or not display OSD info */ gboolean draw_scale; gboolean draw_centermark; gboolean draw_highlight; GdkGC *highlight_gc; GdkColor highlight_color; /* subset of coord types. lat lon can be plotted in 2 ways, google or exp. */ VikViewportDrawMode drawmode; /* trigger stuff */ gpointer trigger; GdkPixmap *snapshot_buffer; gboolean half_drawn; }; static gdouble viewport_utm_zone_width ( VikViewport *vvp ) { if ( vvp->coord_mode == VIK_COORD_UTM ) { struct LatLon ll; /* get latitude of screen bottom */ struct UTM utm = *((struct UTM *)(vik_viewport_get_center ( vvp ))); utm.northing -= vvp -> height * vvp -> ympp / 2; a_coords_utm_to_latlon ( &utm, &ll ); /* boundary */ ll.lon = (utm.zone - 1) * 6 - 180 ; a_coords_latlon_to_utm ( &ll, &utm); return fabs ( utm.easting - EASTING_OFFSET ) * 2; } else return 0.0; } G_DEFINE_TYPE (VikViewport, vik_viewport, GTK_TYPE_DRAWING_AREA) static void vik_viewport_class_init ( VikViewportClass *klass ) { /* Destructor */ GObjectClass *object_class; object_class = G_OBJECT_CLASS (klass); object_class->finalize = viewport_finalize; parent_class = g_type_class_peek_parent (klass); } VikViewport *vik_viewport_new () { VikViewport *vv = VIK_VIEWPORT ( g_object_new ( VIK_VIEWPORT_TYPE, NULL ) ); return vv; } static void vik_viewport_init ( VikViewport *vvp ) { viewport_init_ra(); struct UTM utm; struct LatLon ll; ll.lat = a_vik_get_default_lat(); ll.lon = a_vik_get_default_long(); a_coords_latlon_to_utm ( &ll, &utm ); /* TODO: not static */ vvp->xmpp = 4.0; vvp->ympp = 4.0; vvp->coord_mode = VIK_COORD_LATLON; vvp->drawmode = VIK_VIEWPORT_DRAWMODE_MERCATOR; vvp->center.mode = VIK_COORD_LATLON; vvp->center.north_south = ll.lat; vvp->center.east_west = ll.lon; vvp->center.utm_zone = (int)utm.zone; vvp->center.utm_letter = utm.letter; vvp->scr_buffer = NULL; vvp->alpha_pixbuf = NULL; vvp->alpha_pixbuf_width = vvp->alpha_pixbuf_height = 0; vvp->utm_zone_width = 0.0; vvp->background_gc = NULL; vvp->highlight_gc = NULL; vvp->scale_bg_gc = NULL; vvp->copyrights = NULL; vvp->draw_scale = TRUE; vvp->draw_centermark = TRUE; vvp->draw_highlight = TRUE; vvp->trigger = NULL; vvp->snapshot_buffer = NULL; vvp->half_drawn = FALSE; g_signal_connect (G_OBJECT(vvp), "configure_event", G_CALLBACK(vik_viewport_configure), NULL); GTK_WIDGET_SET_FLAGS(vvp, GTK_CAN_FOCUS); /* allow VVP to have focus -- enabling key events, etc */ } GdkColor *vik_viewport_get_background_gdkcolor ( VikViewport *vvp ) { GdkColor *rv = g_malloc ( sizeof ( GdkColor ) ); *rv = vvp->background_color; return rv; } /* returns pointer to internal static storage, changes next time function called, use quickly */ const gchar *vik_viewport_get_background_color ( VikViewport *vvp ) { static gchar color[8]; g_snprintf(color, sizeof(color), "#%.2x%.2x%.2x", (int)(vvp->background_color.red/256),(int)(vvp->background_color.green/256),(int)(vvp->background_color.blue/256)); return color; } void vik_viewport_set_background_color ( VikViewport *vvp, const gchar *colorname ) { g_assert ( vvp && vvp->background_gc ); if ( gdk_color_parse ( colorname, &(vvp->background_color) ) ) gdk_gc_set_rgb_fg_color ( vvp->background_gc, &(vvp->background_color) ); else g_warning("%s: Failed to parse color '%s'", __FUNCTION__, colorname); } void vik_viewport_set_background_gdkcolor ( VikViewport *vvp, GdkColor *color ) { g_assert ( vvp && vvp->background_gc ); vvp->background_color = *color; gdk_gc_set_rgb_fg_color ( vvp->background_gc, color ); } GdkColor *vik_viewport_get_highlight_gdkcolor ( VikViewport *vvp ) { GdkColor *rv = g_malloc ( sizeof ( GdkColor ) ); *rv = vvp->highlight_color; return rv; } /* returns pointer to internal static storage, changes next time function called, use quickly */ const gchar *vik_viewport_get_highlight_color ( VikViewport *vvp ) { static gchar color[8]; g_snprintf(color, sizeof(color), "#%.2x%.2x%.2x", (int)(vvp->highlight_color.red/256),(int)(vvp->highlight_color.green/256),(int)(vvp->highlight_color.blue/256)); return color; } void vik_viewport_set_highlight_color ( VikViewport *vvp, const gchar *colorname ) { g_assert ( vvp->highlight_gc ); gdk_color_parse ( colorname, &(vvp->highlight_color) ); gdk_gc_set_rgb_fg_color ( vvp->highlight_gc, &(vvp->highlight_color) ); } void vik_viewport_set_highlight_gdkcolor ( VikViewport *vvp, GdkColor *color ) { g_assert ( vvp->highlight_gc ); vvp->highlight_color = *color; gdk_gc_set_rgb_fg_color ( vvp->highlight_gc, color ); } GdkGC *vik_viewport_get_gc_highlight ( VikViewport *vvp ) { return vvp->highlight_gc; } void vik_viewport_set_highlight_thickness ( VikViewport *vvp, gint thickness ) { // Otherwise same GDK_* attributes as in vik_viewport_new_gc gdk_gc_set_line_attributes ( vvp->highlight_gc, thickness, GDK_LINE_SOLID, GDK_CAP_ROUND, GDK_JOIN_ROUND ); } GdkGC *vik_viewport_new_gc ( VikViewport *vvp, const gchar *colorname, gint thickness ) { GdkGC *rv = NULL; GdkColor color; rv = gdk_gc_new ( GTK_WIDGET(vvp)->window ); if ( gdk_color_parse ( colorname, &color ) ) gdk_gc_set_rgb_fg_color ( rv, &color ); else g_warning("%s: Failed to parse color '%s'", __FUNCTION__, colorname); gdk_gc_set_line_attributes ( rv, thickness, GDK_LINE_SOLID, GDK_CAP_ROUND, GDK_JOIN_ROUND ); return rv; } GdkGC *vik_viewport_new_gc_from_color ( VikViewport *vvp, GdkColor *color, gint thickness ) { GdkGC *rv; rv = gdk_gc_new ( GTK_WIDGET(vvp)->window ); gdk_gc_set_rgb_fg_color ( rv, color ); gdk_gc_set_line_attributes ( rv, thickness, GDK_LINE_SOLID, GDK_CAP_ROUND, GDK_JOIN_ROUND ); return rv; } void vik_viewport_configure_manually ( VikViewport *vvp, gint width, guint height ) { vvp->width = width; vvp->height = height; if ( vvp->scr_buffer ) g_object_unref ( G_OBJECT ( vvp->scr_buffer ) ); vvp->scr_buffer = gdk_pixmap_new ( GTK_WIDGET(vvp)->window, vvp->width, vvp->height, -1 ); /* TODO trigger: only if this is enabled !!! */ if ( vvp->snapshot_buffer ) g_object_unref ( G_OBJECT ( vvp->snapshot_buffer ) ); vvp->snapshot_buffer = gdk_pixmap_new ( GTK_WIDGET(vvp)->window, vvp->width, vvp->height, -1 ); } GdkPixmap *vik_viewport_get_pixmap ( VikViewport *vvp ) { return vvp->scr_buffer; } gboolean vik_viewport_configure ( VikViewport *vvp ) { g_return_val_if_fail ( vvp != NULL, TRUE ); vvp->width = GTK_WIDGET(vvp)->allocation.width; vvp->height = GTK_WIDGET(vvp)->allocation.height; if ( vvp->scr_buffer ) g_object_unref ( G_OBJECT ( vvp->scr_buffer ) ); vvp->scr_buffer = gdk_pixmap_new ( GTK_WIDGET(vvp)->window, vvp->width, vvp->height, -1 ); /* TODO trigger: only if enabled! */ if ( vvp->snapshot_buffer ) g_object_unref ( G_OBJECT ( vvp->snapshot_buffer ) ); vvp->snapshot_buffer = gdk_pixmap_new ( GTK_WIDGET(vvp)->window, vvp->width, vvp->height, -1 ); /* TODO trigger */ /* this is down here so it can get a GC (necessary?) */ if ( !vvp->background_gc ) { vvp->background_gc = vik_viewport_new_gc ( vvp, DEFAULT_BACKGROUND_COLOR, 1 ); vik_viewport_set_background_color ( vvp, DEFAULT_BACKGROUND_COLOR ); } if ( ! vvp->highlight_gc ) { vvp->highlight_gc = vik_viewport_new_gc ( vvp, DEFAULT_HIGHLIGHT_COLOR, 1 ); vik_viewport_set_highlight_color ( vvp, DEFAULT_HIGHLIGHT_COLOR ); } if ( !vvp->scale_bg_gc) { vvp->scale_bg_gc = vik_viewport_new_gc(vvp, "grey", 3); } return FALSE; } static void viewport_finalize ( GObject *gob ) { VikViewport *vvp = VIK_VIEWPORT(gob); g_return_if_fail ( vvp != NULL ); if ( vvp->scr_buffer ) g_object_unref ( G_OBJECT ( vvp->scr_buffer ) ); if ( vvp->snapshot_buffer ) g_object_unref ( G_OBJECT ( vvp->snapshot_buffer ) ); if ( vvp->alpha_pixbuf ) g_object_unref ( G_OBJECT ( vvp->alpha_pixbuf ) ); if ( vvp->background_gc ) g_object_unref ( G_OBJECT ( vvp->background_gc ) ); if ( vvp->highlight_gc ) g_object_unref ( G_OBJECT ( vvp->highlight_gc ) ); if ( vvp->scale_bg_gc ) { g_object_unref ( G_OBJECT ( vvp->scale_bg_gc ) ); vvp->scale_bg_gc = NULL; } G_OBJECT_CLASS(parent_class)->finalize(gob); } /** * vik_viewport_clear: * @vvp: self object * * Clear the whole viewport. */ void vik_viewport_clear ( VikViewport *vvp ) { g_return_if_fail ( vvp != NULL ); gdk_draw_rectangle(GDK_DRAWABLE(vvp->scr_buffer), vvp->background_gc, TRUE, 0, 0, vvp->width, vvp->height); vik_viewport_reset_copyrights ( vvp ); vik_viewport_reset_logos ( vvp ); } /** * vik_viewport_set_draw_scale: * @vvp: self * @draw_scale: new value * * Enable/Disable display of scale. */ void vik_viewport_set_draw_scale ( VikViewport *vvp, gboolean draw_scale ) { vvp->draw_scale = draw_scale; } gboolean vik_viewport_get_draw_scale ( VikViewport *vvp ) { return vvp->draw_scale; } void vik_viewport_draw_scale ( VikViewport *vvp ) { g_return_if_fail ( vvp != NULL ); if ( vvp->draw_scale ) { VikCoord left, right; gdouble unit, base, diff, old_unit, old_diff, ratio; gint odd, len, SCSIZE = 5, HEIGHT=10; PangoLayout *pl; gchar s[128]; vik_viewport_screen_to_coord ( vvp, 0, vvp->height, &left ); vik_viewport_screen_to_coord ( vvp, vvp->width/SCSIZE, vvp->height, &right ); vik_units_distance_t dist_units = a_vik_get_units_distance (); switch (dist_units) { case VIK_UNITS_DISTANCE_KILOMETRES: base = vik_coord_diff ( &left, &right ); // in meters break; case VIK_UNITS_DISTANCE_MILES: // in 0.1 miles (copes better when zoomed in as 1 mile can be too big) base = VIK_METERS_TO_MILES(vik_coord_diff ( &left, &right )) * 10.0; break; default: base = 1; // Keep the compiler happy g_critical("Houston, we've had a problem. distance=%d", dist_units); } ratio = (vvp->width/SCSIZE)/base; unit = 1; diff = fabs(base-unit); old_unit = unit; old_diff = diff; odd = 1; while (diff <= old_diff) { old_unit = unit; old_diff = diff; unit = unit * (odd%2 ? 5 : 2); diff = fabs(base-unit); odd++; } unit = old_unit; len = unit * ratio; /* white background */ vik_viewport_draw_line(vvp, vvp->scale_bg_gc, PAD, vvp->height-PAD, PAD + len, vvp->height-PAD); vik_viewport_draw_line(vvp, vvp->scale_bg_gc, PAD, vvp->height-PAD, PAD, vvp->height-PAD-HEIGHT); vik_viewport_draw_line(vvp, vvp->scale_bg_gc, PAD + len, vvp->height-PAD, PAD + len, vvp->height-PAD-HEIGHT); /* black scale */ vik_viewport_draw_line(vvp, GTK_WIDGET(&vvp->drawing_area)->style->black_gc, PAD, vvp->height-PAD, PAD + len, vvp->height-PAD); vik_viewport_draw_line(vvp, GTK_WIDGET(&vvp->drawing_area)->style->black_gc, PAD, vvp->height-PAD, PAD, vvp->height-PAD-HEIGHT); vik_viewport_draw_line(vvp, GTK_WIDGET(&vvp->drawing_area)->style->black_gc, PAD + len, vvp->height-PAD, PAD + len, vvp->height-PAD-HEIGHT); if (odd%2) { int i; for (i=1; i<5; i++) { vik_viewport_draw_line(vvp, vvp->scale_bg_gc, PAD+i*len/5, vvp->height-PAD, PAD+i*len/5, vvp->height-PAD-((i==5)?(2*HEIGHT/3):(HEIGHT/2))); vik_viewport_draw_line(vvp, GTK_WIDGET(&vvp->drawing_area)->style->black_gc, PAD+i*len/5, vvp->height-PAD, PAD+i*len/5, vvp->height-PAD-((i==5)?(2*HEIGHT/3):(HEIGHT/2))); } } else { int i; for (i=1; i<10; i++) { vik_viewport_draw_line(vvp, vvp->scale_bg_gc, PAD+i*len/10, vvp->height-PAD, PAD+i*len/10, vvp->height-PAD-((i==5)?(2*HEIGHT/3):(HEIGHT/2))); vik_viewport_draw_line(vvp, GTK_WIDGET(&vvp->drawing_area)->style->black_gc, PAD+i*len/10, vvp->height-PAD, PAD+i*len/10, vvp->height-PAD-((i==5)?(2*HEIGHT/3):(HEIGHT/2))); } } pl = gtk_widget_create_pango_layout (GTK_WIDGET(&vvp->drawing_area), NULL); pango_layout_set_font_description (pl, GTK_WIDGET(&vvp->drawing_area)->style->font_desc); switch (dist_units) { case VIK_UNITS_DISTANCE_KILOMETRES: if (unit >= 1000) { sprintf(s, "%d km", (int)unit/1000); } else { sprintf(s, "%d m", (int)unit); } break; case VIK_UNITS_DISTANCE_MILES: // Handle units in 0.1 miles if (unit < 10.0) { sprintf(s, "%0.1f miles", unit/10.0); } else if ((int)unit == 10.0) { sprintf(s, "1 mile"); } else { sprintf(s, "%d miles", (int)(unit/10.0)); } break; default: g_critical("Houston, we've had a problem. distance=%d", dist_units); } pango_layout_set_text(pl, s, -1); vik_viewport_draw_layout(vvp, GTK_WIDGET(&vvp->drawing_area)->style->black_gc, PAD + len + PAD, vvp->height - PAD - 10, pl); g_object_unref(pl); pl = NULL; } } void vik_viewport_draw_copyright ( VikViewport *vvp ) { g_return_if_fail ( vvp != NULL ); PangoLayout *pl; PangoRectangle ink_rect, logical_rect; gchar s[128] = ""; /* compute copyrights string */ guint len = g_slist_length ( vvp->copyrights ); int i; for (i = 0 ; i < len ; i++) { // Stop when buffer is full int slen = strlen ( s ); if ( slen >= 127 ) break; gchar *copyright = g_slist_nth_data ( vvp->copyrights, i ); // Only use part of this copyright that fits in the available space left // remembering 1 character is left available for the appended space int clen = strlen ( copyright ); if ( slen + clen > 126 ) { clen = 126 - slen; } strncat ( s, copyright, clen ); strcat ( s, " " ); } /* create pango layout */ pl = gtk_widget_create_pango_layout (GTK_WIDGET(&vvp->drawing_area), NULL); pango_layout_set_font_description (pl, GTK_WIDGET(&vvp->drawing_area)->style->font_desc); pango_layout_set_alignment ( pl, PANGO_ALIGN_RIGHT ); /* Set the text */ pango_layout_set_text(pl, s, -1); /* Use maximum of half the viewport width */ pango_layout_set_width ( pl, ( vvp->width / 2 ) * PANGO_SCALE ); pango_layout_get_pixel_extents(pl, &ink_rect, &logical_rect); vik_viewport_draw_layout(vvp, GTK_WIDGET(&vvp->drawing_area)->style->black_gc, vvp->width / 2, vvp->height - logical_rect.height, pl); /* Free memory */ g_object_unref(pl); pl = NULL; } /** * vik_viewport_set_draw_centermark: * @vvp: self object * @draw_centermark: new value * * Enable/Disable display of center mark. */ void vik_viewport_set_draw_centermark ( VikViewport *vvp, gboolean draw_centermark ) { vvp->draw_centermark = draw_centermark; } gboolean vik_viewport_get_draw_centermark ( VikViewport *vvp ) { return vvp->draw_centermark; } void vik_viewport_draw_centermark ( VikViewport *vvp ) { g_return_if_fail ( vvp != NULL ); if ( !vvp->draw_centermark ) return; const int len = 30; const int gap = 4; int center_x = vvp->width/2; int center_y = vvp->height/2; GdkGC * black_gc = GTK_WIDGET(&vvp->drawing_area)->style->black_gc; /* white back ground */ vik_viewport_draw_line(vvp, vvp->scale_bg_gc, center_x - len, center_y, center_x - gap, center_y); vik_viewport_draw_line(vvp, vvp->scale_bg_gc, center_x + gap, center_y, center_x + len, center_y); vik_viewport_draw_line(vvp, vvp->scale_bg_gc, center_x, center_y - len, center_x, center_y - gap); vik_viewport_draw_line(vvp, vvp->scale_bg_gc, center_x, center_y + gap, center_x, center_y + len); /* black fore ground */ vik_viewport_draw_line(vvp, black_gc, center_x - len, center_y, center_x - gap, center_y); vik_viewport_draw_line(vvp, black_gc, center_x + gap, center_y, center_x + len, center_y); vik_viewport_draw_line(vvp, black_gc, center_x, center_y - len, center_x, center_y - gap); vik_viewport_draw_line(vvp, black_gc, center_x, center_y + gap, center_x, center_y + len); } void vik_viewport_draw_logo ( VikViewport *vvp ) { g_return_if_fail ( vvp != NULL ); guint len = g_slist_length ( vvp->logos ); gint x = vvp->width - PAD; gint y = PAD; int i; for (i = 0 ; i < len ; i++) { GdkPixbuf *logo = g_slist_nth_data ( vvp->logos, i ); gint width = gdk_pixbuf_get_width ( logo ); gint height = gdk_pixbuf_get_height ( logo ); vik_viewport_draw_pixbuf ( vvp, logo, 0, 0, x - width, y, width, height ); x = x - width - PAD; } } void vik_viewport_set_draw_highlight ( VikViewport *vvp, gboolean draw_highlight ) { vvp->draw_highlight = draw_highlight; } gboolean vik_viewport_get_draw_highlight ( VikViewport *vvp ) { return vvp->draw_highlight; } void vik_viewport_sync ( VikViewport *vvp ) { g_return_if_fail ( vvp != NULL ); gdk_draw_drawable(GTK_WIDGET(vvp)->window, GTK_WIDGET(vvp)->style->bg_gc[0], GDK_DRAWABLE(vvp->scr_buffer), 0, 0, 0, 0, vvp->width, vvp->height); } void vik_viewport_pan_sync ( VikViewport *vvp, gint x_off, gint y_off ) { gint x, y, wid, hei; g_return_if_fail ( vvp != NULL ); gdk_draw_drawable(GTK_WIDGET(vvp)->window, GTK_WIDGET(vvp)->style->bg_gc[0], GDK_DRAWABLE(vvp->scr_buffer), 0, 0, x_off, y_off, vvp->width, vvp->height); if (x_off >= 0) { x = 0; wid = x_off; } else { x = vvp->width+x_off; wid = -x_off; } if (y_off >= 0) { y = 0; hei = y_off; } else { y = vvp->height+y_off; hei = -y_off; } gtk_widget_queue_draw_area(GTK_WIDGET(vvp), x, 0, wid, vvp->height); gtk_widget_queue_draw_area(GTK_WIDGET(vvp), 0, y, vvp->width, hei); } void vik_viewport_set_zoom ( VikViewport *vvp, gdouble xympp ) { g_return_if_fail ( vvp != NULL ); if ( xympp >= VIK_VIEWPORT_MIN_ZOOM && xympp <= VIK_VIEWPORT_MAX_ZOOM ) vvp->xmpp = vvp->ympp = xympp; if ( vvp->drawmode == VIK_VIEWPORT_DRAWMODE_UTM ) viewport_utm_zone_check(vvp); } /* or could do factor */ void vik_viewport_zoom_in ( VikViewport *vvp ) { g_return_if_fail ( vvp != NULL ); if ( vvp->xmpp >= (VIK_VIEWPORT_MIN_ZOOM*2) && vvp->ympp >= (VIK_VIEWPORT_MIN_ZOOM*2) ) { vvp->xmpp /= 2; vvp->ympp /= 2; viewport_utm_zone_check(vvp); } } void vik_viewport_zoom_out ( VikViewport *vvp ) { g_return_if_fail ( vvp != NULL ); if ( vvp->xmpp <= (VIK_VIEWPORT_MAX_ZOOM/2) && vvp->ympp <= (VIK_VIEWPORT_MAX_ZOOM/2) ) { vvp->xmpp *= 2; vvp->ympp *= 2; viewport_utm_zone_check(vvp); } } gdouble vik_viewport_get_zoom ( VikViewport *vvp ) { if ( vvp->xmpp == vvp->ympp ) return vvp->xmpp; return 0.0; } gdouble vik_viewport_get_xmpp ( VikViewport *vvp ) { return vvp->xmpp; } gdouble vik_viewport_get_ympp ( VikViewport *vvp ) { return vvp->ympp; } void vik_viewport_set_xmpp ( VikViewport *vvp, gdouble xmpp ) { if ( xmpp >= VIK_VIEWPORT_MIN_ZOOM && xmpp <= VIK_VIEWPORT_MAX_ZOOM ) { vvp->xmpp = xmpp; if ( vvp->drawmode == VIK_VIEWPORT_DRAWMODE_UTM ) viewport_utm_zone_check(vvp); } } void vik_viewport_set_ympp ( VikViewport *vvp, gdouble ympp ) { if ( ympp >= VIK_VIEWPORT_MIN_ZOOM && ympp <= VIK_VIEWPORT_MAX_ZOOM ) { vvp->ympp = ympp; if ( vvp->drawmode == VIK_VIEWPORT_DRAWMODE_UTM ) viewport_utm_zone_check(vvp); } } const VikCoord *vik_viewport_get_center ( VikViewport *vvp ) { g_return_val_if_fail ( vvp != NULL, NULL ); return &(vvp->center); } /* called every time we update coordinates/zoom */ static void viewport_utm_zone_check ( VikViewport *vvp ) { if ( vvp->coord_mode == VIK_COORD_UTM ) { struct UTM utm; struct LatLon ll; a_coords_utm_to_latlon ( (struct UTM *) &(vvp->center), &ll ); a_coords_latlon_to_utm ( &ll, &utm ); if ( utm.zone != vvp->center.utm_zone ) *((struct UTM *)(&vvp->center)) = utm; /* misc. stuff so we don't have to check later */ vvp->utm_zone_width = viewport_utm_zone_width ( vvp ); vvp->one_utm_zone = ( vik_viewport_rightmost_zone(vvp) == vik_viewport_leftmost_zone(vvp) ); } } void vik_viewport_set_center_latlon ( VikViewport *vvp, const struct LatLon *ll ) { vik_coord_load_from_latlon ( &(vvp->center), vvp->coord_mode, ll ); if ( vvp->coord_mode == VIK_COORD_UTM ) viewport_utm_zone_check ( vvp ); } void vik_viewport_set_center_utm ( VikViewport *vvp, const struct UTM *utm ) { vik_coord_load_from_utm ( &(vvp->center), vvp->coord_mode, utm ); if ( vvp->coord_mode == VIK_COORD_UTM ) viewport_utm_zone_check ( vvp ); } void vik_viewport_set_center_coord ( VikViewport *vvp, const VikCoord *coord ) { vvp->center = *coord; if ( vvp->coord_mode == VIK_COORD_UTM ) viewport_utm_zone_check ( vvp ); } void vik_viewport_corners_for_zonen ( VikViewport *vvp, int zone, VikCoord *ul, VikCoord *br ) { g_return_if_fail ( vvp->coord_mode == VIK_COORD_UTM ); /* get center, then just offset */ vik_viewport_center_for_zonen ( vvp, VIK_UTM(ul), zone ); ul->mode = VIK_COORD_UTM; *br = *ul; ul->north_south += (vvp->ympp * vvp->height / 2); ul->east_west -= (vvp->xmpp * vvp->width / 2); br->north_south -= (vvp->ympp * vvp->height / 2); br->east_west += (vvp->xmpp * vvp->width / 2); } void vik_viewport_center_for_zonen ( VikViewport *vvp, struct UTM *center, int zone) { if ( vvp->coord_mode == VIK_COORD_UTM ) { *center = *((struct UTM *)(vik_viewport_get_center ( vvp ))); center->easting -= ( zone - center->zone ) * vvp->utm_zone_width; center->zone = zone; } } gchar vik_viewport_leftmost_zone ( VikViewport *vvp ) { if ( vvp->coord_mode == VIK_COORD_UTM ) { VikCoord coord; g_assert ( vvp != NULL ); vik_viewport_screen_to_coord ( vvp, 0, 0, &coord ); return coord.utm_zone; } return '\0'; } gchar vik_viewport_rightmost_zone ( VikViewport *vvp ) { if ( vvp->coord_mode == VIK_COORD_UTM ) { VikCoord coord; g_assert ( vvp != NULL ); vik_viewport_screen_to_coord ( vvp, vvp->width, 0, &coord ); return coord.utm_zone; } return '\0'; } void vik_viewport_set_center_screen ( VikViewport *vvp, int x, int y ) { g_return_if_fail ( vvp != NULL ); if ( vvp->coord_mode == VIK_COORD_UTM ) { /* slightly optimized */ vvp->center.east_west += vvp->xmpp * (x - (vvp->width/2)); vvp->center.north_south += vvp->ympp * ((vvp->height/2) - y); viewport_utm_zone_check ( vvp ); } else { VikCoord tmp; vik_viewport_screen_to_coord ( vvp, x, y, &tmp ); vik_viewport_set_center_coord ( vvp, &tmp ); } } gint vik_viewport_get_width( VikViewport *vvp ) { g_return_val_if_fail ( vvp != NULL, 0 ); return vvp->width; } gint vik_viewport_get_height( VikViewport *vvp ) { g_return_val_if_fail ( vvp != NULL, 0 ); return vvp->height; } void vik_viewport_screen_to_coord ( VikViewport *vvp, int x, int y, VikCoord *coord ) { g_return_if_fail ( vvp != NULL ); if ( vvp->coord_mode == VIK_COORD_UTM ) { int zone_delta; struct UTM *utm = (struct UTM *) coord; coord->mode = VIK_COORD_UTM; utm->zone = vvp->center.utm_zone; utm->letter = vvp->center.utm_letter; utm->easting = ( ( x - ( vvp->width / 2) ) * vvp->xmpp ) + vvp->center.east_west; zone_delta = floor( (utm->easting - EASTING_OFFSET ) / vvp->utm_zone_width + 0.5 ); utm->zone += zone_delta; utm->easting -= zone_delta * vvp->utm_zone_width; utm->northing = ( ( ( vvp->height / 2) - y ) * vvp->ympp ) + vvp->center.north_south; } else if ( vvp->coord_mode == VIK_COORD_LATLON ) { coord->mode = VIK_COORD_LATLON; if ( vvp->drawmode == VIK_VIEWPORT_DRAWMODE_LATLON ) { coord->east_west = vvp->center.east_west + (180.0 * vvp->xmpp / 65536 / 256 * (x - vvp->width/2)); coord->north_south = vvp->center.north_south + (180.0 * vvp->ympp / 65536 / 256 * (vvp->height/2 - y)); } else if ( vvp->drawmode == VIK_VIEWPORT_DRAWMODE_EXPEDIA ) calcxy_rev(&(coord->east_west), &(coord->north_south), x, y, vvp->center.east_west, vvp->center.north_south, vvp->xmpp * ALTI_TO_MPP, vvp->ympp * ALTI_TO_MPP, vvp->width/2, vvp->height/2); else if ( vvp->drawmode == VIK_VIEWPORT_DRAWMODE_MERCATOR ) { /* FIXMERCATOR */ coord->east_west = vvp->center.east_west + (180.0 * vvp->xmpp / 65536 / 256 * (x - vvp->width/2)); coord->north_south = DEMERCLAT ( MERCLAT(vvp->center.north_south) + (180.0 * vvp->ympp / 65536 / 256 * (vvp->height/2 - y)) ); #if 0 --> THIS IS JUNK HERE. *y = vvp->height/2 + (65536.0 / 180 / vvp->ympp * (MERCLAT(center->lat) - MERCLAT(ll->lat)))*256.0; (*y - vvp->height/2) / 256 / 65536 * 180 * vvp->ympp = (MERCLAT(center->lat) - MERCLAT(ll->lat); DML((180.0 * vvp->ympp / 65536 / 256 * (vvp->height/2 - y)) + ML(cl)) = ll #endif } } } void vik_viewport_coord_to_screen ( VikViewport *vvp, const VikCoord *coord, int *x, int *y ) { static VikCoord tmp; g_return_if_fail ( vvp != NULL ); if ( coord->mode != vvp->coord_mode ) { g_warning ( "Have to convert in vik_viewport_coord_to_screen! This should never happen!"); vik_coord_copy_convert ( coord, vvp->coord_mode, &tmp ); coord = &tmp; } if ( vvp->coord_mode == VIK_COORD_UTM ) { struct UTM *center = (struct UTM *) &(vvp->center); struct UTM *utm = (struct UTM *) coord; if ( center->zone != utm->zone && vvp->one_utm_zone ) { *x = *y = VIK_VIEWPORT_UTM_WRONG_ZONE; return; } *x = ( (utm->easting - center->easting) / vvp->xmpp ) + (vvp->width / 2) - (center->zone - utm->zone ) * vvp->utm_zone_width / vvp->xmpp; *y = (vvp->height / 2) - ( (utm->northing - center->northing) / vvp->ympp ); } else if ( vvp->coord_mode == VIK_COORD_LATLON ) { struct LatLon *center = (struct LatLon *) &(vvp->center); struct LatLon *ll = (struct LatLon *) coord; double xx,yy; if ( vvp->drawmode == VIK_VIEWPORT_DRAWMODE_LATLON ) { /* FIXMERCATOR: Optimize */ *x = vvp->width/2 + (65536.0 / 180 / vvp->xmpp * (ll->lon - center->lon))*256.0; *y = vvp->height/2 + (65536.0 / 180 / vvp->ympp * (center->lat - ll->lat))*256.0; } else if ( vvp->drawmode == VIK_VIEWPORT_DRAWMODE_EXPEDIA ) { calcxy ( &xx, &yy, center->lon, center->lat, ll->lon, ll->lat, vvp->xmpp * ALTI_TO_MPP, vvp->ympp * ALTI_TO_MPP, vvp->width / 2, vvp->height / 2 ); *x = xx; *y = yy; } else if ( vvp->drawmode == VIK_VIEWPORT_DRAWMODE_MERCATOR ) { /* FIXMERCATOR: Optimize */ *x = vvp->width/2 + (65536.0 / 180 / vvp->xmpp * (ll->lon - center->lon))*256.0; *y = vvp->height/2 + (65536.0 / 180 / vvp->ympp * (MERCLAT(center->lat) - MERCLAT(ll->lat)))*256.0; } } } void a_viewport_clip_line ( gint *x1, gint *y1, gint *x2, gint *y2 ) { if ( *x1 > 20000 || *x1 < -20000 ) { gdouble shrinkfactor = ABS(20000.0 / *x1); *x1 = *x2 + (shrinkfactor * (*x1-*x2)); *y1 = *y2 + (shrinkfactor * (*y1-*y2)); } else if ( *y1 > 20000 || *y1 < -20000 ) { gdouble shrinkfactor = ABS(20000.0 / *x1); *x1 = *x2 + (shrinkfactor * (*x1-*x2)); *y1 = *y2 + (shrinkfactor * (*y1-*y2)); } else if ( *x2 > 20000 || *x2 < -20000 ) { gdouble shrinkfactor = ABS(20000.0 / (gdouble)*x2); *x2 = *x1 + (shrinkfactor * (*x2-*x1)); *y2 = *y1 + (shrinkfactor * (*y2-*y1)); } else if ( *y2 > 20000 || *y2 < -20000 ) { gdouble shrinkfactor = ABS(20000.0 / (gdouble)*x2); *x2 = *x1 + (shrinkfactor * (*x2-*x1)); *y2 = *y1 + (shrinkfactor * (*y2-*y1)); } } void vik_viewport_draw_line ( VikViewport *vvp, GdkGC *gc, gint x1, gint y1, gint x2, gint y2 ) { if ( ! ( ( x1 < 0 && x2 < 0 ) || ( y1 < 0 && y2 < 0 ) || ( x1 > vvp->width && x2 > vvp->width ) || ( y1 > vvp->height && y2 > vvp->height ) ) ) { /*** clipping, yeah! ***/ a_viewport_clip_line ( &x1, &y1, &x2, &y2 ); gdk_draw_line ( vvp->scr_buffer, gc, x1, y1, x2, y2); } } void vik_viewport_draw_rectangle ( VikViewport *vvp, GdkGC *gc, gboolean filled, gint x1, gint y1, gint x2, gint y2 ) { // Using 32 as half the default waypoint image size, so this draws ensures the highlight gets done if ( x1 > -32 && x1 < vvp->width + 32 && y1 > -32 && y1 < vvp->height + 32 ) gdk_draw_rectangle ( vvp->scr_buffer, gc, filled, x1, y1, x2, y2); } void vik_viewport_draw_string ( VikViewport *vvp, GdkFont *font, GdkGC *gc, gint x1, gint y1, const gchar *string ) { if ( x1 > -100 && x1 < vvp->width + 100 && y1 > -100 && y1 < vvp->height + 100 ) gdk_draw_string ( vvp->scr_buffer, font, gc, x1, y1, string ); } /* shouldn't use this -- slow -- change the alpha channel instead. */ void vik_viewport_draw_pixbuf_with_alpha ( VikViewport *vvp, GdkPixbuf *pixbuf, gint alpha, gint src_x, gint src_y, gint dest_x, gint dest_y, gint w, gint h ) { gint real_dest_x = MAX(dest_x,0); gint real_dest_y = MAX(dest_y,0); if ( alpha == 0 ) return; /* don't waste your time */ if ( w > vvp->alpha_pixbuf_width || h > vvp->alpha_pixbuf_height ) { if ( vvp->alpha_pixbuf ) g_object_unref ( G_OBJECT ( vvp->alpha_pixbuf ) ); vvp->alpha_pixbuf_width = MAX(w,vvp->alpha_pixbuf_width); vvp->alpha_pixbuf_height = MAX(h,vvp->alpha_pixbuf_height); vvp->alpha_pixbuf = gdk_pixbuf_new ( GDK_COLORSPACE_RGB, FALSE, 8, vvp->alpha_pixbuf_width, vvp->alpha_pixbuf_height ); } w = MIN(w,vvp->width - dest_x); h = MIN(h,vvp->height - dest_y); /* check that we are drawing within boundaries. */ src_x += (real_dest_x - dest_x); src_y += (real_dest_y - dest_y); w -= (real_dest_x - dest_x); h -= (real_dest_y - dest_y); gdk_pixbuf_get_from_drawable ( vvp->alpha_pixbuf, vvp->scr_buffer, NULL, real_dest_x, real_dest_y, 0, 0, w, h ); /* do a composite */ gdk_pixbuf_composite ( pixbuf, vvp->alpha_pixbuf, 0, 0, w, h, -src_x, -src_y, 1, 1, 0, alpha ); /* draw pixbuf_tmp */ vik_viewport_draw_pixbuf ( vvp, vvp->alpha_pixbuf, 0, 0, real_dest_x, real_dest_y, w, h ); } void vik_viewport_draw_pixbuf ( VikViewport *vvp, GdkPixbuf *pixbuf, gint src_x, gint src_y, gint dest_x, gint dest_y, gint w, gint h ) { gdk_draw_pixbuf ( vvp->scr_buffer, // GTK_WIDGET(vvp)->style->black_gc, NULL, pixbuf, src_x, src_y, dest_x, dest_y, w, h, GDK_RGB_DITHER_NONE, 0, 0 ); } void vik_viewport_draw_arc ( VikViewport *vvp, GdkGC *gc, gboolean filled, gint x, gint y, gint width, gint height, gint angle1, gint angle2 ) { gdk_draw_arc ( vvp->scr_buffer, gc, filled, x, y, width, height, angle1, angle2 ); } void vik_viewport_draw_polygon ( VikViewport *vvp, GdkGC *gc, gboolean filled, GdkPoint *points, gint npoints ) { gdk_draw_polygon ( vvp->scr_buffer, gc, filled, points, npoints ); } VikCoordMode vik_viewport_get_coord_mode ( const VikViewport *vvp ) { g_assert ( vvp ); return vvp->coord_mode; } static void viewport_set_coord_mode ( VikViewport *vvp, VikCoordMode mode ) { g_return_if_fail ( vvp != NULL ); vvp->coord_mode = mode; vik_coord_convert ( &(vvp->center), mode ); } /* Thanks GPSDrive */ static gboolean calcxy_rev(double *lg, double *lt, gint x, gint y, double zero_long, double zero_lat, double pixelfact_x, double pixelfact_y, gint mapSizeX2, gint mapSizeY2 ) { int px, py; gdouble dif, lat, lon; double Ra = Radius[90+(gint)zero_lat]; px = (mapSizeX2 - x) * pixelfact_x; py = (-mapSizeY2 + y) * pixelfact_y; lat = zero_lat - py / Ra; lat = zero_lat - py / Ra; lon = zero_long - px / (Ra * cos (DEG2RAD(lat))); dif = lat * (1 - (cos (DEG2RAD(fabs (lon - zero_long))))); lat = lat - dif / 1.5; lon = zero_long - px / (Ra * cos (DEG2RAD(lat))); *lt = lat; *lg = lon; return (TRUE); } /* Thanks GPSDrive */ static gboolean calcxy(double *x, double *y, double lg, double lt, double zero_long, double zero_lat, double pixelfact_x, double pixelfact_y, gint mapSizeX2, gint mapSizeY2 ) { double dif; double Ra; gint mapSizeX = 2 * mapSizeX2; gint mapSizeY = 2 * mapSizeY2; g_assert ( lt >= -90.0 && lt <= 90.0 ); // lg *= rad2deg; // FIXME, optimize equations // lt *= rad2deg; Ra = Radius[90+(gint)lt]; *x = Ra * cos (DEG2RAD(lt)) * (lg - zero_long); *y = Ra * (lt - zero_lat); dif = Ra * RAD2DEG(1 - (cos ((DEG2RAD(lg - zero_long))))); *y = *y + dif / 1.85; *x = *x / pixelfact_x; *y = *y / pixelfact_y; *x = mapSizeX2 - *x; *y += mapSizeY2; if ((*x < 0)||(*x >= mapSizeX)||(*y < 0)||(*y >= mapSizeY)) return (FALSE); return (TRUE); } static void viewport_init_ra() { static gboolean done_before = FALSE; if ( !done_before ) { gint i; for ( i = -90; i <= 90; i++) Radius[i+90] = calcR ( DEG2RAD((double)i) ); done_before = TRUE; } } double calcR (double lat) { double a = 6378.137, r, sc, x, y, z; double e2 = 0.081082 * 0.081082; /* * the radius of curvature of an ellipsoidal Earth in the plane of the * meridian is given by * * R' = a * (1 - e^2) / (1 - e^2 * (sin(lat))^2)^(3/2) * * * where a is the equatorial radius, b is the polar radius, and e is * the eccentricity of the ellipsoid = sqrt(1 - b^2/a^2) * * a = 6378 km (3963 mi) Equatorial radius (surface to center distance) * b = 6356.752 km (3950 mi) Polar radius (surface to center distance) e * = 0.081082 Eccentricity */ lat = DEG2RAD(lat); sc = sin (lat); x = a * (1.0 - e2); z = 1.0 - e2 * sc * sc; y = pow (z, 1.5); r = x / y; r = r * 1000.0; return r; } gboolean vik_viewport_is_one_zone ( VikViewport *vvp ) { return vvp->coord_mode == VIK_COORD_UTM && vvp->one_utm_zone; } void vik_viewport_draw_layout ( VikViewport *vvp, GdkGC *gc, gint x, gint y, PangoLayout *layout ) { if ( x > -100 && x < vvp->width + 100 && y > -100 && y < vvp->height + 100 ) gdk_draw_layout ( vvp->scr_buffer, gc, x, y, layout ); } void vik_gc_get_fg_color ( GdkGC *gc, GdkColor *dest ) { static GdkGCValues values; gdk_gc_get_values ( gc, &values ); gdk_colormap_query_color ( gdk_colormap_get_system(), values.foreground.pixel, dest ); } GdkFunction vik_gc_get_function ( GdkGC *gc ) { static GdkGCValues values; gdk_gc_get_values ( gc, &values ); return values.function; } void vik_viewport_set_drawmode ( VikViewport *vvp, VikViewportDrawMode drawmode ) { vvp->drawmode = drawmode; if ( drawmode == VIK_VIEWPORT_DRAWMODE_UTM ) viewport_set_coord_mode ( vvp, VIK_COORD_UTM ); else { viewport_set_coord_mode ( vvp, VIK_COORD_LATLON ); } } VikViewportDrawMode vik_viewport_get_drawmode ( VikViewport *vvp ) { return vvp->drawmode; } /******** triggering *******/ void vik_viewport_set_trigger ( VikViewport *vp, gpointer trigger ) { vp->trigger = trigger; } gpointer vik_viewport_get_trigger ( VikViewport *vp ) { return vp->trigger; } void vik_viewport_snapshot_save ( VikViewport *vp ) { gdk_draw_drawable ( vp->snapshot_buffer, vp->background_gc, vp->scr_buffer, 0, 0, 0, 0, -1, -1 ); } void vik_viewport_snapshot_load ( VikViewport *vp ) { gdk_draw_drawable ( vp->scr_buffer, vp->background_gc, vp->snapshot_buffer, 0, 0, 0, 0, -1, -1 ); } void vik_viewport_set_half_drawn(VikViewport *vp, gboolean half_drawn) { vp->half_drawn = half_drawn; } gboolean vik_viewport_get_half_drawn( VikViewport *vp ) { return vp->half_drawn; } const gchar *vik_viewport_get_drawmode_name(VikViewport *vv, VikViewportDrawMode mode) { const gchar *name = NULL; VikWindow *vw = NULL; GtkWidget *mode_button; GtkWidget *label; vw = VIK_WINDOW_FROM_WIDGET(vv); mode_button = vik_window_get_drawmode_button(vw, mode); label = gtk_bin_get_child(GTK_BIN(mode_button)); name = gtk_label_get_text ( GTK_LABEL(label) ); return name; } void vik_viewport_get_min_max_lat_lon ( VikViewport *vp, gdouble *min_lat, gdouble *max_lat, gdouble *min_lon, gdouble *max_lon ) { VikCoord tleft, tright, bleft, bright; vik_viewport_screen_to_coord ( vp, 0, 0, &tleft ); vik_viewport_screen_to_coord ( vp, vik_viewport_get_width(vp), 0, &tright ); vik_viewport_screen_to_coord ( vp, 0, vik_viewport_get_height(vp), &bleft ); vik_viewport_screen_to_coord ( vp, vp->width, vp->height, &bright ); vik_coord_convert(&tleft, VIK_COORD_LATLON); vik_coord_convert(&tright, VIK_COORD_LATLON); vik_coord_convert(&bleft, VIK_COORD_LATLON); vik_coord_convert(&bright, VIK_COORD_LATLON); *max_lat = MAX(tleft.north_south, tright.north_south); *min_lat = MIN(bleft.north_south, bright.north_south); *max_lon = MAX(tright.east_west, bright.east_west); *min_lon = MIN(tleft.east_west, bleft.east_west); } void vik_viewport_reset_copyrights ( VikViewport *vp ) { g_return_if_fail ( vp != NULL ); g_slist_foreach ( vp->copyrights, (GFunc)g_free, NULL ); g_slist_free ( vp->copyrights ); vp->copyrights = NULL; } /** * vik_viewport_add_copyright: * @vp: self object * @copyright: new copyright to display * * Add a copyright to display on viewport. */ void vik_viewport_add_copyright ( VikViewport *vp, const gchar *copyright ) { g_return_if_fail ( vp != NULL ); if ( copyright ) { GSList *found = g_slist_find_custom ( vp->copyrights, copyright, (GCompareFunc)strcmp ); if ( found == NULL ) { gchar *duple = g_strdup ( copyright ); vp->copyrights = g_slist_prepend ( vp->copyrights, duple ); } } } void vik_viewport_reset_logos ( VikViewport *vp ) { g_return_if_fail ( vp != NULL ); /* do not free elem */ g_slist_free ( vp->logos ); vp->logos = NULL; } void vik_viewport_add_logo ( VikViewport *vp, const GdkPixbuf *logo ) { g_return_if_fail ( vp != NULL ); if ( logo ) { GdkPixbuf *found = NULL; /* FIXME (GdkPixbuf*)g_slist_find_custom ( vp->logos, logo, (GCompareFunc)== ); */ if ( found == NULL ) { vp->logos = g_slist_prepend ( vp->logos, (gpointer)logo ); } } } /** * vik_viewport_compute_bearing: * @vp: self object * @x1: screen coord * @y1: screen coord * @x2: screen coord * @y2: screen coord * @angle: bearing in Radian (output) * @baseangle: UTM base angle in Radian (output) * * Compute bearing. */ void vik_viewport_compute_bearing ( VikViewport *vp, gint x1, gint y1, gint x2, gint y2, gdouble *angle, gdouble *baseangle ) { gdouble len = sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2)); gdouble dx = (x2-x1)/len*10; gdouble dy = (y2-y1)/len*10; *angle = atan2(dy, dx) + M_PI_2; if ( vik_viewport_get_drawmode ( vp ) == VIK_VIEWPORT_DRAWMODE_UTM) { VikCoord test; struct LatLon ll; struct UTM u; gint tx, ty; vik_viewport_screen_to_coord ( vp, x1, y1, &test ); vik_coord_to_latlon ( &test, &ll ); ll.lat += vik_viewport_get_ympp ( vp ) * vik_viewport_get_height ( vp ) / 11000.0; // about 11km per degree latitude a_coords_latlon_to_utm ( &ll, &u ); vik_coord_load_from_utm ( &test, VIK_VIEWPORT_DRAWMODE_UTM, &u ); vik_viewport_coord_to_screen ( vp, &test, &tx, &ty ); *baseangle = M_PI - atan2(tx-x1, ty-y1); *angle -= *baseangle; } if (*angle < 0) *angle += 2*M_PI; if (*angle > 2*M_PI) *angle -= 2*M_PI; } viking-1.4.2/src/vikenumtypes.h0000644000175000017500000000061312175546630013442 00000000000000 /* Generated data (by glib-mkenums) */ #ifndef __VIK_ENUM_TYPES_H__ #define __VIK_ENUM_TYPES_H__ #include G_BEGIN_DECLS /* Enumerations from "vikviewport.h" */ #define VIK_TYPE_VIEWPORT_DRAW_MODE (vik_viewport_draw_mode_get_type()) GType vik_viewport_draw_mode_get_type (void) G_GNUC_CONST; G_END_DECLS #endif /* __GITG_ENUM_TYPES_H__ */ /* Generated data ends here */ viking-1.4.2/src/util.c0000644000175000017500000001376712175546146011667 00000000000000/* * Viking - GPS data editor * Copyright (C) 2007, Guilhem Bonnefille * Based on: * Copyright (C) 2003-2007, Leandro A. F. Pereira * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, version 2. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef WINDOWS #include #endif #include #include #include #include "util.h" #include "dialog.h" #include "globals.h" #include "download.h" #ifndef WINDOWS static gboolean spawn_command_line_async(const gchar * cmd, const gchar * arg) { gchar *cmdline = NULL; gboolean status; cmdline = g_strdup_printf("%s '%s'", cmd, arg); g_debug("Running: %s", cmdline); status = g_spawn_command_line_async(cmdline, NULL); g_free(cmdline); return status; } #endif void open_url(GtkWindow *parent, const gchar * url) { #ifdef WINDOWS ShellExecute(NULL, NULL, (char *) url, NULL, ".\\", 0); #else /* WINDOWS */ const gchar *browsers[] = { "xdg-open", "gnome-open", "kfmclient openURL", "sensible-browser", "firefox", "epiphany", "iceweasel", "seamonkey", "galeon", "mozilla", "opera", "konqueror", "netscape", "links -g", "chromium-browser", "chromium", "chrome", "safari", "camino", "omniweb", "icab", NULL }; gint i=0; const gchar *browser = g_getenv("BROWSER"); if (browser == NULL || browser[0] == '\0') { /* $BROWSER not set -> use first entry */ browser = browsers[i++]; } do { if (spawn_command_line_async(browser, url)) { return; } browser = browsers[i++]; } while(browser); a_dialog_error_msg ( parent, _("Could not launch web browser.") ); #endif /* WINDOWS */ } void new_email(GtkWindow *parent, const gchar * address) { gchar *uri = g_strdup_printf("mailto:%s", address); #ifdef WINDOWS ShellExecute(NULL, NULL, (char *) uri, NULL, ".\\", 0); #else /* WINDOWS */ if (!spawn_command_line_async("xdg-email", uri)) a_dialog_error_msg ( parent, _("Could not create new email.") ); #endif /* WINDOWS */ g_free(uri); uri = NULL; } gchar *uri_escape(gchar *str) { gchar *esc_str = g_malloc(3*strlen(str)); gchar *dst = esc_str; gchar *src; for (src = str; *src; src++) { if (*src == ' ') *dst++ = '+'; else if (g_ascii_isalnum(*src)) *dst++ = *src; else { g_sprintf(dst, "%%%02hhX", *src); dst += 3; } } *dst = '\0'; return(esc_str); } GList * str_array_to_glist(gchar* data[]) { GList *gl = NULL; gpointer * p; for (p = (gpointer)data; *p; p++) gl = g_list_prepend(gl, *p); return g_list_reverse(gl); } typedef struct { GtkWindow *window; // Layer needed for redrawing gchar *version; // Image list } new_version_thread_data; static gboolean new_version_available_message ( new_version_thread_data *nvtd ) { // Only a simple goto website option is offered // Trying to do an installation update is platform specific if ( a_dialog_yes_or_no ( nvtd->window, _("There is a newer version of Viking available: %s\n\nDo you wish to go to Viking's website now?"), nvtd->version ) ) // NB 'VIKING_URL' redirects to the Wiki, here we want to go the main site. open_url ( nvtd->window, "http://sourceforge.net/projects/viking/" ); //else // increase amount of time between performing version checks g_free ( nvtd->version ); g_free ( nvtd ); return FALSE; } static void latest_version_thread ( GtkWindow *window ) { // Need to allow a few of redirects, as SF file is often served from different server DownloadMapOptions options = { FALSE, FALSE, NULL, 5, NULL, NULL }; gchar *filename = a_download_uri_to_tmp_file ( "http://sourceforge.net/projects/viking/files/VERSION", &options ); //gchar *filename = g_strdup ( "VERSION" ); if ( !filename ) { return; } GMappedFile *mf = g_mapped_file_new ( filename, FALSE, NULL ); if ( !mf ) return; gchar *text = g_mapped_file_get_contents ( mf ); gint latest_version = viking_version_to_number ( text ); gint my_version = viking_version_to_number ( VIKING_VERSION ); g_debug ( "The lastest version is: %s", text ); if ( my_version < latest_version ) { new_version_thread_data *nvtd = g_malloc ( sizeof(new_version_thread_data) ); nvtd->window = window; nvtd->version = g_strdup ( text ); gdk_threads_add_idle ( (GSourceFunc) new_version_available_message, nvtd ); } else g_debug ( "Running the lastest version: %s", VIKING_VERSION ); g_mapped_file_unref ( mf ); if ( filename ) { g_remove ( filename ); g_free ( filename ); } } /* * check_latest_version: * @window: Somewhere where we may need use the display to inform the user about the version status * * Periodically checks the released latest VERSION file on the website to compare with the running version * * ATM the plan is for a 1.4.2 release to be always on *just* for Windows platforms * Then in 1.5.X it will made entirely optional (default on for Windows) * with a longer periodic check (enabled via state saving using the soon to be released 'settings' code) * */ void check_latest_version ( GtkWindow *window ) { #ifdef WINDOWS #if GLIB_CHECK_VERSION (2, 32, 0) g_thread_try_new ( "latest_version_thread", (GThreadFunc)latest_version_thread, window, NULL ); #else g_thread_create ( (GThreadFunc)latest_version_thread, window, FALSE, NULL ); #endif #endif } viking-1.4.2/src/uibuilder.c0000644000175000017500000003665012175546146012672 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2007, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include "uibuilder.h" #include "vikradiogroup.h" #include "vikfileentry.h" #include "vikfilelist.h" GtkWidget *a_uibuilder_new_widget ( VikLayerParam *param, VikLayerParamData data ) { GtkWidget *rv = NULL; switch ( param->widget_type ) { case VIK_LAYER_WIDGET_COLOR: if ( param->type == VIK_LAYER_PARAM_COLOR ) rv = gtk_color_button_new_with_color ( &(data.c) ); break; case VIK_LAYER_WIDGET_CHECKBUTTON: if ( param->type == VIK_LAYER_PARAM_BOOLEAN ) { //rv = gtk_check_button_new_with_label ( //param->title ); rv = gtk_check_button_new (); if ( data.b ) gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON(rv), TRUE ); } break; case VIK_LAYER_WIDGET_COMBOBOX: #ifndef GTK_2_2 if ( param->type == VIK_LAYER_PARAM_UINT && param->widget_data ) { gchar **pstr = param->widget_data; rv = gtk_combo_box_new_text (); while ( *pstr ) gtk_combo_box_append_text ( GTK_COMBO_BOX ( rv ), *(pstr++) ); if ( param->extra_widget_data ) /* map of alternate uint values for options */ { int i; for ( i = 0; ((const char **)param->widget_data)[i]; i++ ) if ( ((guint *)param->extra_widget_data)[i] == data.u ) { gtk_combo_box_set_active ( GTK_COMBO_BOX(rv), i ); break; } } else gtk_combo_box_set_active ( GTK_COMBO_BOX ( rv ), data.u ); } else if ( param->type == VIK_LAYER_PARAM_STRING && param->widget_data ) { gchar **pstr = param->widget_data; rv = GTK_WIDGET ( gtk_combo_box_entry_new_text () ); if ( data.s ) gtk_combo_box_append_text ( GTK_COMBO_BOX ( rv ), data.s ); while ( *pstr ) gtk_combo_box_append_text ( GTK_COMBO_BOX ( rv ), *(pstr++) ); if ( data.s ) gtk_combo_box_set_active ( GTK_COMBO_BOX ( rv ), 0 ); } break; #endif case VIK_LAYER_WIDGET_RADIOGROUP: /* widget_data and extra_widget_data are GList */ if ( param->type == VIK_LAYER_PARAM_UINT && param->widget_data ) { rv = vik_radio_group_new ( param->widget_data ); if ( param->extra_widget_data ) /* map of alternate uint values for options */ { int i; int nb_elem = g_list_length(param->widget_data); for ( i = 0; i < nb_elem; i++ ) if ( GPOINTER_TO_UINT ( g_list_nth_data(param->extra_widget_data, i) ) == data.u ) { vik_radio_group_set_selected ( VIK_RADIO_GROUP(rv), i ); break; } } else if ( data.u ) /* zero is already default */ vik_radio_group_set_selected ( VIK_RADIO_GROUP(rv), data.u ); } break; case VIK_LAYER_WIDGET_RADIOGROUP_STATIC: if ( param->type == VIK_LAYER_PARAM_UINT && param->widget_data ) { rv = vik_radio_group_new_static ( (const gchar **) param->widget_data ); if ( param->extra_widget_data ) /* map of alternate uint values for options */ { int i; for ( i = 0; ((const char **)param->widget_data)[i]; i++ ) if ( ((guint *)param->extra_widget_data)[i] == data.u ) { vik_radio_group_set_selected ( VIK_RADIO_GROUP(rv), i ); break; } } else if ( data.u ) /* zero is already default */ vik_radio_group_set_selected ( VIK_RADIO_GROUP(rv), data.u ); } break; case VIK_LAYER_WIDGET_SPINBUTTON: if ( (param->type == VIK_LAYER_PARAM_DOUBLE || param->type == VIK_LAYER_PARAM_UINT || param->type == VIK_LAYER_PARAM_INT) && param->widget_data ) { gdouble init_val = (param->type == VIK_LAYER_PARAM_DOUBLE) ? data.d : (param->type == VIK_LAYER_PARAM_UINT ? data.u : data.i); VikLayerParamScale *scale = (VikLayerParamScale *) param->widget_data; rv = gtk_spin_button_new ( GTK_ADJUSTMENT(gtk_adjustment_new( init_val, scale->min, scale->max, scale->step, scale->step, 0 )), scale->step, scale->digits ); } break; case VIK_LAYER_WIDGET_ENTRY: if ( param->type == VIK_LAYER_PARAM_STRING ) { rv = gtk_entry_new (); if (data.s) gtk_entry_set_text ( GTK_ENTRY(rv), data.s ); } break; case VIK_LAYER_WIDGET_PASSWORD: if ( param->type == VIK_LAYER_PARAM_STRING ) { rv = gtk_entry_new (); gtk_entry_set_visibility ( GTK_ENTRY(rv), FALSE ); if (data.s) gtk_entry_set_text ( GTK_ENTRY(rv), data.s ); gtk_widget_set_tooltip_text ( GTK_WIDGET(rv), _("Take care that this password will be stored clearly in a plain file.") ); } break; case VIK_LAYER_WIDGET_FILEENTRY: if ( param->type == VIK_LAYER_PARAM_STRING ) { rv = vik_file_entry_new (GTK_FILE_CHOOSER_ACTION_OPEN); vik_file_entry_set_filename ( VIK_FILE_ENTRY(rv), data.s ); } break; case VIK_LAYER_WIDGET_FOLDERENTRY: if ( param->type == VIK_LAYER_PARAM_STRING ) { rv = vik_file_entry_new (GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER); vik_file_entry_set_filename ( VIK_FILE_ENTRY(rv), data.s ); } break; case VIK_LAYER_WIDGET_FILELIST: if ( param->type == VIK_LAYER_PARAM_STRING_LIST ) { rv = vik_file_list_new ( _(param->title) ); vik_file_list_set_files ( VIK_FILE_LIST(rv), data.sl ); } break; case VIK_LAYER_WIDGET_HSCALE: if ( (param->type == VIK_LAYER_PARAM_DOUBLE || param->type == VIK_LAYER_PARAM_UINT || param->type == VIK_LAYER_PARAM_INT) && param->widget_data ) { gdouble init_val = (param->type == VIK_LAYER_PARAM_DOUBLE) ? data.d : (param->type == VIK_LAYER_PARAM_UINT ? data.u : data.i); VikLayerParamScale *scale = (VikLayerParamScale *) param->widget_data; rv = gtk_hscale_new_with_range ( scale->min, scale->max, scale->step ); gtk_scale_set_digits ( GTK_SCALE(rv), scale->digits ); gtk_range_set_value ( GTK_RANGE(rv), init_val ); } } if ( rv && !gtk_widget_get_tooltip_text ( rv ) ) { if ( param->tooltip ) gtk_widget_set_tooltip_text ( rv, _(param->tooltip) ); } return rv; } VikLayerParamData a_uibuilder_widget_get_value ( GtkWidget *widget, VikLayerParam *param ) { VikLayerParamData rv; switch ( param->widget_type ) { case VIK_LAYER_WIDGET_COLOR: gtk_color_button_get_color ( GTK_COLOR_BUTTON(widget), &(rv.c) ); break; case VIK_LAYER_WIDGET_CHECKBUTTON: rv.b = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)); break; case VIK_LAYER_WIDGET_COMBOBOX: #ifndef GTK_2_2 if ( param->type == VIK_LAYER_PARAM_UINT ) { rv.i = gtk_combo_box_get_active ( GTK_COMBO_BOX(widget) ); if ( rv.i == -1 ) rv.i = 0; rv.u = rv.i; if ( param->extra_widget_data ) rv.u = ((guint *)param->extra_widget_data)[rv.u]; } if ( param->type == VIK_LAYER_PARAM_STRING) { rv.s = gtk_combo_box_get_active_text ( GTK_COMBO_BOX(widget) ); g_debug("%s: %s", __FUNCTION__, rv.s); } break; #endif case VIK_LAYER_WIDGET_RADIOGROUP: case VIK_LAYER_WIDGET_RADIOGROUP_STATIC: rv.u = vik_radio_group_get_selected(VIK_RADIO_GROUP(widget)); if ( param->extra_widget_data ) rv.u = GPOINTER_TO_UINT ( g_list_nth_data(param->extra_widget_data, rv.u) ); break; case VIK_LAYER_WIDGET_SPINBUTTON: if ( param->type == VIK_LAYER_PARAM_UINT ) rv.u = gtk_spin_button_get_value_as_int ( GTK_SPIN_BUTTON(widget) ); else if ( param->type == VIK_LAYER_PARAM_INT ) rv.i = gtk_spin_button_get_value_as_int ( GTK_SPIN_BUTTON(widget) ); else rv.d = gtk_spin_button_get_value ( GTK_SPIN_BUTTON(widget) ); break; case VIK_LAYER_WIDGET_ENTRY: case VIK_LAYER_WIDGET_PASSWORD: rv.s = gtk_entry_get_text ( GTK_ENTRY(widget) ); break; case VIK_LAYER_WIDGET_FILEENTRY: case VIK_LAYER_WIDGET_FOLDERENTRY: rv.s = vik_file_entry_get_filename ( VIK_FILE_ENTRY(widget) ); break; case VIK_LAYER_WIDGET_FILELIST: rv.sl = vik_file_list_get_files ( VIK_FILE_LIST(widget) ); break; case VIK_LAYER_WIDGET_HSCALE: if ( param->type == VIK_LAYER_PARAM_UINT ) rv.u = (guint32) gtk_range_get_value ( GTK_RANGE(widget) ); else if ( param->type == VIK_LAYER_PARAM_INT ) rv.i = (gint32) gtk_range_get_value ( GTK_RANGE(widget) ); else rv.d = gtk_range_get_value ( GTK_RANGE(widget) ); break; } return rv; } gint a_uibuilder_properties_factory ( const gchar *dialog_name, GtkWindow *parent, VikLayerParam *params, guint16 params_count, gchar **groups, guint8 groups_count, gboolean (*setparam) (gpointer,guint16,VikLayerParamData,gpointer,gboolean), gpointer pass_along1, gpointer pass_along2, VikLayerParamData (*getparam) (gpointer,guint16,gboolean), gpointer pass_along_getparam ) /* pass_along1 and pass_along2 are for set_param first and last params */ { guint16 i, j, widget_count = 0; gboolean must_redraw = FALSE; if ( ! params ) return 1; /* no params == no options, so all is good */ for ( i = 0; i < params_count; i++ ) if ( params[i].group != VIK_LAYER_NOT_IN_PROPERTIES ) widget_count++; if ( widget_count == 0) return 0; /* TODO -- should be one? */ else { /* create widgets and titles; place in table */ GtkWidget *dialog = gtk_dialog_new_with_buttons ( dialog_name, parent, GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL ); gtk_dialog_set_default_response ( GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT ); GtkWidget *response_w = NULL; #if GTK_CHECK_VERSION (2, 20, 0) response_w = gtk_dialog_get_widget_for_response ( GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT ); #endif gint resp; GtkWidget *table = NULL; GtkWidget **tables = NULL; /* for more than one group */ GtkWidget *notebook = NULL; GtkWidget **widgets = g_malloc ( sizeof(GtkWidget *) * widget_count ); if ( groups && groups_count > 1 ) { guint8 current_group; guint16 tab_widget_count; notebook = gtk_notebook_new (); gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), notebook, FALSE, FALSE, 0); tables = g_malloc ( sizeof(GtkWidget *) * groups_count ); for ( current_group = 0; current_group < groups_count; current_group++ ) { tab_widget_count = 0; for ( j = 0; j < params_count; j ++ ) if ( params[j].group == current_group ) tab_widget_count++; if ( tab_widget_count ) { tables[current_group] = gtk_table_new ( tab_widget_count, 1, FALSE ); gtk_notebook_append_page ( GTK_NOTEBOOK(notebook), tables[current_group], gtk_label_new(groups[current_group]) ); } } } else { table = gtk_table_new( widget_count, 1, FALSE ); gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), table, FALSE, FALSE, 0); } for ( i = 0, j = 0; i < params_count; i++ ) { if ( params[i].group != VIK_LAYER_NOT_IN_PROPERTIES ) { if ( tables ) table = tables[MAX(0, params[i].group)]; /* round up NOT_IN_GROUP, that's not reasonable here */ widgets[j] = a_uibuilder_new_widget ( &(params[i]), getparam ( pass_along_getparam, i, FALSE ) ); g_assert ( widgets[j] != NULL ); gtk_table_attach ( GTK_TABLE(table), gtk_label_new(_(params[i].title)), 0, 1, j, j+1, 0, 0, 0, 0 ); gtk_table_attach ( GTK_TABLE(table), widgets[j], 1, 2, j, j+1, GTK_EXPAND | GTK_FILL, 0, 2, 2 ); j++; } } if ( response_w ) gtk_widget_grab_focus ( response_w ); gtk_widget_show_all ( dialog ); resp = gtk_dialog_run (GTK_DIALOG (dialog)); if ( resp == GTK_RESPONSE_ACCEPT ) { for ( i = 0, j = 0; i < params_count; i++ ) { if ( params[i].group != VIK_LAYER_NOT_IN_PROPERTIES ) { if ( setparam ( pass_along1, i, a_uibuilder_widget_get_value ( widgets[j], &(params[i]) ), pass_along2, FALSE ) ) must_redraw = TRUE; j++; } } gtk_widget_destroy ( dialog ); /* hide before redrawing. */ g_free ( widgets ); if ( tables ) g_free ( tables ); return must_redraw ? 2 : 3; /* user clicked OK */ } if ( tables ) g_free ( tables ); gtk_widget_destroy ( dialog ); g_free ( widgets ); return 0; } } static void uibuilder_run_setparam ( VikLayerParamData *paramdatas, guint16 i, VikLayerParamData data, VikLayerParam *params ) { /* could have to copy it if it's a string! */ switch ( params[i].type ) { case VIK_LAYER_PARAM_STRING: paramdatas[i].s = g_strdup ( data.s ); break; default: paramdatas[i] = data; /* string list will have to be freed by layer. anything else not freed */ } } static VikLayerParamData uibuilder_run_getparam ( VikLayerParamData *params_defaults, guint16 i ) { return params_defaults[i]; } VikLayerParamData *a_uibuilder_run_dialog ( const gchar *dialog_name, GtkWindow *parent, VikLayerParam *params, guint16 params_count, gchar **groups, guint8 groups_count, VikLayerParamData *params_defaults ) { VikLayerParamData *paramdatas = g_new(VikLayerParamData, params_count); if ( a_uibuilder_properties_factory ( dialog_name, parent, params, params_count, groups, groups_count, (gpointer) uibuilder_run_setparam, paramdatas, params, (gpointer) uibuilder_run_getparam, params_defaults ) > 0 ) { return paramdatas; } g_free ( paramdatas ); return NULL; } /* frees data from last (if ness) */ void a_uibuilder_free_paramdatas ( VikLayerParamData *paramdatas, VikLayerParam *params, guint16 params_count ) { int i; /* may have to free strings, etc. */ for ( i = 0; i < params_count; i++ ) { switch ( params[i].type ) { case VIK_LAYER_PARAM_STRING: g_free ( (gchar *) paramdatas[i].s ); break; case VIK_LAYER_PARAM_STRING_LIST: { /* should make a util function out of this */ GList *iter = paramdatas[i].sl; while ( iter ) { g_free ( iter->data ); iter = iter->next; } g_list_free ( paramdatas[i].sl ); break; } } } g_free ( paramdatas ); } viking-1.4.2/src/vikcoordlayer.c0000644000175000017500000003217712175546146013563 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef HAVE_MATH_H #include #endif #include #include "viking.h" #include "icons/icons.h" static void coord_layer_marshall( VikCoordLayer *vcl, guint8 **data, gint *len ); static VikCoordLayer *coord_layer_unmarshall( guint8 *data, gint len, VikViewport *vvp ); static gboolean coord_layer_set_param ( VikCoordLayer *vcl, guint16 id, VikLayerParamData data, VikViewport *vp, gboolean is_file_operation ); static VikLayerParamData coord_layer_get_param ( VikCoordLayer *vcl, guint16 id, gboolean is_file_operation ); static void coord_layer_update_gc ( VikCoordLayer *vcl, VikViewport *vp, const gchar *color ); static void coord_layer_post_read ( VikLayer *vl, VikViewport *vp, gboolean from_file ); static VikLayerParamScale param_scales[] = { { 0.05, 60.0, 0.25, 10 }, { 1, 10, 1, 0 }, }; static VikLayerParam coord_layer_params[] = { { "color", VIK_LAYER_PARAM_COLOR, VIK_LAYER_GROUP_NONE, N_("Color:"), VIK_LAYER_WIDGET_COLOR, NULL, NULL, NULL }, { "min_inc", VIK_LAYER_PARAM_DOUBLE, VIK_LAYER_GROUP_NONE, N_("Minutes Width:"), VIK_LAYER_WIDGET_SPINBUTTON, ¶m_scales[0], NULL, NULL }, { "line_thickness", VIK_LAYER_PARAM_UINT, VIK_LAYER_GROUP_NONE, N_("Line Thickness:"), VIK_LAYER_WIDGET_SPINBUTTON, ¶m_scales[1], NULL, NULL }, }; enum { PARAM_COLOR = 0, PARAM_MIN_INC, PARAM_LINE_THICKNESS, NUM_PARAMS }; VikLayerInterface vik_coord_layer_interface = { "Coord", N_("Coordinate"), NULL, &vikcoordlayer_pixbuf, NULL, 0, coord_layer_params, NUM_PARAMS, NULL, 0, VIK_MENU_ITEM_ALL, (VikLayerFuncCreate) vik_coord_layer_create, (VikLayerFuncRealize) NULL, (VikLayerFuncPostRead) coord_layer_post_read, (VikLayerFuncFree) vik_coord_layer_free, (VikLayerFuncProperties) NULL, (VikLayerFuncDraw) vik_coord_layer_draw, (VikLayerFuncChangeCoordMode) NULL, (VikLayerFuncSetMenuItemsSelection) NULL, (VikLayerFuncGetMenuItemsSelection) NULL, (VikLayerFuncAddMenuItems) NULL, (VikLayerFuncSublayerAddMenuItems) NULL, (VikLayerFuncSublayerRenameRequest) NULL, (VikLayerFuncSublayerToggleVisible) NULL, (VikLayerFuncSublayerTooltip) NULL, (VikLayerFuncLayerTooltip) NULL, (VikLayerFuncLayerSelected) NULL, (VikLayerFuncMarshall) coord_layer_marshall, (VikLayerFuncUnmarshall) coord_layer_unmarshall, (VikLayerFuncSetParam) coord_layer_set_param, (VikLayerFuncGetParam) coord_layer_get_param, (VikLayerFuncReadFileData) NULL, (VikLayerFuncWriteFileData) NULL, (VikLayerFuncDeleteItem) NULL, (VikLayerFuncCutItem) NULL, (VikLayerFuncCopyItem) NULL, (VikLayerFuncPasteItem) NULL, (VikLayerFuncFreeCopiedItem) NULL, (VikLayerFuncDragDropRequest) NULL, (VikLayerFuncSelectClick) NULL, (VikLayerFuncSelectMove) NULL, (VikLayerFuncSelectRelease) NULL, (VikLayerFuncSelectedViewportMenu) NULL, }; struct _VikCoordLayer { VikLayer vl; GdkGC *gc; gdouble deg_inc; guint8 line_thickness; GdkColor *color; }; GType vik_coord_layer_get_type () { static GType vcl_type = 0; if (!vcl_type) { static const GTypeInfo vcl_info = { sizeof (VikCoordLayerClass), NULL, /* base_init */ NULL, /* base_finalize */ NULL, /* class init */ NULL, /* class_finalize */ NULL, /* class_data */ sizeof (VikCoordLayer), 0, NULL /* instance init */ }; vcl_type = g_type_register_static ( VIK_LAYER_TYPE, "VikCoordLayer", &vcl_info, 0 ); } return vcl_type; } static void coord_layer_marshall( VikCoordLayer *vcl, guint8 **data, gint *len ) { vik_layer_marshall_params ( VIK_LAYER(vcl), data, len ); } static VikCoordLayer *coord_layer_unmarshall( guint8 *data, gint len, VikViewport *vvp ) { VikCoordLayer *rv = vik_coord_layer_new (); vik_layer_unmarshall_params ( VIK_LAYER(rv), data, len, vvp ); return rv; } gboolean coord_layer_set_param ( VikCoordLayer *vcl, guint16 id, VikLayerParamData data, VikViewport *vp, gboolean is_file_operation ) { switch ( id ) { case PARAM_COLOR: if ( vcl->color ) gdk_color_free ( vcl->color ); vcl->color = gdk_color_copy( &(data.c)); break; case PARAM_MIN_INC: vcl->deg_inc = data.d / 60.0; break; case PARAM_LINE_THICKNESS: if ( data.u >= 1 && data.u <= 15 ) vcl->line_thickness = data.u; break; } return TRUE; } static VikLayerParamData coord_layer_get_param ( VikCoordLayer *vcl, guint16 id, gboolean is_file_operation ) { VikLayerParamData rv; switch ( id ) { case PARAM_COLOR: if (vcl->color) { rv.c.pixel = vcl->color->pixel; rv.c.red = vcl->color->red; rv.c.green = vcl->color->green; rv.c.blue = vcl->color->blue; } break; case PARAM_MIN_INC: rv.d = vcl->deg_inc * 60.0; break; case PARAM_LINE_THICKNESS: rv.i = vcl->line_thickness; break; } return rv; } static void coord_layer_post_read ( VikLayer *vl, VikViewport *vp, gboolean from_file ) { VikCoordLayer *vcl = VIK_COORD_LAYER(vl); if ( vcl->gc ) g_object_unref ( G_OBJECT(vcl->gc) ); vcl->gc = vik_viewport_new_gc_from_color ( vp, vcl->color, vcl->line_thickness ); } VikCoordLayer *vik_coord_layer_new ( ) { GdkColor InitColor; VikCoordLayer *vcl = VIK_COORD_LAYER ( g_object_new ( VIK_COORD_LAYER_TYPE, NULL ) ); vik_layer_set_type ( VIK_LAYER(vcl), VIK_LAYER_COORD ); InitColor.pixel = 0; InitColor.red = 65535; InitColor.green = 65535; InitColor.blue = 65535; vcl->gc = NULL; vcl->deg_inc = 1.0/60.0; vcl->line_thickness = 3; vcl->color = gdk_color_copy (&InitColor); return vcl; } void vik_coord_layer_draw ( VikCoordLayer *vcl, gpointer data ) { VikViewport *vp = (VikViewport *) data; if ( !vcl->gc ) { return; } if ( vik_viewport_get_coord_mode(vp) != VIK_COORD_UTM ) { VikCoord left, right, left2, right2; gdouble l, r, i, j; gint x1, y1, x2, y2, smod = 1, mmod = 1; gboolean mins = FALSE, secs = FALSE; GdkGC *dgc = vik_viewport_new_gc_from_color(vp, vcl->color, vcl->line_thickness); GdkGC *mgc = vik_viewport_new_gc_from_color(vp, vcl->color, MAX(vcl->line_thickness/2, 1)); GdkGC *sgc = vik_viewport_new_gc_from_color(vp, vcl->color, MAX(vcl->line_thickness/5, 1)); vik_viewport_screen_to_coord ( vp, 0, 0, &left ); vik_viewport_screen_to_coord ( vp, vik_viewport_get_width(vp), 0, &right ); vik_viewport_screen_to_coord ( vp, 0, vik_viewport_get_height(vp), &left2 ); vik_viewport_screen_to_coord ( vp, vik_viewport_get_width(vp), vik_viewport_get_height(vp), &right2 ); #define CLINE(gc, c1, c2) { \ vik_viewport_coord_to_screen(vp, (c1), &x1, &y1); \ vik_viewport_coord_to_screen(vp, (c2), &x2, &y2); \ vik_viewport_draw_line (vp, (gc), x1, y1, x2, y2); \ } l = left.east_west; r = right.east_west; if (60*fabs(l-r) < 4) { secs = TRUE; smod = MIN(6, (int)ceil(3600*fabs(l-r)/30.0)); } if (fabs(l-r) < 4) { mins = TRUE; mmod = MIN(6, (int)ceil(60*fabs(l-r)/30.0)); } for (i=floor(l*60); inorthing - ( ympp * height / 2 ); a_coords_utm_to_latlon ( &utm, &ll ); utm.northing = center->northing + ( ympp * height / 2 ); a_coords_utm_to_latlon ( &utm, &ll2 ); { /* find corner coords in lat/lon. start at whichever is less: top or bottom left lon. goto whichever more: top or bottom right lon */ struct LatLon topleft, topright, bottomleft, bottomright; struct UTM temp_utm; temp_utm = *center; temp_utm.easting -= (width/2)*xmpp; temp_utm.northing += (height/2)*ympp; a_coords_utm_to_latlon ( &temp_utm, &topleft ); temp_utm.easting += (width*xmpp); a_coords_utm_to_latlon ( &temp_utm, &topright ); temp_utm.northing -= (height*ympp); a_coords_utm_to_latlon ( &temp_utm, &bottomright ); temp_utm.easting -= (width*xmpp); a_coords_utm_to_latlon ( &temp_utm, &bottomleft ); min.lon = (topleft.lon < bottomleft.lon) ? topleft.lon : bottomleft.lon; max.lon = (topright.lon > bottomright.lon) ? topright.lon : bottomright.lon; min.lat = (bottomleft.lat < bottomright.lat) ? bottomleft.lat : bottomright.lat; max.lat = (topleft.lat > topright.lat) ? topleft.lat : topright.lat; } /* Can zoom out more than whole world and so the above can give invalid positions */ /* Restrict values properly so drawing doesn't go into a near 'infinite' loop */ if ( min.lon < -180.0 ) min.lon = -180.0; if ( max.lon > 180.0 ) max.lon = 180.0; if ( min.lat < -90.0 ) min.lat = -90.0; if ( max.lat > 90.0 ) max.lat = 90.0; lon = ((double) ((long) ((min.lon)/ vcl->deg_inc))) * vcl->deg_inc; ll.lon = ll2.lon = lon; for (; ll.lon <= max.lon; ll.lon+=vcl->deg_inc, ll2.lon+=vcl->deg_inc ) { a_coords_latlon_to_utm ( &ll, &utm ); x1 = ( (utm.easting - center->easting) / xmpp ) + (width / 2); a_coords_latlon_to_utm ( &ll2, &utm ); x2 = ( (utm.easting - center->easting) / xmpp ) + (width / 2); vik_viewport_draw_line (vp, vcl->gc, x1, height, x2, 0); } utm = *center; utm.easting = center->easting - ( xmpp * width / 2 ); a_coords_utm_to_latlon ( &utm, &ll ); utm.easting = center->easting + ( xmpp * width / 2 ); a_coords_utm_to_latlon ( &utm, &ll2 ); /* really lat, just reusing a variable */ lon = ((double) ((long) ((min.lat)/ vcl->deg_inc))) * vcl->deg_inc; ll.lat = ll2.lat = lon; for (; ll.lat <= max.lat ; ll.lat+=vcl->deg_inc, ll2.lat+=vcl->deg_inc ) { a_coords_latlon_to_utm ( &ll, &utm ); x1 = (height / 2) - ( (utm.northing - center->northing) / ympp ); a_coords_latlon_to_utm ( &ll2, &utm ); x2 = (height / 2) - ( (utm.northing - center->northing) / ympp ); vik_viewport_draw_line (vp, vcl->gc, width, x2, 0, x1); } } } void vik_coord_layer_free ( VikCoordLayer *vcl ) { if ( vcl->gc != NULL ) g_object_unref ( G_OBJECT(vcl->gc) ); if ( vcl->color != NULL ) gdk_color_free ( vcl->color ); } static void coord_layer_update_gc ( VikCoordLayer *vcl, VikViewport *vp, const gchar *color ) { GdkColor InitColor; if ( vcl->color ) gdk_color_free ( vcl->color ); gdk_color_parse( color, &InitColor); vcl->color = gdk_color_copy( &InitColor ); if ( vcl->gc ) g_object_unref ( G_OBJECT(vcl->gc) ); vcl->gc = vik_viewport_new_gc_from_color ( vp, vcl->color, vcl->line_thickness ); } VikCoordLayer *vik_coord_layer_create ( VikViewport *vp ) { VikCoordLayer *vcl = vik_coord_layer_new (); coord_layer_update_gc ( vcl, vp, "red" ); return vcl; } viking-1.4.2/src/geonamessearch.c0000644000175000017500000004113612175546146013665 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2009, Hein Ragas * Copyright (C) 2013, Rob Norris * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include #include #include #include #include "viking.h" #include "util.h" #include "geonamessearch.h" /* Compatibility */ #if ! GLIB_CHECK_VERSION(2,22,0) #define g_mapped_file_unref g_mapped_file_free #endif /** * See http://www.geonames.org/export/wikipedia-webservice.html#wikipediaBoundingBox */ // Translators may wish to change this setting as appropriate to get Wikipedia articles in that language #define GEONAMES_LANG N_("en") // TODO - offer configuration of this value somewhere // ATM decided it's not essential enough to warrant putting in the preferences #define GEONAMES_MAX_ENTRIES 20 #define GEONAMES_WIKIPEDIA_URL_FMT "http://ws.geonames.org/wikipediaBoundingBoxJSON?formatted=true&north=%s&south=%s&east=%s&west=%s&lang=%s&maxRows=%d" #define GEONAMES_FEATURE_PATTERN "\"feature\": \"" #define GEONAMES_LONGITUDE_PATTERN "\"lng\": " #define GEONAMES_NAME_PATTERN "\"name\": \"" #define GEONAMES_LATITUDE_PATTERN "\"lat\": " #define GEONAMES_ELEVATION_PATTERN "\"elevation\": " #define GEONAMES_TITLE_PATTERN "\"title\": \"" #define GEONAMES_WIKIPEDIAURL_PATTERN "\"wikipediaUrl\": \"" #define GEONAMES_THUMBNAILIMG_PATTERN "\"thumbnailImg\": \"" #define GEONAMES_SEARCH_NOT_FOUND "not understand the location" /* found_geoname: Type to contain data returned from GeoNames.org */ typedef struct { gchar *name; gchar *feature; struct LatLon ll; gdouble elevation; gchar *cmt; gchar *desc; } found_geoname; static found_geoname *new_found_geoname() { found_geoname *ret; ret = (found_geoname *)g_malloc(sizeof(found_geoname)); ret->name = NULL; ret->feature = NULL; ret->cmt = NULL; ret->desc = NULL; ret->ll.lat = 0.0; ret->ll.lon = 0.0; ret->elevation = VIK_DEFAULT_ALTITUDE; return ret; } static found_geoname *copy_found_geoname(found_geoname *src) { found_geoname *dest = new_found_geoname(); dest->name = g_strdup(src->name); dest->feature = g_strdup(src->feature); dest->ll.lat = src->ll.lat; dest->ll.lon = src->ll.lon; dest->elevation = src->elevation; dest->cmt = g_strdup(src->cmt); dest->desc = g_strdup(src->desc); return(dest); } static void free_list_geonames(found_geoname *geoname, gpointer userdata) { g_free(geoname->name); g_free(geoname->feature); g_free(geoname->cmt); g_free(geoname->desc); } static void free_geoname_list(GList *found_places) { g_list_foreach(found_places, (GFunc)free_list_geonames, NULL); g_list_free(found_places); } static void none_found(VikWindow *vw) { GtkWidget *dialog = NULL; dialog = gtk_dialog_new_with_buttons ( "", GTK_WINDOW(vw), 0, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL ); gtk_window_set_title(GTK_WINDOW(dialog), _("Search")); GtkWidget *search_label = gtk_label_new(_("No entries found!")); gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(dialog)->vbox), search_label, FALSE, FALSE, 5 ); gtk_dialog_set_default_response ( GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT ); gtk_widget_show_all(dialog); gtk_dialog_run ( GTK_DIALOG(dialog) ); gtk_widget_destroy(dialog); } static GList *a_select_geoname_from_list(GtkWindow *parent, GList *geonames, gboolean multiple_selection_allowed, const gchar *title, const gchar *msg) { GtkTreeIter iter; GtkCellRenderer *renderer; GtkWidget *view; found_geoname *geoname; gchar *latlon_string; int column_runner; GtkWidget *dialog = gtk_dialog_new_with_buttons (title, parent, GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL); /* When something is selected then OK */ gtk_dialog_set_default_response ( GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT ); GtkWidget *response_w = NULL; #if GTK_CHECK_VERSION (2, 20, 0) /* Default to not apply - as initially nothing is selected! */ response_w = gtk_dialog_get_widget_for_response ( GTK_DIALOG(dialog), GTK_RESPONSE_REJECT ); #endif GtkWidget *label = gtk_label_new ( msg ); GtkTreeStore *store = gtk_tree_store_new(3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING); GList *geoname_runner = geonames; while (geoname_runner) { geoname = (found_geoname *)geoname_runner->data; latlon_string = g_strdup_printf("(%f,%f)", geoname->ll.lat, geoname->ll.lon); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, geoname->name, 1, geoname->feature, 2, latlon_string, -1); geoname_runner = g_list_next(geoname_runner); g_free(latlon_string); } view = gtk_tree_view_new(); renderer = gtk_cell_renderer_text_new(); column_runner = 0; GtkTreeViewColumn *column; // NB could allow columns to be shifted around by doing this after each new // gtk_tree_view_column_set_reorderable ( column, TRUE ); // However I don't think is that useful, so I haven't put it in column = gtk_tree_view_column_new_with_attributes( _("Name"), renderer, "text", column_runner, NULL); gtk_tree_view_column_set_sort_column_id (column, column_runner); gtk_tree_view_append_column (GTK_TREE_VIEW (view), column); column_runner++; column = gtk_tree_view_column_new_with_attributes( _("Feature"), renderer, "text", column_runner, NULL); gtk_tree_view_column_set_sort_column_id (column, column_runner); gtk_tree_view_append_column (GTK_TREE_VIEW (view), column); column_runner++; column = gtk_tree_view_column_new_with_attributes( _("Lat/Lon"), renderer, "text", column_runner, NULL); gtk_tree_view_column_set_sort_column_id (column, column_runner); gtk_tree_view_append_column (GTK_TREE_VIEW (view), column); gtk_tree_view_set_model(GTK_TREE_VIEW(view), GTK_TREE_MODEL(store)); gtk_tree_selection_set_mode( gtk_tree_view_get_selection(GTK_TREE_VIEW(view)), multiple_selection_allowed ? GTK_SELECTION_MULTIPLE : GTK_SELECTION_BROWSE ); g_object_unref(store); GtkWidget *scrolledwindow = gtk_scrolled_window_new ( NULL, NULL ); gtk_scrolled_window_set_policy ( GTK_SCROLLED_WINDOW(scrolledwindow), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC ); gtk_container_add ( GTK_CONTAINER(scrolledwindow), view ); gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), label, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), scrolledwindow, TRUE, TRUE, 0); // Ensure a reasonable number of items are shown, but let the width be automatically sized gtk_widget_set_size_request ( dialog, -1, 400) ; gtk_widget_show_all ( dialog ); if ( response_w ) gtk_widget_grab_focus ( response_w ); while ( gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT ) { GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(view)); GList *selected_geonames = NULL; // Possibily not the fastest method but we don't have thousands of entries to process... if ( gtk_tree_model_get_iter_first( GTK_TREE_MODEL(store), &iter) ) { do { if ( gtk_tree_selection_iter_is_selected ( selection, &iter ) ) { // For every selected item, // compare the name from the displayed view to every geoname entry to find the geoname this selection represents gchar* name; gtk_tree_model_get (GTK_TREE_MODEL(store), &iter, 0, &name, -1 ); // I believe the name of these items to be always unique geoname_runner = geonames; while ( geoname_runner ) { if ( !strcmp ( ((found_geoname*)geoname_runner->data)->name, name ) ) { found_geoname *copied = copy_found_geoname(geoname_runner->data); selected_geonames = g_list_prepend(selected_geonames, copied); break; } geoname_runner = g_list_next(geoname_runner); } } } while ( gtk_tree_model_iter_next ( GTK_TREE_MODEL(store), &iter ) ); } if (selected_geonames) { gtk_widget_destroy ( dialog ); return selected_geonames; } a_dialog_error_msg(parent, _("Nothing was selected")); } gtk_widget_destroy ( dialog ); return NULL; } static GList *get_entries_from_file(gchar *file_name) { gchar *text, *pat; GMappedFile *mf; gsize len; gboolean more = TRUE; gchar lat_buf[32], lon_buf[32], elev_buf[32]; gchar *s; gint fragment_len; GList *found_places = NULL; found_geoname *geoname = NULL; gchar **found_entries; gchar *entry; int entry_runner; gchar *wikipedia_url = NULL; gchar *thumbnail_url = NULL; lat_buf[0] = lon_buf[0] = elev_buf[0] = '\0'; if ((mf = g_mapped_file_new(file_name, FALSE, NULL)) == NULL) { g_critical(_("couldn't map temp file")); return NULL; } len = g_mapped_file_get_length(mf); text = g_mapped_file_get_contents(mf); if (g_strstr_len(text, len, GEONAMES_SEARCH_NOT_FOUND) != NULL) { more = FALSE; } found_entries = g_strsplit(text, "},", 0); entry_runner = 0; entry = found_entries[entry_runner]; while (entry) { more = TRUE; geoname = new_found_geoname(); if ((pat = g_strstr_len(entry, strlen(entry), GEONAMES_FEATURE_PATTERN))) { pat += strlen(GEONAMES_FEATURE_PATTERN); fragment_len = 0; s = pat; while (*pat != '"') { fragment_len++; pat++; } geoname->feature = g_strndup(s, fragment_len); } if ((pat = g_strstr_len(entry, strlen(entry), GEONAMES_LONGITUDE_PATTERN)) == NULL) { more = FALSE; } else { pat += strlen(GEONAMES_LONGITUDE_PATTERN); s = lon_buf; if (*pat == '-') *s++ = *pat++; while ((s < (lon_buf + sizeof(lon_buf))) && (pat < (text + len)) && (g_ascii_isdigit(*pat) || (*pat == '.'))) *s++ = *pat++; *s = '\0'; if ((pat >= (text + len)) || (lon_buf[0] == '\0')) { more = FALSE; } geoname->ll.lon = g_ascii_strtod(lon_buf, NULL); } if ((pat = g_strstr_len(entry, strlen(entry), GEONAMES_ELEVATION_PATTERN))) { pat += strlen(GEONAMES_ELEVATION_PATTERN); s = elev_buf; if (*pat == '-') *s++ = *pat++; while ((s < (elev_buf + sizeof(elev_buf))) && (pat < (text + len)) && (g_ascii_isdigit(*pat) || (*pat == '.'))) *s++ = *pat++; *s = '\0'; geoname->elevation = g_ascii_strtod(elev_buf, NULL); } if ((pat = g_strstr_len(entry, strlen(entry), GEONAMES_NAME_PATTERN))) { pat += strlen(GEONAMES_NAME_PATTERN); fragment_len = 0; s = pat; while (*pat != '"') { fragment_len++; pat++; } geoname -> name = g_strndup(s, fragment_len); } if ((pat = g_strstr_len(entry, strlen(entry), GEONAMES_TITLE_PATTERN))) { pat += strlen(GEONAMES_TITLE_PATTERN); fragment_len = 0; s = pat; while (*pat != '"') { fragment_len++; pat++; } geoname -> name = g_strndup(s, fragment_len); } if ((pat = g_strstr_len(entry, strlen(entry), GEONAMES_WIKIPEDIAURL_PATTERN))) { pat += strlen(GEONAMES_WIKIPEDIAURL_PATTERN); fragment_len = 0; s = pat; while (*pat != '"') { fragment_len++; pat++; } wikipedia_url = g_strndup(s, fragment_len); } if ((pat = g_strstr_len(entry, strlen(entry), GEONAMES_THUMBNAILIMG_PATTERN))) { pat += strlen(GEONAMES_THUMBNAILIMG_PATTERN); fragment_len = 0; s = pat; while (*pat != '"') { fragment_len++; pat++; } thumbnail_url = g_strndup(s, fragment_len); } if ((pat = g_strstr_len(entry, strlen(entry), GEONAMES_LATITUDE_PATTERN)) == NULL) { more = FALSE; } else { pat += strlen(GEONAMES_LATITUDE_PATTERN); s = lat_buf; if (*pat == '-') *s++ = *pat++; while ((s < (lat_buf + sizeof(lat_buf))) && (pat < (text + len)) && (g_ascii_isdigit(*pat) || (*pat == '.'))) *s++ = *pat++; *s = '\0'; if ((pat >= (text + len)) || (lat_buf[0] == '\0')) { more = FALSE; } geoname->ll.lat = g_ascii_strtod(lat_buf, NULL); } if (!more) { if (geoname) { g_free(geoname); } } else { if (wikipedia_url) { // Really we should support the GPX URL tag and then put that in there... geoname->cmt = g_strdup_printf("http://%s", wikipedia_url); if (thumbnail_url) { geoname -> desc = g_strdup_printf("", wikipedia_url, thumbnail_url); } else { geoname -> desc = g_strdup_printf("%s", wikipedia_url, geoname->name); } } if (wikipedia_url) { g_free(wikipedia_url); wikipedia_url = NULL; } if (thumbnail_url) { g_free(thumbnail_url); thumbnail_url = NULL; } found_places = g_list_prepend(found_places, geoname); } entry_runner++; entry = found_entries[entry_runner]; } g_strfreev(found_entries); found_places = g_list_reverse(found_places); g_mapped_file_unref(mf); return(found_places); } void a_geonames_wikipedia_box ( VikWindow *vw, VikTrwLayer *vtl, struct LatLon maxmin[2] ) { gchar *uri; gchar *tmpname; GList *wiki_places; GList *selected; GList *wp_runner; VikWaypoint *wiki_wp; found_geoname *wiki_geoname; /* encode doubles in a C locale */ gchar *north = a_coords_dtostr(maxmin[0].lat); gchar *south = a_coords_dtostr(maxmin[1].lat); gchar *east = a_coords_dtostr(maxmin[0].lon); gchar *west = a_coords_dtostr(maxmin[1].lon); uri = g_strdup_printf ( GEONAMES_WIKIPEDIA_URL_FMT, north, south, east, west, GEONAMES_LANG, GEONAMES_MAX_ENTRIES ); g_free(north); north = NULL; g_free(south); south = NULL; g_free(east); east = NULL; g_free(west); west = NULL; tmpname = a_download_uri_to_tmp_file ( uri, NULL ); if (!tmpname) { none_found(vw); return; } wiki_places = get_entries_from_file(tmpname); if (g_list_length(wiki_places) == 0) { none_found(vw); return; } selected = a_select_geoname_from_list(VIK_GTK_WINDOW_FROM_WIDGET(vw), wiki_places, TRUE, "Select articles", "Select the articles you want to add."); wp_runner = selected; while (wp_runner) { wiki_geoname = (found_geoname *)wp_runner->data; wiki_wp = vik_waypoint_new(); wiki_wp->visible = TRUE; vik_coord_load_from_latlon(&(wiki_wp->coord), vik_trw_layer_get_coord_mode ( vtl ), &(wiki_geoname->ll)); wiki_wp->altitude = wiki_geoname->elevation; vik_waypoint_set_comment(wiki_wp, wiki_geoname->cmt); vik_waypoint_set_description(wiki_wp, wiki_geoname->desc); // Use the featue type to generate a suitable waypoint icon // http://www.geonames.org/wikipedia/wikipedia_features.html // Only a few values supported as only a few symbols make sense if ( wiki_geoname->feature ) { if ( !strcmp (wiki_geoname->feature, "city") ) vik_waypoint_set_symbol(wiki_wp, "city (medium)"); if ( !strcmp (wiki_geoname->feature, "edu") ) vik_waypoint_set_symbol(wiki_wp, "school"); if ( !strcmp (wiki_geoname->feature, "airport") ) vik_waypoint_set_symbol(wiki_wp, "airport"); if ( !strcmp (wiki_geoname->feature, "mountain") ) vik_waypoint_set_symbol(wiki_wp, "summit"); if ( !strcmp (wiki_geoname->feature, "forest") ) vik_waypoint_set_symbol(wiki_wp, "forest"); } vik_trw_layer_filein_add_waypoint ( vtl, wiki_geoname->name, wiki_wp ); wp_runner = g_list_next(wp_runner); } free_geoname_list(wiki_places); free_geoname_list(selected); g_free(uri); if (tmpname) { g_remove(tmpname); g_free(tmpname); } } viking-1.4.2/src/bluemarble.c0000644000175000017500000000333112120725153012771 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * Copyright (C) 2008, Guilhem Bonnefille * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "bluemarble.h" #include "vikmapslayer.h" #include "vikslippymapsource.h" /* initialisation */ void bluemarble_init () { VikMapSource *bluemarble_type = VIK_MAP_SOURCE(g_object_new(VIK_TYPE_SLIPPY_MAP_SOURCE, "id", 15, "label", "BlueMarble", "hostname", "s3.amazonaws.com", "url", "/com.modestmaps.bluemarble/%d-r%3$d-c%2$d.jpg", "copyright", "© NASA's Earth Observatory", "license", "NASA Terms of Use", "license-url", "http://visibleearth.nasa.gov/useterms.php", NULL)); /* Credit/Copyright from: http://earthobservatory.nasa.gov/Features/BlueMarble/ */ /* BlueMarble image hosting is courtesy of the Modest Maps project: http://modestmaps.com/ */ maps_layer_register_map_source (bluemarble_type); } viking-1.4.2/src/viktrwlayer_tpwin.c0000644000175000017500000003737612175546146014520 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include "coords.h" #include "vikcoord.h" #include "viktrack.h" #include "viktrwlayer_tpwin.h" #include "vikwaypoint.h" #include "dialog.h" #include "globals.h" struct _VikTrwLayerTpwin { GtkDialog parent; GtkSpinButton *lat, *lon, *alt; GtkLabel *track_name, *ts, *localtime, *diff_dist, *diff_time, *diff_speed, *hdop, *vdop, *pdop, *sat; // Previously these buttons were in a glist, however I think the ordering behaviour is implicit // thus control manually to ensure operating on the correct button GtkWidget *button_close; GtkWidget *button_delete; GtkWidget *button_insert; GtkWidget *button_split; GtkWidget *button_back; GtkWidget *button_forward; VikTrackpoint *cur_tp; gboolean sync_to_tp_block; }; GType vik_trw_layer_tpwin_get_type (void) { static GType tpwin_type = 0; if (!tpwin_type) { static const GTypeInfo tpwin_info = { sizeof (VikTrwLayerTpwinClass), NULL, /* base_init */ NULL, /* base_finalize */ NULL, /* class init */ NULL, /* class_finalize */ NULL, /* class_data */ sizeof (VikTrwLayerTpwin), 0, NULL /* instance init */ }; tpwin_type = g_type_register_static ( GTK_TYPE_DIALOG, "VikTrwLayerTpwin", &tpwin_info, 0 ); } return tpwin_type; } static void tpwin_sync_ll_to_tp ( VikTrwLayerTpwin *tpwin ) { if ( tpwin->cur_tp && (!tpwin->sync_to_tp_block) ) { struct LatLon ll; VikCoord coord; ll.lat = gtk_spin_button_get_value ( tpwin->lat ); ll.lon = gtk_spin_button_get_value ( tpwin->lon ); vik_coord_load_from_latlon ( &coord, tpwin->cur_tp->coord.mode, &ll ); /* don't redraw unless we really have to */ if ( vik_coord_diff(&(tpwin->cur_tp->coord), &coord) > 0.05 ) /* may not be exact due to rounding */ { tpwin->cur_tp->coord = coord; gtk_dialog_response ( GTK_DIALOG(tpwin), VIK_TRW_LAYER_TPWIN_DATA_CHANGED ); } } } static void tpwin_sync_alt_to_tp ( VikTrwLayerTpwin *tpwin ) { if ( tpwin->cur_tp && (!tpwin->sync_to_tp_block) ) { // Always store internally in metres vik_units_height_t height_units = a_vik_get_units_height (); switch (height_units) { case VIK_UNITS_HEIGHT_METRES: tpwin->cur_tp->altitude = gtk_spin_button_get_value ( tpwin->alt ); break; case VIK_UNITS_HEIGHT_FEET: tpwin->cur_tp->altitude = VIK_FEET_TO_METERS(gtk_spin_button_get_value ( tpwin->alt )); break; default: tpwin->cur_tp->altitude = gtk_spin_button_get_value ( tpwin->alt ); g_critical("Houston, we've had a problem. height=%d", height_units); } } } VikTrwLayerTpwin *vik_trw_layer_tpwin_new ( GtkWindow *parent ) { static gchar *left_label_texts[] = { N_("Part of Track:"), N_("Latitude:"), N_("Longitude:"), N_("Altitude:"), N_("Timestamp:"), N_("Time:") }; static gchar *right_label_texts[] = { N_("Distance Difference:"), N_("Time Difference:"), N_("\"Speed\" Between:"), N_("VDOP:"), N_("HDOP:"), N_("PDOP:"), N_("SAT/FIX:") }; VikTrwLayerTpwin *tpwin = VIK_TRW_LAYER_TPWIN ( g_object_new ( VIK_TRW_LAYER_TPWIN_TYPE, NULL ) ); GtkWidget *main_hbox, *left_vbox, *right_vbox; GtkWidget *diff_left_vbox, *diff_right_vbox; gtk_window_set_transient_for ( GTK_WINDOW(tpwin), parent ); gtk_window_set_title ( GTK_WINDOW(tpwin), _("Trackpoint") ); tpwin->button_close = gtk_dialog_add_button ( GTK_DIALOG(tpwin), GTK_STOCK_CLOSE, VIK_TRW_LAYER_TPWIN_CLOSE); tpwin->button_insert = gtk_dialog_add_button ( GTK_DIALOG(tpwin), _("_Insert After"), VIK_TRW_LAYER_TPWIN_INSERT); tpwin->button_delete = gtk_dialog_add_button ( GTK_DIALOG(tpwin), GTK_STOCK_DELETE, VIK_TRW_LAYER_TPWIN_DELETE); tpwin->button_split = gtk_dialog_add_button ( GTK_DIALOG(tpwin), _("Split Here"), VIK_TRW_LAYER_TPWIN_SPLIT); tpwin->button_back = gtk_dialog_add_button ( GTK_DIALOG(tpwin), GTK_STOCK_GO_BACK, VIK_TRW_LAYER_TPWIN_BACK); tpwin->button_forward = gtk_dialog_add_button ( GTK_DIALOG(tpwin), GTK_STOCK_GO_FORWARD, VIK_TRW_LAYER_TPWIN_FORWARD); /* gtk_dialog_add_buttons ( GTK_DIALOG(tpwin), GTK_STOCK_CLOSE, VIK_TRW_LAYER_TPWIN_CLOSE, _("_Insert After"), VIK_TRW_LAYER_TPWIN_INSERT, GTK_STOCK_DELETE, VIK_TRW_LAYER_TPWIN_DELETE, _("Split Here"), VIK_TRW_LAYER_TPWIN_SPLIT, GTK_STOCK_GO_BACK, VIK_TRW_LAYER_TPWIN_BACK, GTK_STOCK_GO_FORWARD, VIK_TRW_LAYER_TPWIN_FORWARD, NULL ); tpwin->buttons = gtk_container_get_children(GTK_CONTAINER(GTK_DIALOG(tpwin)->action_area)); */ /* main track info */ left_vbox = a_dialog_create_label_vbox ( left_label_texts, sizeof(left_label_texts) / sizeof(left_label_texts[0]) ); tpwin->track_name = GTK_LABEL(gtk_label_new(NULL)); tpwin->ts = GTK_LABEL(gtk_label_new(NULL)); tpwin->localtime = GTK_LABEL(gtk_label_new(NULL)); tpwin->lat = GTK_SPIN_BUTTON(gtk_spin_button_new( GTK_ADJUSTMENT(gtk_adjustment_new ( 0, -90, 90, 0.00005, 0.01, 0 )), 0.00005, 6)); tpwin->lon = GTK_SPIN_BUTTON(gtk_spin_button_new( GTK_ADJUSTMENT(gtk_adjustment_new ( 0, -180, 180, 0.00005, 0.01, 0 )), 0.00005, 6)); g_signal_connect_swapped ( G_OBJECT(tpwin->lat), "value-changed", G_CALLBACK(tpwin_sync_ll_to_tp), tpwin ); g_signal_connect_swapped ( G_OBJECT(tpwin->lon), "value-changed", G_CALLBACK(tpwin_sync_ll_to_tp), tpwin ); tpwin->alt = GTK_SPIN_BUTTON(gtk_spin_button_new( GTK_ADJUSTMENT(gtk_adjustment_new ( 0, -1000, 25000, 10, 100, 0 )), 10, 2)); g_signal_connect_swapped ( G_OBJECT(tpwin->alt), "value-changed", G_CALLBACK(tpwin_sync_alt_to_tp), tpwin ); right_vbox = gtk_vbox_new ( FALSE, 3 ); gtk_box_pack_start ( GTK_BOX(right_vbox), GTK_WIDGET(tpwin->track_name), FALSE, FALSE, 5 ); gtk_box_pack_start ( GTK_BOX(right_vbox), GTK_WIDGET(tpwin->lat), FALSE, FALSE, 5 ); gtk_box_pack_start ( GTK_BOX(right_vbox), GTK_WIDGET(tpwin->lon), FALSE, FALSE, 5 ); gtk_box_pack_start ( GTK_BOX(right_vbox), GTK_WIDGET(tpwin->alt), FALSE, FALSE, 5 ); gtk_box_pack_start ( GTK_BOX(right_vbox), GTK_WIDGET(tpwin->ts), FALSE, FALSE, 5 ); gtk_box_pack_start ( GTK_BOX(right_vbox), GTK_WIDGET(tpwin->localtime), FALSE, FALSE, 5 ); /* diff info */ diff_left_vbox = a_dialog_create_label_vbox ( right_label_texts, sizeof(right_label_texts) / sizeof(right_label_texts[0]) ); tpwin->diff_dist = GTK_LABEL(gtk_label_new(NULL)); tpwin->diff_time = GTK_LABEL(gtk_label_new(NULL)); tpwin->diff_speed = GTK_LABEL(gtk_label_new(NULL)); tpwin->vdop = GTK_LABEL(gtk_label_new(NULL)); tpwin->hdop = GTK_LABEL(gtk_label_new(NULL)); tpwin->pdop = GTK_LABEL(gtk_label_new(NULL)); tpwin->sat = GTK_LABEL(gtk_label_new(NULL)); diff_right_vbox = gtk_vbox_new ( FALSE, 3 ); gtk_box_pack_start ( GTK_BOX(diff_right_vbox), GTK_WIDGET(tpwin->diff_dist), FALSE, FALSE, 5 ); gtk_box_pack_start ( GTK_BOX(diff_right_vbox), GTK_WIDGET(tpwin->diff_time), FALSE, FALSE, 5 ); gtk_box_pack_start ( GTK_BOX(diff_right_vbox), GTK_WIDGET(tpwin->diff_speed), FALSE, FALSE, 5 ); gtk_box_pack_start ( GTK_BOX(diff_right_vbox), GTK_WIDGET(tpwin->vdop), FALSE, FALSE, 5 ); gtk_box_pack_start ( GTK_BOX(diff_right_vbox), GTK_WIDGET(tpwin->hdop), FALSE, FALSE, 5 ); gtk_box_pack_start ( GTK_BOX(diff_right_vbox), GTK_WIDGET(tpwin->pdop), FALSE, FALSE, 5 ); gtk_box_pack_start ( GTK_BOX(diff_right_vbox), GTK_WIDGET(tpwin->sat), FALSE, FALSE, 5 ); main_hbox = gtk_hbox_new( FALSE, 0 ); gtk_box_pack_start ( GTK_BOX(main_hbox), left_vbox, TRUE, TRUE, 0 ); gtk_box_pack_start ( GTK_BOX(main_hbox), right_vbox, TRUE, TRUE, 0 ); gtk_box_pack_start ( GTK_BOX(main_hbox), diff_left_vbox, TRUE, TRUE, 0 ); gtk_box_pack_start ( GTK_BOX(main_hbox), diff_right_vbox, TRUE, TRUE, 0 ); gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(tpwin)->vbox), main_hbox, FALSE, FALSE, 0 ); tpwin->cur_tp = NULL; return tpwin; } void vik_trw_layer_tpwin_set_empty ( VikTrwLayerTpwin *tpwin ) { gtk_label_set_text ( tpwin->track_name, NULL ); gtk_label_set_text ( tpwin->ts, NULL ); gtk_label_set_text ( tpwin->localtime, NULL ); gtk_widget_set_sensitive ( GTK_WIDGET(tpwin->lat), FALSE ); gtk_widget_set_sensitive ( GTK_WIDGET(tpwin->lon), FALSE ); gtk_widget_set_sensitive ( GTK_WIDGET(tpwin->alt), FALSE ); // Only keep close button enabled gtk_widget_set_sensitive ( tpwin->button_insert, FALSE ); gtk_widget_set_sensitive ( tpwin->button_split, FALSE ); gtk_widget_set_sensitive ( tpwin->button_delete, FALSE ); gtk_widget_set_sensitive ( tpwin->button_back, FALSE ); gtk_widget_set_sensitive ( tpwin->button_forward, FALSE ); gtk_label_set_text ( tpwin->diff_dist, NULL ); gtk_label_set_text ( tpwin->diff_time, NULL ); gtk_label_set_text ( tpwin->diff_speed, NULL ); gtk_label_set_text ( tpwin->vdop, NULL ); gtk_label_set_text ( tpwin->hdop, NULL ); gtk_label_set_text ( tpwin->pdop, NULL ); gtk_label_set_text ( tpwin->sat, NULL ); } void vik_trw_layer_tpwin_set_tp ( VikTrwLayerTpwin *tpwin, GList *tpl, gchar *track_name ) { static char tmp_str[25]; static struct LatLon ll; VikTrackpoint *tp = VIK_TRACKPOINT(tpl->data); /* Only can insert if not at the end (otherwise use extend track) */ gtk_widget_set_sensitive ( tpwin->button_insert, (gboolean) GPOINTER_TO_INT (tpl->next) ); gtk_widget_set_sensitive ( tpwin->button_delete, TRUE ); /* We can only split up a track if it's not an endpoint. Makes sense to me. */ gtk_widget_set_sensitive ( tpwin->button_split, tpl->next && tpl->prev ); gtk_widget_set_sensitive ( tpwin->button_forward, (gboolean) GPOINTER_TO_INT (tpl->next) ); gtk_widget_set_sensitive ( tpwin->button_back, (gboolean) GPOINTER_TO_INT (tpl->prev) ); gtk_widget_set_sensitive ( GTK_WIDGET(tpwin->lat), TRUE ); gtk_widget_set_sensitive ( GTK_WIDGET(tpwin->lon), TRUE ); gtk_widget_set_sensitive ( GTK_WIDGET(tpwin->alt), TRUE ); gtk_label_set_text ( tpwin->track_name, track_name ); tpwin->sync_to_tp_block = TRUE; /* don't update while setting data. */ vik_coord_to_latlon ( &(tp->coord), &ll ); gtk_spin_button_set_value ( tpwin->lat, ll.lat ); gtk_spin_button_set_value ( tpwin->lon, ll.lon ); vik_units_height_t height_units = a_vik_get_units_height (); switch (height_units) { case VIK_UNITS_HEIGHT_METRES: gtk_spin_button_set_value ( tpwin->alt, tp->altitude ); break; case VIK_UNITS_HEIGHT_FEET: gtk_spin_button_set_value ( tpwin->alt, VIK_METERS_TO_FEET(tp->altitude) ); break; default: gtk_spin_button_set_value ( tpwin->alt, tp->altitude ); g_critical("Houston, we've had a problem. height=%d", height_units); } tpwin->sync_to_tp_block = FALSE; /* don't update whlie setting data. */ if ( tp->has_timestamp ) { g_snprintf ( tmp_str, sizeof(tmp_str), "%ld", tp->timestamp ); gtk_label_set_text ( tpwin->ts, tmp_str ); g_snprintf ( tmp_str, MIN(25,sizeof(tmp_str)), "%s", ctime(&(tp->timestamp)) ); /* max. len of 25 will snip off newline, which is good since it messes stuff up */ gtk_label_set_text ( tpwin->localtime, tmp_str ); } else { gtk_label_set_text (tpwin->ts, NULL ); gtk_label_set_text (tpwin->localtime, NULL ); } vik_units_distance_t dist_units = a_vik_get_units_distance (); if ( tpwin->cur_tp ) { switch (dist_units) { case VIK_UNITS_DISTANCE_KILOMETRES: g_snprintf ( tmp_str, sizeof(tmp_str), "%.2f m", vik_coord_diff(&(tp->coord), &(tpwin->cur_tp->coord))); break; case VIK_UNITS_DISTANCE_MILES: g_snprintf ( tmp_str, sizeof(tmp_str), "%.2f yards", vik_coord_diff(&(tp->coord), &(tpwin->cur_tp->coord))*1.0936133); break; default: g_critical("Houston, we've had a problem. distance=%d", dist_units); } gtk_label_set_text ( tpwin->diff_dist, tmp_str ); if ( tp->has_timestamp && tpwin->cur_tp->has_timestamp ) { g_snprintf ( tmp_str, sizeof(tmp_str), "%ld s", tp->timestamp - tpwin->cur_tp->timestamp); gtk_label_set_text ( tpwin->diff_time, tmp_str ); if ( tp->timestamp == tpwin->cur_tp->timestamp ) gtk_label_set_text ( tpwin->diff_speed, "--" ); else { vik_units_speed_t speed_units = a_vik_get_units_speed (); switch (speed_units) { case VIK_UNITS_SPEED_KILOMETRES_PER_HOUR: g_snprintf ( tmp_str, sizeof(tmp_str), "%.2f km/h", VIK_MPS_TO_KPH(vik_coord_diff(&(tp->coord), &(tpwin->cur_tp->coord)) / (ABS(tp->timestamp - tpwin->cur_tp->timestamp))) ); break; case VIK_UNITS_SPEED_MILES_PER_HOUR: g_snprintf ( tmp_str, sizeof(tmp_str), "%.2f mph", VIK_MPS_TO_MPH(vik_coord_diff(&(tp->coord), &(tpwin->cur_tp->coord)) / (ABS(tp->timestamp - tpwin->cur_tp->timestamp))) ); break; case VIK_UNITS_SPEED_METRES_PER_SECOND: g_snprintf ( tmp_str, sizeof(tmp_str), "%.2f m/s", vik_coord_diff(&(tp->coord), &(tpwin->cur_tp->coord)) / ABS(tp->timestamp - tpwin->cur_tp->timestamp) ); break; case VIK_UNITS_SPEED_KNOTS: g_snprintf ( tmp_str, sizeof(tmp_str), "%.2f knots", VIK_MPS_TO_KNOTS(vik_coord_diff(&(tp->coord), &(tpwin->cur_tp->coord)) / (ABS(tp->timestamp - tpwin->cur_tp->timestamp))) ); break; default: g_snprintf ( tmp_str, sizeof(tmp_str), "--" ); g_critical("Houston, we've had a problem. speed=%d", speed_units); } gtk_label_set_text ( tpwin->diff_speed, tmp_str ); } } else { gtk_label_set_text ( tpwin->diff_time, NULL ); gtk_label_set_text ( tpwin->diff_speed, NULL ); } } switch (dist_units) { case VIK_UNITS_DISTANCE_KILOMETRES: g_snprintf ( tmp_str, sizeof(tmp_str), "%.5f m", tp->hdop ); gtk_label_set_text ( tpwin->hdop, tmp_str ); g_snprintf ( tmp_str, sizeof(tmp_str), "%.5f m", tp->pdop ); gtk_label_set_text ( tpwin->pdop, tmp_str ); break; case VIK_UNITS_DISTANCE_MILES: g_snprintf ( tmp_str, sizeof(tmp_str), "%.5f yards", tp->hdop*1.0936133 ); gtk_label_set_text ( tpwin->hdop, tmp_str ); g_snprintf ( tmp_str, sizeof(tmp_str), "%.5f yards", tp->pdop*1.0936133 ); gtk_label_set_text ( tpwin->pdop, tmp_str ); break; default: g_critical("Houston, we've had a problem. distance=%d", dist_units); } switch (height_units) { case VIK_UNITS_HEIGHT_METRES: g_snprintf ( tmp_str, sizeof(tmp_str), "%.5f m", tp->vdop ); break; case VIK_UNITS_HEIGHT_FEET: g_snprintf ( tmp_str, sizeof(tmp_str), "%.5f feet", VIK_METERS_TO_FEET(tp->vdop) ); break; default: g_snprintf ( tmp_str, sizeof(tmp_str), "--" ); g_critical("Houston, we've had a problem. height=%d", height_units); } gtk_label_set_text ( tpwin->vdop, tmp_str ); g_snprintf ( tmp_str, sizeof(tmp_str), "%d / %d", tp->nsats, tp->fix_mode ); gtk_label_set_text ( tpwin->sat, tmp_str ); tpwin->cur_tp = tp; } void vik_trw_layer_tpwin_set_track_name ( VikTrwLayerTpwin *tpwin, const gchar *track_name ) { gtk_label_set_text ( tpwin->track_name, track_name ); } viking-1.4.2/src/menu.xml.h0000644000175000017500000001103112175546146012440 00000000000000#ifndef __VIKING_MENU_XML_H #define __VIKING_MENU_XML_H static const char *menu_xml = "" " " " " " " " " " " " " " " " " " " " " " " " " #ifdef VIK_CONFIG_GOOGLE " " #endif #ifdef VIK_CONFIG_OPENSTREETMAP " " " " #endif #ifdef VIK_CONFIG_GEOCACHES " " #endif #ifdef VIK_CONFIG_GEOTAG " " #endif #ifdef VIK_CONFIG_GEONAMES " " #endif " " " " " " " " #if GTK_CHECK_VERSION(2,10,0) " " #endif " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " #ifdef VIK_CONFIG_EXPEDIA " " #endif " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " #if GTK_CHECK_VERSION(2,10,0) " " #endif " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " "" ; #endif viking-1.4.2/src/download.h0000644000175000017500000000540612172046434012505 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * Copyright (C) 2007, Guilhem Bonnefille * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef _VIKING_DOWNLOAD_H #define _VIKING_DOWNLOAD_H #include G_BEGIN_DECLS /* File content check */ typedef gboolean (*VikFileContentCheckerFunc) (FILE*); gboolean a_check_map_file(FILE*); gboolean a_check_html_file(FILE*); gboolean a_check_kml_file(FILE*); typedef struct { /** * Check if the server has a more recent file than the one we have before downloading it * This uses http header If-Modified-Since */ gboolean check_file_server_time; /** * Set if the server handle ETag */ gboolean use_etag; /** * The REFERER string to use. * Could be NULL. */ gchar *referer; /** * follow_location specifies the number of retries * to follow a redirect while downloading a page. */ glong follow_location; /** * File content checker. */ VikFileContentCheckerFunc check_file; /** * If need to authenticate on download * format: 'username:password' */ gchar *user_pass; } DownloadMapOptions; typedef struct { /** * Time sent to server on header If-Modified-Since */ time_t time_condition; /** * Etag sent by server on previous download */ char *etag; /** * Etag sent by server on this download */ char *new_etag; } DownloadFileOptions; void a_download_init(void); /* TODO: convert to Glib */ int a_http_download_get_url ( const char *hostname, const char *uri, const char *fn, DownloadMapOptions *opt, void *handle ); int a_ftp_download_get_url ( const char *hostname, const char *uri, const char *fn, DownloadMapOptions *opt, void *handle ); void *a_download_handle_init (); void a_download_handle_cleanup ( void *handle ); gchar *a_download_uri_to_tmp_file ( const gchar *uri, DownloadMapOptions *options ); /* Error messages returned by download functions */ enum { DOWNLOAD_NO_ERROR = 0, DOWNLOAD_NO_NEWER_FILE, DOWNLOAD_ERROR }; G_END_DECLS #endif viking-1.4.2/src/geonames.c0000644000175000017500000000265012024715566012472 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2009, Guilhem Bonnefille * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include "geonames.h" #include "vikgotoxmltool.h" #include "vikgoto.h" /* initialisation */ void geonames_init () { // Goto VikGotoXmlTool *geonames = VIK_GOTO_XML_TOOL ( g_object_new ( VIK_GOTO_XML_TOOL_TYPE, "label", "Geonames", "url-format", "http://ws.geonames.org/search?q=%s&maxRows=1&lang=es&style=short", "lat-path", "/geonames/geoname/lat", "lon-path", "/geonames/geoname/lng", NULL ) ); vik_goto_register ( VIK_GOTO_TOOL ( geonames ) ); g_object_unref ( geonames ); } viking-1.4.2/src/vikmapslayer.h0000644000175000017500000000424312175546146013413 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef _VIKING_MAPSLAYER_H #define _VIKING_MAPSLAYER_H #include "vikcoord.h" #include "viklayer.h" #include "vikviewport.h" #include "vikmapsource.h" #include "mapcoord.h" #include "vikmapslayer_compat.h" G_BEGIN_DECLS #define VIK_MAPS_LAYER_TYPE (vik_maps_layer_get_type ()) #define VIK_MAPS_LAYER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIK_MAPS_LAYER_TYPE, VikMapsLayer)) #define VIK_MAPS_LAYER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VIK_MAPS_LAYER_TYPE, VikMapsLayerClass)) #define IS_VIK_MAPS_LAYER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIK_MAPS_LAYER_TYPE)) #define IS_VIK_MAPS_LAYER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VIK_MAPS_LAYER_TYPE)) typedef struct _VikMapsLayerClass VikMapsLayerClass; struct _VikMapsLayerClass { VikLayerClass object_class; }; GType vik_maps_layer_get_type (); typedef struct _VikMapsLayer VikMapsLayer; void maps_layer_init (); void maps_layer_register_map_source ( VikMapSource *map ); void maps_layer_download_section ( VikMapsLayer *vml, VikViewport *vvp, VikCoord *ul, VikCoord *br, gdouble zoom); gint vik_maps_layer_get_map_type(VikMapsLayer *vml); gchar *vik_maps_layer_get_map_label(VikMapsLayer *vml); gchar *maps_layer_default_dir (); void vik_maps_layer_download ( VikMapsLayer *vml, VikViewport *vvp, gboolean only_new ); G_END_DECLS #endif viking-1.4.2/src/dir.h0000644000175000017500000000211412175546146011455 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * Copyright (C) 2012, Guilhem Bonnefille * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef _VIKING_DIR_H #define _VIKING_DIR_H #include const gchar *a_get_viking_dir(); gchar ** a_get_viking_data_path(); gchar *a_get_viking_data_home(); #endif viking-1.4.2/src/vikgeoreflayer.c0000644000175000017500000006151612175546146013723 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "viking.h" #include #include #include #include #include #include #include "icons/icons.h" VikLayerParam georef_layer_params[] = { { "image", VIK_LAYER_PARAM_STRING, VIK_LAYER_NOT_IN_PROPERTIES, NULL, 0, NULL, NULL, }, { "corner_easting", VIK_LAYER_PARAM_DOUBLE, VIK_LAYER_NOT_IN_PROPERTIES, NULL, 0, NULL, NULL, NULL }, { "corner_northing", VIK_LAYER_PARAM_DOUBLE, VIK_LAYER_NOT_IN_PROPERTIES, NULL, 0, NULL, NULL, NULL }, { "mpp_easting", VIK_LAYER_PARAM_DOUBLE, VIK_LAYER_NOT_IN_PROPERTIES, NULL, 0, NULL, NULL, NULL }, { "mpp_northing", VIK_LAYER_PARAM_DOUBLE, VIK_LAYER_NOT_IN_PROPERTIES, NULL, 0, NULL, NULL, NULL }, }; enum { PARAM_IMAGE = 0, PARAM_CE, PARAM_CN, PARAM_ME, PARAM_MN, NUM_PARAMS }; static const gchar* georef_layer_tooltip ( VikGeorefLayer *vgl ); static void georef_layer_marshall( VikGeorefLayer *vgl, guint8 **data, gint *len ); static VikGeorefLayer *georef_layer_unmarshall( guint8 *data, gint len, VikViewport *vvp ); static gboolean georef_layer_set_param ( VikGeorefLayer *vgl, guint16 id, VikLayerParamData data, VikViewport *vp, gboolean is_file_operation ); static VikLayerParamData georef_layer_get_param ( VikGeorefLayer *vgl, guint16 id, gboolean is_file_operation ); VikGeorefLayer *georef_layer_new ( ); VikGeorefLayer *georef_layer_create ( VikViewport *vp ); static void georef_layer_free ( VikGeorefLayer *vgl ); gboolean georef_layer_properties ( VikGeorefLayer *vgl, gpointer vp ); static void georef_layer_draw ( VikGeorefLayer *vgl, gpointer data ); static void georef_layer_add_menu_items ( VikGeorefLayer *vgl, GtkMenu *menu, gpointer vlp ); static void georef_layer_set_image ( VikGeorefLayer *vgl, const gchar *image ); static gboolean georef_layer_dialog ( VikGeorefLayer **vgl, gpointer vp, GtkWindow *w ); static void georef_layer_load_image ( VikGeorefLayer *vgl ); /* tools */ static gpointer georef_layer_move_create ( VikWindow *vw, VikViewport *vvp); static gboolean georef_layer_move_release ( VikGeorefLayer *vgl, GdkEventButton *event, VikViewport *vvp ); static gboolean georef_layer_move_press ( VikGeorefLayer *vgl, GdkEventButton *event, VikViewport *vvp ); static gpointer georef_layer_zoom_create ( VikWindow *vw, VikViewport *vvp); static gboolean georef_layer_zoom_press ( VikGeorefLayer *vgl, GdkEventButton *event, VikViewport *vvp ); // See comment in viktrwlayer.c for advice on values used static VikToolInterface georef_tools[] = { { { "GeorefMoveMap", "vik-icon-Georef Move Map", N_("_Georef Move Map"), NULL, N_("Georef Move Map"), 0 }, (VikToolConstructorFunc) georef_layer_move_create, NULL, NULL, NULL, (VikToolMouseFunc) georef_layer_move_press, NULL, (VikToolMouseFunc) georef_layer_move_release, (VikToolKeyFunc) NULL, FALSE, GDK_CURSOR_IS_PIXMAP, &cursor_geomove_pixbuf }, { { "GeorefZoomTool", "vik-icon-Georef Zoom Tool", N_("Georef Z_oom Tool"), NULL, N_("Georef Zoom Tool"), 0 }, (VikToolConstructorFunc) georef_layer_zoom_create, NULL, NULL, NULL, (VikToolMouseFunc) georef_layer_zoom_press, NULL, NULL, (VikToolKeyFunc) NULL, FALSE, GDK_CURSOR_IS_PIXMAP, &cursor_geozoom_pixbuf }, }; VikLayerInterface vik_georef_layer_interface = { "GeoRef Map", N_("GeoRef Map"), NULL, &vikgeoreflayer_pixbuf, /*icon */ georef_tools, sizeof(georef_tools) / sizeof(VikToolInterface), georef_layer_params, NUM_PARAMS, NULL, 0, VIK_MENU_ITEM_ALL, (VikLayerFuncCreate) georef_layer_create, (VikLayerFuncRealize) NULL, (VikLayerFuncPostRead) georef_layer_load_image, (VikLayerFuncFree) georef_layer_free, (VikLayerFuncProperties) georef_layer_properties, (VikLayerFuncDraw) georef_layer_draw, (VikLayerFuncChangeCoordMode) NULL, (VikLayerFuncSetMenuItemsSelection) NULL, (VikLayerFuncGetMenuItemsSelection) NULL, (VikLayerFuncAddMenuItems) georef_layer_add_menu_items, (VikLayerFuncSublayerAddMenuItems) NULL, (VikLayerFuncSublayerRenameRequest) NULL, (VikLayerFuncSublayerToggleVisible) NULL, (VikLayerFuncSublayerTooltip) NULL, (VikLayerFuncLayerTooltip) georef_layer_tooltip, (VikLayerFuncLayerSelected) NULL, (VikLayerFuncMarshall) georef_layer_marshall, (VikLayerFuncUnmarshall) georef_layer_unmarshall, (VikLayerFuncSetParam) georef_layer_set_param, (VikLayerFuncGetParam) georef_layer_get_param, (VikLayerFuncReadFileData) NULL, (VikLayerFuncWriteFileData) NULL, (VikLayerFuncDeleteItem) NULL, (VikLayerFuncCutItem) NULL, (VikLayerFuncCopyItem) NULL, (VikLayerFuncPasteItem) NULL, (VikLayerFuncFreeCopiedItem) NULL, (VikLayerFuncDragDropRequest) NULL, (VikLayerFuncSelectClick) NULL, (VikLayerFuncSelectMove) NULL, (VikLayerFuncSelectRelease) NULL, (VikLayerFuncSelectedViewportMenu) NULL, }; struct _VikGeorefLayer { VikLayer vl; gchar *image; GdkPixbuf *pixbuf; struct UTM corner; gdouble mpp_easting, mpp_northing; guint width, height; GdkPixbuf *scaled; guint32 scaled_width, scaled_height; gint click_x, click_y; }; GType vik_georef_layer_get_type () { static GType vgl_type = 0; if (!vgl_type) { static const GTypeInfo vgl_info = { sizeof (VikGeorefLayerClass), NULL, /* base_init */ NULL, /* base_finalize */ NULL, /* class init */ NULL, /* class_finalize */ NULL, /* class_data */ sizeof (VikGeorefLayer), 0, NULL /* instance init */ }; vgl_type = g_type_register_static ( VIK_LAYER_TYPE, "VikGeorefLayer", &vgl_info, 0 ); } return vgl_type; } static const gchar* georef_layer_tooltip ( VikGeorefLayer *vgl ) { return vgl->image; } static void georef_layer_marshall( VikGeorefLayer *vgl, guint8 **data, gint *len ) { vik_layer_marshall_params ( VIK_LAYER(vgl), data, len ); } static VikGeorefLayer *georef_layer_unmarshall( guint8 *data, gint len, VikViewport *vvp ) { VikGeorefLayer *rv = georef_layer_new (); vik_layer_unmarshall_params ( VIK_LAYER(rv), data, len, vvp ); if (rv->image) { georef_layer_load_image ( rv ); } return rv; } static gboolean georef_layer_set_param ( VikGeorefLayer *vgl, guint16 id, VikLayerParamData data, VikViewport *vp, gboolean is_file_operation ) { switch ( id ) { case PARAM_IMAGE: georef_layer_set_image ( vgl, data.s ); break; case PARAM_CN: vgl->corner.northing = data.d; break; case PARAM_CE: vgl->corner.easting = data.d; break; case PARAM_MN: vgl->mpp_northing = data.d; break; case PARAM_ME: vgl->mpp_easting = data.d; break; } return TRUE; } static VikLayerParamData georef_layer_get_param ( VikGeorefLayer *vgl, guint16 id, gboolean is_file_operation ) { VikLayerParamData rv; switch ( id ) { case PARAM_IMAGE: rv.s = vgl->image ? vgl->image : ""; break; case PARAM_CN: rv.d = vgl->corner.northing; break; case PARAM_CE: rv.d = vgl->corner.easting; break; case PARAM_MN: rv.d = vgl->mpp_northing; break; case PARAM_ME: rv.d = vgl->mpp_easting; break; } return rv; } VikGeorefLayer *georef_layer_new ( ) { VikGeorefLayer *vgl = VIK_GEOREF_LAYER ( g_object_new ( VIK_GEOREF_LAYER_TYPE, NULL ) ); vik_layer_set_type ( VIK_LAYER(vgl), VIK_LAYER_GEOREF ); vgl->image = NULL; vgl->pixbuf = NULL; vgl->click_x = -1; vgl->click_y = -1; vgl->scaled = NULL; vgl->scaled_width = 0; vgl->scaled_height = 0; return vgl; } static void georef_layer_draw ( VikGeorefLayer *vgl, gpointer data ) { /* bla, bla */ if ( vgl->pixbuf ) { VikViewport *vp = VIK_VIEWPORT(data); struct UTM utm_middle; gdouble xmpp = vik_viewport_get_xmpp(vp), ympp = vik_viewport_get_ympp(vp); GdkPixbuf *pixbuf = vgl->pixbuf; guint layer_width = vgl->width; guint layer_height = vgl->height; vik_coord_to_utm ( vik_viewport_get_center ( vp ), &utm_middle ); /* scale the pixbuf if it doesn't match our dimensions */ if ( xmpp != vgl->mpp_easting || ympp != vgl->mpp_northing ) { layer_width = round(vgl->width * vgl->mpp_easting / xmpp); layer_height = round(vgl->height * vgl->mpp_northing / ympp); /* rescale if necessary */ if (layer_width == vgl->scaled_width && layer_height == vgl->scaled_height && vgl->scaled != NULL) pixbuf = vgl->scaled; else { pixbuf = gdk_pixbuf_scale_simple( vgl->pixbuf, layer_width, layer_height, GDK_INTERP_BILINEAR ); if (vgl->scaled != NULL) g_object_unref(vgl->scaled); vgl->scaled = pixbuf; vgl->scaled_width = layer_width; vgl->scaled_height = layer_height; } } guint width = vik_viewport_get_width(vp), height = vik_viewport_get_height(vp); gint32 x, y; vgl->corner.zone = utm_middle.zone; vgl->corner.letter = utm_middle.letter; VikCoord corner_coord; vik_coord_load_from_utm ( &corner_coord, vik_viewport_get_coord_mode(vp), &(vgl->corner) ); vik_viewport_coord_to_screen ( vp, &corner_coord, &x, &y ); if ( (x < 0 || x < width) && (y < 0 || y < height) && x+layer_width > 0 && y+layer_height > 0 ) vik_viewport_draw_pixbuf ( vp, pixbuf, 0, 0, x, y, layer_width, layer_height ); /* todo: draw only what we need to. */ } } static void georef_layer_free ( VikGeorefLayer *vgl ) { if ( vgl->image != NULL ) g_free ( vgl->image ); if ( vgl->scaled != NULL ) g_object_unref ( vgl->scaled ); } VikGeorefLayer *georef_layer_create ( VikViewport *vp ) { return georef_layer_new (); } gboolean georef_layer_properties ( VikGeorefLayer *vgl, gpointer vp ) { return georef_layer_dialog ( &vgl, vp, VIK_GTK_WINDOW_FROM_WIDGET(vp) ); } static void georef_layer_load_image ( VikGeorefLayer *vgl ) { GError *gx = NULL; if ( vgl->image == NULL ) return; if ( vgl->pixbuf ) g_object_unref ( G_OBJECT(vgl->pixbuf) ); if ( vgl->scaled ) { g_object_unref ( G_OBJECT(vgl->scaled) ); vgl->scaled = NULL; } vgl->pixbuf = gdk_pixbuf_new_from_file ( vgl->image, &gx ); if (gx) { g_warning ( _("Couldn't open image file: %s"), gx->message ); g_error_free ( gx ); } else { vgl->width = gdk_pixbuf_get_width ( vgl->pixbuf ); vgl->height = gdk_pixbuf_get_height ( vgl->pixbuf ); } /* should find length and width here too */ } static void georef_layer_set_image ( VikGeorefLayer *vgl, const gchar *image ) { if ( vgl->image ) g_free ( vgl->image ); if ( vgl->scaled ) { g_object_unref ( vgl->scaled ); vgl->scaled = NULL; } if ( image == NULL ) vgl->image = NULL; vgl->image = g_strdup ( image ); } static gboolean world_file_read_line ( gchar *buffer, gint size, FILE *f, GtkWidget *widget, gboolean use_value ) { if (!fgets ( buffer, 1024, f )) { a_dialog_error_msg ( VIK_GTK_WINDOW_FROM_WIDGET(widget), _("Unexpected end of file reading World file.") ); g_free ( buffer ); fclose ( f ); f = NULL; return FALSE; } if ( use_value ) { gdouble val = g_strtod ( buffer, NULL ); gtk_spin_button_set_value ( GTK_SPIN_BUTTON(widget), val > 0 ? val : -val ); } return TRUE; } static void georef_layer_dialog_load ( GtkWidget *pass_along[4] ) { GtkWidget *file_selector = gtk_file_chooser_dialog_new (_("Choose World file"), NULL, GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL); if ( gtk_dialog_run ( GTK_DIALOG ( file_selector ) ) == GTK_RESPONSE_ACCEPT ) { FILE *f = g_fopen ( gtk_file_chooser_get_filename ( GTK_FILE_CHOOSER(file_selector) ), "r" ); gtk_widget_destroy ( file_selector ); if ( !f ) { a_dialog_error_msg ( VIK_GTK_WINDOW_FROM_WIDGET(pass_along[0]), _("The World file you requested could not be opened for reading.") ); return; } else { gchar *buffer = g_malloc ( 1024 * sizeof(gchar) ); if ( world_file_read_line ( buffer, 1024, f, pass_along[0], TRUE ) && world_file_read_line ( buffer, 1024, f, pass_along[0], FALSE) && world_file_read_line ( buffer, 1024, f, pass_along[0], FALSE ) && world_file_read_line ( buffer, 1024, f, pass_along[1], TRUE) && world_file_read_line ( buffer, 1024, f, pass_along[2], TRUE ) && world_file_read_line ( buffer, 1024, f, pass_along[3], TRUE ) ) { g_free ( buffer ); fclose ( f ); f = NULL; } } } else gtk_widget_destroy ( file_selector ); /* do your jazz We need a file selection dialog file opener for reading, if NULL, send error_msg ( VIK_GTK_WINDOW_FROM_WIDGET(pass_along[0]) ) does that catch directories too? read lines -- if not enough lines, give error. if anything outside, give error. define range with #define CONSTANTS put 'em in thar widgets, and that's it. */ } static void georef_layer_export_params ( gpointer *pass_along[2] ) { VikGeorefLayer *vgl = VIK_GEOREF_LAYER(pass_along[0]); GtkWidget *file_selector = gtk_file_chooser_dialog_new (_("Choose World file"), NULL, GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL); if ( gtk_dialog_run ( GTK_DIALOG ( file_selector ) ) == GTK_RESPONSE_ACCEPT ) { FILE *f = g_fopen ( gtk_file_chooser_get_filename ( GTK_FILE_CHOOSER(file_selector) ), "w" ); gtk_widget_destroy ( file_selector ); if ( !f ) { a_dialog_error_msg ( VIK_GTK_WINDOW_FROM_WIDGET(pass_along[0]), _("The file you requested could not be opened for writing.") ); return; } else { fprintf ( f, "%f\n%f\n%f\n%f\n%f\n%f\n", vgl->mpp_easting, vgl->mpp_northing, 0.0, 0.0, vgl->corner.easting, vgl->corner.northing ); fclose ( f ); f = NULL; } } else gtk_widget_destroy ( file_selector ); } /* returns TRUE if OK was pressed. */ static gboolean georef_layer_dialog ( VikGeorefLayer **vgl, gpointer vp, GtkWindow *w ) { GtkWidget *dialog = gtk_dialog_new_with_buttons (_("Layer Properties"), w, GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL ); /* Default to reject as user really needs to specify map file first */ gtk_dialog_set_default_response ( GTK_DIALOG(dialog), GTK_RESPONSE_REJECT ); GtkWidget *response_w = NULL; #if GTK_CHECK_VERSION (2, 20, 0) response_w = gtk_dialog_get_widget_for_response ( GTK_DIALOG(dialog), GTK_RESPONSE_REJECT ); #endif GtkWidget *table, *wfp_hbox, *wfp_label, *wfp_button, *ce_label, *ce_spin, *cn_label, *cn_spin, *xlabel, *xspin, *ylabel, *yspin, *imagelabel, *imageentry; GtkWidget *pass_along[4]; table = gtk_table_new ( 6, 2, FALSE ); gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(dialog)->vbox), table, TRUE, TRUE, 0 ); wfp_hbox = gtk_hbox_new ( FALSE, 0 ); wfp_label = gtk_label_new ( _("World File Parameters:") ); wfp_button = gtk_button_new_with_label ( _("Load From File...") ); gtk_box_pack_start ( GTK_BOX(wfp_hbox), wfp_label, TRUE, TRUE, 0 ); gtk_box_pack_start ( GTK_BOX(wfp_hbox), wfp_button, FALSE, FALSE, 3 ); ce_label = gtk_label_new ( _("Corner pixel easting:") ); ce_spin = gtk_spin_button_new ( (GtkAdjustment *) gtk_adjustment_new ( 4, 0.0, 1500000.0, 1, 5, 0 ), 1, 4 ); gtk_widget_set_tooltip_text ( GTK_WIDGET(ce_spin), _("the UTM \"easting\" value of the upper-right corner pixel of the map") ); cn_label = gtk_label_new ( _("Corner pixel northing:") ); cn_spin = gtk_spin_button_new ( (GtkAdjustment *) gtk_adjustment_new ( 4, 0.0, 9000000.0, 1, 5, 0 ), 1, 4 ); gtk_widget_set_tooltip_text ( GTK_WIDGET(cn_spin), _("the UTM \"northing\" value of the upper-right corner pixel of the map") ); xlabel = gtk_label_new ( _("X (easting) scale (mpp): ")); ylabel = gtk_label_new ( _("Y (northing) scale (mpp): ")); xspin = gtk_spin_button_new ( (GtkAdjustment *) gtk_adjustment_new ( 4, VIK_VIEWPORT_MIN_ZOOM, VIK_VIEWPORT_MAX_ZOOM, 1, 5, 0 ), 1, 8 ); gtk_widget_set_tooltip_text ( GTK_WIDGET(xspin), _("the scale of the map in the X direction (meters per pixel)") ); yspin = gtk_spin_button_new ( (GtkAdjustment *) gtk_adjustment_new ( 4, VIK_VIEWPORT_MIN_ZOOM, VIK_VIEWPORT_MAX_ZOOM, 1, 5, 0 ), 1, 8 ); gtk_widget_set_tooltip_text ( GTK_WIDGET(yspin), _("the scale of the map in the Y direction (meters per pixel)") ); imagelabel = gtk_label_new ( _("Map Image:") ); imageentry = vik_file_entry_new (GTK_FILE_CHOOSER_ACTION_OPEN); if (*vgl) { gtk_spin_button_set_value ( GTK_SPIN_BUTTON(ce_spin), (*vgl)->corner.easting ); gtk_spin_button_set_value ( GTK_SPIN_BUTTON(cn_spin), (*vgl)->corner.northing ); gtk_spin_button_set_value ( GTK_SPIN_BUTTON(xspin), (*vgl)->mpp_easting ); gtk_spin_button_set_value ( GTK_SPIN_BUTTON(yspin), (*vgl)->mpp_northing ); if ( (*vgl)->image ) vik_file_entry_set_filename ( VIK_FILE_ENTRY(imageentry), (*vgl)->image ); } else { VikCoord corner_coord; struct UTM utm; vik_viewport_screen_to_coord ( VIK_VIEWPORT(vp), 0, 0, &corner_coord ); vik_coord_to_utm ( &corner_coord, &utm ); gtk_spin_button_set_value ( GTK_SPIN_BUTTON(ce_spin), utm.easting ); gtk_spin_button_set_value ( GTK_SPIN_BUTTON(cn_spin), utm.northing ); gtk_spin_button_set_value ( GTK_SPIN_BUTTON(xspin), vik_viewport_get_xmpp ( VIK_VIEWPORT(vp) ) ); gtk_spin_button_set_value ( GTK_SPIN_BUTTON(yspin), vik_viewport_get_ympp ( VIK_VIEWPORT(vp) ) ); } gtk_table_attach_defaults ( GTK_TABLE(table), imagelabel, 0, 1, 0, 1 ); gtk_table_attach_defaults ( GTK_TABLE(table), imageentry, 1, 2, 0, 1 ); gtk_table_attach_defaults ( GTK_TABLE(table), wfp_hbox, 0, 2, 1, 2 ); gtk_table_attach_defaults ( GTK_TABLE(table), xlabel, 0, 1, 2, 3 ); gtk_table_attach_defaults ( GTK_TABLE(table), xspin, 1, 2, 2, 3 ); gtk_table_attach_defaults ( GTK_TABLE(table), ylabel, 0, 1, 3, 4 ); gtk_table_attach_defaults ( GTK_TABLE(table), yspin, 1, 2, 3, 4 ); gtk_table_attach_defaults ( GTK_TABLE(table), ce_label, 0, 1, 4, 5 ); gtk_table_attach_defaults ( GTK_TABLE(table), ce_spin, 1, 2, 4, 5 ); gtk_table_attach_defaults ( GTK_TABLE(table), cn_label, 0, 1, 5, 6 ); gtk_table_attach_defaults ( GTK_TABLE(table), cn_spin, 1, 2, 5, 6 ); pass_along[0] = xspin; pass_along[1] = yspin; pass_along[2] = ce_spin; pass_along[3] = cn_spin; g_signal_connect_swapped ( G_OBJECT(wfp_button), "clicked", G_CALLBACK(georef_layer_dialog_load), pass_along ); if ( response_w ) gtk_widget_grab_focus ( response_w ); gtk_widget_show_all ( table ); if ( gtk_dialog_run ( GTK_DIALOG(dialog) ) == GTK_RESPONSE_ACCEPT ) { if (! *vgl) { *vgl = georef_layer_new (); vik_layer_rename ( VIK_LAYER(*vgl), vik_georef_layer_interface.name ); } (*vgl)->corner.easting = gtk_spin_button_get_value ( GTK_SPIN_BUTTON(ce_spin) ); (*vgl)->corner.northing = gtk_spin_button_get_value ( GTK_SPIN_BUTTON(cn_spin) ); (*vgl)->mpp_easting = gtk_spin_button_get_value ( GTK_SPIN_BUTTON(xspin) ); (*vgl)->mpp_northing = gtk_spin_button_get_value ( GTK_SPIN_BUTTON(yspin) ); if ( (!(*vgl)->image) || strcmp( (*vgl)->image, vik_file_entry_get_filename(VIK_FILE_ENTRY(imageentry)) ) != 0 ) { georef_layer_set_image ( *vgl, vik_file_entry_get_filename(VIK_FILE_ENTRY(imageentry)) ); georef_layer_load_image ( *vgl ); } gtk_widget_destroy ( GTK_WIDGET(dialog) ); return TRUE; } gtk_widget_destroy ( GTK_WIDGET(dialog) ); return FALSE; } static void georef_layer_zoom_to_fit ( gpointer vgl_vlp[2] ) { vik_viewport_set_xmpp ( vik_layers_panel_get_viewport(VIK_LAYERS_PANEL(vgl_vlp[1])), VIK_GEOREF_LAYER(vgl_vlp[0])->mpp_easting ); vik_viewport_set_ympp ( vik_layers_panel_get_viewport(VIK_LAYERS_PANEL(vgl_vlp[1])), VIK_GEOREF_LAYER(vgl_vlp[0])->mpp_northing ); vik_layers_panel_emit_update ( VIK_LAYERS_PANEL(vgl_vlp[1]) ); } static void georef_layer_goto_center ( gpointer vgl_vlp[2] ) { VikGeorefLayer *vgl = VIK_GEOREF_LAYER ( vgl_vlp[0] ); VikViewport *vp = vik_layers_panel_get_viewport(VIK_LAYERS_PANEL(vgl_vlp[1])); struct UTM utm; VikCoord coord; vik_coord_to_utm ( vik_viewport_get_center ( vp ), &utm ); utm.easting = vgl->corner.easting + (vgl->width * vgl->mpp_easting / 2); /* only an approximation */ utm.northing = vgl->corner.northing - (vgl->height * vgl->mpp_northing / 2); vik_coord_load_from_utm ( &coord, vik_viewport_get_coord_mode ( vp ), &utm ); vik_viewport_set_center_coord ( vp, &coord ); vik_layers_panel_emit_update ( VIK_LAYERS_PANEL(vgl_vlp[1]) ); } static void georef_layer_add_menu_items ( VikGeorefLayer *vgl, GtkMenu *menu, gpointer vlp ) { static gpointer pass_along[2]; GtkWidget *item; pass_along[0] = vgl; pass_along[1] = vlp; item = gtk_menu_item_new(); gtk_menu_shell_append ( GTK_MENU_SHELL(menu), item ); gtk_widget_show ( item ); /* Now with icons */ item = gtk_image_menu_item_new_with_mnemonic ( _("_Zoom to Fit Map") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_ZOOM_FIT, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(georef_layer_zoom_to_fit), pass_along ); gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); gtk_widget_show ( item ); item = gtk_image_menu_item_new_with_mnemonic ( _("_Goto Map Center") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_JUMP_TO, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(georef_layer_goto_center), pass_along ); gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); gtk_widget_show ( item ); item = gtk_image_menu_item_new_with_mnemonic ( _("_Export to World File") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_HARDDISK, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(georef_layer_export_params), pass_along ); gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); gtk_widget_show ( item ); } static gpointer georef_layer_move_create ( VikWindow *vw, VikViewport *vvp) { return vvp; } static gboolean georef_layer_move_release ( VikGeorefLayer *vgl, GdkEventButton *event, VikViewport *vvp ) { if (!vgl || vgl->vl.type != VIK_LAYER_GEOREF) return FALSE; if ( vgl->click_x != -1 ) { vgl->corner.easting += (event->x - vgl->click_x) * vik_viewport_get_xmpp (vvp); vgl->corner.northing -= (event->y - vgl->click_y) * vik_viewport_get_ympp (vvp); vik_layer_emit_update ( VIK_LAYER(vgl) ); return TRUE; } return FALSE; /* I didn't move anything on this layer! */ } static gpointer georef_layer_zoom_create ( VikWindow *vw, VikViewport *vvp) { return vvp; } static gboolean georef_layer_zoom_press ( VikGeorefLayer *vgl, GdkEventButton *event, VikViewport *vvp ) { if (!vgl || vgl->vl.type != VIK_LAYER_GEOREF) return FALSE; if ( event->button == 1 ) { if ( vgl->mpp_easting < (VIK_VIEWPORT_MAX_ZOOM / 1.05) && vgl->mpp_northing < (VIK_VIEWPORT_MAX_ZOOM / 1.05) ) { vgl->mpp_easting *= 1.01; vgl->mpp_northing *= 1.01; } } else { if ( vgl->mpp_easting > (VIK_VIEWPORT_MIN_ZOOM * 1.05) && vgl->mpp_northing > (VIK_VIEWPORT_MIN_ZOOM * 1.05) ) { vgl->mpp_easting /= 1.01; vgl->mpp_northing /= 1.01; } } vik_viewport_set_xmpp ( vvp, vgl->mpp_easting ); vik_viewport_set_ympp ( vvp, vgl->mpp_northing ); vik_layer_emit_update ( VIK_LAYER(vgl) ); return TRUE; } static gboolean georef_layer_move_press ( VikGeorefLayer *vgl, GdkEventButton *event, VikViewport *vvp ) { if (!vgl || vgl->vl.type != VIK_LAYER_GEOREF) return FALSE; vgl->click_x = event->x; vgl->click_y = event->y; return TRUE; } viking-1.4.2/src/documenters.h0000644000175000017500000000031512175546630013226 00000000000000/* Generated file. */ const gchar *DOCUMENTERS[] = {\ "Guilhem Bonnefille",\ "Rob Norris",\ "username: Alexxy",\ "username: Vikingis",\ "username: Tallguy",\ "username: EliotB",\ "Alex Foobarian",\ NULL}; viking-1.4.2/src/vikgotoxmltool.c0000644000175000017500000003226712122673673014005 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * Copyright (C) 2009, Guilhem Bonnefille * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include #ifdef HAVE_MATH_H #include #endif #include #include #include #include #include "viking.h" #include "vikgotoxmltool.h" static void vik_goto_xml_tool_finalize ( GObject *gob ); static gchar *vik_goto_xml_tool_get_url_format ( VikGotoTool *self ); static gboolean vik_goto_xml_tool_parse_file_for_latlon(VikGotoTool *self, gchar *filename, struct LatLon *ll); typedef struct _VikGotoXmlToolPrivate VikGotoXmlToolPrivate; struct _VikGotoXmlToolPrivate { gchar *url_format; gchar *lat_path; gchar *lat_attr; gchar *lon_path; gchar *lon_attr; struct LatLon ll; }; #define GOTO_XML_TOOL_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), \ VIK_GOTO_XML_TOOL_TYPE, \ VikGotoXmlToolPrivate)) G_DEFINE_TYPE (VikGotoXmlTool, vik_goto_xml_tool, VIK_GOTO_TOOL_TYPE) enum { PROP_0, PROP_URL_FORMAT, PROP_LAT_PATH, PROP_LAT_ATTR, PROP_LON_PATH, PROP_LON_ATTR, }; static void vik_goto_xml_tool_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { VikGotoXmlTool *self = VIK_GOTO_XML_TOOL (object); VikGotoXmlToolPrivate *priv = GOTO_XML_TOOL_GET_PRIVATE (self); gchar **splitted = NULL; switch (property_id) { case PROP_URL_FORMAT: g_free (priv->url_format); priv->url_format = g_value_dup_string (value); break; case PROP_LAT_PATH: splitted = g_strsplit (g_value_get_string (value), "@", 2); g_free (priv->lat_path); priv->lat_path = splitted[0]; if (splitted[1]) { g_object_set (object, "lat-attr", splitted[1], NULL); g_free (splitted[1]); } /* only free the tab, not the strings */ g_free (splitted); splitted = NULL; break; case PROP_LAT_ATTR: /* Avoid to overwrite XPATH value */ /* NB: This disable future overwriting, but as property is CONSTRUCT_ONLY there is no matter */ if (!priv->lat_attr || g_value_get_string (value)) { g_free (priv->lat_attr); priv->lat_attr = g_value_dup_string (value); } break; case PROP_LON_PATH: splitted = g_strsplit (g_value_get_string (value), "@", 2); g_free (priv->lon_path); priv->lon_path = splitted[0]; if (splitted[1]) { g_object_set (object, "lon-attr", splitted[1], NULL); g_free (splitted[1]); } /* only free the tab, not the strings */ g_free (splitted); splitted = NULL; break; case PROP_LON_ATTR: /* Avoid to overwrite XPATH value */ /* NB: This disable future overwriting, but as property is CONSTRUCT_ONLY there is no matter */ if (!priv->lon_attr || g_value_get_string (value)) { g_free (priv->lon_attr); priv->lon_attr = g_value_dup_string (value); } break; default: /* We don't have any other property... */ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void vik_goto_xml_tool_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { VikGotoXmlTool *self = VIK_GOTO_XML_TOOL (object); VikGotoXmlToolPrivate *priv = GOTO_XML_TOOL_GET_PRIVATE (self); switch (property_id) { case PROP_URL_FORMAT: g_value_set_string (value, priv->url_format); break; case PROP_LAT_PATH: g_value_set_string (value, priv->lat_path); break; case PROP_LAT_ATTR: g_value_set_string (value, priv->lat_attr); break; case PROP_LON_PATH: g_value_set_string (value, priv->lon_path); break; case PROP_LON_ATTR: g_value_set_string (value, priv->lon_attr); break; default: /* We don't have any other property... */ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void vik_goto_xml_tool_class_init ( VikGotoXmlToolClass *klass ) { GObjectClass *object_class; VikGotoToolClass *parent_class; GParamSpec *pspec; object_class = G_OBJECT_CLASS (klass); object_class->finalize = vik_goto_xml_tool_finalize; object_class->set_property = vik_goto_xml_tool_set_property; object_class->get_property = vik_goto_xml_tool_get_property; pspec = g_param_spec_string ("url-format", "URL format", "The format of the URL", "" /* default value */, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE); g_object_class_install_property (object_class, PROP_URL_FORMAT, pspec); pspec = g_param_spec_string ("lat-path", "Latitude path", "XPath of the latitude", "" /* default value */, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE); g_object_class_install_property (object_class, PROP_LAT_PATH, pspec); pspec = g_param_spec_string ("lat-attr", "Latitude attribute", "XML attribute of the latitude", NULL /* default value */, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE); g_object_class_install_property (object_class, PROP_LAT_ATTR, pspec); pspec = g_param_spec_string ("lon-path", "Longitude path", "XPath of the longitude", "" /* default value */, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE); g_object_class_install_property (object_class, PROP_LON_PATH, pspec); pspec = g_param_spec_string ("lon-attr", "Longitude attribute", "XML attribute of the longitude", NULL /* default value */, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE); g_object_class_install_property (object_class, PROP_LON_ATTR, pspec); parent_class = VIK_GOTO_TOOL_CLASS (klass); parent_class->get_url_format = vik_goto_xml_tool_get_url_format; parent_class->parse_file_for_latlon = vik_goto_xml_tool_parse_file_for_latlon; g_type_class_add_private (klass, sizeof (VikGotoXmlToolPrivate)); } VikGotoXmlTool * vik_goto_xml_tool_new () { return VIK_GOTO_XML_TOOL ( g_object_new ( VIK_GOTO_XML_TOOL_TYPE, "label", "Google", NULL ) ); } static void vik_goto_xml_tool_init ( VikGotoXmlTool *self ) { VikGotoXmlToolPrivate *priv = GOTO_XML_TOOL_GET_PRIVATE (self); priv->url_format = NULL; priv->lat_path = NULL; priv->lat_attr = NULL; priv->lon_path = NULL; priv->lon_attr = NULL; // priv->ll.lat = NAN; priv->ll.lon = NAN; } static void vik_goto_xml_tool_finalize ( GObject *gob ) { G_OBJECT_GET_CLASS(gob)->finalize(gob); } static gboolean stack_is_path (const GSList *stack, const gchar *path) { gboolean equal = TRUE; int stack_len = g_list_length((GList *)stack); int i = 0; i = stack_len - 1; while (equal == TRUE && i >= 0) { if (*path != '/') equal = FALSE; else path++; const gchar *current = g_list_nth_data((GList *)stack, i); size_t len = strlen(current); if (strncmp(path, current, len) != 0 ) equal = FALSE; else { path += len; } i--; } if (*path != '\0') equal = FALSE; return equal; } /* Called for open tags */ static void _start_element (GMarkupParseContext *context, const gchar *element_name, const gchar **attribute_names, const gchar **attribute_values, gpointer user_data, GError **error) { VikGotoXmlTool *self = VIK_GOTO_XML_TOOL (user_data); VikGotoXmlToolPrivate *priv = GOTO_XML_TOOL_GET_PRIVATE (self); const GSList *stack = g_markup_parse_context_get_element_stack (context); /* Longitude */ if (priv->lon_attr != NULL && isnan(priv->ll.lon) && stack_is_path (stack, priv->lon_path)) { int i=0; while (attribute_names[i] != NULL) { if (strcmp (attribute_names[i], priv->lon_attr) == 0) { priv->ll.lon = g_ascii_strtod(attribute_values[i], NULL); } i++; } } /* Latitude */ if (priv->lat_attr != NULL && isnan(priv->ll.lat) && stack_is_path (stack, priv->lat_path)) { int i=0; while (attribute_names[i] != NULL) { if (strcmp (attribute_names[i], priv->lat_attr) == 0) { priv->ll.lat = g_ascii_strtod(attribute_values[i], NULL); } i++; } } } /* Called for character data */ /* text is not nul-terminated */ static void _text (GMarkupParseContext *context, const gchar *text, gsize text_len, gpointer user_data, GError **error) { VikGotoXmlTool *self = VIK_GOTO_XML_TOOL (user_data); VikGotoXmlToolPrivate *priv = GOTO_XML_TOOL_GET_PRIVATE (self); const GSList *stack = g_markup_parse_context_get_element_stack (context); gchar *textl = g_strndup(text, text_len); /* Store only first result */ if (priv->lat_attr == NULL && isnan(priv->ll.lat) && stack_is_path (stack, priv->lat_path)) { priv->ll.lat = g_ascii_strtod(textl, NULL); } if (priv->lon_attr == NULL && isnan(priv->ll.lon) && stack_is_path (stack, priv->lon_path)) { priv->ll.lon = g_ascii_strtod(textl, NULL); } g_free(textl); } static gboolean vik_goto_xml_tool_parse_file_for_latlon(VikGotoTool *self, gchar *filename, struct LatLon *ll) { GMarkupParser xml_parser; GMarkupParseContext *xml_context = NULL; GError *error = NULL; VikGotoXmlToolPrivate *priv = GOTO_XML_TOOL_GET_PRIVATE (self); g_return_val_if_fail(priv != NULL, FALSE); g_debug ("%s: %s@%s, %s@%s", __FUNCTION__, priv->lat_path, priv->lat_attr, priv->lon_path, priv->lon_attr); FILE *file = g_fopen (filename, "r"); if (file == NULL) /* TODO emit warning */ return FALSE; /* setup context parse (ie callbacks) */ if (priv->lat_attr != NULL || priv->lon_attr != NULL) // At least one coordinate uses an attribute xml_parser.start_element = &_start_element; else xml_parser.start_element = NULL; xml_parser.end_element = NULL; if (priv->lat_attr == NULL || priv->lon_attr == NULL) // At least one coordinate uses a raw element xml_parser.text = &_text; else xml_parser.text = NULL; xml_parser.passthrough = NULL; xml_parser.error = NULL; xml_context = g_markup_parse_context_new(&xml_parser, 0, self, NULL); /* setup result */ priv->ll.lat = NAN; priv->ll.lon = NAN; gchar buff[BUFSIZ]; size_t nb; while (xml_context && (nb = fread (buff, sizeof(gchar), BUFSIZ, file)) > 0) { if (!g_markup_parse_context_parse(xml_context, buff, nb, &error)) { fprintf(stderr, "%s: parsing error: %s.\n", __FUNCTION__, error->message); g_markup_parse_context_free(xml_context); xml_context = NULL; } g_clear_error (&error); } /* cleanup */ if (xml_context && !g_markup_parse_context_end_parse(xml_context, &error)) fprintf(stderr, "%s: errors occurred while reading file: %s.\n", __FUNCTION__, error->message); g_clear_error (&error); if (xml_context) g_markup_parse_context_free(xml_context); xml_context = NULL; fclose (file); if (ll != NULL) { *ll = priv->ll; } if (isnan(priv->ll.lat) || isnan(priv->ll.lat)) /* At least one coordinate not found */ return FALSE; else return TRUE; } static gchar * vik_goto_xml_tool_get_url_format ( VikGotoTool *self ) { VikGotoXmlToolPrivate *priv = GOTO_XML_TOOL_GET_PRIVATE (self); g_return_val_if_fail(priv != NULL, NULL); return priv->url_format; } viking-1.4.2/src/print-preview.c0000644000175000017500000004410112175546146013507 00000000000000/* GIMP - The GNU Image Manipulation Program * Copyright (C) 1995 Spencer Kimball and Peter Mattis * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* * Modified for viking by Quy Tonthat */ #include #if GTK_CHECK_VERSION(2,10,0) #include "print-preview.h" #define DRAWING_AREA_SIZE 200 enum { OFFSETS_CHANGED, LAST_SIGNAL }; static void vik_print_preview_finalize (GObject *object); static void vik_print_preview_size_allocate (GtkWidget *widget, GtkAllocation *allocation, VikPrintPreview *preview); static void vik_print_preview_realize (GtkWidget *widget); static gboolean vik_print_preview_event (GtkWidget *widget, GdkEvent *event, VikPrintPreview *preview); static gboolean vik_print_preview_expose_event (GtkWidget *widget, GdkEventExpose *eevent, VikPrintPreview *preview); static gdouble vik_print_preview_get_scale (VikPrintPreview *preview); static void vik_print_preview_get_page_margins (VikPrintPreview *preview, gdouble *left_margin, gdouble *right_margin, gdouble *top_margin, gdouble *bottom_margin); static void print_preview_queue_draw (VikPrintPreview *preview); G_DEFINE_TYPE (VikPrintPreview, vik_print_preview, GTK_TYPE_ASPECT_FRAME) #define parent_class vik_print_preview_parent_class static guint vik_print_preview_signals[LAST_SIGNAL] = { 0 }; #define g_marshal_value_peek_double(v) (v)->data[0].v_double static void marshal_VOID__DOUBLE_DOUBLE (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data) { typedef void (*GMarshalFunc_VOID__DOUBLE_DOUBLE) (gpointer data1, gdouble arg_1, gdouble arg_2, gpointer data2); register GMarshalFunc_VOID__DOUBLE_DOUBLE callback; register GCClosure *cc = (GCClosure*) closure; register gpointer data1, data2; g_return_if_fail (n_param_values == 3); if (G_CCLOSURE_SWAP_DATA (closure)) { data1 = closure->data; data2 = g_value_peek_pointer (param_values + 0); } else { data1 = g_value_peek_pointer (param_values + 0); data2 = closure->data; } callback = (GMarshalFunc_VOID__DOUBLE_DOUBLE) (marshal_data ? marshal_data : cc->callback); callback (data1, g_marshal_value_peek_double (param_values + 1), g_marshal_value_peek_double (param_values + 2), data2); } static void vik_print_preview_class_init (VikPrintPreviewClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); vik_print_preview_signals[OFFSETS_CHANGED] = g_signal_new ("offsets-changed", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET (VikPrintPreviewClass, offsets_changed), NULL, NULL, marshal_VOID__DOUBLE_DOUBLE, G_TYPE_NONE, 2, G_TYPE_DOUBLE, G_TYPE_DOUBLE); object_class->finalize = vik_print_preview_finalize; klass->offsets_changed = NULL; } static void vik_print_preview_init (VikPrintPreview *preview) { preview->page = NULL; preview->pixbuf = NULL; preview->dragging = FALSE; preview->image_offset_x = 0.0; preview->image_offset_y = 0.0; preview->image_offset_x_max = 0.0; preview->image_offset_y_max = 0.0; preview->image_xres = 230.0; // 1.0 preview->image_yres = 230.0; preview->use_full_page = FALSE; preview->area = gtk_drawing_area_new(); gtk_container_add (GTK_CONTAINER (preview), preview->area); gtk_widget_show (preview->area); gtk_widget_add_events (GTK_WIDGET (preview->area), GDK_BUTTON_PRESS_MASK); g_signal_connect (preview->area, "size-allocate", G_CALLBACK (vik_print_preview_size_allocate), preview); g_signal_connect (preview->area, "realize", G_CALLBACK (vik_print_preview_realize), NULL); g_signal_connect (preview->area, "event", G_CALLBACK (vik_print_preview_event), preview); g_signal_connect (preview->area, "expose-event", G_CALLBACK (vik_print_preview_expose_event), preview); } static void vik_print_preview_finalize (GObject *object) { VikPrintPreview *preview = VIK_PRINT_PREVIEW (object); if (preview->drawable) { preview->drawable = NULL; } if (preview->pixbuf) { g_object_unref (preview->pixbuf); preview->pixbuf = NULL; } if (preview->page) { g_object_unref (preview->page); preview->page = NULL; } G_OBJECT_CLASS (vik_print_preview_parent_class)->finalize (object); } /** * vik_print_preview_new: * @page: page setup * @drawable_id: the drawable to print * * Creates a new #VikPrintPreview widget. * * Return value: the new #VikPrintPreview widget. **/ GtkWidget * vik_print_preview_new (GtkPageSetup *page, GdkDrawable *drawable) { VikPrintPreview *preview; gfloat ratio; preview = g_object_new (VIK_TYPE_PRINT_PREVIEW, NULL); preview->drawable = drawable; if (page != NULL) preview->page = gtk_page_setup_copy (page); else preview->page = gtk_page_setup_new (); ratio = (gtk_page_setup_get_paper_width (preview->page, GTK_UNIT_POINTS) / gtk_page_setup_get_paper_height (preview->page, GTK_UNIT_POINTS)); gtk_aspect_frame_set (GTK_ASPECT_FRAME (preview), 0.5, 0.5, ratio, FALSE); gtk_widget_set_size_request (preview->area, DRAWING_AREA_SIZE, DRAWING_AREA_SIZE); return GTK_WIDGET (preview); } /** * vik_print_preview_set_image_dpi: * @preview: a #VikPrintPreview. * @xres: the X resolution * @yres: the Y resolution * * Sets the resolution of the image/drawable displayed by the * #VikPrintPreview. **/ void vik_print_preview_set_image_dpi (VikPrintPreview *preview, gdouble xres, gdouble yres) { g_return_if_fail (VIK_IS_PRINT_PREVIEW (preview)); if (preview->image_xres != xres || preview->image_yres != yres) { preview->image_xres = xres; preview->image_yres = yres; print_preview_queue_draw (preview); } } /** * vik_print_preview_set_page_setup: * @preview: a #VikPrintPreview. * @page: the page setup to use * * Sets the page setup to use by the #VikPrintPreview. **/ void vik_print_preview_set_page_setup (VikPrintPreview *preview, GtkPageSetup *page) { gfloat ratio; if (preview->page) g_object_unref (preview->page); preview->page = gtk_page_setup_copy (page); ratio = (gtk_page_setup_get_paper_width (page, GTK_UNIT_POINTS) / gtk_page_setup_get_paper_height (page, GTK_UNIT_POINTS)); gtk_aspect_frame_set (GTK_ASPECT_FRAME (preview), 0.5, 0.5, ratio, FALSE); print_preview_queue_draw (preview); } /** * vik_print_preview_set_image_offsets: * @preview: a #VikPrintPreview. * @offset_x: the X offset * @offset_y: the Y offset * * Sets the offsets of the image/drawable displayed by the #VikPrintPreview. * It does not emit the "offsets-changed" signal. **/ void vik_print_preview_set_image_offsets (VikPrintPreview *preview, gdouble offset_x, gdouble offset_y) { g_return_if_fail (VIK_IS_PRINT_PREVIEW (preview)); preview->image_offset_x = offset_x; preview->image_offset_y = offset_y; print_preview_queue_draw (preview); } /** * vik_print_preview_set_image_offsets_max: * @preview: a #VikPrintPreview. * @offset_x_max: the maximum X offset allowed * @offset_y_max: the maximum Y offset allowed * * Sets the maximum offsets of the image/drawable displayed by the * #VikPrintPreview. It does not emit the "offsets-changed" signal. **/ void vik_print_preview_set_image_offsets_max (VikPrintPreview *preview, gdouble offset_x_max, gdouble offset_y_max) { g_return_if_fail (VIK_IS_PRINT_PREVIEW (preview)); preview->image_offset_x_max = offset_x_max; preview->image_offset_y_max = offset_y_max; print_preview_queue_draw (preview); } /** * vik_print_preview_set_use_full_page: * @preview: a #VikPrintPreview. * @full_page: TRUE to ignore the page margins * * If @full_page is TRUE, the page margins are ignored and the full page * can be used to setup printing. **/ void vik_print_preview_set_use_full_page (VikPrintPreview *preview, gboolean full_page) { g_return_if_fail (VIK_IS_PRINT_PREVIEW (preview)); preview->use_full_page = full_page; print_preview_queue_draw (preview); } static void vik_print_preview_realize (GtkWidget *widget) { GdkCursor *cursor; cursor = gdk_cursor_new_for_display (gtk_widget_get_display (widget), GDK_FLEUR); gdk_window_set_cursor (widget->window, cursor); gdk_cursor_unref (cursor); } static gboolean vik_print_preview_event (GtkWidget *widget, GdkEvent *event, VikPrintPreview *preview) { static gdouble orig_offset_x = 0.0; static gdouble orig_offset_y = 0.0; static gint start_x = 0; static gint start_y = 0; gdouble offset_x; gdouble offset_y; gdouble scale; switch (event->type) { case GDK_BUTTON_PRESS: gdk_pointer_grab (widget->window, FALSE, (GDK_BUTTON1_MOTION_MASK | GDK_BUTTON_RELEASE_MASK), NULL, NULL, event->button.time); orig_offset_x = preview->image_offset_x; orig_offset_y = preview->image_offset_y; start_x = event->button.x; start_y = event->button.y; preview->dragging = TRUE; break; case GDK_MOTION_NOTIFY: scale = vik_print_preview_get_scale (preview); offset_x = (orig_offset_x + (event->motion.x - start_x) / scale); offset_y = (orig_offset_y + (event->motion.y - start_y) / scale); offset_x = CLAMP (offset_x, 0, preview->image_offset_x_max); offset_y = CLAMP (offset_y, 0, preview->image_offset_y_max); if (preview->image_offset_x != offset_x || preview->image_offset_y != offset_y) { vik_print_preview_set_image_offsets (preview, offset_x, offset_y); g_signal_emit (preview, vik_print_preview_signals[OFFSETS_CHANGED], 0, preview->image_offset_x, preview->image_offset_y); } break; case GDK_BUTTON_RELEASE: gdk_display_pointer_ungrab (gtk_widget_get_display (widget), event->button.time); start_x = start_y = 0; preview->dragging = FALSE; print_preview_queue_draw (preview); break; default: break; } return FALSE; } static GdkPixbuf *get_thumbnail(GdkDrawable *drawable, gint thumb_width, gint thumb_height) { gint width, height; GdkPixbuf *pixbuf; GdkPixbuf *thumbnail; gdk_drawable_get_size(drawable, &width, &height); pixbuf = gdk_pixbuf_get_from_drawable(NULL, drawable, NULL, 0, 0, 0, 0, width, height); thumbnail = gdk_pixbuf_scale_simple(pixbuf, thumb_width, thumb_height, GDK_INTERP_BILINEAR); g_object_unref(pixbuf); return thumbnail; } static gboolean vik_print_preview_expose_event (GtkWidget *widget, GdkEventExpose *eevent, VikPrintPreview *preview) { gdouble paper_width; gdouble paper_height; gdouble left_margin; gdouble right_margin; gdouble top_margin; gdouble bottom_margin; gdouble scale; cairo_t *cr; paper_width = gtk_page_setup_get_paper_width (preview->page, GTK_UNIT_POINTS); paper_height = gtk_page_setup_get_paper_height (preview->page, GTK_UNIT_POINTS); vik_print_preview_get_page_margins (preview, &left_margin, &right_margin, &top_margin, &bottom_margin); cr = gdk_cairo_create (widget->window); scale = vik_print_preview_get_scale (preview); /* draw background */ cairo_scale (cr, scale, scale); gdk_cairo_set_source_color (cr, &widget->style->white); cairo_rectangle (cr, 0, 0, paper_width, paper_height); cairo_fill (cr); /* draw page_margins */ gdk_cairo_set_source_color (cr, &widget->style->black); cairo_rectangle (cr, left_margin, top_margin, paper_width - left_margin - right_margin, paper_height - top_margin - bottom_margin); cairo_stroke (cr); if (preview->dragging) { gint width, height; gdk_drawable_get_size(preview->drawable, &width, &height); cairo_rectangle (cr, left_margin + preview->image_offset_x, top_margin + preview->image_offset_y, (gdouble) width * 72.0 / preview->image_xres, (gdouble) height * 72.0 / preview->image_yres); cairo_stroke (cr); } else { GdkDrawable *drawable = preview->drawable; /* draw image */ cairo_translate (cr, left_margin + preview->image_offset_x, top_margin + preview->image_offset_y); if (preview->pixbuf == NULL) { gint width = MIN (widget->allocation.width, 1024); gint height = MIN (widget->allocation.height, 1024); preview->pixbuf = get_thumbnail(drawable, width, height); } if (preview->pixbuf != NULL) { gint width, height; gdk_drawable_get_size(drawable, &width, &height); gdouble scale_x = ((gdouble) width / gdk_pixbuf_get_width (preview->pixbuf)); gdouble scale_y = ((gdouble) height / gdk_pixbuf_get_height (preview->pixbuf)); scale_x = scale_x * 72.0 / preview->image_xres; scale_y = scale_y * 72.0 / preview->image_yres; cairo_scale (cr, scale_x, scale_y); gdk_cairo_set_source_pixbuf (cr, preview->pixbuf, 0, 0); cairo_paint (cr); } } cairo_destroy (cr); return FALSE; } static gdouble vik_print_preview_get_scale (VikPrintPreview* preview) { gdouble scale_x; gdouble scale_y; scale_x = ((gdouble) preview->area->allocation.width / gtk_page_setup_get_paper_width (preview->page, GTK_UNIT_POINTS)); scale_y = ((gdouble) preview->area->allocation.height / gtk_page_setup_get_paper_height (preview->page, GTK_UNIT_POINTS)); return MIN (scale_x, scale_y); } static void vik_print_preview_size_allocate (GtkWidget *widget, GtkAllocation *allocation, VikPrintPreview *preview) { if (preview->pixbuf != NULL) { g_object_unref (preview->pixbuf); preview->pixbuf = NULL; } } static void vik_print_preview_get_page_margins (VikPrintPreview *preview, gdouble *left_margin, gdouble *right_margin, gdouble *top_margin, gdouble *bottom_margin) { if (preview->use_full_page) { *left_margin = 0.0; *right_margin = 0.0; *top_margin = 0.0; *bottom_margin = 0.0; } else { *left_margin = gtk_page_setup_get_left_margin (preview->page, GTK_UNIT_POINTS); *right_margin = gtk_page_setup_get_right_margin (preview->page, GTK_UNIT_POINTS); *top_margin = gtk_page_setup_get_top_margin (preview->page, GTK_UNIT_POINTS); *bottom_margin = gtk_page_setup_get_bottom_margin (preview->page, GTK_UNIT_POINTS); } } static void print_preview_queue_draw (VikPrintPreview *preview) { gtk_widget_queue_draw (GTK_WIDGET (preview->area)); } #endif viking-1.4.2/src/vikaggregatelayer.h0000644000175000017500000000622112175546146014377 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef _VIKING_AGGREGATELAYER_H #define _VIKING_AGGREGATELAYER_H #include "viklayer.h" G_BEGIN_DECLS #define VIK_AGGREGATE_LAYER_TYPE (vik_aggregate_layer_get_type ()) #define VIK_AGGREGATE_LAYER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIK_AGGREGATE_LAYER_TYPE, VikAggregateLayer)) #define VIK_AGGREGATE_LAYER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VIK_AGGREGATE_LAYER_TYPE, VikAggregateLayerClass)) #define IS_VIK_AGGREGATE_LAYER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIK_AGGREGATE_LAYER_TYPE)) #define IS_VIK_AGGREGATE_LAYER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VIK_AGGREGATE_LAYER_TYPE)) typedef struct _VikAggregateLayerClass VikAggregateLayerClass; struct _VikAggregateLayerClass { VikLayerClass vik_layer_class; }; GType vik_aggregate_layer_get_type (); typedef struct _VikAggregateLayer VikAggregateLayer; VikAggregateLayer *vik_aggregate_layer_new (); void vik_aggregate_layer_add_layer ( VikAggregateLayer *val, VikLayer *l ); void vik_aggregate_layer_insert_layer ( VikAggregateLayer *val, VikLayer *l, GtkTreeIter *replace_layer ); void vik_aggregate_layer_move_layer ( VikAggregateLayer *val, GtkTreeIter *child_iter, gboolean up ); void vik_aggregate_layer_draw ( VikAggregateLayer *val, gpointer data ); void vik_aggregate_layer_free ( VikAggregateLayer *val ); void vik_aggregate_layer_clear ( VikAggregateLayer *val ); gboolean vik_aggregate_layer_delete ( VikAggregateLayer *val, GtkTreeIter *iter ); VikAggregateLayer *vik_aggregate_layer_create (VikViewport *vp); /* returns: 0 = success, 1 = none appl. found, 2 = found but rejected */ // guint vik_aggregate_layer_tool ( VikAggregateLayer *val, guint16 layer_type, VikToolInterfaceFunc tool_func, GdkEventButton *event, VikViewport *vvp); VikLayer *vik_aggregate_layer_get_top_visible_layer_of_type ( VikAggregateLayer *val, gint type ); void vik_aggregate_layer_realize ( VikAggregateLayer *val, VikTreeview *vt, GtkTreeIter *layer_iter ); gboolean vik_aggregate_layer_load_layers ( VikAggregateLayer *val, FILE *f, gpointer vp ); gboolean vik_aggregate_layer_is_empty ( VikAggregateLayer *val ); const GList *vik_aggregate_layer_get_children ( VikAggregateLayer *val ); GList *vik_aggregate_layer_get_all_layers_of_type(VikAggregateLayer *val, GList *layers, gint type, gboolean include_invisible); G_END_DECLS #endif viking-1.4.2/src/config.h0000644000175000017500000001573412175546630012156 00000000000000/* src/config.h. Generated from config.h.in by configure. */ /* src/config.h.in. Generated from configure.ac by autoheader. */ /* always defined to indicate that i18n is enabled */ #define ENABLE_NLS 1 /* Gettext package name */ #define GETTEXT_PACKAGE "viking" /* Define to 1 if you have the `bind_textdomain_codeset' function. */ #define HAVE_BIND_TEXTDOMAIN_CODESET 1 /* Define to 1 if you have the `dcgettext' function. */ #define HAVE_DCGETTEXT 1 /* Define to 1 if you have the header file. */ #define HAVE_EXPAT_H 1 /* Define to 1 if you have the `floor' function. */ /* #undef HAVE_FLOOR */ /* Define if the GNU gettext() function is already present or preinstalled. */ #define HAVE_GETTEXT 1 /* Define to 1 if you have the header file. */ #define HAVE_INTTYPES_H 1 /* Define if your file defines LC_MESSAGES. */ #define HAVE_LC_MESSAGES 1 /* Define to 1 if you have a functional curl library. */ #define HAVE_LIBCURL 1 /* Define to 1 if you have the `exif' library (-lexif). */ #define HAVE_LIBEXIF 1 /* Define to 1 if you have the `gps' library (-lgps). */ #define HAVE_LIBGPS 1 /* Define to 1 if you have the `m' library (-lm). */ #define HAVE_LIBM 1 /* Define to 1 if you have the `X11' library (-lX11). */ #define HAVE_LIBX11 1 /* Define to 1 if you have the `z' library (-lz). */ #define HAVE_LIBZ 1 /* Define to 1 if you have the header file. */ #define HAVE_LOCALE_H 1 /* Define to 1 if you have the header file. */ #define HAVE_MALLOC_H 1 /* Define to 1 if you have the header file. */ #define HAVE_MATH_H 1 /* Define to 1 if you have the header file. */ #define HAVE_MEMORY_H 1 /* Define to 1 if you have the `memset' function. */ #define HAVE_MEMSET 1 /* Define to 1 if you have the `mkdtemp' function. */ #define HAVE_MKDTEMP 1 /* Define to 1 if you have the `pow' function. */ /* #undef HAVE_POW */ /* Define to 1 if you have the `realpath' function. */ #define HAVE_REALPATH 1 /* Define to 1 if you have the `sqrt' function. */ /* #undef HAVE_SQRT */ /* Define to 1 if `stat' has the bug that it succeeds when given the zero-length file name argument. */ /* #undef HAVE_STAT_EMPTY_STRING_BUG */ /* Define to 1 if you have the header file. */ #define HAVE_STDINT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDLIB_H 1 /* Define to 1 if you have the `strcasecmp' function. */ #define HAVE_STRCASECMP 1 /* Define to 1 if you have the `strchr' function. */ #define HAVE_STRCHR 1 /* Define to 1 if you have the `strdup' function. */ #define HAVE_STRDUP 1 /* Define to 1 if you have the header file. */ #define HAVE_STRINGS_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STRING_H 1 /* Define to 1 if you have the `strncasecmp' function. */ #define HAVE_STRNCASECMP 1 /* Define to 1 if you have the `strtol' function. */ #define HAVE_STRTOL 1 /* Define to 1 if you have the `strtoul' function. */ #define HAVE_STRTOUL 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_PARAM_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_STAT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TYPES_H 1 /* Define to 1 if you have the header file. */ #define HAVE_UNISTD_H 1 /* Define to 1 if you have the header file. */ #define HAVE_UTIME_H 1 /* Define to 1 if you have the header file. */ #define HAVE_X11_XLIB_H 1 /* Defined if libcurl supports AsynchDNS */ /* #undef LIBCURL_FEATURE_ASYNCHDNS */ /* Defined if libcurl supports IDN */ #define LIBCURL_FEATURE_IDN 1 /* Defined if libcurl supports IPv6 */ #define LIBCURL_FEATURE_IPV6 1 /* Defined if libcurl supports KRB4 */ /* #undef LIBCURL_FEATURE_KRB4 */ /* Defined if libcurl supports libz */ #define LIBCURL_FEATURE_LIBZ 1 /* Defined if libcurl supports NTLM */ #define LIBCURL_FEATURE_NTLM 1 /* Defined if libcurl supports SSL */ #define LIBCURL_FEATURE_SSL 1 /* Defined if libcurl supports SSPI */ /* #undef LIBCURL_FEATURE_SSPI */ /* Defined if libcurl supports DICT */ #define LIBCURL_PROTOCOL_DICT 1 /* Defined if libcurl supports FILE */ #define LIBCURL_PROTOCOL_FILE 1 /* Defined if libcurl supports FTP */ #define LIBCURL_PROTOCOL_FTP 1 /* Defined if libcurl supports FTPS */ #define LIBCURL_PROTOCOL_FTPS 1 /* Defined if libcurl supports HTTP */ #define LIBCURL_PROTOCOL_HTTP 1 /* Defined if libcurl supports HTTPS */ #define LIBCURL_PROTOCOL_HTTPS 1 /* Defined if libcurl supports LDAP */ #define LIBCURL_PROTOCOL_LDAP 1 /* Defined if libcurl supports TELNET */ #define LIBCURL_PROTOCOL_TELNET 1 /* Defined if libcurl supports TFTP */ #define LIBCURL_PROTOCOL_TFTP 1 /* Define the location where the catalogs will be installed */ #define LOCALEDIR "/usr/local/share/locale" /* Define to 1 if `lstat' dereferences a symlink specified with a trailing slash. */ #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 /* Name of package */ #define PACKAGE "viking" /* Define to the address where bug reports for this package should be sent. */ #define PACKAGE_BUGREPORT "" /* Define to the full name of this package. */ #define PACKAGE_NAME "viking" /* Define to the full name and version of this package. */ #define PACKAGE_STRING "viking 1.4.2" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "viking" /* Define to the home page for this package. */ #define PACKAGE_URL "" /* Define to the version of this package. */ #define PACKAGE_VERSION "1.4.2" /* Define to 1 if you have the ANSI C header files. */ #define STDC_HEADERS 1 /* Version number of package */ #define VERSION "1.4.2" /* NO ALPHABETIZED TRW */ #define VIK_CONFIG_ALPHABETIZED_TRW /**/ /* BING STUFF */ #define VIK_CONFIG_BING /**/ /* BLUEMARBLE STUFF */ #define VIK_CONFIG_BLUEMARBLE /**/ /* Age of tiles before checking it (in seconds) */ #define VIK_CONFIG_DEFAULT_TILE_AGE 604800 /* DEM24K STUFF */ /* #undef VIK_CONFIG_DEM24K */ /* EXPEDIA STUFF */ /* #undef VIK_CONFIG_EXPEDIA */ /* GEOCACHES STUFF */ /* #undef VIK_CONFIG_GEOCACHES */ /* GEONAMES STUFF */ #define VIK_CONFIG_GEONAMES /**/ /* GEOTAG STUFF */ #define VIK_CONFIG_GEOTAG /**/ /* GOOGLE STUFF */ #define VIK_CONFIG_GOOGLE /**/ /* Size of the map cache */ #define VIK_CONFIG_MAPCACHE_SIZE 128 /* OPENSTREETMAP STUFF */ #define VIK_CONFIG_OPENSTREETMAP /**/ /* REALTIME GPS TRACKING STUFF */ #define VIK_CONFIG_REALTIME_GPS_TRACKING /**/ /* Method for the search */ #define VIK_CONFIG_SEARCH VIK_CONFIG_SEARCH_GOOGLE /* Id. for searching via GEONAMES */ #define VIK_CONFIG_SEARCH_GEONAMES 2 /* Id. for searching via GOOGLE */ #define VIK_CONFIG_SEARCH_GOOGLE 1 /* SPOTMAPS STUFF */ #define VIK_CONFIG_SPOTMAPS /**/ /* TERRASERVER STUFF */ #define VIK_CONFIG_TERRASERVER /**/ /* Define to empty if `const' does not conform to ANSI C. */ /* #undef const */ /* Define curl_free() as free() if our version of curl lacks curl_free. */ /* #undef curl_free */ /* Define to `int' if does not define. */ /* #undef mode_t */ viking-1.4.2/src/terraserver.h0000644000175000017500000000202212122673673013237 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef __VIKING_TERRASERVER_H #define __VIKING_TERRASERVER_H #include G_BEGIN_DECLS #include "vikcoord.h" #include "mapcoord.h" void terraserver_init(); G_END_DECLS #endif viking-1.4.2/src/osm-traces.h0000644000175000017500000000245212175546146012761 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2007, Guilhem Bonnefille * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef __VIKING_OSM_TRACES_H #define __VIKING_OSM_TRACES_H #include #include G_BEGIN_DECLS void osm_traces_init(); void osm_traces_upload_cb(gpointer layer_and_vlp[2], guint file_type); void osm_traces_upload_track_cb(gpointer pass_along[8]); void osm_set_login (const gchar *user_, const gchar *password_); gchar *osm_get_login(); void osm_login_widgets (GtkWidget *user_entry, GtkWidget *password_entry); G_BEGIN_DECLS #endif viking-1.4.2/src/mapcache.h0000644000175000017500000000267312174331626012444 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef __VIKING_MAPCACHE_H #define __VIKING_MAPCACHE_H #include #include G_BEGIN_DECLS void a_mapcache_init (); void a_mapcache_add ( GdkPixbuf *pixbuf, gint x, gint y, gint z, guint16 type, guint zoom, guint8 alpha, gdouble xshrinkfactor, gdouble yshrinkfactor ); GdkPixbuf *a_mapcache_get ( gint x, gint y, gint z, guint16 type, guint zoom, guint8 alpha, gdouble xshrinkfactor, gdouble yshrinkfactor ); void a_mapcache_remove_all_shrinkfactors ( gint x, gint y, gint z, guint16 type, guint zoom ); void a_mapcache_flush (); void a_mapcache_uninit (); G_END_DECLS #endif viking-1.4.2/src/datasource_google.c0000644000175000017500000001100312175546146014355 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include "viking.h" #include "babel.h" #include "gpx.h" #include "acquire.h" #define GOOGLE_DIRECTIONS_STRING "maps.google.com/maps?q=from:%s+to:%s&output=js" typedef struct { GtkWidget *from_entry, *to_entry; } datasource_google_widgets_t; static gchar *last_from_str = NULL; static gchar *last_to_str = NULL; static gpointer datasource_google_init( ); static void datasource_google_add_setup_widgets ( GtkWidget *dialog, VikViewport *vvp, gpointer user_data ); static void datasource_google_get_cmd_string ( datasource_google_widgets_t *widgets, gchar **cmd, gchar **input_file_type, DownloadMapOptions *options ); static void datasource_google_cleanup ( gpointer data ); VikDataSourceInterface vik_datasource_google_interface = { N_("Google Directions"), N_("Google Directions"), VIK_DATASOURCE_ADDTOLAYER, VIK_DATASOURCE_INPUTTYPE_NONE, TRUE, TRUE, TRUE, (VikDataSourceInitFunc) datasource_google_init, (VikDataSourceCheckExistenceFunc) NULL, (VikDataSourceAddSetupWidgetsFunc) datasource_google_add_setup_widgets, (VikDataSourceGetCmdStringFunc) datasource_google_get_cmd_string, (VikDataSourceProcessFunc) a_babel_convert_from_url, (VikDataSourceProgressFunc) NULL, (VikDataSourceAddProgressWidgetsFunc) NULL, (VikDataSourceCleanupFunc) datasource_google_cleanup, (VikDataSourceOffFunc) NULL, }; static gpointer datasource_google_init ( ) { datasource_google_widgets_t *widgets = g_malloc(sizeof(*widgets)); return widgets; } static void datasource_google_add_setup_widgets ( GtkWidget *dialog, VikViewport *vvp, gpointer user_data ) { datasource_google_widgets_t *widgets = (datasource_google_widgets_t *)user_data; GtkWidget *from_label, *to_label; from_label = gtk_label_new (_("From:")); widgets->from_entry = gtk_entry_new(); to_label = gtk_label_new (_("To:")); widgets->to_entry = gtk_entry_new(); if (last_from_str) gtk_entry_set_text(GTK_ENTRY(widgets->from_entry), last_from_str); if (last_to_str) gtk_entry_set_text(GTK_ENTRY(widgets->to_entry), last_to_str); gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(dialog)->vbox), from_label, FALSE, FALSE, 5 ); gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(dialog)->vbox), widgets->from_entry, FALSE, FALSE, 5 ); gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(dialog)->vbox), to_label, FALSE, FALSE, 5 ); gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(dialog)->vbox), widgets->to_entry, FALSE, FALSE, 5 ); gtk_widget_show_all(dialog); } static void datasource_google_get_cmd_string ( datasource_google_widgets_t *widgets, gchar **cmd, gchar **input_file_type, DownloadMapOptions *options ) { /* TODO: special characters handling!!! */ gchar *from_quoted, *to_quoted; gchar **from_split, **to_split; from_quoted = g_shell_quote ( gtk_entry_get_text ( GTK_ENTRY(widgets->from_entry) ) ); to_quoted = g_shell_quote ( gtk_entry_get_text ( GTK_ENTRY(widgets->to_entry) ) ); from_split = g_strsplit( from_quoted, " ", 0); to_split = g_strsplit( to_quoted, " ", 0); from_quoted = g_strjoinv( "%20", from_split); to_quoted = g_strjoinv( "%20", to_split); *cmd = g_strdup_printf( GOOGLE_DIRECTIONS_STRING, from_quoted, to_quoted ); *input_file_type = g_strdup("google"); options = NULL; g_free(last_from_str); g_free(last_to_str); last_from_str = g_strdup( gtk_entry_get_text ( GTK_ENTRY(widgets->from_entry) )); last_to_str = g_strdup( gtk_entry_get_text ( GTK_ENTRY(widgets->to_entry) )); g_free(from_quoted); g_free(to_quoted); g_strfreev(from_split); g_strfreev(to_split); } static void datasource_google_cleanup ( gpointer data ) { g_free ( data ); } viking-1.4.2/src/vikgoto.c0000644000175000017500000001344512175546146012365 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * Copyright (C) 2009, Guilhem Bonnefille * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include #include #include #include #include "viking.h" #include "util.h" #include "vikgototool.h" #include "vikgoto.h" static gchar *last_goto_str = NULL; static VikCoord *last_coord = NULL; static gchar *last_successful_goto_str = NULL; static GList *goto_tools_list = NULL; int last_goto_tool = 0; void vik_goto_register ( VikGotoTool *tool ) { if ( IS_VIK_GOTO_TOOL( tool ) ) goto_tools_list = g_list_append ( goto_tools_list, g_object_ref ( tool ) ); } void vik_goto_unregister_all () { g_list_foreach ( goto_tools_list, (GFunc) g_object_unref, NULL ); } gchar * a_vik_goto_get_search_string_for_this_place(VikWindow *vw) { if (!last_coord) return NULL; VikViewport *vvp = vik_window_viewport(vw); const VikCoord *cur_center = vik_viewport_get_center(vvp); if (vik_coord_equals(cur_center, last_coord)) { return(last_successful_goto_str); } else return NULL; } static void display_no_tool(VikWindow *vw) { GtkWidget *dialog = NULL; dialog = gtk_message_dialog_new ( GTK_WINDOW(vw), GTK_DIALOG_MODAL, GTK_MESSAGE_WARNING, GTK_BUTTONS_OK, _("No goto tool available.") ); gtk_dialog_run ( GTK_DIALOG(dialog) ); gtk_widget_destroy(dialog); } static gboolean prompt_try_again(VikWindow *vw) { GtkWidget *dialog = NULL; gboolean ret = TRUE; dialog = gtk_dialog_new_with_buttons ( "", GTK_WINDOW(vw), 0, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, NULL ); gtk_window_set_title(GTK_WINDOW(dialog), _("goto")); GtkWidget *goto_label = gtk_label_new(_("I don't know that place. Do you want another goto?")); gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(dialog)->vbox), goto_label, FALSE, FALSE, 5 ); gtk_dialog_set_default_response ( GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT ); gtk_widget_show_all(dialog); if ( gtk_dialog_run ( GTK_DIALOG(dialog) ) != GTK_RESPONSE_ACCEPT ) ret = FALSE; gtk_widget_destroy(dialog); return ret; } static gchar * a_prompt_for_goto_string(VikWindow *vw) { GtkWidget *dialog = NULL; dialog = gtk_dialog_new_with_buttons ( "", GTK_WINDOW(vw), 0, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, NULL ); gtk_window_set_title(GTK_WINDOW(dialog), _("goto")); GtkWidget *tool_label = gtk_label_new(_("goto provider:")); GtkWidget *tool_list = gtk_combo_box_new_text (); GList *current = g_list_first (goto_tools_list); while (current != NULL) { char *label = NULL; VikGotoTool *tool = current->data; label = vik_goto_tool_get_label (tool); gtk_combo_box_append_text ( GTK_COMBO_BOX( tool_list ), label); current = g_list_next (current); } /* Set the previously selected provider as default */ gtk_combo_box_set_active ( GTK_COMBO_BOX( tool_list ), last_goto_tool); GtkWidget *goto_label = gtk_label_new(_("Enter address or place name:")); GtkWidget *goto_entry = gtk_entry_new(); if (last_goto_str) gtk_entry_set_text(GTK_ENTRY(goto_entry), last_goto_str); gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(dialog)->vbox), tool_label, FALSE, FALSE, 5 ); gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(dialog)->vbox), tool_list, FALSE, FALSE, 5 ); gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(dialog)->vbox), goto_label, FALSE, FALSE, 5 ); gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(dialog)->vbox), goto_entry, FALSE, FALSE, 5 ); gtk_dialog_set_default_response ( GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT ); gtk_widget_show_all(dialog); if ( gtk_dialog_run ( GTK_DIALOG(dialog) ) != GTK_RESPONSE_ACCEPT ) { gtk_widget_destroy(dialog); return NULL; } last_goto_tool = gtk_combo_box_get_active ( GTK_COMBO_BOX (tool_list) ); gchar *goto_str = g_strdup ( gtk_entry_get_text ( GTK_ENTRY(goto_entry) ) ); gtk_widget_destroy(dialog); if (goto_str[0] != '\0') { if (last_goto_str) g_free(last_goto_str); last_goto_str = g_strdup(goto_str); } return(goto_str); /* goto_str needs to be freed by caller */ } void a_vik_goto(VikWindow *vw, VikViewport *vvp) { VikCoord new_center; gchar *s_str; gboolean more = TRUE; if (goto_tools_list == NULL) { /* Empty list */ display_no_tool(vw); return; } do { s_str = a_prompt_for_goto_string(vw); if ((!s_str) || (s_str[0] == 0)) { more = FALSE; } else if (!vik_goto_tool_get_coord(g_list_nth_data (goto_tools_list, last_goto_tool), vw, vvp, s_str, &new_center)) { if (last_coord) g_free(last_coord); last_coord = g_malloc(sizeof(VikCoord)); *last_coord = new_center; if (last_successful_goto_str) g_free(last_successful_goto_str); last_successful_goto_str = g_strdup(last_goto_str); vik_viewport_set_center_coord(vvp, &new_center); more = FALSE; } else if (!prompt_try_again(vw)) more = FALSE; g_free(s_str); } while (more); } viking-1.4.2/src/Makefile.in0000644000175000017500000013567612175546614012617 00000000000000# Makefile.in generated by automake 1.13.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # This is the Makefile for the viking gps viewer program. # This file is licensed through the GPL version 2 or newer. VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : bin_PROGRAMS = viking$(EXEEXT) @BING_TRUE@am__append_1 = \ @BING_TRUE@ bingmapsource.c bingmapsource.h \ @BING_TRUE@ bing.c bing.h @GOOGLE_TRUE@am__append_2 = \ @GOOGLE_TRUE@ google.c google.h @TERRASERVER_TRUE@am__append_3 = \ @TERRASERVER_TRUE@ terraservermapsource.c terraservermapsource.h \ @TERRASERVER_TRUE@ terraserver.c terraserver.h @EXPEDIA_TRUE@am__append_4 = \ @EXPEDIA_TRUE@ expedia.c expedia.h @OPENSTREETMAP_TRUE@am__append_5 = \ @OPENSTREETMAP_TRUE@ osm.c osm.h \ @OPENSTREETMAP_TRUE@ osm-traces.c osm-traces.h \ @OPENSTREETMAP_TRUE@ datasource_osm_my_traces.c \ @OPENSTREETMAP_TRUE@ datasource_osm.c @BLUEMARBLE_TRUE@am__append_6 = \ @BLUEMARBLE_TRUE@ bluemarble.c bluemarble.h @GEONAMES_TRUE@am__append_7 = \ @GEONAMES_TRUE@ geonames.c geonames.h \ @GEONAMES_TRUE@ geonamessearch.c geonamessearch.h #endif @GEOTAG_TRUE@am__append_8 = \ @GEOTAG_TRUE@ datasource_geotag.c \ @GEOTAG_TRUE@ geotag_exif.c geotag_exif.h \ @GEOTAG_TRUE@ viktrwlayer_geotag.c viktrwlayer_geotag.h \ @GEOTAG_TRUE@ libjpeg/jpeg-data.c libjpeg/jpeg-data.h \ @GEOTAG_TRUE@ libjpeg/jpeg-marker.c libjpeg/jpeg-marker.h subdir = src DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(srcdir)/config.h.in $(top_srcdir)/mkinstalldirs \ $(top_srcdir)/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/expat.m4 \ $(top_srcdir)/m4/libcurl.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; am__v_AR_1 = libviking_a_AR = $(AR) $(ARFLAGS) libviking_a_LIBADD = am__libviking_a_SOURCES_DIST = bbox.h modules.h modules.c \ curl_download.c curl_download.h menu.xml.h \ degrees_converters.c degrees_converters.h globals.c globals.h \ viking.h mapcoord.h config.h viktrack.c viktrack.h \ vikwaypoint.c vikwaypoint.h clipboard.c clipboard.h coords.c \ coords.h gpsmapper.c gpsmapper.h gpspoint.c gpspoint.h dir.c \ dir.h file.c file.h authors.h documenters.h dialog.c dialog.h \ util.c util.h download.c download.h vikenumtypes.c \ vikenumtypes.h viktreeview.c viktreeview.h viktrwlayer.c \ viktrwlayer.h viklayer.c viklayer.h viklayerspanel.c \ viklayerspanel.h vikcoordlayer.c vikcoordlayer.h vikstatus.c \ vikstatus.h vikwindow.c vikwindow.h vikviewport.c \ vikviewport.h vikaggregatelayer.c vikaggregatelayer.h \ vikgobjectbuilder.c vikgobjectbuilder.h vikgpslayer.c \ vikgpslayer.h vikgeoreflayer.c vikgeoreflayer.h vikfileentry.c \ vikfileentry.h vikgototool.c vikgototool.h vikgotoxmltool.c \ vikgotoxmltool.h vikgoto.c vikgoto.h viktrwlayer_tpwin.c \ viktrwlayer_tpwin.h viktrwlayer_propwin.c \ viktrwlayer_propwin.h thumbnails.c thumbnails.h background.c \ background.h vikradiogroup.c vikradiogroup.h vikcoord.c \ vikcoord.h mapcache.c mapcache.h vikmapsource.c vikmapsource.h \ vikmapsourcedefault.c vikmapsourcedefault.h vikmapslayer.c \ vikmapslayer.h vikmapslayer_compat.c vikmapslayer_compat.h \ vikmaptype.c vikmaptype.h vikslippymapsource.c \ vikslippymapsource.h vikwmscmapsource.c vikwmscmapsource.h \ viktmsmapsource.c viktmsmapsource.h gpx.c gpx.h \ garminsymbols.c garminsymbols.h acquire.c acquire.h babel.c \ babel.h datasource_file.c datasource_gps.c datasource_gps.h \ datasource_google.c datasource_gc.c datasource_bfilter.c \ datasource_wikipedia.c datasources.h googlesearch.c \ googlesearch.h dem.c dem.h vikdemlayer.h vikdemlayer.c \ vikfilelist.c vikfilelist.h vikexttool.c vikexttool.h \ vikexttools.c vikexttools.h vikwebtool.c vikwebtool.h \ vikwebtoolcenter.c vikwebtoolcenter.h vikwebtoolbounds.c \ vikwebtoolbounds.h dems.c dems.h srtm_continent.c uibuilder.c \ uibuilder.h print-preview.c print-preview.h print.c print.h \ preferences.c preferences.h bingmapsource.c bingmapsource.h \ bing.c bing.h google.c google.h terraservermapsource.c \ terraservermapsource.h terraserver.c terraserver.h expedia.c \ expedia.h osm.c osm.h osm-traces.c osm-traces.h \ datasource_osm_my_traces.c datasource_osm.c bluemarble.c \ bluemarble.h geonames.c geonames.h geonamessearch.c \ geonamessearch.h spotmaps.c spotmaps.h datasource_geotag.c \ geotag_exif.c geotag_exif.h viktrwlayer_geotag.c \ viktrwlayer_geotag.h libjpeg/jpeg-data.c libjpeg/jpeg-data.h \ libjpeg/jpeg-marker.c libjpeg/jpeg-marker.h @BING_TRUE@am__objects_1 = bingmapsource.$(OBJEXT) bing.$(OBJEXT) @GOOGLE_TRUE@am__objects_2 = google.$(OBJEXT) @TERRASERVER_TRUE@am__objects_3 = terraservermapsource.$(OBJEXT) \ @TERRASERVER_TRUE@ terraserver.$(OBJEXT) @EXPEDIA_TRUE@am__objects_4 = expedia.$(OBJEXT) @OPENSTREETMAP_TRUE@am__objects_5 = osm.$(OBJEXT) osm-traces.$(OBJEXT) \ @OPENSTREETMAP_TRUE@ datasource_osm_my_traces.$(OBJEXT) \ @OPENSTREETMAP_TRUE@ datasource_osm.$(OBJEXT) @BLUEMARBLE_TRUE@am__objects_6 = bluemarble.$(OBJEXT) @GEONAMES_TRUE@am__objects_7 = geonames.$(OBJEXT) \ @GEONAMES_TRUE@ geonamessearch.$(OBJEXT) @GEOTAG_TRUE@am__objects_8 = datasource_geotag.$(OBJEXT) \ @GEOTAG_TRUE@ geotag_exif.$(OBJEXT) \ @GEOTAG_TRUE@ viktrwlayer_geotag.$(OBJEXT) jpeg-data.$(OBJEXT) \ @GEOTAG_TRUE@ jpeg-marker.$(OBJEXT) am_libviking_a_OBJECTS = modules.$(OBJEXT) curl_download.$(OBJEXT) \ degrees_converters.$(OBJEXT) globals.$(OBJEXT) \ viktrack.$(OBJEXT) vikwaypoint.$(OBJEXT) clipboard.$(OBJEXT) \ coords.$(OBJEXT) gpsmapper.$(OBJEXT) gpspoint.$(OBJEXT) \ dir.$(OBJEXT) file.$(OBJEXT) dialog.$(OBJEXT) util.$(OBJEXT) \ download.$(OBJEXT) vikenumtypes.$(OBJEXT) \ viktreeview.$(OBJEXT) viktrwlayer.$(OBJEXT) viklayer.$(OBJEXT) \ viklayerspanel.$(OBJEXT) vikcoordlayer.$(OBJEXT) \ vikstatus.$(OBJEXT) vikwindow.$(OBJEXT) vikviewport.$(OBJEXT) \ vikaggregatelayer.$(OBJEXT) vikgobjectbuilder.$(OBJEXT) \ vikgpslayer.$(OBJEXT) vikgeoreflayer.$(OBJEXT) \ vikfileentry.$(OBJEXT) vikgototool.$(OBJEXT) \ vikgotoxmltool.$(OBJEXT) vikgoto.$(OBJEXT) \ viktrwlayer_tpwin.$(OBJEXT) viktrwlayer_propwin.$(OBJEXT) \ thumbnails.$(OBJEXT) background.$(OBJEXT) \ vikradiogroup.$(OBJEXT) vikcoord.$(OBJEXT) mapcache.$(OBJEXT) \ vikmapsource.$(OBJEXT) vikmapsourcedefault.$(OBJEXT) \ vikmapslayer.$(OBJEXT) vikmapslayer_compat.$(OBJEXT) \ vikmaptype.$(OBJEXT) vikslippymapsource.$(OBJEXT) \ vikwmscmapsource.$(OBJEXT) viktmsmapsource.$(OBJEXT) \ gpx.$(OBJEXT) garminsymbols.$(OBJEXT) acquire.$(OBJEXT) \ babel.$(OBJEXT) datasource_file.$(OBJEXT) \ datasource_gps.$(OBJEXT) datasource_google.$(OBJEXT) \ datasource_gc.$(OBJEXT) datasource_bfilter.$(OBJEXT) \ datasource_wikipedia.$(OBJEXT) googlesearch.$(OBJEXT) \ dem.$(OBJEXT) vikdemlayer.$(OBJEXT) vikfilelist.$(OBJEXT) \ vikexttool.$(OBJEXT) vikexttools.$(OBJEXT) \ vikwebtool.$(OBJEXT) vikwebtoolcenter.$(OBJEXT) \ vikwebtoolbounds.$(OBJEXT) dems.$(OBJEXT) \ srtm_continent.$(OBJEXT) uibuilder.$(OBJEXT) \ print-preview.$(OBJEXT) print.$(OBJEXT) preferences.$(OBJEXT) \ $(am__objects_1) $(am__objects_2) $(am__objects_3) \ $(am__objects_4) $(am__objects_5) $(am__objects_6) \ $(am__objects_7) spotmaps.$(OBJEXT) $(am__objects_8) libviking_a_OBJECTS = $(am_libviking_a_OBJECTS) am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(desktopdir)" PROGRAMS = $(bin_PROGRAMS) am_viking_OBJECTS = main.$(OBJEXT) viking_OBJECTS = $(am_viking_OBJECTS) viking_LDADD = $(LDADD) am__DEPENDENCIES_1 = viking_DEPENDENCIES = libviking.a $(am__DEPENDENCIES_1) \ icons/libicons.a AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libviking_a_SOURCES) $(viking_SOURCES) DIST_SOURCES = $(am__libviking_a_SOURCES_DIST) $(viking_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } DATA = $(desktop_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ $(LISP)config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_STATUS_DEPENDENCIES = @CONFIG_STATUS_DEPENDENCIES@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DB2MAN_XSL = @DB2MAN_XSL@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ EXPAT_CFLAGS = @EXPAT_CFLAGS@ EXPAT_LIBS = @EXPAT_LIBS@ GDK_PIXBUF_CSOURCE = @GDK_PIXBUF_CSOURCE@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GLIB_MKENUMS = @GLIB_MKENUMS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HELP_DIR = @HELP_DIR@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ LDFLAGS = @LDFLAGS@ LIBCURL = @LIBCURL@ LIBCURL_CPPFLAGS = @LIBCURL_CPPFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_CFLAGS = @PACKAGE_CFLAGS@ PACKAGE_LIBS = @PACKAGE_LIBS@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ POW_LIB = @POW_LIB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XP = @XP@ _libcurl_config = @_libcurl_config@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = icons noinst_LIBRARIES = libviking.a BUILT_SOURCES = authors.h documenters.h vikenumtypes.h vikenumtypes.c EXTRA_DIST = docbook2documenters.xsl vikenumtypes.h.template \ vikenumtypes.c.template $(desktop_in_files) ENUM_H_FILES = \ vikviewport.h #if SPOTMAPS libviking_a_SOURCES = bbox.h modules.h modules.c curl_download.c \ curl_download.h menu.xml.h degrees_converters.c \ degrees_converters.h globals.c globals.h viking.h mapcoord.h \ config.h viktrack.c viktrack.h vikwaypoint.c vikwaypoint.h \ clipboard.c clipboard.h coords.c coords.h gpsmapper.c \ gpsmapper.h gpspoint.c gpspoint.h dir.c dir.h file.c file.h \ authors.h documenters.h dialog.c dialog.h util.c util.h \ download.c download.h vikenumtypes.c vikenumtypes.h \ viktreeview.c viktreeview.h viktrwlayer.c viktrwlayer.h \ viklayer.c viklayer.h viklayerspanel.c viklayerspanel.h \ vikcoordlayer.c vikcoordlayer.h vikstatus.c vikstatus.h \ vikwindow.c vikwindow.h vikviewport.c vikviewport.h \ vikaggregatelayer.c vikaggregatelayer.h vikgobjectbuilder.c \ vikgobjectbuilder.h vikgpslayer.c vikgpslayer.h \ vikgeoreflayer.c vikgeoreflayer.h vikfileentry.c \ vikfileentry.h vikgototool.c vikgototool.h vikgotoxmltool.c \ vikgotoxmltool.h vikgoto.c vikgoto.h viktrwlayer_tpwin.c \ viktrwlayer_tpwin.h viktrwlayer_propwin.c \ viktrwlayer_propwin.h thumbnails.c thumbnails.h background.c \ background.h vikradiogroup.c vikradiogroup.h vikcoord.c \ vikcoord.h mapcache.c mapcache.h vikmapsource.c vikmapsource.h \ vikmapsourcedefault.c vikmapsourcedefault.h vikmapslayer.c \ vikmapslayer.h vikmapslayer_compat.c vikmapslayer_compat.h \ vikmaptype.c vikmaptype.h vikslippymapsource.c \ vikslippymapsource.h vikwmscmapsource.c vikwmscmapsource.h \ viktmsmapsource.c viktmsmapsource.h gpx.c gpx.h \ garminsymbols.c garminsymbols.h acquire.c acquire.h babel.c \ babel.h datasource_file.c datasource_gps.c datasource_gps.h \ datasource_google.c datasource_gc.c datasource_bfilter.c \ datasource_wikipedia.c datasources.h googlesearch.c \ googlesearch.h dem.c dem.h vikdemlayer.h vikdemlayer.c \ vikfilelist.c vikfilelist.h vikexttool.c vikexttool.h \ vikexttools.c vikexttools.h vikwebtool.c vikwebtool.h \ vikwebtoolcenter.c vikwebtoolcenter.h vikwebtoolbounds.c \ vikwebtoolbounds.h dems.c dems.h srtm_continent.c uibuilder.c \ uibuilder.h print-preview.c print-preview.h print.c print.h \ preferences.c preferences.h $(am__append_1) $(am__append_2) \ $(am__append_3) $(am__append_4) $(am__append_5) \ $(am__append_6) $(am__append_7) spotmaps.c spotmaps.h \ $(am__append_8) viking_SOURCES = main.c LDADD = libviking.a $(PACKAGE_LIBS) @EXPAT_LIBS@ @LIBCURL@ icons/libicons.a AM_CFLAGS = -Wall -g -D_GNU_SOURCE \ $(PACKAGE_CFLAGS) \ @EXPAT_CFLAGS@ @LIBCURL_CPPFLAGS@ AM_CPPFLAGS = \ -DVIKING_DATADIR=\""$(pkgdatadir)"\" \ -DVIKING_SYSCONFDIR=\""$(sysconfdir)/$(PACKAGE)"\" desktopdir = $(datadir)/applications desktop_in_files = viking.desktop.in desktop_DATA = $(desktop_in_files:.desktop.in=.desktop) CLEANFILES = $(BUILT_SOURCES) $(desktop_DATA) all: $(BUILT_SOURCES) config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): config.h: stamp-h1 @if test ! -f $@; then rm -f stamp-h1; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status src/config.h $(srcdir)/config.h.in: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libviking.a: $(libviking_a_OBJECTS) $(libviking_a_DEPENDENCIES) $(EXTRA_libviking_a_DEPENDENCIES) $(AM_V_at)-rm -f libviking.a $(AM_V_AR)$(libviking_a_AR) libviking.a $(libviking_a_OBJECTS) $(libviking_a_LIBADD) $(AM_V_at)$(RANLIB) libviking.a install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) viking$(EXEEXT): $(viking_OBJECTS) $(viking_DEPENDENCIES) $(EXTRA_viking_DEPENDENCIES) @rm -f viking$(EXEEXT) $(AM_V_CCLD)$(LINK) $(viking_OBJECTS) $(viking_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/acquire.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/babel.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/background.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bing.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bingmapsource.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bluemarble.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clipboard.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coords.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curl_download.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/datasource_bfilter.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/datasource_file.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/datasource_gc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/datasource_geotag.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/datasource_google.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/datasource_gps.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/datasource_osm.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/datasource_osm_my_traces.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/datasource_wikipedia.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/degrees_converters.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dem.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dems.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dialog.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dir.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/download.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/expedia.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/file.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/garminsymbols.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/geonames.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/geonamessearch.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/geotag_exif.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/globals.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/google.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/googlesearch.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gpsmapper.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gpspoint.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gpx.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jpeg-data.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jpeg-marker.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapcache.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/modules.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/osm-traces.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/osm.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/preferences.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/print-preview.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/print.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spotmaps.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/srtm_continent.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/terraserver.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/terraservermapsource.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/thumbnails.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uibuilder.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/util.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vikaggregatelayer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vikcoord.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vikcoordlayer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vikdemlayer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vikenumtypes.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vikexttool.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vikexttools.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vikfileentry.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vikfilelist.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vikgeoreflayer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vikgobjectbuilder.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vikgoto.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vikgototool.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vikgotoxmltool.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vikgpslayer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/viklayer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/viklayerspanel.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vikmapslayer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vikmapslayer_compat.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vikmapsource.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vikmapsourcedefault.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vikmaptype.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vikradiogroup.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vikslippymapsource.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vikstatus.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/viktmsmapsource.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/viktrack.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/viktreeview.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/viktrwlayer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/viktrwlayer_geotag.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/viktrwlayer_propwin.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/viktrwlayer_tpwin.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vikviewport.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vikwaypoint.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vikwebtool.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vikwebtoolbounds.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vikwebtoolcenter.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vikwindow.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vikwmscmapsource.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` jpeg-data.o: libjpeg/jpeg-data.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT jpeg-data.o -MD -MP -MF $(DEPDIR)/jpeg-data.Tpo -c -o jpeg-data.o `test -f 'libjpeg/jpeg-data.c' || echo '$(srcdir)/'`libjpeg/jpeg-data.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/jpeg-data.Tpo $(DEPDIR)/jpeg-data.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libjpeg/jpeg-data.c' object='jpeg-data.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o jpeg-data.o `test -f 'libjpeg/jpeg-data.c' || echo '$(srcdir)/'`libjpeg/jpeg-data.c jpeg-data.obj: libjpeg/jpeg-data.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT jpeg-data.obj -MD -MP -MF $(DEPDIR)/jpeg-data.Tpo -c -o jpeg-data.obj `if test -f 'libjpeg/jpeg-data.c'; then $(CYGPATH_W) 'libjpeg/jpeg-data.c'; else $(CYGPATH_W) '$(srcdir)/libjpeg/jpeg-data.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/jpeg-data.Tpo $(DEPDIR)/jpeg-data.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libjpeg/jpeg-data.c' object='jpeg-data.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o jpeg-data.obj `if test -f 'libjpeg/jpeg-data.c'; then $(CYGPATH_W) 'libjpeg/jpeg-data.c'; else $(CYGPATH_W) '$(srcdir)/libjpeg/jpeg-data.c'; fi` jpeg-marker.o: libjpeg/jpeg-marker.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT jpeg-marker.o -MD -MP -MF $(DEPDIR)/jpeg-marker.Tpo -c -o jpeg-marker.o `test -f 'libjpeg/jpeg-marker.c' || echo '$(srcdir)/'`libjpeg/jpeg-marker.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/jpeg-marker.Tpo $(DEPDIR)/jpeg-marker.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libjpeg/jpeg-marker.c' object='jpeg-marker.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o jpeg-marker.o `test -f 'libjpeg/jpeg-marker.c' || echo '$(srcdir)/'`libjpeg/jpeg-marker.c jpeg-marker.obj: libjpeg/jpeg-marker.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT jpeg-marker.obj -MD -MP -MF $(DEPDIR)/jpeg-marker.Tpo -c -o jpeg-marker.obj `if test -f 'libjpeg/jpeg-marker.c'; then $(CYGPATH_W) 'libjpeg/jpeg-marker.c'; else $(CYGPATH_W) '$(srcdir)/libjpeg/jpeg-marker.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/jpeg-marker.Tpo $(DEPDIR)/jpeg-marker.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libjpeg/jpeg-marker.c' object='jpeg-marker.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o jpeg-marker.obj `if test -f 'libjpeg/jpeg-marker.c'; then $(CYGPATH_W) 'libjpeg/jpeg-marker.c'; else $(CYGPATH_W) '$(srcdir)/libjpeg/jpeg-marker.c'; fi` install-desktopDATA: $(desktop_DATA) @$(NORMAL_INSTALL) @list='$(desktop_DATA)'; test -n "$(desktopdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(desktopdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(desktopdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(desktopdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(desktopdir)" || exit $$?; \ done uninstall-desktopDATA: @$(NORMAL_UNINSTALL) @list='$(desktop_DATA)'; test -n "$(desktopdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(desktopdir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-recursive all-am: Makefile $(LIBRARIES) $(PROGRAMS) $(DATA) config.h installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(desktopdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-recursive clean-am: clean-binPROGRAMS clean-generic clean-noinstLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-desktopDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-desktopDATA .MAKE: $(am__recursive_targets) all check install install-am \ install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-binPROGRAMS clean-generic \ clean-noinstLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-hdr \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-binPROGRAMS install-data \ install-data-am install-desktopDATA install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-binPROGRAMS \ uninstall-desktopDATA authors.h: $(top_srcdir)/AUTHORS rm -f $@ echo "/* Generated file. */" >> $@ echo "const gchar *AUTHORS[] = {\\" >> $@ sed -e "s/ \*\*.*//" -e 's/^/"/' -e 's/$$/",\\/' -e '$$s/\\$$//' $< >> $@ echo "NULL};" >> $@ @HAVE_XSLTPROC_TRUE@documenters.h: $(top_srcdir)/help/C/viking.xml @HAVE_XSLTPROC_TRUE@ $(XP) $(srcdir)/docbook2documenters.xsl $(top_srcdir)/help/C/viking.xml > $@ @HAVE_XSLTPROC_FALSE@documenters.h: @HAVE_XSLTPROC_FALSE@ rm -f $@ @HAVE_XSLTPROC_FALSE@ echo "/* Generated file. */" >> $@ @HAVE_XSLTPROC_FALSE@ echo "const gchar *DOCUMENTERS[] = {\\" >> $@ @HAVE_XSLTPROC_FALSE@ echo "NULL};" >> $@ vikenumtypes.h: vikenumtypes.h.template $(ENUM_H_FILES) $(GLIB_MKENUMS) (cd $(srcdir) && $(GLIB_MKENUMS) --template vikenumtypes.h.template $(ENUM_H_FILES)) > $@ vikenumtypes.c: vikenumtypes.c.template $(ENUM_H_FILES) $(GLIB_MKENUMS) (cd $(srcdir) && $(GLIB_MKENUMS) --template vikenumtypes.c.template $(ENUM_H_FILES)) > $@ $(BUILT_SOURCES): $(srcdir)/Makefile.am @INTLTOOL_DESKTOP_RULE@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: viking-1.4.2/src/datasource_wikipedia.c0000644000175000017500000000514612122673673015060 00000000000000/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2013, Rob Norris * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include #include "viking.h" #include "acquire.h" #include "geonamessearch.h" static gboolean datasource_wikipedia_process ( VikTrwLayer *vtl, const gchar *cmd, const gchar *extra, BabelStatusFunc status_cb, acq_dialog_widgets_t *adw ); VikDataSourceInterface vik_datasource_wikipedia_interface = { N_("Create Waypoints from Wikipedia Articles"), N_("Wikipedia Waypoints"), VIK_DATASOURCE_CREATENEWLAYER, VIK_DATASOURCE_INPUTTYPE_NONE, FALSE, FALSE, // Not even using the dialog FALSE, // Own method for getting data - does not fit encapsulation with current thread logic (VikDataSourceInitFunc) NULL, (VikDataSourceCheckExistenceFunc) NULL, (VikDataSourceAddSetupWidgetsFunc) NULL, (VikDataSourceGetCmdStringFunc) NULL, (VikDataSourceProcessFunc) datasource_wikipedia_process, (VikDataSourceProgressFunc) NULL, (VikDataSourceAddProgressWidgetsFunc) NULL, (VikDataSourceCleanupFunc) NULL, (VikDataSourceOffFunc) NULL, NULL, 0, NULL, NULL, 0 }; /** * Process selected files and try to generate waypoints storing them in the given vtl */ static gboolean datasource_wikipedia_process ( VikTrwLayer *vtl, const gchar *cmd, const gchar *extra, BabelStatusFunc status_cb, acq_dialog_widgets_t *adw ) { struct LatLon maxmin[2] = { {0.0,0.0}, {0.0,0.0} }; // Note the order is max part first then min part - thus reverse order of use in min_max function: vik_viewport_get_min_max_lat_lon ( adw->vvp, &maxmin[1].lat, &maxmin[0].lat, &maxmin[1].lon, &maxmin[0].lon ); if ( vtl ) { a_geonames_wikipedia_box ( adw->vw, vtl, maxmin ); return TRUE; } else return FALSE; } viking-1.4.2/src/viktrwlayer_propwin.c0000644000175000017500000033076312175546146015051 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * Copyright (C) 2005-2007, Alex Foobarian * Copyright (C) 2007-2008, Quy Tonthat * Copyright (C) 2012, Rob Norris * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef HAVE_MATH_H #include #endif #include #include #include #ifdef HAVE_STRING_H #include #endif #include "coords.h" #include "vikcoord.h" #include "viktrack.h" #include "viktrwlayer.h" #include "viktrwlayer_propwin.h" #include "vikwaypoint.h" #include "dialog.h" #include "globals.h" #include "dems.h" #include "vikviewport.h" /* ugh */ #include "viktreeview.h" /* ugh */ #include #include "viklayer.h" /* ugh */ #include "vikaggregatelayer.h" #include "viklayerspanel.h" /* ugh */ #define PROPWIN_PROFILE_WIDTH 600 #define PROPWIN_PROFILE_HEIGHT 300 typedef enum { PROPWIN_GRAPH_TYPE_ELEVATION_DISTANCE, PROPWIN_GRAPH_TYPE_GRADIENT_DISTANCE, PROPWIN_GRAPH_TYPE_SPEED_TIME, PROPWIN_GRAPH_TYPE_DISTANCE_TIME, PROPWIN_GRAPH_TYPE_ELEVATION_TIME, PROPWIN_GRAPH_TYPE_SPEED_DISTANCE, PROPWIN_GRAPH_TYPE_END, } VikPropWinGraphType_t; /* (Hopefully!) Human friendly altitude grid sizes - note no fixed 'ratio' just numbers that look nice...*/ static const gdouble chunksa[] = {2.0, 5.0, 10.0, 15.0, 20.0, 25.0, 40.0, 50.0, 75.0, 100.0, 150.0, 200.0, 250.0, 375.0, 500.0, 750.0, 1000.0, 2000.0, 5000.0, 10000.0, 100000.0}; /* (Hopefully!) Human friendly gradient grid sizes - note no fixed 'ratio' just numbers that look nice...*/ static const gdouble chunksg[] = {1.0, 2.0, 3.0, 4.0, 5.0, 8.0, 10.0, 12.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 75.0, 100.0, 150.0, 200.0, 250.0, 375.0, 500.0, 750.0, 1000.0, 10000.0, 100000.0}; // Normally gradients should range up to couple hundred precent at most, // however there are possibilities of having points with no altitude after a point with a big altitude // (such as places with invalid DEM values in otherwise mountainous regions) - thus giving huge negative gradients. /* (Hopefully!) Human friendly grid sizes - note no fixed 'ratio' just numbers that look nice...*/ /* As need to cover walking speeds - have many low numbers (but also may go up to airplane speeds!) */ static const gdouble chunkss[] = {1.0, 2.0, 3.0, 4.0, 5.0, 8.0, 10.0, 15.0, 20.0, 25.0, 40.0, 50.0, 75.0, 100.0, 150.0, 200.0, 250.0, 375.0, 500.0, 750.0, 1000.0, 10000.0}; /* (Hopefully!) Human friendly distance grid sizes - note no fixed 'ratio' just numbers that look nice...*/ static const gdouble chunksd[] = {0.1, 0.5, 1.0, 2.0, 3.0, 4.0, 5.0, 8.0, 10.0, 15.0, 20.0, 25.0, 40.0, 50.0, 75.0, 100.0, 150.0, 200.0, 250.0, 375.0, 500.0, 750.0, 1000.0, 10000.0}; typedef struct _propsaved { gboolean saved; GdkImage *img; } PropSaved; typedef struct _propwidgets { gboolean configure_dialog; VikTrwLayer *vtl; VikTrack *tr; gpointer trk_id; VikViewport *vvp; VikLayersPanel *vlp; gint profile_width; gint profile_height; gint profile_width_old; gint profile_height_old; gint profile_width_offset; gint profile_height_offset; GtkWidget *dialog; GtkWidget *w_comment; GtkWidget *w_description; GtkWidget *w_track_length; GtkWidget *w_tp_count; GtkWidget *w_segment_count; GtkWidget *w_duptp_count; GtkWidget *w_max_speed; GtkWidget *w_avg_speed; GtkWidget *w_mvg_speed; GtkWidget *w_avg_dist; GtkWidget *w_elev_range; GtkWidget *w_elev_gain; GtkWidget *w_time_start; GtkWidget *w_time_end; GtkWidget *w_time_dur; GtkWidget *w_color; GtkWidget *w_cur_dist; /*< Current distance */ GtkWidget *w_cur_elevation; GtkWidget *w_cur_gradient_dist; /*< Current distance on gradient graph */ GtkWidget *w_cur_gradient_gradient; /*< Current gradient on gradient graph */ GtkWidget *w_cur_time; /*< Current time */ GtkWidget *w_cur_speed; GtkWidget *w_cur_dist_dist; /*< Current distance on distance graph */ GtkWidget *w_cur_dist_time; /*< Current time on distance graph */ GtkWidget *w_cur_elev_elev; GtkWidget *w_cur_elev_time; GtkWidget *w_cur_speed_dist; GtkWidget *w_cur_speed_speed; GtkWidget *w_show_dem; GtkWidget *w_show_alt_gps_speed; GtkWidget *w_show_gps_speed; GtkWidget *w_show_gradient_gps_speed; GtkWidget *w_show_dist_speed; GtkWidget *w_show_elev_speed; GtkWidget *w_show_sd_gps_speed; gdouble track_length; gdouble track_length_inc_gaps; PropSaved elev_graph_saved_img; PropSaved gradient_graph_saved_img; PropSaved speed_graph_saved_img; PropSaved dist_graph_saved_img; PropSaved elev_time_graph_saved_img; PropSaved speed_dist_graph_saved_img; GtkWidget *elev_box; GtkWidget *gradient_box; GtkWidget *speed_box; GtkWidget *dist_box; GtkWidget *elev_time_box; GtkWidget *speed_dist_box; gdouble *altitudes; gdouble *ats; // altitudes in time gdouble min_altitude; gdouble max_altitude; gdouble draw_min_altitude; gdouble draw_min_altitude_time; gint cia; // Chunk size Index into Altitudes gint ciat; // Chunk size Index into Altitudes / Time // NB cia & ciat are normally same value but sometimes not due to differing methods of altitude array creation // thus also have draw_min_altitude for each altitude graph type gdouble *gradients; gdouble min_gradient; gdouble max_gradient; gdouble draw_min_gradient; gint cig; // Chunk size Index into Gradients gdouble *speeds; gdouble *speeds_dist; gdouble min_speed; gdouble max_speed; gdouble draw_min_speed; gdouble max_speed_dist; gint cis; // Chunk size Index into Speeds gint cisd; // Chunk size Index into Speed/Distance gdouble *distances; gint cid; // Chunk size Index into Distance VikTrackpoint *marker_tp; gboolean is_marker_drawn; VikTrackpoint *blob_tp; gboolean is_blob_drawn; } PropWidgets; static PropWidgets *prop_widgets_new() { PropWidgets *widgets = g_malloc0(sizeof(PropWidgets)); return widgets; } static void prop_widgets_free(PropWidgets *widgets) { if (widgets->elev_graph_saved_img.img) g_object_unref(widgets->elev_graph_saved_img.img); if (widgets->gradient_graph_saved_img.img) g_object_unref(widgets->gradient_graph_saved_img.img); if (widgets->speed_graph_saved_img.img) g_object_unref(widgets->speed_graph_saved_img.img); if (widgets->dist_graph_saved_img.img) g_object_unref(widgets->dist_graph_saved_img.img); if (widgets->elev_time_graph_saved_img.img) g_object_unref(widgets->elev_time_graph_saved_img.img); if (widgets->speed_dist_graph_saved_img.img) g_object_unref(widgets->speed_dist_graph_saved_img.img); if (widgets->altitudes) g_free(widgets->altitudes); if (widgets->gradients) g_free(widgets->gradients); if (widgets->speeds) g_free(widgets->speeds); if (widgets->distances) g_free(widgets->distances); if (widgets->ats) g_free(widgets->ats); if (widgets->speeds_dist) g_free(widgets->speeds_dist); g_free(widgets); } static void minmax_array(const gdouble *array, gdouble *min, gdouble *max, gboolean NO_ALT_TEST, gint PROFILE_WIDTH) { *max = -1000; *min = 20000; guint i; for ( i=0; i < PROFILE_WIDTH; i++ ) { if ( NO_ALT_TEST || (array[i] != VIK_DEFAULT_ALTITUDE) ) { if ( array[i] > *max ) *max = array[i]; if ( array[i] < *min ) *min = array[i]; } } } #define MARGIN 70 #define LINES 5 /** * get_new_min_and_chunk_index: * Returns via pointers: * the new minimum value to be used for the graph * the index in to the chunk sizes array (ci = Chunk Index) */ static void get_new_min_and_chunk_index (gdouble mina, gdouble maxa, const gdouble *chunks, size_t chunky, gdouble *new_min, gint *ci) { /* Get unitized chunk */ /* Find suitable chunk index */ *ci = 0; gdouble diff_chunk = (maxa - mina)/LINES; /* Loop through to find best match */ while (diff_chunk > chunks[*ci]) { (*ci)++; /* Last Resort Check */ if ( *ci == chunky ) { // Use previous value and exit loop (*ci)--; break; } } /* Ensure adjusted minimum .. maximum covers mina->maxa */ // Now work out adjusted minimum point to the nearest lowest chunk divisor value // When negative ensure logic uses lowest value if ( mina < 0 ) *new_min = (gdouble) ( (gint)((mina - chunks[*ci]) / chunks[*ci]) * chunks[*ci] ); else *new_min = (gdouble) ( (gint)(mina / chunks[*ci]) * chunks[*ci] ); // Range not big enough - as new minimum has lowered if ((*new_min + (chunks[*ci] * LINES) < maxa)) { // Next chunk should cover it if ( *ci < chunky-1 ) { (*ci)++; // Remember to adjust the minimum too... if ( mina < 0 ) *new_min = (gdouble) ( (gint)((mina - chunks[*ci]) / chunks[*ci]) * chunks[*ci] ); else *new_min = (gdouble) ( (gint)(mina / chunks[*ci]) * chunks[*ci] ); } } } static VikTrackpoint *set_center_at_graph_position(gdouble event_x, gint img_width, VikTrwLayer *vtl, VikLayersPanel *vlp, VikViewport *vvp, VikTrack *tr, gboolean time_base, gint PROFILE_WIDTH) { VikTrackpoint *trackpoint; gdouble x = event_x - img_width / 2 + PROFILE_WIDTH / 2 - MARGIN / 2; if (x < 0) x = 0; if (x > PROFILE_WIDTH) x = PROFILE_WIDTH; if (time_base) trackpoint = vik_track_get_closest_tp_by_percentage_time ( tr, (gdouble) x / PROFILE_WIDTH, NULL ); else trackpoint = vik_track_get_closest_tp_by_percentage_dist ( tr, (gdouble) x / PROFILE_WIDTH, NULL ); if ( trackpoint ) { VikCoord coord = trackpoint->coord; if ( vlp ) { vik_viewport_set_center_coord ( vik_layers_panel_get_viewport(vlp), &coord ); vik_layers_panel_emit_update ( vlp ); } else { /* since vlp not set, vvp should be valid instead! */ if ( vvp ) vik_viewport_set_center_coord ( vvp, &coord ); vik_layer_emit_update ( VIK_LAYER(vtl) ); } } return trackpoint; } /** * Returns whether the marker was drawn or not and whether the blob was drawn or not */ static void save_image_and_draw_graph_marks (GtkWidget *image, gdouble marker_x, GdkGC *gc, gint blob_x, gint blob_y, PropSaved *saved_img, gint PROFILE_WIDTH, gint PROFILE_HEIGHT, gboolean *marker_drawn, gboolean *blob_drawn) { GdkPixmap *pix = NULL; /* the pixmap = margin + graph area */ gtk_image_get_pixmap(GTK_IMAGE(image), &pix, NULL); /* Restore previously saved image */ if (saved_img->saved) { gdk_draw_image(GDK_DRAWABLE(pix), gc, saved_img->img, 0, 0, 0, 0, MARGIN+PROFILE_WIDTH, PROFILE_HEIGHT); saved_img->saved = FALSE; } // ATM always save whole image - as anywhere could have changed if (saved_img->img) gdk_drawable_copy_to_image(GDK_DRAWABLE(pix), saved_img->img, 0, 0, 0, 0, MARGIN+PROFILE_WIDTH, PROFILE_HEIGHT); else saved_img->img = gdk_drawable_copy_to_image(GDK_DRAWABLE(pix), saved_img->img, 0, 0, 0, 0, MARGIN+PROFILE_WIDTH, PROFILE_HEIGHT); saved_img->saved = TRUE; if ((marker_x >= MARGIN) && (marker_x < (PROFILE_WIDTH + MARGIN))) { gdk_draw_line (GDK_DRAWABLE(pix), gc, marker_x, 0, marker_x, image->allocation.height); *marker_drawn = TRUE; } else *marker_drawn = FALSE; // Draw a square blob to indicate where we are on track for this graph if ( (blob_x >= MARGIN) && (blob_x < (PROFILE_WIDTH + MARGIN)) && (blob_y < PROFILE_HEIGHT) ) { gdk_draw_rectangle (GDK_DRAWABLE(pix), gc, TRUE, blob_x-3, blob_y-3, 6, 6); *blob_drawn = TRUE; } else *blob_drawn = FALSE; // Anywhere on image could have changed if (*marker_drawn || *blob_drawn) gtk_widget_queue_draw(image); } /** * Return the percentage of how far a trackpoint is a long a track via the time method */ static gdouble tp_percentage_by_time ( VikTrack *tr, VikTrackpoint *trackpoint ) { gdouble pc = NAN; if (trackpoint == NULL) return pc; time_t t_start, t_end, t_total; t_start = VIK_TRACKPOINT(tr->trackpoints->data)->timestamp; t_end = VIK_TRACKPOINT(g_list_last(tr->trackpoints)->data)->timestamp; t_total = t_end - t_start; pc = (gdouble)(trackpoint->timestamp - t_start)/t_total; return pc; } /** * Return the percentage of how far a trackpoint is a long a track via the distance method */ static gdouble tp_percentage_by_distance ( VikTrack *tr, VikTrackpoint *trackpoint, gdouble track_length ) { gdouble pc = NAN; if (trackpoint == NULL) return pc; gdouble dist = 0.0; GList *iter; for (iter = tr->trackpoints->next; iter != NULL; iter = iter->next) { dist += vik_coord_diff(&(VIK_TRACKPOINT(iter->data)->coord), &(VIK_TRACKPOINT(iter->prev->data)->coord)); /* Assuming trackpoint is not a copy */ if (trackpoint == VIK_TRACKPOINT(iter->data)) break; } if (iter != NULL) pc = dist/track_length; return pc; } static void track_graph_click( GtkWidget *event_box, GdkEventButton *event, PropWidgets *widgets, VikPropWinGraphType_t graph_type ) { gboolean is_time_graph = ( graph_type == PROPWIN_GRAPH_TYPE_SPEED_TIME || graph_type == PROPWIN_GRAPH_TYPE_DISTANCE_TIME || graph_type == PROPWIN_GRAPH_TYPE_ELEVATION_TIME ); VikTrackpoint *trackpoint = set_center_at_graph_position(event->x, event_box->allocation.width, widgets->vtl, widgets->vlp, widgets->vvp, widgets->tr, is_time_graph, widgets->profile_width); // Unable to get the point so give up if ( trackpoint == NULL ) { gtk_dialog_set_response_sensitive(GTK_DIALOG(widgets->dialog), VIK_TRW_LAYER_PROPWIN_SPLIT_MARKER, FALSE); return; } widgets->marker_tp = trackpoint; GList *child; GtkWidget *image; GtkWidget *window = gtk_widget_get_toplevel(GTK_WIDGET(event_box)); GtkWidget *graph_box; PropSaved *graph_saved_img; gdouble pc = NAN; // Attempt to redraw marker on all graph types gint graphite; for ( graphite = PROPWIN_GRAPH_TYPE_ELEVATION_DISTANCE; graphite < PROPWIN_GRAPH_TYPE_END; graphite++ ) { // Switch commonal variables to particular graph type switch (graphite) { default: case PROPWIN_GRAPH_TYPE_ELEVATION_DISTANCE: graph_box = widgets->elev_box; graph_saved_img = &widgets->elev_graph_saved_img; is_time_graph = FALSE; break; case PROPWIN_GRAPH_TYPE_GRADIENT_DISTANCE: graph_box = widgets->gradient_box; graph_saved_img = &widgets->gradient_graph_saved_img; is_time_graph = FALSE; break; case PROPWIN_GRAPH_TYPE_SPEED_TIME: graph_box = widgets->speed_box; graph_saved_img = &widgets->speed_graph_saved_img; is_time_graph = TRUE; break; case PROPWIN_GRAPH_TYPE_DISTANCE_TIME: graph_box = widgets->dist_box; graph_saved_img = &widgets->dist_graph_saved_img; is_time_graph = TRUE; break; case PROPWIN_GRAPH_TYPE_ELEVATION_TIME: graph_box = widgets->elev_time_box; graph_saved_img = &widgets->elev_time_graph_saved_img; is_time_graph = TRUE; break; case PROPWIN_GRAPH_TYPE_SPEED_DISTANCE: graph_box = widgets->speed_dist_box; graph_saved_img = &widgets->speed_dist_graph_saved_img; is_time_graph = FALSE; break; } // Commonal method of redrawing marker if ( graph_box ) { child = gtk_container_get_children(GTK_CONTAINER(graph_box)); image = GTK_WIDGET(child->data); if (is_time_graph) pc = tp_percentage_by_time ( widgets->tr, trackpoint ); else pc = tp_percentage_by_distance ( widgets->tr, trackpoint, widgets->track_length_inc_gaps ); if (!isnan(pc)) { gdouble marker_x = (pc * widgets->profile_width) + MARGIN; save_image_and_draw_graph_marks(image, marker_x, window->style->black_gc, -1, // Don't draw blob on clicks 0, graph_saved_img, widgets->profile_width, widgets->profile_height, &widgets->is_marker_drawn, &widgets->is_blob_drawn); } g_list_free(child); } } gtk_dialog_set_response_sensitive(GTK_DIALOG(widgets->dialog), VIK_TRW_LAYER_PROPWIN_SPLIT_MARKER, widgets->is_marker_drawn); } static gboolean track_profile_click( GtkWidget *event_box, GdkEventButton *event, gpointer ptr ) { track_graph_click(event_box, event, ptr, PROPWIN_GRAPH_TYPE_ELEVATION_DISTANCE); return TRUE; /* don't call other (further) callbacks */ } static gboolean track_gradient_click( GtkWidget *event_box, GdkEventButton *event, gpointer ptr ) { track_graph_click(event_box, event, ptr, PROPWIN_GRAPH_TYPE_GRADIENT_DISTANCE); return TRUE; /* don't call other (further) callbacks */ } static gboolean track_vt_click( GtkWidget *event_box, GdkEventButton *event, gpointer ptr ) { track_graph_click(event_box, event, ptr, PROPWIN_GRAPH_TYPE_SPEED_TIME); return TRUE; /* don't call other (further) callbacks */ } static gboolean track_dt_click( GtkWidget *event_box, GdkEventButton *event, gpointer ptr ) { track_graph_click(event_box, event, ptr, PROPWIN_GRAPH_TYPE_DISTANCE_TIME); return TRUE; /* don't call other (further) callbacks */ } static gboolean track_et_click( GtkWidget *event_box, GdkEventButton *event, gpointer ptr ) { track_graph_click(event_box, event, ptr, PROPWIN_GRAPH_TYPE_ELEVATION_TIME); return TRUE; /* don't call other (further) callbacks */ } static gboolean track_sd_click( GtkWidget *event_box, GdkEventButton *event, gpointer ptr ) { track_graph_click(event_box, event, ptr, PROPWIN_GRAPH_TYPE_SPEED_DISTANCE); return TRUE; /* don't call other (further) callbacks */ } /** * Calculate y position for blob on elevation graph */ static gint blobby_altitude ( gdouble x_blob, PropWidgets *widgets ) { gint ix = (gint)x_blob; // Ensure ix is inbounds if (ix == widgets->profile_width) ix--; gint y_blob = widgets->profile_height-widgets->profile_height*(widgets->altitudes[ix]-widgets->draw_min_altitude)/(chunksa[widgets->cia]*LINES); return y_blob; } /** * Calculate y position for blob on gradient graph */ static gint blobby_gradient ( gdouble x_blob, PropWidgets *widgets ) { gint ix = (gint)x_blob; // Ensure ix is inbounds if (ix == widgets->profile_width) ix--; gint y_blob = widgets->profile_height-widgets->profile_height*(widgets->gradients[ix]-widgets->draw_min_gradient)/(chunksg[widgets->cig]*LINES); return y_blob; } /** * Calculate y position for blob on speed graph */ static gint blobby_speed ( gdouble x_blob, PropWidgets *widgets ) { gint ix = (gint)x_blob; // Ensure ix is inbounds if (ix == widgets->profile_width) ix--; gint y_blob = widgets->profile_height-widgets->profile_height*(widgets->speeds[ix]-widgets->draw_min_speed)/(chunkss[widgets->cis]*LINES); return y_blob; } /** * Calculate y position for blob on distance graph */ static gint blobby_distance ( gdouble x_blob, PropWidgets *widgets ) { gint ix = (gint)x_blob; // Ensure ix is inbounds if (ix == widgets->profile_width) ix--; gint y_blob = widgets->profile_height-widgets->profile_height*(widgets->distances[ix])/(chunksd[widgets->cid]*LINES); //NB min distance is always 0, so no need to subtract that from this ______/ return y_blob; } /** * Calculate y position for blob on elevation/time graph */ static gint blobby_altitude_time ( gdouble x_blob, PropWidgets *widgets ) { gint ix = (gint)x_blob; // Ensure ix is inbounds if (ix == widgets->profile_width) ix--; gint y_blob = widgets->profile_height-widgets->profile_height*(widgets->ats[ix]-widgets->draw_min_altitude_time)/(chunksa[widgets->ciat]*LINES); return y_blob; } /** * Calculate y position for blob on speed/dist graph */ static gint blobby_speed_dist ( gdouble x_blob, PropWidgets *widgets ) { gint ix = (gint)x_blob; // Ensure ix is inbounds if (ix == widgets->profile_width) ix--; gint y_blob = widgets->profile_height-widgets->profile_height*(widgets->speeds_dist[ix]-widgets->draw_min_speed)/(chunkss[widgets->cisd]*LINES); return y_blob; } void track_profile_move( GtkWidget *event_box, GdkEventMotion *event, PropWidgets *widgets ) { int mouse_x, mouse_y; GdkModifierType state; if (event->is_hint) gdk_window_get_pointer (event->window, &mouse_x, &mouse_y, &state); else mouse_x = event->x; gdouble x = mouse_x - event_box->allocation.width / 2 + widgets->profile_width / 2 - MARGIN / 2; if (x < 0) x = 0; if (x > widgets->profile_width) x = widgets->profile_width; gdouble meters_from_start; VikTrackpoint *trackpoint = vik_track_get_closest_tp_by_percentage_dist ( widgets->tr, (gdouble) x / widgets->profile_width, &meters_from_start ); if (trackpoint && widgets->w_cur_dist) { static gchar tmp_buf[20]; vik_units_distance_t dist_units = a_vik_get_units_distance (); switch (dist_units) { case VIK_UNITS_DISTANCE_KILOMETRES: g_snprintf(tmp_buf, sizeof(tmp_buf), "%.2f km", meters_from_start/1000.0); break; case VIK_UNITS_DISTANCE_MILES: g_snprintf(tmp_buf, sizeof(tmp_buf), "%.2f miles", VIK_METERS_TO_MILES(meters_from_start) ); break; default: g_critical("Houston, we've had a problem. distance=%d", dist_units); } gtk_label_set_text(GTK_LABEL(widgets->w_cur_dist), tmp_buf); } // Show track elevation for this position - to the nearest whole number if (trackpoint && widgets->w_cur_elevation) { static gchar tmp_buf[20]; if (a_vik_get_units_height () == VIK_UNITS_HEIGHT_FEET) g_snprintf(tmp_buf, sizeof(tmp_buf), "%d ft", (int)VIK_METERS_TO_FEET(trackpoint->altitude)); else g_snprintf(tmp_buf, sizeof(tmp_buf), "%d m", (int)trackpoint->altitude); gtk_label_set_text(GTK_LABEL(widgets->w_cur_elevation), tmp_buf); } widgets->blob_tp = trackpoint; if ( widgets->altitudes == NULL ) return; GtkWidget *window = gtk_widget_get_toplevel (event_box); GList *child = gtk_container_get_children(GTK_CONTAINER(event_box)); GtkWidget *image = GTK_WIDGET(child->data); gint y_blob = blobby_altitude (x, widgets); gdouble marker_x = -1.0; // i.e. Don't draw unless we get a valid value if (widgets->is_marker_drawn) { gdouble pc = tp_percentage_by_distance ( widgets->tr, widgets->marker_tp, widgets->track_length_inc_gaps ); if (!isnan(pc)) { marker_x = (pc * widgets->profile_width) + MARGIN; } } save_image_and_draw_graph_marks (image, marker_x, window->style->black_gc, MARGIN+x, y_blob, &widgets->elev_graph_saved_img, widgets->profile_width, widgets->profile_height, &widgets->is_marker_drawn, &widgets->is_blob_drawn); g_list_free(child); } void track_gradient_move( GtkWidget *event_box, GdkEventMotion *event, PropWidgets *widgets ) { int mouse_x, mouse_y; GdkModifierType state; if (event->is_hint) gdk_window_get_pointer (event->window, &mouse_x, &mouse_y, &state); else mouse_x = event->x; gdouble x = mouse_x - event_box->allocation.width / 2 + widgets->profile_width / 2 - MARGIN / 2; if (x < 0) x = 0; if (x > widgets->profile_width) x = widgets->profile_width; gdouble meters_from_start; VikTrackpoint *trackpoint = vik_track_get_closest_tp_by_percentage_dist ( widgets->tr, (gdouble) x / widgets->profile_width, &meters_from_start ); if (trackpoint && widgets->w_cur_gradient_dist) { static gchar tmp_buf[20]; vik_units_distance_t dist_units = a_vik_get_units_distance (); switch (dist_units) { case VIK_UNITS_DISTANCE_KILOMETRES: g_snprintf(tmp_buf, sizeof(tmp_buf), "%.2f km", meters_from_start/1000.0); break; case VIK_UNITS_DISTANCE_MILES: g_snprintf(tmp_buf, sizeof(tmp_buf), "%.2f miles", VIK_METERS_TO_MILES(meters_from_start) ); break; default: g_critical("Houston, we've had a problem. distance=%d", dist_units); } gtk_label_set_text(GTK_LABEL(widgets->w_cur_gradient_dist), tmp_buf); } // Show track gradient for this position - to the nearest whole number if (trackpoint && widgets->w_cur_gradient_gradient) { static gchar tmp_buf[20]; double gradient = widgets->gradients[(int) x]; g_snprintf(tmp_buf, sizeof(tmp_buf), "%d%%", (int)gradient); gtk_label_set_text(GTK_LABEL(widgets->w_cur_gradient_gradient), tmp_buf); } widgets->blob_tp = trackpoint; if ( widgets->gradients == NULL ) return; GtkWidget *window = gtk_widget_get_toplevel (event_box); GList *child = gtk_container_get_children(GTK_CONTAINER(event_box)); GtkWidget *image = GTK_WIDGET(child->data); gint y_blob = blobby_gradient (x, widgets); gdouble marker_x = -1.0; // i.e. Don't draw unless we get a valid value if (widgets->is_marker_drawn) { gdouble pc = tp_percentage_by_distance ( widgets->tr, widgets->marker_tp, widgets->track_length_inc_gaps ); if (!isnan(pc)) { marker_x = (pc * widgets->profile_width) + MARGIN; } } save_image_and_draw_graph_marks (image, marker_x, window->style->black_gc, MARGIN+x, y_blob, &widgets->gradient_graph_saved_img, widgets->profile_width, widgets->profile_height, &widgets->is_marker_drawn, &widgets->is_blob_drawn); g_list_free(child); } void track_vt_move( GtkWidget *event_box, GdkEventMotion *event, PropWidgets *widgets ) { int mouse_x, mouse_y; GdkModifierType state; if (event->is_hint) gdk_window_get_pointer (event->window, &mouse_x, &mouse_y, &state); else mouse_x = event->x; gdouble x = mouse_x - event_box->allocation.width / 2 + widgets->profile_width / 2 - MARGIN / 2; if (x < 0) x = 0; if (x > widgets->profile_width) x = widgets->profile_width; time_t seconds_from_start; VikTrackpoint *trackpoint = vik_track_get_closest_tp_by_percentage_time ( widgets->tr, (gdouble) x / widgets->profile_width, &seconds_from_start ); if (trackpoint && widgets->w_cur_time) { static gchar tmp_buf[20]; guint h, m, s; h = seconds_from_start/3600; m = (seconds_from_start - h*3600)/60; s = seconds_from_start - (3600*h) - (60*m); g_snprintf(tmp_buf, sizeof(tmp_buf), "%02d:%02d:%02d", h, m, s); gtk_label_set_text(GTK_LABEL(widgets->w_cur_time), tmp_buf); } gint ix = (gint)x; // Ensure ix is inbounds if (ix == widgets->profile_width) ix--; // Show track speed for this position if (trackpoint && widgets->w_cur_speed) { static gchar tmp_buf[20]; // Even if GPS speed available (trackpoint->speed), the text will correspond to the speed map shown // No conversions needed as already in appropriate units vik_units_speed_t speed_units = a_vik_get_units_speed (); switch (speed_units) { case VIK_UNITS_SPEED_KILOMETRES_PER_HOUR: g_snprintf(tmp_buf, sizeof(tmp_buf), _("%.1f kph"), widgets->speeds[ix]); break; case VIK_UNITS_SPEED_MILES_PER_HOUR: g_snprintf(tmp_buf, sizeof(tmp_buf), _("%.1f mph"), widgets->speeds[ix]); break; case VIK_UNITS_SPEED_KNOTS: g_snprintf(tmp_buf, sizeof(tmp_buf), _("%.1f knots"), widgets->speeds[ix]); break; default: // VIK_UNITS_SPEED_METRES_PER_SECOND: g_snprintf(tmp_buf, sizeof(tmp_buf), _("%.1f m/s"), widgets->speeds[ix]); break; } gtk_label_set_text(GTK_LABEL(widgets->w_cur_speed), tmp_buf); } widgets->blob_tp = trackpoint; if ( widgets->speeds == NULL ) return; GtkWidget *window = gtk_widget_get_toplevel (event_box); GList *child = gtk_container_get_children(GTK_CONTAINER(event_box)); GtkWidget *image = GTK_WIDGET(child->data); gint y_blob = blobby_speed (x, widgets); gdouble marker_x = -1.0; // i.e. Don't draw unless we get a valid value if (widgets->is_marker_drawn) { gdouble pc = tp_percentage_by_time ( widgets->tr, widgets->marker_tp ); if (!isnan(pc)) { marker_x = (pc * widgets->profile_width) + MARGIN; } } save_image_and_draw_graph_marks (image, marker_x, window->style->black_gc, MARGIN+x, y_blob, &widgets->speed_graph_saved_img, widgets->profile_width, widgets->profile_height, &widgets->is_marker_drawn, &widgets->is_blob_drawn); g_list_free(child); } /** * Update labels and blob marker on mouse moves in the distance/time graph */ void track_dt_move( GtkWidget *event_box, GdkEventMotion *event, PropWidgets *widgets ) { int mouse_x, mouse_y; GdkModifierType state; if (event->is_hint) gdk_window_get_pointer (event->window, &mouse_x, &mouse_y, &state); else mouse_x = event->x; gdouble x = mouse_x - event_box->allocation.width / 2 + widgets->profile_width / 2 - MARGIN / 2; if (x < 0) x = 0; if (x > widgets->profile_width) x = widgets->profile_width; time_t seconds_from_start; VikTrackpoint *trackpoint = vik_track_get_closest_tp_by_percentage_time ( widgets->tr, (gdouble) x / widgets->profile_width, &seconds_from_start ); if (trackpoint && widgets->w_cur_dist_time) { static gchar tmp_buf[20]; guint h, m, s; h = seconds_from_start/3600; m = (seconds_from_start - h*3600)/60; s = seconds_from_start - (3600*h) - (60*m); g_snprintf(tmp_buf, sizeof(tmp_buf), "%02d:%02d:%02d", h, m, s); gtk_label_set_text(GTK_LABEL(widgets->w_cur_dist_time), tmp_buf); } gint ix = (gint)x; // Ensure ix is inbounds if (ix == widgets->profile_width) ix--; if (trackpoint && widgets->w_cur_dist_dist) { static gchar tmp_buf[20]; if ( a_vik_get_units_distance () == VIK_UNITS_DISTANCE_MILES ) g_snprintf(tmp_buf, sizeof(tmp_buf), "%.2f miles", widgets->distances[ix]); else g_snprintf(tmp_buf, sizeof(tmp_buf), "%.2f km", widgets->distances[ix]); gtk_label_set_text(GTK_LABEL(widgets->w_cur_dist_dist), tmp_buf); } widgets->blob_tp = trackpoint; if ( widgets->distances == NULL ) return; GtkWidget *window = gtk_widget_get_toplevel (event_box); GList *child = gtk_container_get_children(GTK_CONTAINER(event_box)); GtkWidget *image = GTK_WIDGET(child->data); gint y_blob = blobby_distance (x, widgets); gdouble marker_x = -1.0; // i.e. Don't draw unless we get a valid value if (widgets->is_marker_drawn) { gdouble pc = tp_percentage_by_time ( widgets->tr, widgets->marker_tp ); if (!isnan(pc)) { marker_x = (pc * widgets->profile_width) + MARGIN; } } save_image_and_draw_graph_marks (image, marker_x, window->style->black_gc, MARGIN+x, y_blob, &widgets->dist_graph_saved_img, widgets->profile_width, widgets->profile_height, &widgets->is_marker_drawn, &widgets->is_blob_drawn); g_list_free(child); } /** * Update labels and blob marker on mouse moves in the elevation/time graph */ void track_et_move( GtkWidget *event_box, GdkEventMotion *event, PropWidgets *widgets ) { int mouse_x, mouse_y; GdkModifierType state; if (event->is_hint) gdk_window_get_pointer (event->window, &mouse_x, &mouse_y, &state); else mouse_x = event->x; gdouble x = mouse_x - event_box->allocation.width / 2 + widgets->profile_width / 2 - MARGIN / 2; if (x < 0) x = 0; if (x > widgets->profile_width) x = widgets->profile_width; time_t seconds_from_start; VikTrackpoint *trackpoint = vik_track_get_closest_tp_by_percentage_time ( widgets->tr, (gdouble) x / widgets->profile_width, &seconds_from_start ); if (trackpoint && widgets->w_cur_elev_time) { static gchar tmp_buf[20]; guint h, m, s; h = seconds_from_start/3600; m = (seconds_from_start - h*3600)/60; s = seconds_from_start - (3600*h) - (60*m); g_snprintf(tmp_buf, sizeof(tmp_buf), "%02d:%02d:%02d", h, m, s); gtk_label_set_text(GTK_LABEL(widgets->w_cur_elev_time), tmp_buf); } gint ix = (gint)x; // Ensure ix is inbounds if (ix == widgets->profile_width) ix--; if (trackpoint && widgets->w_cur_elev_elev) { static gchar tmp_buf[20]; if (a_vik_get_units_height () == VIK_UNITS_HEIGHT_FEET) g_snprintf(tmp_buf, sizeof(tmp_buf), "%d ft", (int)VIK_METERS_TO_FEET(trackpoint->altitude)); else g_snprintf(tmp_buf, sizeof(tmp_buf), "%d m", (int)trackpoint->altitude); gtk_label_set_text(GTK_LABEL(widgets->w_cur_elev_elev), tmp_buf); } widgets->blob_tp = trackpoint; if ( widgets->ats == NULL ) return; GtkWidget *window = gtk_widget_get_toplevel (event_box); GList *child = gtk_container_get_children(GTK_CONTAINER(event_box)); GtkWidget *image = GTK_WIDGET(child->data); gint y_blob = blobby_altitude_time (x, widgets); gdouble marker_x = -1.0; // i.e. Don't draw unless we get a valid value if (widgets->is_marker_drawn) { gdouble pc = tp_percentage_by_time ( widgets->tr, widgets->marker_tp ); if (!isnan(pc)) { marker_x = (pc * widgets->profile_width) + MARGIN; } } save_image_and_draw_graph_marks (image, marker_x, window->style->black_gc, MARGIN+x, y_blob, &widgets->elev_time_graph_saved_img, widgets->profile_width, widgets->profile_height, &widgets->is_marker_drawn, &widgets->is_blob_drawn); g_list_free(child); } void track_sd_move( GtkWidget *event_box, GdkEventMotion *event, PropWidgets *widgets ) { int mouse_x, mouse_y; GdkModifierType state; if (event->is_hint) gdk_window_get_pointer (event->window, &mouse_x, &mouse_y, &state); else mouse_x = event->x; gdouble x = mouse_x - event_box->allocation.width / 2 + widgets->profile_width / 2 - MARGIN / 2; if (x < 0) x = 0; if (x > widgets->profile_width) x = widgets->profile_width; gdouble meters_from_start; VikTrackpoint *trackpoint = vik_track_get_closest_tp_by_percentage_dist ( widgets->tr, (gdouble) x / widgets->profile_width, &meters_from_start ); if (trackpoint && widgets->w_cur_speed_dist) { static gchar tmp_buf[20]; vik_units_distance_t dist_units = a_vik_get_units_distance (); switch (dist_units) { case VIK_UNITS_DISTANCE_KILOMETRES: g_snprintf(tmp_buf, sizeof(tmp_buf), "%.2f km", meters_from_start/1000.0); break; case VIK_UNITS_DISTANCE_MILES: g_snprintf(tmp_buf, sizeof(tmp_buf), "%.2f miles", VIK_METERS_TO_MILES(meters_from_start) ); break; default: g_critical("Houston, we've had a problem. distance=%d", dist_units); } gtk_label_set_text(GTK_LABEL(widgets->w_cur_speed_dist), tmp_buf); } gint ix = (gint)x; // Ensure ix is inbounds if (ix == widgets->profile_width) ix--; if ( widgets->speeds_dist == NULL ) return; // Show track speed for this position if (widgets->w_cur_speed_speed) { static gchar tmp_buf[20]; // Even if GPS speed available (trackpoint->speed), the text will correspond to the speed map shown // No conversions needed as already in appropriate units vik_units_speed_t speed_units = a_vik_get_units_speed (); switch (speed_units) { case VIK_UNITS_SPEED_KILOMETRES_PER_HOUR: g_snprintf(tmp_buf, sizeof(tmp_buf), _("%.1f kph"), widgets->speeds_dist[ix]); break; case VIK_UNITS_SPEED_MILES_PER_HOUR: g_snprintf(tmp_buf, sizeof(tmp_buf), _("%.1f mph"), widgets->speeds_dist[ix]); break; case VIK_UNITS_SPEED_KNOTS: g_snprintf(tmp_buf, sizeof(tmp_buf), _("%.1f knots"), widgets->speeds_dist[ix]); break; default: // VIK_UNITS_SPEED_METRES_PER_SECOND: g_snprintf(tmp_buf, sizeof(tmp_buf), _("%.1f m/s"), widgets->speeds_dist[ix]); break; } gtk_label_set_text(GTK_LABEL(widgets->w_cur_speed_speed), tmp_buf); } widgets->blob_tp = trackpoint; GtkWidget *window = gtk_widget_get_toplevel (event_box); GList *child = gtk_container_get_children(GTK_CONTAINER(event_box)); GtkWidget *image = GTK_WIDGET(child->data); gint y_blob = blobby_speed_dist (x, widgets); gdouble marker_x = -1.0; // i.e. Don't draw unless we get a valid value if (widgets->is_marker_drawn) { gdouble pc = tp_percentage_by_distance ( widgets->tr, widgets->marker_tp, widgets->track_length_inc_gaps ); if (!isnan(pc)) { marker_x = (pc * widgets->profile_width) + MARGIN; } } save_image_and_draw_graph_marks (image, marker_x, window->style->black_gc, MARGIN+x, y_blob, &widgets->speed_dist_graph_saved_img, widgets->profile_width, widgets->profile_height, &widgets->is_marker_drawn, &widgets->is_blob_drawn); g_list_free(child); } /** * Draws DEM points and a respresentative speed on the supplied pixmap * (which is the elevations graph) */ static void draw_dem_alt_speed_dist(VikTrack *tr, GdkDrawable *pix, GdkGC *alt_gc, GdkGC *speed_gc, gdouble alt_offset, gdouble alt_diff, gdouble max_speed_in, gint cia, gint width, gint height, gint margin, gboolean do_dem, gboolean do_speed) { GList *iter; gdouble max_speed = 0; gdouble total_length = vik_track_get_length_including_gaps(tr); // Calculate the max speed factor if (do_speed) max_speed = max_speed_in * 110 / 100; gdouble dist = 0; for (iter = tr->trackpoints->next; iter; iter = iter->next) { int x; dist += vik_coord_diff ( &(VIK_TRACKPOINT(iter->data)->coord), &(VIK_TRACKPOINT(iter->prev->data)->coord) ); x = (width * dist)/total_length + margin; if (do_dem) { gint16 elev = a_dems_get_elev_by_coord(&(VIK_TRACKPOINT(iter->data)->coord), VIK_DEM_INTERPOL_BEST); elev -= alt_offset; if ( elev != VIK_DEM_INVALID_ELEVATION ) { // Convert into height units if (a_vik_get_units_height () == VIK_UNITS_HEIGHT_FEET) elev = VIK_METERS_TO_FEET(elev); // No conversion needed if already in metres // consider chunk size int y_alt = height - ((height * elev)/(chunksa[cia]*LINES) ); gdk_draw_rectangle(GDK_DRAWABLE(pix), alt_gc, TRUE, x-2, y_alt-2, 4, 4); } } if (do_speed) { // This is just a speed indicator - no actual values can be inferred by user if (!isnan(VIK_TRACKPOINT(iter->data)->speed)) { int y_speed = height - (height * VIK_TRACKPOINT(iter->data)->speed)/max_speed; gdk_draw_rectangle(GDK_DRAWABLE(pix), speed_gc, TRUE, x-2, y_speed-2, 4, 4); } } } } /** * Draw just the height profile image */ static void draw_elevations (GtkWidget *image, VikTrack *tr, PropWidgets *widgets ) { GtkWidget *window; GdkPixmap *pix; gdouble mina, maxa; guint i; GdkGC *no_alt_info; GdkColor color; // Free previous allocation if ( widgets->altitudes ) g_free ( widgets->altitudes ); widgets->altitudes = vik_track_make_elevation_map ( tr, widgets->profile_width ); if ( widgets->altitudes == NULL ) return; // Convert into appropriate units vik_units_height_t height_units = a_vik_get_units_height (); if ( height_units == VIK_UNITS_HEIGHT_FEET ) { // Convert altitudes into feet units for ( i = 0; i < widgets->profile_width; i++ ) { widgets->altitudes[i] = VIK_METERS_TO_FEET(widgets->altitudes[i]); } } // Otherwise leave in metres minmax_array(widgets->altitudes, &widgets->min_altitude, &widgets->max_altitude, TRUE, widgets->profile_width); get_new_min_and_chunk_index (widgets->min_altitude, widgets->max_altitude, chunksa, G_N_ELEMENTS(chunksa), &widgets->draw_min_altitude, &widgets->cia); // Assign locally mina = widgets->draw_min_altitude; maxa = widgets->max_altitude; window = gtk_widget_get_toplevel (widgets->elev_box); pix = gdk_pixmap_new( window->window, widgets->profile_width + MARGIN, widgets->profile_height, -1 ); gtk_image_set_from_pixmap ( GTK_IMAGE(image), pix, NULL ); no_alt_info = gdk_gc_new ( window->window ); gdk_color_parse ( "yellow", &color ); gdk_gc_set_rgb_fg_color ( no_alt_info, &color); /* clear the image */ gdk_draw_rectangle(GDK_DRAWABLE(pix), window->style->bg_gc[0], TRUE, 0, 0, MARGIN, widgets->profile_height); gdk_draw_rectangle(GDK_DRAWABLE(pix), window->style->mid_gc[0], TRUE, MARGIN, 0, widgets->profile_width, widgets->profile_height); /* draw grid */ for (i=0; i<=LINES; i++) { PangoLayout *pl = gtk_widget_create_pango_layout (GTK_WIDGET(image), NULL); gchar s[32]; int w, h; pango_layout_set_alignment (pl, PANGO_ALIGN_RIGHT); pango_layout_set_font_description (pl, window->style->font_desc); switch (height_units) { case VIK_UNITS_HEIGHT_METRES: sprintf(s, "%8dm", (int)(mina + (LINES-i)*chunksa[widgets->cia])); break; case VIK_UNITS_HEIGHT_FEET: // NB values already converted into feet sprintf(s, "%8dft", (int)(mina + (LINES-i)*chunksa[widgets->cia])); break; default: sprintf(s, "--"); g_critical("Houston, we've had a problem. height=%d", height_units); } pango_layout_set_text(pl, s, -1); pango_layout_get_pixel_size (pl, &w, &h); gdk_draw_layout(GDK_DRAWABLE(pix), window->style->fg_gc[0], MARGIN-w-3, CLAMP((int)i*widgets->profile_height/LINES - h/2, 0, widgets->profile_height-h), pl); gdk_draw_line (GDK_DRAWABLE(pix), window->style->dark_gc[0], MARGIN, widgets->profile_height/LINES * i, MARGIN + widgets->profile_width, widgets->profile_height/LINES * i); g_object_unref ( G_OBJECT ( pl ) ); pl = NULL; } /* draw elevations */ for ( i = 0; i < widgets->profile_width; i++ ) if ( widgets->altitudes[i] == VIK_DEFAULT_ALTITUDE ) gdk_draw_line ( GDK_DRAWABLE(pix), no_alt_info, i + MARGIN, 0, i + MARGIN, widgets->profile_height ); else gdk_draw_line ( GDK_DRAWABLE(pix), window->style->dark_gc[3], i + MARGIN, widgets->profile_height, i + MARGIN, widgets->profile_height-widgets->profile_height*(widgets->altitudes[i]-mina)/(chunksa[widgets->cia]*LINES) ); if ( gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(widgets->w_show_dem)) || gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(widgets->w_show_alt_gps_speed)) ) { GdkGC *dem_alt_gc = gdk_gc_new ( window->window ); GdkGC *gps_speed_gc = gdk_gc_new ( window->window ); gdk_color_parse ( "green", &color ); gdk_gc_set_rgb_fg_color ( dem_alt_gc, &color); gdk_color_parse ( "red", &color ); gdk_gc_set_rgb_fg_color ( gps_speed_gc, &color); // Ensure somekind of max speed when not set if ( widgets->max_speed < 0.01 ) widgets->max_speed = vik_track_get_max_speed(tr); draw_dem_alt_speed_dist(tr, GDK_DRAWABLE(pix), dem_alt_gc, gps_speed_gc, mina, maxa - mina, widgets->max_speed, widgets->cia, widgets->profile_width, widgets->profile_height, MARGIN, gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(widgets->w_show_dem)), gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(widgets->w_show_alt_gps_speed))); g_object_unref ( G_OBJECT(dem_alt_gc) ); g_object_unref ( G_OBJECT(gps_speed_gc) ); } /* draw border */ gdk_draw_rectangle(GDK_DRAWABLE(pix), window->style->black_gc, FALSE, MARGIN, 0, widgets->profile_width-1, widgets->profile_height-1); g_object_unref ( G_OBJECT(pix) ); g_object_unref ( G_OBJECT(no_alt_info) ); } /** * Draws representative speed on the supplied pixmap * (which is the gradients graph) */ static void draw_speed_dist(VikTrack *tr, GdkDrawable *pix, GdkGC *speed_gc, gdouble max_speed_in, gint width, gint height, gint margin, gboolean do_speed) { GList *iter; gdouble max_speed = 0; gdouble total_length = vik_track_get_length_including_gaps(tr); // Calculate the max speed factor if (do_speed) max_speed = max_speed_in * 110 / 100; gdouble dist = 0; for (iter = tr->trackpoints->next; iter; iter = iter->next) { int x; dist += vik_coord_diff ( &(VIK_TRACKPOINT(iter->data)->coord), &(VIK_TRACKPOINT(iter->prev->data)->coord) ); x = (width * dist)/total_length + margin; if (do_speed) { // This is just a speed indicator - no actual values can be inferred by user if (!isnan(VIK_TRACKPOINT(iter->data)->speed)) { int y_speed = height - (height * VIK_TRACKPOINT(iter->data)->speed)/max_speed; gdk_draw_rectangle(GDK_DRAWABLE(pix), speed_gc, TRUE, x-2, y_speed-2, 4, 4); } } } } /** * Draw just the gradient image */ static void draw_gradients (GtkWidget *image, VikTrack *tr, PropWidgets *widgets ) { GtkWidget *window; GdkPixmap *pix; gdouble mina; guint i; GdkColor color; // Free previous allocation if ( widgets->gradients ) g_free ( widgets->gradients ); widgets->gradients = vik_track_make_gradient_map ( tr, widgets->profile_width ); if ( widgets->gradients == NULL ) return; minmax_array(widgets->gradients, &widgets->min_gradient, &widgets->max_gradient, TRUE, widgets->profile_width); get_new_min_and_chunk_index (widgets->min_gradient, widgets->max_gradient, chunksg, G_N_ELEMENTS(chunksg), &widgets->draw_min_gradient, &widgets->cig); // Assign locally mina = widgets->draw_min_gradient; window = gtk_widget_get_toplevel (widgets->gradient_box); pix = gdk_pixmap_new( window->window, widgets->profile_width + MARGIN, widgets->profile_height, -1 ); gtk_image_set_from_pixmap ( GTK_IMAGE(image), pix, NULL ); /* clear the image */ gdk_draw_rectangle(GDK_DRAWABLE(pix), window->style->bg_gc[0], TRUE, 0, 0, MARGIN, widgets->profile_height); gdk_draw_rectangle(GDK_DRAWABLE(pix), window->style->mid_gc[0], TRUE, MARGIN, 0, widgets->profile_width, widgets->profile_height); /* draw grid */ for (i=0; i<=LINES; i++) { PangoLayout *pl = gtk_widget_create_pango_layout (GTK_WIDGET(image), NULL); gchar s[32]; int w, h; pango_layout_set_alignment (pl, PANGO_ALIGN_RIGHT); pango_layout_set_font_description (pl, window->style->font_desc); sprintf(s, "%8d%%", (int)(mina + (LINES-i)*chunksg[widgets->cig])); pango_layout_set_text(pl, s, -1); pango_layout_get_pixel_size (pl, &w, &h); gdk_draw_layout(GDK_DRAWABLE(pix), window->style->fg_gc[0], MARGIN-w-3, CLAMP((int)i*widgets->profile_height/LINES - h/2, 0, widgets->profile_height-h), pl); gdk_draw_line (GDK_DRAWABLE(pix), window->style->dark_gc[0], MARGIN, widgets->profile_height/LINES * i, MARGIN + widgets->profile_width, widgets->profile_height/LINES * i); g_object_unref ( G_OBJECT ( pl ) ); pl = NULL; } /* draw gradients */ for ( i = 0; i < widgets->profile_width; i++ ) gdk_draw_line ( GDK_DRAWABLE(pix), window->style->dark_gc[3], i + MARGIN, widgets->profile_height, i + MARGIN, widgets->profile_height-widgets->profile_height*(widgets->gradients[i]-mina)/(chunksg[widgets->cig]*LINES) ); if ( gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(widgets->w_show_gradient_gps_speed)) ) { GdkGC *gps_speed_gc = gdk_gc_new ( window->window ); gdk_color_parse ( "red", &color ); gdk_gc_set_rgb_fg_color ( gps_speed_gc, &color); // Ensure somekind of max speed when not set if ( widgets->max_speed < 0.01 ) widgets->max_speed = vik_track_get_max_speed(tr); draw_speed_dist(tr, GDK_DRAWABLE(pix), gps_speed_gc, widgets->max_speed, widgets->profile_width, widgets->profile_height, MARGIN, gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(widgets->w_show_alt_gps_speed))); g_object_unref ( G_OBJECT(gps_speed_gc) ); } /* draw border */ gdk_draw_rectangle(GDK_DRAWABLE(pix), window->style->black_gc, FALSE, MARGIN, 0, widgets->profile_width-1, widgets->profile_height-1); g_object_unref ( G_OBJECT(pix) ); } /** * Draw just the speed (velocity)/time image */ static void draw_vt ( GtkWidget *image, VikTrack *tr, PropWidgets *widgets) { GtkWidget *window; GdkPixmap *pix; gdouble mins; guint i; // Free previous allocation if ( widgets->speeds ) g_free ( widgets->speeds ); widgets->speeds = vik_track_make_speed_map ( tr, widgets->profile_width ); if ( widgets->speeds == NULL ) return; // Convert into appropriate units vik_units_speed_t speed_units = a_vik_get_units_speed (); switch (speed_units) { case VIK_UNITS_SPEED_KILOMETRES_PER_HOUR: for ( i = 0; i < widgets->profile_width; i++ ) { widgets->speeds[i] = VIK_MPS_TO_KPH(widgets->speeds[i]); } break; case VIK_UNITS_SPEED_MILES_PER_HOUR: for ( i = 0; i < widgets->profile_width; i++ ) { widgets->speeds[i] = VIK_MPS_TO_MPH(widgets->speeds[i]); } break; case VIK_UNITS_SPEED_KNOTS: for ( i = 0; i < widgets->profile_width; i++ ) { widgets->speeds[i] = VIK_MPS_TO_KNOTS(widgets->speeds[i]); } break; default: // VIK_UNITS_SPEED_METRES_PER_SECOND: // No need to convert as already in m/s break; } window = gtk_widget_get_toplevel (widgets->speed_box); pix = gdk_pixmap_new( window->window, widgets->profile_width + MARGIN, widgets->profile_height, -1 ); gtk_image_set_from_pixmap ( GTK_IMAGE(image), pix, NULL ); minmax_array(widgets->speeds, &widgets->min_speed, &widgets->max_speed, FALSE, widgets->profile_width); if (widgets->min_speed < 0.0) widgets->min_speed = 0; /* splines sometimes give negative speeds */ /* Find suitable chunk index */ get_new_min_and_chunk_index (widgets->min_speed, widgets->max_speed, chunkss, G_N_ELEMENTS(chunkss), &widgets->draw_min_speed, &widgets->cis); // Assign locally mins = widgets->draw_min_speed; /* clear the image */ gdk_draw_rectangle(GDK_DRAWABLE(pix), window->style->bg_gc[0], TRUE, 0, 0, MARGIN, widgets->profile_height); gdk_draw_rectangle(GDK_DRAWABLE(pix), window->style->mid_gc[0], TRUE, MARGIN, 0, widgets->profile_width, widgets->profile_height); /* draw grid */ for (i=0; i<=LINES; i++) { PangoLayout *pl = gtk_widget_create_pango_layout (GTK_WIDGET(image), NULL); gchar s[32]; int w, h; pango_layout_set_alignment (pl, PANGO_ALIGN_RIGHT); pango_layout_set_font_description (pl, window->style->font_desc); // NB: No need to convert here anymore as numbers are in the appropriate units switch (speed_units) { case VIK_UNITS_SPEED_KILOMETRES_PER_HOUR: sprintf(s, "%8dkm/h", (int)(mins + (LINES-i)*chunkss[widgets->cis])); break; case VIK_UNITS_SPEED_MILES_PER_HOUR: sprintf(s, "%8dmph", (int)(mins + (LINES-i)*chunkss[widgets->cis])); break; case VIK_UNITS_SPEED_METRES_PER_SECOND: sprintf(s, "%8dm/s", (int)(mins + (LINES-i)*chunkss[widgets->cis])); break; case VIK_UNITS_SPEED_KNOTS: sprintf(s, "%8dknots", (int)(mins + (LINES-i)*chunkss[widgets->cis])); break; default: sprintf(s, "--"); g_critical("Houston, we've had a problem. speed=%d", speed_units); } pango_layout_set_text(pl, s, -1); pango_layout_get_pixel_size (pl, &w, &h); gdk_draw_layout(GDK_DRAWABLE(pix), window->style->fg_gc[0], MARGIN-w-3, CLAMP((int)i*widgets->profile_height/LINES - h/2, 0, widgets->profile_height-h), pl); gdk_draw_line (GDK_DRAWABLE(pix), window->style->dark_gc[0], MARGIN, widgets->profile_height/LINES * i, MARGIN + widgets->profile_width, widgets->profile_height/LINES * i); g_object_unref ( G_OBJECT ( pl ) ); pl = NULL; } /* draw speeds */ for ( i = 0; i < widgets->profile_width; i++ ) gdk_draw_line ( GDK_DRAWABLE(pix), window->style->dark_gc[3], i + MARGIN, widgets->profile_height, i + MARGIN, widgets->profile_height-widgets->profile_height*(widgets->speeds[i]-mins)/(chunkss[widgets->cis]*LINES) ); if ( gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->w_show_gps_speed)) ) { GdkGC *gps_speed_gc = gdk_gc_new ( window->window ); GdkColor color; gdk_color_parse ( "red", &color ); gdk_gc_set_rgb_fg_color ( gps_speed_gc, &color); time_t beg_time = VIK_TRACKPOINT(tr->trackpoints->data)->timestamp; time_t dur = VIK_TRACKPOINT(g_list_last(tr->trackpoints)->data)->timestamp - beg_time; GList *iter; for (iter = tr->trackpoints; iter; iter = iter->next) { gdouble gps_speed = VIK_TRACKPOINT(iter->data)->speed; if (isnan(gps_speed)) continue; switch (speed_units) { case VIK_UNITS_SPEED_KILOMETRES_PER_HOUR: gps_speed = VIK_MPS_TO_KPH(gps_speed); break; case VIK_UNITS_SPEED_MILES_PER_HOUR: gps_speed = VIK_MPS_TO_MPH(gps_speed); break; case VIK_UNITS_SPEED_KNOTS: gps_speed = VIK_MPS_TO_KNOTS(gps_speed); break; default: // VIK_UNITS_SPEED_METRES_PER_SECOND: // No need to convert as already in m/s break; } int x = MARGIN + widgets->profile_width * (VIK_TRACKPOINT(iter->data)->timestamp - beg_time) / dur; int y = widgets->profile_height - widgets->profile_height*(gps_speed - mins)/(chunkss[widgets->cis]*LINES); gdk_draw_rectangle(GDK_DRAWABLE(pix), gps_speed_gc, TRUE, x-2, y-2, 4, 4); } g_object_unref ( G_OBJECT(gps_speed_gc) ); } /* draw border */ gdk_draw_rectangle(GDK_DRAWABLE(pix), window->style->black_gc, FALSE, MARGIN, 0, widgets->profile_width-1, widgets->profile_height-1); g_object_unref ( G_OBJECT(pix) ); } /** * Draw just the distance/time image */ static void draw_dt ( GtkWidget *image, VikTrack *tr, PropWidgets *widgets ) { GtkWidget *window; GdkPixmap *pix; gdouble maxd; guint i; // Free previous allocation if ( widgets->distances ) g_free ( widgets->distances ); widgets->distances = vik_track_make_distance_map ( tr, widgets->profile_width ); if ( widgets->distances == NULL ) return; // Convert into appropriate units vik_units_distance_t dist_units = a_vik_get_units_distance (); if ( dist_units == VIK_UNITS_DISTANCE_MILES ) { for ( i = 0; i < widgets->profile_width; i++ ) { widgets->distances[i] = VIK_METERS_TO_MILES(widgets->distances[i]); } } else { // Metres - but want in kms for ( i = 0; i < widgets->profile_width; i++ ) { widgets->distances[i] = widgets->distances[i]/1000.0; } } window = gtk_widget_get_toplevel (widgets->dist_box); pix = gdk_pixmap_new( window->window, widgets->profile_width + MARGIN, widgets->profile_height, -1 ); gtk_image_set_from_pixmap ( GTK_IMAGE(image), pix, NULL ); // easy to work out min / max of distance! // Assign locally // mind = 0.0; - Thus not used if ( dist_units == VIK_UNITS_DISTANCE_MILES ) maxd = VIK_METERS_TO_MILES(vik_track_get_length_including_gaps (tr)); else maxd = vik_track_get_length_including_gaps (tr) / 1000.0; /* Find suitable chunk index */ gdouble dummy = 0.0; // expect this to remain the same! (not that it's used) get_new_min_and_chunk_index (0, maxd, chunksd, G_N_ELEMENTS(chunksd), &dummy, &widgets->cid); /* clear the image */ gdk_draw_rectangle(GDK_DRAWABLE(pix), window->style->bg_gc[0], TRUE, 0, 0, MARGIN, widgets->profile_height); gdk_draw_rectangle(GDK_DRAWABLE(pix), window->style->mid_gc[0], TRUE, MARGIN, 0, widgets->profile_width, widgets->profile_height); /* draw grid */ for (i=0; i<=LINES; i++) { PangoLayout *pl = gtk_widget_create_pango_layout (GTK_WIDGET(image), NULL); gchar s[32]; int w, h; pango_layout_set_alignment (pl, PANGO_ALIGN_RIGHT); pango_layout_set_font_description (pl, window->style->font_desc); if ( dist_units == VIK_UNITS_DISTANCE_MILES ) sprintf(s, _("%.1f miles"), ((LINES-i)*chunksd[widgets->cid])); else sprintf(s, _("%.1f km"), ((LINES-i)*chunksd[widgets->cid])); pango_layout_set_text(pl, s, -1); pango_layout_get_pixel_size (pl, &w, &h); gdk_draw_layout(GDK_DRAWABLE(pix), window->style->fg_gc[0], MARGIN-w-3, CLAMP((int)i*widgets->profile_height/LINES - h/2, 0, widgets->profile_height-h), pl); gdk_draw_line (GDK_DRAWABLE(pix), window->style->dark_gc[0], MARGIN, widgets->profile_height/LINES * i, MARGIN + widgets->profile_width, widgets->profile_height/LINES * i); g_object_unref ( G_OBJECT ( pl ) ); pl = NULL; } /* draw distance */ for ( i = 0; i < widgets->profile_width; i++ ) gdk_draw_line ( GDK_DRAWABLE(pix), window->style->dark_gc[3], i + MARGIN, widgets->profile_height, i + MARGIN, widgets->profile_height-widgets->profile_height*(widgets->distances[i])/(chunksd[widgets->cid]*LINES) ); // Show speed indicator if ( gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->w_show_dist_speed)) ) { GdkGC *dist_speed_gc = gdk_gc_new ( window->window ); GdkColor color; gdk_color_parse ( "red", &color ); gdk_gc_set_rgb_fg_color ( dist_speed_gc, &color); gdouble max_speed = 0; max_speed = widgets->max_speed * 110 / 100; // This is just an indicator - no actual values can be inferred by user gint i; for ( i = 0; i < widgets->profile_width; i++ ) { int y_speed = widgets->profile_height - (widgets->profile_height * widgets->speeds[i])/max_speed; gdk_draw_rectangle(GDK_DRAWABLE(pix), dist_speed_gc, TRUE, i+MARGIN-2, y_speed-2, 4, 4); } g_object_unref ( G_OBJECT(dist_speed_gc) ); } /* draw border */ gdk_draw_rectangle(GDK_DRAWABLE(pix), window->style->black_gc, FALSE, MARGIN, 0, widgets->profile_width-1, widgets->profile_height-1); g_object_unref ( G_OBJECT(pix) ); } /** * Draw just the elevation/time image */ static void draw_et ( GtkWidget *image, VikTrack *tr, PropWidgets *widgets ) { GtkWidget *window; GdkPixmap *pix; gdouble mina; guint i; // Free previous allocation if ( widgets->ats ) g_free ( widgets->ats ); widgets->ats = vik_track_make_elevation_time_map ( tr, widgets->profile_width ); if ( widgets->ats == NULL ) return; // Convert into appropriate units vik_units_height_t height_units = a_vik_get_units_height (); if ( height_units == VIK_UNITS_HEIGHT_FEET ) { // Convert altitudes into feet units for ( i = 0; i < widgets->profile_width; i++ ) { widgets->ats[i] = VIK_METERS_TO_FEET(widgets->ats[i]); } } // Otherwise leave in metres minmax_array(widgets->ats, &widgets->min_altitude, &widgets->max_altitude, TRUE, widgets->profile_width); get_new_min_and_chunk_index (widgets->min_altitude, widgets->max_altitude, chunksa, G_N_ELEMENTS(chunksa), &widgets->draw_min_altitude_time, &widgets->ciat); // Assign locally mina = widgets->draw_min_altitude_time; window = gtk_widget_get_toplevel (widgets->elev_time_box); pix = gdk_pixmap_new( window->window, widgets->profile_width + MARGIN, widgets->profile_height, -1 ); gtk_image_set_from_pixmap ( GTK_IMAGE(image), pix, NULL ); /* clear the image */ gdk_draw_rectangle(GDK_DRAWABLE(pix), window->style->bg_gc[0], TRUE, 0, 0, MARGIN, widgets->profile_height); gdk_draw_rectangle(GDK_DRAWABLE(pix), window->style->mid_gc[0], TRUE, MARGIN, 0, widgets->profile_width, widgets->profile_height); /* draw grid */ for (i=0; i<=LINES; i++) { PangoLayout *pl = gtk_widget_create_pango_layout (GTK_WIDGET(image), NULL); gchar s[32]; int w, h; pango_layout_set_alignment (pl, PANGO_ALIGN_RIGHT); pango_layout_set_font_description (pl, window->style->font_desc); switch (height_units) { case VIK_UNITS_HEIGHT_METRES: sprintf(s, "%8dm", (int)(mina + (LINES-i)*chunksa[widgets->ciat])); break; case VIK_UNITS_HEIGHT_FEET: // NB values already converted into feet sprintf(s, "%8dft", (int)(mina + (LINES-i)*chunksa[widgets->ciat])); break; default: sprintf(s, "--"); g_critical("Houston, we've had a problem. height=%d", height_units); } pango_layout_set_text(pl, s, -1); pango_layout_get_pixel_size (pl, &w, &h); gdk_draw_layout(GDK_DRAWABLE(pix), window->style->fg_gc[0], MARGIN-w-3, CLAMP((int)i*widgets->profile_height/LINES - h/2, 0, widgets->profile_height-h), pl); gdk_draw_line (GDK_DRAWABLE(pix), window->style->dark_gc[0], MARGIN, widgets->profile_height/LINES * i, MARGIN + widgets->profile_width, widgets->profile_height/LINES * i); g_object_unref ( G_OBJECT ( pl ) ); pl = NULL; } /* draw elevations */ for ( i = 0; i < widgets->profile_width; i++ ) gdk_draw_line ( GDK_DRAWABLE(pix), window->style->dark_gc[3], i + MARGIN, widgets->profile_height, i + MARGIN, widgets->profile_height-widgets->profile_height*(widgets->ats[i]-mina)/(chunksa[widgets->ciat]*LINES) ); // Show speed indicator if ( gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->w_show_elev_speed)) ) { GdkGC *elev_speed_gc = gdk_gc_new ( window->window ); GdkColor color; gdk_color_parse ( "red", &color ); gdk_gc_set_rgb_fg_color ( elev_speed_gc, &color); gdouble max_speed = 0; max_speed = widgets->max_speed * 110 / 100; // This is just an indicator - no actual values can be inferred by user gint i; for ( i = 0; i < widgets->profile_width; i++ ) { int y_speed = widgets->profile_height - (widgets->profile_height * widgets->speeds[i])/max_speed; gdk_draw_rectangle(GDK_DRAWABLE(pix), elev_speed_gc, TRUE, i+MARGIN-2, y_speed-2, 4, 4); } g_object_unref ( G_OBJECT(elev_speed_gc) ); } /* draw border */ gdk_draw_rectangle(GDK_DRAWABLE(pix), window->style->black_gc, FALSE, MARGIN, 0, widgets->profile_width-1, widgets->profile_height-1); g_object_unref ( G_OBJECT(pix) ); } /** * Draw just the speed/distance image */ static void draw_sd ( GtkWidget *image, VikTrack *tr, PropWidgets *widgets) { GtkWidget *window; GdkPixmap *pix; gdouble mins; guint i; // Free previous allocation if ( widgets->speeds_dist ) g_free ( widgets->speeds_dist ); widgets->speeds_dist = vik_track_make_speed_dist_map ( tr, widgets->profile_width ); if ( widgets->speeds_dist == NULL ) return; // Convert into appropriate units vik_units_speed_t speed_units = a_vik_get_units_speed (); switch (speed_units) { case VIK_UNITS_SPEED_KILOMETRES_PER_HOUR: for ( i = 0; i < widgets->profile_width; i++ ) { widgets->speeds_dist[i] = VIK_MPS_TO_KPH(widgets->speeds_dist[i]); } break; case VIK_UNITS_SPEED_MILES_PER_HOUR: for ( i = 0; i < widgets->profile_width; i++ ) { widgets->speeds_dist[i] = VIK_MPS_TO_MPH(widgets->speeds_dist[i]); } break; case VIK_UNITS_SPEED_KNOTS: for ( i = 0; i < widgets->profile_width; i++ ) { widgets->speeds_dist[i] = VIK_MPS_TO_KNOTS(widgets->speeds_dist[i]); } break; default: // VIK_UNITS_SPEED_METRES_PER_SECOND: // No need to convert as already in m/s break; } window = gtk_widget_get_toplevel (widgets->speed_dist_box); pix = gdk_pixmap_new( window->window, widgets->profile_width + MARGIN, widgets->profile_height, -1 ); gtk_image_set_from_pixmap ( GTK_IMAGE(image), pix, NULL ); // OK to resuse min_speed here minmax_array(widgets->speeds_dist, &widgets->min_speed, &widgets->max_speed_dist, FALSE, widgets->profile_width); if (widgets->min_speed < 0.0) widgets->min_speed = 0; /* splines sometimes give negative speeds */ /* Find suitable chunk index */ get_new_min_and_chunk_index (widgets->min_speed, widgets->max_speed_dist, chunkss, G_N_ELEMENTS(chunkss), &widgets->draw_min_speed, &widgets->cisd); // Assign locally mins = widgets->draw_min_speed; /* clear the image */ gdk_draw_rectangle(GDK_DRAWABLE(pix), window->style->bg_gc[0], TRUE, 0, 0, MARGIN, widgets->profile_height); gdk_draw_rectangle(GDK_DRAWABLE(pix), window->style->mid_gc[0], TRUE, MARGIN, 0, widgets->profile_width, widgets->profile_height); /* draw grid */ for (i=0; i<=LINES; i++) { PangoLayout *pl = gtk_widget_create_pango_layout (GTK_WIDGET(image), NULL); gchar s[32]; int w, h; pango_layout_set_alignment (pl, PANGO_ALIGN_RIGHT); pango_layout_set_font_description (pl, window->style->font_desc); // NB: No need to convert here anymore as numbers are in the appropriate units switch (speed_units) { case VIK_UNITS_SPEED_KILOMETRES_PER_HOUR: sprintf(s, "%8dkm/h", (int)(mins + (LINES-i)*chunkss[widgets->cisd])); break; case VIK_UNITS_SPEED_MILES_PER_HOUR: sprintf(s, "%8dmph", (int)(mins + (LINES-i)*chunkss[widgets->cisd])); break; case VIK_UNITS_SPEED_METRES_PER_SECOND: sprintf(s, "%8dm/s", (int)(mins + (LINES-i)*chunkss[widgets->cisd])); break; case VIK_UNITS_SPEED_KNOTS: sprintf(s, "%8dknots", (int)(mins + (LINES-i)*chunkss[widgets->cisd])); break; default: sprintf(s, "--"); g_critical("Houston, we've had a problem. speed=%d", speed_units); } pango_layout_set_text(pl, s, -1); pango_layout_get_pixel_size (pl, &w, &h); gdk_draw_layout(GDK_DRAWABLE(pix), window->style->fg_gc[0], MARGIN-w-3, CLAMP((int)i*widgets->profile_height/LINES - h/2, 0, widgets->profile_height-h), pl); gdk_draw_line (GDK_DRAWABLE(pix), window->style->dark_gc[0], MARGIN, widgets->profile_height/LINES * i, MARGIN + widgets->profile_width, widgets->profile_height/LINES * i); g_object_unref ( G_OBJECT ( pl ) ); pl = NULL; } /* draw speeds */ for ( i = 0; i < widgets->profile_width; i++ ) gdk_draw_line ( GDK_DRAWABLE(pix), window->style->dark_gc[3], i + MARGIN, widgets->profile_height, i + MARGIN, widgets->profile_height-widgets->profile_height*(widgets->speeds_dist[i]-mins)/(chunkss[widgets->cisd]*LINES) ); if ( gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->w_show_sd_gps_speed)) ) { GdkGC *gps_speed_gc = gdk_gc_new ( window->window ); GdkColor color; gdk_color_parse ( "red", &color ); gdk_gc_set_rgb_fg_color ( gps_speed_gc, &color); gdouble dist = vik_track_get_length_including_gaps(tr); gdouble dist_tp = 0.0; GList *iter = tr->trackpoints; for (iter = iter->next; iter; iter = iter->next) { gdouble gps_speed = VIK_TRACKPOINT(iter->data)->speed; if (isnan(gps_speed)) continue; switch (speed_units) { case VIK_UNITS_SPEED_KILOMETRES_PER_HOUR: gps_speed = VIK_MPS_TO_KPH(gps_speed); break; case VIK_UNITS_SPEED_MILES_PER_HOUR: gps_speed = VIK_MPS_TO_MPH(gps_speed); break; case VIK_UNITS_SPEED_KNOTS: gps_speed = VIK_MPS_TO_KNOTS(gps_speed); break; default: // VIK_UNITS_SPEED_METRES_PER_SECOND: // No need to convert as already in m/s break; } dist_tp += vik_coord_diff ( &(VIK_TRACKPOINT(iter->data)->coord), &(VIK_TRACKPOINT(iter->prev->data)->coord) ); int x = MARGIN + (widgets->profile_width * dist_tp / dist); int y = widgets->profile_height - widgets->profile_height*(gps_speed - mins)/(chunkss[widgets->cisd]*LINES); gdk_draw_rectangle(GDK_DRAWABLE(pix), gps_speed_gc, TRUE, x-2, y-2, 4, 4); } g_object_unref ( G_OBJECT(gps_speed_gc) ); } /* draw border */ gdk_draw_rectangle(GDK_DRAWABLE(pix), window->style->black_gc, FALSE, MARGIN, 0, widgets->profile_width-1, widgets->profile_height-1); g_object_unref ( G_OBJECT(pix) ); } #undef LINES /** * Draw all graphs */ static void draw_all_graphs ( GtkWidget *widget, PropWidgets *widgets, gboolean resized ) { // Draw graphs even if they are not visible GList *child = NULL; GtkWidget *image = NULL; GtkWidget *window = gtk_widget_get_toplevel(widget); gdouble pc = NAN; gdouble pc_blob = NAN; // Draw elevations if (widgets->elev_box != NULL) { // Saved image no longer any good as we've resized, so we remove it here if (resized && widgets->elev_graph_saved_img.img) { g_object_unref(widgets->elev_graph_saved_img.img); widgets->elev_graph_saved_img.img = NULL; widgets->elev_graph_saved_img.saved = FALSE; } child = gtk_container_get_children(GTK_CONTAINER(widgets->elev_box)); draw_elevations (GTK_WIDGET(child->data), widgets->tr, widgets ); image = GTK_WIDGET(child->data); g_list_free(child); // Ensure marker or blob are redrawn if necessary if (widgets->is_marker_drawn || widgets->is_blob_drawn) { pc = tp_percentage_by_distance ( widgets->tr, widgets->marker_tp, widgets->track_length_inc_gaps ); gdouble x_blob = -MARGIN - 1.0; // i.e. Don't draw unless we get a valid value gint y_blob = 0; if (widgets->is_blob_drawn) { pc_blob = tp_percentage_by_distance ( widgets->tr, widgets->blob_tp, widgets->track_length_inc_gaps ); if (!isnan(pc_blob)) { x_blob = (pc_blob * widgets->profile_width); } y_blob = blobby_altitude (x_blob, widgets); } gdouble marker_x = -1.0; // i.e. Don't draw unless we get a valid value if (!isnan(pc)) { marker_x = (pc * widgets->profile_width) + MARGIN; } save_image_and_draw_graph_marks (image, marker_x, window->style->black_gc, x_blob+MARGIN, y_blob, &widgets->elev_graph_saved_img, widgets->profile_width, widgets->profile_height, &widgets->is_marker_drawn, &widgets->is_blob_drawn); } } // Draw gradients if (widgets->gradient_box != NULL) { // Saved image no longer any good as we've resized, so we remove it here if (resized && widgets->gradient_graph_saved_img.img) { g_object_unref(widgets->gradient_graph_saved_img.img); widgets->gradient_graph_saved_img.img = NULL; widgets->gradient_graph_saved_img.saved = FALSE; } child = gtk_container_get_children(GTK_CONTAINER(widgets->gradient_box)); draw_gradients (GTK_WIDGET(child->data), widgets->tr, widgets ); image = GTK_WIDGET(child->data); g_list_free(child); // Ensure marker or blob are redrawn if necessary if (widgets->is_marker_drawn || widgets->is_blob_drawn) { pc = tp_percentage_by_distance ( widgets->tr, widgets->marker_tp, widgets->track_length_inc_gaps ); gdouble x_blob = -MARGIN - 1.0; // i.e. Don't draw unless we get a valid value gint y_blob = 0; if (widgets->is_blob_drawn) { pc_blob = tp_percentage_by_distance ( widgets->tr, widgets->blob_tp, widgets->track_length_inc_gaps ); if (!isnan(pc_blob)) { x_blob = (pc_blob * widgets->profile_width); } y_blob = blobby_gradient (x_blob, widgets); } gdouble marker_x = -1.0; // i.e. Don't draw unless we get a valid value if (!isnan(pc)) { marker_x = (pc * widgets->profile_width) + MARGIN; } save_image_and_draw_graph_marks (image, marker_x, window->style->black_gc, x_blob+MARGIN, y_blob, &widgets->gradient_graph_saved_img, widgets->profile_width, widgets->profile_height, &widgets->is_marker_drawn, &widgets->is_blob_drawn); } } // Draw speeds if (widgets->speed_box != NULL) { // Saved image no longer any good as we've resized if (resized && widgets->speed_graph_saved_img.img) { g_object_unref(widgets->speed_graph_saved_img.img); widgets->speed_graph_saved_img.img = NULL; widgets->speed_graph_saved_img.saved = FALSE; } child = gtk_container_get_children(GTK_CONTAINER(widgets->speed_box)); draw_vt (GTK_WIDGET(child->data), widgets->tr, widgets ); image = GTK_WIDGET(child->data); g_list_free(child); // Ensure marker or blob are redrawn if necessary if (widgets->is_marker_drawn || widgets->is_blob_drawn) { pc = tp_percentage_by_time ( widgets->tr, widgets->marker_tp ); gdouble x_blob = -MARGIN - 1.0; // i.e. Don't draw unless we get a valid value gint y_blob = 0; if (widgets->is_blob_drawn) { pc_blob = tp_percentage_by_time ( widgets->tr, widgets->blob_tp ); if (!isnan(pc_blob)) { x_blob = (pc_blob * widgets->profile_width); } y_blob = blobby_speed (x_blob, widgets); } gdouble marker_x = -1.0; // i.e. Don't draw unless we get a valid value if (!isnan(pc)) { marker_x = (pc * widgets->profile_width) + MARGIN; } save_image_and_draw_graph_marks (image, marker_x, window->style->black_gc, x_blob+MARGIN, y_blob, &widgets->speed_graph_saved_img, widgets->profile_width, widgets->profile_height, &widgets->is_marker_drawn, &widgets->is_blob_drawn); } } // Draw Distances if (widgets->dist_box != NULL) { // Saved image no longer any good as we've resized if (resized && widgets->dist_graph_saved_img.img) { g_object_unref(widgets->dist_graph_saved_img.img); widgets->dist_graph_saved_img.img = NULL; widgets->dist_graph_saved_img.saved = FALSE; } child = gtk_container_get_children(GTK_CONTAINER(widgets->dist_box)); draw_dt (GTK_WIDGET(child->data), widgets->tr, widgets ); image = GTK_WIDGET(child->data); g_list_free(child); // Ensure marker or blob are redrawn if necessary if (widgets->is_marker_drawn || widgets->is_blob_drawn) { pc = tp_percentage_by_time ( widgets->tr, widgets->marker_tp ); gdouble x_blob = -MARGIN - 1.0; // i.e. Don't draw unless we get a valid value gint y_blob = 0; if (widgets->is_blob_drawn) { pc_blob = tp_percentage_by_time ( widgets->tr, widgets->blob_tp ); if (!isnan(pc_blob)) { x_blob = (pc_blob * widgets->profile_width); } y_blob = blobby_distance (x_blob, widgets); } gdouble marker_x = -1.0; // i.e. Don't draw unless we get a valid value if (!isnan(pc)) { marker_x = (pc * widgets->profile_width) + MARGIN; } save_image_and_draw_graph_marks (image, marker_x, window->style->black_gc, x_blob+MARGIN, y_blob, &widgets->dist_graph_saved_img, widgets->profile_width, widgets->profile_height, &widgets->is_marker_drawn, &widgets->is_blob_drawn); } } // Draw Elevations in timely manner if (widgets->elev_time_box != NULL) { // Saved image no longer any good as we've resized if (resized && widgets->elev_time_graph_saved_img.img) { g_object_unref(widgets->elev_time_graph_saved_img.img); widgets->elev_time_graph_saved_img.img = NULL; widgets->elev_time_graph_saved_img.saved = FALSE; } child = gtk_container_get_children(GTK_CONTAINER(widgets->elev_time_box)); draw_et (GTK_WIDGET(child->data), widgets->tr, widgets ); image = GTK_WIDGET(child->data); g_list_free(child); // Ensure marker or blob are redrawn if necessary if (widgets->is_marker_drawn || widgets->is_blob_drawn) { pc = tp_percentage_by_time ( widgets->tr, widgets->marker_tp ); gdouble x_blob = -MARGIN - 1.0; // i.e. Don't draw unless we get a valid value gint y_blob = 0; if (widgets->is_blob_drawn) { pc_blob = tp_percentage_by_time ( widgets->tr, widgets->blob_tp ); if (!isnan(pc_blob)) { x_blob = (pc_blob * widgets->profile_width); } y_blob = blobby_altitude_time (x_blob, widgets); } gdouble marker_x = -1.0; // i.e. Don't draw unless we get a valid value if (!isnan(pc)) { marker_x = (pc * widgets->profile_width) + MARGIN; } save_image_and_draw_graph_marks (image, marker_x, window->style->black_gc, x_blob+MARGIN, y_blob, &widgets->elev_time_graph_saved_img, widgets->profile_width, widgets->profile_height, &widgets->is_marker_drawn, &widgets->is_blob_drawn); } } // Draw speed distances if (widgets->speed_dist_box != NULL) { // Saved image no longer any good as we've resized, so we remove it here if (resized && widgets->speed_dist_graph_saved_img.img) { g_object_unref(widgets->speed_dist_graph_saved_img.img); widgets->speed_dist_graph_saved_img.img = NULL; widgets->speed_dist_graph_saved_img.saved = FALSE; } child = gtk_container_get_children(GTK_CONTAINER(widgets->speed_dist_box)); draw_sd (GTK_WIDGET(child->data), widgets->tr, widgets ); image = GTK_WIDGET(child->data); g_list_free(child); // Ensure marker or blob are redrawn if necessary if (widgets->is_marker_drawn || widgets->is_blob_drawn) { pc = tp_percentage_by_distance ( widgets->tr, widgets->marker_tp, widgets->track_length_inc_gaps ); gdouble x_blob = -MARGIN - 1.0; // i.e. Don't draw unless we get a valid value gint y_blob = 0; if (widgets->is_blob_drawn) { pc_blob = tp_percentage_by_distance ( widgets->tr, widgets->blob_tp, widgets->track_length_inc_gaps ); if (!isnan(pc_blob)) { x_blob = (pc_blob * widgets->profile_width); } y_blob = blobby_speed_dist (x_blob, widgets); } gdouble marker_x = -1.0; // i.e. Don't draw unless we get a valid value if (!isnan(pc)) { marker_x = (pc * widgets->profile_width) + MARGIN; } save_image_and_draw_graph_marks (image, marker_x, window->style->black_gc, x_blob+MARGIN, y_blob, &widgets->speed_dist_graph_saved_img, widgets->profile_width, widgets->profile_height, &widgets->is_marker_drawn, &widgets->is_blob_drawn); } } } /** * Configure/Resize the profile & speed/time images */ static gboolean configure_event ( GtkWidget *widget, GdkEventConfigure *event, PropWidgets *widgets ) { if (widgets->configure_dialog) { // Determine size offsets between dialog size and size for images // Only on the initialisation of the dialog widgets->profile_width_offset = event->width - widgets->profile_width; widgets->profile_height_offset = event->height - widgets->profile_height; widgets->configure_dialog = FALSE; // Without this the settting, the dialog will only grow in vertical size - one can not then make it smaller! gtk_widget_set_size_request ( widget, widgets->profile_width+widgets->profile_width_offset, widgets->profile_height ); // In fact this allows one to compress it a bit more vertically as I don't add on the height offset } else { widgets->profile_width_old = widgets->profile_width; widgets->profile_height_old = widgets->profile_height; } // Now adjust From Dialog size to get image size widgets->profile_width = event->width - widgets->profile_width_offset; widgets->profile_height = event->height - widgets->profile_height_offset; // ATM we receive configure_events when the dialog is moved and so no further action is necessary if ( !widgets->configure_dialog && (widgets->profile_width_old == widgets->profile_width) && (widgets->profile_height_old == widgets->profile_height) ) return FALSE; // Draw stuff draw_all_graphs ( widget, widgets, TRUE ); return FALSE; } /** * Create height profile widgets including the image and callbacks */ GtkWidget *vik_trw_layer_create_profile ( GtkWidget *window, PropWidgets *widgets, gdouble *min_alt, gdouble *max_alt) { GdkPixmap *pix; GtkWidget *image; GtkWidget *eventbox; // First allocation widgets->altitudes = vik_track_make_elevation_map ( widgets->tr, widgets->profile_width ); if ( widgets->altitudes == NULL ) { *min_alt = *max_alt = VIK_DEFAULT_ALTITUDE; return NULL; } minmax_array(widgets->altitudes, min_alt, max_alt, TRUE, widgets->profile_width); pix = gdk_pixmap_new( window->window, widgets->profile_width + MARGIN, widgets->profile_height, -1 ); image = gtk_image_new_from_pixmap ( pix, NULL ); g_object_unref ( G_OBJECT(pix) ); eventbox = gtk_event_box_new (); g_signal_connect ( G_OBJECT(eventbox), "button_press_event", G_CALLBACK(track_profile_click), widgets ); g_signal_connect ( G_OBJECT(eventbox), "motion_notify_event", G_CALLBACK(track_profile_move), widgets ); gtk_container_add ( GTK_CONTAINER(eventbox), image ); gtk_widget_set_events (eventbox, GDK_BUTTON_PRESS_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_STRUCTURE_MASK); return eventbox; } /** * Create height profile widgets including the image and callbacks */ GtkWidget *vik_trw_layer_create_gradient ( GtkWidget *window, PropWidgets *widgets) { GdkPixmap *pix; GtkWidget *image; GtkWidget *eventbox; // First allocation widgets->gradients = vik_track_make_gradient_map ( widgets->tr, widgets->profile_width ); if ( widgets->gradients == NULL ) { return NULL; } pix = gdk_pixmap_new( window->window, widgets->profile_width + MARGIN, widgets->profile_height, -1 ); image = gtk_image_new_from_pixmap ( pix, NULL ); g_object_unref ( G_OBJECT(pix) ); eventbox = gtk_event_box_new (); g_signal_connect ( G_OBJECT(eventbox), "button_press_event", G_CALLBACK(track_gradient_click), widgets ); g_signal_connect ( G_OBJECT(eventbox), "motion_notify_event", G_CALLBACK(track_gradient_move), widgets ); gtk_container_add ( GTK_CONTAINER(eventbox), image ); gtk_widget_set_events (eventbox, GDK_BUTTON_PRESS_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_STRUCTURE_MASK); return eventbox; } /** * Create speed/time widgets including the image and callbacks */ GtkWidget *vik_trw_layer_create_vtdiag ( GtkWidget *window, PropWidgets *widgets) { GdkPixmap *pix; GtkWidget *image; GtkWidget *eventbox; // First allocation widgets->speeds = vik_track_make_speed_map ( widgets->tr, widgets->profile_width ); if ( widgets->speeds == NULL ) return NULL; pix = gdk_pixmap_new( window->window, widgets->profile_width + MARGIN, widgets->profile_height, -1 ); image = gtk_image_new_from_pixmap ( pix, NULL ); #if 0 /* XXX this can go out, it's just a helpful dev tool */ { int j; GdkGC **colors[8] = { window->style->bg_gc, window->style->fg_gc, window->style->light_gc, window->style->dark_gc, window->style->mid_gc, window->style->text_gc, window->style->base_gc, window->style->text_aa_gc }; for (i=0; i<5; i++) { for (j=0; j<8; j++) { gdk_draw_rectangle(GDK_DRAWABLE(pix), colors[j][i], TRUE, i*20, j*20, 20, 20); gdk_draw_rectangle(GDK_DRAWABLE(pix), window->style->black_gc, FALSE, i*20, j*20, 20, 20); } } } #endif g_object_unref ( G_OBJECT(pix) ); eventbox = gtk_event_box_new (); g_signal_connect ( G_OBJECT(eventbox), "button_press_event", G_CALLBACK(track_vt_click), widgets ); g_signal_connect ( G_OBJECT(eventbox), "motion_notify_event", G_CALLBACK(track_vt_move), widgets ); gtk_container_add ( GTK_CONTAINER(eventbox), image ); gtk_widget_set_events (eventbox, GDK_BUTTON_PRESS_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK); return eventbox; } /** * Create distance / time widgets including the image and callbacks */ GtkWidget *vik_trw_layer_create_dtdiag ( GtkWidget *window, PropWidgets *widgets) { GdkPixmap *pix; GtkWidget *image; GtkWidget *eventbox; // First allocation widgets->distances = vik_track_make_distance_map ( widgets->tr, widgets->profile_width ); if ( widgets->distances == NULL ) return NULL; pix = gdk_pixmap_new( window->window, widgets->profile_width + MARGIN, widgets->profile_height, -1 ); image = gtk_image_new_from_pixmap ( pix, NULL ); g_object_unref ( G_OBJECT(pix) ); eventbox = gtk_event_box_new (); g_signal_connect ( G_OBJECT(eventbox), "button_press_event", G_CALLBACK(track_dt_click), widgets ); g_signal_connect ( G_OBJECT(eventbox), "motion_notify_event", G_CALLBACK(track_dt_move), widgets ); //g_signal_connect_swapped ( G_OBJECT(eventbox), "destroy", G_CALLBACK(g_free), widgets ); gtk_container_add ( GTK_CONTAINER(eventbox), image ); gtk_widget_set_events (eventbox, GDK_BUTTON_PRESS_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK); return eventbox; } /** * Create elevation / time widgets including the image and callbacks */ GtkWidget *vik_trw_layer_create_etdiag ( GtkWidget *window, PropWidgets *widgets) { GdkPixmap *pix; GtkWidget *image; GtkWidget *eventbox; // First allocation widgets->ats = vik_track_make_elevation_time_map ( widgets->tr, widgets->profile_width ); if ( widgets->ats == NULL ) return NULL; pix = gdk_pixmap_new( window->window, widgets->profile_width + MARGIN, widgets->profile_height, -1 ); image = gtk_image_new_from_pixmap ( pix, NULL ); g_object_unref ( G_OBJECT(pix) ); eventbox = gtk_event_box_new (); g_signal_connect ( G_OBJECT(eventbox), "button_press_event", G_CALLBACK(track_et_click), widgets ); g_signal_connect ( G_OBJECT(eventbox), "motion_notify_event", G_CALLBACK(track_et_move), widgets ); gtk_container_add ( GTK_CONTAINER(eventbox), image ); gtk_widget_set_events (eventbox, GDK_BUTTON_PRESS_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK); return eventbox; } /** * Create speed/distance widgets including the image and callbacks */ GtkWidget *vik_trw_layer_create_sddiag ( GtkWidget *window, PropWidgets *widgets) { GdkPixmap *pix; GtkWidget *image; GtkWidget *eventbox; // First allocation widgets->speeds_dist = vik_track_make_speed_dist_map ( widgets->tr, widgets->profile_width ); if ( widgets->speeds_dist == NULL ) return NULL; pix = gdk_pixmap_new( window->window, widgets->profile_width + MARGIN, widgets->profile_height, -1 ); image = gtk_image_new_from_pixmap ( pix, NULL ); g_object_unref ( G_OBJECT(pix) ); eventbox = gtk_event_box_new (); g_signal_connect ( G_OBJECT(eventbox), "button_press_event", G_CALLBACK(track_sd_click), widgets ); g_signal_connect ( G_OBJECT(eventbox), "motion_notify_event", G_CALLBACK(track_sd_move), widgets ); gtk_container_add ( GTK_CONTAINER(eventbox), image ); gtk_widget_set_events (eventbox, GDK_BUTTON_PRESS_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK); return eventbox; } #undef MARGIN static void destroy_cb ( GtkDialog *dialog, PropWidgets *widgets ) { prop_widgets_free(widgets); } static void propwin_response_cb( GtkDialog *dialog, gint resp, PropWidgets *widgets ) { VikTrack *tr = widgets->tr; VikTrwLayer *vtl = widgets->vtl; gboolean keep_dialog = FALSE; /* FIXME: check and make sure the track still exists before doing anything to it */ /* Note: destroying diaglog (eg, parent window exit) won't give "response" */ switch (resp) { case GTK_RESPONSE_DELETE_EVENT: /* received delete event (not from buttons) */ case GTK_RESPONSE_REJECT: break; case GTK_RESPONSE_ACCEPT: vik_track_set_comment(tr, gtk_entry_get_text(GTK_ENTRY(widgets->w_comment))); vik_track_set_description(tr, gtk_entry_get_text(GTK_ENTRY(widgets->w_description))); gtk_color_button_get_color ( GTK_COLOR_BUTTON(widgets->w_color), &(tr->color) ); trw_layer_update_treeview ( widgets->vtl, widgets->tr, widgets->trk_id ); vik_layer_emit_update ( VIK_LAYER(vtl) ); break; case VIK_TRW_LAYER_PROPWIN_REVERSE: vik_track_reverse(tr); vik_layer_emit_update ( VIK_LAYER(vtl) ); break; case VIK_TRW_LAYER_PROPWIN_DEL_DUP: vik_track_remove_dup_points(tr); // NB ignore the returned answer // As we could have seen the nuber of dulplicates that would be deleted in the properties statistics tab, // choose not to inform the user unnecessarily /* above operation could have deleted current_tp or last_tp */ trw_layer_cancel_tps_of_track ( vtl, tr ); vik_layer_emit_update ( VIK_LAYER(vtl) ); break; case VIK_TRW_LAYER_PROPWIN_SPLIT: { /* get new tracks, add them and then the delete old one. old can still exist on clipboard. */ guint ntracks; VikTrack **tracks = vik_track_split_into_segments(tr, &ntracks); gchar *new_tr_name; guint i; for ( i = 0; i < ntracks; i++ ) { if ( tracks[i] ) { new_tr_name = trw_layer_new_unique_sublayer_name ( vtl, widgets->tr->is_route ? VIK_TRW_LAYER_SUBLAYER_ROUTE : VIK_TRW_LAYER_SUBLAYER_TRACK, widgets->tr->name); if ( widgets->tr->is_route ) vik_trw_layer_add_route ( vtl, new_tr_name, tracks[i] ); else vik_trw_layer_add_track ( vtl, new_tr_name, tracks[i] ); } } if ( tracks ) { g_free ( tracks ); /* Don't let track destroy this dialog */ vik_track_clear_property_dialog(tr); if ( widgets->tr->is_route ) vik_trw_layer_delete_route ( vtl, tr ); else vik_trw_layer_delete_track ( vtl, tr ); vik_layer_emit_update ( VIK_LAYER(vtl) ); /* chase thru the hoops */ } } break; case VIK_TRW_LAYER_PROPWIN_SPLIT_MARKER: { GList *iter = tr->trackpoints; while ((iter = iter->next)) { if (widgets->marker_tp == VIK_TRACKPOINT(iter->data)) break; } if (iter == NULL) { a_dialog_msg(VIK_GTK_WINDOW_FROM_LAYER(vtl), GTK_MESSAGE_ERROR, _("Failed spliting track. Track unchanged"), NULL); keep_dialog = TRUE; break; } gchar *r_name = trw_layer_new_unique_sublayer_name(vtl, widgets->tr->is_route ? VIK_TRW_LAYER_SUBLAYER_ROUTE : VIK_TRW_LAYER_SUBLAYER_TRACK, widgets->tr->name); iter->prev->next = NULL; iter->prev = NULL; VikTrack *tr_right = vik_track_new(); if ( tr->comment ) vik_track_set_comment ( tr_right, tr->comment ); tr_right->visible = tr->visible; tr_right->is_route = tr->is_route; tr_right->trackpoints = iter; if ( widgets->tr->is_route ) vik_trw_layer_add_route(vtl, r_name, tr_right); else vik_trw_layer_add_track(vtl, r_name, tr_right); vik_layer_emit_update ( VIK_LAYER(vtl) ); } break; default: fprintf(stderr, "DEBUG: unknown response\n"); return; } /* Keep same behaviour for now: destroy dialog if click on any button */ if (!keep_dialog) { vik_track_clear_property_dialog(tr); gtk_widget_destroy ( GTK_WIDGET(dialog) ); } } /** * Force a redraw when checkbutton has been toggled to show/hide that information */ static void checkbutton_toggle_cb ( GtkToggleButton *togglebutton, PropWidgets *widgets, gpointer dummy ) { // Even though not resized, we'll pretend it is - // as this invalidates the saved images (since the image may have changed) draw_all_graphs ( widgets->dialog, widgets, TRUE ); } /** * Create the widgets for the given graph tab */ static GtkWidget *create_graph_page ( GtkWidget *graph, const gchar *markup, GtkWidget *value, const gchar *markup2, GtkWidget *value2, GtkWidget *checkbutton1, gboolean checkbutton1_default, GtkWidget *checkbutton2, gboolean checkbutton2_default ) { GtkWidget *hbox = gtk_hbox_new ( FALSE, 10 ); GtkWidget *vbox = gtk_vbox_new ( FALSE, 10 ); GtkWidget *label = gtk_label_new (NULL); GtkWidget *label2 = gtk_label_new (NULL); gtk_box_pack_start (GTK_BOX(vbox), graph, FALSE, FALSE, 0); gtk_label_set_markup ( GTK_LABEL(label), markup ); gtk_label_set_markup ( GTK_LABEL(label2), markup2 ); gtk_box_pack_start (GTK_BOX(hbox), label, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX(hbox), value, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX(hbox), label2, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX(hbox), value2, FALSE, FALSE, 0); if (checkbutton2) { gtk_box_pack_end (GTK_BOX(hbox), checkbutton2, FALSE, FALSE, 0); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(checkbutton2), checkbutton2_default); } if (checkbutton1) { gtk_box_pack_end (GTK_BOX(hbox), checkbutton1, FALSE, FALSE, 0); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(checkbutton1), checkbutton1_default); } gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0); return vbox; } void vik_trw_layer_propwin_run ( GtkWindow *parent, VikTrwLayer *vtl, VikTrack *tr, gpointer vlp, VikViewport *vvp, gpointer *trk_id ) { PropWidgets *widgets = prop_widgets_new(); widgets->vtl = vtl; widgets->vvp = vvp; widgets->vlp = vlp; widgets->tr = tr; widgets->trk_id = trk_id; widgets->profile_width = PROPWIN_PROFILE_WIDTH; widgets->profile_height = PROPWIN_PROFILE_HEIGHT; gchar *title = g_strdup_printf(_("%s - Track Properties"), tr->name); GtkWidget *dialog = gtk_dialog_new_with_buttons (title, parent, GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_NO_SEPARATOR, GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, _("Split at _Marker"), VIK_TRW_LAYER_PROPWIN_SPLIT_MARKER, _("Split _Segments"), VIK_TRW_LAYER_PROPWIN_SPLIT, _("_Reverse"), VIK_TRW_LAYER_PROPWIN_REVERSE, _("_Delete Dupl."), VIK_TRW_LAYER_PROPWIN_DEL_DUP, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL); widgets->dialog = dialog; g_signal_connect( G_OBJECT(dialog), "response", G_CALLBACK(propwin_response_cb), widgets); g_free(title); GtkTable *table; gdouble tr_len; gulong tp_count; guint seg_count; gdouble min_alt, max_alt; widgets->elev_box = vik_trw_layer_create_profile(GTK_WIDGET(parent), widgets, &min_alt, &max_alt); widgets->gradient_box = vik_trw_layer_create_gradient(GTK_WIDGET(parent), widgets); widgets->speed_box = vik_trw_layer_create_vtdiag(GTK_WIDGET(parent), widgets); widgets->dist_box = vik_trw_layer_create_dtdiag(GTK_WIDGET(parent), widgets); widgets->elev_time_box = vik_trw_layer_create_etdiag(GTK_WIDGET(parent), widgets); widgets->speed_dist_box = vik_trw_layer_create_sddiag(GTK_WIDGET(parent), widgets); GtkWidget *graphs = gtk_notebook_new(); GtkWidget *content[20]; int cnt; int i; static gchar *label_texts[] = { N_("Comment:"), N_("Description:"), N_("Track Length:"), N_("Trackpoints:"), N_("Segments:"), N_("Duplicate Points:"), N_("Max Speed:"), N_("Avg. Speed:"), N_("Moving Avg. Speed:"), N_("Avg. Dist. Between TPs:"), N_("Elevation Range:"), N_("Total Elevation Gain/Loss:"), N_("Start:"), N_("End:"), N_("Duration:"), N_("Color:") }; static gchar tmp_buf[50]; gdouble tmp_speed; cnt = 0; widgets->w_comment = gtk_entry_new (); if ( tr->comment ) gtk_entry_set_text ( GTK_ENTRY(widgets->w_comment), tr->comment ); g_signal_connect_swapped ( widgets->w_comment, "activate", G_CALLBACK(a_dialog_response_accept), GTK_DIALOG(dialog) ); content[cnt++] = widgets->w_comment; widgets->w_description = gtk_entry_new (); if ( tr->description ) gtk_entry_set_text ( GTK_ENTRY(widgets->w_description), tr->description ); g_signal_connect_swapped ( widgets->w_description, "activate", G_CALLBACK(a_dialog_response_accept), GTK_DIALOG(dialog) ); content[cnt++] = widgets->w_description; vik_units_distance_t dist_units = a_vik_get_units_distance (); // NB This value not shown yet - but is used by internal calculations widgets->track_length_inc_gaps = vik_track_get_length_including_gaps(tr); tr_len = widgets->track_length = vik_track_get_length(tr); switch (dist_units) { case VIK_UNITS_DISTANCE_KILOMETRES: g_snprintf(tmp_buf, sizeof(tmp_buf), "%.2f km", tr_len/1000.0 ); break; case VIK_UNITS_DISTANCE_MILES: g_snprintf(tmp_buf, sizeof(tmp_buf), "%.2f miles", VIK_METERS_TO_MILES(tr_len) ); break; default: g_critical("Houston, we've had a problem. distance=%d", dist_units); } widgets->w_track_length = content[cnt++] = gtk_label_new ( tmp_buf ); tp_count = vik_track_get_tp_count(tr); g_snprintf(tmp_buf, sizeof(tmp_buf), "%lu", tp_count ); widgets->w_tp_count = content[cnt++] = gtk_label_new ( tmp_buf ); seg_count = vik_track_get_segment_count(tr) ; g_snprintf(tmp_buf, sizeof(tmp_buf), "%u", seg_count ); widgets->w_segment_count = content[cnt++] = gtk_label_new ( tmp_buf ); g_snprintf(tmp_buf, sizeof(tmp_buf), "%lu", vik_track_get_dup_point_count(tr) ); widgets->w_duptp_count = content[cnt++] = gtk_label_new ( tmp_buf ); vik_units_speed_t speed_units = a_vik_get_units_speed (); tmp_speed = vik_track_get_max_speed(tr); if ( tmp_speed == 0 ) g_snprintf(tmp_buf, sizeof(tmp_buf), _("No Data")); else { switch (speed_units) { case VIK_UNITS_SPEED_KILOMETRES_PER_HOUR: g_snprintf(tmp_buf, sizeof(tmp_buf), "%.2f km/h", VIK_MPS_TO_KPH(tmp_speed)); break; case VIK_UNITS_SPEED_MILES_PER_HOUR: g_snprintf(tmp_buf, sizeof(tmp_buf), "%.2f mph", VIK_MPS_TO_MPH(tmp_speed)); break; case VIK_UNITS_SPEED_METRES_PER_SECOND: g_snprintf(tmp_buf, sizeof(tmp_buf), "%.2f m/s", tmp_speed ); break; case VIK_UNITS_SPEED_KNOTS: g_snprintf(tmp_buf, sizeof(tmp_buf), "%.2f knots", VIK_MPS_TO_KNOTS(tmp_speed)); break; default: g_snprintf (tmp_buf, sizeof(tmp_buf), "--" ); g_critical("Houston, we've had a problem. speed=%d", speed_units); } } widgets->w_max_speed = content[cnt++] = gtk_label_new ( tmp_buf ); tmp_speed = vik_track_get_average_speed(tr); if ( tmp_speed == 0 ) g_snprintf(tmp_buf, sizeof(tmp_buf), _("No Data")); else { switch (speed_units) { case VIK_UNITS_SPEED_KILOMETRES_PER_HOUR: g_snprintf(tmp_buf, sizeof(tmp_buf), "%.2f km/h", VIK_MPS_TO_KPH(tmp_speed)); break; case VIK_UNITS_SPEED_MILES_PER_HOUR: g_snprintf(tmp_buf, sizeof(tmp_buf), "%.2f mph", VIK_MPS_TO_MPH(tmp_speed)); break; case VIK_UNITS_SPEED_METRES_PER_SECOND: g_snprintf(tmp_buf, sizeof(tmp_buf), "%.2f m/s", tmp_speed ); break; case VIK_UNITS_SPEED_KNOTS: g_snprintf(tmp_buf, sizeof(tmp_buf), "%.2f knots", VIK_MPS_TO_KNOTS(tmp_speed)); break; default: g_snprintf (tmp_buf, sizeof(tmp_buf), "--" ); g_critical("Houston, we've had a problem. speed=%d", speed_units); } } widgets->w_avg_speed = content[cnt++] = gtk_label_new ( tmp_buf ); // Use 60sec as the default period to be considered stopped // this is the TrackWaypoint draw stops default value 'vtl->stop_length' // however this variable is not directly accessible - and I don't expect it's often changed from the default // so ATM just put in the number tmp_speed = vik_track_get_average_speed_moving(tr, 60); if ( tmp_speed == 0 ) g_snprintf(tmp_buf, sizeof(tmp_buf), _("No Data")); else { switch (speed_units) { case VIK_UNITS_SPEED_KILOMETRES_PER_HOUR: g_snprintf(tmp_buf, sizeof(tmp_buf), "%.2f km/h", VIK_MPS_TO_KPH(tmp_speed)); break; case VIK_UNITS_SPEED_MILES_PER_HOUR: g_snprintf(tmp_buf, sizeof(tmp_buf), "%.2f mph", VIK_MPS_TO_MPH(tmp_speed)); break; case VIK_UNITS_SPEED_METRES_PER_SECOND: g_snprintf(tmp_buf, sizeof(tmp_buf), "%.2f m/s", tmp_speed ); break; case VIK_UNITS_SPEED_KNOTS: g_snprintf(tmp_buf, sizeof(tmp_buf), "%.2f knots", VIK_MPS_TO_KNOTS(tmp_speed)); break; default: g_snprintf (tmp_buf, sizeof(tmp_buf), "--" ); g_critical("Houston, we've had a problem. speed=%d", speed_units); } } widgets->w_mvg_speed = content[cnt++] = gtk_label_new ( tmp_buf ); switch (dist_units) { case VIK_UNITS_DISTANCE_KILOMETRES: // Even though kilometres, the average distance between points is going to be quite small so keep in metres g_snprintf(tmp_buf, sizeof(tmp_buf), "%.2f m", (tp_count - seg_count) == 0 ? 0 : tr_len / ( tp_count - seg_count ) ); break; case VIK_UNITS_DISTANCE_MILES: g_snprintf(tmp_buf, sizeof(tmp_buf), "%.3f miles", (tp_count - seg_count) == 0 ? 0 : VIK_METERS_TO_MILES(tr_len / ( tp_count - seg_count )) ); break; default: g_critical("Houston, we've had a problem. distance=%d", dist_units); } widgets->w_avg_dist = content[cnt++] = gtk_label_new ( tmp_buf ); vik_units_height_t height_units = a_vik_get_units_height (); if ( min_alt == VIK_DEFAULT_ALTITUDE ) g_snprintf(tmp_buf, sizeof(tmp_buf), _("No Data")); else { switch (height_units) { case VIK_UNITS_HEIGHT_METRES: g_snprintf(tmp_buf, sizeof(tmp_buf), "%.0f m - %.0f m", min_alt, max_alt ); break; case VIK_UNITS_HEIGHT_FEET: g_snprintf(tmp_buf, sizeof(tmp_buf), "%.0f feet - %.0f feet", VIK_METERS_TO_FEET(min_alt), VIK_METERS_TO_FEET(max_alt) ); break; default: g_snprintf(tmp_buf, sizeof(tmp_buf), "--" ); g_critical("Houston, we've had a problem. height=%d", height_units); } } widgets->w_elev_range = content[cnt++] = gtk_label_new ( tmp_buf ); vik_track_get_total_elevation_gain(tr, &max_alt, &min_alt ); if ( min_alt == VIK_DEFAULT_ALTITUDE ) g_snprintf(tmp_buf, sizeof(tmp_buf), _("No Data")); else { switch (height_units) { case VIK_UNITS_HEIGHT_METRES: g_snprintf(tmp_buf, sizeof(tmp_buf), "%.0f m / %.0f m", max_alt, min_alt ); break; case VIK_UNITS_HEIGHT_FEET: g_snprintf(tmp_buf, sizeof(tmp_buf), "%.0f feet / %.0f feet", VIK_METERS_TO_FEET(max_alt), VIK_METERS_TO_FEET(min_alt) ); break; default: g_snprintf(tmp_buf, sizeof(tmp_buf), "--" ); g_critical("Houston, we've had a problem. height=%d", height_units); } } widgets->w_elev_gain = content[cnt++] = gtk_label_new ( tmp_buf ); #if 0 #define PACK(w) gtk_box_pack_start (GTK_BOX(right_vbox), w, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX(right_vbox), e_cmt, FALSE, FALSE, 0); PACK(l_len); PACK(l_tps); PACK(l_segs); PACK(l_dups); PACK(l_maxs); PACK(l_avgs); PACK(l_avgd); PACK(l_elev); PACK(l_galo); #undef PACK; #endif if ( tr->trackpoints && VIK_TRACKPOINT(tr->trackpoints->data)->timestamp ) { time_t t1, t2; t1 = VIK_TRACKPOINT(tr->trackpoints->data)->timestamp; t2 = VIK_TRACKPOINT(g_list_last(tr->trackpoints)->data)->timestamp; strncpy(tmp_buf, ctime(&t1), sizeof(tmp_buf)); tmp_buf[sizeof(tmp_buf)-1] = 0; g_strchomp(tmp_buf); widgets->w_time_start = content[cnt++] = gtk_label_new(tmp_buf); strncpy(tmp_buf, ctime(&t2), sizeof(tmp_buf)); tmp_buf[sizeof(tmp_buf)-1] = 0; g_strchomp(tmp_buf); widgets->w_time_end = content[cnt++] = gtk_label_new(tmp_buf); g_snprintf(tmp_buf, sizeof(tmp_buf), _("%d minutes"), (int)(t2-t1)/60); widgets->w_time_dur = content[cnt++] = gtk_label_new(tmp_buf); } else { widgets->w_time_start = content[cnt++] = gtk_label_new(_("No Data")); widgets->w_time_end = content[cnt++] = gtk_label_new(_("No Data")); widgets->w_time_dur = content[cnt++] = gtk_label_new(_("No Data")); } widgets->w_color = content[cnt++] = gtk_color_button_new_with_color ( &(tr->color) ); table = GTK_TABLE(gtk_table_new (cnt, 2, FALSE)); gtk_table_set_col_spacing (table, 0, 10); for (i=0; ielev_box ) { GtkWidget *page = NULL; widgets->w_cur_dist = gtk_label_new(_("No Data")); widgets->w_cur_elevation = gtk_label_new(_("No Data")); widgets->w_show_dem = gtk_check_button_new_with_mnemonic(_("Show D_EM")); widgets->w_show_alt_gps_speed = gtk_check_button_new_with_mnemonic(_("Show _GPS Speed")); page = create_graph_page (widgets->elev_box, _("Track Distance:"), widgets->w_cur_dist, _("Track Height:"), widgets->w_cur_elevation, widgets->w_show_dem, TRUE, widgets->w_show_alt_gps_speed, TRUE); g_signal_connect (widgets->w_show_dem, "toggled", G_CALLBACK (checkbutton_toggle_cb), widgets); g_signal_connect (widgets->w_show_alt_gps_speed, "toggled", G_CALLBACK (checkbutton_toggle_cb), widgets); gtk_notebook_append_page(GTK_NOTEBOOK(graphs), page, gtk_label_new(_("Elevation-distance"))); } if ( widgets->gradient_box ) { GtkWidget *page = NULL; widgets->w_cur_gradient_dist = gtk_label_new(_("No Data")); widgets->w_cur_gradient_gradient = gtk_label_new(_("No Data")); widgets->w_show_gradient_gps_speed = gtk_check_button_new_with_mnemonic(_("Show _GPS Speed")); page = create_graph_page (widgets->gradient_box, _("Track Distance:"), widgets->w_cur_gradient_dist, _("Track Gradient:"), widgets->w_cur_gradient_gradient, widgets->w_show_gradient_gps_speed, TRUE, NULL, FALSE); g_signal_connect (widgets->w_show_gradient_gps_speed, "toggled", G_CALLBACK (checkbutton_toggle_cb), widgets); gtk_notebook_append_page(GTK_NOTEBOOK(graphs), page, gtk_label_new(_("Gradient-distance"))); } if ( widgets->speed_box ) { GtkWidget *page = NULL; widgets->w_cur_time = gtk_label_new(_("No Data")); widgets->w_cur_speed = gtk_label_new(_("No Data")); widgets->w_show_gps_speed = gtk_check_button_new_with_mnemonic(_("Show _GPS Speed")); page = create_graph_page (widgets->speed_box, _("Track Time:"), widgets->w_cur_time, _("Track Speed:"), widgets->w_cur_speed, widgets->w_show_gps_speed, TRUE, NULL, FALSE); g_signal_connect (widgets->w_show_gps_speed, "toggled", G_CALLBACK (checkbutton_toggle_cb), widgets); gtk_notebook_append_page(GTK_NOTEBOOK(graphs), page, gtk_label_new(_("Speed-time"))); } if ( widgets->dist_box ) { GtkWidget *page = NULL; widgets->w_cur_dist_time = gtk_label_new(_("No Data")); widgets->w_cur_dist_dist = gtk_label_new(_("No Data")); widgets->w_show_dist_speed = gtk_check_button_new_with_mnemonic(_("Show S_peed")); page = create_graph_page (widgets->dist_box, _("Track Distance:"), widgets->w_cur_dist_dist, _("Track Time:"), widgets->w_cur_dist_time, widgets->w_show_dist_speed, FALSE, NULL, FALSE); g_signal_connect (widgets->w_show_dist_speed, "toggled", G_CALLBACK (checkbutton_toggle_cb), widgets); gtk_notebook_append_page(GTK_NOTEBOOK(graphs), page, gtk_label_new(_("Distance-time"))); } if ( widgets->elev_time_box ) { GtkWidget *page = NULL; widgets->w_cur_elev_time = gtk_label_new(_("No Data")); widgets->w_cur_elev_elev = gtk_label_new(_("No Data")); widgets->w_show_elev_speed = gtk_check_button_new_with_mnemonic(_("Show S_peed")); page = create_graph_page (widgets->elev_time_box, _("Track Time:"), widgets->w_cur_elev_time, _("Track Height:"), widgets->w_cur_elev_elev, widgets->w_show_elev_speed, FALSE, NULL, FALSE); g_signal_connect (widgets->w_show_elev_speed, "toggled", G_CALLBACK (checkbutton_toggle_cb), widgets); gtk_notebook_append_page(GTK_NOTEBOOK(graphs), page, gtk_label_new(_("Elevation-time"))); } if ( widgets->speed_dist_box ) { GtkWidget *page = NULL; widgets->w_cur_speed_dist = gtk_label_new(_("No Data")); widgets->w_cur_speed_speed = gtk_label_new(_("No Data")); widgets->w_show_sd_gps_speed = gtk_check_button_new_with_mnemonic(_("Show _GPS Speed")); page = create_graph_page (widgets->speed_dist_box, _("Track Distance:"), widgets->w_cur_speed_dist, _("Track Speed:"), widgets->w_cur_speed_speed, widgets->w_show_sd_gps_speed, TRUE, NULL, FALSE); g_signal_connect (widgets->w_show_sd_gps_speed, "toggled", G_CALLBACK (checkbutton_toggle_cb), widgets); gtk_notebook_append_page(GTK_NOTEBOOK(graphs), page, gtk_label_new(_("Speed-distance"))); } gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), graphs, FALSE, FALSE, 0); gtk_dialog_set_response_sensitive(GTK_DIALOG(dialog), VIK_TRW_LAYER_PROPWIN_SPLIT_MARKER, FALSE); if (seg_count <= 1) gtk_dialog_set_response_sensitive(GTK_DIALOG(dialog), VIK_TRW_LAYER_PROPWIN_SPLIT, FALSE); if (vik_track_get_dup_point_count(tr) <= 0) gtk_dialog_set_response_sensitive(GTK_DIALOG(dialog), VIK_TRW_LAYER_PROPWIN_DEL_DUP, FALSE); // On dialog realization configure_event casues the graphs to be initially drawn widgets->configure_dialog = TRUE; g_signal_connect ( G_OBJECT(dialog), "configure-event", G_CALLBACK (configure_event), widgets ); g_signal_connect ( G_OBJECT(dialog), "destroy", G_CALLBACK (destroy_cb), widgets ); vik_track_set_property_dialog(tr, dialog); gtk_dialog_set_default_response ( GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT ); gtk_widget_show_all ( dialog ); } /** * Update this property dialog * e.g. if the track has been renamed */ void vik_trw_layer_propwin_update ( VikTrack *trk ) { // If not displayed do nothing if ( !trk->property_dialog ) return; // Update title with current name if ( trk->name ) { gchar *title = g_strdup_printf ( _("%s - Track Properties"), trk->name ); gtk_window_set_title ( GTK_WINDOW(trk->property_dialog), title ); g_free(title); } } viking-1.4.2/src/vikslippymapsource.c0000644000175000017500000003341412175546146014652 00000000000000/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * viking * Copyright (C) 2009, Guilhem Bonnefille * * viking is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * viking is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ /** * SECTION:vikslippymapsource * @short_description: the class for SlippyMap oriented map sources * * The #VikSlippyMapSource class handles slippy map oriented map sources. * The related service is tile oriented, à la Google. * * The tiles are in 'google spherical mercator', which is * basically a mercator projection that assumes a spherical earth. * http://docs.openlayers.org/library/spherical_mercator.html * * Such service is also a type of TMS (Tile Map Service) as defined in * OSGeo's wiki. * http://wiki.osgeo.org/wiki/Tile_Map_Service_Specification * But take care that the Y axis is inverted, ie the origin is at top-left * corner. * Following this specification, the protocol handled by this class * follows the global-mercator profile. * * You can also find many interesting information on the OSM's wiki. * http://wiki.openstreetmap.org/wiki/Slippy_map_tilenames * http://wiki.openstreetmap.org/wiki/Setting_up_TMS */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef HAVE_MATH_H #include #endif #include "globals.h" #include "vikslippymapsource.h" 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 ); static gchar *_get_hostname( VikMapSourceDefault *self ); static DownloadMapOptions *_get_download_options( VikMapSourceDefault *self ); typedef struct _VikSlippyMapSourcePrivate VikSlippyMapSourcePrivate; 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)) /* properties */ enum { PROP_0, PROP_HOSTNAME, PROP_URL, PROP_REFERER, 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); static void vik_slippy_map_source_init (VikSlippyMapSource *self) { /* initialize the object here */ VikSlippyMapSourcePrivate *priv = VIK_SLIPPY_MAP_SOURCE_PRIVATE (self); priv->hostname = NULL; priv->url = NULL; priv->options.referer = NULL; 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, "tilesize-y", 256, "drawmode", VIK_VIEWPORT_DRAWMODE_MERCATOR, NULL); } static void vik_slippy_map_source_finalize (GObject *object) { VikSlippyMapSource *self = VIK_SLIPPY_MAP_SOURCE (object); VikSlippyMapSourcePrivate *priv = VIK_SLIPPY_MAP_SOURCE_PRIVATE (self); g_free (priv->hostname); priv->hostname = NULL; g_free (priv->url); priv->url = NULL; g_free (priv->options.referer); priv->options.referer = NULL; G_OBJECT_CLASS (vik_slippy_map_source_parent_class)->finalize (object); } static void vik_slippy_map_source_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { VikSlippyMapSource *self = VIK_SLIPPY_MAP_SOURCE (object); VikSlippyMapSourcePrivate *priv = VIK_SLIPPY_MAP_SOURCE_PRIVATE (self); switch (property_id) { case PROP_HOSTNAME: g_free (priv->hostname); priv->hostname = g_value_dup_string (value); break; case PROP_URL: g_free (priv->url); priv->url = g_value_dup_string (value); break; case PROP_REFERER: g_free (priv->options.referer); priv->options.referer = g_value_dup_string (value); break; case PROP_FOLLOW_LOCATION: priv->options.follow_location = g_value_get_long (value); break; case PROP_CHECK_FILE_SERVER_TIME: priv->options.check_file_server_time = g_value_get_boolean (value); break; case PROP_USE_ETAG: 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); break; } } static void vik_slippy_map_source_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { VikSlippyMapSource *self = VIK_SLIPPY_MAP_SOURCE (object); VikSlippyMapSourcePrivate *priv = VIK_SLIPPY_MAP_SOURCE_PRIVATE (self); switch (property_id) { case PROP_HOSTNAME: g_value_set_string (value, priv->hostname); break; case PROP_URL: g_value_set_string (value, priv->url); break; case PROP_REFERER: g_value_set_string (value, priv->options.referer); break; case PROP_FOLLOW_LOCATION: g_value_set_long (value, priv->options.follow_location); break; case PROP_CHECK_FILE_SERVER_TIME: g_value_set_boolean (value, priv->options.check_file_server_time); break; case PROP_USE_ETAG: 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); break; } } static void vik_slippy_map_source_class_init (VikSlippyMapSourceClass *klass) { GObjectClass* object_class = G_OBJECT_CLASS (klass); VikMapSourceClass* grandparent_class = VIK_MAP_SOURCE_CLASS (klass); VikMapSourceDefaultClass* parent_class = VIK_MAP_SOURCE_DEFAULT_CLASS (klass); GParamSpec *pspec = NULL; object_class->set_property = vik_slippy_map_source_set_property; object_class->get_property = vik_slippy_map_source_get_property; /* 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; parent_class->get_hostname = _get_hostname; parent_class->get_download_options = _get_download_options; pspec = g_param_spec_string ("hostname", "Hostname", "The hostname of the map server", "" /* default value */, 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", "" /* default value */, G_PARAM_READWRITE); g_object_class_install_property (object_class, PROP_URL, pspec); pspec = g_param_spec_string ("referer", "Referer", "The REFERER string to use in HTTP request", NULL /* default value */, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE); g_object_class_install_property (object_class, PROP_REFERER, pspec); pspec = g_param_spec_long ("follow-location", "Follow location", "Specifies the number of retries to follow a redirect while downloading a page", 0 /* minimum value */, G_MAXLONG /* maximum value */, 0 /* default value */, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE); g_object_class_install_property (object_class, PROP_FOLLOW_LOCATION, pspec); pspec = g_param_spec_boolean ("check-file-server-time", "Check file server time", "Age of current cache before redownloading tile", FALSE /* default value */, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE); g_object_class_install_property (object_class, PROP_CHECK_FILE_SERVER_TIME, pspec); pspec = g_param_spec_boolean ("use-etag", "Use etag values with server", "Store etag in a file, and send it to server to check if we have the latest file", FALSE /* default value */, 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; } /* 1 << (x) is like a 2**(x) */ #define GZ(x) ((1<<(x))) static const gdouble scale_mpps[] = { GZ(0), GZ(1), GZ(2), GZ(3), GZ(4), GZ(5), GZ(6), GZ(7), GZ(8), GZ(9), GZ(10), GZ(11), GZ(12), GZ(13), GZ(14), GZ(15), GZ(16), GZ(17) }; static const gint num_scales = (sizeof(scale_mpps) / sizeof(scale_mpps[0])); static const gdouble scale_neg_mpps[] = { 1.0/GZ(0), 1.0/GZ(1), 1.0/GZ(2), 1.0/GZ(3) }; static const gint num_scales_neg = (sizeof(scale_neg_mpps) / sizeof(scale_neg_mpps[0])); #define ERROR_MARGIN 0.01 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 ) { return i; } } for ( i = 0; i < num_scales_neg; i++ ) { if ( ABS(scale_neg_mpps[i] - mpp) < 0.000001 ) { return -i; } } 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) { g_return_val_if_fail (VIK_IS_SLIPPY_MAP_SOURCE(self), FALSE); VikSlippyMapSourcePrivate *priv = VIK_SLIPPY_MAP_SOURCE_PRIVATE(self); return priv->options.check_file_server_time || priv->options.use_etag; } static gboolean _coord_to_mapcoord ( VikMapSource *self, const VikCoord *src, gdouble xzoom, gdouble yzoom, MapCoord *dest ) { g_assert ( src->mode == VIK_COORD_LATLON ); if ( xzoom != yzoom ) return FALSE; dest->scale = vik_slippy_map_source_zoom_to_scale ( xzoom ); if ( dest->scale == 255 ) return FALSE; dest->x = (src->east_west + 180) / 360 * GZ(17) / xzoom; dest->y = (180 - MERCLAT(src->north_south)) / 360 * GZ(17) / xzoom; dest->z = 0; return TRUE; } static void _mapcoord_to_center_coord ( VikMapSource *self, MapCoord *src, VikCoord *dest ) { gdouble socalled_mpp; if (src->scale >= 0) socalled_mpp = GZ(src->scale); else socalled_mpp = 1.0/GZ(-src->scale); dest->mode = VIK_COORD_LATLON; dest->east_west = ((src->x+0.5) / GZ(17) * socalled_mpp * 360) - 180; dest->north_south = DEMERCLAT(180 - ((src->y+0.5) / GZ(17) * socalled_mpp * 360)); } static gchar * _get_uri( VikMapSourceDefault *self, MapCoord *src ) { g_return_val_if_fail (VIK_IS_SLIPPY_MAP_SOURCE(self), NULL); VikSlippyMapSourcePrivate *priv = VIK_SLIPPY_MAP_SOURCE_PRIVATE(self); gchar *uri = g_strdup_printf (priv->url, 17 - src->scale, src->x, src->y); return uri; } static gchar * _get_hostname( VikMapSourceDefault *self ) { g_return_val_if_fail (VIK_IS_SLIPPY_MAP_SOURCE(self), NULL); VikSlippyMapSourcePrivate *priv = VIK_SLIPPY_MAP_SOURCE_PRIVATE(self); return g_strdup( priv->hostname ); } static DownloadMapOptions * _get_download_options( VikMapSourceDefault *self ) { g_return_val_if_fail (VIK_IS_SLIPPY_MAP_SOURCE(self), NULL); VikSlippyMapSourcePrivate *priv = VIK_SLIPPY_MAP_SOURCE_PRIVATE(self); return &(priv->options); } VikSlippyMapSource * vik_slippy_map_source_new_with_id (guint16 id, const gchar *label, const gchar *hostname, const gchar *url) { return g_object_new(VIK_TYPE_SLIPPY_MAP_SOURCE, "id", id, "label", label, "hostname", hostname, "url", url, NULL); } viking-1.4.2/src/vikwmscmapsource.c0000644000175000017500000003153312175546146014303 00000000000000/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * viking * Copyright (C) 2010, Guilhem Bonnefille * * viking is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * viking is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ /** * SECTION:vikwmscmapsource * @short_description: the class for WMS/WMS-C oriented map sources * * The #VikWmscMapSource class handles WMS/WMS-C oriented map sources. * * http://wiki.osgeo.org/wiki/WMS_Tile_Caching */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef HAVE_MATH_H #include #endif #include "globals.h" #include "vikwmscmapsource.h" 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 _supports_download_only_new ( VikMapSource *self ); static gboolean _is_direct_file_access ( VikMapSource *self ); static gchar *_get_uri( VikMapSourceDefault *self, MapCoord *src ); static gchar *_get_hostname( VikMapSourceDefault *self ); static DownloadMapOptions *_get_download_options( VikMapSourceDefault *self ); typedef struct _VikWmscMapSourcePrivate VikWmscMapSourcePrivate; struct _VikWmscMapSourcePrivate { gchar *hostname; gchar *url; DownloadMapOptions options; }; #define VIK_WMSC_MAP_SOURCE_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), VIK_TYPE_WMSC_MAP_SOURCE, VikWmscMapSourcePrivate)) /* properties */ enum { PROP_0, PROP_HOSTNAME, PROP_URL, PROP_REFERER, PROP_FOLLOW_LOCATION, PROP_CHECK_FILE_SERVER_TIME, }; G_DEFINE_TYPE (VikWmscMapSource, vik_wmsc_map_source, VIK_TYPE_MAP_SOURCE_DEFAULT); static void vik_wmsc_map_source_init (VikWmscMapSource *self) { /* initialize the object here */ VikWmscMapSourcePrivate *priv = VIK_WMSC_MAP_SOURCE_PRIVATE (self); priv->hostname = NULL; priv->url = NULL; priv->options.referer = NULL; priv->options.follow_location = 0; priv->options.check_file = a_check_map_file; priv->options.check_file_server_time = FALSE; g_object_set (G_OBJECT (self), "tilesize-x", 256, "tilesize-y", 256, "drawmode", VIK_VIEWPORT_DRAWMODE_LATLON, NULL); } static void vik_wmsc_map_source_finalize (GObject *object) { VikWmscMapSource *self = VIK_WMSC_MAP_SOURCE (object); VikWmscMapSourcePrivate *priv = VIK_WMSC_MAP_SOURCE_PRIVATE (self); g_free (priv->hostname); priv->hostname = NULL; g_free (priv->url); priv->url = NULL; g_free (priv->options.referer); priv->options.referer = NULL; G_OBJECT_CLASS (vik_wmsc_map_source_parent_class)->finalize (object); } static void vik_wmsc_map_source_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { VikWmscMapSource *self = VIK_WMSC_MAP_SOURCE (object); VikWmscMapSourcePrivate *priv = VIK_WMSC_MAP_SOURCE_PRIVATE (self); switch (property_id) { case PROP_HOSTNAME: g_free (priv->hostname); priv->hostname = g_value_dup_string (value); break; case PROP_URL: g_free (priv->url); priv->url = g_value_dup_string (value); break; case PROP_REFERER: g_free (priv->options.referer); priv->options.referer = g_value_dup_string (value); break; case PROP_FOLLOW_LOCATION: priv->options.follow_location = g_value_get_long (value); break; case PROP_CHECK_FILE_SERVER_TIME: priv->options.check_file_server_time = g_value_get_boolean (value); break; default: /* We don't have any other property... */ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void vik_wmsc_map_source_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { VikWmscMapSource *self = VIK_WMSC_MAP_SOURCE (object); VikWmscMapSourcePrivate *priv = VIK_WMSC_MAP_SOURCE_PRIVATE (self); switch (property_id) { case PROP_HOSTNAME: g_value_set_string (value, priv->hostname); break; case PROP_URL: g_value_set_string (value, priv->url); break; case PROP_REFERER: g_value_set_string (value, priv->options.referer); break; case PROP_FOLLOW_LOCATION: g_value_set_long (value, priv->options.follow_location); break; case PROP_CHECK_FILE_SERVER_TIME: g_value_set_boolean (value, priv->options.check_file_server_time); break; default: /* We don't have any other property... */ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void vik_wmsc_map_source_class_init (VikWmscMapSourceClass *klass) { GObjectClass* object_class = G_OBJECT_CLASS (klass); VikMapSourceClass* grandparent_class = VIK_MAP_SOURCE_CLASS (klass); VikMapSourceDefaultClass* parent_class = VIK_MAP_SOURCE_DEFAULT_CLASS (klass); GParamSpec *pspec = NULL; object_class->set_property = vik_wmsc_map_source_set_property; object_class->get_property = vik_wmsc_map_source_get_property; /* Overiding methods */ grandparent_class->coord_to_mapcoord = _coord_to_mapcoord; grandparent_class->mapcoord_to_center_coord = _mapcoord_to_center_coord; grandparent_class->supports_download_only_new = _supports_download_only_new; grandparent_class->is_direct_file_access = _is_direct_file_access; parent_class->get_uri = _get_uri; parent_class->get_hostname = _get_hostname; parent_class->get_download_options = _get_download_options; pspec = g_param_spec_string ("hostname", "Hostname", "The hostname of the map server", "" /* default value */, G_PARAM_CONSTRUCT_ONLY | 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", "" /* default value */, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE); g_object_class_install_property (object_class, PROP_URL, pspec); pspec = g_param_spec_string ("referer", "Referer", "The REFERER string to use in HTTP request", NULL /* default value */, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE); g_object_class_install_property (object_class, PROP_REFERER, pspec); pspec = g_param_spec_long ("follow-location", "Follow location", "Specifies the number of retries to follow a redirect while downloading a page", 0 /* minimum value */, G_MAXLONG /* maximum value */, 0 /* default value */, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE); g_object_class_install_property (object_class, PROP_FOLLOW_LOCATION, pspec); pspec = g_param_spec_boolean ("check-file-server-time", "Check file server time", "Age of current cache before redownloading tile", FALSE /* default value */, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE); g_object_class_install_property (object_class, PROP_CHECK_FILE_SERVER_TIME, pspec); g_type_class_add_private (klass, sizeof (VikWmscMapSourcePrivate)); object_class->finalize = vik_wmsc_map_source_finalize; } /* 1 << (x) is like a 2**(x) */ #define GZ(x) ((1<options.check_file_server_time; } static gboolean _is_direct_file_access ( VikMapSource *self ) { return FALSE; } static gboolean _coord_to_mapcoord ( VikMapSource *self, const VikCoord *src, gdouble xzoom, gdouble yzoom, MapCoord *dest ) { g_assert ( src->mode == VIK_COORD_LATLON ); if ( xzoom != yzoom ) return FALSE; dest->scale = wmsc_zoom ( xzoom ); if ( dest->scale == 255 ) return FALSE; /* Note : GZ(17) / xzoom / 2 = number of tile on Y axis */ g_debug("%s: xzoom=%f yzoom=%f -> %f", __FUNCTION__, xzoom, yzoom, GZ(17) / xzoom / 2); dest->x = floor((src->east_west + 180) / 180 * GZ(17) / xzoom / 2); /* We should restore logic of viking: * tile index on Y axis follow a screen logic (top -> down) */ dest->y = floor((180 - (src->north_south + 90)) / 180 * GZ(17) / xzoom / 2); dest->z = 0; g_debug("%s: %f,%f -> %d,%d", __FUNCTION__, src->east_west, src->north_south, dest->x, dest->y); return TRUE; } static void _mapcoord_to_center_coord ( VikMapSource *self, MapCoord *src, VikCoord *dest ) { gdouble socalled_mpp; if (src->scale >= 0) socalled_mpp = GZ(src->scale); else socalled_mpp = 1.0/GZ(-src->scale); dest->mode = VIK_COORD_LATLON; dest->east_west = (src->x+0.5) * 180 / GZ(17) * socalled_mpp * 2 - 180; /* We should restore logic of viking: * tile index on Y axis follow a screen logic (top -> down) */ dest->north_south = -((src->y+0.5) * 180 / GZ(17) * socalled_mpp * 2 - 90); g_debug("%s: %d,%d -> %f,%f", __FUNCTION__, src->x, src->y, dest->east_west, dest->north_south); } static gchar * _get_uri( VikMapSourceDefault *self, MapCoord *src ) { g_return_val_if_fail (VIK_IS_WMSC_MAP_SOURCE(self), NULL); VikWmscMapSourcePrivate *priv = VIK_WMSC_MAP_SOURCE_PRIVATE(self); gdouble socalled_mpp; if (src->scale >= 0) socalled_mpp = GZ(src->scale); else socalled_mpp = 1.0/GZ(-src->scale); gdouble minx = (gdouble)src->x * 180 / GZ(17) * socalled_mpp * 2 - 180; gdouble maxx = (gdouble)(src->x + 1) * 180 / GZ(17) * socalled_mpp * 2 - 180; /* We should restore logic of viking: * tile index on Y axis follow a screen logic (top -> down) */ gdouble miny = -((gdouble)(src->y + 1) * 180 / GZ(17) * socalled_mpp * 2 - 90); gdouble maxy = -((gdouble)(src->y) * 180 / GZ(17) * socalled_mpp * 2 - 90); gchar sminx[G_ASCII_DTOSTR_BUF_SIZE]; gchar smaxx[G_ASCII_DTOSTR_BUF_SIZE]; gchar sminy[G_ASCII_DTOSTR_BUF_SIZE]; gchar smaxy[G_ASCII_DTOSTR_BUF_SIZE]; g_ascii_dtostr (sminx, G_ASCII_DTOSTR_BUF_SIZE, minx); g_ascii_dtostr (smaxx, G_ASCII_DTOSTR_BUF_SIZE, maxx); g_ascii_dtostr (sminy, G_ASCII_DTOSTR_BUF_SIZE, miny); g_ascii_dtostr (smaxy, G_ASCII_DTOSTR_BUF_SIZE, maxy); gchar *uri = g_strdup_printf (priv->url, sminx, sminy, smaxx, smaxy); return uri; } static gchar * _get_hostname( VikMapSourceDefault *self ) { g_return_val_if_fail (VIK_IS_WMSC_MAP_SOURCE(self), NULL); VikWmscMapSourcePrivate *priv = VIK_WMSC_MAP_SOURCE_PRIVATE(self); return g_strdup( priv->hostname ); } static DownloadMapOptions * _get_download_options( VikMapSourceDefault *self ) { g_return_val_if_fail (VIK_IS_WMSC_MAP_SOURCE(self), NULL); VikWmscMapSourcePrivate *priv = VIK_WMSC_MAP_SOURCE_PRIVATE(self); return &(priv->options); } VikWmscMapSource * vik_wmsc_map_source_new_with_id (guint16 id, const gchar *label, const gchar *hostname, const gchar *url) { return g_object_new(VIK_TYPE_WMSC_MAP_SOURCE, "id", id, "label", label, "hostname", hostname, "url", url, NULL); } viking-1.4.2/src/viktrwlayer_geotag.h0000644000175000017500000000234512122673673014614 00000000000000/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2011, Rob Norris * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef _VIKING_TRWLAYER_GEOTAG_H #define _VIKING_TRWLAYER_GEOTAG_H #include #include #include "viktrwlayer.h" G_BEGIN_DECLS // To be only called from within viktrwlayer void trw_layer_geotag_dialog ( GtkWindow *parent, VikTrwLayer *vtl, VikTrack *track, const gchar *track_name ); G_END_DECLS #endif viking-1.4.2/src/Makefile.am0000644000175000017500000001201612175546146012564 00000000000000# This is the Makefile for the viking gps viewer program. # This file is licensed through the GPL version 2 or newer. SUBDIRS = icons bin_PROGRAMS = viking noinst_LIBRARIES = libviking.a authors.h: $(top_srcdir)/AUTHORS rm -f $@ echo "/* Generated file. */" >> $@ echo "const gchar *AUTHORS[] = {\\" >> $@ sed -e "s/ \*\*.*//" -e 's/^/"/' -e 's/$$/",\\/' -e '$$s/\\$$//' $< >> $@ echo "NULL};" >> $@ if HAVE_XSLTPROC documenters.h: $(top_srcdir)/help/C/viking.xml $(XP) $(srcdir)/docbook2documenters.xsl $(top_srcdir)/help/C/viking.xml > $@ else documenters.h: rm -f $@ echo "/* Generated file. */" >> $@ echo "const gchar *DOCUMENTERS[] = {\\" >> $@ echo "NULL};" >> $@ endif BUILT_SOURCES = authors.h documenters.h vikenumtypes.h: vikenumtypes.h.template $(ENUM_H_FILES) $(GLIB_MKENUMS) (cd $(srcdir) && $(GLIB_MKENUMS) --template vikenumtypes.h.template $(ENUM_H_FILES)) > $@ vikenumtypes.c: vikenumtypes.c.template $(ENUM_H_FILES) $(GLIB_MKENUMS) (cd $(srcdir) && $(GLIB_MKENUMS) --template vikenumtypes.c.template $(ENUM_H_FILES)) > $@ EXTRA_DIST = \ docbook2documenters.xsl \ vikenumtypes.h.template \ vikenumtypes.c.template BUILT_SOURCES += vikenumtypes.h vikenumtypes.c $(BUILT_SOURCES): $(srcdir)/Makefile.am ENUM_H_FILES = \ vikviewport.h libviking_a_SOURCES = \ bbox.h \ modules.h modules.c \ curl_download.c curl_download.h \ menu.xml.h \ degrees_converters.c degrees_converters.h \ globals.c globals.h \ viking.h mapcoord.h config.h \ viktrack.c viktrack.h \ vikwaypoint.c vikwaypoint.h \ clipboard.c clipboard.h \ coords.c coords.h \ gpsmapper.c gpsmapper.h \ gpspoint.c gpspoint.h \ dir.c dir.h \ file.c file.h \ authors.h \ documenters.h \ dialog.c dialog.h \ util.c util.h \ download.c download.h \ vikenumtypes.c vikenumtypes.h \ viktreeview.c viktreeview.h \ viktrwlayer.c viktrwlayer.h \ viklayer.c viklayer.h \ viklayerspanel.c viklayerspanel.h \ vikcoordlayer.c vikcoordlayer.h \ vikstatus.c vikstatus.h \ vikwindow.c vikwindow.h \ vikviewport.c vikviewport.h \ vikaggregatelayer.c vikaggregatelayer.h \ vikgobjectbuilder.c vikgobjectbuilder.h \ vikgpslayer.c vikgpslayer.h \ vikgeoreflayer.c vikgeoreflayer.h \ vikfileentry.c vikfileentry.h \ vikgototool.c vikgototool.h \ vikgotoxmltool.c vikgotoxmltool.h \ vikgoto.c vikgoto.h \ viktrwlayer_tpwin.c viktrwlayer_tpwin.h \ viktrwlayer_propwin.c viktrwlayer_propwin.h \ thumbnails.c thumbnails.h \ background.c background.h \ vikradiogroup.c vikradiogroup.h \ vikcoord.c vikcoord.h \ mapcache.c mapcache.h \ vikmapsource.c vikmapsource.h \ vikmapsourcedefault.c vikmapsourcedefault.h \ vikmapslayer.c vikmapslayer.h \ vikmapslayer_compat.c vikmapslayer_compat.h \ vikmaptype.c vikmaptype.h \ vikslippymapsource.c vikslippymapsource.h \ vikwmscmapsource.c vikwmscmapsource.h \ viktmsmapsource.c viktmsmapsource.h \ gpx.c gpx.h \ garminsymbols.c garminsymbols.h \ acquire.c acquire.h \ babel.c babel.h \ datasource_file.c \ datasource_gps.c datasource_gps.h \ datasource_google.c \ datasource_gc.c \ datasource_bfilter.c \ datasource_wikipedia.c \ datasources.h \ googlesearch.c googlesearch.h \ dem.c dem.h \ vikdemlayer.h vikdemlayer.c \ vikfilelist.c vikfilelist.h \ vikexttool.c vikexttool.h \ vikexttools.c vikexttools.h \ vikwebtool.c vikwebtool.h \ vikwebtoolcenter.c vikwebtoolcenter.h \ vikwebtoolbounds.c vikwebtoolbounds.h \ dems.c dems.h \ srtm_continent.c \ uibuilder.c uibuilder.h \ print-preview.c print-preview.h \ print.c print.h \ preferences.c preferences.h if BING libviking_a_SOURCES += \ bingmapsource.c bingmapsource.h \ bing.c bing.h endif if GOOGLE libviking_a_SOURCES += \ google.c google.h endif if TERRASERVER libviking_a_SOURCES += \ terraservermapsource.c terraservermapsource.h \ terraserver.c terraserver.h endif if EXPEDIA libviking_a_SOURCES += \ expedia.c expedia.h endif if OPENSTREETMAP libviking_a_SOURCES += \ osm.c osm.h \ osm-traces.c osm-traces.h \ datasource_osm_my_traces.c \ datasource_osm.c endif if BLUEMARBLE libviking_a_SOURCES += \ bluemarble.c bluemarble.h endif if GEONAMES libviking_a_SOURCES += \ geonames.c geonames.h \ geonamessearch.c geonamessearch.h endif #if SPOTMAPS libviking_a_SOURCES += \ spotmaps.c spotmaps.h #endif if GEOTAG libviking_a_SOURCES += \ datasource_geotag.c \ geotag_exif.c geotag_exif.h \ viktrwlayer_geotag.c viktrwlayer_geotag.h \ libjpeg/jpeg-data.c libjpeg/jpeg-data.h \ libjpeg/jpeg-marker.c libjpeg/jpeg-marker.h endif viking_SOURCES = main.c LDADD = libviking.a $(PACKAGE_LIBS) @EXPAT_LIBS@ @LIBCURL@ icons/libicons.a AM_CFLAGS = -Wall -g -D_GNU_SOURCE \ $(PACKAGE_CFLAGS) \ @EXPAT_CFLAGS@ @LIBCURL_CPPFLAGS@ AM_CPPFLAGS = \ -DVIKING_DATADIR=\""$(pkgdatadir)"\" \ -DVIKING_SYSCONFDIR=\""$(sysconfdir)/$(PACKAGE)"\" @INTLTOOL_DESKTOP_RULE@ desktopdir = $(datadir)/applications desktop_in_files = viking.desktop.in desktop_DATA = $(desktop_in_files:.desktop.in=.desktop) EXTRA_DIST += $(desktop_in_files) CLEANFILES = $(BUILT_SOURCES) $(desktop_DATA) viking-1.4.2/src/datasource_file.c0000644000175000017500000001623112175546146014030 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2011, Guilhem Bonnefille * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include #include "viking.h" #include "babel.h" #include "gpx.h" #include "acquire.h" typedef struct { GtkWidget *file; GtkWidget *type; } datasource_file_widgets_t; /* The last used directory */ static gchar *last_folder_uri = NULL; /* The last used file filter */ /* Nb: we use a complex strategy for this because the UI is rebuild each time, so it is not possible to reuse directly the GtkFileFilter as they are differents. */ static BabelFile *last_file_filter = NULL; /* The last file format selected */ static int last_type = 0; static gpointer datasource_file_init( ); static void datasource_file_add_setup_widgets ( GtkWidget *dialog, VikViewport *vvp, gpointer user_data ); static void datasource_file_get_cmd_string ( datasource_file_widgets_t *widgets, gchar **cmd, gchar **input_file_type, gpointer not_used ); static void datasource_file_cleanup ( gpointer data ); VikDataSourceInterface vik_datasource_file_interface = { N_("Import file with GPSBabel"), N_("Imported file"), VIK_DATASOURCE_ADDTOLAYER, VIK_DATASOURCE_INPUTTYPE_NONE, TRUE, TRUE, TRUE, (VikDataSourceInitFunc) datasource_file_init, (VikDataSourceCheckExistenceFunc) NULL, (VikDataSourceAddSetupWidgetsFunc) datasource_file_add_setup_widgets, (VikDataSourceGetCmdStringFunc) datasource_file_get_cmd_string, (VikDataSourceProcessFunc) a_babel_convert_from, (VikDataSourceProgressFunc) NULL, (VikDataSourceAddProgressWidgetsFunc) NULL, (VikDataSourceCleanupFunc) datasource_file_cleanup, (VikDataSourceOffFunc) NULL, }; /* See VikDataSourceInterface */ static gpointer datasource_file_init ( ) { datasource_file_widgets_t *widgets = g_malloc(sizeof(*widgets)); return widgets; } static void fill_combo_box (gpointer data, gpointer user_data) { const gchar *label = ((BabelFile*) data)->label; #if GTK_CHECK_VERSION (2,24,0) GtkComboBoxText *combo = GTK_COMBO_BOX_TEXT (user_data); gtk_combo_box_text_append_text (combo, label); #else GtkComboBox *combo = GTK_COMBO_BOX (user_data); gtk_combo_box_append_text (combo, label); #endif } static void add_file_filter (gpointer data, gpointer user_data) { GtkFileChooser *chooser = GTK_FILE_CHOOSER ( user_data ); const gchar *label = ((BabelFile*) data)->label; const gchar *ext = ((BabelFile*) data)->ext; if ( ext == NULL || ext[0] == '\0' ) /* No file extension => no filter */ return; gchar *pattern = g_strdup_printf ( "*.%s", ext ); GtkFileFilter *filter = gtk_file_filter_new (); gtk_file_filter_add_pattern ( filter, pattern ); if ( strstr ( label, pattern+1 ) ) { gtk_file_filter_set_name ( filter, label ); } else { /* Ensure displayed label contains file pattern */ /* NB: we skip the '*' in the pattern */ gchar *name = g_strdup_printf ( "%s (%s)", label, pattern+1 ); gtk_file_filter_set_name ( filter, name ); g_free ( name ); } g_object_set_data ( G_OBJECT(filter), "Babel", data ); gtk_file_chooser_add_filter ( chooser, filter ); if ( last_file_filter == data ) /* Previous selection used this filter */ gtk_file_chooser_set_filter ( chooser, filter ); g_free ( pattern ); } /* See VikDataSourceInterface */ static void datasource_file_add_setup_widgets ( GtkWidget *dialog, VikViewport *vvp, gpointer user_data ) { datasource_file_widgets_t *widgets = (datasource_file_widgets_t *)user_data; GtkWidget *filename_label, *type_label; /* The file selector */ filename_label = gtk_label_new (_("File:")); widgets->file = gtk_file_chooser_button_new (_("File to import"), GTK_FILE_CHOOSER_ACTION_OPEN); if (last_folder_uri) gtk_file_chooser_set_current_folder_uri ( GTK_FILE_CHOOSER(widgets->file), last_folder_uri); /* Add filters */ g_list_foreach ( a_babel_file_list, add_file_filter, widgets->file ); GtkFileFilter *all_filter = gtk_file_filter_new (); gtk_file_filter_add_pattern ( all_filter, "*" ); gtk_file_filter_set_name ( all_filter, _("All files") ); gtk_file_chooser_add_filter ( GTK_FILE_CHOOSER(widgets->file), all_filter ); if ( last_file_filter == NULL ) /* No previously selected filter or 'All files' selected */ gtk_file_chooser_set_filter ( GTK_FILE_CHOOSER(widgets->file), all_filter ); /* The file format selector */ type_label = gtk_label_new (_("File type:")); #if GTK_CHECK_VERSION (2,24,0) widgets->type = gtk_combo_box_text_new (); #else widgets->type = gtk_combo_box_new_text (); #endif g_list_foreach (a_babel_file_list, fill_combo_box, widgets->type); gtk_combo_box_set_active (GTK_COMBO_BOX (widgets->type), last_type); /* Packing all these widgets */ gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(dialog)->vbox), filename_label, FALSE, FALSE, 5 ); gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(dialog)->vbox), widgets->file, FALSE, FALSE, 5 ); gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(dialog)->vbox), type_label, FALSE, FALSE, 5 ); gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(dialog)->vbox), widgets->type, FALSE, FALSE, 5 ); gtk_widget_show_all(dialog); } /* See VikDataSourceInterface */ static void datasource_file_get_cmd_string ( datasource_file_widgets_t *widgets, gchar **cmd, gchar **input_file, gpointer not_used ) { /* Retrieve the file selected */ gchar *filename = gtk_file_chooser_get_filename ( GTK_FILE_CHOOSER(widgets->file) ); /* Memorize the directory for later use */ g_free (last_folder_uri); last_folder_uri = gtk_file_chooser_get_current_folder_uri ( GTK_FILE_CHOOSER(widgets->file) ); last_folder_uri = g_strdup (last_folder_uri); /* Memorize the file filter for later use */ GtkFileFilter *filter = gtk_file_chooser_get_filter ( GTK_FILE_CHOOSER(widgets->file) ); last_file_filter = g_object_get_data ( G_OBJECT(filter), "Babel" ); /* Retrieve and memorize file format selected */ gchar *type = NULL; last_type = gtk_combo_box_get_active ( GTK_COMBO_BOX (widgets->type) ); if ( a_babel_file_list ) type = ((BabelFile*)g_list_nth_data (a_babel_file_list, last_type))->name; /* Build the string */ *cmd = g_strdup_printf( "-i %s", type); *input_file = g_strdup(filename); /* Free memory */ g_free (filename); g_debug(_("using babel args '%s' and file '%s'"), *cmd, *input_file); } /* See VikDataSourceInterface */ static void datasource_file_cleanup ( gpointer data ) { g_free ( data ); } viking-1.4.2/src/vikwebtool.c0000644000175000017500000000430412122673673013060 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2008, Guilhem Bonnefille * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "vikwebtool.h" #include #include #include "util.h" static GObjectClass *parent_class; static void webtool_finalize ( GObject *gob ); static void webtool_open ( VikExtTool *self, VikWindow *vwindow ); G_DEFINE_ABSTRACT_TYPE (VikWebtool, vik_webtool, VIK_EXT_TOOL_TYPE) static void vik_webtool_class_init ( VikWebtoolClass *klass ) { GObjectClass *object_class; VikExtToolClass *ext_tool_class; object_class = G_OBJECT_CLASS (klass); object_class->finalize = webtool_finalize; parent_class = g_type_class_peek_parent (klass); ext_tool_class = VIK_EXT_TOOL_CLASS ( klass ); ext_tool_class->open = webtool_open; } VikWebtool *vik_webtool_new () { return VIK_WEBTOOL ( g_object_new ( VIK_WEBTOOL_TYPE, NULL ) ); } static void vik_webtool_init ( VikWebtool *vlp ) { // NOTHING } static void webtool_finalize ( GObject *gob ) { // VikWebtool *w = VIK_WEBTOOL ( gob ); G_OBJECT_CLASS(parent_class)->finalize(gob); } static void webtool_open ( VikExtTool *self, VikWindow *vwindow ) { VikWebtool *vwd = VIK_WEBTOOL ( self ); gchar *url = vik_webtool_get_url ( vwd, vwindow ); open_url ( NULL, url ); g_free ( url ); } gchar *vik_webtool_get_url ( VikWebtool *self, VikWindow *vwindow ) { return VIK_WEBTOOL_GET_CLASS( self )->get_url( self, vwindow ); } viking-1.4.2/src/file.h0000644000175000017500000000422612175546146011624 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * Copyright (C) 2012, Guilhem Bonnefille * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef _VIKING_FILE_H #define _VIKING_FILE_H #include #include "vikaggregatelayer.h" #include "viktrwlayer.h" #include "vikviewport.h" G_BEGIN_DECLS typedef enum { FILE_TYPE_GPSPOINT=1, FILE_TYPE_GPSMAPPER=2, FILE_TYPE_GPX=3, FILE_TYPE_KML=4, } VikFileType_t; const gchar *a_file_basename ( const gchar *filename ); gboolean check_file_ext ( const gchar *filename, const gchar *fileext ); /* * Function to determine if a filename is a 'viking' type file */ gboolean check_file_magic_vik ( const gchar *filename ); typedef enum { LOAD_TYPE_READ_FAILURE, LOAD_TYPE_GPSBABEL_FAILURE, LOAD_TYPE_GPX_FAILURE, LOAD_TYPE_UNSUPPORTED_FAILURE, LOAD_TYPE_VIK_FAILURE_NON_FATAL, LOAD_TYPE_VIK_SUCCESS, LOAD_TYPE_OTHER_SUCCESS, } VikLoadType_t; VikLoadType_t a_file_load ( VikAggregateLayer *top, VikViewport *vp, const gchar *filename ); gboolean a_file_save ( VikAggregateLayer *top, gpointer vp, const gchar *filename ); /* Only need to define VikTrack if the file type is FILE_TYPE_GPX_TRACK */ gboolean a_file_export ( VikTrwLayer *vtl, const gchar *filename, VikFileType_t file_type, VikTrack *trk, gboolean write_hidden ); void file_write_layer_param ( FILE *f, const gchar *name, guint8 type, VikLayerParamData data ); G_END_DECLS #endif viking-1.4.2/src/garminsymbols.c0000644000175000017500000012416212175546146013570 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * Copyright (C) 2005, Alex Foobarian * Copyright (C) 2008, Quy Tonthat * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "viking.h" #include "garminsymbols.h" #include "icons/icons.h" #include #include static struct { gchar *sym; /* icon names used by gpsbabel, garmin */ gchar *old_sym; /* keep backward compatible */ gint num; gchar *desc; const GdkPixdata *data; const GdkPixdata *data_large; GdkPixbuf *icon; } garmin_syms[] = { /* "sym" are in all lower case. This is because viking convert symbol * names to lowercase when reading gpx files (see gpx.c:gpx_end()). * This method works with gpsbable (when viking upload back to GPS * device), but I don't know it works with other application. * The method (lower case for sym, that is) is more eficient but if * it is not compatible to all application, change sym to the right * case (see http://www.gpsbabel.org/) change gpx.c not to convert * symbol to lower case and use g_utf8_casefold() in key_equal_func * for g_hash_table_new_full() (see init_icons() in this file). * Quy Tonthat */ /*--------------------------------------------------------------- Marine symbols ---------------------------------------------------------------*/ { "marina", "anchor", 0, "white anchor symbol", &wp_anchor_pixbuf, &wp_anchor_large_pixbuf, NULL }, { "bell", "bell", 1, "white bell symbol", &wp_bell_pixbuf, &wp_bell_large_pixbuf, NULL }, { "green diamon", "diamond_grn", 2, "green diamond symbol", &wp_diamond_grn_pixbuf, NULL, NULL }, { "red diamon", "diamond_red", 3, "red diamond symbol", &wp_diamond_red_pixbuf, NULL, NULL }, { "diver down flag 1", "dive1", 4, "diver down flag 1", &wp_dive1_pixbuf, &wp_dive1_large_pixbuf, NULL }, { "diver down flag 2", "dive2", 5, "diver down flag 2", &wp_dive2_pixbuf, &wp_dive2_large_pixbuf, NULL }, { "bank", "dollar", 6, "white dollar symbol", &wp_dollar_pixbuf, &wp_dollar_large_pixbuf, NULL }, { "fishing area", "fish", 7, "white fish symbol", &wp_fish_pixbuf, &wp_fish_large_pixbuf, NULL }, { "gas station", "fuel", 8, "white fuel symbol", &wp_fuel_pixbuf, &wp_fuel_large_pixbuf, NULL }, { "horn", "horn", 9, "white horn symbol", &wp_horn_pixbuf, &wp_horn_large_pixbuf, NULL }, { "residence", "house", 10, "white house symbol", &wp_house_pixbuf, &wp_house_large_pixbuf, NULL }, { "restaurant", "knife", 11, "white knife & fork symbol", &wp_knife_pixbuf, &wp_knife_large_pixbuf, NULL }, { "light", "light", 12, "white light symbol", &wp_light_pixbuf, &wp_light_large_pixbuf, NULL }, { "bar", "mug", 13, "white mug symbol", &wp_mug_pixbuf, &wp_mug_large_pixbuf, NULL }, { "skull and crossbones", "skull", 14, "white skull and crossbones symbol", &wp_skull_pixbuf, &wp_skull_large_pixbuf, NULL }, { "green square", "square_grn", 15, "green square symbol", &wp_square_grn_pixbuf, NULL, NULL }, { "red square", "square_red", 16, "red square symbol", &wp_square_red_pixbuf, NULL, NULL }, { "white buoy", "wbuoy", 17, "white buoy waypoint symbol", &wp_wbuoy_pixbuf, &wp_wbuoy_large_pixbuf, NULL }, { "waypoint", "wpt_dot", 18, "waypoint dot", &wp_wpt_dot_pixbuf, NULL, NULL }, { "shipwreck", "wreck", 19, "white wreck symbol", &wp_wreck_pixbuf, &wp_wreck_large_pixbuf, NULL }, { "none", "null", 20, "null symbol (transparent)", &wp_null_pixbuf, NULL, NULL }, { "man overboard", "mob", 21, "man overboard symbol", &wp_mob_pixbuf, &wp_mob_large_pixbuf, NULL }, { "navaid, amber", "buoy_ambr", 22, "amber map buoy symbol", &wp_buoy_ambr_pixbuf, &wp_buoy_ambr_large_pixbuf, NULL }, { "navaid, black", "buoy_blck", 23, "black map buoy symbol", &wp_buoy_blck_pixbuf, &wp_buoy_blck_large_pixbuf, NULL }, { "navaid, blue", "buoy_blue", 24, "blue map buoy symbol", &wp_buoy_blue_pixbuf, &wp_buoy_blue_large_pixbuf, NULL }, { "navaid, green", "buoy_grn", 25, "green map buoy symbol", &wp_buoy_grn_pixbuf, &wp_buoy_grn_large_pixbuf, NULL }, { "navaid, green/Red", "buoy_grn_red", 26, "green/red map buoy symbol", &wp_buoy_grn_red_pixbuf, &wp_buoy_grn_red_large_pixbuf, NULL }, { "navaid, green/White", "buoy_grn_wht", 27, "green/white map buoy symbol", &wp_buoy_grn_wht_pixbuf, &wp_buoy_grn_wht_large_pixbuf, NULL }, { "navaid, orange", "buoy_orng", 28, "orange map buoy symbol", &wp_buoy_orng_pixbuf, &wp_buoy_orng_large_pixbuf, NULL }, { "navaid, red", "buoy_red", 29, "red map buoy symbol", &wp_buoy_red_pixbuf, &wp_buoy_red_large_pixbuf, NULL }, { "navaid, red/green", "buoy_red_grn", 30, "red/green map buoy symbol", &wp_buoy_red_grn_pixbuf, &wp_buoy_red_grn_large_pixbuf, NULL }, { "navaid, red/white", "buoy_red_wht", 31, "red/white map buoy symbol", &wp_buoy_red_wht_pixbuf, &wp_buoy_red_wht_large_pixbuf, NULL }, { "navaid, violet", "buoy_violet", 32, "violet map buoy symbol", &wp_buoy_violet_pixbuf, &wp_buoy_violet_large_pixbuf, NULL }, { "navaid, white", "buoy_wht", 33, "white map buoy symbol", &wp_buoy_wht_pixbuf, &wp_buoy_wht_large_pixbuf, NULL }, { "navaid, whit/green", "buoy_wht_grn", 34, "white/green map buoy symbol", &wp_buoy_wht_grn_pixbuf, &wp_buoy_wht_grn_large_pixbuf, NULL }, { "navaid, white/red", "buoy_wht_red", 35, "white/red map buoy symbol", &wp_buoy_wht_red_pixbuf, &wp_buoy_wht_red_large_pixbuf, NULL }, { "white dot", "dot", 36, "white dot symbol", &wp_dot_pixbuf, NULL, NULL }, { "radio beacon", "rbcn", 37, "radio beacon symbol", &wp_rbcn_pixbuf, &wp_rbcn_large_pixbuf, NULL }, { "boat ramp", "boat_ramp", 150, "boat ramp symbol", &wp_boat_ramp_pixbuf, &wp_boat_ramp_large_pixbuf, NULL }, { "campground", "camp", 151, "campground symbol", &wp_camp_pixbuf, &wp_camp_large_pixbuf, NULL }, { "restroom", "restrooms", 152, "restrooms symbol", &wp_restroom_pixbuf, &wp_restroom_large_pixbuf, NULL }, { "shower", "showers", 153, "shower symbol", &wp_shower_pixbuf, &wp_shower_large_pixbuf, NULL }, { "drinking water", "drinking_wtr", 154, "drinking water symbol", &wp_drinking_wtr_pixbuf, &wp_drinking_wtr_large_pixbuf, NULL }, { "telephone", "phone", 155, "telephone symbol", &wp_phone_pixbuf, &wp_phone_large_pixbuf, NULL }, { "medical facility", "1st_aid", 156, "first aid symbol", &wp_1st_aid_pixbuf, &wp_1st_aid_large_pixbuf, NULL }, { "information", "info", 157, "information symbol", &wp_info_pixbuf, &wp_info_large_pixbuf, NULL }, { "parking area", "parking", 158, "parking symbol", &wp_parking_pixbuf, &wp_parking_large_pixbuf, NULL }, { "park", "park", 159, "park symbol", &wp_park_pixbuf, &wp_park_large_pixbuf, NULL }, { "picnic area", "picnic", 160, "picnic symbol", &wp_picnic_pixbuf, &wp_picnic_large_pixbuf, NULL }, { "scenic", "scenic", 161, "scenic area symbol", &wp_scenic_pixbuf, &wp_scenic_large_pixbuf, NULL }, { "skiing area", "skiing", 162, "skiing symbol", &wp_skiing_pixbuf, &wp_skiing_large_pixbuf, NULL }, { "swimming area", "swimming", 163, "swimming symbol", &wp_swimming_pixbuf, &wp_swimming_large_pixbuf, NULL }, { "dam", "dam", 164, "dam symbol", &wp_dam_pixbuf, &wp_dam_large_pixbuf, NULL }, { "controlled area", "controlled", 165, "controlled area symbol", &wp_controlled_pixbuf, &wp_controlled_large_pixbuf, NULL }, { "danger area", "danger", 166, "danger symbol", &wp_danger_pixbuf, &wp_danger_large_pixbuf, NULL }, { "restricted area", "restricted", 167, "restricted area symbol", &wp_restricted_pixbuf, &wp_restricted_large_pixbuf, NULL }, { "null 2", "null_2", 168, "null symbol", NULL, NULL, NULL }, /* not exist */ { "ball park", "ball", 169, "ball symbol", &wp_ball_pixbuf, &wp_ball_large_pixbuf, NULL }, { "car", "car", 170, "car symbol", &wp_car_pixbuf, &wp_car_large_pixbuf, NULL }, { "hunting area", "deer", 171, "deer symbol", &wp_deer_pixbuf, &wp_deer_large_pixbuf, NULL }, { "shopping center", "shopping", 172, "shopping cart symbol", NULL, &wp_shopping_large_pixbuf, NULL }, { "lodging", "lodging", 173, "lodging symbol", NULL, &wp_lodging_large_pixbuf, NULL }, { "mine", "mine", 174, "mine symbol", &wp_mine_pixbuf, &wp_mine_large_pixbuf, NULL }, { "trail head", "trail_head", 175, "trail head symbol", NULL, &wp_trail_head_large_pixbuf, NULL }, { "truck stop", "truck_stop", 176, "truck stop symbol", NULL, &wp_truck_stop_large_pixbuf, NULL }, { "exit", "user_exit", 177, "user exit symbol", NULL, NULL, NULL }, { "flag", "flag", 178, "flag symbol", &wp_flag_pixbuf, NULL, NULL }, { "circle with x", "circle_x", 179, "circle with x in the center", NULL, NULL, NULL }, { "open 24 hours", "open_24hr", 180, "open 24 hours symbol", NULL, NULL, NULL }, { "fishing hot spot facility", "fhs_facility", 181, "U Fishing Hot SpotsTM Facility", NULL, &wp_fhs_facility_large_pixbuf, NULL }, { "bottom conditions", "bot_cond", 182, "Bottom Conditions", NULL, NULL, NULL }, { "tide/current prediction station", "tide_pred_stn", 183, "Tide/Current Prediction Station", NULL, NULL, NULL }, { "anchor prohibited", "anchor_prohib", 184, "U anchor prohibited symbol", NULL, NULL, NULL }, { "beacon", "beacon", 185, "U beacon symbol", NULL, NULL, NULL }, { "coast Guard", "coast_guard", 186, "U coast guard symbol", NULL, NULL, NULL }, { "reef", "reef", 187, "U reef symbol", NULL, NULL, NULL }, { "weed bed", "weedbed", 188, "U weedbed symbol", NULL, NULL, NULL }, { "dropoff", "dropoff", 189, "U dropoff symbol", NULL, NULL, NULL }, { "dock", "dock", 190, "U dock symbol", NULL, NULL, NULL }, { "u marina", "marina", 191, "U marina symbol", NULL, NULL, NULL }, { "bait and tackle", "bait_tackle", 192, "U bait and tackle symbol", NULL, NULL, NULL }, { "stump", "stump", 193, "U stump symbol", NULL, NULL, NULL }, { "ground transportation", "grnd_trans", 229, "ground transportation", NULL, &wp_grnd_trans_large_pixbuf, NULL }, /*--------------------------------------------------------------- User customizable symbols The values from begin_custom to end_custom inclusive are reserved for the identification of user customizable symbols. ---------------------------------------------------------------*/ { "custom begin placeholder", "begin_custom", 7680, "first user customizable symbol", NULL, NULL, NULL }, { "custom end placeholder","end_custom", 8191, "last user customizable symbol", NULL, NULL, NULL }, /*--------------------------------------------------------------- Land symbols ---------------------------------------------------------------*/ { "interstate highway", "is_hwy", 8192, "interstate hwy symbol", NULL, NULL, NULL }, /* TODO: check symbol name */ { "us hwy", "us_hwy", 8193, "us hwy symbol", NULL, NULL, NULL }, { "state hwy", "st_hwy", 8194, "state hwy symbol", NULL, NULL, NULL }, { "mile marker", "mi_mrkr", 8195, "mile marker symbol", NULL, NULL, NULL }, { "tracBack point", "trcbck", 8196, "TracBack (feet) symbol", NULL, NULL, NULL }, { "golf course", "golf", 8197, "golf symbol", &wp_golf_pixbuf, &wp_golf_large_pixbuf, NULL }, { "city (small)", "sml_cty", 8198, "small city symbol", &wp_sml_cty_pixbuf, &wp_sml_cty_large_pixbuf, NULL }, { "city (medium)", "med_cty", 8199, "medium city symbol", &wp_med_cty_pixbuf, &wp_med_cty_large_pixbuf, NULL }, { "city (large)", "lrg_cty", 8200, "large city symbol", &wp_lrg_cty_pixbuf, &wp_lrg_cty_large_pixbuf, NULL }, { "intl freeway hwy", "freeway", 8201, "intl freeway hwy symbol", NULL, NULL, NULL }, { "intl national hwy", "ntl_hwy", 8202, "intl national hwy symbol", NULL, NULL, NULL }, { "city (capitol)", "cap_cty", 8203, "capitol city symbol (star)", &wp_cap_cty_pixbuf, NULL, NULL }, { "amusement park", "amuse_pk", 8204, "amusement park symbol", NULL, &wp_amuse_pk_large_pixbuf, NULL }, { "bowling", "bowling", 8205, "bowling symbol", NULL, &wp_bowling_large_pixbuf, NULL }, { "car rental", "car_rental", 8206, "car rental symbol", NULL, &wp_car_rental_large_pixbuf, NULL }, { "car repair", "car_repair", 8207, "car repair symbol", NULL, &wp_car_repair_large_pixbuf, NULL }, { "fast food", "fastfood", 8208, "fast food symbol", NULL, &wp_fastfood_large_pixbuf, NULL }, { "fitness center", "fitness", 8209, "fitness symbol", NULL, &wp_fitness_large_pixbuf, NULL }, { "movie theater", "movie", 8210, "movie symbol", NULL, &wp_movie_large_pixbuf, NULL }, { "museum", "museum", 8211, "museum symbol", NULL, &wp_museum_large_pixbuf, NULL }, { "pharmacy", "pharmacy", 8212, "pharmacy symbol", NULL, &wp_pharmacy_large_pixbuf, NULL }, { "pizza", "pizza", 8213, "pizza symbol", NULL, &wp_pizza_large_pixbuf, NULL }, { "post office", "post_ofc", 8214, "post office symbol", NULL, &wp_post_ofc_large_pixbuf, NULL }, { "rv park", "rv_park", 8215, "RV park symbol", &wp_rv_park_pixbuf, &wp_rv_park_large_pixbuf, NULL }, { "school", "school", 8216, "school symbol", &wp_school_pixbuf, &wp_school_large_pixbuf, NULL }, { "stadium", "stadium", 8217, "stadium symbol", NULL, &wp_stadium_large_pixbuf, NULL }, { "department store", "store", 8218, "dept. store symbol", NULL, &wp_store_large_pixbuf, NULL }, { "zoo", "zoo", 8219, "zoo symbol", NULL, &wp_zoo_large_pixbuf, NULL }, { "convenience store", "conv_store", 8220, "convenience store symbol", NULL, &wp_conv_store_large_pixbuf, NULL }, { "live theater", "theater", 8221, "live theater symbol", NULL, &wp_theater_large_pixbuf, NULL }, { "ramp intersection", "ramp_int", 8222, "ramp intersection symbol", NULL, NULL, NULL }, { "street intersection", "st_int", 8223, "street intersection symbol", NULL, NULL, NULL }, { "scales", "weigh_station", 8226, "inspection/weigh station symbol", NULL, &wp_weigh_station_large_pixbuf, NULL }, { "toll booth", "toll_booth", 8227, "toll booth symbol", NULL, &wp_toll_booth_large_pixbuf, NULL }, { "elevation point", "elev_pt", 8228, "elevation point symbol", NULL, NULL, NULL }, { "exit without services", "ex_no_srvc", 8229, "exit without services symbol", NULL, NULL, NULL }, { "geographic place name, man-made", "geo_place_mm", 8230, "Geographic place name, man-made", NULL, NULL, NULL }, { "geographic place name, water","geo_place_wtr", 8231, "Geographic place name, water", NULL, NULL, NULL }, { "geographic place name, land", "geo_place_lnd", 8232, "Geographic place name, land", NULL, NULL, NULL }, { "bridge", "bridge", 8233, "bridge symbol", &wp_bridge_pixbuf, &wp_bridge_large_pixbuf, NULL }, { "building", "building", 8234, "building symbol", &wp_building_pixbuf, &wp_building_large_pixbuf, NULL }, { "cemetery", "cemetery", 8235, "cemetery symbol", &wp_cemetery_pixbuf, &wp_cemetery_large_pixbuf, NULL }, { "church", "church", 8236, "church symbol", &wp_church_pixbuf, &wp_church_large_pixbuf, NULL }, { "civil", "civil", 8237, "civil location symbol", NULL, &wp_civil_large_pixbuf, NULL }, { "crossing", "crossing", 8238, "crossing symbol", NULL, &wp_crossing_large_pixbuf, NULL }, { "ghost town", "hist_town", 8239, "historical town symbol", NULL, NULL, NULL }, { "levee", "levee", 8240, "levee symbol", NULL, NULL, NULL }, { "military", "military", 8241, "military location symbol", &wp_military_pixbuf, NULL, NULL }, { "oil field", "oil_field", 8242, "oil field symbol", NULL, &wp_oil_field_large_pixbuf, NULL }, { "tunnel", "tunnel", 8243, "tunnel symbol", &wp_tunnel_pixbuf, &wp_tunnel_large_pixbuf, NULL }, { "beach", "beach", 8244, "beach symbol", &wp_beach_pixbuf, &wp_beach_large_pixbuf, NULL }, { "forest", "forest", 8245, "forest symbol", &wp_forest_pixbuf, &wp_forest_large_pixbuf, NULL }, { "summit", "summit", 8246, "summit symbol", &wp_summit_pixbuf, &wp_summit_large_pixbuf, NULL }, { "large ramp intersection", "lrg_ramp_int", 8247, "large ramp intersection symbol", NULL, NULL, NULL }, { "large exit without services", "lrg_ex_no_srvc", 8248, "large exit without services smbl", NULL, NULL, NULL }, { "police station", "police", 8249, "police/official badge symbol", NULL, &wp_police_large_pixbuf, NULL }, { "gambling/casino", "cards", 8250, "gambling/casino symbol", NULL, NULL, NULL }, { "ski resort", "ski_resort", 8251, "snow skiing symbol", NULL, &wp_ski_resort_large_pixbuf, NULL }, { "ice skating", "ice_skating", 8252, "ice skating symbol", &wp_ice_skating_pixbuf, &wp_ice_skating_large_pixbuf, NULL }, { "wrecker", "wrecker", 8253, "tow truck (wrecker) symbol", NULL, &wp_wrecker_large_pixbuf, NULL }, { "border crossing (port of entry)", "border", 8254, "border crossing (port of entry)", NULL, NULL, NULL }, { "geocache", "geocache", 8255, "geocache location", &wp_geocache_pixbuf, &wp_geocache_large_pixbuf, NULL }, { "geocache found", "geocache_fnd", 8256, "found geocache", &wp_geocache_fnd_pixbuf, &wp_geocache_fnd_large_pixbuf, NULL }, { "contact, smiley", "cntct_smiley", 8257, "Rino contact symbol, ""smiley""", NULL, NULL, NULL }, { "contact, ball cap", "cntct_ball_cap", 8258, "Rino contact symbol, ""ball cap""", NULL, NULL, NULL }, { "contact, big ears", "cntct_big_ears", 8259, "Rino contact symbol, ""big ear""", NULL, NULL, NULL }, { "contact, spike", "cntct_spike", 8260, "Rino contact symbol, ""spike""", NULL, NULL, NULL }, { "contact, goatee", "cntct_goatee", 8261, "Rino contact symbol, ""goatee""", NULL, NULL, NULL }, { "contact, afro", "cntct_afro", 8262, "Rino contact symbol, ""afro""", NULL, NULL, NULL }, { "contact, dreadlocks", "cntct_dreads", 8263, "Rino contact symbol, ""dreads""", NULL, NULL, NULL }, { "contact, female1", "cntct_female1", 8264, "Rino contact symbol, ""female 1""", NULL, NULL, NULL }, { "contact, female2", "cntct_female2", 8265, "Rino contact symbol, ""female 2""", NULL, NULL, NULL }, { "contact, female3", "cntct_female3", 8266, "Rino contact symbol, ""female 3""", NULL, NULL, NULL }, { "contact, ranger", "cntct_ranger", 8267, "Rino contact symbol, ""ranger""", NULL, NULL, NULL }, { "contact, kung-Fu", "cntct_kung_fu", 8268, "Rino contact symbol, ""kung fu""", NULL, NULL, NULL }, { "contact, sumo", "cntct_sumo", 8269, "Rino contact symbol, ""sumo""", NULL, NULL, NULL }, { "contact, pirate", "cntct_pirate", 8270, "Rino contact symbol, ""pirate""", NULL, NULL, NULL }, { "contact, biker", "cntct_biker", 8271, "Rino contact symbol, ""biker""", NULL, NULL, NULL }, { "contact, alien", "cntct_alien", 8272, "Rino contact symbol, ""alien""", NULL, NULL, NULL }, { "contact, bug", "cntct_bug", 8273, "Rino contact symbol, ""bug""", NULL, NULL, NULL }, { "contact, cat", "cntct_cat", 8274, "Rino contact symbol, ""cat""", NULL, NULL, NULL }, { "contact, dog", "cntct_dog", 8275, "Rino contact symbol, ""dog""", NULL, NULL, NULL }, { "contact, pig", "cntct_pig", 8276, "Rino contact symbol, ""pig""", NULL, NULL, NULL }, { "water hydrant", "hydrant", 8282, "water hydrant symbol", NULL, NULL, NULL }, { "flag, blue", "flag_blue", 8284, "blue flag symbol", NULL, &wp_flag_blue_large_pixbuf, NULL }, { "flag, green", "flag_green", 8285, "green flag symbol", NULL, &wp_flag_green_large_pixbuf, NULL }, { "flag, red", "flag_red", 8286, "red flag symbol", NULL, &wp_flag_red_large_pixbuf, NULL }, { "pin, blue", "pin_blue", 8287, "blue pin symbol", NULL, &wp_pin_blue_large_pixbuf, NULL }, { "pin, green", "pin_green", 8288, "green pin symbol", NULL, &wp_pin_green_large_pixbuf, NULL }, { "pin, red", "pin_red", 8289, "red pin symbol", NULL, &wp_pin_red_large_pixbuf, NULL }, { "block, blue", "block_blue", 8290, "blue block symbol", NULL, &wp_block_blue_large_pixbuf, NULL }, { "block, green", "block_green", 8291, "green block symbol", NULL, &wp_block_green_large_pixbuf, NULL }, { "block, red", "block_red", 8292, "red block symbol", NULL, &wp_block_red_large_pixbuf, NULL }, { "bike trail", "bike_trail", 8293, "bike trail symbol", NULL, &wp_bike_trail_large_pixbuf, NULL }, { "circle, red", "circle_red", 8294, "red circle symbol", NULL, NULL, NULL }, { "circle, green", "circle_green", 8295, "green circle symbol", NULL, NULL, NULL }, { "circle, blue", "circle_blue", 8296, "blue circle symbol", NULL, NULL, NULL }, { "diamond, blue", "diamond_blue", 8299, "blue diamond symbol", NULL, NULL, NULL }, { "oval, red", "oval_red", 8300, "red oval symbol", NULL, NULL, NULL }, { "oval, green", "oval_green", 8301, "green oval symbol", NULL, NULL, NULL }, { "oval, blue", "oval_blue", 8302, "blue oval symbol", NULL, NULL, NULL }, { "rectangle, red", "rect_red", 8303, "red rectangle symbol", NULL, NULL, NULL }, { "rectangle, green", "rect_green", 8304, "green rectangle symbol", NULL, NULL, NULL }, { "rectangle, blue", "rect_blue", 8305, "blue rectangle symbol", NULL, NULL, NULL }, { "square, blue", "square_blue", 8308, "blue square symbol", NULL, NULL, NULL }, { "letter a, red", "letter_a_red", 8309, "red letter 'A' symbol", NULL, NULL, NULL }, { "letter b, red", "letter_b_red", 8310, "red letter 'B' symbol", NULL, NULL, NULL }, { "letter c, red", "letter_c_red", 8311, "red letter 'C' symbol", NULL, NULL, NULL }, { "letter d, red", "letter_d_red", 8312, "red letter 'D' symbol", NULL, NULL, NULL }, { "letter a, green", "letter_a_green", 8313, "green letter 'A' symbol", NULL, NULL, NULL }, { "letter c, green", "letter_c_green", 8314, "green letter 'C' symbol", NULL, NULL, NULL }, { "letter b, green", "letter_b_green", 8315, "green letter 'B' symbol", NULL, NULL, NULL }, { "letter d, green", "letter_d_green", 8316, "green letter 'D' symbol", NULL, NULL, NULL }, { "letter a, blue", "letter_a_blue", 8317, "blue letter 'A' symbol", NULL, NULL, NULL }, { "letter b, blue", "letter_b_blue", 8318, "blue letter 'B' symbol", NULL, NULL, NULL }, { "letter c, blue", "letter_c_blue", 8319, "blue letter 'C' symbol", NULL, NULL, NULL }, { "letter d, blue", "letter_d_blue", 8320, "blue letter 'D' symbol", NULL, NULL, NULL }, { "number 0, red", "number_0_red", 8321, "red number '0' symbol", NULL, NULL, NULL }, { "number 1, red", "number_1_red", 8322, "red number '1' symbol", NULL, NULL, NULL }, { "number 2, red", "number_2_red", 8323, "red number '2' symbol", NULL, NULL, NULL }, { "number 3, red", "number_3_red", 8324, "red number '3' symbol", NULL, NULL, NULL }, { "number 4, red", "number_4_red", 8325, "red number '4' symbol", NULL, NULL, NULL }, { "number 5, red", "number_5_red", 8326, "red number '5' symbol", NULL, NULL, NULL }, { "number 6, red", "number_6_red", 8327, "red number '6' symbol", NULL, NULL, NULL }, { "number 7, red", "number_7_red", 8328, "red number '7' symbol", NULL, NULL, NULL }, { "number 8, red", "number_8_red", 8329, "red number '8' symbol", NULL, NULL, NULL }, { "number 9, red", "number_9_red", 8330, "red number '9' symbol", NULL, NULL, NULL }, { "number 0, green", "number_0_green", 8331, "green number '0' symbol", NULL, NULL, NULL }, { "number 1, green", "number_1_green", 8332, "green number '1' symbol", NULL, NULL, NULL }, { "number 2, green", "number_2_green", 8333, "green number '2' symbol", NULL, NULL, NULL }, { "number 3, green", "number_3_green", 8334, "green number '3' symbol", NULL, NULL, NULL }, { "number 4, green", "number_4_green", 8335, "green number '4' symbol", NULL, NULL, NULL }, { "number 5, green", "number_5_green", 8336, "green number '5' symbol", NULL, NULL, NULL }, { "number 6, green", "number_6_green", 8337, "green number '6' symbol", NULL, NULL, NULL }, { "number 7, green", "number_7_green", 8338, "green number '7' symbol", NULL, NULL, NULL }, { "number 8, green", "number_8_green", 8339, "green number '8' symbol", NULL, NULL, NULL }, { "number 9, green", "number_9_green", 8340, "green number '9' symbol", NULL, NULL, NULL }, { "number 0, blue", "number_0_blue", 8341, "blue number '0' symbol", NULL, NULL, NULL }, { "number 1, blue", "number_1_blue", 8342, "blue number '1' symbol", NULL, NULL, NULL }, { "number 2, blue", "number_2_blue", 8343, "blue number '2' symbol", NULL, NULL, NULL }, { "number 3, blue", "number_3_blue", 8344, "blue number '3' symbol", NULL, NULL, NULL }, { "number 4, blue", "number_4_blue", 8345, "blue number '4' symbol", NULL, NULL, NULL }, { "number 5, blue", "number_5_blue", 8346, "blue number '5' symbol", NULL, NULL, NULL }, { "number 6, blue", "number_6_blue", 8347, "blue number '6' symbol", NULL, NULL, NULL }, { "number 7, blue", "number_7_blue", 8348, "blue number '7' symbol", NULL, NULL, NULL }, { "number 8, blue", "number_8_blue", 8349, "blue number '8' symbol", NULL, NULL, NULL }, { "number 9, blue", "number_9_blue", 8350, "blue number '9' symbol", NULL, NULL, NULL }, { "triangle, blue", "triangle_blue", 8351, "blue triangle symbol", NULL, NULL, NULL }, { "triangle, green", "triangle_green", 8352, "green triangle symbol", NULL, NULL, NULL }, { "triangle, red", "triangle_red", 8353, "red triangle symbol", NULL, NULL, NULL }, /*--------------------------------------------------------------- Aviation symbols ---------------------------------------------------------------*/ { "airport", "airport", 16384, "airport symbol", &wp_airplane_pixbuf, &wp_airplane_large_pixbuf, NULL }, { "intersection", "int", 16385, "intersection symbol", NULL, NULL, NULL }, { "non-directional beacon", "ndb", 16386, "non-directional beacon symbol", NULL, NULL, NULL }, { "vhf omni-range", "vor", 16387, "VHF omni-range symbol", NULL, NULL, NULL }, { "heliport", "heliport", 16388, "heliport symbol", NULL, NULL, NULL }, { "private field", "private", 16389, "private field symbol", NULL, NULL, NULL }, { "soft field", "soft_fld", 16390, "soft field symbol", NULL, NULL, NULL }, { "tall tower", "tall_tower", 16391, "tall tower symbol", NULL, &wp_tall_tower_large_pixbuf, NULL }, { "short tower", "short_tower", 16392, "short tower symbol", NULL, &wp_short_tower_large_pixbuf, NULL }, { "glider area", "glider", 16393, "glider symbol", NULL, &wp_glider_large_pixbuf, NULL }, { "ultralight area", "ultralight", 16394, "ultralight symbol", NULL, &wp_ultralight_large_pixbuf, NULL }, { "parachute area", "parachute", 16395, "parachute symbol", NULL, &wp_parachute_large_pixbuf, NULL }, { "vor/tacan", "vortac", 16396, "VOR/TACAN symbol", NULL, NULL, NULL }, { "vor-dme", "vordme", 16397, "VOR-DME symbol", NULL, NULL, NULL }, { "first approach fix", "faf", 16398, "first approach fix", NULL, NULL, NULL }, { "localizer outer marker", "lom", 16399, "localizer outer marker", NULL, NULL, NULL }, { "missed approach point", "map", 16400, "missed approach point", NULL, NULL, NULL }, { "tacan", "tacan", 16401, "TACAN symbol", NULL, NULL, NULL }, { "seaplane base", "seaplane", 16402, "Seaplane Base", NULL, NULL, NULL } }; static GHashTable *icons = NULL; static GHashTable *old_icons = NULL; static void init_icons() { icons = g_hash_table_new_full ( g_str_hash, g_str_equal, NULL, NULL); old_icons = g_hash_table_new_full ( g_str_hash, g_str_equal, NULL, NULL); gint i; for (i=0; i * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include "viking.h" #include "babel.h" #include "gpx.h" #include "acquire.h" /** * See http://wiki.openstreetmap.org/wiki/API_v0.6#GPS_Traces */ #define DOWNLOAD_URL_FMT "api.openstreetmap.org/api/0.6/trackpoints?bbox=%s,%s,%s,%s&page=%d" typedef struct { GtkWidget *page_number; VikViewport *vvp; } datasource_osm_widgets_t; static gdouble last_page_number = 0; static gpointer datasource_osm_init( ); static void datasource_osm_add_setup_widgets ( GtkWidget *dialog, VikViewport *vvp, gpointer user_data ); static void datasource_osm_get_cmd_string ( datasource_osm_widgets_t *widgets, gchar **cmd, gchar **input_file_type, DownloadMapOptions *options ); static void datasource_osm_cleanup ( gpointer data ); VikDataSourceInterface vik_datasource_osm_interface = { N_("OSM traces"), N_("OSM traces"), VIK_DATASOURCE_ADDTOLAYER, VIK_DATASOURCE_INPUTTYPE_NONE, TRUE, TRUE, TRUE, (VikDataSourceInitFunc) datasource_osm_init, (VikDataSourceCheckExistenceFunc) NULL, (VikDataSourceAddSetupWidgetsFunc) datasource_osm_add_setup_widgets, (VikDataSourceGetCmdStringFunc) datasource_osm_get_cmd_string, (VikDataSourceProcessFunc) a_babel_convert_from_url, (VikDataSourceProgressFunc) NULL, (VikDataSourceAddProgressWidgetsFunc) NULL, (VikDataSourceCleanupFunc) datasource_osm_cleanup, (VikDataSourceOffFunc) NULL, }; static gpointer datasource_osm_init ( ) { datasource_osm_widgets_t *widgets = g_malloc(sizeof(*widgets)); return widgets; } static void datasource_osm_add_setup_widgets ( GtkWidget *dialog, VikViewport *vvp, gpointer user_data ) { datasource_osm_widgets_t *widgets = (datasource_osm_widgets_t *)user_data; GtkWidget *page_number_label; page_number_label = gtk_label_new (_("Page number:")); widgets->page_number = gtk_spin_button_new_with_range(0, 100, 1); gtk_spin_button_set_value(GTK_SPIN_BUTTON(widgets->page_number), last_page_number); gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(dialog)->vbox), page_number_label, FALSE, FALSE, 5 ); gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(dialog)->vbox), widgets->page_number, FALSE, FALSE, 5 ); gtk_widget_show_all(dialog); /* Keep reference to viewport */ widgets->vvp = vvp; } static void datasource_osm_get_cmd_string ( datasource_osm_widgets_t *widgets, gchar **cmd, gchar **input_file_type, DownloadMapOptions *options ) { int page = 0; gdouble min_lat, max_lat, min_lon, max_lon; gchar sminlon[G_ASCII_DTOSTR_BUF_SIZE]; gchar smaxlon[G_ASCII_DTOSTR_BUF_SIZE]; gchar sminlat[G_ASCII_DTOSTR_BUF_SIZE]; gchar smaxlat[G_ASCII_DTOSTR_BUF_SIZE]; /* get Viewport bounding box */ vik_viewport_get_min_max_lat_lon ( widgets->vvp, &min_lat, &max_lat, &min_lon, &max_lon ); /* Convert as LANG=C double representation */ g_ascii_dtostr (sminlon, G_ASCII_DTOSTR_BUF_SIZE, min_lon); g_ascii_dtostr (smaxlon, G_ASCII_DTOSTR_BUF_SIZE, max_lon); g_ascii_dtostr (sminlat, G_ASCII_DTOSTR_BUF_SIZE, min_lat); g_ascii_dtostr (smaxlat, G_ASCII_DTOSTR_BUF_SIZE, max_lat); /* Retrieve the specified page number */ last_page_number = gtk_spin_button_get_value(GTK_SPIN_BUTTON(widgets->page_number)); page = last_page_number; *cmd = g_strdup_printf( DOWNLOAD_URL_FMT, sminlon, sminlat, smaxlon, smaxlat, page ); *input_file_type = NULL; options = NULL; } static void datasource_osm_cleanup ( gpointer data ) { g_free ( data ); } viking-1.4.2/src/google.c0000644000175000017500000000274012175546146012153 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include "globals.h" #include "google.h" #include "vikexttools.h" #include "vikwebtoolcenter.h" #include "vikgoto.h" #include "googlesearch.h" void google_init () { // Webtools VikWebtoolCenter *webtool = vik_webtool_center_new_with_members ( _("Google"), "http://maps.google.com/maps?f=q&geocode=&ie=UTF8&ll=%s,%s&z=%d&iwloc=addr" ); vik_ext_tools_register ( VIK_EXT_TOOL ( webtool ) ); g_object_unref ( webtool ); // Goto GoogleGotoTool *gototool = google_goto_tool_new ( ); vik_goto_register ( VIK_GOTO_TOOL ( gototool ) ); g_object_unref ( gototool ); } viking-1.4.2/src/mapcache.c0000644000175000017500000001447712175546146012452 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include "globals.h" #include "mapcache.h" #include "preferences.h" #include "config.h" typedef struct _List { struct _List *next; gchar *key; } List; /* a circular linked list, a pointer to the tail, and the tail points to the head */ /* this is so we can free the last */ static List *queue_tail = NULL; static int queue_count = 0; static guint32 queue_size = 0; static guint32 max_queue_size = VIK_CONFIG_MAPCACHE_SIZE * 1024 * 1024; static GHashTable *cache = NULL; static GMutex *mc_mutex = NULL; #define HASHKEY_FORMAT_STRING "%d-%d-%d-%d-%d-%d-%.3f-%.3f" #define HASHKEY_FORMAT_STRING_NOSHRINK_NOR_ALPHA "%d-%d-%d-%d-%d-" static VikLayerParamScale params_scales[] = { /* min, max, step, digits (decimal places) */ { 1, 1024, 1, 0 }, }; static VikLayerParam prefs[] = { { VIKING_PREFERENCES_NAMESPACE "mapcache_size", VIK_LAYER_PARAM_UINT, VIK_LAYER_GROUP_NONE, N_("Map cache memory size (MB):"), VIK_LAYER_WIDGET_HSCALE, params_scales, NULL, NULL }, }; void a_mapcache_init () { VikLayerParamData tmp; tmp.u = VIK_CONFIG_MAPCACHE_SIZE; a_preferences_register(prefs, tmp, VIKING_PREFERENCES_GROUP_KEY); mc_mutex = g_mutex_new(); cache = g_hash_table_new_full ( g_str_hash, g_str_equal, g_free, g_object_unref ); } static void cache_add(gchar *key, GdkPixbuf *pixbuf) { /* TODO: Check if already exists */ g_hash_table_insert ( cache, key, pixbuf ); queue_size += gdk_pixbuf_get_rowstride(pixbuf) * gdk_pixbuf_get_height(pixbuf); queue_size += 100; queue_count++; } static void cache_remove(const gchar *key) { GdkPixbuf *buf = g_hash_table_lookup ( cache, key ); if (buf) { queue_size -= gdk_pixbuf_get_rowstride(buf) * gdk_pixbuf_get_height(buf); queue_size -= 100; queue_count --; g_hash_table_remove ( cache, key ); } } /* returns key from head, adds on newtailkey to tail. */ static gchar *list_shift_add_entry ( gchar *newtailkey ) { gchar *oldheadkey = queue_tail->next->key; queue_tail->next->key = newtailkey; queue_tail = queue_tail->next; return oldheadkey; } static gchar *list_shift () { gchar *oldheadkey = queue_tail->next->key; List *oldhead = queue_tail->next; queue_tail->next = queue_tail->next->next; g_free ( oldhead ); return oldheadkey; } /* adds key to tail */ static void list_add_entry ( gchar *key ) { List *newlist = g_malloc ( sizeof ( List ) ); newlist->key = key; if ( queue_tail ) { newlist->next = queue_tail->next; queue_tail->next = newlist; queue_tail = newlist; } else { newlist->next = newlist; queue_tail = newlist; } } void a_mapcache_add ( GdkPixbuf *pixbuf, gint x, gint y, gint z, guint16 type, guint zoom, guint8 alpha, gdouble xshrinkfactor, gdouble yshrinkfactor ) { gchar *key = g_strdup_printf ( HASHKEY_FORMAT_STRING, x, y, z, type, zoom, alpha, xshrinkfactor, yshrinkfactor ); static int tmp = 0; g_mutex_lock(mc_mutex); cache_add(key, pixbuf); // TODO: that should be done on preference change only... max_queue_size = a_preferences_get(VIKING_PREFERENCES_NAMESPACE "mapcache_size")->u * 1024 * 1024; if ( queue_size > max_queue_size ) { gchar *oldkey = list_shift_add_entry ( key ); cache_remove(oldkey); while ( queue_size > max_queue_size && (queue_tail->next != queue_tail) ) { /* make sure there's more than one thing to delete */ oldkey = list_shift (); cache_remove(oldkey); } /* chop off 'start' etc */ } else { list_add_entry ( key ); /* business as usual */ } g_mutex_unlock(mc_mutex); if ( (++tmp == 100 )) { g_print("DEBUG: queue count=%d size=%u\n", queue_count, queue_size ); tmp=0; } } GdkPixbuf *a_mapcache_get ( gint x, gint y, gint z, guint16 type, guint zoom, guint8 alpha, gdouble xshrinkfactor, gdouble yshrinkfactor ) { static char key[48]; g_snprintf ( key, sizeof(key), HASHKEY_FORMAT_STRING, x, y, z, type, zoom, alpha, xshrinkfactor, yshrinkfactor ); return g_hash_table_lookup ( cache, key ); } void a_mapcache_remove_all_shrinkfactors ( gint x, gint y, gint z, guint16 type, guint zoom ) { char key[40]; List *loop = queue_tail; List *tmp; gint len; if ( queue_tail == NULL ) return; g_snprintf ( key, sizeof(key), HASHKEY_FORMAT_STRING_NOSHRINK_NOR_ALPHA, x, y, z, type, zoom ); len = strlen(key); g_mutex_lock(mc_mutex); /* TODO: check logic here */ do { tmp = loop->next; if ( strncmp(tmp->key, key, len) == 0 ) { cache_remove(tmp->key); if ( tmp == loop ) /* we deleted the last thing in the queue! */ loop = queue_tail = NULL; else { loop->next = tmp->next; if ( tmp == queue_tail ) queue_tail = tmp->next; } g_free ( tmp ); tmp = NULL; } else loop = tmp; } while ( loop && (loop != queue_tail || tmp == NULL) ); /* loop thru list, looking for the one, compare first whatever chars */ cache_remove(key); g_mutex_unlock(mc_mutex); } void a_mapcache_flush () { List *loop = queue_tail; List *tmp; if ( queue_tail == NULL ) return; g_mutex_lock(mc_mutex); do { tmp = loop->next; cache_remove(tmp->key); if ( tmp == queue_tail ) /* we deleted the last thing in the queue */ loop = queue_tail = NULL; else loop->next = tmp->next; g_free ( tmp ); tmp = NULL; } while ( loop ); g_mutex_unlock(mc_mutex); } void a_mapcache_uninit () { g_hash_table_destroy ( cache ); /* free list */ cache = NULL; } viking-1.4.2/src/datasources.h0000644000175000017500000000315412175546146013221 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef __VIK_DATASOURCES_H #define __VIK_DATASOURCES_H #include "acquire.h" G_BEGIN_DECLS extern VikDataSourceInterface vik_datasource_gps_interface; extern VikDataSourceInterface vik_datasource_file_interface; #ifdef VIK_CONFIG_GOOGLE extern VikDataSourceInterface vik_datasource_google_interface; #endif #ifdef VIK_CONFIG_OPENSTREETMAP extern VikDataSourceInterface vik_datasource_osm_interface; extern VikDataSourceInterface vik_datasource_osm_my_traces_interface; #endif #ifdef VIK_CONFIG_GEOCACHES extern VikDataSourceInterface vik_datasource_gc_interface; #endif #ifdef VIK_CONFIG_GEOTAG extern VikDataSourceInterface vik_datasource_geotag_interface; #endif #ifdef VIK_CONFIG_GEONAMES extern VikDataSourceInterface vik_datasource_wikipedia_interface; #endif G_BEGIN_DECLS #endif viking-1.4.2/src/viktrwlayer_tpwin.h0000644000175000017500000000465712122673673014517 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef _VIKING_TRWLAYER_TPWIN_H #define _VIKING_TRWLAYER_TPWIN_H #include #include #include G_BEGIN_DECLS /* response codes */ #define VIK_TRW_LAYER_TPWIN_CLOSE 6 #define VIK_TRW_LAYER_TPWIN_INSERT 5 #define VIK_TRW_LAYER_TPWIN_DELETE 4 #define VIK_TRW_LAYER_TPWIN_SPLIT 3 #define VIK_TRW_LAYER_TPWIN_BACK 1 #define VIK_TRW_LAYER_TPWIN_FORWARD 0 #define VIK_TRW_LAYER_TPWIN_DATA_CHANGED 100 #define VIK_TRW_LAYER_TPWIN_TYPE (vik_trw_layer_tpwin_get_type ()) #define VIK_TRW_LAYER_TPWIN(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIK_TRW_LAYER_TPWIN_TYPE, VikTrwLayerTpwin)) #define VIK_TRW_LAYER_TPWIN_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VIK_TRW_LAYER_TPWIN_TYPE, VikTrwLayerTpwinClass)) #define IS_VIK_TRW_LAYER_TPWIN(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIK_TRW_LAYER_TPWIN_TYPE)) #define IS_VIK_TRW_LAYER_TPWIN_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VIK_TRW_LAYER_TPWIN_TYPE)) typedef struct _VikTrwLayerTpwin VikTrwLayerTpwin; typedef struct _VikTrwLayerTpwinClass VikTrwLayerTpwinClass; struct _VikTrwLayerTpwinClass { GtkDialogClass vik_trw_layer_class; }; GType vik_trw_layer_tpwin_get_type (); VikTrwLayerTpwin *vik_trw_layer_tpwin_new ( GtkWindow *parent ); void vik_trw_layer_tpwin_set_empty ( VikTrwLayerTpwin *tpwin ); void vik_trw_layer_tpwin_disable_join ( VikTrwLayerTpwin *tpwin ); void vik_trw_layer_tpwin_set_tp ( VikTrwLayerTpwin *tpwin, GList *tpl, gchar *track_name ); void vik_trw_layer_tpwin_set_track_name ( VikTrwLayerTpwin *tpwin, const gchar *track_name ); G_END_DECLS #endif viking-1.4.2/src/viking.h0000644000175000017500000000312212175546146012166 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef __VIKING_VIKING_H #define __VIKING_VIKING_H #include #include #include #ifdef WINDOWS #include #include #endif #include "config.h" #include "globals.h" #include "coords.h" #include "vikcoord.h" #include "download.h" #include "vikwaypoint.h" #include "viktrack.h" #include "vikviewport.h" #include "viktreeview.h" #include "viklayer.h" #include "vikaggregatelayer.h" #include "viklayerspanel.h" #include "vikcoordlayer.h" #include "vikgeoreflayer.h" #include "vikstatus.h" #include "vikfileentry.h" #include "viktrwlayer.h" #include "vikgpslayer.h" #include "clipboard.h" #include "dialog.h" #include "file.h" #include "vikwindow.h" #include "gpspoint.h" #include "gpsmapper.h" #endif viking-1.4.2/src/viktrwlayer_propwin.h0000644000175000017500000000304612172515517015040 00000000000000/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef _VIKING_TRWLAYER_PROPWIN_H #define _VIKING_TRWLAYER_PROPWIN_H #include #include #include "viktrack.h" G_BEGIN_DECLS #define VIK_TRW_LAYER_PROPWIN_SPLIT 1 #define VIK_TRW_LAYER_PROPWIN_REVERSE 2 #define VIK_TRW_LAYER_PROPWIN_DEL_DUP 3 #define VIK_TRW_LAYER_PROPWIN_SPLIT_MARKER 4 void vik_trw_layer_propwin_run ( GtkWindow *parent, VikTrwLayer *vtl, VikTrack *tr, gpointer vlp, VikViewport *vvp, gpointer *trk_id ); /** * Update this property dialog * e.g. if the track has been renamed */ void vik_trw_layer_propwin_update ( VikTrack *trk ); G_END_DECLS #endif viking-1.4.2/src/gpsmapper.h0000644000175000017500000000177412122673673012706 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef __GPSMAPPER_H #define __GPSMAPPER_H #include "viktrwlayer.h" G_BEGIN_DECLS void a_gpsmapper_write_file ( VikTrwLayer *trw, FILE *f ); G_END_DECLS #endif viking-1.4.2/src/vikdemlayer.h0000644000175000017500000000362512175546146013223 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef _VIKING_DEMLAYER_H #define _VIKING_DEMLAYER_H #include "viklayer.h" G_BEGIN_DECLS #define VIK_DEM_LAYER_TYPE (vik_dem_layer_get_type ()) #define VIK_DEM_LAYER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIK_DEM_LAYER_TYPE, VikDEMLayer)) #define VIK_DEM_LAYER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VIK_DEM_LAYER_TYPE, VikDEMLayerClass)) #define IS_VIK_DEM_LAYER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIK_DEM_LAYER_TYPE)) #define IS_VIK_DEM_LAYER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VIK_DEM_LAYER_TYPE)) typedef struct _VikDEMLayerClass VikDEMLayerClass; struct _VikDEMLayerClass { VikLayerClass object_class; }; GType vik_dem_layer_get_type (); typedef struct _VikDEMLayer VikDEMLayer; /* TODO 0.0.8: yup, everything goes. */ VikDEMLayer *vik_dem_layer_new ( ); void vik_dem_layer_draw ( VikDEMLayer *vcl, gpointer data ); void vik_dem_layer_free ( VikDEMLayer *vcl ); VikDEMLayer *vik_dem_layer_create ( VikViewport *vp ); gboolean vik_dem_layer_properties ( VikDEMLayer *vcl, gpointer vp ); G_END_DECLS #endif viking-1.4.2/src/datasource_gps.c0000644000175000017500000004773512175546146013717 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * Copyright (C) 2006, Alex Foobarian * Copyright (C) 2012, Rob Norris * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #ifdef HAVE_UNISTD_H #include #endif #include #include #include #include "datasource_gps.h" #include "viking.h" #include "babel.h" #include "gpx.h" #include "acquire.h" static gboolean gps_acquire_in_progress = FALSE; static gint last_active = -1; static gboolean last_get_tracks = TRUE; static gboolean last_get_routes = TRUE; static gboolean last_get_waypoints = TRUE; static gpointer datasource_gps_init_func ( ); static void datasource_gps_get_cmd_string ( gpointer add_widgets_data_not_used, gchar **babelargs, gchar **input_file, gpointer not_used ); static void datasource_gps_cleanup ( gpointer user_data ); static void datasource_gps_progress ( BabelProgressCode c, gpointer data, acq_dialog_widgets_t *w ); static void datasource_gps_add_setup_widgets ( GtkWidget *dialog, VikViewport *vvp, gpointer user_data ); static void datasource_gps_add_progress_widgets ( GtkWidget *dialog, gpointer user_data ); static void datasource_gps_off ( gpointer add_widgets_data_not_used, gchar **babelargs, gchar **input_file ); VikDataSourceInterface vik_datasource_gps_interface = { N_("Acquire from GPS"), N_("Acquired from GPS"), VIK_DATASOURCE_CREATENEWLAYER, VIK_DATASOURCE_INPUTTYPE_NONE, TRUE, TRUE, TRUE, (VikDataSourceInitFunc) datasource_gps_init_func, (VikDataSourceCheckExistenceFunc) NULL, (VikDataSourceAddSetupWidgetsFunc) datasource_gps_add_setup_widgets, (VikDataSourceGetCmdStringFunc) datasource_gps_get_cmd_string, (VikDataSourceProcessFunc) a_babel_convert_from, (VikDataSourceProgressFunc) datasource_gps_progress, (VikDataSourceAddProgressWidgetsFunc) datasource_gps_add_progress_widgets, (VikDataSourceCleanupFunc) datasource_gps_cleanup, (VikDataSourceOffFunc) datasource_gps_off }; /********************************************************* * Definitions and routines for acquiring data from GPS *********************************************************/ /* widgets in setup dialog specific to GPS */ /* widgets in progress dialog specific to GPS */ /* also counts needed for progress */ typedef struct { /* setup dialog */ GtkWidget *proto_l; GtkComboBox *proto_b; GtkWidget *ser_l; GtkComboBox *ser_b; GtkWidget *off_request_l; GtkCheckButton *off_request_b; GtkWidget *get_tracks_l; GtkCheckButton *get_tracks_b; GtkWidget *get_routes_l; GtkCheckButton *get_routes_b; GtkWidget *get_waypoints_l; GtkCheckButton *get_waypoints_b; /* progress dialog */ GtkWidget *gps_label; GtkWidget *ver_label; GtkWidget *id_label; GtkWidget *wp_label; GtkWidget *trk_label; GtkWidget *rte_label; GtkWidget *progress_label; vik_gps_xfer_type progress_type; /* state */ int total_count; int count; } gps_user_data_t; static gpointer datasource_gps_init_func () { return g_malloc (sizeof(gps_user_data_t)); } /** * datasource_gps_get_protocol: * * Method to get the communication protocol of the GPS device from the widget structure */ gchar* datasource_gps_get_protocol ( gpointer user_data ) { // Uses the list of supported devices gps_user_data_t *w = (gps_user_data_t *)user_data; last_active = gtk_combo_box_get_active(GTK_COMBO_BOX(w->proto_b)); if (a_babel_device_list) return ((BabelDevice*)g_list_nth_data(a_babel_device_list, last_active))->name; return NULL; } /** * datasource_gps_get_descriptor: * * Method to get the descriptor from the widget structure * "Everything is a file" * Could actually be normal file or a serial port */ gchar* datasource_gps_get_descriptor ( gpointer user_data ) { gps_user_data_t *w = (gps_user_data_t *)user_data; return gtk_combo_box_get_active_text(GTK_COMBO_BOX(w->ser_b)); } /** * datasource_gps_get_do_tracks: * * Method to get the track handling behaviour from the widget structure */ gboolean datasource_gps_get_do_tracks ( gpointer user_data ) { gps_user_data_t *w = (gps_user_data_t *)user_data; last_get_tracks = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w->get_tracks_b)); return last_get_tracks; } /** * datasource_gps_get_do_routes: * * Method to get the route handling behaviour from the widget structure */ gboolean datasource_gps_get_do_routes ( gpointer user_data ) { gps_user_data_t *w = (gps_user_data_t *)user_data; last_get_routes = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w->get_routes_b)); return last_get_routes; } /** * datasource_gps_get_do_waypoints: * * Method to get the waypoint handling behaviour from the widget structure */ gboolean datasource_gps_get_do_waypoints ( gpointer user_data ) { gps_user_data_t *w = (gps_user_data_t *)user_data; last_get_waypoints = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w->get_waypoints_b)); return last_get_waypoints; } static void datasource_gps_get_cmd_string ( gpointer user_data, gchar **babelargs, gchar **input_file, gpointer not_used ) { char *device = NULL; char *tracks = NULL; char *routes = NULL; char *waypoints = NULL; if (gps_acquire_in_progress) { *babelargs = *input_file = NULL; } gps_acquire_in_progress = TRUE; device = datasource_gps_get_protocol ( user_data ); if ( datasource_gps_get_do_tracks ( user_data ) ) tracks = "-t"; else tracks = ""; if ( datasource_gps_get_do_routes ( user_data ) ) routes = "-r"; else routes = ""; if ( datasource_gps_get_do_waypoints ( user_data ) ) waypoints = "-w"; else waypoints = ""; *babelargs = g_strdup_printf("-D 9 %s %s %s -i %s", tracks, routes, waypoints, device); /* device points to static content => no free */ device = NULL; tracks = NULL; routes = NULL; waypoints = NULL; *input_file = g_strdup(datasource_gps_get_descriptor(user_data)); g_debug(_("using cmdline '%s' and file '%s'\n"), *babelargs, *input_file); } /** * datasource_gps_get_off: * * Method to get the off behaviour from the widget structure */ gboolean datasource_gps_get_off ( gpointer user_data ) { gps_user_data_t *w = (gps_user_data_t *)user_data; return gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w->off_request_b)); } static void datasource_gps_off ( gpointer user_data, gchar **babelargs, gchar **input_file ) { char *ser = NULL; char *device = NULL; gps_user_data_t *w = (gps_user_data_t *)user_data; if (gps_acquire_in_progress) { *babelargs = *input_file = NULL; } /* See if we should turn off the device */ if (!datasource_gps_get_off ( user_data )){ return; } if (!a_babel_device_list) return; last_active = gtk_combo_box_get_active(GTK_COMBO_BOX(w->proto_b)); device = ((BabelDevice*)g_list_nth_data(a_babel_device_list, last_active))->name; if (!strcmp(device, "garmin")) { device = "garmin,power_off"; } else if (!strcmp(device, "navilink")) { device = "navilink,power_off"; } else { return; } *babelargs = g_strdup_printf("-i %s", device); /* device points to static content => no free */ device = NULL; ser = gtk_combo_box_get_active_text(GTK_COMBO_BOX(w->ser_b)); *input_file = g_strdup(ser); } static void datasource_gps_cleanup ( gpointer user_data ) { g_free ( user_data ); gps_acquire_in_progress = FALSE; } /** * datasource_gps_clean_up: * * External method to tidy up */ void datasource_gps_clean_up ( gpointer user_data ) { datasource_gps_cleanup ( user_data ); } static void set_total_count(gint cnt, acq_dialog_widgets_t *w) { gchar *s = NULL; gdk_threads_enter(); if (w->running) { gps_user_data_t *gps_data = (gps_user_data_t *)w->user_data; const gchar *tmp_str; switch (gps_data->progress_type) { case WPT: tmp_str = ngettext("Downloading %d waypoint...", "Downloading %d waypoints...", cnt); gps_data->total_count = cnt; break; case TRK: tmp_str = ngettext("Downloading %d trackpoint...", "Downloading %d trackpoints...", cnt); gps_data->total_count = cnt; break; default: { // Maybe a gpsbabel bug/feature (upto at least v1.4.3 or maybe my Garmin device) but the count always seems x2 too many for routepoints gint mycnt = (cnt / 2) + 1; tmp_str = ngettext("Downloading %d routepoint...", "Downloading %d routepoints...", mycnt); gps_data->total_count = mycnt; break; } } s = g_strdup_printf(tmp_str, cnt); gtk_label_set_text ( GTK_LABEL(gps_data->progress_label), s ); gtk_widget_show ( gps_data->progress_label ); } g_free(s); s = NULL; gdk_threads_leave(); } static void set_current_count(gint cnt, acq_dialog_widgets_t *w) { gchar *s = NULL; gdk_threads_enter(); if (w->running) { gps_user_data_t *gps_data = (gps_user_data_t *)w->user_data; if (cnt < gps_data->total_count) { switch (gps_data->progress_type) { case WPT: s = g_strdup_printf(_("Downloaded %d out of %d %s..."), cnt, gps_data->total_count, "waypoints"); break; case TRK: s = g_strdup_printf(_("Downloaded %d out of %d %s..."), cnt, gps_data->total_count, "trackpoints"); break; default: s = g_strdup_printf(_("Downloaded %d out of %d %s..."), cnt, gps_data->total_count, "routepoints"); break; } } else { switch (gps_data->progress_type) { case WPT: s = g_strdup_printf(_("Downloaded %d %s."), cnt, "waypoints"); break; case TRK: s = g_strdup_printf(_("Downloaded %d %s."), cnt, "trackpoints"); break; default: s = g_strdup_printf(_("Downloaded %d %s."), cnt, "routepoints"); break; } } gtk_label_set_text ( GTK_LABEL(gps_data->progress_label), s ); } g_free(s); s = NULL; gdk_threads_leave(); } static void set_gps_info(const gchar *info, acq_dialog_widgets_t *w) { gchar *s = NULL; gdk_threads_enter(); if (w->running) { s = g_strdup_printf(_("GPS Device: %s"), info); gtk_label_set_text ( GTK_LABEL(((gps_user_data_t *)w->user_data)->gps_label), s ); } g_free(s); s = NULL; gdk_threads_leave(); } /* * This routine relies on gpsbabel's diagnostic output to display the progress information. * These outputs differ when different GPS devices are used, so we will need to test * them on several and add the corresponding support. */ static void datasource_gps_progress ( BabelProgressCode c, gpointer data, acq_dialog_widgets_t *w ) { gchar *line; gps_user_data_t *gps_data = (gps_user_data_t *)w->user_data; switch(c) { case BABEL_DIAG_OUTPUT: line = (gchar *)data; gdk_threads_enter(); if (w->running) { gtk_label_set_text ( GTK_LABEL(w->status), _("Status: Working...") ); } gdk_threads_leave(); /* tells us the type of items that will follow */ if (strstr(line, "Xfer Wpt")) { gps_data->progress_label = gps_data->wp_label; gps_data->progress_type = WPT; } if (strstr(line, "Xfer Trk")) { gps_data->progress_label = gps_data->trk_label; gps_data->progress_type = TRK; } if (strstr(line, "Xfer Rte")) { gps_data->progress_label = gps_data->rte_label; gps_data->progress_type = RTE; } if (strstr(line, "PRDDAT")) { gchar **tokens = g_strsplit(line, " ", 0); gchar info[128]; int ilen = 0; int i; int n_tokens = 0; while (tokens[n_tokens]) n_tokens++; if (n_tokens > 8) { for (i=8; tokens[i] && ilen < sizeof(info)-2 && strcmp(tokens[i], "00"); i++) { guint ch; sscanf(tokens[i], "%x", &ch); info[ilen++] = ch; } info[ilen++] = 0; set_gps_info(info, w); } g_strfreev(tokens); } /* eg: "Unit:\teTrex Legend HCx Software Version 2.90\n" */ if (strstr(line, "Unit:")) { gchar **tokens = g_strsplit(line, "\t", 0); int n_tokens = 0; while (tokens[n_tokens]) n_tokens++; if (n_tokens > 1) { set_gps_info(tokens[1], w); } g_strfreev(tokens); } /* tells us how many items there will be */ if (strstr(line, "RECORD")) { int lsb, msb, cnt; if (strlen(line) > 20) { sscanf(line+17, "%x", &lsb); sscanf(line+20, "%x", &msb); cnt = lsb + msb * 256; set_total_count(cnt, w); gps_data->count = 0; } } if ( strstr(line, "WPTDAT") || strstr(line, "TRKHDR") || strstr(line, "TRKDAT") || strstr(line, "RTEHDR") || strstr(line, "RTEWPT") ) { gps_data->count++; set_current_count(gps_data->count, w); } break; case BABEL_DONE: break; default: break; } } void append_element (gpointer elem, gpointer user_data) { GtkComboBox *combo = GTK_COMBO_BOX (user_data); const gchar *text = ((BabelDevice*)elem)->label; gtk_combo_box_append_text (combo, text); } static gint find_entry = -1; static gint garmin_entry = -1; static void find_garmin (gpointer elem, gpointer user_data) { const gchar *name = ((BabelDevice*)elem)->name; find_entry++; if (!strcmp(name, "garmin")) { garmin_entry = find_entry; } } static void datasource_gps_add_setup_widgets ( GtkWidget *dialog, VikViewport *vvp, gpointer user_data ) { gps_user_data_t *w = (gps_user_data_t *)user_data; GtkTable *box, *data_type_box; w->proto_l = gtk_label_new (_("GPS Protocol:")); w->proto_b = GTK_COMBO_BOX(gtk_combo_box_new_text ()); g_list_foreach (a_babel_device_list, append_element, w->proto_b); // Maintain default to Garmin devices (assumed most popular/numerous device) if ( last_active < 0 ) { find_entry = -1; g_list_foreach (a_babel_device_list, find_garmin, NULL); if ( garmin_entry < 0 ) // Not found - so set it to the first entry last_active = 0; else // Found last_active = garmin_entry; } gtk_combo_box_set_active (w->proto_b, last_active); g_object_ref(w->proto_b); w->ser_l = gtk_label_new (_("Serial Port:")); w->ser_b = GTK_COMBO_BOX(gtk_combo_box_entry_new_text ()); #ifdef WINDOWS gtk_combo_box_append_text (w->ser_b, "com1"); #else /* Here just try to see if the device is available which gets passed onto gpsbabel List USB devices first as these will generally only be present if autogenerated by udev or similar User is still able to set their own free text entry */ if (g_access ("/dev/ttyUSB0", R_OK) == 0) gtk_combo_box_append_text (w->ser_b, "/dev/ttyUSB0"); if (g_access ("/dev/ttyUSB1", R_OK) == 0) gtk_combo_box_append_text (w->ser_b, "/dev/ttyUSB1"); if (g_access ("/dev/ttyS0", R_OK) == 0) gtk_combo_box_append_text (w->ser_b, "/dev/ttyS0"); if (g_access ("/dev/ttyS1", R_OK) == 0) gtk_combo_box_append_text (w->ser_b, "/dev/ttyS1"); #endif gtk_combo_box_append_text (w->ser_b, "usb:"); gtk_combo_box_set_active (w->ser_b, 0); g_object_ref(w->ser_b); w->off_request_l = gtk_label_new (_("Turn Off After Transfer\n(Garmin/NAViLink Only)")); w->off_request_b = GTK_CHECK_BUTTON ( gtk_check_button_new () ); w->get_tracks_l = gtk_label_new (_("Tracks:")); w->get_tracks_b = GTK_CHECK_BUTTON ( gtk_check_button_new () ); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(w->get_tracks_b), last_get_tracks); w->get_routes_l = gtk_label_new (_("Routes:")); w->get_routes_b = GTK_CHECK_BUTTON ( gtk_check_button_new () ); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(w->get_routes_b), last_get_routes); w->get_waypoints_l = gtk_label_new (_("Waypoints:")); w->get_waypoints_b = GTK_CHECK_BUTTON ( gtk_check_button_new () ); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(w->get_waypoints_b), last_get_waypoints); box = GTK_TABLE(gtk_table_new(2, 4, FALSE)); data_type_box = GTK_TABLE(gtk_table_new(4, 1, FALSE)); gtk_table_attach_defaults(box, GTK_WIDGET(w->proto_l), 0, 1, 0, 1); gtk_table_attach_defaults(box, GTK_WIDGET(w->proto_b), 1, 2, 0, 1); gtk_table_attach_defaults(box, GTK_WIDGET(w->ser_l), 0, 1, 1, 2); gtk_table_attach_defaults(box, GTK_WIDGET(w->ser_b), 1, 2, 1, 2); gtk_table_attach_defaults(data_type_box, GTK_WIDGET(w->get_tracks_l), 0, 1, 0, 1); gtk_table_attach_defaults(data_type_box, GTK_WIDGET(w->get_tracks_b), 1, 2, 0, 1); gtk_table_attach_defaults(data_type_box, GTK_WIDGET(w->get_routes_l), 2, 3, 0, 1); gtk_table_attach_defaults(data_type_box, GTK_WIDGET(w->get_routes_b), 3, 4, 0, 1); gtk_table_attach_defaults(data_type_box, GTK_WIDGET(w->get_waypoints_l), 4, 5, 0, 1); gtk_table_attach_defaults(data_type_box, GTK_WIDGET(w->get_waypoints_b), 5, 6, 0, 1); gtk_table_attach_defaults(box, GTK_WIDGET(data_type_box), 0, 2, 2, 3); gtk_table_attach_defaults(box, GTK_WIDGET(w->off_request_l), 0, 1, 3, 4); gtk_table_attach_defaults(box, GTK_WIDGET(w->off_request_b), 1, 3, 3, 4); gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(dialog)->vbox), GTK_WIDGET(box), FALSE, FALSE, 5 ); gtk_widget_show_all ( dialog ); } /** * datasource_gps_setup: * @dialog: The GTK dialog. The caller is responsible for managing the dialog creation/deletion * @xfer: The default type of items enabled for transfer, others disabled. * @xfer_all: When specified all items are enabled for transfer. * * Returns: A gpointer to the private structure for GPS progress/information widgets * Pass this pointer back into the other exposed datasource_gps_X functions */ gpointer datasource_gps_setup ( GtkWidget *dialog, vik_gps_xfer_type xfer, gboolean xfer_all ) { gps_user_data_t *w_gps = (gps_user_data_t *)datasource_gps_init_func(); datasource_gps_add_setup_widgets ( dialog, NULL, w_gps ); gboolean way = xfer_all; gboolean trk = xfer_all; gboolean rte = xfer_all; // Selectively turn bits on if ( !xfer_all ) { switch (xfer) { case WPT: way = TRUE; break; case RTE: rte = TRUE; break; default: trk = TRUE; break; } } // Apply gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON(w_gps->get_tracks_b), trk ); gtk_widget_set_sensitive ( GTK_WIDGET(w_gps->get_tracks_l), trk ); gtk_widget_set_sensitive ( GTK_WIDGET(w_gps->get_tracks_b), trk ); gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON(w_gps->get_routes_b), rte ); gtk_widget_set_sensitive ( GTK_WIDGET(w_gps->get_routes_l), rte ); gtk_widget_set_sensitive ( GTK_WIDGET(w_gps->get_routes_b), rte ); gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON(w_gps->get_waypoints_b), way ); gtk_widget_set_sensitive ( GTK_WIDGET(w_gps->get_waypoints_l), way ); gtk_widget_set_sensitive ( GTK_WIDGET(w_gps->get_waypoints_b), way ); return (gpointer)w_gps; } void datasource_gps_add_progress_widgets ( GtkWidget *dialog, gpointer user_data ) { GtkWidget *gpslabel, *verlabel, *idlabel, *wplabel, *trklabel, *rtelabel; gps_user_data_t *w_gps = (gps_user_data_t *)user_data; gpslabel = gtk_label_new (_("GPS device: N/A")); verlabel = gtk_label_new (""); idlabel = gtk_label_new (""); wplabel = gtk_label_new (""); trklabel = gtk_label_new (""); rtelabel = gtk_label_new (""); gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(dialog)->vbox), gpslabel, FALSE, FALSE, 5 ); gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(dialog)->vbox), wplabel, FALSE, FALSE, 5 ); gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(dialog)->vbox), trklabel, FALSE, FALSE, 5 ); gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(dialog)->vbox), rtelabel, FALSE, FALSE, 5 ); gtk_widget_show_all ( dialog ); w_gps->gps_label = gpslabel; w_gps->id_label = idlabel; w_gps->ver_label = verlabel; w_gps->progress_label = w_gps->wp_label = wplabel; w_gps->trk_label = trklabel; w_gps->rte_label = rtelabel; w_gps->total_count = -1; } viking-1.4.2/src/viktrwlayer.h0000644000175000017500000001023212175546146013262 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * Copyright (c) 2011, Rob Norris * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef _VIKING_TRWLAYER_H #define _VIKING_TRWLAYER_H #include "viklayer.h" #include "vikviewport.h" #include "vikwaypoint.h" #include "viktrack.h" #include "viklayerspanel.h" G_BEGIN_DECLS #define VIK_TRW_LAYER_TYPE (vik_trw_layer_get_type ()) #define VIK_TRW_LAYER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIK_TRW_LAYER_TYPE, VikTrwLayer)) #define VIK_TRW_LAYER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VIK_TRW_LAYER_TYPE, VikTrwLayerClass)) #define IS_VIK_TRW_LAYER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIK_TRW_LAYER_TYPE)) #define IS_VIK_TRW_LAYER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VIK_TRW_LAYER_TYPE)) enum { VIK_TRW_LAYER_SUBLAYER_TRACKS, VIK_TRW_LAYER_SUBLAYER_WAYPOINTS, VIK_TRW_LAYER_SUBLAYER_TRACK, VIK_TRW_LAYER_SUBLAYER_WAYPOINT, VIK_TRW_LAYER_SUBLAYER_ROUTES, VIK_TRW_LAYER_SUBLAYER_ROUTE }; typedef struct _VikTrwLayerClass VikTrwLayerClass; struct _VikTrwLayerClass { VikLayerClass object_class; }; GType vik_trw_layer_get_type (); typedef struct _VikTrwLayer VikTrwLayer; /* These are meant for use in file loaders (gpspoint.c, gpx.c, etc). * These copy the name, so you should free it if necessary. */ void vik_trw_layer_filein_add_waypoint ( VikTrwLayer *vtl, gchar *name, VikWaypoint *wp ); void vik_trw_layer_filein_add_track ( VikTrwLayer *vtl, gchar *name, VikTrack *tr ); gint vik_trw_layer_get_property_tracks_line_thickness ( VikTrwLayer *vtl ); void vik_trw_layer_add_waypoint ( VikTrwLayer *vtl, gchar *name, VikWaypoint *wp ); void vik_trw_layer_add_track ( VikTrwLayer *vtl, gchar *name, VikTrack *t ); void vik_trw_layer_add_route ( VikTrwLayer *vtl, gchar *name, VikTrack *t ); // Waypoint returned is the first one VikWaypoint *vik_trw_layer_get_waypoint ( VikTrwLayer *vtl, const gchar *name ); // Track returned is the first one VikTrack *vik_trw_layer_get_track ( VikTrwLayer *vtl, const gchar *name ); gboolean vik_trw_layer_delete_track ( VikTrwLayer *vtl, VikTrack *trk ); gboolean vik_trw_layer_delete_route ( VikTrwLayer *vtl, VikTrack *trk ); gboolean vik_trw_layer_auto_set_view ( VikTrwLayer *vtl, VikViewport *vvp ); gboolean vik_trw_layer_find_center ( VikTrwLayer *vtl, VikCoord *dest ); GHashTable *vik_trw_layer_get_tracks ( VikTrwLayer *l ); GHashTable *vik_trw_layer_get_routes ( VikTrwLayer *l ); GHashTable *vik_trw_layer_get_waypoints ( VikTrwLayer *l ); gboolean vik_trw_layer_new_waypoint ( VikTrwLayer *vtl, GtkWindow *w, const VikCoord *def_coord ); VikCoordMode vik_trw_layer_get_coord_mode ( VikTrwLayer *vtl ); gboolean vik_trw_layer_uniquify ( VikTrwLayer *vtl, VikLayersPanel *vlp ); void vik_trw_layer_delete_all_waypoints ( VikTrwLayer *vtl ); void vik_trw_layer_delete_all_tracks ( VikTrwLayer *vtl ); void vik_trw_layer_delete_all_routes ( VikTrwLayer *vtl ); void trw_layer_cancel_tps_of_track ( VikTrwLayer *vtl, VikTrack *trk ); /* Exposed Layer Interface function definitions */ // Intended only for use by other trw_layer subwindows void trw_layer_verify_thumbnails ( VikTrwLayer *vtl, GtkWidget *vp ); // Other functions only for use by other trw_layer subwindows gchar *trw_layer_new_unique_sublayer_name ( VikTrwLayer *vtl, gint sublayer_type, const gchar *name ); void trw_layer_update_treeview ( VikTrwLayer *vtl, VikTrack *trk, gpointer *trk_id ); G_END_DECLS #endif viking-1.4.2/src/gpspoint.c0000644000175000017500000004363712175546146012554 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * Copyright (C) 2012, Rob Norris * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef HAVE_MATH_H #include #endif #include "viking.h" #include #ifdef HAVE_STRING_H #include #endif #include /* strtod */ typedef struct { FILE *f; gboolean is_route; } TP_write_info_type; static void a_gpspoint_write_track ( const gpointer id, const VikTrack *t, FILE *f ); static void a_gpspoint_write_trackpoint ( VikTrackpoint *tp, TP_write_info_type *write_info ); static void a_gpspoint_write_waypoint ( const gpointer id, const VikWaypoint *wp, FILE *f ); /* outline for file gpspoint.c reading file: take a line. get first tag, if not type, skip it. if type, record type. if waypoint list, etc move on. if track, make a new track, make it current track, add it, etc. if waypoint, read on and store to the waypoint. if trackpoint, make trackpoint, store to current track (error / skip if none) */ /* Thanks to etrex-cache's gpsbabel's gpspoint.c for starting me off! */ static char line_buffer[2048]; #define GPSPOINT_TYPE_NONE 0 #define GPSPOINT_TYPE_WAYPOINT 1 #define GPSPOINT_TYPE_TRACKPOINT 2 #define GPSPOINT_TYPE_ROUTEPOINT 3 #define GPSPOINT_TYPE_TRACK 4 #define GPSPOINT_TYPE_ROUTE 5 static VikTrack *current_track; /* pointer to pointer to first GList */ static gint line_type = GPSPOINT_TYPE_NONE; static struct LatLon line_latlon; static gchar *line_name; static gchar *line_comment; static gchar *line_description; static gchar *line_color; static gchar *line_image; static gchar *line_symbol; static gboolean line_newsegment = FALSE; static gboolean line_has_timestamp = FALSE; static time_t line_timestamp = 0; static gdouble line_altitude = VIK_DEFAULT_ALTITUDE; static gboolean line_visible = TRUE; static gboolean line_extended = FALSE; static gdouble line_speed = NAN; static gdouble line_course = NAN; static gint line_sat = 0; static gint line_fix = 0; /* other possible properties go here */ static void gpspoint_process_tag ( const gchar *tag, gint len ); static void gpspoint_process_key_and_value ( const gchar *key, gint key_len, const gchar *value, gint value_len ); static gchar *slashdup(const gchar *str) { guint16 len = strlen(str); guint16 need_bs_count, i, j; gchar *rv; for ( i = 0, need_bs_count = 0; i < len; i++ ) if ( str[i] == '\\' || str[i] == '"' ) need_bs_count++; rv = g_malloc ( (len+need_bs_count+1) * sizeof(gchar) ); for ( i = 0, j = 0; i < len; i++, j++ ) { if ( str[i] == '\\' || str[i] == '"' ) rv[j++] = '\\'; rv[j] = str[i]; } rv[j] = '\0'; return rv; } static gchar *deslashndup ( const gchar *str, guint16 len ) { guint16 i,j, bs_count, new_len; gboolean backslash = FALSE; gchar *rv; if ( len < 1 ) return NULL; for ( i = 0, bs_count = 0; i < len; i++ ) if ( str[i] == '\\' ) { bs_count++; i++; } if ( str[i-1] == '\\' && (len == 1 || str[i-2] != '\\') ) bs_count--; new_len = len - bs_count; rv = g_malloc ( (new_len+1) * sizeof(gchar) ); for ( i = 0, j = 0; i < len && j < new_len; i++ ) if ( str[i] == '\\' && !backslash ) backslash = TRUE; else { rv[j++] = str[i]; backslash = FALSE; } rv[new_len] = '\0'; return rv; } /* * Returns whether file read was a success * No obvious way to test for a 'gpspoint' file, * thus set a flag if any actual tag found during processing of the file */ gboolean a_gpspoint_read_file(VikTrwLayer *trw, FILE *f ) { VikCoordMode coord_mode = vik_trw_layer_get_coord_mode ( trw ); gchar *tag_start, *tag_end; g_assert ( f != NULL && trw != NULL ); line_type = 0; line_timestamp = 0; line_newsegment = FALSE; line_image = NULL; line_symbol = NULL; current_track = NULL; gboolean have_read_something = FALSE; while (fgets(line_buffer, 2048, f)) { gboolean inside_quote = 0; gboolean backslash = 0; line_buffer[strlen(line_buffer)-1] = '\0'; /* chop off newline */ /* for gpspoint files wrapped inside */ if ( strlen(line_buffer) >= 13 && strncmp ( line_buffer, "~EndLayerData", 13 ) == 0 ) { // Even just a blank TRW is ok when in a .vik file have_read_something = TRUE; break; } /* each line: nullify stuff, make thing if nes, free name if ness */ tag_start = line_buffer; for (;;) { /* my addition: find first non-whitespace character. if the null, skip line. */ while (*tag_start != '\0' && isspace(*tag_start)) tag_start++; if (tag_start == '\0') break; if (*tag_start == '#') break; tag_end = tag_start; if (*tag_end == '"') inside_quote = !inside_quote; while (*tag_end != '\0' && (!isspace(*tag_end) || inside_quote)) { tag_end++; if (*tag_end == '\\' && !backslash) backslash = TRUE; else if (backslash) backslash = FALSE; else if (*tag_end == '"') inside_quote = !inside_quote; } gpspoint_process_tag ( tag_start, tag_end - tag_start ); if (*tag_end == '\0' ) break; else tag_start = tag_end+1; } if (line_type == GPSPOINT_TYPE_WAYPOINT && line_name) { have_read_something = TRUE; VikWaypoint *wp = vik_waypoint_new(); wp->visible = line_visible; wp->altitude = line_altitude; vik_coord_load_from_latlon ( &(wp->coord), coord_mode, &line_latlon ); vik_trw_layer_filein_add_waypoint ( trw, line_name, wp ); g_free ( line_name ); line_name = NULL; if ( line_comment ) vik_waypoint_set_comment ( wp, line_comment ); if ( line_description ) vik_waypoint_set_description ( wp, line_description ); if ( line_image ) vik_waypoint_set_image ( wp, line_image ); if ( line_symbol ) vik_waypoint_set_symbol ( wp, line_symbol ); } else if ((line_type == GPSPOINT_TYPE_TRACK || line_type == GPSPOINT_TYPE_ROUTE) && line_name) { have_read_something = TRUE; VikTrack *pl = vik_track_new(); /* Thanks to Peter Jones for this Fix */ if (!line_name) line_name = g_strdup("UNK"); pl->visible = line_visible; pl->is_route = (line_type == GPSPOINT_TYPE_ROUTE); if ( line_comment ) vik_track_set_comment ( pl, line_comment ); if ( line_description ) vik_track_set_description ( pl, line_description ); if ( line_color ) { if ( gdk_color_parse ( line_color, &(pl->color) ) ) pl->has_color = TRUE; } pl->trackpoints = NULL; vik_trw_layer_filein_add_track ( trw, line_name, pl ); g_free ( line_name ); line_name = NULL; current_track = pl; } else if ((line_type == GPSPOINT_TYPE_TRACKPOINT || line_type == GPSPOINT_TYPE_ROUTEPOINT) && current_track) { have_read_something = TRUE; VikTrackpoint *tp = vik_trackpoint_new(); vik_coord_load_from_latlon ( &(tp->coord), coord_mode, &line_latlon ); tp->newsegment = line_newsegment; tp->has_timestamp = line_has_timestamp; tp->timestamp = line_timestamp; tp->altitude = line_altitude; if (line_extended) { tp->speed = line_speed; tp->course = line_course; tp->nsats = line_sat; tp->fix_mode = line_fix; } current_track->trackpoints = g_list_append ( current_track->trackpoints, tp ); } if (line_name) g_free ( line_name ); line_name = NULL; if (line_comment) g_free ( line_comment ); if (line_description) g_free ( line_description ); if (line_color) g_free ( line_color ); if (line_image) g_free ( line_image ); if (line_symbol) g_free ( line_symbol ); line_comment = NULL; line_description = NULL; line_color = NULL; line_image = NULL; line_symbol = NULL; line_type = GPSPOINT_TYPE_NONE; line_newsegment = FALSE; line_has_timestamp = FALSE; line_timestamp = 0; line_altitude = VIK_DEFAULT_ALTITUDE; line_visible = TRUE; line_symbol = NULL; line_extended = FALSE; line_speed = NAN; line_course = NAN; line_sat = 0; line_fix = 0; } return have_read_something; } /* Tag will be of a few defined forms: ^[:alpha:]*=".*"$ ^[:alpha:]*=.*$ So we must determine end of tag name, start of value, end of value. */ static void gpspoint_process_tag ( const gchar *tag, gint len ) { const gchar *key_end, *value_start, *value_end; /* Searching for key end */ key_end = tag; while (++key_end - tag < len) if (*key_end == '=') break; if (key_end - tag == len) return; /* no good */ if (key_end - tag == len + 1) value_start = value_end = 0; /* size = 0 */ else { value_start = key_end + 1; /* equal_sign plus one */ if (*value_start == '"') { value_start++; if (*value_start == '"') value_start = value_end = 0; /* size = 0 */ else { if (*(tag+len-1) == '"') value_end = tag + len - 1; else return; /* bogus */ } } else value_end = tag + len; /* value start really IS value start. */ gpspoint_process_key_and_value(tag, key_end - tag, value_start, value_end - value_start); } } /* value = NULL for none */ static void gpspoint_process_key_and_value ( const gchar *key, gint key_len, const gchar *value, gint value_len ) { if (key_len == 4 && strncasecmp( key, "type", key_len ) == 0 ) { if (value == NULL) line_type = GPSPOINT_TYPE_NONE; else if (value_len == 5 && strncasecmp( value, "track", value_len ) == 0 ) line_type = GPSPOINT_TYPE_TRACK; else if (value_len == 10 && strncasecmp( value, "trackpoint", value_len ) == 0 ) line_type = GPSPOINT_TYPE_TRACKPOINT; else if (value_len == 8 && strncasecmp( value, "waypoint", value_len ) == 0 ) line_type = GPSPOINT_TYPE_WAYPOINT; else if (value_len == 5 && strncasecmp( value, "route", value_len ) == 0 ) line_type = GPSPOINT_TYPE_ROUTE; else if (value_len == 10 && strncasecmp( value, "routepoint", value_len ) == 0 ) line_type = GPSPOINT_TYPE_ROUTEPOINT; else /* all others are ignored */ line_type = GPSPOINT_TYPE_NONE; } else if (key_len == 4 && strncasecmp( key, "name", key_len ) == 0 && value != NULL) { if (line_name == NULL) { line_name = deslashndup ( value, value_len ); } } else if (key_len == 7 && strncasecmp( key, "comment", key_len ) == 0 && value != NULL) { if (line_comment == NULL) line_comment = deslashndup ( value, value_len ); } else if (key_len == 11 && strncasecmp( key, "description", key_len ) == 0 && value != NULL) { if (line_description == NULL) line_description = deslashndup ( value, value_len ); } else if (key_len == 5 && strncasecmp( key, "color", key_len ) == 0 && value != NULL) { if (line_color == NULL) line_color = deslashndup ( value, value_len ); } else if (key_len == 5 && strncasecmp( key, "image", key_len ) == 0 && value != NULL) { if (line_image == NULL) line_image = deslashndup ( value, value_len ); } else if (key_len == 8 && strncasecmp( key, "latitude", key_len ) == 0 && value != NULL) { line_latlon.lat = g_ascii_strtod(value, NULL); } else if (key_len == 9 && strncasecmp( key, "longitude", key_len ) == 0 && value != NULL) { line_latlon.lon = g_ascii_strtod(value, NULL); } else if (key_len == 8 && strncasecmp( key, "altitude", key_len ) == 0 && value != NULL) { line_altitude = g_ascii_strtod(value, NULL); } else if (key_len == 7 && strncasecmp( key, "visible", key_len ) == 0 && value[0] != 'y' && value[0] != 'Y' && value[0] != 't' && value[0] != 'T') { line_visible = FALSE; } else if (key_len == 6 && strncasecmp( key, "symbol", key_len ) == 0 && value != NULL) { line_symbol = g_strndup ( value, value_len ); } else if (key_len == 8 && strncasecmp( key, "unixtime", key_len ) == 0 && value != NULL) { line_timestamp = g_ascii_strtod(value, NULL); if ( line_timestamp != 0x80000000 ) line_has_timestamp = TRUE; } else if (key_len == 10 && strncasecmp( key, "newsegment", key_len ) == 0 && value != NULL) { line_newsegment = TRUE; } else if (key_len == 8 && strncasecmp( key, "extended", key_len ) == 0 && value != NULL) { line_extended = TRUE; } else if (key_len == 5 && strncasecmp( key, "speed", key_len ) == 0 && value != NULL) { line_speed = g_ascii_strtod(value, NULL); } else if (key_len == 6 && strncasecmp( key, "course", key_len ) == 0 && value != NULL) { line_course = g_ascii_strtod(value, NULL); } else if (key_len == 3 && strncasecmp( key, "sat", key_len ) == 0 && value != NULL) { line_sat = atoi(value); } else if (key_len == 3 && strncasecmp( key, "fix", key_len ) == 0 && value != NULL) { line_fix = atoi(value); } } static void a_gpspoint_write_waypoint ( const gpointer id, const VikWaypoint *wp, FILE *f ) { static struct LatLon ll; gchar *s_lat, *s_lon; // Sanity clause if ( wp && !(wp->name) ) { return; } vik_coord_to_latlon ( &(wp->coord), &ll ); s_lat = a_coords_dtostr(ll.lat); s_lon = a_coords_dtostr(ll.lon); gchar *tmp_name = slashdup(wp->name); fprintf ( f, "type=\"waypoint\" latitude=\"%s\" longitude=\"%s\" name=\"%s\"", s_lat, s_lon, tmp_name ); g_free ( tmp_name ); g_free ( s_lat ); g_free ( s_lon ); if ( wp->altitude != VIK_DEFAULT_ALTITUDE ) { gchar *s_alt = a_coords_dtostr(wp->altitude); fprintf ( f, " altitude=\"%s\"", s_alt ); g_free(s_alt); } if ( wp->comment ) { gchar *tmp_comment = slashdup(wp->comment); fprintf ( f, " comment=\"%s\"", tmp_comment ); g_free ( tmp_comment ); } if ( wp->description ) { gchar *tmp_description = slashdup(wp->description); fprintf ( f, " description=\"%s\"", tmp_description ); g_free ( tmp_description ); } if ( wp->image ) { gchar *tmp_image = slashdup(wp->image); fprintf ( f, " image=\"%s\"", tmp_image ); g_free ( tmp_image ); } if ( wp->symbol ) { fprintf ( f, " symbol=\"%s\"", wp->symbol ); } if ( ! wp->visible ) fprintf ( f, " visible=\"n\"" ); fprintf ( f, "\n" ); } static void a_gpspoint_write_trackpoint ( VikTrackpoint *tp, TP_write_info_type *write_info ) { static struct LatLon ll; gchar *s_lat, *s_lon; vik_coord_to_latlon ( &(tp->coord), &ll ); FILE *f = write_info->f; /* TODO: modify a_coords_dtostr() to accept (optional) buffer * instead of doing malloc/free everytime */ s_lat = a_coords_dtostr(ll.lat); s_lon = a_coords_dtostr(ll.lon); fprintf ( f, "type=\"%spoint\" latitude=\"%s\" longitude=\"%s\"", write_info->is_route ? "route" : "track", s_lat, s_lon ); g_free ( s_lat ); g_free ( s_lon ); if ( tp->altitude != VIK_DEFAULT_ALTITUDE ) { gchar *s_alt = a_coords_dtostr(tp->altitude); fprintf ( f, " altitude=\"%s\"", s_alt ); g_free(s_alt); } if ( tp->has_timestamp ) fprintf ( f, " unixtime=\"%ld\"", tp->timestamp ); if ( tp->newsegment ) fprintf ( f, " newsegment=\"yes\"" ); if (!isnan(tp->speed) || !isnan(tp->course) || tp->nsats > 0) { fprintf ( f, " extended=\"yes\"" ); if (!isnan(tp->speed)) { gchar *s_speed = a_coords_dtostr(tp->speed); fprintf ( f, " speed=\"%s\"", s_speed ); g_free(s_speed); } if (!isnan(tp->course)) { gchar *s_course = a_coords_dtostr(tp->course); fprintf ( f, " course=\"%s\"", s_course ); g_free(s_course); } if (tp->nsats > 0) fprintf ( f, " sat=\"%d\"", tp->nsats ); if (tp->fix_mode > 0) fprintf ( f, " fix=\"%d\"", tp->fix_mode ); } fprintf ( f, "\n" ); } static void a_gpspoint_write_track ( const gpointer id, const VikTrack *trk, FILE *f ) { // Sanity clauses if ( !trk ) return; if ( !(trk->name) ) return; gchar *tmp_name = slashdup(trk->name); fprintf ( f, "type=\"%s\" name=\"%s\"", trk->is_route ? "route" : "track", tmp_name ); g_free ( tmp_name ); if ( trk->comment ) { gchar *tmp = slashdup(trk->comment); fprintf ( f, " comment=\"%s\"", tmp ); g_free ( tmp ); } if ( trk->description ) { gchar *tmp = slashdup(trk->description); fprintf ( f, " description=\"%s\"", tmp ); g_free ( tmp ); } if ( trk->has_color ) { fprintf ( f, " color=#%.2x%.2x%.2x", (int)(trk->color.red/256),(int)(trk->color.green/256),(int)(trk->color.blue/256)); } if ( ! trk->visible ) { fprintf ( f, " visible=\"n\"" ); } fprintf ( f, "\n" ); TP_write_info_type tp_write_info = { f, trk->is_route }; g_list_foreach ( trk->trackpoints, (GFunc) a_gpspoint_write_trackpoint, &tp_write_info ); fprintf ( f, "type=\"%send\"\n", trk->is_route ? "route" : "track" ); } void a_gpspoint_write_file ( VikTrwLayer *trw, FILE *f ) { GHashTable *tracks = vik_trw_layer_get_tracks ( trw ); GHashTable *routes = vik_trw_layer_get_routes ( trw ); GHashTable *waypoints = vik_trw_layer_get_waypoints ( trw ); fprintf ( f, "type=\"waypointlist\"\n" ); g_hash_table_foreach ( waypoints, (GHFunc) a_gpspoint_write_waypoint, f ); fprintf ( f, "type=\"waypointlistend\"\n" ); g_hash_table_foreach ( tracks, (GHFunc) a_gpspoint_write_track, f ); g_hash_table_foreach ( routes, (GHFunc) a_gpspoint_write_track, f ); } viking-1.4.2/src/preferences.c0000644000175000017500000002604112175546146013200 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2007, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include #include #include #include #include #include "preferences.h" #include "dir.h" #include "file.h" // TODO: register_group // TODO: STRING_LIST // TODO: share code in file reading // TODO: remove hackaround in show_window // TODO: move typeddata to uibuilder, make it more used & general, it's a "prettier" solution methinks // maybe this wasn't such a good idea... #define VIKING_PREFS_FILE "viking.prefs" #define TEST_BOOLEAN(str) (! ((str)[0] == '\0' || (str)[0] == '0' || (str)[0] == 'n' || (str)[0] == 'N' || (str)[0] == 'f' || (str)[0] == 'F') ) static GPtrArray *params; static GHashTable *values; gboolean loaded; /************ groups *********/ static GPtrArray *groups_names; static GHashTable *groups_keys_to_indices; // contains gint, NULL (0) is not found, instead 1 is used for 0, 2 for 1, etc. static void preferences_groups_init() { groups_names = g_ptr_array_new(); groups_keys_to_indices = g_hash_table_new_full ( g_str_hash, g_str_equal, g_free, NULL ); } static void preferences_groups_uninit() { g_ptr_array_free ( groups_names, TRUE ); g_hash_table_destroy ( groups_keys_to_indices ); } void a_preferences_register_group ( const gchar *key, const gchar *name ) { if ( g_hash_table_lookup ( groups_keys_to_indices, key ) ) g_critical("Duplicate preferences group keys"); else { g_ptr_array_add ( groups_names, g_strdup(name) ); g_hash_table_insert ( groups_keys_to_indices, g_strdup(key), GINT_TO_POINTER ( (gint) groups_names->len ) ); /* index + 1 */ } } /* returns -1 if not found. */ static gint16 preferences_groups_key_to_index( const gchar *key ) { gint index = GPOINTER_TO_INT ( g_hash_table_lookup ( groups_keys_to_indices, key ) ); if ( ! index ) return VIK_LAYER_GROUP_NONE; /* which should be -1 anyway */ return (gint16) (index - 1); } /*****************************/ /************/ typedef struct { VikLayerParamData data; guint8 type; } VikLayerTypedParamData; static void layer_typed_param_data_free(gpointer p) { VikLayerTypedParamData *val = (VikLayerTypedParamData *)p; switch ( val->type ) { case VIK_LAYER_PARAM_STRING: if ( val->data.s ) g_free ( (gpointer)val->data.s ); break; /* TODO: APPLICABLE TO US? NOTE: string layer works auniquely: data.sl should NOT be free'd when * the internals call get_param -- i.e. it should be managed w/in the layer. * The value passed by the internals into set_param should also be managed * by the layer -- i.e. free'd by the layer. */ case VIK_LAYER_PARAM_STRING_LIST: g_critical ( "Param strings not implemented in preferences"); //fake it break; } g_free ( val ); } static VikLayerTypedParamData *layer_typed_param_data_copy_from_data(guint8 type, VikLayerParamData val) { VikLayerTypedParamData *newval = g_new(VikLayerTypedParamData,1); newval->data = val; newval->type = type; switch ( newval->type ) { case VIK_LAYER_PARAM_STRING: { gchar *s = g_strdup(newval->data.s); newval->data.s = s; break; } /* TODO: APPLICABLE TO US? NOTE: string layer works auniquely: data.sl should NOT be free'd when * the internals call get_param -- i.e. it should be managed w/in the layer. * The value passed by the internals into set_param should also be managed * by the layer -- i.e. free'd by the layer. */ case VIK_LAYER_PARAM_STRING_LIST: g_critical ( "Param strings not implemented in preferences"); //fake it break; } return newval; } /* TODO: share this code with file.c */ static VikLayerTypedParamData *layer_data_typed_param_copy_from_string ( guint8 type, const gchar *str ) { g_assert ( type != VIK_LAYER_PARAM_STRING_LIST ); VikLayerTypedParamData *rv = g_new(VikLayerTypedParamData,1); rv->type = type; switch ( type ) { case VIK_LAYER_PARAM_DOUBLE: rv->data.d = strtod(str, NULL); break; case VIK_LAYER_PARAM_UINT: rv->data.u = strtoul(str, NULL, 10); break; case VIK_LAYER_PARAM_INT: rv->data.i = strtol(str, NULL, 10); break; case VIK_LAYER_PARAM_BOOLEAN: rv->data.b = TEST_BOOLEAN(str); break; case VIK_LAYER_PARAM_COLOR: memset(&(rv->data.c), 0, sizeof(rv->data.c)); /* default: black */ gdk_color_parse ( str, &(rv->data.c) ); break; /* STRING or STRING_LIST -- if STRING_LIST, just set param to add a STRING */ default: { gchar *s = g_strdup(str); rv->data.s = s; } } return rv; } /************/ /* MAKES A COPY OF THE KEY!!! */ static gboolean preferences_load_parse_param(gchar *buf, gchar **key, gchar **val ) { gchar *eq_pos; gint len; // comments, special characters in viking file format if ( buf == NULL || buf[0] == '\0' || buf[0] == '~' || buf[0] == '=' || buf[0] == '#' ) return FALSE; eq_pos = strchr ( buf, '=' ); if ( ! eq_pos ) return FALSE; *key = g_strndup ( buf, eq_pos - buf ); *val = eq_pos + 1; len = strlen(*val); if ( len > 0 ) if ( (*val)[len - 1] == '\n' ) (*val) [ len - 1 ] = '\0'; /* cut off newline */ return TRUE; } static gboolean preferences_load_from_file() { gchar *fn = g_build_filename(a_get_viking_dir(), VIKING_PREFS_FILE, NULL); FILE *f = g_fopen(fn, "r"); g_free ( fn ); if ( f ) { gchar buf[4096]; gchar *key, *val; VikLayerTypedParamData *oldval, *newval; while ( ! feof (f) ) { if (fgets(buf,sizeof(buf),f) == NULL) break; if ( preferences_load_parse_param(buf, &key, &val ) ) { // if it's not in there, ignore it oldval = g_hash_table_lookup ( values, key ); if ( ! oldval ) { g_free(key); continue; } // otherwise change it (you know the type!) // if it's a string list do some funky stuff ... yuck... not yet. if ( oldval->type == VIK_LAYER_PARAM_STRING_LIST ) g_critical ( "Param strings not implemented in preferences"); // fake it newval = layer_data_typed_param_copy_from_string ( oldval->type, val ); g_hash_table_insert ( values, key, newval ); g_free(key); // change value } } fclose(f); f = NULL; return TRUE; } return FALSE; } static void preferences_run_setparam ( gpointer notused, guint16 i, VikLayerParamData data, VikLayerParam *params ) { if ( params[i].type == VIK_LAYER_PARAM_STRING_LIST ) g_critical ( "Param strings not implemented in preferences"); //fake it g_hash_table_insert ( values, (gchar *)(params[i].name), layer_typed_param_data_copy_from_data(params[i].type, data) ); } /* Allow preferences to be manipulated externally */ void a_preferences_run_setparam ( VikLayerParamData data, VikLayerParam *params ) { preferences_run_setparam (NULL, 0, data, params); } static VikLayerParamData preferences_run_getparam ( gpointer notused, guint16 i, gboolean notused2 ) { VikLayerTypedParamData *val = (VikLayerTypedParamData *) g_hash_table_lookup ( values, ((VikLayerParam *)g_ptr_array_index(params,i))->name ); g_assert ( val != NULL ); if ( val->type == VIK_LAYER_PARAM_STRING_LIST ) g_critical ( "Param strings not implemented in preferences"); //fake it return val->data; } /* TRUE on success */ gboolean a_preferences_save_to_file() { gchar *fn = g_build_filename(a_get_viking_dir(), VIKING_PREFS_FILE, NULL); // TODO: error checking FILE *f = g_fopen(fn, "w"); /* Since preferences files saves OSM login credentials, * it'll be better to store it in secret. */ g_chmod(fn, 0600); g_free ( fn ); if ( f ) { VikLayerParam *param; VikLayerTypedParamData *val; int i; for ( i = 0; i < params->len; i++ ) { param = (VikLayerParam *) g_ptr_array_index(params,i); val = (VikLayerTypedParamData *) g_hash_table_lookup ( values, param->name ); g_assert ( val != NULL ); file_write_layer_param ( f, param->name, val->type, val->data ); } fclose(f); f = NULL; return TRUE; } return FALSE; } void a_preferences_show_window(GtkWindow *parent) { //VikLayerParamData *a_uibuilder_run_dialog ( GtkWindow *parent, VikLayerParam \*params, // guint16 params_count, gchar **groups, guint8 groups_count, // VikLayerParamData *params_defaults ) // TODO: THIS IS A MAJOR HACKAROUND, but ok when we have only a couple preferences. gint params_count = params->len; VikLayerParam *contiguous_params = g_new(VikLayerParam,params_count); int i; for ( i = 0; i < params->len; i++ ) { contiguous_params[i] = *((VikLayerParam*)(g_ptr_array_index(params,i))); } loaded = TRUE; preferences_load_from_file(); if ( a_uibuilder_properties_factory ( _("Preferences"), parent, contiguous_params, params_count, (gchar **) groups_names->pdata, groups_names->len, // groups, groups_count, // groups? what groups?! (gboolean (*) (gpointer,guint16,VikLayerParamData,gpointer,gboolean)) preferences_run_setparam, NULL /* not used */, contiguous_params, preferences_run_getparam, NULL /* not used */ ) ) { a_preferences_save_to_file(); } g_free ( contiguous_params ); } void a_preferences_register(VikLayerParam *pref, VikLayerParamData defaultval, const gchar *group_key ) { /* copy value */ VikLayerParam *newpref = g_new(VikLayerParam,1); *newpref = *pref; VikLayerTypedParamData *newval = layer_typed_param_data_copy_from_data(pref->type, defaultval); if ( group_key ) newpref->group = preferences_groups_key_to_index ( group_key ); g_ptr_array_add ( params, newpref ); g_hash_table_insert ( values, (gchar *)pref->name, newval ); } void a_preferences_init() { preferences_groups_init(); /* not copied */ params = g_ptr_array_new (); /* key not copied (same ptr as in pref), actual param data yes */ values = g_hash_table_new_full ( g_str_hash, g_str_equal, NULL, layer_typed_param_data_free); loaded = FALSE; } void a_preferences_uninit() { preferences_groups_uninit(); g_ptr_array_free ( params, TRUE ); g_hash_table_destroy ( values ); } VikLayerParamData *a_preferences_get(const gchar *key) { if ( ! loaded ) { /* since we can't load the file in a_preferences_init (no params registered yet), * do it once before we get the first key. */ preferences_load_from_file(); loaded = TRUE; } return g_hash_table_lookup ( values, key ); } viking-1.4.2/src/vikwebtoolbounds.c0000644000175000017500000001366512122673673014305 00000000000000/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2011, Rob Norris * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "vikwebtoolbounds.h" #include #include #include #include "globals.h" static GObjectClass *parent_class; static void webtool_bounds_finalize ( GObject *gob ); static gchar *webtool_bounds_get_url ( VikWebtool *vw, VikWindow *vwindow ); typedef struct _VikWebtoolBoundsPrivate VikWebtoolBoundsPrivate; struct _VikWebtoolBoundsPrivate { gchar *url; }; #define WEBTOOL_BOUNDS_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), \ VIK_WEBTOOL_BOUNDS_TYPE, \ VikWebtoolBoundsPrivate)) G_DEFINE_TYPE (VikWebtoolBounds, vik_webtool_bounds, VIK_WEBTOOL_TYPE) enum { PROP_0, PROP_URL, }; static void webtool_bounds_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { VikWebtoolBounds *self = VIK_WEBTOOL_BOUNDS (object); VikWebtoolBoundsPrivate *priv = WEBTOOL_BOUNDS_GET_PRIVATE (self); switch (property_id) { case PROP_URL: g_free (priv->url); priv->url = g_value_dup_string (value); g_debug ("VikWebtoolBounds.url: %s", priv->url); break; default: /* We don't have any other property... */ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void webtool_bounds_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { VikWebtoolBounds *self = VIK_WEBTOOL_BOUNDS (object); VikWebtoolBoundsPrivate *priv = WEBTOOL_BOUNDS_GET_PRIVATE (self); switch (property_id) { case PROP_URL: g_value_set_string (value, priv->url); break; default: /* We don't have any other property... */ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void vik_webtool_bounds_class_init ( VikWebtoolBoundsClass *klass ) { GObjectClass *gobject_class; VikWebtoolClass *base_class; GParamSpec *pspec; gobject_class = G_OBJECT_CLASS (klass); gobject_class->finalize = webtool_bounds_finalize; gobject_class->set_property = webtool_bounds_set_property; gobject_class->get_property = webtool_bounds_get_property; pspec = g_param_spec_string ("url", "Template Url", "Set the template url", VIKING_URL /* default value */, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE); g_object_class_install_property (gobject_class, PROP_URL, pspec); parent_class = g_type_class_peek_parent (klass); base_class = VIK_WEBTOOL_CLASS ( klass ); base_class->get_url = webtool_bounds_get_url; //klass->mpp_to_zoom = webtool_bounds_mpp_to_zoom; g_type_class_add_private (klass, sizeof (VikWebtoolBoundsPrivate)); } VikWebtoolBounds *vik_webtool_bounds_new () { return VIK_WEBTOOL_BOUNDS ( g_object_new ( VIK_WEBTOOL_BOUNDS_TYPE, NULL ) ); } VikWebtoolBounds *vik_webtool_bounds_new_with_members ( const gchar *label, const gchar *url ) { VikWebtoolBounds *result = VIK_WEBTOOL_BOUNDS ( g_object_new ( VIK_WEBTOOL_BOUNDS_TYPE, "label", label, "url", url, NULL ) ); return result; } static void vik_webtool_bounds_init ( VikWebtoolBounds *self ) { VikWebtoolBoundsPrivate *priv = WEBTOOL_BOUNDS_GET_PRIVATE (self); priv->url = NULL; } static void webtool_bounds_finalize ( GObject *gob ) { VikWebtoolBoundsPrivate *priv = WEBTOOL_BOUNDS_GET_PRIVATE ( gob ); g_free ( priv->url ); priv->url = NULL; G_OBJECT_CLASS(parent_class)->finalize(gob); } static gchar *webtool_bounds_get_url ( VikWebtool *self, VikWindow *vwindow ) { VikWebtoolBoundsPrivate *priv = NULL; VikViewport *viewport = NULL; priv = WEBTOOL_BOUNDS_GET_PRIVATE (self); viewport = vik_window_viewport ( vwindow ); // Get top left and bottom right lat/lon pairs from the viewport gdouble min_lat, max_lat, min_lon, max_lon; gchar sminlon[G_ASCII_DTOSTR_BUF_SIZE]; gchar smaxlon[G_ASCII_DTOSTR_BUF_SIZE]; gchar sminlat[G_ASCII_DTOSTR_BUF_SIZE]; gchar smaxlat[G_ASCII_DTOSTR_BUF_SIZE]; vik_viewport_get_min_max_lat_lon ( viewport, &min_lat, &max_lat, &min_lon, &max_lon ); // Cannot simply use g_strdup_printf and gdouble due to locale. // As we compute an URL, we have to think in C locale. g_ascii_dtostr (sminlon, G_ASCII_DTOSTR_BUF_SIZE, min_lon); g_ascii_dtostr (smaxlon, G_ASCII_DTOSTR_BUF_SIZE, max_lon); g_ascii_dtostr (sminlat, G_ASCII_DTOSTR_BUF_SIZE, min_lat); g_ascii_dtostr (smaxlat, G_ASCII_DTOSTR_BUF_SIZE, max_lat); return g_strdup_printf ( priv->url, sminlon, smaxlon, sminlat, smaxlat ); } viking-1.4.2/src/osm-traces.c0000644000175000017500000004067712175546146012767 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2007, Guilhem Bonnefille * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include #include #include #include #include #include #include "viking.h" #include "viktrwlayer.h" #include "osm-traces.h" #include "gpx.h" #include "background.h" #include "preferences.h" /* params will be osm_traces.username, osm_traces.password */ /* we have to make sure these don't collide. */ #define VIKING_OSM_TRACES_PARAMS_GROUP_KEY "osm_traces" #define VIKING_OSM_TRACES_PARAMS_NAMESPACE "osm_traces." /** * Login to use for OSM uploading. */ static gchar *user = NULL; /** * Password to use for OSM uploading. */ static gchar *password = NULL; /** * Mutex to protect auth. token */ static GMutex *login_mutex = NULL; /** * Different type of trace visibility. */ typedef struct _OsmTraceVis_t { const gchar *combostr; const gchar *apistr; } OsmTraceVis_t; static const OsmTraceVis_t OsmTraceVis[] = { { N_("Identifiable (public w/ timestamps)"), "identifiable" }, { N_("Trackable (private w/ timestamps)"), "trackable" }, { N_("Public"), "public" }, { N_("Private"), "private" }, { NULL, NULL }, }; /** * Struct hosting needed info. */ typedef struct _OsmTracesInfo { gchar *name; gchar *description; gchar *tags; const OsmTraceVis_t *vistype; VikTrwLayer *vtl; VikTrack *trk; } OsmTracesInfo; static VikLayerParam prefs[] = { { VIKING_OSM_TRACES_PARAMS_NAMESPACE "username", VIK_LAYER_PARAM_STRING, VIK_LAYER_GROUP_NONE, N_("OSM username:"), VIK_LAYER_WIDGET_ENTRY, NULL, NULL, NULL }, { VIKING_OSM_TRACES_PARAMS_NAMESPACE "password", VIK_LAYER_PARAM_STRING, VIK_LAYER_GROUP_NONE, N_("OSM password:"), VIK_LAYER_WIDGET_PASSWORD, NULL, NULL, NULL }, }; /** * Free an OsmTracesInfo struct. */ static void oti_free(OsmTracesInfo *oti) { if (oti) { /* Fields have been g_strdup'ed */ g_free(oti->name); oti->name = NULL; g_free(oti->description); oti->description = NULL; g_free(oti->tags); oti->tags = NULL; g_object_unref(oti->vtl); oti->vtl = NULL; } /* Main struct has been g_malloc'ed */ g_free(oti); } static const gchar *get_default_user() { const gchar *default_user = NULL; /* Retrieve "standard" EMAIL varenv */ default_user = g_getenv("EMAIL"); return default_user; } void osm_set_login(const gchar *user_, const gchar *password_) { /* Allocate mutex */ if (login_mutex == NULL) { login_mutex = g_mutex_new(); } g_mutex_lock(login_mutex); g_free(user); user = NULL; g_free(password); password = NULL; user = g_strdup(user_); password = g_strdup(password_); g_mutex_unlock(login_mutex); } gchar *osm_get_login() { gchar *user_pass = NULL; g_mutex_lock(login_mutex); user_pass = g_strdup_printf("%s:%s", user, password); g_mutex_unlock(login_mutex); return user_pass; } /* initialisation */ void osm_traces_init () { /* Preferences */ a_preferences_register_group ( VIKING_OSM_TRACES_PARAMS_GROUP_KEY, _("OpenStreetMap Traces") ); VikLayerParamData tmp; tmp.s = ""; a_preferences_register(prefs, tmp, VIKING_OSM_TRACES_PARAMS_GROUP_KEY); tmp.s = ""; a_preferences_register(prefs+1, tmp, VIKING_OSM_TRACES_PARAMS_GROUP_KEY); } /* * Upload a file * returns a basic status: * < 0 : curl error * == 0 : OK * > 0 : HTTP error */ static gint osm_traces_upload_file(const char *user, const char *password, const char *file, const char *filename, const char *description, const char *tags, const OsmTraceVis_t *vistype) { CURL *curl; CURLcode res; char curl_error_buffer[CURL_ERROR_SIZE]; struct curl_slist *headers = NULL; struct curl_httppost *post=NULL; struct curl_httppost *last=NULL; char *base_url = "http://www.openstreetmap.org/api/0.6/gpx/create"; gchar *user_pass = osm_get_login(); gint result = 0; // Default to it worked! g_debug("%s: %s %s %s %s %s %s", __FUNCTION__, user, password, file, filename, description, tags); /* Init CURL */ curl = curl_easy_init(); /* Filling the form */ curl_formadd(&post, &last, CURLFORM_COPYNAME, "description", CURLFORM_COPYCONTENTS, description, CURLFORM_END); curl_formadd(&post, &last, CURLFORM_COPYNAME, "tags", CURLFORM_COPYCONTENTS, tags, CURLFORM_END); curl_formadd(&post, &last, CURLFORM_COPYNAME, "visibility", CURLFORM_COPYCONTENTS, vistype->apistr, CURLFORM_END); curl_formadd(&post, &last, CURLFORM_COPYNAME, "file", CURLFORM_FILE, file, CURLFORM_FILENAME, filename, CURLFORM_CONTENTTYPE, "text/xml", CURLFORM_END); /* Prepare request */ /* As explained in http://wiki.openstreetmap.org/index.php/User:LA2 */ /* Expect: header seems to produce incompatibilites between curl and httpd */ headers = curl_slist_append(headers, "Expect: "); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); curl_easy_setopt(curl, CURLOPT_HTTPPOST, post); curl_easy_setopt(curl, CURLOPT_URL, base_url); curl_easy_setopt(curl, CURLOPT_USERPWD, user_pass); curl_easy_setopt(curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY); curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, curl_error_buffer); if (vik_verbose) curl_easy_setopt ( curl, CURLOPT_VERBOSE, 1 ); /* Execute request */ res = curl_easy_perform(curl); if (res == CURLE_OK) { long code; res = curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &code); if (res == CURLE_OK) { g_debug("received valid curl response: %ld", code); if (code != 200) { g_warning(_("failed to upload data: HTTP response is %ld"), code); result = code; } } else { g_critical(_("curl_easy_getinfo failed: %d"), res); result = -1; } } else { g_warning(_("curl request failed: %s"), curl_error_buffer); result = -2; } /* Memory */ g_free(user_pass); user_pass = NULL; curl_formfree(post); curl_easy_cleanup(curl); return result; } /** * uploading function executed by the background" thread */ static void osm_traces_upload_thread ( OsmTracesInfo *oti, gpointer threaddata ) { /* Due to OSM limits, we have to enforce ele and time fields also don't upload invisible tracks */ static GpxWritingOptions options = { TRUE, TRUE, FALSE, FALSE }; FILE *file = NULL; gchar *filename = NULL; int fd; GError *error = NULL; int ret; g_assert(oti != NULL); /* Opening temporary file */ fd = g_file_open_tmp("viking_osm_upload_XXXXXX.gpx", &filename, &error); if (fd < 0) { g_error(_("failed to open temporary file: %s"), strerror(errno)); return; } g_clear_error(&error); g_debug("%s: temporary file = %s", __FUNCTION__, filename); /* Creating FILE* */ file = fdopen(fd, "w"); /* writing gpx file */ if (oti->trk != NULL) { /* Upload only the selected track */ a_gpx_write_track_file(oti->trk, file, &options); } else { /* Upload the whole VikTrwLayer */ a_gpx_write_file(oti->vtl, file, &options); } /* We can close the file */ /* This also close the associated fd */ fclose(file); file = NULL; /* finally, upload it */ gint ans = osm_traces_upload_file(user, password, filename, oti->name, oti->description, oti->tags, oti->vistype); // // Show result in statusbar or failure in dialog for user feedback // // Get current time to put into message to show when result was generated // since need to show difference between operations (when displayed on statusbar) // NB If on dialog then don't need time. time_t timenow; struct tm* timeinfo; time ( &timenow ); timeinfo = localtime ( &timenow ); gchar timestr[80]; // Compact time only - as days/date isn't very useful here strftime ( timestr, sizeof(timestr), "%X)", timeinfo ); // // Test to see if window it was invoked on is still valid // Not sure if this test really works! (i.e. if the window was closed in the mean time) // if ( IS_VIK_WINDOW ((VikWindow *)VIK_GTK_WINDOW_FROM_LAYER(oti->vtl)) ) { gchar* msg; if ( ans == 0 ) { // Success msg = g_strdup_printf ( "%s (@%s)", _("Uploaded to OSM"), timestr ); } // Use UPPER CASE for bad news :( else if ( ans < 0 ) { msg = g_strdup_printf ( "%s (@%s)", _("FAILED TO UPLOAD DATA TO OSM - CURL PROBLEM"), timestr ); } else { msg = g_strdup_printf ( "%s : %s %d (@%s)", _("FAILED TO UPLOAD DATA TO OSM"), _("HTTP response code"), ans, timestr ); } vik_window_statusbar_update ( (VikWindow*)VIK_GTK_WINDOW_FROM_LAYER(oti->vtl), msg, VIK_STATUSBAR_INFO ); g_free (msg); } /* Removing temporary file */ ret = g_unlink(filename); if (ret != 0) { g_critical(_("failed to unlink temporary file: %s"), strerror(errno)); } } /** * */ void osm_login_widgets (GtkWidget *user_entry, GtkWidget *password_entry) { if (!user_entry || !password_entry) return; const gchar *default_user = get_default_user(); const gchar *pref_user = a_preferences_get(VIKING_OSM_TRACES_PARAMS_NAMESPACE "username")->s; const gchar *pref_password = a_preferences_get(VIKING_OSM_TRACES_PARAMS_NAMESPACE "password")->s; if (user != NULL && user[0] != '\0') gtk_entry_set_text(GTK_ENTRY(user_entry), user); else if (pref_user != NULL && pref_user[0] != '\0') gtk_entry_set_text(GTK_ENTRY(user_entry), pref_user); else if (default_user != NULL) gtk_entry_set_text(GTK_ENTRY(user_entry), default_user); if (password != NULL && password[0] != '\0') gtk_entry_set_text(GTK_ENTRY(password_entry), password); else if (pref_password != NULL) gtk_entry_set_text(GTK_ENTRY(password_entry), pref_password); /* This is a password -> invisible */ gtk_entry_set_visibility(GTK_ENTRY(password_entry), FALSE); } /** * Uploading a VikTrwLayer * * @param vtl VikTrwLayer * @param trk if not null, the track to upload */ static void osm_traces_upload_viktrwlayer ( VikTrwLayer *vtl, VikTrack *trk ) { GtkWidget *dia = gtk_dialog_new_with_buttons (_("OSM upload"), VIK_GTK_WINDOW_FROM_LAYER(vtl), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL); const gchar *name = NULL; GtkWidget *user_label, *user_entry; GtkWidget *password_label, *password_entry; GtkWidget *name_label, *name_entry; GtkWidget *description_label, *description_entry; GtkWidget *tags_label, *tags_entry; GtkComboBox *visibility; const OsmTraceVis_t *vis_t; user_label = gtk_label_new(_("Email:")); user_entry = gtk_entry_new(); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dia)->vbox), user_label, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dia)->vbox), user_entry, FALSE, FALSE, 0); gtk_widget_set_tooltip_markup(GTK_WIDGET(user_entry), _("The email used as login\n" "Enter the email you use to login into www.openstreetmap.org.")); password_label = gtk_label_new(_("Password:")); password_entry = gtk_entry_new(); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dia)->vbox), password_label, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dia)->vbox), password_entry, FALSE, FALSE, 0); gtk_widget_set_tooltip_markup(GTK_WIDGET(password_entry), _("The password used to login\n" "Enter the password you use to login into www.openstreetmap.org.")); osm_login_widgets ( user_entry, password_entry ); name_label = gtk_label_new(_("File's name:")); name_entry = gtk_entry_new(); if (trk != NULL) name = trk->name; else name = vik_layer_get_name(VIK_LAYER(vtl)); gtk_entry_set_text(GTK_ENTRY(name_entry), name); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dia)->vbox), name_label, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dia)->vbox), name_entry, FALSE, FALSE, 0); gtk_widget_set_tooltip_markup(GTK_WIDGET(name_entry), _("The name of the file on OSM\n" "This is the name of the file created on the server." "This is not the name of the local file.")); description_label = gtk_label_new(_("Description:")); description_entry = gtk_entry_new(); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dia)->vbox), description_label, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dia)->vbox), description_entry, FALSE, FALSE, 0); gtk_widget_set_tooltip_text(GTK_WIDGET(description_entry), _("The description of the trace")); tags_label = gtk_label_new(_("Tags:")); tags_entry = gtk_entry_new(); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dia)->vbox), tags_label, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dia)->vbox), tags_entry, FALSE, FALSE, 0); gtk_widget_set_tooltip_text(GTK_WIDGET(tags_entry), _("The tags associated to the trace")); visibility = GTK_COMBO_BOX(gtk_combo_box_new_text ()); for (vis_t = OsmTraceVis; vis_t->combostr != NULL; vis_t++) gtk_combo_box_append_text(visibility, vis_t->combostr); /* Set identifiable by default */ gtk_combo_box_set_active(visibility, 0); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dia)->vbox), GTK_WIDGET(visibility), FALSE, FALSE, 0); /* User should think about it first... */ gtk_dialog_set_default_response ( GTK_DIALOG(dia), GTK_RESPONSE_REJECT ); gtk_widget_show_all ( dia ); gtk_widget_grab_focus ( description_entry ); if ( gtk_dialog_run ( GTK_DIALOG(dia) ) == GTK_RESPONSE_ACCEPT ) { gchar *title = NULL; /* overwrite authentication info */ osm_set_login(gtk_entry_get_text(GTK_ENTRY(user_entry)), gtk_entry_get_text(GTK_ENTRY(password_entry))); /* Storing data for the future thread */ OsmTracesInfo *info = g_malloc(sizeof(OsmTracesInfo)); info->name = g_strdup(gtk_entry_get_text(GTK_ENTRY(name_entry))); info->description = g_strdup(gtk_entry_get_text(GTK_ENTRY(description_entry))); /* TODO Normalize tags: they will be used as URL part */ info->tags = g_strdup(gtk_entry_get_text(GTK_ENTRY(tags_entry))); info->vistype = &OsmTraceVis[gtk_combo_box_get_active(visibility)]; info->vtl = VIK_TRW_LAYER(g_object_ref(vtl)); info->trk = trk; title = g_strdup_printf(_("Uploading %s to OSM"), info->name); /* launch the thread */ a_background_thread(VIK_GTK_WINDOW_FROM_LAYER(vtl), /* parent window */ title, /* description string */ (vik_thr_func) osm_traces_upload_thread, /* function to call within thread */ info, /* pass along data */ (vik_thr_free_func) oti_free, /* function to free pass along data */ (vik_thr_free_func) NULL, 1 ); g_free ( title ); title = NULL; } gtk_widget_destroy ( dia ); } /** * Function called by the entry menu of a TrwLayer */ void osm_traces_upload_cb ( gpointer layer_and_vlp[2], guint file_type ) { osm_traces_upload_viktrwlayer(VIK_TRW_LAYER(layer_and_vlp[0]), NULL); } /** * Function called by the entry menu of a single track */ // TODO: Fix this dodgy usage of magic 8 ball array sized numbering // At least have some common definition somewhere... void osm_traces_upload_track_cb ( gpointer pass_along[8] ) { if ( pass_along[7] ) { VikTrack *trk = VIK_TRACK(pass_along[7]); osm_traces_upload_viktrwlayer(VIK_TRW_LAYER(pass_along[0]), trk); } } viking-1.4.2/src/file.c0000644000175000017500000006567112175546146011632 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * Copyright (C) 2012, Guilhem Bonnefille * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "viking.h" #include "gpx.h" #include "babel.h" #include #include #include #ifdef HAVE_UNISTD_H #include #endif #include #include #include #define TEST_BOOLEAN(str) (! ((str)[0] == '\0' || (str)[0] == '0' || (str)[0] == 'n' || (str)[0] == 'N' || (str)[0] == 'f' || (str)[0] == 'F') ) #define VIK_MAGIC "#VIK" #define GPX_MAGIC "under; g_free ( *stack ); *stack = tmp; } static void push(Stack **stack) { Stack *tmp = g_malloc ( sizeof ( Stack ) ); tmp->under = *stack; *stack = tmp; } static gboolean check_magic ( FILE *f, const gchar *magic_number ) { gchar magic[VIK_MAGIC_LEN]; gboolean rv = FALSE; gint8 i; if ( fread(magic, 1, sizeof(magic), f) == sizeof(magic) && strncmp(magic, magic_number, sizeof(magic)) == 0 ) rv = TRUE; for ( i = sizeof(magic)-1; i >= 0; i-- ) /* the ol' pushback */ ungetc(magic[i],f); return rv; } static gboolean str_starts_with ( const gchar *haystack, const gchar *needle, guint16 len_needle, gboolean must_be_longer ) { if ( strlen(haystack) > len_needle - (!must_be_longer) && strncasecmp ( haystack, needle, len_needle ) == 0 ) return TRUE; return FALSE; } static guint16 layer_type_from_string ( const gchar *str ) { guint8 i; for ( i = 0; i < VIK_LAYER_NUM_TYPES; i++ ) if ( strcasecmp ( str, vik_layer_get_interface(i)->fixed_layer_name ) == 0 ) return i; return -1; } void file_write_layer_param ( FILE *f, const gchar *name, guint8 type, VikLayerParamData data ) { /* string lists are handled differently. We get a GList (that shouldn't * be freed) back for get_param and if it is null we shouldn't write * anything at all (otherwise we'd read in a list with an empty string, * not an empty string list. */ if ( type == VIK_LAYER_PARAM_STRING_LIST ) { if ( data.sl ) { GList *iter = (GList *)data.sl; while ( iter ) { fprintf ( f, "%s=", name ); fprintf ( f, "%s\n", (gchar *)(iter->data) ); iter = iter->next; } } } else { fprintf ( f, "%s=", name ); switch ( type ) { case VIK_LAYER_PARAM_DOUBLE: { // char buf[15]; /* locale independent */ // fprintf ( f, "%s\n", (char *) g_dtostr (data.d, buf, sizeof (buf)) ); break; fprintf ( f, "%f\n", data.d ); break; } case VIK_LAYER_PARAM_UINT: fprintf ( f, "%d\n", data.u ); break; case VIK_LAYER_PARAM_INT: fprintf ( f, "%d\n", data.i ); break; case VIK_LAYER_PARAM_BOOLEAN: fprintf ( f, "%c\n", data.b ? 't' : 'f' ); break; case VIK_LAYER_PARAM_STRING: fprintf ( f, "%s\n", data.s ); break; case VIK_LAYER_PARAM_COLOR: fprintf ( f, "#%.2x%.2x%.2x\n", (int)(data.c.red/256),(int)(data.c.green/256),(int)(data.c.blue/256)); break; } } } static void write_layer_params_and_data ( VikLayer *l, FILE *f ) { VikLayerParam *params = vik_layer_get_interface(l->type)->params; VikLayerFuncGetParam get_param = vik_layer_get_interface(l->type)->get_param; fprintf ( f, "name=%s\n", l->name ? l->name : "" ); if ( !l->visible ) fprintf ( f, "visible=f\n" ); if ( params && get_param ) { VikLayerParamData data; guint16 i, params_count = vik_layer_get_interface(l->type)->params_count; for ( i = 0; i < params_count; i++ ) { data = get_param(l, i, TRUE); file_write_layer_param(f, params[i].name, params[i].type, data); } } if ( vik_layer_get_interface(l->type)->write_file_data ) { fprintf ( f, "\n\n~LayerData\n" ); vik_layer_get_interface(l->type)->write_file_data ( l, f ); fprintf ( f, "~EndLayerData\n" ); } /* foreach param: write param, and get_value, etc. then run layer data, and that's it. */ } static void file_write ( VikAggregateLayer *top, FILE *f, gpointer vp ) { Stack *stack = NULL; VikLayer *current_layer; struct LatLon ll; VikViewportDrawMode mode; gchar *modestring = NULL; push(&stack); stack->data = (gpointer) vik_aggregate_layer_get_children(VIK_AGGREGATE_LAYER(top)); stack->under = NULL; /* crazhy CRAZHY */ vik_coord_to_latlon ( vik_viewport_get_center ( VIK_VIEWPORT(vp) ), &ll ); mode = vik_viewport_get_drawmode ( VIK_VIEWPORT(vp) ); switch ( mode ) { case VIK_VIEWPORT_DRAWMODE_UTM: modestring = "utm"; break; case VIK_VIEWPORT_DRAWMODE_EXPEDIA: modestring = "expedia"; break; case VIK_VIEWPORT_DRAWMODE_MERCATOR: modestring = "mercator"; break; case VIK_VIEWPORT_DRAWMODE_LATLON: modestring = "latlon"; break; default: g_critical("Houston, we've had a problem. mode=%d", mode); } fprintf ( f, "#VIKING GPS Data file " VIKING_URL "\n" ); fprintf ( f, "FILE_VERSION=%d\n", VIKING_FILE_VERSION ); fprintf ( f, "\nxmpp=%f\nympp=%f\nlat=%f\nlon=%f\nmode=%s\ncolor=%s\nhighlightcolor=%s\ndrawscale=%s\ndrawcentermark=%s\ndrawhighlight=%s\n", vik_viewport_get_xmpp ( VIK_VIEWPORT(vp) ), vik_viewport_get_ympp ( VIK_VIEWPORT(vp) ), ll.lat, ll.lon, modestring, vik_viewport_get_background_color(VIK_VIEWPORT(vp)), vik_viewport_get_highlight_color(VIK_VIEWPORT(vp)), vik_viewport_get_draw_scale(VIK_VIEWPORT(vp)) ? "t" : "f", vik_viewport_get_draw_centermark(VIK_VIEWPORT(vp)) ? "t" : "f", vik_viewport_get_draw_highlight(VIK_VIEWPORT(vp)) ? "t" : "f" ); if ( ! VIK_LAYER(top)->visible ) fprintf ( f, "visible=f\n" ); while (stack && stack->data) { current_layer = VIK_LAYER(((GList *)stack->data)->data); fprintf ( f, "\n~Layer %s\n", vik_layer_get_interface(current_layer->type)->fixed_layer_name ); write_layer_params_and_data ( current_layer, f ); if ( current_layer->type == VIK_LAYER_AGGREGATE && !vik_aggregate_layer_is_empty(VIK_AGGREGATE_LAYER(current_layer)) ) { push(&stack); stack->data = (gpointer) vik_aggregate_layer_get_children(VIK_AGGREGATE_LAYER(current_layer)); } else if ( current_layer->type == VIK_LAYER_GPS && !vik_gps_layer_is_empty(VIK_GPS_LAYER(current_layer)) ) { push(&stack); stack->data = (gpointer) vik_gps_layer_get_children(VIK_GPS_LAYER(current_layer)); } else { stack->data = (gpointer) ((GList *)stack->data)->next; fprintf ( f, "~EndLayer\n\n" ); while ( stack && (!stack->data) ) { pop(&stack); if ( stack ) { stack->data = (gpointer) ((GList *)stack->data)->next; fprintf ( f, "~EndLayer\n\n" ); } } } } /* get vikaggregatelayer's children (?) foreach write ALL params, then layer data (IF function exists) then endlayer impl: stack of layers (LIST) we are working on when layer->next == NULL ... we move on. */ } static void string_list_delete ( gpointer key, gpointer l, gpointer user_data ) { /* 20071021 bugfix */ GList *iter = (GList *) l; while ( iter ) { g_free ( iter->data ); iter = iter->next; } g_list_free ( (GList *) l ); } static void string_list_set_param (gint i, GList *list, gpointer *layer_and_vp) { VikLayerParamData x; x.sl = list; vik_layer_set_param ( VIK_LAYER(layer_and_vp[0]), i, x, layer_and_vp[1], TRUE ); } /** * Read in a Viking file and return how successful the parsing was * ATM this will always work, in that even if there are parsing problems * then there will be no new values to override the defaults * * TODO flow up line number(s) / error messages of problems encountered... * */ static gboolean file_read ( VikAggregateLayer *top, FILE *f, VikViewport *vp ) { Stack *stack; struct LatLon ll = { 0.0, 0.0 }; gchar buffer[4096]; gchar *line; guint16 len; long line_num = 0; VikLayerParam *params = NULL; /* for current layer, so we don't have to keep on looking up interface */ guint8 params_count = 0; GHashTable *string_lists = g_hash_table_new(g_direct_hash,g_direct_equal); gboolean successful_read = TRUE; push(&stack); stack->under = NULL; stack->data = (gpointer) top; while ( fgets ( buffer, 4096, f ) ) { line_num++; line = buffer; while ( *line == ' ' || *line =='\t' ) line++; if ( line[0] == '#' ) continue; len = strlen(line); if ( len > 0 && line[len-1] == '\n' ) line[--len] = '\0'; if ( len > 0 && line[len-1] == '\r' ) line[--len] = '\0'; if ( len == 0 ) continue; if ( line[0] == '~' ) { line++; len--; if ( *line == '\0' ) continue; else if ( str_starts_with ( line, "Layer ", 6, TRUE ) ) { int parent_type = VIK_LAYER(stack->data)->type; if ( ( ! stack->data ) || ((parent_type != VIK_LAYER_AGGREGATE) && (parent_type != VIK_LAYER_GPS)) ) { successful_read = FALSE; g_warning ( "Line %ld: Layer command inside non-Aggregate Layer (type %d)", line_num, parent_type ); push(&stack); /* inside INVALID layer */ stack->data = NULL; continue; } else { gint16 type = layer_type_from_string ( line+6 ); push(&stack); if ( type == -1 ) { successful_read = FALSE; g_warning ( "Line %ld: Unknown type %s", line_num, line+6 ); stack->data = NULL; } else if (parent_type == VIK_LAYER_GPS) { stack->data = (gpointer) vik_gps_layer_get_a_child(VIK_GPS_LAYER(stack->under->data)); params = vik_layer_get_interface(type)->params; params_count = vik_layer_get_interface(type)->params_count; } else { stack->data = (gpointer) vik_layer_create ( type, vp, NULL, FALSE ); params = vik_layer_get_interface(type)->params; params_count = vik_layer_get_interface(type)->params_count; } } } else if ( str_starts_with ( line, "EndLayer", 8, FALSE ) ) { if ( stack->under == NULL ) { successful_read = FALSE; g_warning ( "Line %ld: Mismatched ~EndLayer command", line_num ); } else { /* add any string lists we've accumulated */ gpointer layer_and_vp[2]; layer_and_vp[0] = stack->data; layer_and_vp[1] = vp; g_hash_table_foreach ( string_lists, (GHFunc) string_list_set_param, layer_and_vp ); g_hash_table_remove_all ( string_lists ); if ( stack->data && stack->under->data ) { if (VIK_LAYER(stack->under->data)->type == VIK_LAYER_AGGREGATE) { vik_aggregate_layer_add_layer ( VIK_AGGREGATE_LAYER(stack->under->data), VIK_LAYER(stack->data) ); vik_layer_post_read ( VIK_LAYER(stack->data), vp, TRUE ); } else if (VIK_LAYER(stack->under->data)->type == VIK_LAYER_GPS) { /* TODO: anything else needs to be done here ? */ } else { successful_read = FALSE; g_warning ( "Line %ld: EndLayer command inside non-Aggregate Layer (type %d)", line_num, VIK_LAYER(stack->data)->type ); } } pop(&stack); } } else if ( str_starts_with ( line, "LayerData", 9, FALSE ) ) { if ( stack->data && vik_layer_get_interface(VIK_LAYER(stack->data)->type)->read_file_data ) { /* must read until hits ~EndLayerData */ if ( ! vik_layer_get_interface(VIK_LAYER(stack->data)->type)->read_file_data ( VIK_LAYER(stack->data), f ) ) successful_read = FALSE; } else { /* simply skip layer data over */ while ( fgets ( buffer, 4096, f ) ) { line_num++; line = buffer; len = strlen(line); if ( len > 0 && line[len-1] == '\n' ) line[--len] = '\0'; if ( len > 0 && line[len-1] == '\r' ) line[--len] = '\0'; if ( strcasecmp ( line, "~EndLayerData" ) == 0 ) break; } continue; } } else { successful_read = FALSE; g_warning ( "Line %ld: Unknown tilde command", line_num ); } } else { gint32 eq_pos = -1; guint16 i; if ( ! stack->data ) continue; for ( i = 0; i < len; i++ ) if ( line[i] == '=' ) eq_pos = i; if ( stack->under == NULL && eq_pos == 12 && strncasecmp ( line, "FILE_VERSION", eq_pos ) == 0) { gint version = strtol(line+13, NULL, 10); g_debug ( "%s: reading file version %d", __FUNCTION__, version ); if ( version > VIKING_FILE_VERSION ) successful_read = FALSE; // However we'll still carry and attempt to read whatever we can } else if ( stack->under == NULL && eq_pos == 4 && strncasecmp ( line, "xmpp", eq_pos ) == 0) /* "hard coded" params: global & for all layer-types */ vik_viewport_set_xmpp ( VIK_VIEWPORT(vp), strtod ( line+5, NULL ) ); else if ( stack->under == NULL && eq_pos == 4 && strncasecmp ( line, "ympp", eq_pos ) == 0) vik_viewport_set_ympp ( VIK_VIEWPORT(vp), strtod ( line+5, NULL ) ); else if ( stack->under == NULL && eq_pos == 3 && strncasecmp ( line, "lat", eq_pos ) == 0 ) ll.lat = strtod ( line+4, NULL ); else if ( stack->under == NULL && eq_pos == 3 && strncasecmp ( line, "lon", eq_pos ) == 0 ) ll.lon = strtod ( line+4, NULL ); else if ( stack->under == NULL && eq_pos == 4 && strncasecmp ( line, "mode", eq_pos ) == 0 && strcasecmp ( line+5, "utm" ) == 0) vik_viewport_set_drawmode ( VIK_VIEWPORT(vp), VIK_VIEWPORT_DRAWMODE_UTM); else if ( stack->under == NULL && eq_pos == 4 && strncasecmp ( line, "mode", eq_pos ) == 0 && strcasecmp ( line+5, "expedia" ) == 0) vik_viewport_set_drawmode ( VIK_VIEWPORT(vp), VIK_VIEWPORT_DRAWMODE_EXPEDIA ); else if ( stack->under == NULL && eq_pos == 4 && strncasecmp ( line, "mode", eq_pos ) == 0 && strcasecmp ( line+5, "google" ) == 0) { successful_read = FALSE; g_warning ( _("Draw mode '%s' no more supported"), "google" ); } else if ( stack->under == NULL && eq_pos == 4 && strncasecmp ( line, "mode", eq_pos ) == 0 && strcasecmp ( line+5, "kh" ) == 0) { successful_read = FALSE; g_warning ( _("Draw mode '%s' no more supported"), "kh" ); } else if ( stack->under == NULL && eq_pos == 4 && strncasecmp ( line, "mode", eq_pos ) == 0 && strcasecmp ( line+5, "mercator" ) == 0) vik_viewport_set_drawmode ( VIK_VIEWPORT(vp), VIK_VIEWPORT_DRAWMODE_MERCATOR ); else if ( stack->under == NULL && eq_pos == 4 && strncasecmp ( line, "mode", eq_pos ) == 0 && strcasecmp ( line+5, "latlon" ) == 0) vik_viewport_set_drawmode ( VIK_VIEWPORT(vp), VIK_VIEWPORT_DRAWMODE_LATLON ); else if ( stack->under == NULL && eq_pos == 5 && strncasecmp ( line, "color", eq_pos ) == 0 ) vik_viewport_set_background_color ( VIK_VIEWPORT(vp), line+6 ); else if ( stack->under == NULL && eq_pos == 14 && strncasecmp ( line, "highlightcolor", eq_pos ) == 0 ) vik_viewport_set_highlight_color ( VIK_VIEWPORT(vp), line+15 ); else if ( stack->under == NULL && eq_pos == 9 && strncasecmp ( line, "drawscale", eq_pos ) == 0 ) vik_viewport_set_draw_scale ( VIK_VIEWPORT(vp), TEST_BOOLEAN(line+10) ); else if ( stack->under == NULL && eq_pos == 14 && strncasecmp ( line, "drawcentermark", eq_pos ) == 0 ) vik_viewport_set_draw_centermark ( VIK_VIEWPORT(vp), TEST_BOOLEAN(line+15) ); else if ( stack->under == NULL && eq_pos == 13 && strncasecmp ( line, "drawhighlight", eq_pos ) == 0 ) vik_viewport_set_draw_highlight ( VIK_VIEWPORT(vp), TEST_BOOLEAN(line+14) ); else if ( stack->under && eq_pos == 4 && strncasecmp ( line, "name", eq_pos ) == 0 ) vik_layer_rename ( VIK_LAYER(stack->data), line+5 ); else if ( eq_pos == 7 && strncasecmp ( line, "visible", eq_pos ) == 0 ) VIK_LAYER(stack->data)->visible = TEST_BOOLEAN(line+8); else if ( eq_pos != -1 && stack->under ) { gboolean found_match = FALSE; /* go thru layer params. if len == eq_pos && starts_with jazz, set it. */ /* also got to check for name and visible. */ if ( ! params ) { successful_read = FALSE; g_warning ( "Line %ld: No options for this kind of layer", line_num ); continue; } for ( i = 0; i < params_count; i++ ) if ( strlen(params[i].name) == eq_pos && strncasecmp ( line, params[i].name, eq_pos ) == 0 ) { VikLayerParamData x; line += eq_pos+1; if ( params[i].type == VIK_LAYER_PARAM_STRING_LIST ) { GList *l = g_list_append ( g_hash_table_lookup ( string_lists, GINT_TO_POINTER ((gint) i) ), g_strdup(line) ); g_hash_table_replace ( string_lists, GINT_TO_POINTER ((gint)i), l ); /* add the value to a list, possibly making a new list. * this will be passed to the layer when we read an ~EndLayer */ } else { switch ( params[i].type ) { case VIK_LAYER_PARAM_DOUBLE: x.d = strtod(line, NULL); break; case VIK_LAYER_PARAM_UINT: x.u = strtoul(line, NULL, 10); break; case VIK_LAYER_PARAM_INT: x.i = strtol(line, NULL, 10); break; case VIK_LAYER_PARAM_BOOLEAN: x.b = TEST_BOOLEAN(line); break; case VIK_LAYER_PARAM_COLOR: memset(&(x.c), 0, sizeof(x.c)); /* default: black */ gdk_color_parse ( line, &(x.c) ); break; /* STRING or STRING_LIST -- if STRING_LIST, just set param to add a STRING */ default: x.s = line; } vik_layer_set_param ( VIK_LAYER(stack->data), i, x, vp, TRUE ); } found_match = TRUE; break; } if ( ! found_match ) { // ATM don't flow up this issue because at least one internal parameter has changed from version 1.3 // and don't what to worry users about raising such issues // TODO Maybe hold old values here - compare the line value against them and if a match // generate a different style of message in the GUI... // successful_read = FALSE; g_warning ( "Line %ld: Unknown parameter. Line:\n%s", line_num, line ); } } else { successful_read = FALSE; g_warning ( "Line %ld: Invalid parameter or parameter outside of layer.", line_num ); } } /* could be: [Layer Type=Bla] [EndLayer] [LayerData] name=this #comment */ } while ( stack ) { if ( stack->under && stack->under->data && stack->data ) { vik_aggregate_layer_add_layer ( VIK_AGGREGATE_LAYER(stack->under->data), VIK_LAYER(stack->data) ); vik_layer_post_read ( VIK_LAYER(stack->data), vp, TRUE ); } pop(&stack); } if ( ll.lat != 0.0 || ll.lon != 0.0 ) vik_viewport_set_center_latlon ( VIK_VIEWPORT(vp), &ll ); if ( ( ! VIK_LAYER(top)->visible ) && VIK_LAYER(top)->realized ) vik_treeview_item_set_visible ( VIK_LAYER(top)->vt, &(VIK_LAYER(top)->iter), FALSE ); /* delete anything we've forgotten about -- should only happen when file ends before an EndLayer */ g_hash_table_foreach ( string_lists, string_list_delete, NULL ); g_hash_table_destroy ( string_lists ); return successful_read; } /* read thru file if "[Layer Type=" push(&stack) new default layer of type (str_to_type) (check interface->name) if "[EndLayer]" VikLayer *vl = stack->data; pop(&stack); vik_aggregate_layer_add_layer(stack->data, vl); if "[LayerData]" vik_layer_data ( VIK_LAYER_DATA(stack->data), f, vp ); */ /* ---------------------------------------------------- */ static FILE *xfopen ( const char *fn, const char *mode ) { if ( strcmp(fn,"-") == 0 ) return stdin; else return g_fopen(fn, "r"); } static void xfclose ( FILE *f ) { if ( f != stdin && f != stdout ) { fclose ( f ); f = NULL; } } /* * Function to determine if a filename is a 'viking' type file */ gboolean check_file_magic_vik ( const gchar *filename ) { gboolean result = FALSE; FILE *ff = xfopen ( filename, "r" ); if ( ff ) { result = check_magic ( ff, VIK_MAGIC ); xfclose ( ff ); } return result; } VikLoadType_t a_file_load ( VikAggregateLayer *top, VikViewport *vp, const gchar *filename_or_uri ) { g_return_val_if_fail ( vp != NULL, LOAD_TYPE_READ_FAILURE ); char *filename = (char *)filename_or_uri; if (strncmp(filename, "file://", 7) == 0) filename = filename + 7; FILE *f = xfopen ( filename, "r" ); if ( ! f ) return LOAD_TYPE_READ_FAILURE; VikLoadType_t load_answer = LOAD_TYPE_OTHER_SUCCESS; // Attempt loading the primary file type first - our internal .vik file: if ( check_magic ( f, VIK_MAGIC ) ) { if ( file_read ( top, f, vp ) ) load_answer = LOAD_TYPE_VIK_SUCCESS; else load_answer = LOAD_TYPE_VIK_FAILURE_NON_FATAL; } else { // For all other file types which consist of tracks, routes and/or waypoints, // must be loaded into a new TrackWaypoint layer (hence it be created) gboolean success = TRUE; // Detect load failures - mainly to remove the layer created as it's not required VikLayer *vtl = vik_layer_create ( VIK_LAYER_TRW, vp, NULL, FALSE ); // In fact both kml & gpx files start the same as they are in xml if ( check_file_ext ( filename, ".kml" ) && check_magic ( f, GPX_MAGIC ) ) { // Implicit Conversion if ( ! ( success = a_babel_convert_from ( VIK_TRW_LAYER(vtl), "-i kml", filename, NULL, NULL, NULL ) ) ) { load_answer = LOAD_TYPE_GPSBABEL_FAILURE; } } // NB use a extension check first, as a GPX file header may have a Byte Order Mark (BOM) in it // - which currently confuses our check_magic function else if ( check_file_ext ( filename, ".gpx" ) || check_magic ( f, GPX_MAGIC ) ) { if ( ! ( success = a_gpx_read_file ( VIK_TRW_LAYER(vtl), f ) ) ) { load_answer = LOAD_TYPE_GPX_FAILURE; } } else { // Try final supported file type if ( ! ( success = a_gpspoint_read_file ( VIK_TRW_LAYER(vtl), f ) ) ) { // Failure here means we don't know how to handle the file load_answer = LOAD_TYPE_UNSUPPORTED_FAILURE; } } // Clean up when we can't handle the file if ( ! success ) { // free up layer g_object_unref ( vtl ); } else { // Complete the setup from the successful load vik_layer_rename ( vtl, a_file_basename ( filename ) ); vik_layer_post_read ( vtl, vp, TRUE ); vik_aggregate_layer_add_layer ( top, vtl ); vik_trw_layer_auto_set_view ( VIK_TRW_LAYER(vtl), vp ); } } xfclose(f); return load_answer; } gboolean a_file_save ( VikAggregateLayer *top, gpointer vp, const gchar *filename ) { FILE *f; if (strncmp(filename, "file://", 7) == 0) filename = filename + 7; f = g_fopen(filename, "w"); if ( ! f ) return FALSE; file_write ( top, f, vp ); fclose(f); f = NULL; return TRUE; } const gchar *a_file_basename ( const gchar *filename ) { const gchar *t = filename + strlen(filename) - 1; while ( --t > filename ) if ( *(t-1) == FILE_SEP ) break; if ( t >= filename ) return t; return filename; } /* example: gboolean is_gpx = check_file_ext ( "a/b/c.gpx", ".gpx" ); */ gboolean check_file_ext ( const gchar *filename, const gchar *fileext ) { g_return_val_if_fail ( filename != NULL, FALSE ); g_return_val_if_fail ( fileext && fileext[0]=='.', FALSE ); const gchar *basename = a_file_basename(filename); if (!basename) return FALSE; const char * dot = strrchr(basename, '.'); if (dot && !strcmp(dot, fileext)) return TRUE; return FALSE; } /** * a_file_export: * @vtl: The TrackWaypoint to export data from * @filename: The name of the file to be written * @file_type: Choose one of the supported file types for the export * @trk: If specified then only export this track rather than the whole layer * @write_hidden: Whether to write invisible items * * A general export command to convert from Viking TRW layer data to an external supported format. * The write_hidden option is provided mainly to be able to transfer selected items when uploading to a GPS */ gboolean a_file_export ( VikTrwLayer *vtl, const gchar *filename, VikFileType_t file_type, VikTrack *trk, gboolean write_hidden ) { GpxWritingOptions options = { FALSE, FALSE, write_hidden, FALSE }; FILE *f = g_fopen ( filename, "w" ); if ( f ) { if ( trk ) { switch ( file_type ) { case FILE_TYPE_GPX: // trk defined so can set the option options.is_route = trk->is_route; a_gpx_write_track_file ( trk, f, &options ); break; default: g_critical("Houston, we've had a problem. file_type=%d", file_type); } } else { switch ( file_type ) { case FILE_TYPE_GPSMAPPER: a_gpsmapper_write_file ( vtl, f ); break; case FILE_TYPE_GPX: a_gpx_write_file ( vtl, f, &options ); break; case FILE_TYPE_GPSPOINT: a_gpspoint_write_file ( vtl, f ); break; case FILE_TYPE_KML: fclose ( f ); f = NULL; switch ( a_vik_get_kml_export_units () ) { case VIK_KML_EXPORT_UNITS_STATUTE: return a_babel_convert_to ( vtl, NULL, "-o kml", filename, NULL, NULL ); break; case VIK_KML_EXPORT_UNITS_NAUTICAL: return a_babel_convert_to ( vtl, NULL, "-o kml,units=n", filename, NULL, NULL ); break; default: // VIK_KML_EXPORT_UNITS_METRIC: return a_babel_convert_to ( vtl, NULL, "-o kml,units=m", filename, NULL, NULL ); break; } break; default: g_critical("Houston, we've had a problem. file_type=%d", file_type); } } fclose ( f ); f = NULL; return TRUE; } return FALSE; } viking-1.4.2/src/vikcoord.h0000644000175000017500000000437512122673673012530 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef _VIKING_VIKCOORD_H #define _VIKING_VIKCOORD_H #include "coords.h" G_BEGIN_DECLS typedef gshort VikCoordMode; #define VIK_COORD_UTM 0 #define VIK_COORD_LATLON 1 #define VIK_UTM(x) ((struct UTM *)(x)) #define VIK_LATLON(x) ((struct LatLon *)(x)) typedef struct { gdouble north_south; /* northing or lat */ gdouble east_west; /* easting or lon */ gchar utm_zone; gchar utm_letter; VikCoordMode mode; } VikCoord; /* notice we can cast to either UTM or LatLon */ /* possible more modes to come? xy? we'll leave that as an option */ void vik_coord_convert(VikCoord *coord, VikCoordMode dest_mode); void vik_coord_copy_convert(const VikCoord *coord, VikCoordMode dest_mode, VikCoord *dest); gdouble vik_coord_diff(const VikCoord *c1, const VikCoord *c2); void vik_coord_load_from_latlon ( VikCoord *coord, VikCoordMode mode, const struct LatLon *ll ); void vik_coord_load_from_utm ( VikCoord *coord, VikCoordMode mode, const struct UTM *utm ); void vik_coord_to_latlon ( const VikCoord *coord, struct LatLon *dest ); void vik_coord_to_utm ( const VikCoord *coord, struct UTM *dest ); gboolean vik_coord_equals ( const VikCoord *coord1, const VikCoord *coord2 ); void vik_coord_set_area(const VikCoord *coord, const struct LatLon *wh, VikCoord *tl, VikCoord *br); gboolean vik_coord_inside(const VikCoord *coord, const VikCoord *tl, const VikCoord *br); /* all coord operations MUST BE ABSTRACTED!!! */ G_END_DECLS #endif viking-1.4.2/src/datasource_gc.c0000644000175000017500000002424212175546146013503 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2007, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef VIK_CONFIG_GEOCACHES #include #include #include "viking.h" #include "babel.h" #include "gpx.h" #include "acquire.h" #include "preferences.h" // Could have an array of programs instead... #define GC_PROGRAM1 "geo-nearest" #define GC_PROGRAM2 "geo-html2gpx" /* params will be geocaching.username, geocaching.password */ /* we have to make sure these don't collide. */ #define VIKING_GC_PARAMS_GROUP_KEY "geocaching" #define VIKING_GC_PARAMS_NAMESPACE "geocaching." typedef struct { GtkWidget *num_spin; GtkWidget *center_entry; // TODO make separate widgets for lat/lon GtkWidget *miles_radius_spin; GdkGC *circle_gc; VikViewport *vvp; gboolean circle_onscreen; gint circle_x, circle_y, circle_width; } datasource_gc_widgets_t; static gpointer datasource_gc_init ( ); static void datasource_gc_add_setup_widgets ( GtkWidget *dialog, VikViewport *vvp, gpointer user_data ); static void datasource_gc_get_cmd_string ( datasource_gc_widgets_t *widgets, gchar **cmd, gchar **input_file_type, gpointer not_used ); static void datasource_gc_cleanup ( datasource_gc_widgets_t *widgets ); static gchar *datasource_gc_check_existence (); #define METERSPERMILE 1609.344 VikDataSourceInterface vik_datasource_gc_interface = { N_("Download Geocaches"), N_("Geocaching.com Caches"), VIK_DATASOURCE_ADDTOLAYER, VIK_DATASOURCE_INPUTTYPE_NONE, TRUE, // Yes automatically update the display - otherwise we won't see the geocache waypoints! TRUE, TRUE, (VikDataSourceInitFunc) datasource_gc_init, (VikDataSourceCheckExistenceFunc) datasource_gc_check_existence, (VikDataSourceAddSetupWidgetsFunc) datasource_gc_add_setup_widgets, (VikDataSourceGetCmdStringFunc) datasource_gc_get_cmd_string, (VikDataSourceProcessFunc) a_babel_convert_from_shellcommand, (VikDataSourceProgressFunc) NULL, (VikDataSourceAddProgressWidgetsFunc) NULL, (VikDataSourceCleanupFunc) datasource_gc_cleanup, (VikDataSourceOffFunc) NULL, }; static VikLayerParam prefs[] = { { VIKING_GC_PARAMS_NAMESPACE "username", VIK_LAYER_PARAM_STRING, VIK_LAYER_GROUP_NONE, N_("geocaching.com username:"), VIK_LAYER_WIDGET_ENTRY, NULL, NULL, NULL }, { VIKING_GC_PARAMS_NAMESPACE "password", VIK_LAYER_PARAM_STRING, VIK_LAYER_GROUP_NONE, N_("geocaching.com password:"), VIK_LAYER_WIDGET_ENTRY, NULL, NULL, NULL }, }; void a_datasource_gc_init() { a_preferences_register_group ( VIKING_GC_PARAMS_GROUP_KEY, "Geocaching" ); VikLayerParamData tmp; tmp.s = "username"; a_preferences_register(prefs, tmp, VIKING_GC_PARAMS_GROUP_KEY); tmp.s = "password"; a_preferences_register(prefs+1, tmp, VIKING_GC_PARAMS_GROUP_KEY); } static gpointer datasource_gc_init ( ) { datasource_gc_widgets_t *widgets = g_malloc(sizeof(*widgets)); return widgets; } static gchar *datasource_gc_check_existence () { gboolean OK1 = FALSE; gboolean OK2 = FALSE; gchar *location1 = g_find_program_in_path(GC_PROGRAM1); if ( location1 ) { g_free(location1); OK1 = TRUE; } gchar *location2 = g_find_program_in_path(GC_PROGRAM2); if ( location2 ) { g_free(location2); OK2 = TRUE; } if ( OK1 && OK2 ) return NULL; return g_strdup_printf(_("Can't find %s or %s in path! Check that you have installed it correctly."), GC_PROGRAM1, GC_PROGRAM2); } static void datasource_gc_draw_circle ( datasource_gc_widgets_t *widgets ) { gdouble lat, lon; if ( widgets->circle_onscreen ) { vik_viewport_draw_arc ( widgets->vvp, widgets->circle_gc, FALSE, widgets->circle_x - widgets->circle_width/2, widgets->circle_y - widgets->circle_width/2, widgets->circle_width, widgets->circle_width, 0, 360*64 ); } /* calculate widgets circle_x and circle_y */ /* split up lat,lon into lat and lon */ if ( 2 == sscanf ( gtk_entry_get_text ( GTK_ENTRY(widgets->center_entry) ), "%lf,%lf", &lat, &lon ) ) { struct LatLon ll; VikCoord c; gint x, y; ll.lat = lat; ll.lon = lon; vik_coord_load_from_latlon ( &c, vik_viewport_get_coord_mode ( widgets->vvp ), &ll ); vik_viewport_coord_to_screen ( widgets->vvp, &c, &x, &y ); /* TODO: real calculation */ if ( x > -1000 && y > -1000 && x < (vik_viewport_get_width(widgets->vvp) + 1000) && y < (vik_viewport_get_width(widgets->vvp) + 1000) ) { VikCoord c1, c2; gdouble pixels_per_meter; widgets->circle_x = x; widgets->circle_y = y; /* determine miles per pixel */ vik_viewport_screen_to_coord ( widgets->vvp, 0, vik_viewport_get_height(widgets->vvp)/2, &c1 ); vik_viewport_screen_to_coord ( widgets->vvp, vik_viewport_get_width(widgets->vvp), vik_viewport_get_height(widgets->vvp)/2, &c2 ); pixels_per_meter = ((gdouble)vik_viewport_get_width(widgets->vvp)) / vik_coord_diff(&c1, &c2); /* this is approximate */ widgets->circle_width = gtk_spin_button_get_value_as_float ( GTK_SPIN_BUTTON(widgets->miles_radius_spin) ) * METERSPERMILE * pixels_per_meter * 2; vik_viewport_draw_arc ( widgets->vvp, widgets->circle_gc, FALSE, widgets->circle_x - widgets->circle_width/2, widgets->circle_y - widgets->circle_width/2, widgets->circle_width, widgets->circle_width, 0, 360*64 ); widgets->circle_onscreen = TRUE; } else widgets->circle_onscreen = FALSE; } /* see if onscreen */ /* okay */ vik_viewport_sync ( widgets->vvp ); } static void datasource_gc_add_setup_widgets ( GtkWidget *dialog, VikViewport *vvp, gpointer user_data ) { datasource_gc_widgets_t *widgets = (datasource_gc_widgets_t *)user_data; GtkWidget *num_label, *center_label, *miles_radius_label; struct LatLon ll; gchar *s_ll; num_label = gtk_label_new (_("Number geocaches:")); widgets->num_spin = gtk_spin_button_new ( GTK_ADJUSTMENT(gtk_adjustment_new( 20, 1, 1000, 10, 20, 0 )), 10, 0 ); center_label = gtk_label_new (_("Centered around:")); widgets->center_entry = gtk_entry_new(); miles_radius_label = gtk_label_new ("Miles Radius:"); widgets->miles_radius_spin = gtk_spin_button_new ( GTK_ADJUSTMENT(gtk_adjustment_new( 5, 1, 1000, 1, 20, 0 )), 25, 1 ); vik_coord_to_latlon ( vik_viewport_get_center(vvp), &ll ); s_ll = g_strdup_printf("%f,%f", ll.lat, ll.lon ); gtk_entry_set_text ( GTK_ENTRY(widgets->center_entry), s_ll ); g_free ( s_ll ); widgets->vvp = vvp; widgets->circle_gc = vik_viewport_new_gc ( vvp, "#000000", 3 ); gdk_gc_set_function ( widgets->circle_gc, GDK_INVERT ); widgets->circle_onscreen = TRUE; datasource_gc_draw_circle ( widgets ); g_signal_connect_swapped ( G_OBJECT(widgets->center_entry), "changed", G_CALLBACK(datasource_gc_draw_circle), widgets ); g_signal_connect_swapped ( G_OBJECT(widgets->miles_radius_spin), "value-changed", G_CALLBACK(datasource_gc_draw_circle), widgets ); gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(dialog)->vbox), num_label, FALSE, FALSE, 5 ); gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(dialog)->vbox), widgets->num_spin, FALSE, FALSE, 5 ); gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(dialog)->vbox), center_label, FALSE, FALSE, 5 ); gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(dialog)->vbox), widgets->center_entry, FALSE, FALSE, 5 ); gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(dialog)->vbox), miles_radius_label, FALSE, FALSE, 5 ); gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(dialog)->vbox), widgets->miles_radius_spin, FALSE, FALSE, 5 ); gtk_widget_show_all(dialog); } static void datasource_gc_get_cmd_string ( datasource_gc_widgets_t *widgets, gchar **cmd, gchar **input_file_type, gpointer not_used ) { //gchar *safe_string = g_shell_quote ( gtk_entry_get_text ( GTK_ENTRY(widgets->center_entry) ) ); gchar *safe_user = g_shell_quote ( a_preferences_get ( VIKING_GC_PARAMS_NAMESPACE "username")->s ); gchar *safe_pass = g_shell_quote ( a_preferences_get ( VIKING_GC_PARAMS_NAMESPACE "password")->s ); gdouble lat, lon; if ( 2 != sscanf ( gtk_entry_get_text ( GTK_ENTRY(widgets->center_entry) ), "%lf,%lf", &lat, &lon ) ) { g_warning (_("Broken input - using some defaults")); lat = a_vik_get_default_lat(); lon = a_vik_get_default_long(); } // Unix specific shell commands // 1. Remove geocache webpages (maybe be from different location) // 2, Gets upto n geocaches as webpages for the specified user in radius r Miles // 3. Converts webpages into a single waypoint file, ignoring zero location waypoints '-z' // Probably as they are premium member only geocaches and user is only a basic member // Final output is piped into GPSbabel - hence removal of *html is done at beginning of the command sequence *cmd = g_strdup_printf( "rm -f ~/.geo/caches/*html ; %s -P -n%d -r%.1fM -u %s -p %s %.4f %.4f ; %s -z ~/.geo/caches/*html ", GC_PROGRAM1, gtk_spin_button_get_value_as_int ( GTK_SPIN_BUTTON(widgets->num_spin) ), gtk_spin_button_get_value_as_float ( GTK_SPIN_BUTTON(widgets->miles_radius_spin) ), safe_user, safe_pass, lat, lon, GC_PROGRAM2 ); *input_file_type = NULL; //g_free ( safe_string ); g_free ( safe_user ); g_free ( safe_pass ); } static void datasource_gc_cleanup ( datasource_gc_widgets_t *widgets ) { if ( widgets->circle_onscreen ) { vik_viewport_draw_arc ( widgets->vvp, widgets->circle_gc, FALSE, widgets->circle_x - widgets->circle_width/2, widgets->circle_y - widgets->circle_width/2, widgets->circle_width, widgets->circle_width, 0, 360*64 ); vik_viewport_sync( widgets->vvp ); } g_free ( widgets ); } #endif /* VIK_CONFIG_GEOCACHES */ viking-1.4.2/src/coords.c0000644000175000017500000002617712152216677012200 00000000000000/* coords.c borrowed from: http://acme.com/software/coords/ I (Evan Battaglia ) have only made some small changes such as renaming functions and defining LatLon and UTM structs. 2004-02-10 -- I also added a function of my own -- a_coords_utm_diff() -- that I felt belonged in coords.c 2004-02-21 -- I also added a_coords_utm_equal(). 2005-11-23 -- Added a_coords_dtostr() for lack of a better place. */ /* coords.h - include file for coords routines ** ** Copyright 2001 by Jef Poskanzer . ** All rights reserved. ** ** Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions ** are met: ** 1. Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** 2. Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in the ** documentation and/or other materials provided with the distribution. ** ** THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ** ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ** ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE ** FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL ** DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS ** OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ** HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT ** LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY ** OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ** SUCH DAMAGE. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_STRING_H #include #endif #ifdef HAVE_MATH_H #include #endif #include "viking.h" #include "globals.h" #include "degrees_converters.h" /** * Convert a double to a string WITHOUT LOCALE. * * Following GPX specifications, decimal values are xsd:decimal * So, they must use the period separator, not the localized one. * * The returned value must be freed by g_free. */ char *a_coords_dtostr ( double d ) { gchar *buffer = g_malloc(G_ASCII_DTOSTR_BUF_SIZE*sizeof(gchar)); g_ascii_dtostr (buffer, G_ASCII_DTOSTR_BUF_SIZE, (gdouble) d); return buffer; } #define PIOVER180 0.01745329252 #define K0 0.9996 /* WGS-84 */ #define EquatorialRadius 6378137 #define EccentricitySquared 0.00669438 static char coords_utm_letter( double latitude ); int a_coords_utm_equal( const struct UTM *utm1, const struct UTM *utm2 ) { return ( utm1->easting == utm2->easting && utm1->northing == utm2->northing && utm1->zone == utm2->zone ); } double a_coords_utm_diff( const struct UTM *utm1, const struct UTM *utm2 ) { static struct LatLon tmp1, tmp2; if ( utm1->zone == utm2->zone ) { return sqrt ( pow ( utm1->easting - utm2->easting, 2 ) + pow ( utm1->northing - utm2->northing, 2 ) ); } else { a_coords_utm_to_latlon ( utm1, &tmp1 ); a_coords_utm_to_latlon ( utm2, &tmp2 ); return a_coords_latlon_diff ( &tmp1, &tmp2 ); } } double a_coords_latlon_diff ( const struct LatLon *ll1, const struct LatLon *ll2 ) { static struct LatLon tmp1, tmp2; gdouble tmp3; tmp1.lat = ll1->lat * PIOVER180; tmp1.lon = ll1->lon * PIOVER180; tmp2.lat = ll2->lat * PIOVER180; tmp2.lon = ll2->lon * PIOVER180; tmp3 = EquatorialRadius * acos(sin(tmp1.lat)*sin(tmp2.lat)+cos(tmp1.lat)*cos(tmp2.lat)*cos(tmp1.lon-tmp2.lon)); // For very small differences we can sometimes get NaN returned return isnan(tmp3)?0:tmp3; } void a_coords_latlon_to_utm( const struct LatLon *latlon, struct UTM *utm ) { double latitude; double longitude; double lat_rad, long_rad; double long_origin, long_origin_rad; double eccPrimeSquared; double N, T, C, A, M; int zone; double northing, easting; longitude = latlon->lon; latitude = latlon->lat; /* We want the longitude within -180..180. */ if ( longitude < -180.0 ) longitude += 360.0; if ( longitude > 180.0 ) longitude -= 360.0; /* Now convert. */ lat_rad = DEG2RAD(latitude); long_rad = DEG2RAD(longitude); zone = (int) ( ( longitude + 180 ) / 6 ) + 1; if ( latitude >= 56.0 && latitude < 64.0 && longitude >= 3.0 && longitude < 12.0 ) zone = 32; /* Special zones for Svalbard. */ if ( latitude >= 72.0 && latitude < 84.0 ) { if ( longitude >= 0.0 && longitude < 9.0 ) zone = 31; else if ( longitude >= 9.0 && longitude < 21.0 ) zone = 33; else if ( longitude >= 21.0 && longitude < 33.0 ) zone = 35; else if ( longitude >= 33.0 && longitude < 42.0 ) zone = 37; } long_origin = ( zone - 1 ) * 6 - 180 + 3; /* +3 puts origin in middle of zone */ long_origin_rad = DEG2RAD(long_origin); eccPrimeSquared = EccentricitySquared / ( 1.0 - EccentricitySquared ); N = EquatorialRadius / sqrt( 1.0 - EccentricitySquared * sin( lat_rad ) * sin( lat_rad ) ); T = tan( lat_rad ) * tan( lat_rad ); C = eccPrimeSquared * cos( lat_rad ) * cos( lat_rad ); A = cos( lat_rad ) * ( long_rad - long_origin_rad ); M = EquatorialRadius * ( ( 1.0 - EccentricitySquared / 4 - 3 * EccentricitySquared * EccentricitySquared / 64 - 5 * EccentricitySquared * EccentricitySquared * EccentricitySquared / 256 ) * lat_rad - ( 3 * EccentricitySquared / 8 + 3 * EccentricitySquared * EccentricitySquared / 32 + 45 * EccentricitySquared * EccentricitySquared * EccentricitySquared / 1024 ) * sin( 2 * lat_rad ) + ( 15 * EccentricitySquared * EccentricitySquared / 256 + 45 * EccentricitySquared * EccentricitySquared * EccentricitySquared / 1024 ) * sin( 4 * lat_rad ) - ( 35 * EccentricitySquared * EccentricitySquared * EccentricitySquared / 3072 ) * sin( 6 * lat_rad ) ); easting = K0 * N * ( A + ( 1 - T + C ) * A * A * A / 6 + ( 5 - 18 * T + T * T + 72 * C - 58 * eccPrimeSquared ) * A * A * A * A * A / 120 ) + 500000.0; northing = K0 * ( M + N * tan( lat_rad ) * ( A * A / 2 + ( 5 - T + 9 * C + 4 * C * C ) * A * A * A * A / 24 + ( 61 - 58 * T + T * T + 600 * C - 330 * eccPrimeSquared ) * A * A * A * A * A * A / 720 ) ); if ( latitude < 0.0 ) northing += 10000000.0; /* 1e7 meter offset for southern hemisphere */ utm->northing = northing; utm->easting = easting; utm->zone = zone; utm->letter = coords_utm_letter( latitude ); /* All done. */ } static char coords_utm_letter( double latitude ) { /* This routine determines the correct UTM letter designator for the ** given latitude. It returns 'Z' if the latitude is outside the UTM ** limits of 84N to 80S. */ if ( latitude <= 84.0 && latitude >= 72.0 ) return 'X'; else if ( latitude < 72.0 && latitude >= 64.0 ) return 'W'; else if ( latitude < 64.0 && latitude >= 56.0 ) return 'V'; else if ( latitude < 56.0 && latitude >= 48.0 ) return 'U'; else if ( latitude < 48.0 && latitude >= 40.0 ) return 'T'; else if ( latitude < 40.0 && latitude >= 32.0 ) return 'S'; else if ( latitude < 32.0 && latitude >= 24.0 ) return 'R'; else if ( latitude < 24.0 && latitude >= 16.0 ) return 'Q'; else if ( latitude < 16.0 && latitude >= 8.0 ) return 'P'; else if ( latitude < 8.0 && latitude >= 0.0 ) return 'N'; else if ( latitude < 0.0 && latitude >= -8.0 ) return 'M'; else if ( latitude < -8.0 && latitude >= -16.0 ) return 'L'; else if ( latitude < -16.0 && latitude >= -24.0 ) return 'K'; else if ( latitude < -24.0 && latitude >= -32.0 ) return 'J'; else if ( latitude < -32.0 && latitude >= -40.0 ) return 'H'; else if ( latitude < -40.0 && latitude >= -48.0 ) return 'G'; else if ( latitude < -48.0 && latitude >= -56.0 ) return 'F'; else if ( latitude < -56.0 && latitude >= -64.0 ) return 'E'; else if ( latitude < -64.0 && latitude >= -72.0 ) return 'D'; else if ( latitude < -72.0 && latitude >= -80.0 ) return 'C'; else return 'Z'; } void a_coords_utm_to_latlon( const struct UTM *utm, struct LatLon *latlon ) { double northing, easting; int zone; char letter[100]; double x, y; double eccPrimeSquared; double e1; double N1, T1, C1, R1, D, M; double long_origin; double mu, phi1_rad; int northernHemisphere; /* 1 for northern hemisphere, 0 for southern */ double latitude, longitude; northing = utm->northing; easting = utm->easting; zone = utm->zone; letter[0] = utm->letter; /* Now convert. */ x = easting - 500000.0; /* remove 500000 meter offset */ y = northing; if ( ( *letter - 'N' ) >= 0 ) northernHemisphere = 1; /* northern hemisphere */ else { northernHemisphere = 0; /* southern hemisphere */ y -= 10000000.0; /* remove 1e7 meter offset */ } long_origin = ( zone - 1 ) * 6 - 180 + 3; /* +3 puts origin in middle of zone */ eccPrimeSquared = EccentricitySquared / ( 1.0 - EccentricitySquared ); e1 = ( 1.0 - sqrt( 1.0 - EccentricitySquared ) ) / ( 1.0 + sqrt( 1.0 - EccentricitySquared ) ); M = y / K0; mu = M / ( EquatorialRadius * ( 1.0 - EccentricitySquared / 4 - 3 * EccentricitySquared * EccentricitySquared / 64 - 5 * EccentricitySquared * EccentricitySquared * EccentricitySquared / 256 ) ); phi1_rad = mu + ( 3 * e1 / 2 - 27 * e1 * e1 * e1 / 32 )* sin( 2 * mu ) + ( 21 * e1 * e1 / 16 - 55 * e1 * e1 * e1 * e1 / 32 ) * sin( 4 * mu ) + ( 151 * e1 * e1 * e1 / 96 ) * sin( 6 *mu ); N1 = EquatorialRadius / sqrt( 1.0 - EccentricitySquared * sin( phi1_rad ) * sin( phi1_rad ) ); T1 = tan( phi1_rad ) * tan( phi1_rad ); C1 = eccPrimeSquared * cos( phi1_rad ) * cos( phi1_rad ); R1 = EquatorialRadius * ( 1.0 - EccentricitySquared ) / pow( 1.0 - EccentricitySquared * sin( phi1_rad ) * sin( phi1_rad ), 1.5 ); D = x / ( N1 * K0 ); latitude = phi1_rad - ( N1 * tan( phi1_rad ) / R1 ) * ( D * D / 2 -( 5 + 3 * T1 + 10 * C1 - 4 * C1 * C1 - 9 * eccPrimeSquared ) * D * D * D * D / 24 + ( 61 + 90 * T1 + 298 * C1 + 45 * T1 * T1 - 252 * eccPrimeSquared - 3 * C1 * C1 ) * D * D * D * D * D * D / 720 ); latitude = RAD2DEG(latitude); longitude = ( D - ( 1 + 2 * T1 + C1 ) * D * D * D / 6 + ( 5 - 2 * C1 + 28 * T1 - 3 * C1 * C1 + 8 * eccPrimeSquared + 24 * T1 * T1 ) * D * D * D * D * D / 120 ) / cos( phi1_rad ); longitude = long_origin + RAD2DEG(longitude); /* Show results. */ latlon->lat = latitude; latlon->lon = longitude; } void a_coords_latlon_to_string ( const struct LatLon *latlon, gchar **lat, gchar **lon ) { g_return_if_fail ( latlon != NULL ); vik_degree_format_t format = a_vik_get_degree_format (); switch (format) { case VIK_DEGREE_FORMAT_DDD: *lat = convert_lat_dec_to_ddd ( latlon->lat ); *lon = convert_lon_dec_to_ddd ( latlon->lon ); break; case VIK_DEGREE_FORMAT_DMM: *lat = convert_lat_dec_to_dmm ( latlon->lat ); *lon = convert_lon_dec_to_dmm ( latlon->lon ); break; case VIK_DEGREE_FORMAT_DMS: *lat = convert_lat_dec_to_dms ( latlon->lat ); *lon = convert_lon_dec_to_dms ( latlon->lon ); break; default: g_critical("Houston, we've had a problem. format=%d", format); } } viking-1.4.2/src/vikexttool.c0000644000175000017500000001167612122673673013115 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2008, Guilhem Bonnefille * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "vikexttool.h" #include #include static GObjectClass *parent_class; static void ext_tool_finalize ( GObject *gob ); static gchar *ext_tool_get_label ( VikExtTool *vw ); typedef struct _VikExtToolPrivate VikExtToolPrivate; struct _VikExtToolPrivate { gint id; gchar *label; }; #define EXT_TOOL_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), \ VIK_EXT_TOOL_TYPE, \ VikExtToolPrivate)) G_DEFINE_ABSTRACT_TYPE (VikExtTool, vik_ext_tool, G_TYPE_OBJECT) enum { PROP_0, PROP_ID, PROP_LABEL, }; static void ext_tool_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { VikExtTool *self = VIK_EXT_TOOL (object); VikExtToolPrivate *priv = EXT_TOOL_GET_PRIVATE (self); switch (property_id) { case PROP_ID: priv->id = g_value_get_uint (value); g_debug ("VikExtTool.id: %d", priv->id); break; case PROP_LABEL: g_free (priv->label); priv->label = g_value_dup_string (value); g_debug ("VikExtTool.label: %s", priv->label); break; default: /* We don't have any other property... */ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void ext_tool_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { VikExtTool *self = VIK_EXT_TOOL (object); VikExtToolPrivate *priv = EXT_TOOL_GET_PRIVATE (self); switch (property_id) { case PROP_ID: g_value_set_uint (value, priv->id); break; case PROP_LABEL: g_value_set_string (value, priv->label); break; default: /* We don't have any other property... */ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void vik_ext_tool_class_init ( VikExtToolClass *klass ) { GObjectClass *gobject_class; GParamSpec *pspec; gobject_class = G_OBJECT_CLASS (klass); gobject_class->finalize = ext_tool_finalize; gobject_class->set_property = ext_tool_set_property; gobject_class->get_property = ext_tool_get_property; pspec = g_param_spec_string ("label", "Label", "Set the label", "" /* default value */, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE); g_object_class_install_property (gobject_class, PROP_LABEL, pspec); pspec = g_param_spec_uint ("id", "Id of the tool", "Set the id", 0 /* minimum value */, G_MAXUINT16 /* maximum value */, 0 /* default value */, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE); g_object_class_install_property (gobject_class, PROP_ID, pspec); klass->get_label = ext_tool_get_label; parent_class = g_type_class_peek_parent (klass); g_type_class_add_private (klass, sizeof (VikExtToolPrivate)); } static void vik_ext_tool_init ( VikExtTool *self ) { VikExtToolPrivate *priv = EXT_TOOL_GET_PRIVATE (self); priv->label = NULL; } static void ext_tool_finalize ( GObject *gob ) { VikExtToolPrivate *priv = EXT_TOOL_GET_PRIVATE ( gob ); g_free ( priv->label ); priv->label = NULL; G_OBJECT_CLASS(parent_class)->finalize(gob); } static gchar *ext_tool_get_label ( VikExtTool *self ) { VikExtToolPrivate *priv = NULL; priv = EXT_TOOL_GET_PRIVATE (self); return g_strdup ( priv->label ); } gchar *vik_ext_tool_get_label ( VikExtTool *w ) { return VIK_EXT_TOOL_GET_CLASS( w )->get_label( w ); } void vik_ext_tool_open ( VikExtTool *self, VikWindow *vwindow ) { VIK_EXT_TOOL_GET_CLASS( self )->open( self, vwindow ); } viking-1.4.2/src/viklayer.c0000644000175000017500000003463712175546146012537 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2005, Alex Foobarian * Copyright (C) 2003-2007, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include "viking.h" #include /* functions common to all layers. */ /* TODO longone: rename interface free -> finalize */ extern VikLayerInterface vik_aggregate_layer_interface; extern VikLayerInterface vik_trw_layer_interface; extern VikLayerInterface vik_maps_layer_interface; extern VikLayerInterface vik_coord_layer_interface; extern VikLayerInterface vik_georef_layer_interface; extern VikLayerInterface vik_gps_layer_interface; extern VikLayerInterface vik_dem_layer_interface; enum { VL_UPDATE_SIGNAL, VL_LAST_SIGNAL }; static guint layer_signals[VL_LAST_SIGNAL] = { 0 }; static GObjectClass *parent_class; static void vik_layer_finalize ( VikLayer *vl ); static gboolean vik_layer_properties_factory ( VikLayer *vl, VikViewport *vp ); G_DEFINE_TYPE (VikLayer, vik_layer, G_TYPE_OBJECT) static void vik_layer_class_init (VikLayerClass *klass) { GObjectClass *object_class; object_class = G_OBJECT_CLASS (klass); object_class->finalize = (GObjectFinalizeFunc) vik_layer_finalize; parent_class = g_type_class_peek_parent (klass); layer_signals[VL_UPDATE_SIGNAL] = g_signal_new ( "update", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, G_STRUCT_OFFSET (VikLayerClass, update), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); } /** * Invoke the actual drawing via signal method */ static gboolean idle_draw ( VikLayer *vl ) { g_signal_emit ( G_OBJECT(vl), layer_signals[VL_UPDATE_SIGNAL], 0 ); return FALSE; // Nothing else to do } /** * Draw specified layer */ void vik_layer_emit_update ( VikLayer *vl ) { if ( vl->visible && vl->realized ) { vik_window_set_redraw_trigger(vl); // Only ever draw when there is time to do so if ( g_thread_self() != vik_window_get_thread (VIK_WINDOW(VIK_GTK_WINDOW_FROM_LAYER(vl))) ) // Drawing requested from another (background) thread, so handle via the gdk thread method gdk_threads_add_idle ( (GSourceFunc) idle_draw, vl ); else g_idle_add ( (GSourceFunc) idle_draw, vl ); } } /** * should only be done by VikLayersPanel (hence never used from the background) * need to redraw and record trigger when we make a layer invisible. */ void vik_layer_emit_update_although_invisible ( VikLayer *vl ) { vik_window_set_redraw_trigger(vl); g_idle_add ( (GSourceFunc) idle_draw, vl ); } /* doesn't set the trigger. should be done by aggregate layer when child emits update. */ void vik_layer_emit_update_secondary ( VikLayer *vl ) { if ( vl->visible ) // TODO: this can used from the background - eg in acquire // so will need to flow background update status through too g_idle_add ( (GSourceFunc) idle_draw, vl ); } static VikLayerInterface *vik_layer_interfaces[VIK_LAYER_NUM_TYPES] = { &vik_aggregate_layer_interface, &vik_trw_layer_interface, &vik_coord_layer_interface, &vik_georef_layer_interface, &vik_gps_layer_interface, &vik_maps_layer_interface, &vik_dem_layer_interface, }; VikLayerInterface *vik_layer_get_interface ( gint type ) { g_assert ( type < VIK_LAYER_NUM_TYPES ); return vik_layer_interfaces[type]; } static void vik_layer_init ( VikLayer *vl ) { vl->visible = TRUE; vl->name = NULL; vl->realized = FALSE; } void vik_layer_set_type ( VikLayer *vl, gint type ) { vl->type = type; } /* frees old name */ void vik_layer_rename ( VikLayer *l, const gchar *new_name ) { g_assert ( l != NULL ); g_assert ( new_name != NULL ); g_free ( l->name ); l->name = g_strdup ( new_name ); } void vik_layer_rename_no_copy ( VikLayer *l, gchar *new_name ) { g_assert ( l != NULL ); g_assert ( new_name != NULL ); g_free ( l->name ); l->name = new_name; } const gchar *vik_layer_get_name ( VikLayer *l ) { g_assert ( l != NULL); return l->name; } VikLayer *vik_layer_create ( gint type, gpointer vp, GtkWindow *w, gboolean interactive ) { VikLayer *new_layer = NULL; g_assert ( type < VIK_LAYER_NUM_TYPES ); new_layer = vik_layer_interfaces[type]->create ( vp ); g_assert ( new_layer != NULL ); if ( interactive ) { if ( vik_layer_properties ( new_layer, vp ) ) /* We translate the name here */ /* in order to avoid translating name set by user */ vik_layer_rename ( VIK_LAYER(new_layer), _(vik_layer_interfaces[type]->name) ); else { g_object_unref ( G_OBJECT(new_layer) ); /* cancel that */ new_layer = NULL; } } return new_layer; } /* returns TRUE if OK was pressed */ gboolean vik_layer_properties ( VikLayer *layer, gpointer vp ) { if ( vik_layer_interfaces[layer->type]->properties ) return vik_layer_interfaces[layer->type]->properties ( layer, vp ); return vik_layer_properties_factory ( layer, vp ); } void vik_layer_draw ( VikLayer *l, gpointer data ) { if ( l->visible ) if ( vik_layer_interfaces[l->type]->draw ) vik_layer_interfaces[l->type]->draw ( l, data ); } void vik_layer_change_coord_mode ( VikLayer *l, VikCoordMode mode ) { if ( vik_layer_interfaces[l->type]->change_coord_mode ) vik_layer_interfaces[l->type]->change_coord_mode ( l, mode ); } typedef struct { gint layer_type; gint len; guint8 data[0]; } header_t; void vik_layer_marshall ( VikLayer *vl, guint8 **data, gint *len ) { header_t *header; if ( vl && vik_layer_interfaces[vl->type]->marshall ) { vik_layer_interfaces[vl->type]->marshall ( vl, data, len ); if (*data) { header = g_malloc(*len + sizeof(*header)); header->layer_type = vl->type; header->len = *len; memcpy(header->data, *data, *len); g_free(*data); *data = (guint8 *)header; *len = *len + sizeof(*header); } } else { *data = NULL; } } void vik_layer_marshall_params ( VikLayer *vl, guint8 **data, gint *datalen ) { VikLayerParam *params = vik_layer_get_interface(vl->type)->params; VikLayerFuncGetParam get_param = vik_layer_get_interface(vl->type)->get_param; GByteArray* b = g_byte_array_new (); gint len; #define vlm_append(obj, sz) \ len = (sz); \ g_byte_array_append ( b, (guint8 *)&len, sizeof(len) ); \ g_byte_array_append ( b, (guint8 *)(obj), len ); vlm_append(vl->name, strlen(vl->name)); if ( params && get_param ) { VikLayerParamData d; guint16 i, params_count = vik_layer_get_interface(vl->type)->params_count; for ( i = 0; i < params_count; i++ ) { g_debug("%s: %s", __FUNCTION__, params[i].name); d = get_param(vl, i, FALSE); switch ( params[i].type ) { case VIK_LAYER_PARAM_STRING: vlm_append(d.s, strlen(d.s)); break; /* print out the string list in the array */ case VIK_LAYER_PARAM_STRING_LIST: { GList *list = d.sl; /* write length of list (# of strings) */ gint listlen = g_list_length ( list ); g_byte_array_append ( b, (guint8 *)&listlen, sizeof(listlen) ); /* write each string */ while ( list ) { gchar *s = (gchar *) list->data; vlm_append(s, strlen(s)); list = list->next; } break; } default: vlm_append(&d, sizeof(d)); break; } } } *data = b->data; *datalen = b->len; g_byte_array_free ( b, FALSE ); #undef vlm_append } void vik_layer_unmarshall_params ( VikLayer *vl, guint8 *data, gint datalen, VikViewport *vvp ) { VikLayerParam *params = vik_layer_get_interface(vl->type)->params; VikLayerFuncSetParam set_param = vik_layer_get_interface(vl->type)->set_param; gchar *s; guint8 *b = (guint8 *)data; #define vlm_size (*(gint *)b) #define vlm_read(obj) \ memcpy((obj), b+sizeof(gint), vlm_size); \ b += sizeof(gint) + vlm_size; s = g_malloc(vlm_size + 1); s[vlm_size]=0; vlm_read(s); vik_layer_rename(vl, s); g_free(s); if ( params && set_param ) { VikLayerParamData d; guint16 i, params_count = vik_layer_get_interface(vl->type)->params_count; for ( i = 0; i < params_count; i++ ) { g_debug("%s: %s", __FUNCTION__, params[i].name); switch ( params[i].type ) { case VIK_LAYER_PARAM_STRING: s = g_malloc(vlm_size + 1); s[vlm_size]=0; vlm_read(s); d.s = s; set_param(vl, i, d, vvp, FALSE); g_free(s); break; case VIK_LAYER_PARAM_STRING_LIST: { gint listlen = vlm_size, j; GList *list = NULL; b += sizeof(gint); /* skip listlen */; for ( j = 0; j < listlen; j++ ) { /* get a string */ s = g_malloc(vlm_size + 1); s[vlm_size]=0; vlm_read(s); list = g_list_append ( list, s ); } d.sl = list; set_param(vl, i, d, vvp, FALSE); /* don't free -- string list is responsibility of the layer */ break; } default: vlm_read(&d); set_param(vl, i, d, vvp, FALSE); break; } } } } VikLayer *vik_layer_unmarshall ( guint8 *data, gint len, VikViewport *vvp ) { header_t *header; header = (header_t *)data; if ( vik_layer_interfaces[header->layer_type]->unmarshall ) { return vik_layer_interfaces[header->layer_type]->unmarshall ( header->data, header->len, vvp ); } else { return NULL; } } static void vik_layer_finalize ( VikLayer *vl ) { g_assert ( vl != NULL ); if ( vik_layer_interfaces[vl->type]->free ) vik_layer_interfaces[vl->type]->free ( vl ); if ( vl->name ) g_free ( vl->name ); G_OBJECT_CLASS(parent_class)->finalize(G_OBJECT(vl)); } /* sublayer switching */ gboolean vik_layer_sublayer_toggle_visible ( VikLayer *l, gint subtype, gpointer sublayer ) { if ( vik_layer_interfaces[l->type]->sublayer_toggle_visible ) return vik_layer_interfaces[l->type]->sublayer_toggle_visible ( l, subtype, sublayer ); return TRUE; /* if unknown, will always be visible */ } gboolean vik_layer_selected ( VikLayer *l, gint subtype, gpointer sublayer, gint type, gpointer vlp ) { if ( vik_layer_interfaces[l->type]->layer_selected ) return vik_layer_interfaces[l->type]->layer_selected ( l, subtype, sublayer, type, vlp ); /* Since no 'layer_selected' function explicitly turn off here */ return vik_window_clear_highlight ( (VikWindow *)VIK_GTK_WINDOW_FROM_LAYER(l) ); } void vik_layer_realize ( VikLayer *l, VikTreeview *vt, GtkTreeIter *layer_iter ) { l->vt = vt; l->iter = *layer_iter; l->realized = TRUE; if ( vik_layer_interfaces[l->type]->realize ) vik_layer_interfaces[l->type]->realize ( l, vt, layer_iter ); } void vik_layer_set_menu_items_selection(VikLayer *l, guint16 selection) { if ( vik_layer_interfaces[l->type]->set_menu_selection ) vik_layer_interfaces[l->type]->set_menu_selection ( l, selection ); } guint16 vik_layer_get_menu_items_selection(VikLayer *l) { if ( vik_layer_interfaces[l->type]->get_menu_selection ) return(vik_layer_interfaces[l->type]->get_menu_selection (l)); else return(vik_layer_interfaces[l->type]->menu_items_selection); } void vik_layer_add_menu_items ( VikLayer *l, GtkMenu *menu, gpointer vlp ) { if ( vik_layer_interfaces[l->type]->add_menu_items ) vik_layer_interfaces[l->type]->add_menu_items ( l, menu, vlp ); } gboolean vik_layer_sublayer_add_menu_items ( VikLayer *l, GtkMenu *menu, gpointer vlp, gint subtype, gpointer sublayer, GtkTreeIter *iter, VikViewport *vvp ) { if ( vik_layer_interfaces[l->type]->sublayer_add_menu_items ) return vik_layer_interfaces[l->type]->sublayer_add_menu_items ( l, menu, vlp, subtype, sublayer, iter, vvp ); return FALSE; } const gchar *vik_layer_sublayer_rename_request ( VikLayer *l, const gchar *newname, gpointer vlp, gint subtype, gpointer sublayer, GtkTreeIter *iter ) { if ( vik_layer_interfaces[l->type]->sublayer_rename_request ) return vik_layer_interfaces[l->type]->sublayer_rename_request ( l, newname, vlp, subtype, sublayer, iter ); return NULL; } const gchar* vik_layer_sublayer_tooltip ( VikLayer *l, gint subtype, gpointer sublayer ) { if ( vik_layer_interfaces[l->type]->sublayer_tooltip ) return vik_layer_interfaces[l->type]->sublayer_tooltip ( l, subtype, sublayer ); return NULL; } const gchar* vik_layer_layer_tooltip ( VikLayer *l ) { if ( vik_layer_interfaces[l->type]->layer_tooltip ) return vik_layer_interfaces[l->type]->layer_tooltip ( l ); return NULL; } GdkPixbuf *vik_layer_load_icon ( gint type ) { g_assert ( type < VIK_LAYER_NUM_TYPES ); if ( vik_layer_interfaces[type]->icon ) return gdk_pixbuf_from_pixdata ( vik_layer_interfaces[type]->icon, FALSE, NULL ); return NULL; } gboolean vik_layer_set_param ( VikLayer *layer, guint16 id, VikLayerParamData data, gpointer vp, gboolean is_file_operation ) { if ( vik_layer_interfaces[layer->type]->set_param ) return vik_layer_interfaces[layer->type]->set_param ( layer, id, data, vp, is_file_operation ); return FALSE; } void vik_layer_post_read ( VikLayer *layer, VikViewport *vp, gboolean from_file ) { if ( vik_layer_interfaces[layer->type]->post_read ) vik_layer_interfaces[layer->type]->post_read ( layer, vp, from_file ); } static gboolean vik_layer_properties_factory ( VikLayer *vl, VikViewport *vp ) { switch ( a_uibuilder_properties_factory ( _("Layer Properties"), VIK_GTK_WINDOW_FROM_WIDGET(vp), vik_layer_interfaces[vl->type]->params, vik_layer_interfaces[vl->type]->params_count, vik_layer_interfaces[vl->type]->params_groups, vik_layer_interfaces[vl->type]->params_groups_count, (gpointer) vik_layer_interfaces[vl->type]->set_param, vl, vp, (gpointer) vik_layer_interfaces[vl->type]->get_param, vl) ) { case 0: case 3: return FALSE; /* redraw (?) */ case 2: vik_layer_post_read ( vl, vp, FALSE ); /* update any gc's */ default: return TRUE; } } viking-1.4.2/src/vikmaptype.h0000644000175000017500000000360712175546146013100 00000000000000/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * viking * Copyright (C) 2009, Guilhem Bonnefille * * viking is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * viking is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef _VIK_MAP_TYPE_H_ #define _VIK_MAP_TYPE_H_ #include #include "vikmapsource.h" #include "vikmapslayer_compat.h" G_BEGIN_DECLS #define VIK_TYPE_MAP_TYPE (vik_map_type_get_type ()) #define VIK_MAP_TYPE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIK_TYPE_MAP_TYPE, VikMapType)) #define VIK_MAP_TYPE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VIK_TYPE_MAP_TYPE, VikMapTypeClass)) #define VIK_IS_MAP_TYPE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIK_TYPE_MAP_TYPE)) #define VIK_IS_MAP_TYPE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VIK_TYPE_MAP_TYPE)) #define VIK_MAP_TYPE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VIK_TYPE_MAP_TYPE, VikMapTypeClass)) typedef struct _VikMapTypeClass VikMapTypeClass; typedef struct _VikMapType VikMapType; struct _VikMapTypeClass { VikMapSourceClass parent_class; }; struct _VikMapType { VikMapSource parent_instance; }; GType vik_map_type_get_type (void) G_GNUC_CONST; VikMapType *vik_map_type_new_with_id (VikMapsLayer_MapType map_type, const char *label); G_END_DECLS #endif /* _VIK_MAP_TYPE_H_ */ viking-1.4.2/src/vikgeoreflayer.h0000644000175000017500000000323312122673673013716 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef _VIKING_GEOREFLAYER_H #define _VIKING_GEOREFLAYER_H #include "viklayer.h" G_BEGIN_DECLS #define VIK_GEOREF_LAYER_TYPE (vik_georef_layer_get_type ()) #define VIK_GEOREF_LAYER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIK_GEOREF_LAYER_TYPE, VikGeorefLayer)) #define VIK_GEOREF_LAYER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VIK_GEOREF_LAYER_TYPE, VikGeorefLayerClass)) #define IS_VIK_GEOREF_LAYER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIK_GEOREF_LAYER_TYPE)) #define IS_VIK_GEOREF_LAYER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VIK_GEOREF_LAYER_TYPE)) typedef struct _VikGeorefLayerClass VikGeorefLayerClass; struct _VikGeorefLayerClass { VikLayerClass object_class; }; GType vik_georef_layer_get_type (); typedef struct _VikGeorefLayer VikGeorefLayer; G_END_DECLS #endif viking-1.4.2/src/vikwebtoolbounds.h0000644000175000017500000000414412122673673014302 00000000000000/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2011, Rob Norris * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef _VIKING_WEBTOOL_BOUNDS_H #define _VIKING_WEBTOOL_BOUNDS_H #include #include "vikwebtool.h" G_BEGIN_DECLS #define VIK_WEBTOOL_BOUNDS_TYPE (vik_webtool_bounds_get_type ()) #define VIK_WEBTOOL_BOUNDS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIK_WEBTOOL_BOUNDS_TYPE, VikWebtoolBounds)) #define VIK_WEBTOOL_BOUNDS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VIK_WEBTOOL_BOUNDS_TYPE, VikWebtoolBoundsClass)) #define IS_VIK_WEBTOOL_BOUNDS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIK_WEBTOOL_BOUNDS_TYPE)) #define IS_VIK_WEBTOOL_BOUNDS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VIK_WEBTOOL_BOUNDS_TYPE)) #define VIK_WEBTOOL_BOUNDS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VIK_WEBTOOL_BOUNDS_TYPE, VikWebtoolBoundsClass)) typedef struct _VikWebtoolBounds VikWebtoolBounds; typedef struct _VikWebtoolBoundsClass VikWebtoolBoundsClass; struct _VikWebtoolBoundsClass { VikWebtoolClass object_class; }; GType vik_webtool_bounds_get_type (); struct _VikWebtoolBounds { VikWebtool obj; }; VikWebtoolBounds* vik_webtool_bounds_new ( ); VikWebtoolBounds* vik_webtool_bounds_new_with_members ( const gchar *label, const gchar *url ); G_END_DECLS #endif viking-1.4.2/src/dems.h0000644000175000017500000000301312175546146011626 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2008, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef __VIKING_DEMS_H #define __VIKING_DEMS_H #include "dem.h" #include "vikcoord.h" G_BEGIN_DECLS typedef enum { VIK_DEM_INTERPOL_NONE = 0, VIK_DEM_INTERPOL_SIMPLE, VIK_DEM_INTERPOL_BEST, } VikDemInterpol; void a_dems_uninit (); VikDEM *a_dems_load(const gchar *filename); void a_dems_unref(const gchar *filename); VikDEM *a_dems_get(const gchar *filename); int a_dems_load_list ( GList **dems, gpointer threaddata ); void a_dems_list_free ( GList *dems ); GList *a_dems_list_copy ( GList *dems ); gint16 a_dems_list_get_elev_by_coord ( GList *dems, const VikCoord *coord ); gint16 a_dems_get_elev_by_coord ( const VikCoord *coord, VikDemInterpol method); G_BEGIN_DECLS #endif viking-1.4.2/src/vikradiogroup.h0000644000175000017500000000364312122673673013572 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef _VIKING_RADIOGROUP_H #define _VIKING_RADIOGROUP_H #include #include #include G_BEGIN_DECLS #define VIK_RADIO_GROUP_TYPE (vik_radio_group_get_type ()) #define VIK_RADIO_GROUP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIK_RADIO_GROUP_TYPE, VikRadioGroup)) #define VIK_RADIO_GROUP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VIK_RADIO_GROUP_TYPE, VikRadioGroupClass)) #define IS_VIK_RADIO_GROUP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIK_RADIO_GROUP_TYPE)) #define IS_VIK_RADIO_GROUP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VIK_RADIO_GROUP_TYPE)) typedef struct _VikRadioGroup VikRadioGroup; typedef struct _VikRadioGroupClass VikRadioGroupClass; struct _VikRadioGroupClass { GtkVBoxClass vbox_class; }; GType vik_radio_group_get_type (); GtkWidget *vik_radio_group_new ( GList *options ); void vik_radio_group_set_selected ( VikRadioGroup *vrg, guint8 i ); guint8 vik_radio_group_get_selected ( VikRadioGroup *vrg ); GtkWidget *vik_radio_group_new_static ( const gchar **options ); G_END_DECLS #endif viking-1.4.2/src/viktrack.h0000644000175000017500000001345612175546146012530 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef _VIKING_TRACK_H #define _VIKING_TRACK_H #include #include #include #include "vikcoord.h" G_BEGIN_DECLS /* todo important: put these in their own header file, maybe.probably also rename */ #define VIK_TRACK(x) ((VikTrack *)(x)) #define VIK_TRACKPOINT(x) ((VikTrackpoint *)(x)) typedef struct _VikTrackpoint VikTrackpoint; struct _VikTrackpoint { VikCoord coord; gboolean newsegment; gboolean has_timestamp; time_t timestamp; gdouble altitude; /* VIK_DEFAULT_ALTITUDE if data unavailable */ gdouble speed; /* NAN if data unavailable */ gdouble course; /* NAN if data unavailable */ guint nsats; /* number of satellites used. 0 if data unavailable */ #define VIK_GPS_MODE_NOT_SEEN 0 /* mode update not seen yet */ #define VIK_GPS_MODE_NO_FIX 1 /* none */ #define VIK_GPS_MODE_2D 2 /* good for latitude/longitude */ #define VIK_GPS_MODE_3D 3 /* good for altitude/climb too */ gint fix_mode; /* VIK_GPS_MODE_NOT_SEEN if data unavailable */ gdouble hdop; /* VIK_DEFAULT_DOP if data unavailable */ gdouble vdop; /* VIK_DEFAULT_DOP if data unavailable */ gdouble pdop; /* VIK_DEFAULT_DOP if data unavailable */ }; // Instead of having a separate VikRoute type, routes are considered tracks // Thus all track operations must cope with a 'route' version // [track functions handle having no timestamps anyway - so there is no practical difference in most cases] // This is simpler than having to rewrite particularly every track function for route version // given that they do the same things // Mostly this matters in the display in deciding where and how they are shown typedef struct _VikTrack VikTrack; struct _VikTrack { GList *trackpoints; gboolean visible; gboolean is_route; gchar *comment; gchar *description; guint8 ref_count; gchar *name; GtkWidget *property_dialog; gboolean has_color; GdkColor color; }; VikTrack *vik_track_new(); void vik_track_set_name(VikTrack *tr, const gchar *name); void vik_track_set_comment(VikTrack *tr, const gchar *comment); void vik_track_set_description(VikTrack *tr, const gchar *description); void vik_track_ref(VikTrack *tr); void vik_track_free(VikTrack *tr); VikTrack *vik_track_copy ( const VikTrack *tr, gboolean copy_points ); void vik_track_set_comment_no_copy(VikTrack *tr, gchar *comment); VikTrackpoint *vik_trackpoint_new(); void vik_trackpoint_free(VikTrackpoint *tp); VikTrackpoint *vik_trackpoint_copy(VikTrackpoint *tp); gdouble vik_track_get_length(const VikTrack *tr); gdouble vik_track_get_length_including_gaps(const VikTrack *tr); gulong vik_track_get_tp_count(const VikTrack *tr); guint vik_track_get_segment_count(const VikTrack *tr); VikTrack **vik_track_split_into_segments(VikTrack *tr, guint *ret_len); guint vik_track_merge_segments(VikTrack *tr); void vik_track_reverse(VikTrack *tr); gulong vik_track_get_dup_point_count ( const VikTrack *vt ); gulong vik_track_remove_dup_points ( VikTrack *vt ); gulong vik_track_get_same_time_point_count ( const VikTrack *vt ); gulong vik_track_remove_same_time_points ( VikTrack *vt ); void vik_track_to_routepoints ( VikTrack *tr ); gdouble vik_track_get_max_speed(const VikTrack *tr); gdouble vik_track_get_average_speed(const VikTrack *tr); gdouble vik_track_get_average_speed_moving ( const VikTrack *tr, int stop_length_seconds ); void vik_track_convert ( VikTrack *tr, VikCoordMode dest_mode ); gdouble *vik_track_make_elevation_map ( const VikTrack *tr, guint16 num_chunks ); void vik_track_get_total_elevation_gain(const VikTrack *tr, gdouble *up, gdouble *down); VikTrackpoint *vik_track_get_closest_tp_by_percentage_dist ( VikTrack *tr, gdouble reldist, gdouble *meters_from_start ); VikTrackpoint *vik_track_get_closest_tp_by_percentage_time ( VikTrack *tr, gdouble reldist, time_t *seconds_from_start ); VikTrackpoint *vik_track_get_tp_by_max_speed ( const VikTrack *tr ); VikTrackpoint *vik_track_get_tp_by_max_alt ( const VikTrack *tr ); VikTrackpoint *vik_track_get_tp_by_min_alt ( const VikTrack *tr ); gdouble *vik_track_make_gradient_map ( const VikTrack *tr, guint16 num_chunks ); gdouble *vik_track_make_speed_map ( const VikTrack *tr, guint16 num_chunks ); gdouble *vik_track_make_distance_map ( const VikTrack *tr, guint16 num_chunks ); gdouble *vik_track_make_elevation_time_map ( const VikTrack *tr, guint16 num_chunks ); gdouble *vik_track_make_speed_dist_map ( const VikTrack *tr, guint16 num_chunks ); gboolean vik_track_get_minmax_alt ( const VikTrack *tr, gdouble *min_alt, gdouble *max_alt ); void vik_track_marshall ( VikTrack *tr, guint8 **data, guint *len); VikTrack *vik_track_unmarshall (guint8 *data, guint datalen); void vik_track_apply_dem_data ( VikTrack *tr); void vik_track_apply_dem_data_last_trackpoint ( VikTrack *tr ); void vik_track_steal_and_append_trackpoints ( VikTrack *t1, VikTrack *t2 ); VikCoord *vik_track_cut_back_to_double_point ( VikTrack *tr ); void vik_track_set_property_dialog(VikTrack *tr, GtkWidget *dialog); void vik_track_clear_property_dialog(VikTrack *tr); G_END_DECLS #endif viking-1.4.2/src/google.h0000644000175000017500000000164711745373131012157 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef __VIKING_GOOGLE_H #define __VIKING_GOOGLE_H void google_init(); #endif viking-1.4.2/src/viklayer.h0000644000175000017500000003350112175546146012531 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef _VIKING_LAYER_H #define _VIKING_LAYER_H #include #include #include #include #include "uibuilder.h" #include "vikwindow.h" #include "viktreeview.h" #include "vikviewport.h" G_BEGIN_DECLS #define VIK_LAYER_TYPE (vik_layer_get_type ()) #define VIK_LAYER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIK_LAYER_TYPE, VikLayer)) #define VIK_LAYER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VIK_LAYER_TYPE, VikLayerClass)) #define IS_VIK_LAYER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIK_LAYER_TYPE)) #define IS_VIK_LAYER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VIK_LAYER_TYPE)) typedef struct _VikLayer VikLayer; typedef struct _VikLayerClass VikLayerClass; struct _VikLayerClass { GObjectClass object_class; void (* update) (VikLayer *vl); }; GType vik_layer_get_type (); struct _VikLayer { GObject obj; gchar *name; gboolean visible; gboolean realized; VikTreeview *vt; /* simply a reference */ GtkTreeIter iter; /* for explicit "polymorphism" (function type switching) */ guint16 type; }; enum { VIK_LAYER_AGGREGATE = 0, VIK_LAYER_TRW, VIK_LAYER_COORD, VIK_LAYER_GEOREF, VIK_LAYER_GPS, VIK_LAYER_MAPS, VIK_LAYER_DEM, VIK_LAYER_NUM_TYPES }; /* I think most of these are ignored, * returning GRAB_FOCUS grabs the focus for mouse move, * mouse click, release always grabs focus. Focus allows key presses * to be handled. * It used to be that, if ignored, Viking could look for other layers. * this was useful for clicking a way/trackpoint in any layer, * if no layer was selected (find way/trackpoint) */ typedef enum { VIK_LAYER_TOOL_IGNORED=0, VIK_LAYER_TOOL_ACK, VIK_LAYER_TOOL_ACK_REDRAW_ABOVE, VIK_LAYER_TOOL_ACK_REDRAW_ALL, VIK_LAYER_TOOL_ACK_REDRAW_IF_VISIBLE, VIK_LAYER_TOOL_ACK_GRAB_FOCUS, /* only for move */ } VikLayerToolFuncStatus; /* gpointer is tool-specific state created in the constructor */ typedef gpointer (*VikToolConstructorFunc) (VikWindow *, VikViewport *); typedef void (*VikToolDestructorFunc) (gpointer); typedef VikLayerToolFuncStatus (*VikToolMouseFunc) (VikLayer *, GdkEventButton *, gpointer); typedef VikLayerToolFuncStatus (*VikToolMouseMoveFunc) (VikLayer *, GdkEventMotion *, gpointer); typedef void (*VikToolActivationFunc) (VikLayer *, gpointer); typedef gboolean (*VikToolKeyFunc) (VikLayer *, GdkEventKey *, gpointer); typedef struct _VikToolInterface VikToolInterface; struct _VikToolInterface { GtkRadioActionEntry radioActionEntry; VikToolConstructorFunc create; VikToolDestructorFunc destroy; VikToolActivationFunc activate; VikToolActivationFunc deactivate; VikToolMouseFunc click; VikToolMouseMoveFunc move; VikToolMouseFunc release; VikToolKeyFunc key_press; /* return FALSE if we don't use the key press -- should return FALSE most of the time if we want any shortcuts / UI keybindings to work! use sparingly. */ gboolean pan_handler; // Call click & release funtions even when 'Pan Mode' is on GdkCursorType cursor_type; const GdkPixdata *cursor_data; const GdkCursor *cursor; }; /* Parameters (for I/O and Properties) */ /* --> moved to uibuilder.h */ /* layer interface functions */ /* Create a new layer of a certain type. Should be filled with defaults */ typedef VikLayer * (*VikLayerFuncCreate) (VikViewport *); /* normally only needed for layers with sublayers. This is called when they * are added to the treeview so they can add sublayers to the treeview. */ typedef void (*VikLayerFuncRealize) (VikLayer *,VikTreeview *,GtkTreeIter *); /* rarely used, this is called after a read operation or properties box is run. * usually used to create GC's that depend on params, * but GC's can also be created from create() or set_param() */ typedef void (*VikLayerFuncPostRead) (VikLayer *,VikViewport *vp,gboolean from_file); typedef void (*VikLayerFuncFree) (VikLayer *); /* do _not_ use this unless absolutely neccesary. Use the dynamic properties (see coordlayer for example) * returns TRUE if OK was pressed */ typedef gboolean (*VikLayerFuncProperties) (VikLayer *,VikViewport *); typedef void (*VikLayerFuncDraw) (VikLayer *,VikViewport *); typedef void (*VikLayerFuncChangeCoordMode) (VikLayer *,VikCoordMode); typedef void (*VikLayerFuncSetMenuItemsSelection) (VikLayer *,guint16); typedef guint16 (*VikLayerFuncGetMenuItemsSelection) (VikLayer *); typedef void (*VikLayerFuncAddMenuItems) (VikLayer *,GtkMenu *,gpointer); /* gpointer is a VikLayersPanel */ typedef gboolean (*VikLayerFuncSublayerAddMenuItems) (VikLayer *,GtkMenu *,gpointer, /* first gpointer is a VikLayersPanel */ gint,gpointer,GtkTreeIter *,VikViewport *); typedef const gchar * (*VikLayerFuncSublayerRenameRequest) (VikLayer *,const gchar *,gpointer, gint,VikViewport *,GtkTreeIter *); /* first gpointer is a VikLayersPanel */ typedef gboolean (*VikLayerFuncSublayerToggleVisible) (VikLayer *,gint,gpointer); typedef const gchar * (*VikLayerFuncSublayerTooltip) (VikLayer *,gint,gpointer); typedef const gchar * (*VikLayerFuncLayerTooltip) (VikLayer *); typedef gboolean (*VikLayerFuncLayerSelected) (VikLayer *,gint,gpointer,gint,gpointer); /* 2nd gpointer is a VikLayersPanel */ typedef void (*VikLayerFuncMarshall) (VikLayer *, guint8 **, gint *); typedef VikLayer * (*VikLayerFuncUnmarshall) (guint8 *, gint, VikViewport *); /* returns TRUE if needs to redraw due to changed param */ /* in parameter gboolean denotes if for file I/O, as opposed to display/cut/copy etc... operations */ typedef gboolean (*VikLayerFuncSetParam) (VikLayer *, guint16, VikLayerParamData, VikViewport *, gboolean); /* in parameter gboolean denotes if for file I/O, as opposed to display/cut/copy etc... operations */ typedef VikLayerParamData (*VikLayerFuncGetParam) (VikLayer *, guint16, gboolean); typedef gboolean (*VikLayerFuncReadFileData) (VikLayer *, FILE *); // Should report success or failure typedef void (*VikLayerFuncWriteFileData) (VikLayer *, FILE *); /* item manipulation */ typedef void (*VikLayerFuncDeleteItem) (VikLayer *, gint, gpointer); /* layer, subtype, pointer to sub-item */ typedef void (*VikLayerFuncCutItem) (VikLayer *, gint, gpointer); typedef void (*VikLayerFuncCopyItem) (VikLayer *, gint, gpointer, guint8 **, guint *); /* layer, subtype, pointer to sub-item, return pointer, return len */ typedef gboolean (*VikLayerFuncPasteItem) (VikLayer *, gint, guint8 *, guint); typedef void (*VikLayerFuncFreeCopiedItem) (gint, gpointer); /* treeview drag and drop method. called on the destination layer. it is given a source and destination layer, * and the source and destination iters in the treeview. */ typedef void (*VikLayerFuncDragDropRequest) (VikLayer *, VikLayer *, GtkTreeIter *, GtkTreePath *); typedef gboolean (*VikLayerFuncSelectClick) (VikLayer *, GdkEventButton *, VikViewport *, tool_ed_t*); typedef gboolean (*VikLayerFuncSelectMove) (VikLayer *, GdkEventButton *, VikViewport *, tool_ed_t*); typedef gboolean (*VikLayerFuncSelectRelease) (VikLayer *, GdkEventButton *, VikViewport *, tool_ed_t*); typedef gboolean (*VikLayerFuncSelectedViewportMenu) (VikLayer *, GdkEventButton *, VikViewport *); typedef enum { VIK_MENU_ITEM_PROPERTY=1, VIK_MENU_ITEM_CUT=2, VIK_MENU_ITEM_COPY=4, VIK_MENU_ITEM_PASTE=8, VIK_MENU_ITEM_DELETE=16, VIK_MENU_ITEM_ALL=0xff } VikStdLayerMenuItem; typedef struct _VikLayerInterface VikLayerInterface; /* See vik_layer_* for function parameter names */ struct _VikLayerInterface { const gchar * fixed_layer_name; // Used in .vik files - this should never change to maintain file compatibility const gchar * name; // Translate-able name used for display purposes const gchar * accelerator; const GdkPixdata * icon; VikToolInterface * tools; guint16 tools_count; /* for I/O reading to and from .vik files -- params like coordline width, color, etc. */ VikLayerParam * params; guint16 params_count; gchar ** params_groups; guint8 params_groups_count; /* menu items to be created */ VikStdLayerMenuItem menu_items_selection; VikLayerFuncCreate create; VikLayerFuncRealize realize; VikLayerFuncPostRead post_read; VikLayerFuncFree free; VikLayerFuncProperties properties; VikLayerFuncDraw draw; VikLayerFuncChangeCoordMode change_coord_mode; VikLayerFuncSetMenuItemsSelection set_menu_selection; VikLayerFuncGetMenuItemsSelection get_menu_selection; VikLayerFuncAddMenuItems add_menu_items; VikLayerFuncSublayerAddMenuItems sublayer_add_menu_items; VikLayerFuncSublayerRenameRequest sublayer_rename_request; VikLayerFuncSublayerToggleVisible sublayer_toggle_visible; VikLayerFuncSublayerTooltip sublayer_tooltip; VikLayerFuncLayerTooltip layer_tooltip; VikLayerFuncLayerSelected layer_selected; VikLayerFuncMarshall marshall; VikLayerFuncUnmarshall unmarshall; /* for I/O */ VikLayerFuncSetParam set_param; VikLayerFuncGetParam get_param; /* for I/O -- extra non-param data like TrwLayer data */ VikLayerFuncReadFileData read_file_data; VikLayerFuncWriteFileData write_file_data; VikLayerFuncDeleteItem delete_item; VikLayerFuncCutItem cut_item; VikLayerFuncCopyItem copy_item; VikLayerFuncPasteItem paste_item; VikLayerFuncFreeCopiedItem free_copied_item; VikLayerFuncDragDropRequest drag_drop_request; VikLayerFuncSelectClick select_click; VikLayerFuncSelectMove select_move; VikLayerFuncSelectRelease select_release; VikLayerFuncSelectedViewportMenu show_viewport_menu; }; VikLayerInterface *vik_layer_get_interface ( gint type ); void vik_layer_set_type ( VikLayer *vl, gint type ); void vik_layer_draw ( VikLayer *l, gpointer data ); void vik_layer_change_coord_mode ( VikLayer *l, VikCoordMode mode ); void vik_layer_rename ( VikLayer *l, const gchar *new_name ); void vik_layer_rename_no_copy ( VikLayer *l, gchar *new_name ); const gchar *vik_layer_get_name ( VikLayer *l ); gboolean vik_layer_set_param (VikLayer *layer, guint16 id, VikLayerParamData data, gpointer vp, gboolean is_file_operation); void vik_layer_emit_update ( VikLayer *vl ); /* GUI */ void vik_layer_set_menu_items_selection(VikLayer *l, guint16 selection); guint16 vik_layer_get_menu_items_selection(VikLayer *l); void vik_layer_add_menu_items ( VikLayer *l, GtkMenu *menu, gpointer vlp ); VikLayer *vik_layer_create ( gint type, gpointer vp, GtkWindow *w, gboolean interactive ); gboolean vik_layer_properties ( VikLayer *layer, gpointer vp ); void vik_layer_realize ( VikLayer *l, VikTreeview *vt, GtkTreeIter * layer_iter ); void vik_layer_post_read ( VikLayer *layer, VikViewport *vp, gboolean from_file ); gboolean vik_layer_sublayer_add_menu_items ( VikLayer *l, GtkMenu *menu, gpointer vlp, gint subtype, gpointer sublayer, GtkTreeIter *iter, VikViewport *vvp ); VikLayer *vik_layer_copy ( VikLayer *vl, gpointer vp ); void vik_layer_marshall ( VikLayer *vl, guint8 **data, gint *len ); VikLayer *vik_layer_unmarshall ( guint8 *data, gint len, VikViewport *vvp ); void vik_layer_marshall_params ( VikLayer *vl, guint8 **data, gint *len ); void vik_layer_unmarshall_params ( VikLayer *vl, guint8 *data, gint len, VikViewport *vvp ); const gchar *vik_layer_sublayer_rename_request ( VikLayer *l, const gchar *newname, gpointer vlp, gint subtype, gpointer sublayer, GtkTreeIter *iter ); gboolean vik_layer_sublayer_toggle_visible ( VikLayer *l, gint subtype, gpointer sublayer ); const gchar* vik_layer_sublayer_tooltip ( VikLayer *l, gint subtype, gpointer sublayer ); const gchar* vik_layer_layer_tooltip ( VikLayer *l ); gboolean vik_layer_selected ( VikLayer *l, gint subtype, gpointer sublayer, gint type, gpointer vlp ); /* TODO: put in layerspanel */ GdkPixbuf *vik_layer_load_icon ( gint type ); VikLayer *vik_layer_get_and_reset_trigger(); void vik_layer_emit_update_secondary ( VikLayer *vl ); /* to be called by aggregate layer only. doesn't set the trigger */ void vik_layer_emit_update_although_invisible ( VikLayer *vl ); G_END_DECLS #endif viking-1.4.2/src/docbook2documenters.xsl0000644000175000017500000000265511633156111015226 00000000000000 /* Generated file. */ const gchar *DOCUMENTERS[] = {\ " ",\ NULL}; viking-1.4.2/src/vikfileentry.c0000644000175000017500000000642412175546146013415 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include "vikfileentry.h" static void choose_file ( VikFileEntry *vfe ); struct _VikFileEntry { GtkHBox parent; GtkWidget *entry, *button; GtkWidget *file_selector; GtkFileChooserAction action; }; GType vik_file_entry_get_type (void) { static GType vs_type = 0; if (!vs_type) { static const GTypeInfo vs_info = { sizeof (VikFileEntryClass), NULL, /* base_init */ NULL, /* base_finalize */ NULL, /* class init */ NULL, /* class_finalize */ NULL, /* class_data */ sizeof (VikFileEntry), 0, NULL /* instance init */ }; vs_type = g_type_register_static ( GTK_TYPE_HBOX, "VikFileEntry", &vs_info, 0 ); } return vs_type; } GtkWidget *vik_file_entry_new (GtkFileChooserAction action) { VikFileEntry *vfe = VIK_FILE_ENTRY ( g_object_new ( VIK_FILE_ENTRY_TYPE, NULL ) ); vfe->entry = gtk_entry_new (); vfe->button = gtk_button_new_with_label ( _("Browse...") ); vfe->action = action; g_signal_connect_swapped ( G_OBJECT(vfe->button), "clicked", G_CALLBACK(choose_file), vfe ); gtk_box_pack_start ( GTK_BOX(vfe), vfe->entry, TRUE, TRUE, 3 ); gtk_box_pack_start ( GTK_BOX(vfe), vfe->button, FALSE, FALSE, 3 ); vfe->file_selector = NULL; return GTK_WIDGET(vfe); } G_CONST_RETURN gchar *vik_file_entry_get_filename ( VikFileEntry *vfe ) { return gtk_entry_get_text ( GTK_ENTRY(vfe->entry) ); } void vik_file_entry_set_filename ( VikFileEntry *vfe, const gchar *filename ) { gtk_entry_set_text ( GTK_ENTRY(vfe->entry), filename ); } static void choose_file ( VikFileEntry *vfe ) { if ( ! vfe->file_selector ) { GtkWidget *win; g_assert ( (win = gtk_widget_get_toplevel(GTK_WIDGET(vfe))) ); vfe->file_selector = gtk_file_chooser_dialog_new (_("Choose file"), GTK_WINDOW(win), vfe->action, /* open file or directory */ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL); gtk_window_set_transient_for ( GTK_WINDOW(vfe->file_selector), GTK_WINDOW(win) ); gtk_window_set_destroy_with_parent ( GTK_WINDOW(vfe->file_selector), TRUE ); } if ( gtk_dialog_run ( GTK_DIALOG(vfe->file_selector) ) == GTK_RESPONSE_ACCEPT ) gtk_entry_set_text ( GTK_ENTRY (vfe->entry), gtk_file_chooser_get_filename ( GTK_FILE_CHOOSER(vfe->file_selector) ) ); gtk_widget_hide ( vfe->file_selector ); } viking-1.4.2/src/curl_download.h0000644000175000017500000000264612122673673013543 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef _VIKING_CURL_DOWNLOAD_H #define _VIKING_CURL_DOWNLOAD_H #include #include "download.h" G_BEGIN_DECLS void curl_download_init (); void curl_download_uninit (); int curl_download_get_url ( const char *hostname, const char *uri, FILE *f, DownloadMapOptions *options, gboolean ftp, DownloadFileOptions *file_options, void *handle ); int curl_download_uri ( const char *uri, FILE *f, DownloadMapOptions *options, DownloadFileOptions *file_options, void *handle ); void * curl_download_handle_init (); void curl_download_handle_cleanup ( void * handle ); G_END_DECLS #endif viking-1.4.2/src/dems.c0000644000175000017500000001621512024715566011626 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2008, Evan Battaglia * Copyright (C) 2007, Quy Tonthat * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include "dems.h" #include "background.h" typedef struct { VikDEM *dem; guint ref_count; } LoadedDEM; GHashTable *loaded_dems = NULL; /* filename -> DEM */ static void loaded_dem_free ( LoadedDEM *ldem ) { vik_dem_free ( ldem->dem ); g_free ( ldem ); } void a_dems_uninit () { if ( loaded_dems ) g_hash_table_destroy ( loaded_dems ); } /* To load a dem. if it was already loaded, will simply * reference the one already loaded and return it. */ VikDEM *a_dems_load(const gchar *filename) { LoadedDEM *ldem; /* dems init hash table */ if ( ! loaded_dems ) loaded_dems = g_hash_table_new_full ( g_str_hash, g_str_equal, g_free, (GDestroyNotify) loaded_dem_free ); ldem = (LoadedDEM *) g_hash_table_lookup ( loaded_dems, filename ); if ( ldem ) { ldem->ref_count++; return ldem->dem; } else { VikDEM *dem = vik_dem_new_from_file ( filename ); if ( ! dem ) return NULL; ldem = g_malloc ( sizeof(LoadedDEM) ); ldem->ref_count = 1; ldem->dem = dem; g_hash_table_insert ( loaded_dems, g_strdup(filename), ldem ); return dem; } } void a_dems_unref(const gchar *filename) { LoadedDEM *ldem = (LoadedDEM *) g_hash_table_lookup ( loaded_dems, filename ); if ( !ldem ) { /* This is fine - probably means the loaded list was aborted / not completed for some reason */ return; } ldem->ref_count--; if ( ldem->ref_count == 0 ) g_hash_table_remove ( loaded_dems, filename ); } /* to get a DEM that was already loaded. * assumes that its in there already, * although it could not be if earlier load failed. */ VikDEM *a_dems_get(const gchar *filename) { LoadedDEM *ldem = g_hash_table_lookup ( loaded_dems, filename ); if ( ldem ) return ldem->dem; return NULL; } /* Load a string list (GList of strings) of dems. You have to use get to at them later. * When updating a list as a parameter, this should be bfore freeing the list so * the same DEMs won't be loaded & unloaded. * Modifies the list to remove DEMs which did not load. */ /* TODO: don't delete them when they don't exist. * we need to warn the user, but we should keep them in the GList. * we need to know that they weren't referenced though when we * do the a_dems_list_free(). */ int a_dems_load_list ( GList **dems, gpointer threaddata ) { GList *iter = *dems; guint dem_count = 0; const guint dem_total = g_list_length ( *dems ); while ( iter ) { if ( ! a_dems_load((const gchar *) (iter->data)) ) { GList *iter_temp = iter->next; g_free ( iter->data ); (*dems) = g_list_remove_link ( (*dems), iter ); iter = iter_temp; } else { iter = iter->next; } /* When running a thread - inform of progress */ if ( threaddata ) { dem_count++; /* NB Progress also detects abort request via the returned value */ int result = a_background_thread_progress ( threaddata, ((gdouble)dem_count) / dem_total ); if ( result != 0 ) return -1; /* Abort thread */ } } return 0; } /* Takes a string list (GList of strings) of dems (filenames). * Unrefs all the dems (i.e. "unloads" them), then frees the * strings, the frees the list. */ void a_dems_list_free ( GList *dems ) { GList *iter = dems; while ( iter ) { a_dems_unref ((const gchar *)iter->data); g_free ( iter->data ); iter = iter->next; } g_list_free ( dems ); } GList *a_dems_list_copy ( GList *dems ) { GList *rv = g_list_copy ( dems ); GList *iter = rv; while ( iter ) { if ( ! a_dems_load((const gchar *) (iter->data)) ) { GList *iter_temp = iter->next; /* delete link, don't bother strdup'ing and free'ing string */ rv = g_list_remove_link ( rv, iter ); iter = iter_temp; } else { iter->data = g_strdup((gchar *)iter->data); /* copy the string too. */ iter = iter->next; } } return rv; } gint16 a_dems_list_get_elev_by_coord ( GList *dems, const VikCoord *coord ) { static struct UTM utm_tmp; static struct LatLon ll_tmp; GList *iter = dems; VikDEM *dem; gint elev; while ( iter ) { dem = a_dems_get ( (gchar *) iter->data ); if ( dem ) { if ( dem->horiz_units == VIK_DEM_HORIZ_LL_ARCSECONDS ) { vik_coord_to_latlon ( coord, &ll_tmp ); ll_tmp.lat *= 3600; ll_tmp.lon *= 3600; elev = vik_dem_get_east_north(dem, ll_tmp.lon, ll_tmp.lat); if ( elev != VIK_DEM_INVALID_ELEVATION ) return elev; } else if ( dem->horiz_units == VIK_DEM_HORIZ_UTM_METERS ) { vik_coord_to_utm ( coord, &utm_tmp ); if ( utm_tmp.zone == dem->utm_zone && (elev = vik_dem_get_east_north(dem, utm_tmp.easting, utm_tmp.northing)) != VIK_DEM_INVALID_ELEVATION ) return elev; } } iter = iter->next; } return VIK_DEM_INVALID_ELEVATION; } typedef struct { const VikCoord *coord; VikDemInterpol method; gint elev; } CoordElev; static gboolean get_elev_by_coord(gpointer key, LoadedDEM *ldem, CoordElev *ce) { VikDEM *dem = ldem->dem; gdouble lat, lon; if ( dem->horiz_units == VIK_DEM_HORIZ_LL_ARCSECONDS ) { struct LatLon ll_tmp; vik_coord_to_latlon (ce->coord, &ll_tmp ); lat = ll_tmp.lat * 3600; lon = ll_tmp.lon * 3600; } else if (dem->horiz_units == VIK_DEM_HORIZ_UTM_METERS) { static struct UTM utm_tmp; if (utm_tmp.zone != dem->utm_zone) return FALSE; vik_coord_to_utm (ce->coord, &utm_tmp); lat = utm_tmp.northing; lon = utm_tmp.easting; } else return FALSE; switch (ce->method) { case VIK_DEM_INTERPOL_NONE: ce->elev = vik_dem_get_east_north(dem, lon, lat); break; case VIK_DEM_INTERPOL_SIMPLE: ce->elev = vik_dem_get_simple_interpol(dem, lon, lat); break; case VIK_DEM_INTERPOL_BEST: ce->elev = vik_dem_get_shepard_interpol(dem, lon, lat); break; } return (ce->elev != VIK_DEM_INVALID_ELEVATION); } /* TODO: keep a (sorted) linked list of DEMs and select the best resolution one */ gint16 a_dems_get_elev_by_coord ( const VikCoord *coord, VikDemInterpol method ) { CoordElev ce; if (!loaded_dems) return VIK_DEM_INVALID_ELEVATION; ce.coord = coord; ce.method = method; ce.elev = VIK_DEM_INVALID_ELEVATION; if(!g_hash_table_find(loaded_dems, (GHRFunc)get_elev_by_coord, &ce)) return VIK_DEM_INVALID_ELEVATION; return ce.elev; } viking-1.4.2/src/vikmapslayer_compat.c0000644000175000017500000000270612024715566014750 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2005, Evan Battaglia * Copyright (C) 2008-2009, Guilhem Bonnefille * * UTM multi-zone stuff by Kit Transue * Dynamic map type by Guilhem Bonnefille * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "vikmapslayer.h" #include "vikmapslayer_compat.h" #include "vikmaptype.h" void maps_layer_register_type ( const char *label, guint id, VikMapsLayer_MapType *map_type ) { g_assert(id == map_type->uniq_id); VikMapType *object = vik_map_type_new_with_id (*map_type, label); maps_layer_register_map_source ( VIK_MAP_SOURCE (object) ); } viking-1.4.2/src/viktmsmapsource.h0000644000175000017500000000407412175546146014142 00000000000000/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * viking * Copyright (C) 2010, Guilhem Bonnefille * * viking is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * viking is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef _VIK_TMS_MAP_SOURCE_H #define _VIK_TMS_MAP_SOURCE_H #include "vikcoord.h" #include "mapcoord.h" #include "vikmapsourcedefault.h" G_BEGIN_DECLS #define VIK_TYPE_TMS_MAP_SOURCE (vik_tms_map_source_get_type ()) #define VIK_TMS_MAP_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIK_TYPE_TMS_MAP_SOURCE, VikTmsMapSource)) #define VIK_TMS_MAP_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VIK_TYPE_TMS_MAP_SOURCE, VikTmsMapSourceClass)) #define VIK_IS_TMS_MAP_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIK_TYPE_TMS_MAP_SOURCE)) #define VIK_IS_TMS_MAP_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VIK_TYPE_TMS_MAP_SOURCE)) #define VIK_TMS_MAP_SOURCE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VIK_TYPE_TMS_MAP_SOURCE, VikTmsMapSourceClass)) typedef struct _VikTmsMapSourceClass VikTmsMapSourceClass; typedef struct _VikTmsMapSource VikTmsMapSource; struct _VikTmsMapSourceClass { VikMapSourceDefaultClass parent_class; }; struct _VikTmsMapSource { VikMapSourceDefault parent_instance; }; GType vik_tms_map_source_get_type (void) G_GNUC_CONST; VikTmsMapSource * vik_tms_map_source_new_with_id (guint16 id, const gchar *label, const gchar *hostname, const gchar *url); G_END_DECLS #endif /* _VIK_TMS_MAP_SOURCE_H_ */ viking-1.4.2/src/vikgoto.h0000644000175000017500000000240312175546146012362 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * Copyright (C) 2009, Guilhem Bonnefille * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef __VIK_SEARCH_H #define __VIK_SEARCH_H #include "vikwindow.h" #include "vikviewport.h" #include "vikgototool.h" G_BEGIN_DECLS void vik_goto_register (VikGotoTool *tool); void vik_goto_unregister_all (void); void a_vik_goto(VikWindow *vw, VikViewport *vvp); gchar * a_vik_goto_get_search_string_for_this_place(VikWindow *vw); G_END_DECLS #endif viking-1.4.2/src/osm.c0000644000175000017500000001601212175546146011472 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * Copyright (C) 2007, Guilhem Bonnefille * Copyright (c) 2012, Rob Norris * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include "osm.h" #include "vikmapslayer.h" #include "vikslippymapsource.h" #include "vikwmscmapsource.h" #include "vikwebtoolcenter.h" #include "vikwebtoolbounds.h" #include "vikexttools.h" #include "vikgotoxmltool.h" #include "vikgoto.h" /* initialisation */ void osm_init () { VikMapSource *mapnik_type = VIK_MAP_SOURCE(g_object_new(VIK_TYPE_SLIPPY_MAP_SOURCE, "id", 13, "label", "OpenStreetMap (Mapnik)", "hostname", "tile.openstreetmap.org", "url", "/%d/%d/%d.png", "check-file-server-time", FALSE, "use-etag", TRUE, "copyright", "© OpenStreetMap contributors", "license", "CC-BY-SA", "license-url", "http://www.openstreetmap.org/copyright", NULL)); VikMapSource *cycle_type = VIK_MAP_SOURCE(g_object_new(VIK_TYPE_SLIPPY_MAP_SOURCE, "id", 17, "label", "OpenStreetMap (Cycle)", "hostname", "b.tile.opencyclemap.org", "url", "/cycle/%d/%d/%d.png", "check-file-server-time", TRUE, "use-etag", FALSE, "copyright", "Tiles courtesy of Andy Allan © OpenStreetMap contributors", "license", "CC-BY-SA", "license-url", "http://www.openstreetmap.org/copyright", NULL)); VikMapSource *transport_type = VIK_MAP_SOURCE(g_object_new(VIK_TYPE_SLIPPY_MAP_SOURCE, "id", 20, "label", "OpenStreetMap (Transport)", "hostname", "c.tile2.opencyclemap.org", "url", "/transport/%d/%d/%d.png", "check-file-server-time", TRUE, "use-etag", FALSE, "copyright", "Tiles courtesy of Andy Allan © OpenStreetMap contributors", "license", "CC-BY-SA", "license-url", "http://www.openstreetmap.org/copyright", NULL)); VikMapSource *mapquest_type = VIK_MAP_SOURCE(g_object_new(VIK_TYPE_SLIPPY_MAP_SOURCE, "id", 19, "label", "OpenStreetMap (MapQuest)", "hostname", "otile1.mqcdn.com", "url", "/tiles/1.0.0/osm/%d/%d/%d.png", "check-file-server-time", TRUE, "use-etag", FALSE, "copyright", "Tiles Courtesy of MapQuest © OpenStreetMap contributors", "license", "MapQuest Specific", "license-url", "http://developer.mapquest.com/web/info/terms-of-use", NULL)); // NB no cache needed for this type!! VikMapSource *direct_type = VIK_MAP_SOURCE(g_object_new(VIK_TYPE_SLIPPY_MAP_SOURCE, "id", 21, "label", _("On Disk OSM Tile Format"), // For using your own generated data assumed you know the license already! "copyright", "© OpenStreetMap contributors", // probably "use-direct-file-access", TRUE, NULL)); maps_layer_register_map_source (mapquest_type); maps_layer_register_map_source (mapnik_type); maps_layer_register_map_source (cycle_type); maps_layer_register_map_source (transport_type); maps_layer_register_map_source (direct_type); // Webtools VikWebtoolCenter *webtool = NULL; webtool = vik_webtool_center_new_with_members ( _("OSM (view)"), "http://openstreetmap.org/?lat=%s&lon=%s&zoom=%d&layers=B000FTF" ); vik_ext_tools_register ( VIK_EXT_TOOL ( webtool ) ); g_object_unref ( webtool ); webtool = vik_webtool_center_new_with_members ( _("OSM (edit)"), "http://www.openstreetmap.org/edit?lat=%s&lon=%s&zoom=%d" ); vik_ext_tools_register ( VIK_EXT_TOOL ( webtool ) ); g_object_unref ( webtool ); webtool = vik_webtool_center_new_with_members ( _("OSM (render)"), "http://www.informationfreeway.org/?lat=%s&lon=%s&zoom=%d&layers=B0000F000F" ); vik_ext_tools_register ( VIK_EXT_TOOL ( webtool ) ); g_object_unref ( webtool ); VikWebtoolBounds *webtoolbounds = NULL; // Example: http://127.0.0.1:8111/load_and_zoom?left=8.19&right=8.20&top=48.605&bottom=48.590&select=node413602999 // JOSM or merkaartor must already be running with remote interface enabled webtoolbounds = vik_webtool_bounds_new_with_members ( _("Local port 8111 (eg JOSM)"), "http://localhost:8111/load_and_zoom?left=%s&right=%s&bottom=%s&top=%s" ); vik_ext_tools_register ( VIK_EXT_TOOL ( webtoolbounds ) ); g_object_unref ( webtoolbounds ); // Goto VikGotoXmlTool *nominatim = VIK_GOTO_XML_TOOL ( g_object_new ( VIK_GOTO_XML_TOOL_TYPE, "label", "OSM Nominatim", "url-format", "http://nominatim.openstreetmap.org/search?q=%s&format=xml", "lat-path", "/searchresults/place", "lat-attr", "lat", "lon-path", "/searchresults/place", "lon-attr", "lon", NULL ) ); vik_goto_register ( VIK_GOTO_TOOL ( nominatim ) ); g_object_unref ( nominatim ); VikGotoXmlTool *namefinder = VIK_GOTO_XML_TOOL ( g_object_new ( VIK_GOTO_XML_TOOL_TYPE, "label", "OSM Name finder", "url-format", "http://gazetteer.openstreetmap.org/namefinder/search.xml?find=%s&max=1", "lat-path", "/searchresults/named", "lat-attr", "lat", "lon-path", "/searchresults/named", "lon-attr", "lon", NULL ) ); vik_goto_register ( VIK_GOTO_TOOL ( namefinder ) ); g_object_unref ( namefinder ); } viking-1.4.2/src/util.h0000644000175000017500000000245112175546146011660 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2007-2009, Guilhem Bonnefille * Based on: * Copyright (C) 2003-2007, Leandro A. F. Pereira * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef _VIKING_UTIL_H #define _VIKING_UTIL_H #include #include G_BEGIN_DECLS void open_url(GtkWindow *parent, const gchar * url); void new_email(GtkWindow *parent, const gchar * address); gchar *uri_escape(gchar *str); GList * str_array_to_glist(gchar* data[]); void check_latest_version ( GtkWindow *window ); G_END_DECLS #endif viking-1.4.2/src/spotmaps.c0000644000175000017500000000307212024715566012541 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2010, Guilhem Bonnefille * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "spotmaps.h" #include "vikmapslayer.h" #include "viktmsmapsource.h" void spotmaps_init () { /* Spot */ maps_layer_register_map_source(g_object_new(VIK_TYPE_TMS_MAP_SOURCE, "id", 50, "label", "SPOTMaps", "hostname", "spotmaps.youmapps.org", "url", "/spotmaps4osm/1.0.0/spotmaps4osm/%d/%d/%d.jpg", "copyright", "© Cnes/Spot Image", "license", "Specific license", "license-url", "http://www.youmapps.org/licenses/EULA-OSM-en.html", NULL)); } viking-1.4.2/src/vikmaptype.c0000644000175000017500000001414012174331626013057 00000000000000/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * viking * Copyright (C) 2009, Guilhem Bonnefille * * viking is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * viking is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ /** * SECTION:vikmaptype * @short_description: the adapter class to support old map source declaration * * The #VikMapType class handles is an adapter to allow to reuse * old map source (see #VikMapsLayer_MapType). */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "vikmaptype.h" #include "vikmapslayer_compat.h" static guint16 map_type_get_uniq_id (VikMapSource *self); static const gchar *map_type_get_label (VikMapSource *self); static guint16 map_type_get_tilesize_x (VikMapSource *self); static guint16 map_type_get_tilesize_y (VikMapSource *self); static VikViewportDrawMode map_type_get_drawmode (VikMapSource *self); static gboolean map_type_coord_to_mapcoord (VikMapSource *self, const VikCoord *src, gdouble xzoom, gdouble yzoom, MapCoord *dest ); static void map_type_mapcoord_to_center_coord (VikMapSource *self, MapCoord *src, VikCoord *dest); static int map_type_download (VikMapSource * self, MapCoord * src, const gchar * dest_fn, void * handle); static void * map_type_download_handle_init (VikMapSource * self); static void map_type_download_handle_cleanup (VikMapSource * self, void * handle); typedef struct _VikMapTypePrivate VikMapTypePrivate; struct _VikMapTypePrivate { gchar *label; VikMapsLayer_MapType map_type; }; #define VIK_MAP_TYPE_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), VIK_TYPE_MAP_TYPE, VikMapTypePrivate)) G_DEFINE_TYPE (VikMapType, vik_map_type, VIK_TYPE_MAP_SOURCE); static void vik_map_type_init (VikMapType *object) { VikMapTypePrivate *priv = VIK_MAP_TYPE_PRIVATE(object); priv->label = NULL; } VikMapType * vik_map_type_new_with_id (VikMapsLayer_MapType map_type, const char *label) { VikMapType *ret = (VikMapType *)g_object_new(vik_map_type_get_type(), NULL); VikMapTypePrivate *priv = VIK_MAP_TYPE_PRIVATE(ret); priv->map_type = map_type; priv->label = g_strdup (label); return ret; } static void vik_map_type_finalize (GObject *object) { VikMapTypePrivate *priv = VIK_MAP_TYPE_PRIVATE(object); g_free (priv->label); priv->label = NULL; G_OBJECT_CLASS (vik_map_type_parent_class)->finalize (object); } static void vik_map_type_class_init (VikMapTypeClass *klass) { GObjectClass* object_class = G_OBJECT_CLASS (klass); VikMapSourceClass* parent_class = VIK_MAP_SOURCE_CLASS (klass); /* Overiding methods */ parent_class->get_uniq_id = map_type_get_uniq_id; parent_class->get_label = map_type_get_label; parent_class->get_tilesize_x = map_type_get_tilesize_x; parent_class->get_tilesize_y = map_type_get_tilesize_y; parent_class->get_drawmode = map_type_get_drawmode; parent_class->coord_to_mapcoord = map_type_coord_to_mapcoord; parent_class->mapcoord_to_center_coord = map_type_mapcoord_to_center_coord; parent_class->download = map_type_download; parent_class->download_handle_init = map_type_download_handle_init; parent_class->download_handle_cleanup = map_type_download_handle_cleanup; g_type_class_add_private (klass, sizeof (VikMapTypePrivate)); object_class->finalize = vik_map_type_finalize; } static guint16 map_type_get_uniq_id (VikMapSource *self) { VikMapTypePrivate *priv = VIK_MAP_TYPE_PRIVATE(self); g_return_val_if_fail (priv != NULL, (guint16)0); return priv->map_type.uniq_id; } static const gchar * map_type_get_label (VikMapSource *self) { VikMapTypePrivate *priv = VIK_MAP_TYPE_PRIVATE(self); g_return_val_if_fail (priv != NULL, FALSE); return priv->label; } static guint16 map_type_get_tilesize_x (VikMapSource *self) { VikMapTypePrivate *priv = VIK_MAP_TYPE_PRIVATE(self); g_return_val_if_fail (priv != NULL, (guint16)0); return priv->map_type.tilesize_x; } static guint16 map_type_get_tilesize_y (VikMapSource *self) { VikMapTypePrivate *priv = VIK_MAP_TYPE_PRIVATE(self); g_return_val_if_fail (priv != NULL, (guint16)0); return priv->map_type.tilesize_y; } static VikViewportDrawMode map_type_get_drawmode (VikMapSource *self) { VikMapTypePrivate *priv = VIK_MAP_TYPE_PRIVATE(self); g_return_val_if_fail (priv != NULL, (VikViewportDrawMode)0); return priv->map_type.drawmode; } static gboolean map_type_coord_to_mapcoord (VikMapSource *self, const VikCoord *src, gdouble xzoom, gdouble yzoom, MapCoord *dest ) { VikMapTypePrivate *priv = VIK_MAP_TYPE_PRIVATE(self); g_return_val_if_fail (priv != NULL, FALSE); return (priv->map_type.coord_to_mapcoord)(src, xzoom, yzoom, dest); } static void map_type_mapcoord_to_center_coord (VikMapSource *self, MapCoord *src, VikCoord *dest) { VikMapTypePrivate *priv = VIK_MAP_TYPE_PRIVATE(self); g_return_if_fail (self != NULL); (priv->map_type.mapcoord_to_center_coord)(src, dest); } static int map_type_download (VikMapSource * self, MapCoord * src, const gchar * dest_fn, void * handle) { VikMapTypePrivate *priv = VIK_MAP_TYPE_PRIVATE(self); g_return_val_if_fail (priv != NULL, 0); return (priv->map_type.download)(src, dest_fn, handle); } static void * map_type_download_handle_init (VikMapSource * self) { VikMapTypePrivate *priv = VIK_MAP_TYPE_PRIVATE(self); g_return_val_if_fail (priv != NULL, 0); return (priv->map_type.download_handle_init)(); } static void map_type_download_handle_cleanup (VikMapSource * self, void * handle) { VikMapTypePrivate *priv = VIK_MAP_TYPE_PRIVATE(self); g_return_if_fail ( priv != NULL ); (priv->map_type.download_handle_cleanup)(handle); } viking-1.4.2/src/vikenumtypes.c.template0000644000175000017500000000131411507650232015236 00000000000000/*** BEGIN file-header ***/ #include "vikenumtypes.h" /*** END file-header ***/ /*** BEGIN file-production ***/ /* enumerations from "@filename@" */ #include "@filename@" /*** END file-production ***/ /*** BEGIN value-header ***/ GType @enum_name@_get_type (void) { static GType the_type = 0; if (the_type == 0) { static const G@Type@Value values[] = { /*** END value-header ***/ /*** BEGIN value-production ***/ { @VALUENAME@, "@VALUENAME@", "@valuenick@" }, /*** END value-production ***/ /*** BEGIN value-tail ***/ { 0, NULL, NULL } }; the_type = g_@type@_register_static ( g_intern_static_string ("@EnumName@"), values); } return the_type; } /*** END value-tail ***/ viking-1.4.2/src/dem.h0000644000175000017500000000437712122673673011457 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2008, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef __VIKING_DEM_H #define __VIKING_DEM_H G_BEGIN_DECLS #define VIK_DEM_INVALID_ELEVATION -32768 /* unit codes */ #define VIK_DEM_HORIZ_UTM_METERS 2 #define VIK_DEM_HORIZ_LL_ARCSECONDS 3 #define VIK_DEM_VERT_DECIMETERS 2 #define VIK_DEM_VERT_METERS 1 /* wrong in 250k? */ typedef struct { guint n_columns; GPtrArray *columns; guint8 horiz_units; guint8 orig_vert_units; /* original, always converted to meters when loading. */ gdouble east_scale; /* gap between samples */ gdouble north_scale; gdouble min_east, min_north, max_east, max_north; guint8 utm_zone; gchar utm_letter; } VikDEM; typedef struct { /* east-west coordinate for ALL items in the column */ gdouble east_west; /* coordinate of northern and southern boundaries */ gdouble south; // gdouble north; guint n_points; gint16 *points; } VikDEMColumn; VikDEM *vik_dem_new_from_file(const gchar *file); void vik_dem_free ( VikDEM *dem ); gint16 vik_dem_get_xy ( VikDEM *dem, guint x, guint y ); gint16 vik_dem_get_east_north ( VikDEM *dem, gdouble east, gdouble north ); gint16 vik_dem_get_simple_interpol ( VikDEM *dem, gdouble east, gdouble north ); gint16 vik_dem_get_shepard_interpol ( VikDEM *dem, gdouble east, gdouble north ); gint16 vik_dem_get_best_interpol ( VikDEM *dem, gdouble east, gdouble north ); void vik_dem_east_north_to_xy ( VikDEM *dem, gdouble east, gdouble north, guint *col, guint *row ); G_END_DECLS #endif viking-1.4.2/src/vikwebtool.h0000644000175000017500000000362412122673673013071 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2008, Guilhem Bonnefille * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef _VIKING_WEBTOOL_H #define _VIKING_WEBTOOL_H #include #include "vikwindow.h" #include "vikexttool.h" G_BEGIN_DECLS #define VIK_WEBTOOL_TYPE (vik_webtool_get_type ()) #define VIK_WEBTOOL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIK_WEBTOOL_TYPE, VikWebtool)) #define VIK_WEBTOOL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VIK_WEBTOOL_TYPE, VikWebtoolClass)) #define IS_VIK_WEBTOOL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIK_WEBTOOL_TYPE)) #define IS_VIK_WEBTOOL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VIK_WEBTOOL_TYPE)) #define VIK_WEBTOOL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VIK_WEBTOOL_TYPE, VikWebtoolClass)) typedef struct _VikWebtool VikWebtool; typedef struct _VikWebtoolClass VikWebtoolClass; struct _VikWebtoolClass { VikExtToolClass object_class; gchar *(* get_url) (VikWebtool *self, VikWindow *vwindow); }; GType vik_webtool_get_type (); struct _VikWebtool { VikExtTool obj; }; gchar *vik_webtool_get_url ( VikWebtool *self, VikWindow *vwindow ); G_END_DECLS #endif viking-1.4.2/src/acquire.h0000644000175000017500000001441712175546146012341 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef _VIKING_ACQUIRE_H #define _VIKING_ACQUIRE_H #include #include "vikwindow.h" #include "viklayerspanel.h" #include "vikviewport.h" #include "babel.h" G_BEGIN_DECLS typedef struct _VikDataSourceInterface VikDataSourceInterface; /** * acq_dialog_widgets_t: * * global data structure used to expose the progress dialog to the worker thread. */ typedef struct { GtkWidget *status; VikWindow *vw; VikLayersPanel *vlp; VikViewport *vvp; GtkWidget *dialog; gboolean running; VikDataSourceInterface *source_interface; gpointer user_data; } acq_dialog_widgets_t; typedef enum { VIK_DATASOURCE_CREATENEWLAYER, VIK_DATASOURCE_ADDTOLAYER, VIK_DATASOURCE_MANUAL_LAYER_MANAGEMENT, } vik_datasource_mode_t; /* TODO: replace track/layer? */ typedef enum { VIK_DATASOURCE_INPUTTYPE_NONE = 0, VIK_DATASOURCE_INPUTTYPE_TRWLAYER, VIK_DATASOURCE_INPUTTYPE_TRACK, VIK_DATASOURCE_INPUTTYPE_TRWLAYER_TRACK } vik_datasource_inputtype_t; /** * VikDataSourceInitFunc: * * Returns: pointer to state if OK, otherwise %NULL */ typedef gpointer (*VikDataSourceInitFunc) (); /** * VikDataSourceCheckExistenceFunc: * * Returns: %NULL if OK, otherwise returns an error message. */ typedef gchar *(*VikDataSourceCheckExistenceFunc) (); /** * VikDataSourceAddSetupWidgetsFunc: * * Create widgets to show in a setup dialog, set up state via user_data. */ typedef void (*VikDataSourceAddSetupWidgetsFunc) ( GtkWidget *dialog, VikViewport *vvp, gpointer user_data ); /** * VikDataSourceGetCmdStringFunc: * @user_data: provided by #VikDataSourceInterface.init_func or dialog with params * @args: the arguments computed for #VikDataSourceInterface.process_func * @extra: extra arguments for #VikDataSourceInterface.process_func * @options: even more options for #VikDataSourceInterface.process_func * * set both to %NULL to signal refusal (ie already downloading). */ typedef void (*VikDataSourceGetCmdStringFunc) ( gpointer user_data, gchar **args, gchar **extra, gpointer options ); typedef void (*VikDataSourceGetCmdStringFuncWithInput) ( gpointer user_data, gchar **babelargs_or_shellcmd, gchar **inputfile_or_inputtype, const gchar *input_file_name ); typedef void (*VikDataSourceGetCmdStringFuncWithInputInput) ( gpointer user_data, gchar **babelargs_or_shellcmd, gchar **inputfile_or_inputtype, const gchar *input_file_name, const gchar *input_track_file_name ); /** * VikDataSourceProcessFunc: * @vtl: * @cmd: the arguments computed by #VikDataSourceInterface.get_cmd_string_func * @extra: the extra arguments computed by #VikDataSourceInterface.get_cmd_string_func * @status_cb: the #VikDataSourceInterface.progress_func * @adw: the widgets and data used by #VikDataSourceInterface.progress_func * @options: more options returned by #VikDataSourceInterface.get_cmd_string_func * * The actual function to do stuff - must report success/failure. */ typedef gboolean (*VikDataSourceProcessFunc) ( gpointer vtl, const gchar *cmd, const gchar *extra, BabelStatusFunc status_cb, acq_dialog_widgets_t *adw, gpointer options ); /* */ typedef void (*VikDataSourceProgressFunc) ( BabelProgressCode c, gpointer data, acq_dialog_widgets_t *w ); /** * VikDataSourceAddProgressWidgetsFunc: * * Creates widgets to show in a progress dialog, may set up state via user_data. */ typedef void (*VikDataSourceAddProgressWidgetsFunc) ( GtkWidget *dialog, gpointer user_data ); /** * VikDataSourceCleanupFunc: * * Frees any widgets created for the setup or progress dialogs, any allocated state, etc. */ typedef void (*VikDataSourceCleanupFunc) ( gpointer user_data ); typedef void (*VikDataSourceOffFunc) ( gpointer user_data, gchar **babelargs_or_shellcmd, gchar **inputfile_or_inputtype );; /** * VikDataSourceInterface: * * Main interface. */ struct _VikDataSourceInterface { const gchar *window_title; const gchar *layer_title; vik_datasource_mode_t mode; vik_datasource_inputtype_t inputtype; gboolean autoview; gboolean keep_dialog_open; /* when done */ gboolean is_thread; /*** Manual UI Building ***/ VikDataSourceInitFunc init_func; VikDataSourceCheckExistenceFunc check_existence_func; VikDataSourceAddSetupWidgetsFunc add_setup_widgets_func; /*** ***/ /* or VikDataSourceGetCmdStringFuncWithInput, if inputtype is not NONE */ VikDataSourceGetCmdStringFunc get_cmd_string_func; VikDataSourceProcessFunc process_func; VikDataSourceProgressFunc progress_func; VikDataSourceAddProgressWidgetsFunc add_progress_widgets_func; VikDataSourceCleanupFunc cleanup_func; VikDataSourceOffFunc off_func; /*** UI Building ***/ VikLayerParam * params; guint16 params_count; VikLayerParamData * params_defaults; gchar ** params_groups; guint8 params_groups_count; }; /**********************************/ /**********************************/ /**********************************/ void a_acquire ( VikWindow *vw, VikLayersPanel *vlp, VikViewport *vvp, VikDataSourceInterface *source_interface ); GtkWidget *a_acquire_trwlayer_menu (VikWindow *vw, VikLayersPanel *vlp, VikViewport *vvp, VikTrwLayer *vtl); GtkWidget *a_acquire_trwlayer_track_menu (VikWindow *vw, VikLayersPanel *vlp, VikViewport *vvp, VikTrwLayer *vtl); GtkWidget *a_acquire_track_menu (VikWindow *vw, VikLayersPanel *vlp, VikViewport *vvp, VikTrack *tr); void a_acquire_set_filter_track ( VikTrack *tr ); G_END_DECLS #endif viking-1.4.2/src/vikgotoxmltool.h0000644000175000017500000000376612122673673014014 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * Copyright (C) 2009, Guilhem Bonnefille * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef __VIK_GOTO_XML_TOOL_H #define __VIK_GOTO_XML_TOOL_H #include #include "vikwindow.h" #include "vikgototool.h" G_BEGIN_DECLS #define VIK_GOTO_XML_TOOL_TYPE (vik_goto_xml_tool_get_type ()) #define VIK_GOTO_XML_TOOL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIK_GOTO_XML_TOOL_TYPE, VikGotoXmlTool)) #define VIK_GOTO_XML_TOOL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VIK_GOTO_XML_TOOL_TYPE, VikGotoXmlToolClass)) #define IS_VIK_GOTO_XML_TOOL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIK_GOTO_XML_TOOL_TYPE)) #define IS_VIK_GOTO_XML_TOOL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VIK_GOTO_XML_TOOL_TYPE)) #define VIK_GOTO_XML_TOOL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VIK_GOTO_XML_TOOL_TYPE, VikGotoXmlToolClass)) typedef struct _VikGotoXmlTool VikGotoXmlTool; typedef struct _VikGotoXmlToolClass VikGotoXmlToolClass; struct _VikGotoXmlToolClass { VikGotoToolClass object_class; }; GType vik_goto_xml_tool_get_type (); struct _VikGotoXmlTool { VikGotoTool obj; }; VikGotoXmlTool *vik_goto_xml_tool_new (); G_END_DECLS #endif viking-1.4.2/src/vikwindow.h0000644000175000017500000001016312175546146012723 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef _VIKING_VIKWINDOW_H #define _VIKING_VIKWINDOW_H /* Requires or glib, and coords.h*/ #include #include #include #include "vikviewport.h" #include "vikstatus.h" G_BEGIN_DECLS #define VIK_WINDOW_TYPE (vik_window_get_type ()) #define VIK_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIK_WINDOW_TYPE, VikWindow)) #define VIK_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VIK_WINDOW_TYPE, VikWindowClass)) #define IS_VIK_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIK_WINDOW_TYPE)) #define IS_VIK_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VIK_WINDOW_TYPE)) typedef struct _VikWindow VikWindow; typedef struct _VikWindowClass VikWindowClass; struct _VikWindowClass { GtkWindowClass window_class; void (* newwindow) (VikWindow *vw); void (* openwindow) (VikWindow *vw, GSList *filenames); }; GType vik_window_get_type (); // To call from main to start things off: VikWindow *vik_window_new_window (); GtkWidget *vik_window_get_drawmode_button ( VikWindow *vw, VikViewportDrawMode mode ); gboolean vik_window_get_pan_move ( VikWindow *vw ); void vik_window_open_file ( VikWindow *vw, const gchar *filename, gboolean changefilename ); struct _VikLayer; void vik_window_selected_layer(VikWindow *vw, struct _VikLayer *vl); struct _VikViewport * vik_window_viewport(VikWindow *vw); struct _VikLayersPanel * vik_window_layers_panel(VikWindow *vw); struct _VikStatusbar * vik_window_get_statusbar(VikWindow *vw); void vik_window_statusbar_update (VikWindow *vw, const gchar* message, vik_statusbar_type_t vs_type); void vik_window_set_redraw_trigger(struct _VikLayer *vl); void vik_window_enable_layer_tool ( VikWindow *vw, gint layer_id, gint tool_id ); gpointer vik_window_get_selected_trw_layer ( VikWindow *vw ); /* return type VikTrwLayer */ void vik_window_set_selected_trw_layer ( VikWindow *vw, gpointer vtl ); /* input VikTrwLayer */ GHashTable *vik_window_get_selected_tracks ( VikWindow *vw ); void vik_window_set_selected_tracks ( VikWindow *vw, GHashTable *ght, gpointer vtl ); /* gpointer is a VikTrwLayer */ gpointer vik_window_get_selected_track ( VikWindow *vw ); /* return type VikTrack */ void vik_window_set_selected_track ( VikWindow *vw, gpointer *vt, gpointer vtl ); /* gpointer is a VikTrwLayer */ GHashTable *vik_window_get_selected_waypoints ( VikWindow *vw ); void vik_window_set_selected_waypoints ( VikWindow *vw, GHashTable *ght, gpointer vtl ); /* gpointer is a VikTrwLayer */ gpointer vik_window_get_selected_waypoint ( VikWindow *vw ); /* return type VikWaypoint */ void vik_window_set_selected_waypoint ( VikWindow *vw, gpointer *vwp, gpointer vtl ); /* input VikWaypoint, VikTrwLayer */ /* Return the VikTrwLayer of the selected track(s) or waypoint(s) are in (maybe NULL) */ gpointer vik_window_get_containing_trw_layer ( VikWindow *vw ); /* return indicates if a redraw is necessary */ gboolean vik_window_clear_highlight ( VikWindow *vw ); GThread *vik_window_get_thread ( VikWindow *vw ); typedef struct { VikWindow *vw; VikViewport *vvp; gpointer *vtl; // VikTrwlayer gboolean holding; gboolean is_waypoint; // otherwise a track GdkGC *gc; int oldx, oldy; } tool_ed_t; G_END_DECLS #define VIK_WINDOW_FROM_WIDGET(x) VIK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(x))) #endif viking-1.4.2/src/viklayerspanel.h0000644000175000017500000000650712175546146013742 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef _VIKING_LAYERS_PANEL_H #define _VIKING_LAYERS_PANEL_H #include #include #include #include "viklayer.h" #include "vikaggregatelayer.h" G_BEGIN_DECLS #define VIK_LAYERS_PANEL_TYPE (vik_layers_panel_get_type ()) #define VIK_LAYERS_PANEL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIK_LAYERS_PANEL_TYPE, VikLayersPanel)) #define VIK_LAYERS_PANEL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VIK_LAYERS_PANEL_TYPE, VikLayersPanelClass)) #define IS_VIK_LAYERS_PANEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIK_LLAYERS_PANEL_TYPE)) #define IS_VIK_LAYERS_PANEL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VIK_LAYERS_PANEL_TYPE)) typedef struct _VikLayersPanel VikLayersPanel; typedef struct _VikLayersPanelClass VikLayersPanelClass; struct _VikLayersPanelClass { GtkVBoxClass vbox_class; void (* update) (VikLayersPanel *vlp); }; GType vik_layers_panel_get_type (); VikLayersPanel *vik_layers_panel_new (); void vik_layers_panel_free ( VikLayersPanel *vlp ); void vik_layers_panel_add_layer ( VikLayersPanel *vlp, VikLayer *l ); void vik_layers_panel_draw_all ( VikLayersPanel *vlp ); VikLayer *vik_layers_panel_get_selected ( VikLayersPanel *vlp ); void vik_layers_panel_cut_selected ( VikLayersPanel *vlp ); void vik_layers_panel_copy_selected ( VikLayersPanel *vlp ); void vik_layers_panel_paste_selected ( VikLayersPanel *vlp ); void vik_layers_panel_delete_selected ( VikLayersPanel *vlp ); VikLayer *vik_layers_panel_get_layer_of_type ( VikLayersPanel *vlp, gint type ); void vik_layers_panel_set_viewport ( VikLayersPanel *vlp, VikViewport *vvp ); //gboolean vik_layers_panel_tool ( VikLayersPanel *vlp, guint16 layer_type, VikToolInterfaceFunc tool_func, GdkEventButton *event, VikViewport *vvp ); VikViewport *vik_layers_panel_get_viewport ( VikLayersPanel *vlp ); void vik_layers_panel_emit_update ( VikLayersPanel *vlp ); VikLayer *vik_layers_panel_get_layer_of_type ( VikLayersPanel *vlp, gint type ); gboolean vik_layers_panel_properties ( VikLayersPanel *vlp ); gboolean vik_layers_panel_new_layer ( VikLayersPanel *vlp, gint type ); void vik_layers_panel_clear ( VikLayersPanel *vlp ); VikAggregateLayer *vik_layers_panel_get_top_layer ( VikLayersPanel *vlp ); void vik_layers_panel_change_coord_mode ( VikLayersPanel *vlp, VikCoordMode mode ); GList *vik_layers_panel_get_all_layers_of_type(VikLayersPanel *vlp, gint type, gboolean include_invisible); VikTreeview *vik_layers_panel_get_treeview ( VikLayersPanel *vlp ); G_END_DECLS #endif viking-1.4.2/src/acquire.c0000644000175000017500000004326512175546146012337 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * Copyright (C) 2013, Rob Norris * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include #include "viking.h" #include "babel.h" #include "gpx.h" #include "acquire.h" /************************ FILTER LIST *******************/ // extern VikDataSourceInterface vik_datasource_gps_interface; /*** Input is TRWLayer ***/ extern VikDataSourceInterface vik_datasource_bfilter_simplify_interface; extern VikDataSourceInterface vik_datasource_bfilter_dup_interface; /*** Input is a track and a TRWLayer ***/ extern VikDataSourceInterface vik_datasource_bfilter_polygon_interface; extern VikDataSourceInterface vik_datasource_bfilter_exclude_polygon_interface; /*** Input is a track ***/ const VikDataSourceInterface *filters[] = { &vik_datasource_bfilter_simplify_interface, &vik_datasource_bfilter_dup_interface, &vik_datasource_bfilter_polygon_interface, &vik_datasource_bfilter_exclude_polygon_interface, }; const guint N_FILTERS = sizeof(filters) / sizeof(filters[0]); VikTrack *filter_track = NULL; /********************************************************/ /* passed along to worker thread */ typedef struct { acq_dialog_widgets_t *w; gchar *cmd; gchar *extra; gboolean creating_new_layer; VikTrwLayer *vtl; gpointer options; } w_and_interface_t; /********************************************************* * Definitions and routines for acquiring data from Data Sources in general *********************************************************/ static void progress_func ( BabelProgressCode c, gpointer data, acq_dialog_widgets_t *w ) { if ( w->source_interface->is_thread ) { gdk_threads_enter (); if ( !w->running ) { if ( w->source_interface->cleanup_func ) w->source_interface->cleanup_func ( w->user_data ); gdk_threads_leave (); g_thread_exit ( NULL ); } gdk_threads_leave (); } if ( w->source_interface->progress_func ) w->source_interface->progress_func ( c, data, w ); } /** * Some common things to do on completion of a datasource process * . Update layer * . Update dialog info * . Update main dsisplay */ static void on_complete_process (w_and_interface_t *wi) { if (wi->w->running) { gtk_label_set_text ( GTK_LABEL(wi->w->status), _("Done.") ); if ( wi->creating_new_layer ) { /* Only create the layer if it actually contains anything useful */ // TODO: create function for this operation to hide detail: if ( g_hash_table_size (vik_trw_layer_get_tracks(wi->vtl)) || g_hash_table_size (vik_trw_layer_get_waypoints(wi->vtl)) || g_hash_table_size (vik_trw_layer_get_routes(wi->vtl)) ) { vik_layer_post_read ( VIK_LAYER(wi->vtl), wi->w->vvp, TRUE ); vik_aggregate_layer_add_layer( vik_layers_panel_get_top_layer(wi->w->vlp), VIK_LAYER(wi->vtl)); } else gtk_label_set_text ( GTK_LABEL(wi->w->status), _("No data.") ); } /* View this data if available and is desired */ if ( wi->vtl && wi->w->source_interface->autoview ) { vik_trw_layer_auto_set_view ( wi->vtl, vik_layers_panel_get_viewport(wi->w->vlp) ); } if ( wi->w->source_interface->keep_dialog_open ) { gtk_dialog_set_response_sensitive ( GTK_DIALOG(wi->w->dialog), GTK_RESPONSE_ACCEPT, TRUE ); gtk_dialog_set_response_sensitive ( GTK_DIALOG(wi->w->dialog), GTK_RESPONSE_REJECT, FALSE ); } else { gtk_dialog_response ( GTK_DIALOG(wi->w->dialog), GTK_RESPONSE_ACCEPT ); } // Main display update if ( wi->vtl ) vik_layers_panel_emit_update ( wi->w->vlp ); } else { /* cancelled */ if ( wi->creating_new_layer ) g_object_unref(wi->vtl); } } /* this routine is the worker thread. there is only one simultaneous download allowed */ static void get_from_anything ( w_and_interface_t *wi ) { gchar *cmd = wi->cmd; gchar *extra = wi->extra; gboolean result = TRUE; VikDataSourceInterface *source_interface = wi->w->source_interface; if ( source_interface->process_func ) result = source_interface->process_func ( wi->vtl, cmd, extra, (BabelStatusFunc) progress_func, wi->w, wi->options ); g_free ( cmd ); g_free ( extra ); g_free ( wi->options ); if (wi->w->running && !result) { gdk_threads_enter(); gtk_label_set_text ( GTK_LABEL(wi->w->status), _("Error: acquisition failed.") ); if ( wi->creating_new_layer ) g_object_unref ( G_OBJECT ( wi->vtl ) ); gdk_threads_leave(); } else { gdk_threads_enter(); on_complete_process ( wi ); gdk_threads_leave(); } if ( source_interface->cleanup_func ) source_interface->cleanup_func ( wi->w->user_data ); if ( wi->w->running ) { wi->w->running = FALSE; } else { g_free ( wi->w ); g_free ( wi ); wi = NULL; } g_thread_exit ( NULL ); } static gchar *write_tmp_trwlayer ( VikTrwLayer *vtl ) { int fd_src; gchar *name_src; FILE *f; g_assert ((fd_src = g_file_open_tmp("tmp-viking.XXXXXX", &name_src, NULL)) >= 0); g_debug ("%s: temporary file: %s", __FUNCTION__, name_src); f = fdopen(fd_src, "w"); a_gpx_write_file(vtl, f, NULL); fclose(f); f = NULL; return name_src; } /* TODO: write with name of old track */ static gchar *write_tmp_track ( VikTrack *track ) { int fd_src; gchar *name_src; FILE *f; g_assert ((fd_src = g_file_open_tmp("tmp-viking.XXXXXX", &name_src, NULL)) >= 0); g_debug ("%s: temporary file: %s", __FUNCTION__, name_src); f = fdopen(fd_src, "w"); a_gpx_write_track_file(track, f, NULL); /* Thank you Guilhem! Just when I needed this function... -- Evan */ fclose(f); f = NULL; return name_src; } /* TODO: cleanup, getr rid of redundancy */ /* depending on type of filter, often only vtl or track will be given. * the other can be NULL. */ static void acquire ( VikWindow *vw, VikLayersPanel *vlp, VikViewport *vvp, VikDataSourceInterface *source_interface, VikTrwLayer *vtl, VikTrack *track ) { /* for manual dialogs */ GtkWidget *dialog = NULL; GtkWidget *status; gchar *cmd = NULL; gchar *extra = NULL; gchar *cmd_off = NULL; gchar *extra_off = NULL; acq_dialog_widgets_t *w; gpointer user_data; gpointer options = NULL; /* for UI builder */ gpointer pass_along_data; VikLayerParamData *paramdatas = NULL; w_and_interface_t *wi; /*** INIT AND CHECK EXISTENCE ***/ if ( source_interface->init_func ) user_data = source_interface->init_func(); else user_data = NULL; pass_along_data = user_data; if ( source_interface->check_existence_func ) { gchar *error_str = source_interface->check_existence_func(); if ( error_str ) { a_dialog_error_msg ( GTK_WINDOW(vw), error_str ); g_free ( error_str ); return; } } /* BUILD UI & GET OPTIONS IF NECESSARY. */ /* POSSIBILITY 0: NO OPTIONS. DO NOTHING HERE. */ /* POSSIBILITY 1: ADD_SETUP_WIDGETS_FUNC */ if ( source_interface->add_setup_widgets_func ) { dialog = gtk_dialog_new_with_buttons ( "", GTK_WINDOW(vw), 0, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, NULL ); gtk_dialog_set_default_response ( GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT ); GtkWidget *response_w = NULL; #if GTK_CHECK_VERSION (2, 20, 0) response_w = gtk_dialog_get_widget_for_response ( GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT ); #endif source_interface->add_setup_widgets_func(dialog, vvp, user_data); gtk_window_set_title ( GTK_WINDOW(dialog), _(source_interface->window_title) ); if ( response_w ) gtk_widget_grab_focus ( response_w ); if ( gtk_dialog_run ( GTK_DIALOG(dialog) ) != GTK_RESPONSE_ACCEPT ) { source_interface->cleanup_func(user_data); gtk_widget_destroy(dialog); return; } } /* POSSIBILITY 2: UI BUILDER */ else if ( source_interface->params ) { paramdatas = a_uibuilder_run_dialog ( source_interface->window_title, GTK_WINDOW(vw), source_interface->params, source_interface->params_count, source_interface->params_groups, source_interface->params_groups_count, source_interface->params_defaults ); if ( paramdatas ) pass_along_data = paramdatas; else return; /* TODO: do we have to free anything here? */ } /* CREATE INPUT DATA & GET COMMAND STRING */ if ( source_interface->inputtype == VIK_DATASOURCE_INPUTTYPE_TRWLAYER ) { gchar *name_src = write_tmp_trwlayer ( vtl ); ((VikDataSourceGetCmdStringFuncWithInput) source_interface->get_cmd_string_func) ( pass_along_data, &cmd, &extra, name_src ); g_free ( name_src ); /* TODO: delete the tmp file? or delete it only after we're done with it? */ } else if ( source_interface->inputtype == VIK_DATASOURCE_INPUTTYPE_TRWLAYER_TRACK ) { gchar *name_src = write_tmp_trwlayer ( vtl ); gchar *name_src_track = write_tmp_track ( track ); ((VikDataSourceGetCmdStringFuncWithInputInput) source_interface->get_cmd_string_func) ( pass_along_data, &cmd, &extra, name_src, name_src_track ); g_free ( name_src ); g_free ( name_src_track ); } else if ( source_interface->inputtype == VIK_DATASOURCE_INPUTTYPE_TRACK ) { gchar *name_src_track = write_tmp_track ( track ); ((VikDataSourceGetCmdStringFuncWithInput) source_interface->get_cmd_string_func) ( pass_along_data, &cmd, &extra, name_src_track ); g_free ( name_src_track ); } else if ( source_interface->get_cmd_string_func ) source_interface->get_cmd_string_func ( pass_along_data, &cmd, &extra, &options ); /* Get data for Off command */ if ( source_interface->off_func ) { source_interface->off_func ( pass_along_data, &cmd_off, &extra_off ); } /* cleanup for option dialogs */ if ( source_interface->add_setup_widgets_func ) { gtk_widget_destroy(dialog); dialog = NULL; } else if ( source_interface->params ) { a_uibuilder_free_paramdatas ( paramdatas, source_interface->params, source_interface->params_count ); } w = g_malloc(sizeof(*w)); wi = g_malloc(sizeof(*wi)); wi->w = w; wi->w->source_interface = source_interface; wi->cmd = cmd; wi->extra = extra; /* usually input data type (?) */ wi->options = options; wi->vtl = vtl; wi->creating_new_layer = (!vtl); dialog = gtk_dialog_new_with_buttons ( "", GTK_WINDOW(vw), 0, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, NULL ); gtk_dialog_set_response_sensitive ( GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT, FALSE ); gtk_window_set_title ( GTK_WINDOW(dialog), _(source_interface->window_title) ); w->dialog = dialog; w->running = TRUE; status = gtk_label_new (_("Working...")); gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(dialog)->vbox), status, FALSE, FALSE, 5 ); gtk_dialog_set_default_response ( GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT ); // May not want to see the dialog at all if ( source_interface->is_thread || source_interface->keep_dialog_open ) gtk_widget_show_all(dialog); w->status = status; w->vw = vw; w->vlp = vlp; w->vvp = vvp; if ( source_interface->add_progress_widgets_func ) { source_interface->add_progress_widgets_func ( dialog, user_data ); } w->user_data = user_data; if (source_interface->mode == VIK_DATASOURCE_ADDTOLAYER) { VikLayer *current_selected = vik_layers_panel_get_selected ( w->vlp ); if ( IS_VIK_TRW_LAYER(current_selected) ) { wi->vtl = VIK_TRW_LAYER(current_selected); wi->creating_new_layer = FALSE; } } else if ( source_interface->mode == VIK_DATASOURCE_MANUAL_LAYER_MANAGEMENT ) { // Don't create in acquire - as datasource will perform the necessary actions wi->creating_new_layer = FALSE; VikLayer *current_selected = vik_layers_panel_get_selected ( w->vlp ); if ( IS_VIK_TRW_LAYER(current_selected) ) wi->vtl = VIK_TRW_LAYER(current_selected); } if ( wi->creating_new_layer ) { wi->vtl = VIK_TRW_LAYER ( vik_layer_create ( VIK_LAYER_TRW, w->vvp, NULL, FALSE ) ); vik_layer_rename ( VIK_LAYER ( wi->vtl ), _(source_interface->layer_title) ); } if ( source_interface->is_thread ) { if ( cmd ) { g_thread_create((GThreadFunc)get_from_anything, wi, FALSE, NULL ); gtk_dialog_run ( GTK_DIALOG(dialog) ); if (w->running) { // Cancel and mark for thread to finish w->running = FALSE; // NB Thread will free memory } else { if ( cmd_off ) { /* Turn off */ a_babel_convert_from (NULL, cmd_off, extra_off, NULL, NULL, NULL); g_free ( cmd_off ); } if ( extra_off ) g_free ( extra_off ); // Thread finished by normal completion - free memory g_free ( w ); g_free ( wi ); } } else { // This shouldn't happen... gtk_label_set_text ( GTK_LABEL(w->status), _("Unable to create command\nAcquire method failed.") ); gtk_dialog_run (GTK_DIALOG (dialog)); } } else { // bypass thread method malarkly - you'll just have to wait... if ( source_interface->process_func ) { gboolean result = source_interface->process_func ( wi->vtl, cmd, extra, (BabelStatusFunc) progress_func, w, options ); if ( !result ) a_dialog_msg ( GTK_WINDOW(vw), GTK_MESSAGE_ERROR, _("Error: acquisition failed."), NULL ); } g_free ( cmd ); g_free ( extra ); g_free ( options ); on_complete_process ( wi ); // Actually show it if necessary if ( wi->w->source_interface->keep_dialog_open ) gtk_dialog_run ( GTK_DIALOG(dialog) ); g_free ( w ); g_free ( wi ); } gtk_widget_destroy ( dialog ); } /** * a_acquire: * * Process the given VikDataSourceInterface for sources with no input data. */ void a_acquire ( VikWindow *vw, VikLayersPanel *vlp, VikViewport *vvp, VikDataSourceInterface *source_interface ) { acquire ( vw, vlp, vvp, source_interface, NULL, NULL ); } static void acquire_trwlayer_callback ( GObject *menuitem, gpointer *pass_along ) { VikDataSourceInterface *iface = g_object_get_data ( menuitem, "vik_acq_iface" ); VikWindow *vw = pass_along[0]; VikLayersPanel *vlp = pass_along[1]; VikViewport *vvp = pass_along[2]; VikTrwLayer *vtl = pass_along[3]; VikTrack *tr = pass_along[4]; acquire ( vw, vlp, vvp, iface, vtl, tr ); } static GtkWidget *acquire_build_menu ( VikWindow *vw, VikLayersPanel *vlp, VikViewport *vvp, VikTrwLayer *vtl, VikTrack *track, /* both passed to acquire, although for many filters only one ness */ const gchar *menu_title, vik_datasource_inputtype_t inputtype ) { static gpointer pass_along[5]; GtkWidget *menu_item=NULL, *menu=NULL; GtkWidget *item=NULL; int i; pass_along[0] = vw; pass_along[1] = vlp; pass_along[2] = vvp; pass_along[3] = vtl; pass_along[4] = track; for ( i = 0; i < N_FILTERS; i++ ) { if ( filters[i]->inputtype == inputtype ) { if ( ! menu_item ) { /* do this just once, but return NULL if no filters */ menu = gtk_menu_new(); menu_item = gtk_menu_item_new_with_mnemonic ( menu_title ); gtk_menu_item_set_submenu (GTK_MENU_ITEM (menu_item), menu ); } item = gtk_menu_item_new_with_label ( filters[i]->window_title ); g_object_set_data ( G_OBJECT(item), "vik_acq_iface", (gpointer) filters[i] ); g_signal_connect ( G_OBJECT(item), "activate", G_CALLBACK(acquire_trwlayer_callback), pass_along ); gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); gtk_widget_show ( item ); } } return menu_item; } /** * a_acquire_trwlayer_menu: * * Create a sub menu intended for rightclicking on a TRWLayer's menu called "Filter". * * Returns: %NULL if no filters. */ GtkWidget *a_acquire_trwlayer_menu (VikWindow *vw, VikLayersPanel *vlp, VikViewport *vvp, VikTrwLayer *vtl) { return acquire_build_menu ( vw, vlp, vvp, vtl, NULL, _("_Filter"), VIK_DATASOURCE_INPUTTYPE_TRWLAYER ); } /** * a_acquire_trwlayer_track_menu: * * Create a sub menu intended for rightclicking on a TRWLayer's menu called "Filter with Track "TRACKNAME"...". * * Returns: %NULL if no filters or no filter track has been set. */ GtkWidget *a_acquire_trwlayer_track_menu (VikWindow *vw, VikLayersPanel *vlp, VikViewport *vvp, VikTrwLayer *vtl) { if ( filter_track == NULL ) return NULL; else { gchar *menu_title = g_strdup_printf ( _("Filter with %s"), filter_track->name ); GtkWidget *rv = acquire_build_menu ( vw, vlp, vvp, vtl, filter_track, menu_title, VIK_DATASOURCE_INPUTTYPE_TRWLAYER_TRACK ); g_free ( menu_title ); return rv; } } /** * a_acquire_track_menu: * * Create a sub menu intended for rightclicking on a track's menu called "Filter". * * Returns: %NULL if no applicable filters */ GtkWidget *a_acquire_track_menu (VikWindow *vw, VikLayersPanel *vlp, VikViewport *vvp, VikTrack *tr) { return acquire_build_menu ( vw, vlp, vvp, NULL, tr, _("Filter"), VIK_DATASOURCE_INPUTTYPE_TRACK ); } /** * a_acquire_set_filter_track: * * Sets application-wide track to use with filter. references the track. */ void a_acquire_set_filter_track ( VikTrack *tr ) { if ( filter_track ) vik_track_free ( filter_track ); filter_track = tr; vik_track_ref ( tr ); } viking-1.4.2/src/bing.c0000644000175000017500000000332012145221735011600 00000000000000/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2011, Guilhem Bonnefille * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include "bing.h" #include "vikmapslayer.h" #include "bingmapsource.h" #include "vikwebtoolcenter.h" #include "vikexttools.h" /** API key registered by Guilhem Bonnefille */ #define API_KEY "AqsTAipaBBpKLXhcaGgP8kceYukatmtDLS1x0CXEhRZnpl1RELF9hlI8j4mNIkrE" /* initialisation */ void bing_init () { VikMapSource *bing_aerial = VIK_MAP_SOURCE (bing_map_source_new_with_id (212, "Bing Bird's Eye Maps", API_KEY)); maps_layer_register_map_source (bing_aerial); // Allow opening web location VikWebtoolCenter *webtool = NULL; webtool = vik_webtool_center_new_with_members ( _("Bing"), "http://www.bing.com/maps/?v=2&cp=%s~%s&lvl=%d" ); vik_ext_tools_register ( VIK_EXT_TOOL ( webtool ) ); g_object_unref ( webtool ); } viking-1.4.2/src/googlesearch.c0000644000175000017500000001117312174331626013333 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Quy Tonthat * Copyright (C) 2009, Guilhem Bonnefille * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include #include #include #include #include "viking.h" #include "util.h" #include "curl_download.h" #include "googlesearch.h" /* Compatibility */ #if ! GLIB_CHECK_VERSION(2,22,0) #define g_mapped_file_unref g_mapped_file_free #endif #define GOOGLE_GOTO_URL_FMT "http://maps.google.com/maps?q=%s&output=js" #define GOOGLE_GOTO_PATTERN_1 "{center:{lat:" #define GOOGLE_GOTO_PATTERN_2 ",lng:" #define GOOGLE_GOTO_NOT_FOUND "not understand the location" static DownloadMapOptions googlesearch_options = { FALSE, FALSE, "http://maps.google.com/", 2, a_check_map_file }; static void google_goto_tool_finalize ( GObject *gob ); static gchar *google_goto_tool_get_url_format ( VikGotoTool *self ); static DownloadMapOptions *google_goto_tool_get_download_options ( VikGotoTool *self ); static gboolean google_goto_tool_parse_file_for_latlon(VikGotoTool *self, gchar *filename, struct LatLon *ll); G_DEFINE_TYPE (GoogleGotoTool, google_goto_tool, VIK_GOTO_TOOL_TYPE) static void google_goto_tool_class_init ( GoogleGotoToolClass *klass ) { GObjectClass *object_class; VikGotoToolClass *parent_class; object_class = G_OBJECT_CLASS (klass); object_class->finalize = google_goto_tool_finalize; parent_class = VIK_GOTO_TOOL_CLASS (klass); parent_class->get_url_format = google_goto_tool_get_url_format; parent_class->get_download_options = google_goto_tool_get_download_options; parent_class->parse_file_for_latlon = google_goto_tool_parse_file_for_latlon; } GoogleGotoTool *google_goto_tool_new () { return GOOGLE_GOTO_TOOL ( g_object_new ( GOOGLE_GOTO_TOOL_TYPE, "label", "Google", NULL ) ); } static void google_goto_tool_init ( GoogleGotoTool *vlp ) { } static void google_goto_tool_finalize ( GObject *gob ) { G_OBJECT_GET_CLASS(gob)->finalize(gob); } static gboolean google_goto_tool_parse_file_for_latlon(VikGotoTool *self, gchar *file_name, struct LatLon *ll) { gchar *text, *pat; GMappedFile *mf; gsize len; gboolean found = TRUE; gchar lat_buf[32], lon_buf[32]; gchar *s; lat_buf[0] = lon_buf[0] = '\0'; if ((mf = g_mapped_file_new(file_name, FALSE, NULL)) == NULL) { g_critical(_("couldn't map temp file")); return FALSE; } len = g_mapped_file_get_length(mf); text = g_mapped_file_get_contents(mf); if (g_strstr_len(text, len, GOOGLE_GOTO_NOT_FOUND) != NULL) { found = FALSE; goto done; } if ((pat = g_strstr_len(text, len, GOOGLE_GOTO_PATTERN_1)) == NULL) { found = FALSE; goto done; } pat += strlen(GOOGLE_GOTO_PATTERN_1); s = lat_buf; if (*pat == '-') *s++ = *pat++; while ((s < (lat_buf + sizeof(lat_buf))) && (pat < (text + len)) && (g_ascii_isdigit(*pat) || (*pat == '.'))) *s++ = *pat++; *s = '\0'; if ((pat >= (text + len)) || (lat_buf[0] == '\0')) { found = FALSE; goto done; } if (strncmp(pat, GOOGLE_GOTO_PATTERN_2, strlen(GOOGLE_GOTO_PATTERN_2))) { found = FALSE; goto done; } pat += strlen(GOOGLE_GOTO_PATTERN_2); s = lon_buf; if (*pat == '-') *s++ = *pat++; while ((s < (lon_buf + sizeof(lon_buf))) && (pat < (text + len)) && (g_ascii_isdigit(*pat) || (*pat == '.'))) *s++ = *pat++; *s = '\0'; if ((pat >= (text + len)) || (lon_buf[0] == '\0')) { found = FALSE; goto done; } ll->lat = g_ascii_strtod(lat_buf, NULL); ll->lon = g_ascii_strtod(lon_buf, NULL); done: g_mapped_file_unref(mf); return (found); } static gchar *google_goto_tool_get_url_format ( VikGotoTool *self ) { return GOOGLE_GOTO_URL_FMT; } DownloadMapOptions *google_goto_tool_get_download_options ( VikGotoTool *self ) { return &googlesearch_options; } viking-1.4.2/src/viktreeview.h0000644000175000017500000001144012175546146013245 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef _VIKING_TREEVIEW_H #define _VIKING_TREEVIEW_H #include "config.h" #include #include #include G_BEGIN_DECLS #define VIK_TREEVIEW_TYPE (vik_treeview_get_type ()) #define VIK_TREEVIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIK_TREEVIEW_TYPE, VikTreeview)) #define VIK_TREEVIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VIK_TREEVIEW_TYPE, VikTreeviewClass)) #define IS_VIK_TREEVIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIK_TREEVIEW_TYPE)) #define IS_VIK_TREEVIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VIK_TREEVIEW_TYPE)) typedef struct _VikTreeview VikTreeview; typedef struct _VikTreeviewClass VikTreeviewClass; struct _VikTreeviewClass { GtkTreeViewClass vbox_class; void (* item_edited) (VikTreeview *vt, GtkTreeIter *iter, const gchar *new_name); void (* item_toggled) (VikTreeview *vt,GtkTreeIter *iter); }; enum { VIK_TREEVIEW_TYPE_LAYER = 0, VIK_TREEVIEW_TYPE_SUBLAYER }; GType vik_treeview_get_type (); VikTreeview *vik_treeview_new (); GtkWidget *vik_treeview_get_widget ( VikTreeview *vt ); gint vik_treeview_item_get_data ( VikTreeview *vt, GtkTreeIter *iter ); gint vik_treeview_item_get_type ( VikTreeview *vt, GtkTreeIter *iter ); gchar *vik_treeview_item_get_name ( VikTreeview *vt, GtkTreeIter *iter ); gpointer vik_treeview_item_get_pointer ( VikTreeview *vt, GtkTreeIter *iter ); void vik_treeview_item_set_pointer ( VikTreeview *vt, GtkTreeIter *iter, gpointer pointer ); gpointer vik_treeview_item_get_parent ( VikTreeview *vt, GtkTreeIter *iter ); void vik_treeview_select_iter ( VikTreeview *vt, GtkTreeIter *iter, gboolean view_all ); gboolean vik_treeview_get_selected_iter ( VikTreeview *vt, GtkTreeIter *iter ); void vik_treeview_item_set_icon ( VikTreeview *vt, GtkTreeIter *iter, const GdkPixbuf *icon ); void vik_treeview_item_set_name ( VikTreeview *vt, GtkTreeIter *iter, const gchar *to ); void vik_treeview_item_set_visible ( VikTreeview *vt, GtkTreeIter *iter, gboolean to ); void vik_treeview_item_delete ( VikTreeview *vt, GtkTreeIter *iter ); gboolean vik_treeview_get_iter_at_pos ( VikTreeview *vt, GtkTreeIter *iter, gint x, gint y ); gboolean vik_treeview_get_iter_from_path_str ( VikTreeview *vt, GtkTreeIter *iter, const gchar *path_str ); gboolean vik_treeview_move_item ( VikTreeview *vt, GtkTreeIter *iter, gboolean up ); void vik_treeview_item_select ( VikTreeview *vt, GtkTreeIter *iter ); void vik_treeview_item_unselect ( VikTreeview *vt, GtkTreeIter *iter ); gboolean vik_treeview_item_get_parent_iter ( VikTreeview *vt, GtkTreeIter *iter, GtkTreeIter *parent ); void vik_treeview_expand_toplevel ( VikTreeview *vt ); void vik_treeview_expand ( VikTreeview *vt, GtkTreeIter *iter ); void vik_treeview_add_layer ( VikTreeview *vt, GtkTreeIter *parent_iter, GtkTreeIter *iter, const gchar *name, gpointer parent, gpointer item, gint data, gint icon_type ); /* icon type: type of layer or -1 -> no icon */ void vik_treeview_insert_layer ( VikTreeview *vt, GtkTreeIter *parent_iter, GtkTreeIter *iter, const gchar *name, gpointer parent, gpointer item, gint data, gint icon_type, GtkTreeIter *sibling ); void vik_treeview_add_sublayer ( VikTreeview *vt, GtkTreeIter *parent_iter, GtkTreeIter *iter, const gchar *name, gpointer parent, gpointer item, gint data, GdkPixbuf *icon, gboolean has_visible, gboolean editable ); gboolean vik_treeview_get_iter_with_name ( VikTreeview *vt, GtkTreeIter *iter, GtkTreeIter *parent_iter, const gchar *name ); #ifdef VIK_CONFIG_ALPHABETIZED_TRW void vik_treeview_add_sublayer_alphabetized ( VikTreeview *vt, GtkTreeIter *parent_iter, GtkTreeIter *iter, const gchar *name, gpointer parent, gpointer item, gint data, GdkPixbuf *icon, gboolean has_visible, gboolean editable ); void vik_treeview_sublayer_realphabetize ( VikTreeview *vt, GtkTreeIter *iter, const gchar *newname ); #endif G_END_DECLS #endif viking-1.4.2/src/modules.c0000644000175000017500000001145712175546146012354 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2006-2012, Guilhem Bonnefille * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #ifdef HAVE_UNISTD_H #include #endif #include "modules.h" #include "bing.h" #include "spotmaps.h" #include "google.h" #include "terraserver.h" #include "expedia.h" #include "osm.h" #include "osm-traces.h" #include "bluemarble.h" #include "geonames.h" #include "dir.h" #include "vikmapslayer.h" #include "vikexttools.h" #include "vikgoto.h" #include "vikgobjectbuilder.h" #define VIKING_MAPS_FILE "maps.xml" #define VIKING_EXTTOOLS_FILE "external_tools.xml" #define VIKING_GOTOTOOLS_FILE "goto_tools.xml" static void modules_register_map_source(VikGobjectBuilder *self, GObject *object) { g_debug (__FUNCTION__); VikMapSource *mapsource = VIK_MAP_SOURCE (object); /* FIXME label should be hosted by object */ maps_layer_register_map_source (mapsource); } static void modules_register_exttools(VikGobjectBuilder *self, GObject *object) { g_debug (__FUNCTION__); VikExtTool *tool = VIK_EXT_TOOL (object); vik_ext_tools_register (tool); } static void modules_register_gototools(VikGobjectBuilder *self, GObject *object) { g_debug (__FUNCTION__); VikGotoTool *tool = VIK_GOTO_TOOL (object); vik_goto_register (tool); } static void modules_load_config_dir(const gchar *dir) { g_debug("Loading configurations from directory %s", dir); /* Maps sources */ gchar *maps = g_build_filename(dir, VIKING_MAPS_FILE, NULL); if (g_access (maps, R_OK) == 0) { VikGobjectBuilder *builder = vik_gobject_builder_new (); g_signal_connect (builder, "new-object", G_CALLBACK (modules_register_map_source), NULL); vik_gobject_builder_parse (builder, maps); g_object_unref (builder); } /* External tools */ gchar *tools = g_build_filename(dir, VIKING_EXTTOOLS_FILE, NULL); if (g_access (tools, R_OK) == 0) { VikGobjectBuilder *builder = vik_gobject_builder_new (); g_signal_connect (builder, "new-object", G_CALLBACK (modules_register_exttools), NULL); vik_gobject_builder_parse (builder, tools); g_object_unref (builder); } /* Go-to search engines */ gchar *go_to = g_build_filename(dir, VIKING_GOTOTOOLS_FILE, NULL); if (g_access (go_to, R_OK) == 0) { VikGobjectBuilder *builder = vik_gobject_builder_new (); g_signal_connect (builder, "new-object", G_CALLBACK (modules_register_gototools), NULL); vik_gobject_builder_parse (builder, go_to); g_object_unref (builder); } } static void modules_load_config(void) { /* Look in the directories of data path */ gchar * * data_dirs = a_get_viking_data_path(); /* Priority is standard one: left element is more important than right one. But our logic is to load all existing files and overwrite overlapping config with last recent one. So, we have to process directories in reverse order. */ /* First: find the last element */ gchar * * ptr = data_dirs; while (*ptr != NULL) ptr++; /* Second: deduce the number of directories */ int nb_data_dirs = 0; nb_data_dirs = ptr - data_dirs; /* Last: parse them in reverse order */ for (; nb_data_dirs > 0 ; nb_data_dirs--) { modules_load_config_dir(data_dirs[nb_data_dirs-1]); } g_strfreev(data_dirs); /* Check if system config is set */ modules_load_config_dir(VIKING_SYSCONFDIR); const gchar *data_home = a_get_viking_data_home (); if (data_home) { modules_load_config_dir(data_home); } /* Check user's home config */ modules_load_config_dir(a_get_viking_dir()); } void modules_init() { #ifdef VIK_CONFIG_BING bing_init(); #endif #ifdef VIK_CONFIG_GOOGLE google_init(); #endif #ifdef VIK_CONFIG_EXPEDIA expedia_init(); #endif #ifdef VIK_CONFIG_TERRASERVER terraserver_init(); #endif #ifdef VIK_CONFIG_OPENSTREETMAP osm_init(); osm_traces_init(); #endif #ifdef VIK_CONFIG_BLUEMARBLE bluemarble_init(); #endif #ifdef VIK_CONFIG_GEONAMES geonames_init(); #endif #ifdef VIK_CONFIG_SPOTMAPS spotmaps_init(); #endif /* As modules are loaded, we can load configuration files */ modules_load_config (); } viking-1.4.2/src/vikaggregatelayer.c0000644000175000017500000004045012175546146014374 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "viking.h" #include "icons/icons.h" #include #include #define DISCONNECT_UPDATE_SIGNAL(vl, val) g_signal_handlers_disconnect_matched(vl, G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, val) static void aggregate_layer_marshall( VikAggregateLayer *val, guint8 **data, gint *len ); static VikAggregateLayer *aggregate_layer_unmarshall( guint8 *data, gint len, VikViewport *vvp ); static void aggregate_layer_change_coord_mode ( VikAggregateLayer *val, VikCoordMode mode ); static void aggregate_layer_drag_drop_request ( VikAggregateLayer *val_src, VikAggregateLayer *val_dest, GtkTreeIter *src_item_iter, GtkTreePath *dest_path ); VikLayerInterface vik_aggregate_layer_interface = { "Aggregate", N_("Aggregate"), "A", &vikaggregatelayer_pixbuf, NULL, 0, NULL, 0, NULL, 0, VIK_MENU_ITEM_ALL, (VikLayerFuncCreate) vik_aggregate_layer_create, (VikLayerFuncRealize) vik_aggregate_layer_realize, (VikLayerFuncPostRead) NULL, (VikLayerFuncFree) vik_aggregate_layer_free, (VikLayerFuncProperties) NULL, (VikLayerFuncDraw) vik_aggregate_layer_draw, (VikLayerFuncChangeCoordMode) aggregate_layer_change_coord_mode, (VikLayerFuncSetMenuItemsSelection) NULL, (VikLayerFuncGetMenuItemsSelection) NULL, (VikLayerFuncAddMenuItems) NULL, (VikLayerFuncSublayerAddMenuItems) NULL, (VikLayerFuncSublayerRenameRequest) NULL, (VikLayerFuncSublayerToggleVisible) NULL, (VikLayerFuncSublayerTooltip) NULL, (VikLayerFuncLayerTooltip) NULL, (VikLayerFuncLayerSelected) NULL, (VikLayerFuncMarshall) aggregate_layer_marshall, (VikLayerFuncUnmarshall) aggregate_layer_unmarshall, (VikLayerFuncSetParam) NULL, (VikLayerFuncGetParam) NULL, (VikLayerFuncReadFileData) NULL, (VikLayerFuncWriteFileData) NULL, (VikLayerFuncDeleteItem) NULL, (VikLayerFuncCutItem) NULL, (VikLayerFuncCopyItem) NULL, (VikLayerFuncPasteItem) NULL, (VikLayerFuncFreeCopiedItem) NULL, (VikLayerFuncDragDropRequest) aggregate_layer_drag_drop_request, (VikLayerFuncSelectClick) NULL, (VikLayerFuncSelectMove) NULL, (VikLayerFuncSelectRelease) NULL, (VikLayerFuncSelectedViewportMenu) NULL, }; struct _VikAggregateLayer { VikLayer vl; GList *children; }; GType vik_aggregate_layer_get_type () { static GType val_type = 0; if (!val_type) { static const GTypeInfo val_info = { sizeof (VikAggregateLayerClass), NULL, /* base_init */ NULL, /* base_finalize */ NULL, /* class init */ NULL, /* class_finalize */ NULL, /* class_data */ sizeof (VikAggregateLayer), 0, NULL /* instance init */ }; val_type = g_type_register_static ( VIK_LAYER_TYPE, "VikAggregateLayer", &val_info, 0 ); } return val_type; } VikAggregateLayer *vik_aggregate_layer_create (VikViewport *vp) { VikAggregateLayer *rv = vik_aggregate_layer_new (); vik_layer_rename ( VIK_LAYER(rv), vik_aggregate_layer_interface.name ); return rv; } static void aggregate_layer_marshall( VikAggregateLayer *val, guint8 **data, gint *datalen ) { GList *child = val->children; VikLayer *child_layer; guint8 *ld; gint ll; GByteArray* b = g_byte_array_new (); gint len; #define alm_append(obj, sz) \ len = (sz); \ g_byte_array_append ( b, (guint8 *)&len, sizeof(len) ); \ g_byte_array_append ( b, (guint8 *)(obj), len ); vik_layer_marshall_params(VIK_LAYER(val), &ld, &ll); alm_append(ld, ll); g_free(ld); while (child) { child_layer = VIK_LAYER(child->data); vik_layer_marshall ( child_layer, &ld, &ll ); if (ld) { alm_append(ld, ll); g_free(ld); } child = child->next; } *data = b->data; *datalen = b->len; g_byte_array_free(b, FALSE); #undef alm_append } static VikAggregateLayer *aggregate_layer_unmarshall( guint8 *data, gint len, VikViewport *vvp ) { #define alm_size (*(gint *)data) #define alm_next \ len -= sizeof(gint) + alm_size; \ data += sizeof(gint) + alm_size; VikAggregateLayer *rv = vik_aggregate_layer_new(); VikLayer *child_layer; vik_layer_unmarshall_params ( VIK_LAYER(rv), data+sizeof(gint), alm_size, vvp ); alm_next; while (len>0) { child_layer = vik_layer_unmarshall ( data + sizeof(gint), alm_size, vvp ); if (child_layer) { rv->children = g_list_append ( rv->children, child_layer ); g_signal_connect_swapped ( G_OBJECT(child_layer), "update", G_CALLBACK(vik_layer_emit_update_secondary), rv ); } alm_next; } // g_print("aggregate_layer_unmarshall ended with len=%d\n", len); return rv; #undef alm_size #undef alm_next } VikAggregateLayer *vik_aggregate_layer_new () { VikAggregateLayer *val = VIK_AGGREGATE_LAYER ( g_object_new ( VIK_AGGREGATE_LAYER_TYPE, NULL ) ); vik_layer_set_type ( VIK_LAYER(val), VIK_LAYER_AGGREGATE ); val->children = NULL; return val; } void vik_aggregate_layer_insert_layer ( VikAggregateLayer *val, VikLayer *l, GtkTreeIter *replace_iter ) { GtkTreeIter iter; VikLayer *vl = VIK_LAYER(val); if ( vl->realized ) { vik_treeview_insert_layer ( vl->vt, &(vl->iter), &iter, l->name, val, l, l->type, l->type, replace_iter ); if ( ! l->visible ) vik_treeview_item_set_visible ( vl->vt, &iter, FALSE ); vik_layer_realize ( l, vl->vt, &iter ); if ( val->children == NULL ) vik_treeview_expand ( vl->vt, &(vl->iter) ); } if (replace_iter) { GList *theone = g_list_find ( val->children, vik_treeview_item_get_pointer ( vl->vt, replace_iter ) ); val->children = g_list_insert ( val->children, l, g_list_position(val->children,theone)+1 ); } else { // Effectively insert at 'end' of the list to match how displayed in the treeview // - but since it is drawn from 'bottom first' it is actually the first in the child list // This ordering is especially important if it is a map or similar type, // which needs be drawn first for the layering draw method to work properly. // ATM this only happens when a layer is drag/dropped to the end of an aggregate layer val->children = g_list_prepend ( val->children, l ); } g_signal_connect_swapped ( G_OBJECT(l), "update", G_CALLBACK(vik_layer_emit_update_secondary), val ); } void vik_aggregate_layer_add_layer ( VikAggregateLayer *val, VikLayer *l ) { GtkTreeIter iter; VikLayer *vl = VIK_LAYER(val); if ( vl->realized ) { vik_treeview_add_layer ( vl->vt, &(vl->iter), &iter, l->name, val, l, l->type, l->type); if ( ! l->visible ) vik_treeview_item_set_visible ( vl->vt, &iter, FALSE ); vik_layer_realize ( l, vl->vt, &iter ); if ( val->children == NULL ) vik_treeview_expand ( vl->vt, &(vl->iter) ); } val->children = g_list_append ( val->children, l ); g_signal_connect_swapped ( G_OBJECT(l), "update", G_CALLBACK(vik_layer_emit_update_secondary), val ); } void vik_aggregate_layer_move_layer ( VikAggregateLayer *val, GtkTreeIter *child_iter, gboolean up ) { GList *theone, *first, *second; VikLayer *vl = VIK_LAYER(val); vik_treeview_move_item ( vl->vt, child_iter, up ); theone = g_list_find ( val->children, vik_treeview_item_get_pointer ( vl->vt, child_iter ) ); g_assert ( theone != NULL ); /* the old switcheroo */ if ( up && theone->next ) { first = theone; second = theone->next; } else if ( !up && theone->prev ) { first = theone->prev; second = theone; } else return; first->next = second->next; second->prev = first->prev; first->prev = second; second->next = first; /* second is now first */ if ( second->prev ) second->prev->next = second; if ( first->next ) first->next->prev = first; if ( second->prev == NULL ) val->children = second; } /* Draw the aggregate layer. If vik viewport is in half_drawn mode, this means we are only * to draw the layers above and including the trigger layer. * To do this we don't draw any layers if in half drawn mode, unless we find the * trigger layer, in which case we pull up the saved pixmap, turn off half drawn mode and * start drawing layers. * Also, if we were never in half drawn mode, we save a snapshot * of the pixmap before drawing the trigger layer so we can use it again * later. */ void vik_aggregate_layer_draw ( VikAggregateLayer *val, gpointer data ) { GList *iter = val->children; VikLayer *vl; VikViewport *viewport = VIK_VIEWPORT(data); VikLayer *trigger = VIK_LAYER(vik_viewport_get_trigger( viewport )); while ( iter ) { vl = VIK_LAYER(iter->data); if ( vl == trigger ) { if ( vik_viewport_get_half_drawn ( viewport ) ) { vik_viewport_set_half_drawn ( viewport, FALSE ); vik_viewport_snapshot_load( viewport ); } else { vik_viewport_snapshot_save( viewport ); } } if ( vl->type == VIK_LAYER_AGGREGATE || vl->type == VIK_LAYER_GPS || ! vik_viewport_get_half_drawn( viewport ) ) vik_layer_draw ( vl, data ); iter = iter->next; } } static void aggregate_layer_change_coord_mode ( VikAggregateLayer *val, VikCoordMode mode ) { GList *iter = val->children; while ( iter ) { vik_layer_change_coord_mode ( VIK_LAYER(iter->data), mode ); iter = iter->next; } } static void disconnect_layer_signal ( VikLayer *vl, VikAggregateLayer *val ) { g_assert(DISCONNECT_UPDATE_SIGNAL(vl,val)==1); } void vik_aggregate_layer_free ( VikAggregateLayer *val ) { g_list_foreach ( val->children, (GFunc)(disconnect_layer_signal), val ); g_list_foreach ( val->children, (GFunc)(g_object_unref), NULL ); g_list_free ( val->children ); } static void delete_layer_iter ( VikLayer *vl ) { if ( vl->realized ) vik_treeview_item_delete ( vl->vt, &(vl->iter) ); } void vik_aggregate_layer_clear ( VikAggregateLayer *val ) { g_list_foreach ( val->children, (GFunc)(disconnect_layer_signal), val ); g_list_foreach ( val->children, (GFunc)(delete_layer_iter), NULL ); g_list_foreach ( val->children, (GFunc)(g_object_unref), NULL ); g_list_free ( val->children ); val->children = NULL; } gboolean vik_aggregate_layer_delete ( VikAggregateLayer *val, GtkTreeIter *iter ) { VikLayer *l = VIK_LAYER( vik_treeview_item_get_pointer ( VIK_LAYER(val)->vt, iter ) ); gboolean was_visible = l->visible; vik_treeview_item_delete ( VIK_LAYER(val)->vt, iter ); val->children = g_list_remove ( val->children, l ); g_assert(DISCONNECT_UPDATE_SIGNAL(l,val)==1); g_object_unref ( l ); return was_visible; } #if 0 /* returns 0 == we're good, 1 == didn't find any layers, 2 == got rejected */ guint vik_aggregate_layer_tool ( VikAggregateLayer *val, guint16 layer_type, VikToolInterfaceFunc tool_func, GdkEventButton *event, VikViewport *vvp ) { GList *iter = val->children; gboolean found_rej = FALSE; if (!iter) return FALSE; while (iter->next) iter = iter->next; while ( iter ) { /* if this layer "accepts" the tool call */ if ( VIK_LAYER(iter->data)->visible && VIK_LAYER(iter->data)->type == layer_type ) { if ( tool_func ( VIK_LAYER(iter->data), event, vvp ) ) return 0; else found_rej = TRUE; } /* recursive -- try the same for the child aggregate layer. */ else if ( VIK_LAYER(iter->data)->visible && VIK_LAYER(iter->data)->type == VIK_LAYER_AGGREGATE ) { gint rv = vik_aggregate_layer_tool(VIK_AGGREGATE_LAYER(iter->data), layer_type, tool_func, event, vvp); if ( rv == 0 ) return 0; else if ( rv == 2 ) found_rej = TRUE; } iter = iter->prev; } return found_rej ? 2 : 1; /* no one wanted to accept the tool call in this layer */ } #endif VikLayer *vik_aggregate_layer_get_top_visible_layer_of_type ( VikAggregateLayer *val, gint type ) { VikLayer *rv; GList *ls = val->children; if (!ls) return NULL; while (ls->next) ls = ls->next; while ( ls ) { VikLayer *vl = VIK_LAYER(ls->data); if ( vl->visible && vl->type == type ) return vl; else if ( vl->visible && vl->type == VIK_LAYER_AGGREGATE ) { rv = vik_aggregate_layer_get_top_visible_layer_of_type(VIK_AGGREGATE_LAYER(vl), type); if ( rv ) return rv; } ls = ls->prev; } return NULL; } GList *vik_aggregate_layer_get_all_layers_of_type(VikAggregateLayer *val, GList *layers, gint type, gboolean include_invisible) { GList *l = layers; GList *children = val->children; VikLayer *vl; if (!children) return layers; // Where appropriate *don't* include non-visible layers while (children) { vl = VIK_LAYER(children->data); if (vl->type == VIK_LAYER_AGGREGATE ) { // Don't even consider invisible aggregrates, unless told to if (vl->visible || include_invisible) l = vik_aggregate_layer_get_all_layers_of_type(VIK_AGGREGATE_LAYER(children->data), l, type, include_invisible); } else if (vl->type == type) { if (vl->visible || include_invisible) l = g_list_prepend(l, children->data); /* now in top down order */ } else if (type == VIK_LAYER_TRW) { /* GPS layers contain TRW layers. cf with usage in file.c */ if (VIK_LAYER(children->data)->type == VIK_LAYER_GPS) { if (VIK_LAYER(children->data)->visible || include_invisible) { if (!vik_gps_layer_is_empty(VIK_GPS_LAYER(children->data))) { /* can not use g_list_concat due to wrong copy method - crashes if used a couple times !! l = g_list_concat (l, vik_gps_layer_get_children (VIK_GPS_LAYER(children->data))); */ /* create own copy method instead :( */ GList *gps_trw_layers = (GList *)vik_gps_layer_get_children (VIK_GPS_LAYER(children->data)); int n_layers = g_list_length (gps_trw_layers); int layer = 0; for ( layer = 0; layer < n_layers; layer++) { l = g_list_prepend(l, gps_trw_layers->data); gps_trw_layers = gps_trw_layers->next; } g_list_free(gps_trw_layers); } } } } children = children->next; } return l; } void vik_aggregate_layer_realize ( VikAggregateLayer *val, VikTreeview *vt, GtkTreeIter *layer_iter ) { GList *i = val->children; GtkTreeIter iter; VikLayer *vl = VIK_LAYER(val); VikLayer *vli; while ( i ) { vli = VIK_LAYER(i->data); vik_treeview_add_layer ( vl->vt, layer_iter, &iter, vli->name, val, vli, vli->type, vli->type ); if ( ! vli->visible ) vik_treeview_item_set_visible ( vl->vt, &iter, FALSE ); vik_layer_realize ( vli, vl->vt, &iter ); i = i->next; } } const GList *vik_aggregate_layer_get_children ( VikAggregateLayer *val ) { return val->children; } gboolean vik_aggregate_layer_is_empty ( VikAggregateLayer *val ) { if ( val->children ) return FALSE; return TRUE; } static void aggregate_layer_drag_drop_request ( VikAggregateLayer *val_src, VikAggregateLayer *val_dest, GtkTreeIter *src_item_iter, GtkTreePath *dest_path ) { VikTreeview *vt = VIK_LAYER(val_src)->vt; VikLayer *vl = vik_treeview_item_get_pointer(vt, src_item_iter); GtkTreeIter dest_iter; gchar *dp; gboolean target_exists; dp = gtk_tree_path_to_string(dest_path); target_exists = vik_treeview_get_iter_from_path_str(vt, &dest_iter, dp); /* vik_aggregate_layer_delete unrefs, but we don't want that here. * we're still using the layer. */ g_object_ref ( vl ); vik_aggregate_layer_delete(val_src, src_item_iter); if (target_exists) { vik_aggregate_layer_insert_layer(val_dest, vl, &dest_iter); } else { vik_aggregate_layer_insert_layer(val_dest, vl, NULL); /* append */ } g_free(dp); } viking-1.4.2/src/garminsymbols.h0000644000175000017500000000227612175546146013576 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef __VIKING_GARMINSYMBOLS_H #define __VIKING_GARMINSYMBOLS_H #include #include #include G_BEGIN_DECLS GdkPixbuf *a_get_wp_sym ( const gchar *sym ); void a_populate_sym_list ( GtkListStore *list ); /* Use when preferences have changed to reload icons*/ void clear_garmin_icon_syms (); G_END_DECLS #endif viking-1.4.2/src/babel.h0000644000175000017500000000626512175546146011757 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * Copyright (C) 2005, Alex Foobarian * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef _VIKING_BABEL_H #define _VIKING_BABEL_H #include #include "viktrwlayer.h" G_BEGIN_DECLS /** * BabelProgressCode: * @BABEL_DIAG_OUTPUT: a line of diagnostic output is available. The pointer is to a * NULL-terminated line of diagnostic output from gpsbabel. * @BABEL_DONE: gpsbabel finished, or %NULL if no callback is needed. * * Used when calling #BabelStatusFunc. */ typedef enum { BABEL_DIAG_OUTPUT, BABEL_DONE, } BabelProgressCode; /** * BabelStatusFunc: * * Callback function. */ typedef void (*BabelStatusFunc)(BabelProgressCode, gpointer, gpointer); /** * BabelMode: * * Store the Read/Write support offered by gpsbabel for a given format. */ typedef struct { unsigned waypointsRead : 1; unsigned waypointsWrite : 1; unsigned tracksRead : 1; unsigned tracksWrite : 1; unsigned routesRead : 1; unsigned routesWrite : 1; } BabelMode; /** * BabelDevice: * @name: gpsbabel's identifier of the device * @label: human readable label * * Representation of a supported device. */ typedef struct { BabelMode mode; gchar *name; gchar *label; } BabelDevice; /** * BabelFile: * @name: gpsbabel's identifier of the device * @ext: file's extension for this format * @label: human readable label * * Representation of a supported file format. */ typedef struct { BabelMode mode; gchar *name; gchar *ext; gchar *label; } BabelFile; GList *a_babel_file_list; GList *a_babel_device_list; gboolean a_babel_convert( VikTrwLayer *vt, const char *babelargs, BabelStatusFunc cb, gpointer user_data, gpointer options ); gboolean a_babel_convert_from( VikTrwLayer *vt, const char *babelargs, const char *file, BabelStatusFunc cb, gpointer user_data, gpointer options ); gboolean a_babel_convert_from_shellcommand ( VikTrwLayer *vt, const char *input_cmd, const char *input_file_type, BabelStatusFunc cb, gpointer user_data, gpointer options ); gboolean a_babel_convert_from_url ( VikTrwLayer *vt, const char *url, const char *input_type, BabelStatusFunc cb, gpointer user_data, DownloadMapOptions *options ); gboolean a_babel_convert_to( VikTrwLayer *vt, VikTrack *track, const char *babelargs, const char *file, BabelStatusFunc cb, gpointer user_data ); void a_babel_init (); void a_babel_uninit (); G_END_DECLS #endif viking-1.4.2/src/viktrack.c0000644000175000017500000011515012175546146012515 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * Copyright (c) 2012, Rob Norris * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include #ifdef HAVE_STRING_H #include #endif #ifdef HAVE_MATH_H #include #endif #include "coords.h" #include "vikcoord.h" #include "viktrack.h" #include "globals.h" #include "dems.h" VikTrack *vik_track_new() { VikTrack *tr = g_malloc0 ( sizeof ( VikTrack ) ); tr->ref_count = 1; return tr; } void vik_track_set_comment_no_copy(VikTrack *tr, gchar *comment) { if ( tr->comment ) g_free ( tr->comment ); tr->comment = comment; } void vik_track_set_name(VikTrack *tr, const gchar *name) { if ( tr->name ) g_free ( tr->name ); tr->name = g_strdup(name); } void vik_track_set_comment(VikTrack *tr, const gchar *comment) { if ( tr->comment ) g_free ( tr->comment ); if ( comment && comment[0] != '\0' ) tr->comment = g_strdup(comment); else tr->comment = NULL; } void vik_track_set_description(VikTrack *tr, const gchar *description) { if ( tr->description ) g_free ( tr->description ); if ( description && description[0] != '\0' ) tr->description = g_strdup(description); else tr->description = NULL; } void vik_track_ref(VikTrack *tr) { tr->ref_count++; } void vik_track_set_property_dialog(VikTrack *tr, GtkWidget *dialog) { /* Warning: does not check for existing dialog */ tr->property_dialog = dialog; } void vik_track_clear_property_dialog(VikTrack *tr) { tr->property_dialog = NULL; } void vik_track_free(VikTrack *tr) { if ( tr->ref_count-- > 1 ) return; if ( tr->name ) g_free ( tr->name ); if ( tr->comment ) g_free ( tr->comment ); if ( tr->description ) g_free ( tr->description ); g_list_foreach ( tr->trackpoints, (GFunc) g_free, NULL ); g_list_free( tr->trackpoints ); if (tr->property_dialog) if ( GTK_IS_WIDGET(tr->property_dialog) ) gtk_widget_destroy ( GTK_WIDGET(tr->property_dialog) ); g_free ( tr ); } /** * vik_track_copy: * @tr: The Track to copy * @copy_points: Whether to copy the track points or not * * Normally for copying the track it's best to copy all the trackpoints * However for some operations such as splitting tracks the trackpoints will be managed separately, so no need to copy them. * * Returns: the copied VikTrack */ VikTrack *vik_track_copy ( const VikTrack *tr, gboolean copy_points ) { VikTrack *new_tr = vik_track_new(); VikTrackpoint *new_tp; GList *tp_iter = tr->trackpoints; new_tr->visible = tr->visible; new_tr->is_route = tr->is_route; new_tr->has_color = tr->has_color; new_tr->color = tr->color; new_tr->trackpoints = NULL; if ( copy_points ) { while ( tp_iter ) { new_tp = g_malloc ( sizeof ( VikTrackpoint ) ); *new_tp = *((VikTrackpoint *)(tp_iter->data)); new_tr->trackpoints = g_list_append ( new_tr->trackpoints, new_tp ); tp_iter = tp_iter->next; } } vik_track_set_name(new_tr,tr->name); vik_track_set_comment(new_tr,tr->comment); vik_track_set_description(new_tr,tr->description); return new_tr; } VikTrackpoint *vik_trackpoint_new() { VikTrackpoint *tp = g_malloc0(sizeof(VikTrackpoint)); tp->speed = NAN; tp->course = NAN; tp->altitude = VIK_DEFAULT_ALTITUDE; tp->hdop = VIK_DEFAULT_DOP; tp->vdop = VIK_DEFAULT_DOP; tp->pdop = VIK_DEFAULT_DOP; return tp; } void vik_trackpoint_free(VikTrackpoint *tp) { g_free(tp); } VikTrackpoint *vik_trackpoint_copy(VikTrackpoint *tp) { VikTrackpoint *rv = vik_trackpoint_new(); *rv = *tp; return rv; } gdouble vik_track_get_length(const VikTrack *tr) { gdouble len = 0.0; if ( tr->trackpoints ) { GList *iter = tr->trackpoints->next; while (iter) { if ( ! VIK_TRACKPOINT(iter->data)->newsegment ) len += vik_coord_diff ( &(VIK_TRACKPOINT(iter->data)->coord), &(VIK_TRACKPOINT(iter->prev->data)->coord) ); iter = iter->next; } } return len; } gdouble vik_track_get_length_including_gaps(const VikTrack *tr) { gdouble len = 0.0; if ( tr->trackpoints ) { GList *iter = tr->trackpoints->next; while (iter) { len += vik_coord_diff ( &(VIK_TRACKPOINT(iter->data)->coord), &(VIK_TRACKPOINT(iter->prev->data)->coord) ); iter = iter->next; } } return len; } gulong vik_track_get_tp_count(const VikTrack *tr) { gulong num = 0; GList *iter = tr->trackpoints; while ( iter ) { num++; iter = iter->next; } return num; } gulong vik_track_get_dup_point_count ( const VikTrack *tr ) { gulong num = 0; GList *iter = tr->trackpoints; while ( iter ) { if ( iter->next && vik_coord_equals ( &(VIK_TRACKPOINT(iter->data)->coord), &(VIK_TRACKPOINT(iter->next->data)->coord) ) ) num++; iter = iter->next; } return num; } /* * Deletes adjacent points that have the same position * Returns the number of points that were deleted */ gulong vik_track_remove_dup_points ( VikTrack *tr ) { gulong num = 0; GList *iter = tr->trackpoints; while ( iter ) { if ( iter->next && vik_coord_equals ( &(VIK_TRACKPOINT(iter->data)->coord), &(VIK_TRACKPOINT(iter->next->data)->coord) ) ) { num++; // Maintain track segments if ( VIK_TRACKPOINT(iter->next->data)->newsegment && (iter->next)->next ) VIK_TRACKPOINT(((iter->next)->next)->data)->newsegment = TRUE; vik_trackpoint_free ( iter->next->data ); tr->trackpoints = g_list_delete_link ( tr->trackpoints, iter->next ); } else iter = iter->next; } return num; } /* * Get a count of trackpoints with the same defined timestamp * Note is using timestamps with a resolution with 1 second */ gulong vik_track_get_same_time_point_count ( const VikTrack *tr ) { gulong num = 0; GList *iter = tr->trackpoints; while ( iter ) { if ( iter->next && ( VIK_TRACKPOINT(iter->data)->has_timestamp && VIK_TRACKPOINT(iter->next->data)->has_timestamp ) && ( VIK_TRACKPOINT(iter->data)->timestamp == VIK_TRACKPOINT(iter->next->data)->timestamp) ) num++; iter = iter->next; } return num; } /* * Deletes adjacent points that have the same defined timestamp * Returns the number of points that were deleted */ gulong vik_track_remove_same_time_points ( VikTrack *tr ) { gulong num = 0; GList *iter = tr->trackpoints; while ( iter ) { if ( iter->next && ( VIK_TRACKPOINT(iter->data)->has_timestamp && VIK_TRACKPOINT(iter->next->data)->has_timestamp ) && ( VIK_TRACKPOINT(iter->data)->timestamp == VIK_TRACKPOINT(iter->next->data)->timestamp) ) { num++; // Maintain track segments if ( VIK_TRACKPOINT(iter->next->data)->newsegment && (iter->next)->next ) VIK_TRACKPOINT(((iter->next)->next)->data)->newsegment = TRUE; vik_trackpoint_free ( iter->next->data ); tr->trackpoints = g_list_delete_link ( tr->trackpoints, iter->next ); } else iter = iter->next; } return num; } /* * Deletes all 'extra' trackpoint information * such as time stamps, speed, course etc... */ void vik_track_to_routepoints ( VikTrack *tr ) { GList *iter = tr->trackpoints; while ( iter ) { // c.f. with vik_trackpoint_new() VIK_TRACKPOINT(iter->data)->has_timestamp = FALSE; VIK_TRACKPOINT(iter->data)->timestamp = 0; VIK_TRACKPOINT(iter->data)->speed = NAN; VIK_TRACKPOINT(iter->data)->course = NAN; VIK_TRACKPOINT(iter->data)->hdop = VIK_DEFAULT_DOP; VIK_TRACKPOINT(iter->data)->vdop = VIK_DEFAULT_DOP; VIK_TRACKPOINT(iter->data)->pdop = VIK_DEFAULT_DOP; VIK_TRACKPOINT(iter->data)->nsats = 0; VIK_TRACKPOINT(iter->data)->fix_mode = VIK_GPS_MODE_NOT_SEEN; iter = iter->next; } } guint vik_track_get_segment_count(const VikTrack *tr) { guint num = 1; GList *iter = tr->trackpoints; if ( !iter ) return 0; while ( (iter = iter->next) ) { if ( VIK_TRACKPOINT(iter->data)->newsegment ) num++; } return num; } VikTrack **vik_track_split_into_segments(VikTrack *t, guint *ret_len) { VikTrack **rv; VikTrack *tr; guint i; guint segs = vik_track_get_segment_count(t); GList *iter; if ( segs < 2 ) { *ret_len = 0; return NULL; } rv = g_malloc ( segs * sizeof(VikTrack *) ); tr = vik_track_copy ( t, TRUE ); rv[0] = tr; iter = tr->trackpoints; i = 1; while ( (iter = iter->next) ) { if ( VIK_TRACKPOINT(iter->data)->newsegment ) { iter->prev->next = NULL; iter->prev = NULL; rv[i] = vik_track_copy ( tr, FALSE ); rv[i]->trackpoints = iter; i++; } } *ret_len = segs; return rv; } /* * Simply remove any subsequent segment markers in a track to form one continuous track * Return the number of segments merged */ guint vik_track_merge_segments(VikTrack *tr) { guint num = 0; GList *iter = tr->trackpoints; if ( !iter ) return num; // Always skip the first point as this should be the first segment iter = iter->next; while ( (iter = iter->next) ) { if ( VIK_TRACKPOINT(iter->data)->newsegment ) { VIK_TRACKPOINT(iter->data)->newsegment = FALSE; num++; } } return num; } void vik_track_reverse ( VikTrack *tr ) { GList *iter; tr->trackpoints = g_list_reverse(tr->trackpoints); /* fix 'newsegment' */ iter = g_list_last ( tr->trackpoints ); while ( iter ) { if ( ! iter->next ) /* last segment, was first, cancel newsegment. */ VIK_TRACKPOINT(iter->data)->newsegment = FALSE; if ( ! iter->prev ) /* first segment by convention has newsegment flag. */ VIK_TRACKPOINT(iter->data)->newsegment = TRUE; else if ( VIK_TRACKPOINT(iter->data)->newsegment && iter->next ) { VIK_TRACKPOINT(iter->next->data)->newsegment = TRUE; VIK_TRACKPOINT(iter->data)->newsegment = FALSE; } iter = iter->prev; } } gdouble vik_track_get_average_speed(const VikTrack *tr) { gdouble len = 0.0; guint32 time = 0; if ( tr->trackpoints ) { GList *iter = tr->trackpoints->next; while (iter) { if ( VIK_TRACKPOINT(iter->data)->has_timestamp && VIK_TRACKPOINT(iter->prev->data)->has_timestamp && (! VIK_TRACKPOINT(iter->data)->newsegment) ) { len += vik_coord_diff ( &(VIK_TRACKPOINT(iter->data)->coord), &(VIK_TRACKPOINT(iter->prev->data)->coord) ); time += ABS(VIK_TRACKPOINT(iter->data)->timestamp - VIK_TRACKPOINT(iter->prev->data)->timestamp); } iter = iter->next; } } return (time == 0) ? 0 : ABS(len/time); } /** * Based on a simple average speed, but with a twist - to give a moving average. * . GPSs often report a moving average in their statistics output * . bicycle speedos often don't factor in time when stopped - hence reporting a moving average for speed * * Often GPS track will record every second but not when stationary * This method doesn't use samples that differ over the specified time limit - effectively skipping that time chunk from the total time * * Suggest to use 60 seconds as the stop length (as the default used in the TrackWaypoint draw stops factor) */ gdouble vik_track_get_average_speed_moving (const VikTrack *tr, int stop_length_seconds) { gdouble len = 0.0; guint32 time = 0; if ( tr->trackpoints ) { GList *iter = tr->trackpoints->next; while (iter) { if ( VIK_TRACKPOINT(iter->data)->has_timestamp && VIK_TRACKPOINT(iter->prev->data)->has_timestamp && (! VIK_TRACKPOINT(iter->data)->newsegment) ) { if ( ( VIK_TRACKPOINT(iter->data)->timestamp - VIK_TRACKPOINT(iter->prev->data)->timestamp ) < stop_length_seconds ) { len += vik_coord_diff ( &(VIK_TRACKPOINT(iter->data)->coord), &(VIK_TRACKPOINT(iter->prev->data)->coord) ); time += ABS(VIK_TRACKPOINT(iter->data)->timestamp - VIK_TRACKPOINT(iter->prev->data)->timestamp); } } iter = iter->next; } } return (time == 0) ? 0 : ABS(len/time); } gdouble vik_track_get_max_speed(const VikTrack *tr) { gdouble maxspeed = 0.0, speed = 0.0; if ( tr->trackpoints ) { GList *iter = tr->trackpoints->next; while (iter) { if ( VIK_TRACKPOINT(iter->data)->has_timestamp && VIK_TRACKPOINT(iter->prev->data)->has_timestamp && (! VIK_TRACKPOINT(iter->data)->newsegment) ) { speed = vik_coord_diff ( &(VIK_TRACKPOINT(iter->data)->coord), &(VIK_TRACKPOINT(iter->prev->data)->coord) ) / ABS(VIK_TRACKPOINT(iter->data)->timestamp - VIK_TRACKPOINT(iter->prev->data)->timestamp); if ( speed > maxspeed ) maxspeed = speed; } iter = iter->next; } } return maxspeed; } void vik_track_convert ( VikTrack *tr, VikCoordMode dest_mode ) { GList *iter = tr->trackpoints; while (iter) { vik_coord_convert ( &(VIK_TRACKPOINT(iter->data)->coord), dest_mode ); iter = iter->next; } } /* I understood this when I wrote it ... maybe ... Basically it eats up the * proper amounts of length on the track and averages elevation over that. */ gdouble *vik_track_make_elevation_map ( const VikTrack *tr, guint16 num_chunks ) { gdouble *pts; gdouble total_length, chunk_length, current_dist, current_area_under_curve, current_seg_length, dist_along_seg = 0.0; gdouble altitude1, altitude2; guint16 current_chunk; gboolean ignore_it = FALSE; GList *iter = tr->trackpoints; if (!iter || !iter->next) /* zero- or one-point track */ return NULL; { /* test if there's anything worth calculating */ gboolean okay = FALSE; while ( iter ) { // Sometimes a GPS device (or indeed any random file) can have stupid numbers for elevations // Since when is 9.9999e+24 a valid elevation!! // This can happen when a track (with no elevations) is uploaded to a GPS device and then redownloaded (e.g. using a Garmin Legend EtrexHCx) // Some protection against trying to work with crazily massive numbers (otherwise get SIGFPE, Arithmetic exception) if ( VIK_TRACKPOINT(iter->data)->altitude != VIK_DEFAULT_ALTITUDE && VIK_TRACKPOINT(iter->data)->altitude < 1E9 ) { okay = TRUE; break; } iter = iter->next; } if ( ! okay ) return NULL; } iter = tr->trackpoints; g_assert ( num_chunks < 16000 ); pts = g_malloc ( sizeof(gdouble) * num_chunks ); total_length = vik_track_get_length_including_gaps ( tr ); chunk_length = total_length / num_chunks; /* Zero chunk_length (eg, track of 2 tp with the same loc) will cause crash */ if (chunk_length <= 0) { g_free(pts); return NULL; } current_dist = 0.0; current_area_under_curve = 0; current_chunk = 0; current_seg_length = 0; current_seg_length = vik_coord_diff ( &(VIK_TRACKPOINT(iter->data)->coord), &(VIK_TRACKPOINT(iter->next->data)->coord) ); altitude1 = VIK_TRACKPOINT(iter->data)->altitude; altitude2 = VIK_TRACKPOINT(iter->next->data)->altitude; dist_along_seg = 0; while ( current_chunk < num_chunks ) { /* go along current seg */ if ( current_seg_length && (current_seg_length - dist_along_seg) > chunk_length ) { dist_along_seg += chunk_length; /* / * pt2 * * /x altitude = alt_at_pt_1 + alt_at_pt_2 / 2 = altitude1 + slope * dist_value_of_pt_inbetween_pt1_and_pt2 * /xx avg altitude = area under curve / chunk len *pt1 *xxx avg altitude = altitude1 + (altitude2-altitude1)/(current_seg_length)*(dist_along_seg + (chunk_len/2)) * / xxx * / xxx **/ if ( ignore_it ) // Seemly can't determine average for this section - so use last known good value (much better than just sticking in zero) pts[current_chunk] = altitude1; else pts[current_chunk] = altitude1 + (altitude2-altitude1)*((dist_along_seg - (chunk_length/2))/current_seg_length); current_chunk++; } else { /* finish current seg */ if ( current_seg_length ) { gdouble altitude_at_dist_along_seg = altitude1 + (altitude2-altitude1)/(current_seg_length)*dist_along_seg; current_dist = current_seg_length - dist_along_seg; current_area_under_curve = current_dist*(altitude_at_dist_along_seg + altitude2)*0.5; } else { current_dist = current_area_under_curve = 0; } /* should only happen if first current_seg_length == 0 */ /* get intervening segs */ iter = iter->next; while ( iter && iter->next ) { current_seg_length = vik_coord_diff ( &(VIK_TRACKPOINT(iter->data)->coord), &(VIK_TRACKPOINT(iter->next->data)->coord) ); altitude1 = VIK_TRACKPOINT(iter->data)->altitude; altitude2 = VIK_TRACKPOINT(iter->next->data)->altitude; ignore_it = VIK_TRACKPOINT(iter->next->data)->newsegment; if ( chunk_length - current_dist >= current_seg_length ) { current_dist += current_seg_length; current_area_under_curve += current_seg_length * (altitude1+altitude2) * 0.5; iter = iter->next; } else { break; } } /* final seg */ dist_along_seg = chunk_length - current_dist; if ( ignore_it || ( iter && !iter->next ) ) { pts[current_chunk] = current_area_under_curve / current_dist; if (!iter->next) { int i; for (i = current_chunk + 1; i < num_chunks; i++) pts[i] = pts[current_chunk]; break; } } else { current_area_under_curve += dist_along_seg * (altitude1 + (altitude2 - altitude1)*dist_along_seg/current_seg_length); pts[current_chunk] = current_area_under_curve / chunk_length; } current_dist = 0; current_chunk++; } } return pts; } void vik_track_get_total_elevation_gain(const VikTrack *tr, gdouble *up, gdouble *down) { gdouble diff; *up = *down = 0; if ( tr->trackpoints && VIK_TRACKPOINT(tr->trackpoints->data)->altitude != VIK_DEFAULT_ALTITUDE ) { GList *iter = tr->trackpoints->next; while (iter) { diff = VIK_TRACKPOINT(iter->data)->altitude - VIK_TRACKPOINT(iter->prev->data)->altitude; if ( diff > 0 ) *up += diff; else *down -= diff; iter = iter->next; } } else *up = *down = VIK_DEFAULT_ALTITUDE; } gdouble *vik_track_make_gradient_map ( const VikTrack *tr, guint16 num_chunks ) { gdouble *pts; gdouble *altitudes; gdouble total_length, chunk_length, current_gradient; gdouble altitude1, altitude2; guint16 current_chunk; g_assert ( num_chunks < 16000 ); total_length = vik_track_get_length_including_gaps ( tr ); chunk_length = total_length / num_chunks; /* Zero chunk_length (eg, track of 2 tp with the same loc) will cause crash */ if (chunk_length <= 0) { return NULL; } altitudes = vik_track_make_elevation_map (tr, num_chunks); if (altitudes == NULL) { return NULL; } current_gradient = 0.0; pts = g_malloc ( sizeof(gdouble) * num_chunks ); for (current_chunk = 0; current_chunk < (num_chunks - 1); current_chunk++) { altitude1 = altitudes[current_chunk]; altitude2 = altitudes[current_chunk + 1]; current_gradient = 100.0 * (altitude2 - altitude1) / chunk_length; pts[current_chunk] = current_gradient; } pts[current_chunk] = current_gradient; g_free ( altitudes ); return pts; } /* by Alex Foobarian */ gdouble *vik_track_make_speed_map ( const VikTrack *tr, guint16 num_chunks ) { gdouble *v, *s, *t; gdouble duration, chunk_dur; time_t t1, t2; int i, pt_count, numpts, index; GList *iter; if ( ! tr->trackpoints ) return NULL; g_assert ( num_chunks < 16000 ); t1 = VIK_TRACKPOINT(tr->trackpoints->data)->timestamp; t2 = VIK_TRACKPOINT(g_list_last(tr->trackpoints)->data)->timestamp; duration = t2 - t1; if ( !t1 || !t2 || !duration ) return NULL; if (duration < 0) { g_warning("negative duration: unsorted trackpoint timestamps?"); return NULL; } pt_count = vik_track_get_tp_count(tr); v = g_malloc ( sizeof(gdouble) * num_chunks ); chunk_dur = duration / num_chunks; s = g_malloc(sizeof(double) * pt_count); t = g_malloc(sizeof(double) * pt_count); iter = tr->trackpoints->next; numpts = 0; s[0] = 0; t[0] = VIK_TRACKPOINT(tr->trackpoints->data)->timestamp; numpts++; while (iter) { s[numpts] = s[numpts-1] + vik_coord_diff ( &(VIK_TRACKPOINT(iter->prev->data)->coord), &(VIK_TRACKPOINT(iter->data)->coord) ); t[numpts] = VIK_TRACKPOINT(iter->data)->timestamp; numpts++; iter = iter->next; } /* In the following computation, we iterate through periods of time of duration chunk_dur. * The first period begins at the beginning of the track. The last period ends at the end of the track. */ index = 0; /* index of the current trackpoint. */ for (i = 0; i < num_chunks; i++) { /* we are now covering the interval from t[0] + i*chunk_dur to t[0] + (i+1)*chunk_dur. * find the first trackpoint outside the current interval, averaging the speeds between intermediate trackpoints. */ if (t[0] + i*chunk_dur >= t[index]) { gdouble acc_t = 0, acc_s = 0; while (t[0] + i*chunk_dur >= t[index]) { acc_s += (s[index+1]-s[index]); acc_t += (t[index+1]-t[index]); index++; } v[i] = acc_s/acc_t; } else if (i) { v[i] = v[i-1]; } else { v[i] = 0; } } g_free(s); g_free(t); return v; } /** * Make a distance/time map, heavily based on the vik_track_make_speed_map method */ gdouble *vik_track_make_distance_map ( const VikTrack *tr, guint16 num_chunks ) { gdouble *v, *s, *t; gdouble duration, chunk_dur; time_t t1, t2; int i, pt_count, numpts, index; GList *iter; if ( ! tr->trackpoints ) return NULL; t1 = VIK_TRACKPOINT(tr->trackpoints->data)->timestamp; t2 = VIK_TRACKPOINT(g_list_last(tr->trackpoints)->data)->timestamp; duration = t2 - t1; if ( !t1 || !t2 || !duration ) return NULL; if (duration < 0) { g_warning("negative duration: unsorted trackpoint timestamps?"); return NULL; } pt_count = vik_track_get_tp_count(tr); v = g_malloc ( sizeof(gdouble) * num_chunks ); chunk_dur = duration / num_chunks; s = g_malloc(sizeof(double) * pt_count); t = g_malloc(sizeof(double) * pt_count); iter = tr->trackpoints->next; numpts = 0; s[0] = 0; t[0] = VIK_TRACKPOINT(tr->trackpoints->data)->timestamp; numpts++; while (iter) { s[numpts] = s[numpts-1] + vik_coord_diff ( &(VIK_TRACKPOINT(iter->prev->data)->coord), &(VIK_TRACKPOINT(iter->data)->coord) ); t[numpts] = VIK_TRACKPOINT(iter->data)->timestamp; numpts++; iter = iter->next; } /* In the following computation, we iterate through periods of time of duration chunk_dur. * The first period begins at the beginning of the track. The last period ends at the end of the track. */ index = 0; /* index of the current trackpoint. */ for (i = 0; i < num_chunks; i++) { /* we are now covering the interval from t[0] + i*chunk_dur to t[0] + (i+1)*chunk_dur. * find the first trackpoint outside the current interval, averaging the distance between intermediate trackpoints. */ if (t[0] + i*chunk_dur >= t[index]) { gdouble acc_s = 0; // No need for acc_t while (t[0] + i*chunk_dur >= t[index]) { acc_s += (s[index+1]-s[index]); index++; } // The only bit that's really different from the speed map - just keep an accululative record distance v[i] = i ? v[i-1]+acc_s : acc_s; } else if (i) { v[i] = v[i-1]; } else { v[i] = 0; } } g_free(s); g_free(t); return v; } /** * This uses the 'time' based method to make the graph, (which is a simpler compared to the elevation/distance) * This results in a slightly blocky graph when it does not have many trackpoints: <60 * NB Somehow the elevation/distance applies some kind of smoothing algorithm, * but I don't think any one understands it any more (I certainly don't ATM) */ gdouble *vik_track_make_elevation_time_map ( const VikTrack *tr, guint16 num_chunks ) { time_t t1, t2; gdouble duration, chunk_dur; GList *iter = tr->trackpoints; if (!iter || !iter->next) /* zero- or one-point track */ return NULL; /* test if there's anything worth calculating */ gboolean okay = FALSE; while ( iter ) { if ( VIK_TRACKPOINT(iter->data)->altitude != VIK_DEFAULT_ALTITUDE ) { okay = TRUE; break; } iter = iter->next; } if ( ! okay ) return NULL; t1 = VIK_TRACKPOINT(tr->trackpoints->data)->timestamp; t2 = VIK_TRACKPOINT(g_list_last(tr->trackpoints)->data)->timestamp; duration = t2 - t1; if ( !t1 || !t2 || !duration ) return NULL; if (duration < 0) { g_warning("negative duration: unsorted trackpoint timestamps?"); return NULL; } gint pt_count = vik_track_get_tp_count(tr); // Reset iterator back to the beginning iter = tr->trackpoints; gdouble *pts = g_malloc ( sizeof(gdouble) * num_chunks ); // The return altitude values gdouble *s = g_malloc(sizeof(double) * pt_count); // calculation altitudes gdouble *t = g_malloc(sizeof(double) * pt_count); // calculation times chunk_dur = duration / num_chunks; s[0] = VIK_TRACKPOINT(iter->data)->altitude; t[0] = VIK_TRACKPOINT(iter->data)->timestamp; iter = tr->trackpoints->next; gint numpts = 1; while (iter) { s[numpts] = VIK_TRACKPOINT(iter->data)->altitude; t[numpts] = VIK_TRACKPOINT(iter->data)->timestamp; numpts++; iter = iter->next; } /* In the following computation, we iterate through periods of time of duration chunk_dur. * The first period begins at the beginning of the track. The last period ends at the end of the track. */ gint index = 0; /* index of the current trackpoint. */ gint i; for (i = 0; i < num_chunks; i++) { /* we are now covering the interval from t[0] + i*chunk_dur to t[0] + (i+1)*chunk_dur. * find the first trackpoint outside the current interval, averaging the heights between intermediate trackpoints. */ if (t[0] + i*chunk_dur >= t[index]) { gdouble acc_s = s[index]; // initialise to first point while (t[0] + i*chunk_dur >= t[index]) { acc_s += (s[index+1]-s[index]); index++; } pts[i] = acc_s; } else if (i) { pts[i] = pts[i-1]; } else { pts[i] = 0; } } g_free(s); g_free(t); return pts; } /** * Make a speed/distance map */ gdouble *vik_track_make_speed_dist_map ( const VikTrack *tr, guint16 num_chunks ) { gdouble *v, *s, *t; time_t t1, t2; gint i, pt_count, numpts, index; GList *iter; gdouble duration, total_length, chunk_length; if ( ! tr->trackpoints ) return NULL; t1 = VIK_TRACKPOINT(tr->trackpoints->data)->timestamp; t2 = VIK_TRACKPOINT(g_list_last(tr->trackpoints)->data)->timestamp; duration = t2 - t1; if ( !t1 || !t2 || !duration ) return NULL; if (duration < 0) { g_warning("negative duration: unsorted trackpoint timestamps?"); return NULL; } total_length = vik_track_get_length_including_gaps ( tr ); chunk_length = total_length / num_chunks; pt_count = vik_track_get_tp_count(tr); if (chunk_length <= 0) { return NULL; } v = g_malloc ( sizeof(gdouble) * num_chunks ); s = g_malloc ( sizeof(double) * pt_count ); t = g_malloc ( sizeof(double) * pt_count ); // No special handling of segments ATM... iter = tr->trackpoints->next; numpts = 0; s[0] = 0; t[0] = VIK_TRACKPOINT(tr->trackpoints->data)->timestamp; numpts++; while (iter) { s[numpts] = s[numpts-1] + vik_coord_diff ( &(VIK_TRACKPOINT(iter->prev->data)->coord), &(VIK_TRACKPOINT(iter->data)->coord) ); t[numpts] = VIK_TRACKPOINT(iter->data)->timestamp; numpts++; iter = iter->next; } // Iterate through a portion of the track to get an average speed for that part // This will essentially interpolate between segments, which I think is right given the usage of 'get_length_including_gaps' index = 0; /* index of the current trackpoint. */ for (i = 0; i < num_chunks; i++) { // Similar to the make_speed_map, but instead of using a time chunk, use a distance chunk if (s[0] + i*chunk_length >= s[index]) { gdouble acc_t = 0, acc_s = 0; while (s[0] + i*chunk_length >= s[index]) { acc_s += (s[index+1]-s[index]); acc_t += (t[index+1]-t[index]); index++; } v[i] = acc_s/acc_t; } else if (i) { v[i] = v[i-1]; } else { v[i] = 0; } } g_free(s); g_free(t); return v; } /* by Alex Foobarian */ VikTrackpoint *vik_track_get_closest_tp_by_percentage_dist ( VikTrack *tr, gdouble reldist, gdouble *meters_from_start ) { gdouble dist = vik_track_get_length_including_gaps(tr) * reldist; gdouble current_dist = 0.0; gdouble current_inc = 0.0; if ( tr->trackpoints ) { GList *iter = tr->trackpoints->next; GList *last_iter = NULL; gdouble last_dist = 0.0; while (iter) { current_inc = vik_coord_diff ( &(VIK_TRACKPOINT(iter->data)->coord), &(VIK_TRACKPOINT(iter->prev->data)->coord) ); last_dist = current_dist; current_dist += current_inc; if ( current_dist >= dist ) break; last_iter = iter; iter = iter->next; } if (!iter) { /* passing the end the track */ if (last_iter) { if (meters_from_start) *meters_from_start = last_dist; return(VIK_TRACKPOINT(last_iter->data)); } else return NULL; } /* we've gone past the dist already, was prev trackpoint closer? */ /* should do a vik_coord_average_weighted() thingy. */ if ( iter->prev && abs(current_dist-current_inc-dist) < abs(current_dist-dist) ) { if (meters_from_start) *meters_from_start = last_dist; iter = iter->prev; } else if (meters_from_start) *meters_from_start = current_dist; return VIK_TRACKPOINT(iter->data); } return NULL; } VikTrackpoint *vik_track_get_closest_tp_by_percentage_time ( VikTrack *tr, gdouble reltime, time_t *seconds_from_start ) { time_t t_pos, t_start, t_end, t_total; t_start = VIK_TRACKPOINT(tr->trackpoints->data)->timestamp; t_end = VIK_TRACKPOINT(g_list_last(tr->trackpoints)->data)->timestamp; t_total = t_end - t_start; t_pos = t_start + t_total * reltime; if ( !tr->trackpoints ) return NULL; GList *iter = tr->trackpoints; while (iter) { if (VIK_TRACKPOINT(iter->data)->timestamp == t_pos) break; if (VIK_TRACKPOINT(iter->data)->timestamp > t_pos) { if (iter->prev == NULL) /* first trackpoint */ break; time_t t_before = t_pos - VIK_TRACKPOINT(iter->prev->data)->timestamp; time_t t_after = VIK_TRACKPOINT(iter->data)->timestamp - t_pos; if (t_before <= t_after) iter = iter->prev; break; } else if ((iter->next == NULL) && (t_pos < (VIK_TRACKPOINT(iter->data)->timestamp + 3))) /* last trackpoint: accommodate for round-off */ break; iter = iter->next; } if (!iter) return NULL; if (seconds_from_start) *seconds_from_start = VIK_TRACKPOINT(iter->data)->timestamp - VIK_TRACKPOINT(tr->trackpoints->data)->timestamp; return VIK_TRACKPOINT(iter->data); } VikTrackpoint* vik_track_get_tp_by_max_speed ( const VikTrack *tr ) { gdouble maxspeed = 0.0, speed = 0.0; if ( !tr->trackpoints ) return NULL; GList *iter = tr->trackpoints; VikTrackpoint *max_speed_tp = NULL; while (iter) { if (iter->prev) { if ( VIK_TRACKPOINT(iter->data)->has_timestamp && VIK_TRACKPOINT(iter->prev->data)->has_timestamp && (! VIK_TRACKPOINT(iter->data)->newsegment) ) { speed = vik_coord_diff ( &(VIK_TRACKPOINT(iter->data)->coord), &(VIK_TRACKPOINT(iter->prev->data)->coord) ) / ABS(VIK_TRACKPOINT(iter->data)->timestamp - VIK_TRACKPOINT(iter->prev->data)->timestamp); if ( speed > maxspeed ) { maxspeed = speed; max_speed_tp = VIK_TRACKPOINT(iter->data); } } } iter = iter->next; } if (!max_speed_tp) return NULL; return max_speed_tp; } VikTrackpoint* vik_track_get_tp_by_max_alt ( const VikTrack *tr ) { gdouble maxalt = -5000.0; if ( !tr->trackpoints ) return NULL; GList *iter = tr->trackpoints; VikTrackpoint *max_alt_tp = NULL; while (iter) { if ( VIK_TRACKPOINT(iter->data)->altitude > maxalt ) { maxalt = VIK_TRACKPOINT(iter->data)->altitude; max_alt_tp = VIK_TRACKPOINT(iter->data); } iter = iter->next; } if (!max_alt_tp) return NULL; return max_alt_tp; } VikTrackpoint* vik_track_get_tp_by_min_alt ( const VikTrack *tr ) { gdouble minalt = 25000.0; if ( !tr->trackpoints ) return NULL; GList *iter = tr->trackpoints; VikTrackpoint *min_alt_tp = NULL; while (iter) { if ( VIK_TRACKPOINT(iter->data)->altitude < minalt ) { minalt = VIK_TRACKPOINT(iter->data)->altitude; min_alt_tp = VIK_TRACKPOINT(iter->data); } iter = iter->next; } if (!min_alt_tp) return NULL; return min_alt_tp; } gboolean vik_track_get_minmax_alt ( const VikTrack *tr, gdouble *min_alt, gdouble *max_alt ) { *min_alt = 25000; *max_alt = -5000; if ( tr && tr->trackpoints && tr->trackpoints->data && (VIK_TRACKPOINT(tr->trackpoints->data)->altitude != VIK_DEFAULT_ALTITUDE) ) { GList *iter = tr->trackpoints->next; gdouble tmp_alt; while (iter) { tmp_alt = VIK_TRACKPOINT(iter->data)->altitude; if ( tmp_alt > *max_alt ) *max_alt = tmp_alt; if ( tmp_alt < *min_alt ) *min_alt = tmp_alt; iter = iter->next; } return TRUE; } return FALSE; } void vik_track_marshall ( VikTrack *tr, guint8 **data, guint *datalen) { GList *tps; GByteArray *b = g_byte_array_new(); guint len; guint intp, ntp; g_byte_array_append(b, (guint8 *)tr, sizeof(*tr)); /* we'll fill out number of trackpoints later */ intp = b->len; g_byte_array_append(b, (guint8 *)&len, sizeof(len)); tps = tr->trackpoints; ntp = 0; while (tps) { g_byte_array_append(b, (guint8 *)tps->data, sizeof(VikTrackpoint)); tps = tps->next; ntp++; } *(guint *)(b->data + intp) = ntp; // This allocates space for variant sized strings // and copies that amount of data from the track to byte array #define vtm_append(s) \ len = (s) ? strlen(s)+1 : 0; \ g_byte_array_append(b, (guint8 *)&len, sizeof(len)); \ if (s) g_byte_array_append(b, (guint8 *)s, len); vtm_append(tr->name); vtm_append(tr->comment); vtm_append(tr->description); *data = b->data; *datalen = b->len; g_byte_array_free(b, FALSE); } /* * Take a byte array and convert it into a Track */ VikTrack *vik_track_unmarshall (guint8 *data, guint datalen) { guint len; VikTrack *new_tr = vik_track_new(); VikTrackpoint *new_tp; guint ntp; gint i; /* basic properties: */ new_tr->visible = ((VikTrack *)data)->visible; new_tr->is_route = ((VikTrack *)data)->is_route; new_tr->has_color = ((VikTrack *)data)->has_color; new_tr->color = ((VikTrack *)data)->color; data += sizeof(*new_tr); ntp = *(guint *)data; data += sizeof(ntp); for (i=0; itrackpoints = g_list_append(new_tr->trackpoints, new_tp); } #define vtu_get(s) \ len = *(guint *)data; \ data += sizeof(len); \ if (len) { \ (s) = g_strdup((gchar *)data); \ } else { \ (s) = NULL; \ } \ data += len; vtu_get(new_tr->name); vtu_get(new_tr->comment); vtu_get(new_tr->description); return new_tr; } void vik_track_apply_dem_data ( VikTrack *tr ) { GList *tp_iter; gint16 elev; tp_iter = tr->trackpoints; while ( tp_iter ) { /* TODO: of the 4 possible choices we have for choosing an elevation * (trackpoint in between samples), choose the one with the least elevation change * as the last */ elev = a_dems_get_elev_by_coord ( &(VIK_TRACKPOINT(tp_iter->data)->coord), VIK_DEM_INTERPOL_BEST ); if ( elev != VIK_DEM_INVALID_ELEVATION ) VIK_TRACKPOINT(tp_iter->data)->altitude = elev; tp_iter = tp_iter->next; } } /** * vik_track_apply_dem_data_last_trackpoint: * * Apply DEM data (if available) - to only the last trackpoint */ void vik_track_apply_dem_data_last_trackpoint ( VikTrack *tr ) { gint16 elev; if ( tr->trackpoints ) { /* As in vik_track_apply_dem_data above - use 'best' interpolation method */ elev = a_dems_get_elev_by_coord ( &(VIK_TRACKPOINT(g_list_last(tr->trackpoints)->data)->coord), VIK_DEM_INTERPOL_BEST ); if ( elev != VIK_DEM_INVALID_ELEVATION ) VIK_TRACKPOINT(g_list_last(tr->trackpoints)->data)->altitude = elev; } } /** * vik_track_steal_and_append_trackpoints: * * appends t2 to t1, leaving t2 with no trackpoints */ void vik_track_steal_and_append_trackpoints ( VikTrack *t1, VikTrack *t2 ) { if ( t1->trackpoints ) { GList *tpiter = t1->trackpoints; while ( tpiter->next ) tpiter = tpiter->next; tpiter->next = t2->trackpoints; t2->trackpoints->prev = tpiter; } else t1->trackpoints = t2->trackpoints; t2->trackpoints = NULL; } /** * vik_track_cut_back_to_double_point: * * starting at the end, looks backwards for the last "double point", a duplicate trackpoint. * If there is no double point, deletes all the trackpoints. * * Returns: the new end of the track (or the start if there are no double points) */ VikCoord *vik_track_cut_back_to_double_point ( VikTrack *tr ) { GList *iter = tr->trackpoints; VikCoord *rv; if ( !iter ) return NULL; while ( iter->next ) iter = iter->next; while ( iter->prev ) { if ( vik_coord_equals((VikCoord *)iter->data, (VikCoord *)iter->prev->data) ) { GList *prev = iter->prev; rv = g_malloc(sizeof(VikCoord)); *rv = *((VikCoord *) iter->data); /* truncate trackpoint list */ iter->prev = NULL; /* pretend it's the end */ g_list_foreach ( iter, (GFunc) g_free, NULL ); g_list_free( iter ); prev->next = NULL; return rv; } iter = iter->prev; } /* no double point found! */ rv = g_malloc(sizeof(VikCoord)); *rv = *((VikCoord *) tr->trackpoints->data); g_list_foreach ( tr->trackpoints, (GFunc) g_free, NULL ); g_list_free( tr->trackpoints ); tr->trackpoints = NULL; return rv; } viking-1.4.2/src/geotag_exif.c0000644000175000017500000004606712152216677013170 00000000000000/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2011, Rob Norris * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ /* * This uses EXIF information from images to create waypoints at those positions * * For the implementation I have chosen to use libexif, which keeps Viking a pure C program * For an alternative implementation (a la gpscorrelate), one could use libeviv2 but it appears to be C++ only. */ #include #include "geotag_exif.h" #include "globals.h" #include "file.h" #include #include #include #include #include #include #include #include "libjpeg/jpeg-data.h" /** * Attempt to get a single comment from the various exif fields */ static gchar* geotag_get_exif_comment ( ExifData *ed ) { gchar str[128]; ExifEntry *ee; // // Try various options to create a comment // ee = exif_content_get_entry (ed->ifd[EXIF_IFD_0], EXIF_TAG_IMAGE_DESCRIPTION); if ( ee ) { exif_entry_get_value ( ee, str, 128 ); return g_strdup ( str ); } ee = exif_content_get_entry (ed->ifd[EXIF_IFD_0], EXIF_TAG_XP_COMMENT); if ( ee ) { exif_entry_get_value ( ee, str, 128 ); return g_strdup ( str ); } ee = exif_content_get_entry (ed->ifd[EXIF_IFD_0], EXIF_TAG_XP_SUBJECT); if ( ee ) { exif_entry_get_value ( ee, str, 128 ); return g_strdup ( str ); } // Consider using these for existing GPS info?? //#define EXIF_TAG_GPS_TIME_STAMP 0x0007 //#define EXIF_TAG_GPS_DATE_STAMP 0x001d ee = exif_content_get_entry (ed->ifd[EXIF_IFD_EXIF], EXIF_TAG_DATE_TIME_ORIGINAL); if ( ee ) { exif_entry_get_value ( ee, str, 128 ); return g_strdup ( str ); } // Otherwise nothing found return NULL; } /** * Handles 3 part location Rationals * Handles 1 part rational (must specify 0 for the offset) */ static gdouble Rational2Double ( unsigned char *data, int offset, ExifByteOrder order ) { // Explaination from GPS Correlate 'exif-gps.cpp' v 1.6.1 // What we are trying to do here is convert the three rationals: // dd/v mm/v ss/v // To a decimal // dd.dddddd... // dd/v is easy: result = dd/v. // mm/v is harder: // mm // -- / 60 = result. // v // ss/v is sorta easy. // ss // -- / 3600 = result // v // Each part is added to the final number. gdouble ans; ExifRational er; er = exif_get_rational (data, order); ans = (gdouble)er.numerator / (gdouble)er.denominator; if (offset <= 0) return ans; er = exif_get_rational (data+(1*offset), order); ans = ans + ( ( (gdouble)er.numerator / (gdouble)er.denominator ) / 60.0 ); er = exif_get_rational (data+(2*offset), order); ans = ans + ( ( (gdouble)er.numerator / (gdouble)er.denominator ) / 3600.0 ); return ans; } /** * a_geotag_create_waypoint_from_file: * @filename: The image file to process * @vcmode: The current location mode to use in the positioning of Waypoint * @name: Returns a name for the Waypoint (can be NULL) * * Returns: An allocated Waypoint or NULL if Waypoint could not be generated (e.g. no EXIF info) * */ VikWaypoint* a_geotag_create_waypoint_from_file ( const gchar *filename, VikCoordMode vcmode, gchar **name ) { // Default return values (for failures) *name = NULL; VikWaypoint *wp = NULL; // TODO use log? //ExifLog *log = NULL; // open image with libexif ExifData *ed = exif_data_new_from_file ( filename ); // Detect EXIF load failure if ( !ed ) // return with no Waypoint return wp; struct LatLon ll; gchar str[128]; ExifEntry *ee; ee = exif_content_get_entry (ed->ifd[EXIF_IFD_GPS], EXIF_TAG_GPS_VERSION_ID); // Confirm this has a GPS Id - normally "2.0.0.0" or "2.2.0.0" if ( ! ( ee && ee->components == 4 ) ) goto MyReturn; // Could test for these versions explicitly but may have byte order issues... //if ( ! ( ee->data[0] == 2 && ee->data[2] == 0 && ee->data[3] == 0 ) ) // goto MyReturn; // // Lat & Long is necessary to form a waypoint. // ee = exif_content_get_entry (ed->ifd[EXIF_IFD_GPS], EXIF_TAG_GPS_LATITUDE); if ( ! ( ee && ee->components == 3 && ee->format == EXIF_FORMAT_RATIONAL ) ) goto MyReturn; ll.lat = Rational2Double ( ee->data, exif_format_get_size(ee->format), exif_data_get_byte_order(ed) ); ee = exif_content_get_entry (ed->ifd[EXIF_IFD_GPS], EXIF_TAG_GPS_LATITUDE_REF); if ( ee ) { exif_entry_get_value ( ee, str, 128 ); if ( str[0] == 'S' ) ll.lat = -ll.lat; } ee = exif_content_get_entry (ed->ifd[EXIF_IFD_GPS], EXIF_TAG_GPS_LONGITUDE); if ( ! ( ee && ee->components == 3 && ee->format == EXIF_FORMAT_RATIONAL ) ) goto MyReturn; ll.lon = Rational2Double ( ee->data, exif_format_get_size(ee->format), exif_data_get_byte_order(ed) ); ee = exif_content_get_entry (ed->ifd[EXIF_IFD_GPS], EXIF_TAG_GPS_LONGITUDE_REF); if ( ee ) { exif_entry_get_value ( ee, str, 128 ); if ( str[0] == 'W' ) ll.lon = -ll.lon; } // // Not worried if none of the other fields exist, as can default the values to something // gdouble alt = VIK_DEFAULT_ALTITUDE; ee = exif_content_get_entry (ed->ifd[EXIF_IFD_GPS], EXIF_TAG_GPS_ALTITUDE); if ( ee && ee->components == 1 && ee->format == EXIF_FORMAT_RATIONAL ) { alt = Rational2Double ( ee->data, 0, exif_data_get_byte_order(ed) ); ee = exif_content_get_entry (ed->ifd[EXIF_IFD_GPS], EXIF_TAG_GPS_ALTITUDE_REF); if ( ee && ee->components == 1 && ee->format == EXIF_FORMAT_BYTE && ee->data[0] == 1 ) alt = -alt; } // Name ee = exif_content_get_entry (ed->ifd[EXIF_IFD_0], EXIF_TAG_XP_TITLE); if ( ee ) { exif_entry_get_value ( ee, str, 128 ); *name = g_strdup ( str ); } // // Now create Waypoint with acquired information // wp = vik_waypoint_new(); wp->visible = TRUE; // Set info from exif values // Location vik_coord_load_from_latlon ( &(wp->coord), vcmode, &ll ); // Altitude wp->altitude = alt; wp->comment = geotag_get_exif_comment ( ed ); vik_waypoint_set_image ( wp, filename ); MyReturn: // Finished with EXIF exif_data_free ( ed ); return wp; } /** * a_geotag_waypoint_positioned: * @filename: The image file to process * @coord: The location for positioning the Waypoint * @name: Returns a name for the Waypoint (can be NULL) * @waypoint: An existing waypoint to update (can be NULL to generate a new waypoint) * * Returns: An allocated waypoint if the input waypoint is NULL, * otherwise the passed in waypoint is updated * * Here EXIF processing is used to get non position related information (i.e. just the comment) * */ VikWaypoint* a_geotag_waypoint_positioned ( const gchar *filename, VikCoord coord, gdouble alt, gchar **name, VikWaypoint *wp ) { *name = NULL; if ( wp == NULL ) { // Need to create waypoint wp = vik_waypoint_new(); wp->visible = TRUE; } wp->coord = coord; wp->altitude = alt; ExifData *ed = exif_data_new_from_file ( filename ); // Set info from exif values if ( ed ) { wp->comment = geotag_get_exif_comment ( ed ); gchar str[128]; ExifEntry *ee; // Name ee = exif_content_get_entry (ed->ifd[EXIF_IFD_0], EXIF_TAG_XP_TITLE); if ( ee ) { exif_entry_get_value ( ee, str, 128 ); *name = g_strdup ( str ); } // Finished with EXIF exif_data_free ( ed ); } vik_waypoint_set_image ( wp, filename ); return wp; } /** * a_geotag_get_exif_date_from_file: * @filename: The image file to process * @has_GPS_info: Returns whether the file has existing GPS information * * Returns: An allocated string with the date and time in EXIF_DATE_FORMAT, otherwise NULL if some kind of failure * * Here EXIF processing is used to get time information * */ gchar* a_geotag_get_exif_date_from_file ( const gchar *filename, gboolean *has_GPS_info ) { gchar* datetime = NULL; *has_GPS_info = FALSE; ExifData *ed = exif_data_new_from_file ( filename ); // Detect EXIF load failure if ( !ed ) return datetime; gchar str[128]; ExifEntry *ee; ee = exif_content_get_entry (ed->ifd[EXIF_IFD_EXIF], EXIF_TAG_DATE_TIME_ORIGINAL); if ( ee ) { exif_entry_get_value ( ee, str, 128 ); datetime = g_strdup ( str ); } // Check GPS Info ee = exif_content_get_entry (ed->ifd[EXIF_IFD_GPS], EXIF_TAG_GPS_VERSION_ID); // Confirm this has a GPS Id - normally "2.0.0.0" or "2.2.0.0" if ( ee && ee->components == 4 ) *has_GPS_info = TRUE; // Check other basic GPS fields exist too // I have encountered some images which have just the EXIF_TAG_GPS_VERSION_ID but nothing else // So to confirm check more EXIF GPS TAGS: ee = exif_content_get_entry (ed->ifd[EXIF_IFD_GPS], EXIF_TAG_GPS_LATITUDE); if ( !ee ) *has_GPS_info = FALSE; ee = exif_content_get_entry (ed->ifd[EXIF_IFD_GPS], EXIF_TAG_GPS_LONGITUDE); if ( !ee ) *has_GPS_info = FALSE; exif_data_free ( ed ); return datetime; } /**! If the entry doesn't exist, create it. * Based on exif command line action_create_value function in exif 0.6.20 */ static ExifEntry* my_exif_create_value (ExifData *ed, ExifTag tag, ExifIfd ifd) { ExifEntry *e = exif_content_get_entry (ed->ifd[ifd], tag); if ( !e ) { e = exif_entry_new (); exif_content_add_entry (ed->ifd[ifd], e); exif_entry_initialize (e, tag); // exif_entry_initialize doesn't seem to do much, especially for the GPS tags // so have to setup fields ourselves: e->tag = tag; if ( tag == EXIF_TAG_GPS_VERSION_ID ) { e->format = EXIF_FORMAT_BYTE; e->components = 4; e->size = sizeof (char) * e->components; if ( e->data ) g_free (e->data); e->data = g_malloc (e->size); } if ( tag == EXIF_TAG_GPS_MAP_DATUM || tag == EXIF_TAG_GPS_LATITUDE_REF || tag == EXIF_TAG_GPS_LONGITUDE_REF || tag == EXIF_TAG_GPS_PROCESSING_METHOD ) { e->format = EXIF_FORMAT_ASCII; // NB Allocation is handled later on when the actual string used is known } if ( tag == EXIF_TAG_GPS_LATITUDE || tag == EXIF_TAG_GPS_LONGITUDE ) { e->format = EXIF_FORMAT_RATIONAL; e->components = 3; e->size = sizeof (ExifRational) * e->components; if ( e->data ) g_free (e->data); e->data = g_malloc (e->size); } if ( tag == EXIF_TAG_GPS_ALTITUDE ) { e->format = EXIF_FORMAT_RATIONAL; e->components = 1; e->size = sizeof (ExifRational) * e->components; if ( e->data ) g_free (e->data); e->data = g_malloc (e->size); } if ( tag == EXIF_TAG_GPS_ALTITUDE_REF ) { e->components = 1; e->size = sizeof (char) * e->components; if ( e->data ) g_free (e->data); e->data = g_malloc (e->size); } /* The entry has been added to the IFD, so we can unref it */ //exif_entry_unref(e); // Crashes later on, when saving to jpeg if the above unref is enabled!! // ?Some other malloc problem somewhere? } return e; } /** Heavily based on convert_arg_to_entry from exif command line tool. * But without ExifLog, exitting, use of g_* io functions * and can take a gdouble value instead of a string */ static void convert_to_entry (const char *set_value, gdouble gdvalue, ExifEntry *e, ExifByteOrder o) { unsigned int i, numcomponents; char *value_p = NULL; char *buf = NULL; /* * ASCII strings are handled separately, * since they don't require any conversion. */ if (e->format == EXIF_FORMAT_ASCII || e->tag == EXIF_TAG_USER_COMMENT) { if (e->data) g_free (e->data); e->components = strlen (set_value) + 1; if (e->tag == EXIF_TAG_USER_COMMENT) e->components += 8 - 1; e->size = sizeof (char) * e->components; e->data = g_malloc (e->size); if (!e->data) { g_warning (_("Not enough memory.")); return; } if (e->tag == EXIF_TAG_USER_COMMENT) { /* assume ASCII charset */ /* TODO: get this from the current locale */ memcpy ((char *) e->data, "ASCII\0\0\0", 8); memcpy ((char *) e->data + 8, set_value, strlen (set_value)); } else strcpy ((char *) e->data, set_value); return; } /* * Make sure we can handle this entry */ if ((e->components == 0) && *set_value) { g_warning (_("Setting a value for this tag is unsupported!")); return; } gboolean use_string = (set_value != NULL); if ( use_string ) { /* Copy the string so we can modify it */ buf = g_strdup (set_value); if (!buf) return; value_p = strtok (buf, " "); } numcomponents = e->components; for (i = 0; i < numcomponents; ++i) { unsigned char s; if ( use_string ) { if (!value_p) { g_warning (_("Too few components specified (need %d, found %d)\n"), numcomponents, i); return; } if (!isdigit(*value_p) && (*value_p != '+') && (*value_p != '-')) { g_warning (_("Numeric value expected\n")); return; } } s = exif_format_get_size (e->format); switch (e->format) { case EXIF_FORMAT_ASCII: g_warning (_("This shouldn't happen!")); return; break; case EXIF_FORMAT_SHORT: exif_set_short (e->data + (s * i), o, atoi (value_p)); break; case EXIF_FORMAT_SSHORT: exif_set_sshort (e->data + (s * i), o, atoi (value_p)); break; case EXIF_FORMAT_RATIONAL: { ExifRational er; double val = 0.0 ; if ( use_string && value_p ) val = fabs (atol (value_p)); else val = fabs (gdvalue); if ( i == 0 ) { // One (or first) part rational // Sneak peek into tag as location tags need rounding down to give just the degrees part if ( e->tag == EXIF_TAG_GPS_LATITUDE || e->tag == EXIF_TAG_GPS_LONGITUDE ) { er.numerator = (ExifLong) floor ( val ); er.denominator = 1.0; } else { // I don't see any point in doing anything too complicated here, // such as trying to work out the 'best' denominator // For the moment use KISS principle. // Fix a precision of 1/100 metre as that's more than enough for GPS accuracy especially altitudes! er.denominator = 100.0; er.numerator = (ExifLong) (val * er.denominator); } } // Now for Location 3 part rationals do Mins and Seconds format // Rounded down minutes if ( i == 1 ) { er.denominator = 1.0; er.numerator = (ExifLong) ( (int) floor ( ( val - floor (val) ) * 60.0 ) ); } // Finally seconds if ( i == 2 ) { er.denominator = 100.0; // Fractional minute. double FracPart = ((val - floor(val)) * 60) - (double)(int) floor ( ( val - floor (val) ) * 60.0 ); er.numerator = (ExifLong) ( (int)floor(FracPart * 6000) ); // Convert to seconds. } exif_set_rational (e->data + (s * i), o, er ); break; } case EXIF_FORMAT_LONG: exif_set_long (e->data + (s * i), o, atol (value_p)); break; case EXIF_FORMAT_SLONG: exif_set_slong (e->data + (s * i), o, atol (value_p)); break; case EXIF_FORMAT_BYTE: case EXIF_FORMAT_SBYTE: case EXIF_FORMAT_UNDEFINED: /* treat as byte array */ e->data[s * i] = atoi (value_p); break; case EXIF_FORMAT_FLOAT: case EXIF_FORMAT_DOUBLE: case EXIF_FORMAT_SRATIONAL: default: g_warning (_("Not yet implemented!")); return; } if ( use_string ) value_p = strtok (NULL, " "); } g_free (buf); if ( use_string ) if ( value_p ) g_warning (_("Warning; Too many components specified!")); } /** * a_geotag_write_exif_gps: * @filename: The image file to save information in * @coord: The location * @alt: The elevation * * Returns: A value indicating success: 0, or some other value for failure * */ gint a_geotag_write_exif_gps ( const gchar *filename, VikCoord coord, gdouble alt, gboolean no_change_mtime ) { gint result = 0; // OK so far... // Save mtime for later use struct stat stat_save; if ( no_change_mtime ) stat ( filename, &stat_save ); /* Appears libexif doesn't actually support writing EXIF data directly to files Thus embed command line exif writing method within Viking (for example this is done by Enlightment - http://www.enlightenment.org/ ) This appears to be JPEG only, but is probably 99% of our use case Alternatively consider using libexiv2 and C++... */ // Actual EXIF settings here... JPEGData *jdata; /* Parse the JPEG file. */ jdata = jpeg_data_new (); jpeg_data_load_file (jdata, filename); // Get current values ExifData *ed = exif_data_new_from_file ( filename ); if ( !ed ) ed = exif_data_new (); // Update ExifData with our new settings ExifEntry *ee; // // I don't understand it, but when saving the 'ed' nothing gets set after putting in the GPS ID tag - so it must come last // (unless of course there is some bug in the setting of the ID, that prevents subsequent tags) // ee = my_exif_create_value (ed, EXIF_TAG_GPS_ALTITUDE, EXIF_IFD_GPS); convert_to_entry ( NULL, alt, ee, exif_data_get_byte_order(ed) ); // byte 0 meaning "sea level" or 1 if the value is negative. ee = my_exif_create_value (ed, EXIF_TAG_GPS_ALTITUDE_REF, EXIF_IFD_GPS); convert_to_entry ( alt < 0.0 ? "1" : "0", 0.0, ee, exif_data_get_byte_order(ed) ); ee = my_exif_create_value (ed, EXIF_TAG_GPS_PROCESSING_METHOD, EXIF_IFD_GPS); // see http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/GPS.html convert_to_entry ( "MANUAL", 0.0, ee, exif_data_get_byte_order(ed) ); ee = my_exif_create_value (ed, EXIF_TAG_GPS_MAP_DATUM, EXIF_IFD_GPS); convert_to_entry ( "WGS-84", 0.0, ee, exif_data_get_byte_order(ed) ); struct LatLon ll; vik_coord_to_latlon ( &coord, &ll ); ee = my_exif_create_value (ed, EXIF_TAG_GPS_LATITUDE_REF, EXIF_IFD_GPS); // N or S convert_to_entry ( ll.lat < 0.0 ? "S" : "N", 0.0, ee, exif_data_get_byte_order(ed) ); ee = my_exif_create_value (ed, EXIF_TAG_GPS_LATITUDE, EXIF_IFD_GPS); convert_to_entry ( NULL, ll.lat, ee, exif_data_get_byte_order(ed) ); ee = my_exif_create_value (ed, EXIF_TAG_GPS_LONGITUDE_REF, EXIF_IFD_GPS); // E or W convert_to_entry ( ll.lon < 0.0 ? "W" : "E", 0.0, ee, exif_data_get_byte_order(ed) ); ee = my_exif_create_value (ed, EXIF_TAG_GPS_LONGITUDE, EXIF_IFD_GPS); convert_to_entry ( NULL, ll.lon, ee, exif_data_get_byte_order(ed) ); ee = my_exif_create_value (ed, EXIF_TAG_GPS_VERSION_ID, EXIF_IFD_GPS); //convert_to_entry ( "2 0 0 0", 0.0, ee, exif_data_get_byte_order(ed) ); convert_to_entry ( "2 2 0 0", 0.0, ee, exif_data_get_byte_order(ed) ); jpeg_data_set_exif_data (jdata, ed); if ( jdata ) { /* Save the modified image. */ result = jpeg_data_save_file (jdata, filename); // Convert result from 1 for success, 0 for failure into our scheme result = !result; jpeg_data_unref (jdata); } else { // Epic fail - file probably not a JPEG result = 2; } if ( no_change_mtime ) { // Restore mtime, using the saved value struct stat stat_tmp; struct utimbuf utb; stat ( filename, &stat_tmp ); utb.actime = stat_tmp.st_atime; utb.modtime = stat_save.st_mtime; utime ( filename, &utb ); } return result; } viking-1.4.2/src/bingmapsource.h0000644000175000017500000000373312175546146013545 00000000000000/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * viking * Copyright (C) 2011, Guilhem Bonnefille * * viking is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * viking is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef _BING_MAP_SOURCE_H #define _BING_MAP_SOURCE_H #include "vikcoord.h" #include "mapcoord.h" #include "vikslippymapsource.h" G_BEGIN_DECLS #define BING_TYPE_MAP_SOURCE (bing_map_source_get_type ()) #define BING_MAP_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), BING_TYPE_MAP_SOURCE, BingMapSource)) #define BING_MAP_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), BING_TYPE_MAP_SOURCE, BingMapSourceClass)) #define BING_IS_MAP_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), BING_TYPE_MAP_SOURCE)) #define BING_IS_MAP_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), BING_TYPE_MAP_SOURCE)) #define BING_MAP_SOURCE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), BING_TYPE_MAP_SOURCE, BingMapSourceClass)) typedef struct _BingMapSourceClass BingMapSourceClass; typedef struct _BingMapSource BingMapSource; struct _BingMapSourceClass { VikSlippyMapSourceClass parent_class; }; struct _BingMapSource { VikSlippyMapSource parent_instance; }; GType bing_map_source_get_type (void) G_GNUC_CONST; BingMapSource * bing_map_source_new_with_id (guint16 id, const gchar *label, const gchar *key); G_END_DECLS #endif /* _BING_MAP_SOURCE_H_ */ viking-1.4.2/src/gpsmapper.c0000644000175000017500000001011012024715566012660 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "viking.h" #include /* Name of layer -> RGN type and Type format: Name RGN40 0x40 or: Name RGN10 0x2f06 */ /* returns 0 if invalid/no rgn stuff, else returns len of */ static guint print_rgn_stuff ( const gchar *nm, FILE *f ) { guint len; gchar *layers; gchar *name; if (!nm) return 0; name = g_strdup ( nm ); len = strlen(name); /* --------------------------------------------- */ /* added by oddgeir@oddgeirkvien.com, 2005.02.02 */ /* Format may also be: Name RGN40 0x40 Layers=1 */ /* or: Name RGN10 0x2f06 Layers=1 */ if ( len > 20 && strncasecmp(name+len-8,"LAYERS=",7) == 0 ) /* Layers is added to the description */ { layers=name+len-8; *(name+len-9)=0; len = strlen(name); } else { layers=0; } /* --------------------------------------------- */ if ( len > 11 && strncasecmp(name+len-10,"RGN",3) == 0 && strncasecmp(name+len-4,"0x",2) == 0 ) { fprintf ( f, "[%.5s]\nType=%.4s\nLabel=", name+len-10, name+len-4 ); fwrite ( name, sizeof(gchar), len - 11, f ); fprintf ( f, "\n" ); /* added by oddgeir@oddgeirkvien.com, 2005.02.02 */ if (layers) fprintf( f, "%s\n",layers); g_free ( name ); return len - 11; } else if ( len > 13 && strncasecmp(name+len-12,"RGN",3) == 0 && strncasecmp(name+len-6,"0x",2) == 0 ) { fprintf ( f, "[%.5s]\nType=%.6s\nLabel=", name+len-12, name+len-6 ); fwrite ( name, sizeof(gchar), len - 13, f ); fprintf ( f, "\n" ); /* added by oddgeir@oddgeirkvien.com, 2005.02.02 */ if (layers) fprintf( f, "%s\n",layers); g_free ( name ); return len - 13; } else { g_free ( name ); return 0; } } static void write_waypoint ( const gchar *name, VikWaypoint *wp, FILE *f ) { static struct LatLon ll; guint len = print_rgn_stuff ( wp->comment, f ); if ( len ) { gchar *s_lat, *s_lon; vik_coord_to_latlon ( &(wp->coord), &ll ); s_lat = a_coords_dtostr(ll.lat); s_lon = a_coords_dtostr(ll.lon); fprintf ( f, "Data0=(%s,%s)\n", s_lat, s_lon ); g_free ( s_lat ); g_free ( s_lon ); fprintf ( f, "[END-%.5s]\n\n", wp->comment+len+1 ); } } static void write_trackpoint ( VikTrackpoint *tp, FILE *f ) { static struct LatLon ll; gchar *s_lat, *s_lon; vik_coord_to_latlon ( &(tp->coord), &ll ); s_lat = a_coords_dtostr(ll.lat); s_lon = a_coords_dtostr(ll.lon); fprintf ( f, "(%s,%s),", s_lat, s_lon ); g_free ( s_lat ); g_free ( s_lon ); } static void write_track ( const gchar *name, VikTrack *t, FILE *f ) { guint len = print_rgn_stuff ( t->comment, f ); if ( len ) { fprintf ( f, "Data0=" ); g_list_foreach ( t->trackpoints, (GFunc) write_trackpoint, f ); fprintf ( f, "\n[END-%.5s]\n\n", t->comment+len+1 ); } } void a_gpsmapper_write_file ( VikTrwLayer *trw, FILE *f ) { GHashTable *tracks = vik_trw_layer_get_tracks ( trw ); GHashTable *waypoints = vik_trw_layer_get_waypoints ( trw ); fprintf ( f, "[IMG ID]\nID=%s\nName=%s\nTreSize=1000\nRgnLimit=700\nLevels=2\nLevel0=22\nLevel1=18\nZoom0=0\nZoom1=1\n[END-IMG ID]\n\n", VIK_LAYER(trw)->name, VIK_LAYER(trw)->name ); g_hash_table_foreach ( waypoints, (GHFunc) write_waypoint, f ); g_hash_table_foreach ( tracks, (GHFunc) write_track, f ); } viking-1.4.2/src/dialog.c0000644000175000017500000011062212175546146012135 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * Copyright (C) 2008, Hein Ragas * Copyright (C) 2010, Rob Norris * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "viking.h" #include "thumbnails.h" #include "garminsymbols.h" #include "degrees_converters.h" #include "authors.h" #include "documenters.h" #include "vikgoto.h" #include "util.h" #include #include #include #include void a_dialog_msg ( GtkWindow *parent, gint type, const gchar *info, const gchar *extra ) { GtkWidget *msgbox = gtk_message_dialog_new ( parent, GTK_DIALOG_DESTROY_WITH_PARENT, type, GTK_BUTTONS_OK, info, extra ); gtk_dialog_run ( GTK_DIALOG(msgbox) ); gtk_widget_destroy ( msgbox ); } gboolean a_dialog_goto_latlon ( GtkWindow *parent, struct LatLon *ll, const struct LatLon *old ) { GtkWidget *dialog = gtk_dialog_new_with_buttons (_("Go to Lat/Lon"), parent, GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL); GtkWidget *latlabel, *lonlabel; GtkWidget *lat, *lon; gchar *tmp_lat, *tmp_lon; latlabel = gtk_label_new (_("Latitude:")); lat = gtk_entry_new (); tmp_lat = g_strdup_printf ( "%f", old->lat ); gtk_entry_set_text ( GTK_ENTRY(lat), tmp_lat ); g_free ( tmp_lat ); lonlabel = gtk_label_new (_("Longitude:")); lon = gtk_entry_new (); tmp_lon = g_strdup_printf ( "%f", old->lon ); gtk_entry_set_text ( GTK_ENTRY(lon), tmp_lon ); g_free ( tmp_lon ); gtk_widget_show ( latlabel ); gtk_widget_show ( lonlabel ); gtk_widget_show ( lat ); gtk_widget_show ( lon ); gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), latlabel, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), lat, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), lonlabel, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), lon, FALSE, FALSE, 0); gtk_dialog_set_default_response ( GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT ); if ( gtk_dialog_run ( GTK_DIALOG(dialog) ) == GTK_RESPONSE_ACCEPT ) { ll->lat = convert_dms_to_dec ( gtk_entry_get_text ( GTK_ENTRY(lat) ) ); ll->lon = convert_dms_to_dec ( gtk_entry_get_text ( GTK_ENTRY(lon) ) ); gtk_widget_destroy ( dialog ); return TRUE; } gtk_widget_destroy ( dialog ); return FALSE; } gboolean a_dialog_goto_utm ( GtkWindow *parent, struct UTM *utm, const struct UTM *old ) { GtkWidget *dialog = gtk_dialog_new_with_buttons (_("Go to UTM"), parent, GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL); GtkWidget *norlabel, *easlabel, *nor, *eas; GtkWidget *zonehbox, *zonespin, *letterentry; gchar *tmp_eas, *tmp_nor; gchar tmp_letter[2]; norlabel = gtk_label_new (_("Northing:")); nor = gtk_entry_new (); tmp_nor = g_strdup_printf("%ld", (long) old->northing ); gtk_entry_set_text ( GTK_ENTRY(nor), tmp_nor ); g_free ( tmp_nor ); easlabel = gtk_label_new (_("Easting:")); eas = gtk_entry_new (); tmp_eas = g_strdup_printf("%ld", (long) old->easting ); gtk_entry_set_text ( GTK_ENTRY(eas), tmp_eas ); g_free ( tmp_eas ); zonehbox = gtk_hbox_new ( FALSE, 0 ); gtk_box_pack_start ( GTK_BOX(zonehbox), gtk_label_new ( _("Zone:") ), FALSE, FALSE, 5 ); zonespin = gtk_spin_button_new ( (GtkAdjustment *) gtk_adjustment_new ( old->zone, 1, 60, 1, 5, 0 ), 1, 0 ); gtk_box_pack_start ( GTK_BOX(zonehbox), zonespin, TRUE, TRUE, 5 ); gtk_box_pack_start ( GTK_BOX(zonehbox), gtk_label_new ( _("Letter:") ), FALSE, FALSE, 5 ); letterentry = gtk_entry_new (); gtk_entry_set_max_length ( GTK_ENTRY(letterentry), 1 ); gtk_entry_set_width_chars ( GTK_ENTRY(letterentry), 2 ); tmp_letter[0] = old->letter; tmp_letter[1] = '\0'; gtk_entry_set_text ( GTK_ENTRY(letterentry), tmp_letter ); gtk_box_pack_start ( GTK_BOX(zonehbox), letterentry, FALSE, FALSE, 5 ); gtk_widget_show ( norlabel ); gtk_widget_show ( easlabel ); gtk_widget_show ( nor ); gtk_widget_show ( eas ); gtk_widget_show_all ( zonehbox ); gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), norlabel, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), nor, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), easlabel, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), eas, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), zonehbox, FALSE, FALSE, 0); gtk_dialog_set_default_response ( GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT ); if ( gtk_dialog_run ( GTK_DIALOG(dialog) ) == GTK_RESPONSE_ACCEPT ) { const gchar *letter; utm->northing = atof ( gtk_entry_get_text ( GTK_ENTRY(nor) ) ); utm->easting = atof ( gtk_entry_get_text ( GTK_ENTRY(eas) ) ); utm->zone = gtk_spin_button_get_value_as_int ( GTK_SPIN_BUTTON(zonespin) ); letter = gtk_entry_get_text ( GTK_ENTRY(letterentry) ); if (*letter) utm->letter = toupper(*letter); gtk_widget_destroy ( dialog ); return TRUE; } gtk_widget_destroy ( dialog ); return FALSE; } void a_dialog_response_accept ( GtkDialog *dialog ) { gtk_dialog_response ( dialog, GTK_RESPONSE_ACCEPT ); } static void symbol_entry_changed_cb(GtkWidget *combo, GtkListStore *store) { GtkTreeIter iter; gchar *sym; if (!gtk_combo_box_get_active_iter(GTK_COMBO_BOX(combo), &iter)) return; gtk_tree_model_get(GTK_TREE_MODEL(store), &iter, 0, (void *)&sym, -1 ); /* Note: symm is NULL when "(none)" is select (first cell is empty) */ gtk_widget_set_tooltip_text(combo, sym); g_free(sym); } /* Specify if a new waypoint or not */ /* If a new waypoint then it uses the default_name for the suggested name allowing the user to change it. The name to use is returned When an existing waypoint the default name is shown but is not allowed to be changed and NULL is returned */ /* todo: less on this side, like add track */ gchar *a_dialog_waypoint ( GtkWindow *parent, gchar *default_name, VikWaypoint *wp, VikCoordMode coord_mode, gboolean is_new, gboolean *updated ) { GtkWidget *dialog = gtk_dialog_new_with_buttons (_("Waypoint Properties"), parent, GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL); struct LatLon ll; GtkWidget *latlabel, *lonlabel, *namelabel, *latentry, *lonentry, *altentry, *altlabel, *nameentry=NULL; GtkWidget *commentlabel, *commententry, *descriptionlabel, *descriptionentry, *imagelabel, *imageentry, *symbollabel, *symbolentry; GtkListStore *store; gchar *lat, *lon, *alt; vik_coord_to_latlon ( &(wp->coord), &ll ); lat = g_strdup_printf ( "%f", ll.lat ); lon = g_strdup_printf ( "%f", ll.lon ); vik_units_height_t height_units = a_vik_get_units_height (); switch (height_units) { case VIK_UNITS_HEIGHT_METRES: alt = g_strdup_printf ( "%f", wp->altitude ); break; case VIK_UNITS_HEIGHT_FEET: alt = g_strdup_printf ( "%f", VIK_METERS_TO_FEET(wp->altitude) ); break; default: alt = g_strdup_printf ( "%f", wp->altitude ); g_critical("Houston, we've had a problem. height=%d", height_units); } *updated = FALSE; namelabel = gtk_label_new (_("Name:")); gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), namelabel, FALSE, FALSE, 0); if ( is_new ) { // New waypoint, so name is still changeable nameentry = gtk_entry_new (); if ( default_name ) gtk_entry_set_text( GTK_ENTRY(nameentry), default_name ); g_signal_connect_swapped ( nameentry, "activate", G_CALLBACK(a_dialog_response_accept), GTK_DIALOG(dialog) ); } else { // Existing waypoint - so can not change the name this way - but at least can see it if ( default_name ) nameentry = gtk_label_new ( default_name ); } if ( nameentry ) gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), nameentry, FALSE, FALSE, 0); latlabel = gtk_label_new (_("Latitude:")); latentry = gtk_entry_new (); gtk_entry_set_text ( GTK_ENTRY(latentry), lat ); g_free ( lat ); lonlabel = gtk_label_new (_("Longitude:")); lonentry = gtk_entry_new (); gtk_entry_set_text ( GTK_ENTRY(lonentry), lon ); g_free ( lon ); altlabel = gtk_label_new (_("Altitude:")); altentry = gtk_entry_new (); gtk_entry_set_text ( GTK_ENTRY(altentry), alt ); g_free ( alt ); commentlabel = gtk_label_new (_("Comment:")); commententry = gtk_entry_new (); gchar *cmt = NULL; // Auto put in some kind of 'name' as a comment if one previously 'goto'ed this exact location cmt = a_vik_goto_get_search_string_for_this_place(VIK_WINDOW(parent)); if (cmt) gtk_entry_set_text(GTK_ENTRY(commententry), cmt); descriptionlabel = gtk_label_new (_("Description:")); descriptionentry = gtk_entry_new (); imagelabel = gtk_label_new (_("Image:")); imageentry = vik_file_entry_new (GTK_FILE_CHOOSER_ACTION_OPEN); { GtkCellRenderer *r; symbollabel = gtk_label_new (_("Symbol:")); GtkTreeIter iter; store = gtk_list_store_new(3, G_TYPE_STRING, GDK_TYPE_PIXBUF, G_TYPE_STRING); symbolentry = gtk_combo_box_new_with_model(GTK_TREE_MODEL(store)); gtk_combo_box_set_wrap_width(GTK_COMBO_BOX(symbolentry), 6); g_signal_connect(symbolentry, "changed", G_CALLBACK(symbol_entry_changed_cb), store); gtk_list_store_append (store, &iter); gtk_list_store_set (store, &iter, 0, NULL, 1, NULL, 2, _("(none)"), -1); a_populate_sym_list(store); r = gtk_cell_renderer_pixbuf_new (); gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (symbolentry), r, FALSE); gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (symbolentry), r, "pixbuf", 1, NULL); r = gtk_cell_renderer_text_new (); gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (symbolentry), r, FALSE); gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (symbolentry), r, "text", 2, NULL); if ( !is_new && wp->symbol ) { gboolean ok; gchar *sym; for (ok = gtk_tree_model_get_iter_first ( GTK_TREE_MODEL(store), &iter ); ok; ok = gtk_tree_model_iter_next ( GTK_TREE_MODEL(store), &iter)) { gtk_tree_model_get ( GTK_TREE_MODEL(store), &iter, 0, (void *)&sym, -1 ); if (sym && !strcmp(sym, wp->symbol)) { g_free(sym); break; } else { g_free(sym); } } // Ensure is it a valid symbol in the given symbol set (large vs small) // Not all symbols are available in both // The check prevents a Gtk Critical message if ( iter.stamp ) gtk_combo_box_set_active_iter(GTK_COMBO_BOX(symbolentry), &iter); } } if ( !is_new && wp->comment ) gtk_entry_set_text ( GTK_ENTRY(commententry), wp->comment ); if ( !is_new && wp->description ) gtk_entry_set_text ( GTK_ENTRY(descriptionentry), wp->description ); if ( !is_new && wp->image ) vik_file_entry_set_filename ( VIK_FILE_ENTRY(imageentry), wp->image ); gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), latlabel, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), latentry, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), lonlabel, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), lonentry, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), altlabel, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), altentry, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), commentlabel, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), commententry, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), descriptionlabel, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), descriptionentry, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), imagelabel, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), imageentry, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), symbollabel, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), GTK_WIDGET(symbolentry), FALSE, FALSE, 0); gtk_dialog_set_default_response ( GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT ); gtk_widget_show_all ( GTK_DIALOG(dialog)->vbox ); while ( gtk_dialog_run ( GTK_DIALOG(dialog) ) == GTK_RESPONSE_ACCEPT ) { if ( is_new ) { if ( strlen((gchar*)gtk_entry_get_text ( GTK_ENTRY(nameentry) )) == 0 ) /* TODO: other checks (isalpha or whatever ) */ a_dialog_info_msg ( parent, _("Please enter a name for the waypoint.") ); else { // NB: No check for unique names - this allows generation of same named entries. gchar *entered_name = g_strdup ( (gchar*)gtk_entry_get_text ( GTK_ENTRY(nameentry) ) ); /* Do It */ ll.lat = convert_dms_to_dec ( gtk_entry_get_text ( GTK_ENTRY(latentry) ) ); ll.lon = convert_dms_to_dec ( gtk_entry_get_text ( GTK_ENTRY(lonentry) ) ); vik_coord_load_from_latlon ( &(wp->coord), coord_mode, &ll ); // Always store in metres switch (height_units) { case VIK_UNITS_HEIGHT_METRES: wp->altitude = atof ( gtk_entry_get_text ( GTK_ENTRY(altentry) ) ); break; case VIK_UNITS_HEIGHT_FEET: wp->altitude = VIK_FEET_TO_METERS(atof ( gtk_entry_get_text ( GTK_ENTRY(altentry) ) )); break; default: wp->altitude = atof ( gtk_entry_get_text ( GTK_ENTRY(altentry) ) ); g_critical("Houston, we've had a problem. height=%d", height_units); } vik_waypoint_set_comment ( wp, gtk_entry_get_text ( GTK_ENTRY(commententry) ) ); vik_waypoint_set_description ( wp, gtk_entry_get_text ( GTK_ENTRY(descriptionentry) ) ); vik_waypoint_set_image ( wp, vik_file_entry_get_filename ( VIK_FILE_ENTRY(imageentry) ) ); if ( wp->image && *(wp->image) && (!a_thumbnails_exists(wp->image)) ) a_thumbnails_create ( wp->image ); GtkTreeIter iter, first; gtk_tree_model_get_iter_first ( GTK_TREE_MODEL(store), &first ); if ( !gtk_combo_box_get_active_iter ( GTK_COMBO_BOX(symbolentry), &iter ) || !memcmp(&iter, &first, sizeof(GtkTreeIter)) ) { vik_waypoint_set_symbol ( wp, NULL ); } else { gchar *sym; gtk_tree_model_get ( GTK_TREE_MODEL(store), &iter, 0, (void *)&sym, -1 ); vik_waypoint_set_symbol ( wp, sym ); g_free(sym); } gtk_widget_destroy ( dialog ); return entered_name; } } else { ll.lat = convert_dms_to_dec ( gtk_entry_get_text ( GTK_ENTRY(latentry) ) ); ll.lon = convert_dms_to_dec ( gtk_entry_get_text ( GTK_ENTRY(lonentry) ) ); vik_coord_load_from_latlon ( &(wp->coord), coord_mode, &ll ); switch (height_units) { case VIK_UNITS_HEIGHT_METRES: wp->altitude = atof ( gtk_entry_get_text ( GTK_ENTRY(altentry) ) ); break; case VIK_UNITS_HEIGHT_FEET: wp->altitude = VIK_FEET_TO_METERS(atof ( gtk_entry_get_text ( GTK_ENTRY(altentry) ) )); break; default: wp->altitude = atof ( gtk_entry_get_text ( GTK_ENTRY(altentry) ) ); g_critical("Houston, we've had a problem. height=%d", height_units); } if ( (! wp->comment) || strcmp ( wp->comment, gtk_entry_get_text ( GTK_ENTRY(commententry) ) ) != 0 ) vik_waypoint_set_comment ( wp, gtk_entry_get_text ( GTK_ENTRY(commententry) ) ); if ( (! wp->description) || strcmp ( wp->description, gtk_entry_get_text ( GTK_ENTRY(descriptionentry) ) ) != 0 ) vik_waypoint_set_description ( wp, gtk_entry_get_text ( GTK_ENTRY(descriptionentry) ) ); if ( (! wp->image) || strcmp ( wp->image, vik_file_entry_get_filename ( VIK_FILE_ENTRY ( imageentry ) ) ) != 0 ) { vik_waypoint_set_image ( wp, vik_file_entry_get_filename ( VIK_FILE_ENTRY(imageentry) ) ); if ( wp->image && *(wp->image) && (!a_thumbnails_exists(wp->image)) ) a_thumbnails_create ( wp->image ); } { GtkTreeIter iter, first; gtk_tree_model_get_iter_first ( GTK_TREE_MODEL(store), &first ); if ( !gtk_combo_box_get_active_iter ( GTK_COMBO_BOX(symbolentry), &iter ) || !memcmp(&iter, &first, sizeof(GtkTreeIter)) ) { vik_waypoint_set_symbol ( wp, NULL ); } else { gchar *sym; gtk_tree_model_get ( GTK_TREE_MODEL(store), &iter, 0, (void *)&sym, -1 ); vik_waypoint_set_symbol ( wp, sym ); g_free(sym); } } gtk_widget_destroy ( dialog ); *updated = TRUE; return NULL; } } gtk_widget_destroy ( dialog ); return NULL; } static void get_selected_foreach_func(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data) { GList **list = data; gchar *name; gtk_tree_model_get (model, iter, 0, &name, -1); *list = g_list_prepend(*list, name); } GList *a_dialog_select_from_list ( GtkWindow *parent, GList *names, gboolean multiple_selection_allowed, const gchar *title, const gchar *msg ) { GtkTreeIter iter; GtkCellRenderer *renderer; GtkWidget *view; GtkWidget *dialog = gtk_dialog_new_with_buttons (title, parent, GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL); /* When something is selected then OK */ gtk_dialog_set_default_response ( GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT ); GtkWidget *response_w = NULL; #if GTK_CHECK_VERSION (2, 20, 0) /* Default to not apply - as initially nothing is selected! */ response_w = gtk_dialog_get_widget_for_response ( GTK_DIALOG(dialog), GTK_RESPONSE_REJECT ); #endif GtkListStore *store = gtk_list_store_new(1, G_TYPE_STRING); GtkWidget *scrolledwindow; GList *runner = names; while (runner) { gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, 0, runner->data, -1); runner = g_list_next(runner); } view = gtk_tree_view_new(); renderer = gtk_cell_renderer_text_new(); // Use the column header to display the message text, // this makes the overall widget allocation simple as treeview takes up all the space GtkTreeViewColumn *column; column = gtk_tree_view_column_new_with_attributes (msg, renderer, "text", 0, NULL ); gtk_tree_view_column_set_sort_column_id (column, 0); gtk_tree_view_append_column (GTK_TREE_VIEW (view), column); gtk_tree_view_set_model(GTK_TREE_VIEW(view), GTK_TREE_MODEL(store)); gtk_tree_selection_set_mode( gtk_tree_view_get_selection(GTK_TREE_VIEW(view)), multiple_selection_allowed ? GTK_SELECTION_MULTIPLE : GTK_SELECTION_BROWSE ); g_object_unref(store); scrolledwindow = gtk_scrolled_window_new ( NULL, NULL ); gtk_scrolled_window_set_policy ( GTK_SCROLLED_WINDOW(scrolledwindow), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC ); gtk_container_add ( GTK_CONTAINER(scrolledwindow), view ); gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(dialog)->vbox), scrolledwindow, TRUE, TRUE, 0 ); // Ensure a reasonable number of items are shown, but let the width be automatically sized gtk_widget_set_size_request ( dialog, -1, 400) ; gtk_widget_show_all ( dialog ); if ( response_w ) gtk_widget_grab_focus ( response_w ); while ( gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT ) { GList *names = NULL; GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(view)); gtk_tree_selection_selected_foreach(selection, get_selected_foreach_func, &names); if (names) { gtk_widget_destroy ( dialog ); return (names); } a_dialog_error_msg(parent, _("Nothing was selected")); } gtk_widget_destroy ( dialog ); return NULL; } gchar *a_dialog_new_track ( GtkWindow *parent, GHashTable *tracks, gchar *default_name, gboolean is_route ) { GtkWidget *dialog = gtk_dialog_new_with_buttons ( is_route ? _("Add Route") : _("Add Track"), parent, GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL); GtkWidget *label = gtk_label_new ( is_route ? _("Route Name:") : _("Track Name:") ); GtkWidget *entry = gtk_entry_new (); if (default_name) gtk_entry_set_text ( GTK_ENTRY(entry), default_name ); gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), label, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), entry, FALSE, FALSE, 0); g_signal_connect_swapped ( entry, "activate", G_CALLBACK(a_dialog_response_accept), GTK_DIALOG(dialog) ); gtk_widget_show ( label ); gtk_widget_show ( entry ); gtk_dialog_set_default_response ( GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT ); while ( gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT ) { const gchar *constname = gtk_entry_get_text ( GTK_ENTRY(entry) ); if ( *constname == '\0' ) a_dialog_info_msg ( parent, _("Please enter a name for the track.") ); else { gchar *name = g_strdup ( constname ); gtk_widget_destroy ( dialog ); return name; } } gtk_widget_destroy ( dialog ); return NULL; } /* creates a vbox full of labels */ GtkWidget *a_dialog_create_label_vbox ( gchar **texts, int label_count ) { GtkWidget *vbox, *label; int i; vbox = gtk_vbox_new( TRUE, 3 ); for ( i = 0; i < label_count; i++ ) { label = gtk_label_new(NULL); gtk_label_set_markup ( GTK_LABEL(label), _(texts[i]) ); gtk_box_pack_start ( GTK_BOX(vbox), label, FALSE, TRUE, 5 ); } return vbox; } gboolean a_dialog_yes_or_no ( GtkWindow *parent, const gchar *message, const gchar *extra ) { GtkWidget *dia; dia = gtk_message_dialog_new ( parent, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, message, extra ); if ( gtk_dialog_run ( GTK_DIALOG(dia) ) == GTK_RESPONSE_YES ) { gtk_widget_destroy ( dia ); return TRUE; } else { gtk_widget_destroy ( dia ); return FALSE; } } static void zoom_spin_changed ( GtkSpinButton *spin, GtkWidget *pass_along[3] ) { if ( gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON(pass_along[2]) ) ) gtk_spin_button_set_value ( GTK_SPIN_BUTTON(pass_along[GTK_WIDGET(spin) == pass_along[0] ? 1 : 0]), gtk_spin_button_get_value ( spin ) ); } gboolean a_dialog_custom_zoom ( GtkWindow *parent, gdouble *xmpp, gdouble *ympp ) { GtkWidget *dialog = gtk_dialog_new_with_buttons (_("Zoom Factors..."), parent, GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL); GtkWidget *table, *label, *xlabel, *xspin, *ylabel, *yspin, *samecheck; GtkWidget *pass_along[3]; table = gtk_table_new ( 4, 2, FALSE ); gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(dialog)->vbox), table, TRUE, TRUE, 0 ); label = gtk_label_new ( _("Zoom factor (in meters per pixel):") ); xlabel = gtk_label_new ( _("X (easting): ")); ylabel = gtk_label_new ( _("Y (northing): ")); pass_along[0] = xspin = gtk_spin_button_new ( (GtkAdjustment *) gtk_adjustment_new ( *xmpp, VIK_VIEWPORT_MIN_ZOOM, VIK_VIEWPORT_MAX_ZOOM, 1, 5, 0 ), 1, 8 ); pass_along[1] = yspin = gtk_spin_button_new ( (GtkAdjustment *) gtk_adjustment_new ( *ympp, VIK_VIEWPORT_MIN_ZOOM, VIK_VIEWPORT_MAX_ZOOM, 1, 5, 0 ), 1, 8 ); pass_along[2] = samecheck = gtk_check_button_new_with_label ( _("X and Y zoom factors must be equal") ); /* TODO -- same factor */ /* samecheck = gtk_check_button_new_with_label ( "Same x/y zoom factor" ); */ if ( *xmpp == *ympp ) gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON(samecheck), TRUE ); gtk_table_attach_defaults ( GTK_TABLE(table), label, 0, 2, 0, 1 ); gtk_table_attach_defaults ( GTK_TABLE(table), xlabel, 0, 1, 1, 2 ); gtk_table_attach_defaults ( GTK_TABLE(table), xspin, 1, 2, 1, 2 ); gtk_table_attach_defaults ( GTK_TABLE(table), ylabel, 0, 1, 2, 3 ); gtk_table_attach_defaults ( GTK_TABLE(table), yspin, 1, 2, 2, 3 ); gtk_table_attach_defaults ( GTK_TABLE(table), samecheck, 0, 2, 3, 4 ); gtk_widget_show_all ( table ); g_signal_connect ( G_OBJECT(xspin), "value-changed", G_CALLBACK(zoom_spin_changed), pass_along ); g_signal_connect ( G_OBJECT(yspin), "value-changed", G_CALLBACK(zoom_spin_changed), pass_along ); gtk_dialog_set_default_response ( GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT ); if ( gtk_dialog_run ( GTK_DIALOG(dialog) ) == GTK_RESPONSE_ACCEPT ) { *xmpp = gtk_spin_button_get_value ( GTK_SPIN_BUTTON(xspin) ); *ympp = gtk_spin_button_get_value ( GTK_SPIN_BUTTON(yspin) ); gtk_widget_destroy ( dialog ); return TRUE; } gtk_widget_destroy ( dialog ); return FALSE; } static void split_spin_focused ( GtkSpinButton *spin, GtkWidget *pass_along[1] ) { gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(pass_along[0]), 1); } gboolean a_dialog_time_threshold ( GtkWindow *parent, gchar *title_text, gchar *label_text, guint *thr ) { GtkWidget *dialog = gtk_dialog_new_with_buttons (title_text, parent, GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL); GtkWidget *table, *t1, *t2, *t3, *t4, *spin, *label; GtkWidget *pass_along[1]; table = gtk_table_new ( 4, 2, FALSE ); gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(dialog)->vbox), table, TRUE, TRUE, 0 ); label = gtk_label_new (label_text); t1 = gtk_radio_button_new_with_label ( NULL, _("1 min") ); t2 = gtk_radio_button_new_with_label_from_widget ( GTK_RADIO_BUTTON(t1), _("1 hour") ); t3 = gtk_radio_button_new_with_label_from_widget ( GTK_RADIO_BUTTON(t2), _("1 day") ); t4 = gtk_radio_button_new_with_label_from_widget ( GTK_RADIO_BUTTON(t3), _("Custom (in minutes):") ); pass_along[0] = t4; spin = gtk_spin_button_new ( (GtkAdjustment *) gtk_adjustment_new ( *thr, 0, 65536, 1, 5, 0 ), 1, 0 ); gtk_table_attach_defaults ( GTK_TABLE(table), label, 0, 2, 0, 1 ); gtk_table_attach_defaults ( GTK_TABLE(table), t1, 0, 1, 1, 2 ); gtk_table_attach_defaults ( GTK_TABLE(table), t2, 0, 1, 2, 3 ); gtk_table_attach_defaults ( GTK_TABLE(table), t3, 0, 1, 3, 4 ); gtk_table_attach_defaults ( GTK_TABLE(table), t4, 0, 1, 4, 5 ); gtk_table_attach_defaults ( GTK_TABLE(table), spin, 1, 2, 4, 5 ); gtk_widget_show_all ( table ); g_signal_connect ( G_OBJECT(spin), "grab-focus", G_CALLBACK(split_spin_focused), pass_along ); gtk_dialog_set_default_response ( GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT ); if ( gtk_dialog_run ( GTK_DIALOG(dialog) ) == GTK_RESPONSE_ACCEPT ) { if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(t1))) { *thr = 1; } else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(t2))) { *thr = 60; } else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(t3))) { *thr = 60 * 24; } else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(t4))) { *thr = gtk_spin_button_get_value ( GTK_SPIN_BUTTON(spin) ); } gtk_widget_destroy ( dialog ); return TRUE; } gtk_widget_destroy ( dialog ); return FALSE; } /** * Dialog to return a positive number via a spinbox within the supplied limits * A return value of zero indicates the dialog was cancelled */ guint a_dialog_get_positive_number ( GtkWindow *parent, gchar *title_text, gchar *label_text, guint default_num, guint min, guint max, guint step ) { GtkWidget *dialog = gtk_dialog_new_with_buttons (title_text, parent, GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL); gtk_dialog_set_default_response ( GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT ); GtkWidget *response_w = NULL; #if GTK_CHECK_VERSION (2, 20, 0) response_w = gtk_dialog_get_widget_for_response ( GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT ); #endif GtkWidget *table, *spin, *label; guint result = default_num; table = gtk_table_new ( 2, 1, FALSE ); gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(dialog)->vbox), table, TRUE, TRUE, 0 ); label = gtk_label_new (label_text); spin = gtk_spin_button_new ( (GtkAdjustment *) gtk_adjustment_new ( default_num, min, max, step, 5, 0 ), 1, 0 ); gtk_table_attach_defaults ( GTK_TABLE(table), label, 0, 1, 0, 1 ); gtk_table_attach_defaults ( GTK_TABLE(table), spin, 0, 1, 1, 2 ); if ( response_w ) gtk_widget_grab_focus ( response_w ); gtk_widget_show_all ( table ); if ( gtk_dialog_run ( GTK_DIALOG(dialog) ) == GTK_RESPONSE_ACCEPT ) { result = gtk_spin_button_get_value ( GTK_SPIN_BUTTON(spin) ); gtk_widget_destroy ( dialog ); return result; } // Dialog cancelled gtk_widget_destroy ( dialog ); return 0; } static void about_url_hook (GtkAboutDialog *about, const gchar *link, gpointer data) { open_url (GTK_WINDOW(about), link); } static void about_email_hook (GtkAboutDialog *about, const gchar *email, gpointer data) { new_email (GTK_WINDOW(about), email); } void a_dialog_about ( GtkWindow *parent ) { const gchar *program_name = PACKAGE_NAME; const gchar *version = VIKING_VERSION; const gchar *website = VIKING_URL; const gchar *copyright = "2003-2008, Evan Battaglia\n2008-2010, Viking's contributors"; const gchar *comments = _("GPS Data and Topo Analyzer, Explorer, and Manager."); const gchar *license = _("This program is free software; you can redistribute it and/or modify " "it under the terms of the GNU General Public License as published by " "the Free Software Foundation; either version 2 of the License, or " "(at your option) any later version." "\n\n" "This program is distributed in the hope that it will be useful, " "but WITHOUT ANY WARRANTY; without even the implied warranty of " "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the " "GNU General Public License for more details." "\n\n" "You should have received a copy of the GNU General Public License " "along with this program; if not, write to the Free Software " "Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA"); gtk_about_dialog_set_url_hook (about_url_hook, NULL, NULL); gtk_about_dialog_set_email_hook (about_email_hook, NULL, NULL); gtk_show_about_dialog (parent, /* TODO do not set program-name and correctly set info for g_get_application_name */ "program-name", program_name, "version", version, "website", website, "comments", comments, "copyright", copyright, "license", license, "wrap-license", TRUE, /* logo automatically retrieved via gtk_window_get_default_icon_list */ "authors", AUTHORS, "documenters", DOCUMENTERS, "translator-credits", _("Translation is coordinated on http://launchpad.net/viking"), NULL); } gboolean a_dialog_map_n_zoom(GtkWindow *parent, gchar *mapnames[], gint default_map, gchar *zoom_list[], gint default_zoom, gint *selected_map, gint *selected_zoom) { gchar **s; GtkWidget *dialog = gtk_dialog_new_with_buttons ( _("Download along track"), parent, 0, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, NULL ); gtk_dialog_set_default_response ( GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT ); GtkWidget *response_w = NULL; #if GTK_CHECK_VERSION (2, 20, 0) response_w = gtk_dialog_get_widget_for_response ( GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT ); #endif GtkWidget *map_label = gtk_label_new(_("Map type:")); GtkComboBox *map_combo = GTK_COMBO_BOX(gtk_combo_box_new_text()); for (s = mapnames; *s; s++) gtk_combo_box_append_text(map_combo, *s); gtk_combo_box_set_active (map_combo, default_map); GtkWidget *zoom_label = gtk_label_new(_("Zoom level:")); GtkComboBox *zoom_combo = GTK_COMBO_BOX(gtk_combo_box_new_text()); for (s = zoom_list; *s; s++) gtk_combo_box_append_text(zoom_combo, *s); gtk_combo_box_set_active (zoom_combo, default_zoom); GtkTable *box = GTK_TABLE(gtk_table_new(2, 2, FALSE)); gtk_table_attach_defaults(box, GTK_WIDGET(map_label), 0, 1, 0, 1); gtk_table_attach_defaults(box, GTK_WIDGET(map_combo), 1, 2, 0, 1); gtk_table_attach_defaults(box, GTK_WIDGET(zoom_label), 0, 1, 1, 2); gtk_table_attach_defaults(box, GTK_WIDGET(zoom_combo), 1, 2, 1, 2); gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(dialog)->vbox), GTK_WIDGET(box), FALSE, FALSE, 5 ); if ( response_w ) gtk_widget_grab_focus ( response_w ); gtk_widget_show_all ( dialog ); if ( gtk_dialog_run ( GTK_DIALOG(dialog) ) != GTK_RESPONSE_ACCEPT ) { gtk_widget_destroy(dialog); return FALSE; } *selected_map = gtk_combo_box_get_active(map_combo); *selected_zoom = gtk_combo_box_get_active(zoom_combo); gtk_widget_destroy(dialog); return TRUE; } /** * Display a dialog presenting the license of a map. * Allow to read the license by launching a web browser. */ void a_dialog_license ( GtkWindow *parent, const gchar *map, const gchar *license, const gchar *url) { GtkWidget *dialog = gtk_message_dialog_new (parent, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, _("The map data is licensed: %s."), license); gtk_message_dialog_format_secondary_markup (GTK_MESSAGE_DIALOG (dialog), _("The data provided by '%s' are licensed under the following license: %s.\n" "Please, read the license before continuing."), map, license); #define RESPONSE_OPEN_LICENSE 600 if (url != NULL) { gtk_dialog_add_button (GTK_DIALOG (dialog), _("Open license"), RESPONSE_OPEN_LICENSE); } gint response; do { response = gtk_dialog_run (GTK_DIALOG (dialog)); if (response == RESPONSE_OPEN_LICENSE) { open_url (parent, url); } } while (response != GTK_RESPONSE_DELETE_EVENT && response != GTK_RESPONSE_OK); gtk_widget_destroy (dialog); } viking-1.4.2/src/vikdemlayer.c0000644000175000017500000011732012175546146013214 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef HAVE_MATH_H #include #endif #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_SYS_STAT_H #include #endif #ifdef HAVE_STRING_H #include #endif #include #include #include "config.h" #include "globals.h" #include "coords.h" #include "vikcoord.h" #include "download.h" #include "background.h" #include "vikwaypoint.h" #include "viktrack.h" #include "vikviewport.h" #include "viktreeview.h" #include "viklayer.h" #include "vikaggregatelayer.h" #include "viklayerspanel.h" #include "vikmapslayer.h" #include "vikdemlayer.h" #include "dialog.h" #include "dem.h" #include "dems.h" #include "icons/icons.h" #define MAPS_CACHE_DIR maps_layer_default_dir() #define SRTM_CACHE_TEMPLATE "%ssrtm3-%s%s%c%02d%c%03d.hgt.zip" #define SRTM_HTTP_SITE "dds.cr.usgs.gov" #define SRTM_HTTP_URI "/srtm/version2_1/SRTM3/" #ifdef VIK_CONFIG_DEM24K #define DEM24K_DOWNLOAD_SCRIPT "dem24k.pl" #endif #define UNUSED_LINE_THICKNESS 3 static const gchar* dem_layer_tooltip( VikDEMLayer *vdl ); static void dem_layer_marshall( VikDEMLayer *vdl, guint8 **data, gint *len ); static VikDEMLayer *dem_layer_unmarshall( guint8 *data, gint len, VikViewport *vvp ); static gboolean dem_layer_set_param ( VikDEMLayer *vdl, guint16 id, VikLayerParamData data, VikViewport *vp, gboolean is_file_operation ); static VikLayerParamData dem_layer_get_param ( VikDEMLayer *vdl, guint16 id, gboolean is_file_operation ); static void dem_layer_post_read ( VikLayer *vl, VikViewport *vp, gboolean from_file ); static void srtm_draw_existence ( VikViewport *vp ); #ifdef VIK_CONFIG_DEM24K static void dem24k_draw_existence ( VikViewport *vp ); #endif /* Upped upper limit incase units are feet */ static VikLayerParamScale param_scales[] = { { 0, 30000, 10, 1 }, { 1, 30000, 10, 1 }, }; static gchar *params_source[] = { "SRTM Global 90m (3 arcsec)", #ifdef VIK_CONFIG_DEM24K "USA 10m (USGS 24k)", #endif NULL }; static gchar *params_type[] = { N_("Absolute height"), N_("Height gradient"), NULL }; enum { DEM_SOURCE_SRTM, #ifdef VIK_CONFIG_DEM24K DEM_SOURCE_DEM24K, #endif }; enum { DEM_TYPE_HEIGHT = 0, DEM_TYPE_GRADIENT, DEM_TYPE_NONE, }; static VikLayerParam dem_layer_params[] = { { "files", VIK_LAYER_PARAM_STRING_LIST, VIK_LAYER_GROUP_NONE, N_("DEM Files:"), VIK_LAYER_WIDGET_FILELIST, NULL, NULL, NULL }, { "source", VIK_LAYER_PARAM_UINT, VIK_LAYER_GROUP_NONE, N_("Download Source:"), VIK_LAYER_WIDGET_RADIOGROUP_STATIC, params_source, NULL }, { "color", VIK_LAYER_PARAM_COLOR, VIK_LAYER_GROUP_NONE, N_("Min Elev Color:"), VIK_LAYER_WIDGET_COLOR, NULL, NULL, NULL }, { "type", VIK_LAYER_PARAM_UINT, VIK_LAYER_GROUP_NONE, N_("Type:"), VIK_LAYER_WIDGET_RADIOGROUP_STATIC, params_type, NULL, NULL }, { "min_elev", VIK_LAYER_PARAM_DOUBLE, VIK_LAYER_GROUP_NONE, N_("Min Elev:"), VIK_LAYER_WIDGET_SPINBUTTON, ¶m_scales[0], NULL, NULL }, { "max_elev", VIK_LAYER_PARAM_DOUBLE, VIK_LAYER_GROUP_NONE, N_("Max Elev:"), VIK_LAYER_WIDGET_SPINBUTTON, ¶m_scales[0], NULL, NULL }, }; enum { PARAM_FILES=0, PARAM_SOURCE, PARAM_COLOR, PARAM_TYPE, PARAM_MIN_ELEV, PARAM_MAX_ELEV, NUM_PARAMS }; static gpointer dem_layer_download_create ( VikWindow *vw, VikViewport *vvp); static gboolean dem_layer_download_release ( VikDEMLayer *vdl, GdkEventButton *event, VikViewport *vvp ); static gboolean dem_layer_download_click ( VikDEMLayer *vdl, GdkEventButton *event, VikViewport *vvp ); static VikToolInterface dem_tools[] = { { { "DEMDownload", "vik-icon-DEM Download", N_("_DEM Download"), NULL, N_("DEM Download"), 0 }, (VikToolConstructorFunc) dem_layer_download_create, NULL, NULL, NULL, (VikToolMouseFunc) dem_layer_download_click, NULL, (VikToolMouseFunc) dem_layer_download_release, (VikToolKeyFunc) NULL, FALSE, GDK_CURSOR_IS_PIXMAP, &cursor_demdl_pixbuf }, }; /* HEIGHT COLORS The first entry is blue for a default 'sea' colour, however the value used by the corresponding gc can be configured as part of the DEM layer properties. The other colours, shaded from brown to white are used to give an indication of height. */ static gchar *dem_height_colors[] = { "#0000FF", "#9b793c", "#9c7d40", "#9d8144", "#9e8549", "#9f894d", "#a08d51", "#a29156", "#a3955a", "#a4995e", "#a69d63", "#a89f65", "#aaa267", "#ada569", "#afa76b", "#b1aa6d", "#b4ad6f", "#b6b071", "#b9b373", "#bcb676", "#beb978", "#c0bc7a", "#c2c07d", "#c4c37f", "#c6c681", "#c8ca84", "#cacd86", "#ccd188", "#cfd58b", "#c2ce84", "#b5c87e", "#a9c278", "#9cbb71", "#8fb56b", "#83af65", "#76a95e", "#6aa358", "#5e9d52", "#63a055", "#69a458", "#6fa85c", "#74ac5f", "#7ab063", "#80b467", "#86b86a", "#8cbc6e", "#92c072", "#94c175", "#97c278", "#9ac47c", "#9cc57f", "#9fc682", "#a2c886", "#a4c989", "#a7cb8d", "#aacd91", "#afce99", "#b5d0a1", "#bbd2aa", "#c0d3b2", "#c6d5ba", "#ccd7c3", "#d1d9cb", "#d7dbd4", "#DDDDDD", "#e0e0e0", "#e4e4e4", "#e8e8e8", "#ebebeb", "#efefef", "#f3f3f3", "#f7f7f7", "#fbfbfb", "#ffffff" }; static const guint DEM_N_HEIGHT_COLORS = sizeof(dem_height_colors)/sizeof(dem_height_colors[0]); /* "#9b793c", "#9e8549", "#a29156", "#a69d63", "#ada569", "#b4ad6f", "#bcb676", "#c2c07d", "#c8ca84", "#cfd58b", "#a9c278", "#83af65", "#5e9d52", "#6fa85c", "#80b467", "#92c072", "#9ac47c", "#a2c886", "#aacd91", "#bbd2aa", "#ccd7c3", "#DDDDDD", "#e8e8e8", "#f3f3f3", "#FFFFFF" }; */ static gchar *dem_gradient_colors[] = { "#AAAAAA", "#000000", "#000011", "#000022", "#000033", "#000044", "#00004c", "#000055", "#00005d", "#000066", "#00006e", "#000077", "#00007f", "#000088", "#000090", "#000099", "#0000a1", "#0000aa", "#0000b2", "#0000bb", "#0000c3", "#0000cc", "#0000d4", "#0000dd", "#0000e5", "#0000ee", "#0000f6", "#0000ff", "#0008f7", "#0011ee", "#0019e6", "#0022dd", "#002ad5", "#0033cc", "#003bc4", "#0044bb", "#004cb3", "#0055aa", "#005da2", "#006699", "#006e91", "#007788", "#007f80", "#008877", "#00906f", "#009966", "#00a15e", "#00aa55", "#00b24d", "#00bb44", "#00c33c", "#00cc33", "#00d42b", "#00dd22", "#00e51a", "#00ee11", "#00f609", "#00ff00", "#08f700", "#11ee00", "#19e600", "#22dd00", "#2ad500", "#33cc00", "#3bc400", "#44bb00", "#4cb300", "#55aa00", "#5da200", "#669900", "#6e9100", "#778800", "#7f8000", "#887700", "#906f00", "#996600", "#a15e00", "#aa5500", "#b24d00", "#bb4400", "#c33c00", "#cc3300", "#d42b00", "#dd2200", "#e51a00", "#ee1100", "#f60900", "#ff0000", "#FFFFFF" }; static const guint DEM_N_GRADIENT_COLORS = sizeof(dem_gradient_colors)/sizeof(dem_gradient_colors[0]); VikLayerInterface vik_dem_layer_interface = { "DEM", N_("DEM"), "D", &vikdemlayer_pixbuf, dem_tools, sizeof(dem_tools) / sizeof(dem_tools[0]), dem_layer_params, NUM_PARAMS, NULL, 0, VIK_MENU_ITEM_ALL, (VikLayerFuncCreate) vik_dem_layer_create, (VikLayerFuncRealize) NULL, (VikLayerFuncPostRead) dem_layer_post_read, (VikLayerFuncFree) vik_dem_layer_free, (VikLayerFuncProperties) NULL, (VikLayerFuncDraw) vik_dem_layer_draw, (VikLayerFuncChangeCoordMode) NULL, (VikLayerFuncSetMenuItemsSelection) NULL, (VikLayerFuncGetMenuItemsSelection) NULL, (VikLayerFuncAddMenuItems) NULL, (VikLayerFuncSublayerAddMenuItems) NULL, (VikLayerFuncSublayerRenameRequest) NULL, (VikLayerFuncSublayerToggleVisible) NULL, (VikLayerFuncSublayerTooltip) NULL, (VikLayerFuncLayerTooltip) dem_layer_tooltip, (VikLayerFuncLayerSelected) NULL, (VikLayerFuncMarshall) dem_layer_marshall, (VikLayerFuncUnmarshall) dem_layer_unmarshall, (VikLayerFuncSetParam) dem_layer_set_param, (VikLayerFuncGetParam) dem_layer_get_param, (VikLayerFuncReadFileData) NULL, (VikLayerFuncWriteFileData) NULL, (VikLayerFuncDeleteItem) NULL, (VikLayerFuncCutItem) NULL, (VikLayerFuncCopyItem) NULL, (VikLayerFuncPasteItem) NULL, (VikLayerFuncFreeCopiedItem) NULL, (VikLayerFuncDragDropRequest) NULL, (VikLayerFuncSelectClick) NULL, (VikLayerFuncSelectMove) NULL, (VikLayerFuncSelectRelease) NULL, (VikLayerFuncSelectedViewportMenu) NULL, }; struct _VikDEMLayer { VikLayer vl; GdkGC **gcs; GdkGC **gcsgradient; GList *files; gdouble min_elev; gdouble max_elev; GdkGC *color; guint source; guint type; }; GType vik_dem_layer_get_type () { static GType vdl_type = 0; if (!vdl_type) { static const GTypeInfo vdl_info = { sizeof (VikDEMLayerClass), NULL, /* base_init */ NULL, /* base_finalize */ NULL, /* class init */ NULL, /* class_finalize */ NULL, /* class_data */ sizeof (VikDEMLayer), 0, NULL /* instance init */ }; vdl_type = g_type_register_static ( VIK_LAYER_TYPE, "VikDEMLayer", &vdl_info, 0 ); } return vdl_type; } static const gchar* dem_layer_tooltip( VikDEMLayer *vdl ) { static gchar tmp_buf[100]; g_snprintf (tmp_buf, sizeof(tmp_buf), _("Number of files: %d"), g_list_length (vdl->files)); return tmp_buf; } static void dem_layer_marshall( VikDEMLayer *vdl, guint8 **data, gint *len ) { vik_layer_marshall_params ( VIK_LAYER(vdl), data, len ); } static VikDEMLayer *dem_layer_unmarshall( guint8 *data, gint len, VikViewport *vvp ) { VikDEMLayer *rv = vik_dem_layer_new (); gint i; /* TODO: share GCS between layers */ for ( i = 0; i < DEM_N_HEIGHT_COLORS; i++ ) rv->gcs[i] = vik_viewport_new_gc ( vvp, dem_height_colors[i], UNUSED_LINE_THICKNESS ); for ( i = 0; i < DEM_N_GRADIENT_COLORS; i++ ) rv->gcsgradient[i] = vik_viewport_new_gc ( vvp, dem_gradient_colors[i], UNUSED_LINE_THICKNESS ); vik_layer_unmarshall_params ( VIK_LAYER(rv), data, len, vvp ); return rv; } /* Structure for DEM data used in background thread */ typedef struct { VikDEMLayer *vdl; } dem_load_thread_data; /* * Function for starting the DEM file loading as a background thread */ static int dem_layer_load_list_thread ( dem_load_thread_data *dltd, gpointer threaddata ) { int result = 0; // Default to good // Actual Load if ( a_dems_load_list ( &(dltd->vdl->files), threaddata ) ) { // Thread cancelled result = -1; } // ATM as each file is processed the screen is not updated (no mechanism exposed to a_dems_load_list) // Thus force draw only at the end, as loading is complete/aborted //gdk_threads_enter(); // Test is helpful to prevent Gtk-CRITICAL warnings if the program is exitted whilst loading if ( IS_VIK_LAYER(dltd->vdl) ) vik_layer_emit_update ( VIK_LAYER(dltd->vdl) ); // NB update from background thread //gdk_threads_leave(); return result; } static void dem_layer_thread_data_free ( dem_load_thread_data *data ) { // Simple release g_free ( data ); } static void dem_layer_thread_cancel ( dem_load_thread_data *data ) { // Abort loading // Instead of freeing the list, leave it as partially processed // Thus we can see/use what was done } gboolean dem_layer_set_param ( VikDEMLayer *vdl, guint16 id, VikLayerParamData data, VikViewport *vp, gboolean is_file_operation ) { switch ( id ) { case PARAM_COLOR: gdk_gc_set_rgb_fg_color ( vdl->gcs[0], &(data.c) ); break; case PARAM_SOURCE: vdl->source = data.u; break; case PARAM_TYPE: vdl->type = data.u; break; case PARAM_MIN_ELEV: /* Convert to store internally NB file operation always in internal units (metres) */ if (!is_file_operation && a_vik_get_units_height () == VIK_UNITS_HEIGHT_FEET ) vdl->min_elev = VIK_FEET_TO_METERS(data.d); else vdl->min_elev = data.d; break; case PARAM_MAX_ELEV: /* Convert to store internally NB file operation always in internal units (metres) */ if (!is_file_operation && a_vik_get_units_height () == VIK_UNITS_HEIGHT_FEET ) vdl->max_elev = VIK_FEET_TO_METERS(data.d); else vdl->max_elev = data.d; break; case PARAM_FILES: { // Clear out old settings - if any commonalities with new settings they will have to be read again a_dems_list_free ( vdl->files ); // Set file list so any other intermediate screen drawing updates will show currently loaded DEMs by the working thread vdl->files = data.sl; // No need for thread if no files if ( vdl->files ) { // Thread Load dem_load_thread_data *dltd = g_malloc ( sizeof(dem_load_thread_data) ); dltd->vdl = vdl; dltd->vdl->files = data.sl; a_background_thread ( VIK_GTK_WINDOW_FROM_WIDGET(vp), _("DEM Loading"), (vik_thr_func) dem_layer_load_list_thread, dltd, (vik_thr_free_func) dem_layer_thread_data_free, (vik_thr_free_func) dem_layer_thread_cancel, g_list_length ( data.sl ) ); // Number of DEM files } break; } } return TRUE; } static VikLayerParamData dem_layer_get_param ( VikDEMLayer *vdl, guint16 id, gboolean is_file_operation ) { VikLayerParamData rv; switch ( id ) { case PARAM_FILES: rv.sl = vdl->files; break; case PARAM_SOURCE: rv.u = vdl->source; break; case PARAM_TYPE: rv.u = vdl->type; break; case PARAM_COLOR: vik_gc_get_fg_color ( vdl->gcs[0], &(rv.c) ); break; case PARAM_MIN_ELEV: /* Convert for display in desired units NB file operation always in internal units (metres) */ if (!is_file_operation && a_vik_get_units_height () == VIK_UNITS_HEIGHT_FEET ) rv.d = VIK_METERS_TO_FEET(vdl->min_elev); else rv.d = vdl->min_elev; break; case PARAM_MAX_ELEV: /* Convert for display in desired units NB file operation always in internal units (metres) */ if (!is_file_operation && a_vik_get_units_height () == VIK_UNITS_HEIGHT_FEET ) rv.d = VIK_METERS_TO_FEET(vdl->max_elev); else rv.d = vdl->max_elev; break; } return rv; } static void dem_layer_post_read ( VikLayer *vl, VikViewport *vp, gboolean from_file ) { /* nothing ATM, but keep in case it's needed the future */ } VikDEMLayer *vik_dem_layer_new ( ) { VikDEMLayer *vdl = VIK_DEM_LAYER ( g_object_new ( VIK_DEM_LAYER_TYPE, NULL ) ); vik_layer_set_type ( VIK_LAYER(vdl), VIK_LAYER_DEM ); vdl->files = NULL; vdl->gcs = g_malloc(sizeof(GdkGC *)*DEM_N_HEIGHT_COLORS); vdl->gcsgradient = g_malloc(sizeof(GdkGC *)*DEM_N_GRADIENT_COLORS); /* make new gcs only if we need it (copy layer -> use old) */ vdl->min_elev = 0.0; vdl->max_elev = 1000.0; vdl->source = DEM_SOURCE_SRTM; vdl->type = DEM_TYPE_HEIGHT; return vdl; } static inline guint16 get_height_difference(gint16 elev, gint16 new_elev) { if(new_elev == VIK_DEM_INVALID_ELEVATION) return 0; else return abs(new_elev - elev); } static void vik_dem_layer_draw_dem ( VikDEMLayer *vdl, VikViewport *vp, VikDEM *dem ) { VikDEMColumn *column, *prevcolumn, *nextcolumn; struct LatLon dem_northeast, dem_southwest; gdouble max_lat, max_lon, min_lat, min_lon; /**** Check if viewport and DEM data overlap ****/ /* get min, max lat/lon of viewport */ vik_viewport_get_min_max_lat_lon ( vp, &min_lat, &max_lat, &min_lon, &max_lon ); /* get min, max lat/lon of DEM data */ if ( dem->horiz_units == VIK_DEM_HORIZ_LL_ARCSECONDS ) { dem_northeast.lat = dem->max_north / 3600.0; dem_northeast.lon = dem->max_east / 3600.0; dem_southwest.lat = dem->min_north / 3600.0; dem_southwest.lon = dem->min_east / 3600.0; } else if ( dem->horiz_units == VIK_DEM_HORIZ_UTM_METERS ) { struct UTM dem_northeast_utm, dem_southwest_utm; dem_northeast_utm.northing = dem->max_north; dem_northeast_utm.easting = dem->max_east; dem_southwest_utm.northing = dem->min_north; dem_southwest_utm.easting = dem->min_east; dem_northeast_utm.zone = dem_southwest_utm.zone = dem->utm_zone; dem_northeast_utm.letter = dem_southwest_utm.letter = dem->utm_letter; a_coords_utm_to_latlon(&dem_northeast_utm, &dem_northeast); a_coords_utm_to_latlon(&dem_southwest_utm, &dem_southwest); } if ( (max_lat > dem_northeast.lat && min_lat > dem_northeast.lat) || (max_lat < dem_southwest.lat && min_lat < dem_southwest.lat) ) return; else if ( (max_lon > dem_northeast.lon && min_lon > dem_northeast.lon) || (max_lon < dem_southwest.lon && min_lon < dem_southwest.lon) ) return; /* else they overlap */ /**** End Overlap Check ****/ /* boxes to show where we have DEM instead of actually drawing the DEM. * useful if we want to see what areas we have coverage for (if we want * to get elevation data for a track) but don't want to cover the map. */ #if 0 /* draw a box if a DEM is loaded. in future I'd like to add an option for this * this is useful if we want to see what areas we have dem for but don't want to * cover the map (or maybe we just need translucent DEM?) */ { VikCoord demne, demsw; gint x1, y1, x2, y2; vik_coord_load_from_latlon(&demne, vik_viewport_get_coord_mode(vp), &dem_northeast); vik_coord_load_from_latlon(&demsw, vik_viewport_get_coord_mode(vp), &dem_southwest); vik_viewport_coord_to_screen ( vp, &demne, &x1, &y1 ); vik_viewport_coord_to_screen ( vp, &demsw, &x2, &y2 ); if ( x1 > vik_viewport_get_width(vp) ) x1=vik_viewport_get_width(vp); if ( y2 > vik_viewport_get_height(vp) ) y2=vik_viewport_get_height(vp); if ( x2 < 0 ) x2 = 0; if ( y1 < 0 ) y1 = 0; vik_viewport_draw_rectangle ( vp, GTK_WIDGET(vp)->style->black_gc, FALSE, x2, y1, x1-x2, y2-y1 ); return; } #endif if ( dem->horiz_units == VIK_DEM_HORIZ_LL_ARCSECONDS ) { VikCoord tmp; /* TODO: don't use coord_load_from_latlon, especially if in latlon drawing mode */ gdouble max_lat_as, max_lon_as, min_lat_as, min_lon_as; gdouble start_lat_as, end_lat_as, start_lon_as, end_lon_as; gdouble start_lat, end_lat, start_lon, end_lon; struct LatLon counter; guint x, y, start_x, start_y; gint16 elev; guint skip_factor = ceil ( vik_viewport_get_xmpp(vp) / 80 ); /* todo: smarter calculation. */ gdouble nscale_deg = dem->north_scale / ((gdouble) 3600); gdouble escale_deg = dem->east_scale / ((gdouble) 3600); max_lat_as = max_lat * 3600; min_lat_as = min_lat * 3600; max_lon_as = max_lon * 3600; min_lon_as = min_lon * 3600; start_lat_as = MAX(min_lat_as, dem->min_north); end_lat_as = MIN(max_lat_as, dem->max_north); start_lon_as = MAX(min_lon_as, dem->min_east); end_lon_as = MIN(max_lon_as, dem->max_east); start_lat = floor(start_lat_as / dem->north_scale) * nscale_deg; end_lat = ceil (end_lat_as / dem->north_scale) * nscale_deg; start_lon = floor(start_lon_as / dem->east_scale) * escale_deg; end_lon = ceil (end_lon_as / dem->east_scale) * escale_deg; vik_dem_east_north_to_xy ( dem, start_lon_as, start_lat_as, &start_x, &start_y ); guint gradient_skip_factor = 1; if(vdl->type == DEM_TYPE_GRADIENT) gradient_skip_factor = skip_factor; /* verify sane elev interval */ if ( vdl->max_elev <= vdl->min_elev ) vdl->max_elev = vdl->min_elev + 1; for ( x=start_x, counter.lon = start_lon; counter.lon <= end_lon+escale_deg*skip_factor; counter.lon += escale_deg * skip_factor, x += skip_factor ) { // NOTE: ( counter.lon <= end_lon + ESCALE_DEG*SKIP_FACTOR ) is neccessary so in high zoom modes, // the leftmost column does also get drawn, if the center point is out of viewport. if ( x < dem->n_columns ) { column = g_ptr_array_index ( dem->columns, x ); // get previous and next column. catch out-of-bound. gint32 new_x = x; new_x -= gradient_skip_factor; if(new_x < 1) prevcolumn = g_ptr_array_index ( dem->columns, x+1); else prevcolumn = g_ptr_array_index ( dem->columns, new_x); new_x = x; new_x += gradient_skip_factor; if(new_x >= dem->n_columns) nextcolumn = g_ptr_array_index ( dem->columns, x-1); else nextcolumn = g_ptr_array_index ( dem->columns, new_x); for ( y=start_y, counter.lat = start_lat; counter.lat <= end_lat; counter.lat += nscale_deg * skip_factor, y += skip_factor ) { if ( y > column->n_points ) break; elev = column->points[y]; // calculate bounding box for drawing gint box_x, box_y, box_width, box_height; struct LatLon box_c; box_c = counter; box_c.lat += (nscale_deg * skip_factor)/2; box_c.lon -= (escale_deg * skip_factor)/2; vik_coord_load_from_latlon(&tmp, vik_viewport_get_coord_mode(vp), &box_c); vik_viewport_coord_to_screen(vp, &tmp, &box_x, &box_y); // catch box at borders if(box_x < 0) box_x = 0; if(box_y < 0) box_y = 0; box_c.lat -= nscale_deg * skip_factor; box_c.lon += escale_deg * skip_factor; vik_coord_load_from_latlon(&tmp, vik_viewport_get_coord_mode(vp), &box_c); vik_viewport_coord_to_screen(vp, &tmp, &box_width, &box_height); box_width -= box_x; box_height -= box_y; // catch box at borders if(box_width < 0 || box_height < 0) continue; // skip this. this is out of our viewport anyway. FIXME: why? gboolean below_minimum = FALSE; if(vdl->type == DEM_TYPE_HEIGHT) { if ( elev != VIK_DEM_INVALID_ELEVATION && elev < vdl->min_elev ) { // Prevent 'elev - vdl->min_elev' from being negative so can safely use as array index elev = ceil ( vdl->min_elev ); below_minimum = TRUE; } if ( elev != VIK_DEM_INVALID_ELEVATION && elev > vdl->max_elev ) elev = vdl->max_elev; } { if(box_width < 0 || box_height < 0) // FIXME: why does this happen? continue; if(vdl->type == DEM_TYPE_GRADIENT) { if( elev == VIK_DEM_INVALID_ELEVATION ) { /* don't draw it */ } else { // calculate and sum gradient in all directions gint16 change = 0; gint32 new_y; // calculate gradient from height points all around the current one new_y = y - gradient_skip_factor; if(new_y < 0) new_y = y; change += get_height_difference(elev, prevcolumn->points[new_y]); change += get_height_difference(elev, column->points[new_y]); change += get_height_difference(elev, nextcolumn->points[new_y]); change += get_height_difference(elev, prevcolumn->points[y]); change += get_height_difference(elev, nextcolumn->points[y]); new_y = y + gradient_skip_factor; if(new_y >= column->n_points) new_y = y; change += get_height_difference(elev, prevcolumn->points[new_y]); change += get_height_difference(elev, column->points[new_y]); change += get_height_difference(elev, nextcolumn->points[new_y]); change = change / ((skip_factor > 1) ? log(skip_factor) : 0.55); // FIXME: better calc. if(change < vdl->min_elev) // Prevent 'change - vdl->min_elev' from being negative so can safely use as array index change = ceil ( vdl->min_elev ); if(change > vdl->max_elev) change = vdl->max_elev; // void vik_viewport_draw_rectangle ( VikViewport *vvp, GdkGC *gc, gboolean filled, gint x1, gint y1, gint x2, gint y2 ); vik_viewport_draw_rectangle(vp, vdl->gcsgradient[(gint)floor(((change - vdl->min_elev)/(vdl->max_elev - vdl->min_elev))*(DEM_N_GRADIENT_COLORS-2))+1], TRUE, box_x, box_y, box_width, box_height); } } else { if(vdl->type == DEM_TYPE_HEIGHT) { if ( elev == VIK_DEM_INVALID_ELEVATION ) ; /* don't draw it */ else if ( elev <= 0 || below_minimum ) /* If 'sea' colour or below the defined mininum draw in the configurable colour */ vik_viewport_draw_rectangle(vp, vdl->gcs[0], TRUE, box_x, box_y, box_width, box_height); else vik_viewport_draw_rectangle(vp, vdl->gcs[(gint)floor(((elev - vdl->min_elev)/(vdl->max_elev - vdl->min_elev))*(DEM_N_HEIGHT_COLORS-2))+1], TRUE, box_x, box_y, box_width, box_height); } } } } /* for y= */ } } /* for x= */ } else if ( dem->horiz_units == VIK_DEM_HORIZ_UTM_METERS ) { gdouble max_nor, max_eas, min_nor, min_eas; gdouble start_nor, start_eas, end_nor, end_eas; gint16 elev; guint x, y, start_x, start_y; VikCoord tmp; /* TODO: don't use coord_load_from_latlon, especially if in latlon drawing mode */ struct UTM counter; guint skip_factor = ceil ( vik_viewport_get_xmpp(vp) / 10 ); /* todo: smarter calculation. */ VikCoord tleft, tright, bleft, bright; vik_viewport_screen_to_coord ( vp, 0, 0, &tleft ); vik_viewport_screen_to_coord ( vp, vik_viewport_get_width(vp), 0, &tright ); vik_viewport_screen_to_coord ( vp, 0, vik_viewport_get_height(vp), &bleft ); vik_viewport_screen_to_coord ( vp, vik_viewport_get_width(vp), vik_viewport_get_height(vp), &bright ); vik_coord_convert(&tleft, VIK_COORD_UTM); vik_coord_convert(&tright, VIK_COORD_UTM); vik_coord_convert(&bleft, VIK_COORD_UTM); vik_coord_convert(&bright, VIK_COORD_UTM); max_nor = MAX(tleft.north_south, tright.north_south); min_nor = MIN(bleft.north_south, bright.north_south); max_eas = MAX(bright.east_west, tright.east_west); min_eas = MIN(bleft.east_west, tleft.east_west); start_nor = MAX(min_nor, dem->min_north); end_nor = MIN(max_nor, dem->max_north); if ( tleft.utm_zone == dem->utm_zone && bleft.utm_zone == dem->utm_zone && (tleft.utm_letter >= 'N') == (dem->utm_letter >= 'N') && (bleft.utm_letter >= 'N') == (dem->utm_letter >= 'N') ) /* if the utm zones/hemispheres are different, min_eas will be bogus */ start_eas = MAX(min_eas, dem->min_east); else start_eas = dem->min_east; if ( tright.utm_zone == dem->utm_zone && bright.utm_zone == dem->utm_zone && (tright.utm_letter >= 'N') == (dem->utm_letter >= 'N') && (bright.utm_letter >= 'N') == (dem->utm_letter >= 'N') ) /* if the utm zones/hemispheres are different, min_eas will be bogus */ end_eas = MIN(max_eas, dem->max_east); else end_eas = dem->max_east; start_nor = floor(start_nor / dem->north_scale) * dem->north_scale; end_nor = ceil (end_nor / dem->north_scale) * dem->north_scale; start_eas = floor(start_eas / dem->east_scale) * dem->east_scale; end_eas = ceil (end_eas / dem->east_scale) * dem->east_scale; vik_dem_east_north_to_xy ( dem, start_eas, start_nor, &start_x, &start_y ); /* TODO: why start_x and start_y are -1 -- rounding error from above? */ counter.zone = dem->utm_zone; counter.letter = dem->utm_letter; for ( x=start_x, counter.easting = start_eas; counter.easting <= end_eas; counter.easting += dem->east_scale * skip_factor, x += skip_factor ) { if ( x > 0 && x < dem->n_columns ) { column = g_ptr_array_index ( dem->columns, x ); for ( y=start_y, counter.northing = start_nor; counter.northing <= end_nor; counter.northing += dem->north_scale * skip_factor, y += skip_factor ) { if ( y > column->n_points ) continue; elev = column->points[y]; if ( elev != VIK_DEM_INVALID_ELEVATION && elev < vdl->min_elev ) elev=vdl->min_elev; if ( elev != VIK_DEM_INVALID_ELEVATION && elev > vdl->max_elev ) elev=vdl->max_elev; { gint a, b; vik_coord_load_from_utm(&tmp, vik_viewport_get_coord_mode(vp), &counter); vik_viewport_coord_to_screen(vp, &tmp, &a, &b); if ( elev == VIK_DEM_INVALID_ELEVATION ) ; /* don't draw it */ else if ( elev <= 0 ) vik_viewport_draw_rectangle(vp, vdl->gcs[0], TRUE, a-1, b-1, 2, 2 ); else vik_viewport_draw_rectangle(vp, vdl->gcs[(gint)floor((elev - vdl->min_elev)/(vdl->max_elev - vdl->min_elev)*(DEM_N_HEIGHT_COLORS-2))+1], TRUE, a-1, b-1, 2, 2 ); } } /* for y= */ } } /* for x= */ } } /* return the continent for the specified lat, lon */ /* TODO */ static const gchar *srtm_continent_dir ( gint lat, gint lon ) { extern const char *_srtm_continent_data[]; static GHashTable *srtm_continent = NULL; const gchar *continent; gchar name[16]; if (!srtm_continent) { const gchar **s; srtm_continent = g_hash_table_new(g_str_hash, g_str_equal); s = _srtm_continent_data; while (*s != (gchar *)-1) { continent = *s++; while (*s) { g_hash_table_insert(srtm_continent, (gpointer) *s, (gpointer) continent); s++; } s++; } } g_snprintf(name, sizeof(name), "%c%02d%c%03d", (lat >= 0) ? 'N' : 'S', ABS(lat), (lon >= 0) ? 'E' : 'W', ABS(lon)); return(g_hash_table_lookup(srtm_continent, name)); } void vik_dem_layer_draw ( VikDEMLayer *vdl, gpointer data ) { VikViewport *vp = (VikViewport *) data; GList *dems_iter = vdl->files; VikDEM *dem; /* search for SRTM3 90m */ if ( vdl->source == DEM_SOURCE_SRTM ) srtm_draw_existence ( vp ); #ifdef VIK_CONFIG_DEM24K else if ( vdl->source == DEM_SOURCE_DEM24K ) dem24k_draw_existence ( vp ); #endif while ( dems_iter ) { dem = a_dems_get ( (const char *) (dems_iter->data) ); if ( dem ) vik_dem_layer_draw_dem ( vdl, vp, dem ); dems_iter = dems_iter->next; } } void vik_dem_layer_free ( VikDEMLayer *vdl ) { gint i; if ( vdl->color != NULL ) g_object_unref ( vdl->color ); if ( vdl->gcs ) for ( i = 0; i < DEM_N_HEIGHT_COLORS; i++ ) g_object_unref ( vdl->gcs[i] ); g_free ( vdl->gcs ); if ( vdl->gcsgradient ) for ( i = 0; i < DEM_N_GRADIENT_COLORS; i++ ) g_object_unref ( vdl->gcsgradient[i] ); g_free ( vdl->gcsgradient ); a_dems_list_free ( vdl->files ); } VikDEMLayer *vik_dem_layer_create ( VikViewport *vp ) { VikDEMLayer *vdl = vik_dem_layer_new (); gint i; /* TODO: share GCS between layers */ for ( i = 0; i < DEM_N_HEIGHT_COLORS; i++ ) vdl->gcs[i] = vik_viewport_new_gc ( vp, dem_height_colors[i], UNUSED_LINE_THICKNESS ); for ( i = 0; i < DEM_N_GRADIENT_COLORS; i++ ) vdl->gcsgradient[i] = vik_viewport_new_gc ( vp, dem_gradient_colors[i], UNUSED_LINE_THICKNESS ); return vdl; } /************************************************************** **** SOURCES & DOWNLOADING **************************************************************/ typedef struct { gchar *dest; gdouble lat, lon; GMutex *mutex; VikDEMLayer *vdl; /* NULL if not alive */ guint source; } DEMDownloadParams; /************************************************** * SOURCE: SRTM * **************************************************/ static void srtm_dem_download_thread ( DEMDownloadParams *p, gpointer threaddata ) { gint intlat, intlon; const gchar *continent_dir; intlat = (int)floor(p->lat); intlon = (int)floor(p->lon); continent_dir = srtm_continent_dir(intlat, intlon); if (!continent_dir) { g_warning(N_("No SRTM data available for %f, %f"), p->lat, p->lon); return; } gchar *src_fn = g_strdup_printf("%s%s/%c%02d%c%03d.hgt.zip", SRTM_HTTP_URI, continent_dir, (intlat >= 0) ? 'N' : 'S', ABS(intlat), (intlon >= 0) ? 'E' : 'W', ABS(intlon) ); static DownloadMapOptions options = { FALSE, FALSE, NULL, 0, a_check_map_file }; a_http_download_get_url ( SRTM_HTTP_SITE, src_fn, p->dest, &options, NULL ); g_free ( src_fn ); } static gchar *srtm_lat_lon_to_dest_fn ( gdouble lat, gdouble lon ) { gint intlat, intlon; const gchar *continent_dir; intlat = (int)floor(lat); intlon = (int)floor(lon); continent_dir = srtm_continent_dir(intlat, intlon); if (!continent_dir) continent_dir = "nowhere"; return g_strdup_printf("srtm3-%s%s%c%02d%c%03d.hgt.zip", continent_dir, G_DIR_SEPARATOR_S, (intlat >= 0) ? 'N' : 'S', ABS(intlat), (intlon >= 0) ? 'E' : 'W', ABS(intlon) ); } /* TODO: generalize */ static void srtm_draw_existence ( VikViewport *vp ) { gdouble max_lat, max_lon, min_lat, min_lon; gchar buf[strlen(MAPS_CACHE_DIR)+strlen(SRTM_CACHE_TEMPLATE)+30]; gint i, j; vik_viewport_get_min_max_lat_lon ( vp, &min_lat, &max_lat, &min_lon, &max_lon ); for (i = floor(min_lat); i <= floor(max_lat); i++) { for (j = floor(min_lon); j <= floor(max_lon); j++) { const gchar *continent_dir; if ((continent_dir = srtm_continent_dir(i, j)) == NULL) continue; g_snprintf(buf, sizeof(buf), SRTM_CACHE_TEMPLATE, MAPS_CACHE_DIR, continent_dir, G_DIR_SEPARATOR_S, (i >= 0) ? 'N' : 'S', ABS(i), (j >= 0) ? 'E' : 'W', ABS(j) ); if ( g_file_test(buf, G_FILE_TEST_EXISTS ) == TRUE ) { VikCoord ne, sw; gint x1, y1, x2, y2; sw.north_south = i; sw.east_west = j; sw.mode = VIK_COORD_LATLON; ne.north_south = i+1; ne.east_west = j+1; ne.mode = VIK_COORD_LATLON; vik_viewport_coord_to_screen ( vp, &sw, &x1, &y1 ); vik_viewport_coord_to_screen ( vp, &ne, &x2, &y2 ); if ( x1 < 0 ) x1 = 0; if ( y2 < 0 ) y2 = 0; vik_viewport_draw_rectangle ( vp, GTK_WIDGET(vp)->style->black_gc, FALSE, x1, y2, x2-x1, y1-y2 ); } } } } /************************************************** * SOURCE: USGS 24K * **************************************************/ #ifdef VIK_CONFIG_DEM24K static void dem24k_dem_download_thread ( DEMDownloadParams *p, gpointer threaddata ) { /* TODO: dest dir */ gchar *cmdline = g_strdup_printf("%s %.03f %.03f", DEM24K_DOWNLOAD_SCRIPT, floor(p->lat*8)/8, ceil(p->lon*8)/8 ); /* FIX: don't use system, use execv or something. check for existence */ system(cmdline); g_free ( cmdline ); } static gchar *dem24k_lat_lon_to_dest_fn ( gdouble lat, gdouble lon ) { return g_strdup_printf("dem24k/%d/%d/%.03f,%.03f.dem", (gint) lat, (gint) lon, floor(lat*8)/8, ceil(lon*8)/8); } /* TODO: generalize */ static void dem24k_draw_existence ( VikViewport *vp ) { gdouble max_lat, max_lon, min_lat, min_lon; gchar buf[strlen(MAPS_CACHE_DIR)+40]; gdouble i, j; vik_viewport_get_min_max_lat_lon ( vp, &min_lat, &max_lat, &min_lon, &max_lon ); for (i = floor(min_lat*8)/8; i <= floor(max_lat*8)/8; i+=0.125) { /* check lat dir first -- faster */ g_snprintf(buf, sizeof(buf), "%sdem24k/%d/", MAPS_CACHE_DIR, (gint) i ); if ( g_file_test(buf, G_FILE_TEST_EXISTS) == FALSE ) continue; for (j = floor(min_lon*8)/8; j <= floor(max_lon*8)/8; j+=0.125) { /* check lon dir first -- faster */ g_snprintf(buf, sizeof(buf), "%sdem24k/%d/%d/", MAPS_CACHE_DIR, (gint) i, (gint) j ); if ( g_file_test(buf, G_FILE_TEST_EXISTS) == FALSE ) continue; g_snprintf(buf, sizeof(buf), "%sdem24k/%d/%d/%.03f,%.03f.dem", MAPS_CACHE_DIR, (gint) i, (gint) j, floor(i*8)/8, floor(j*8)/8 ); if ( g_file_test(buf, G_FILE_TEST_EXISTS ) == TRUE ) { VikCoord ne, sw; gint x1, y1, x2, y2; sw.north_south = i; sw.east_west = j-0.125; sw.mode = VIK_COORD_LATLON; ne.north_south = i+0.125; ne.east_west = j; ne.mode = VIK_COORD_LATLON; vik_viewport_coord_to_screen ( vp, &sw, &x1, &y1 ); vik_viewport_coord_to_screen ( vp, &ne, &x2, &y2 ); if ( x1 < 0 ) x1 = 0; if ( y2 < 0 ) y2 = 0; vik_viewport_draw_rectangle ( vp, GTK_WIDGET(vp)->style->black_gc, FALSE, x1, y2, x2-x1, y1-y2 ); } } } } #endif /************************************************** * SOURCES -- DOWNLOADING & IMPORTING TOOL * ************************************************** */ static void weak_ref_cb ( gpointer ptr, GObject * dead_vdl ) { DEMDownloadParams *p = ptr; g_mutex_lock ( p->mutex ); p->vdl = NULL; g_mutex_unlock ( p->mutex ); } /* Try to add file full_path. * full_path will be copied. * returns FALSE if file does not exists, TRUE otherwise. */ static gboolean dem_layer_add_file ( VikDEMLayer *vdl, const gchar *full_path ) { if ( g_file_test(full_path, G_FILE_TEST_EXISTS ) == TRUE ) { /* only load if file size is not 0 (not in progress) */ struct stat sb; stat (full_path, &sb); if ( sb.st_size ) { gchar *duped_path = g_strdup(full_path); vdl->files = g_list_prepend ( vdl->files, duped_path ); a_dems_load ( duped_path ); g_debug("%s: %s", __FUNCTION__, duped_path); } return TRUE; } else return FALSE; } static void dem_download_thread ( DEMDownloadParams *p, gpointer threaddata ) { if ( p->source == DEM_SOURCE_SRTM ) srtm_dem_download_thread ( p, threaddata ); #ifdef VIK_CONFIG_DEM24K else if ( p->source == DEM_SOURCE_DEM24K ) dem24k_dem_download_thread ( p, threaddata ); #endif else return; //gdk_threads_enter(); g_mutex_lock ( p->mutex ); if ( p->vdl ) { g_object_weak_unref ( G_OBJECT(p->vdl), weak_ref_cb, p ); if ( dem_layer_add_file ( p->vdl, p->dest ) ) vik_layer_emit_update ( VIK_LAYER(p->vdl) ); // NB update from background thread } g_mutex_unlock ( p->mutex ); //gdk_threads_leave(); } static void free_dem_download_params ( DEMDownloadParams *p ) { g_mutex_free ( p->mutex ); g_free ( p->dest ); g_free ( p ); } static gpointer dem_layer_download_create ( VikWindow *vw, VikViewport *vvp) { return vvp; } static gboolean dem_layer_download_release ( VikDEMLayer *vdl, GdkEventButton *event, VikViewport *vvp ) { VikCoord coord; struct LatLon ll; gchar *full_path; gchar *dem_file = NULL; vik_viewport_screen_to_coord ( vvp, event->x, event->y, &coord ); vik_coord_to_latlon ( &coord, &ll ); if ( vdl->source == DEM_SOURCE_SRTM ) dem_file = srtm_lat_lon_to_dest_fn ( ll.lat, ll.lon ); #ifdef VIK_CONFIG_DEM24K else if ( vdl->source == DEM_SOURCE_DEM24K ) dem_file = dem24k_lat_lon_to_dest_fn ( ll.lat, ll.lon ); #endif if ( ! dem_file ) return TRUE; full_path = g_strdup_printf("%s%s", MAPS_CACHE_DIR, dem_file ); g_debug("%s: %s", __FUNCTION__, full_path); // TODO: check if already in filelist if ( ! dem_layer_add_file(vdl, full_path) ) { gchar *tmp = g_strdup_printf ( _("Downloading DEM %s"), dem_file ); DEMDownloadParams *p = g_malloc(sizeof(DEMDownloadParams)); p->dest = g_strdup(full_path); p->lat = ll.lat; p->lon = ll.lon; p->vdl = vdl; p->mutex = g_mutex_new(); p->source = vdl->source; g_object_weak_ref(G_OBJECT(p->vdl), weak_ref_cb, p ); a_background_thread ( VIK_GTK_WINDOW_FROM_LAYER(vdl), tmp, (vik_thr_func) dem_download_thread, p, (vik_thr_free_func) free_dem_download_params, NULL, 1 ); g_free ( tmp ); } else vik_layer_emit_update ( VIK_LAYER(vdl) ); g_free ( dem_file ); g_free ( full_path ); return TRUE; } static gboolean dem_layer_download_click ( VikDEMLayer *vdl, GdkEventButton *event, VikViewport *vvp ) { /* choose & keep track of cache dir * download in background thread * download over area */ return TRUE; } viking-1.4.2/src/vikcoord.c0000644000175000017500000001225712120725153012506 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include "coords.h" #include "vikcoord.h" /* all coord operations MUST BE ABSTRACTED!!! */ void vik_coord_convert(VikCoord *coord, VikCoordMode dest_mode) { VikCoord tmp; if ( coord->mode != dest_mode ) { if ( dest_mode == VIK_COORD_LATLON ) { a_coords_utm_to_latlon ( (struct UTM *)coord, (struct LatLon *)&tmp ); *((struct LatLon *)coord) = *((struct LatLon *)&tmp); } else { a_coords_latlon_to_utm ( (struct LatLon *)coord, (struct UTM *)&tmp ); *((struct UTM *)coord) = *((struct UTM *)&tmp); } coord->mode = dest_mode; } } void vik_coord_copy_convert(const VikCoord *coord, VikCoordMode dest_mode, VikCoord *dest) { if ( coord->mode == dest_mode ) { *dest = *coord; } else { if ( dest_mode == VIK_COORD_LATLON ) a_coords_utm_to_latlon ( (struct UTM *)coord, (struct LatLon *)dest ); else a_coords_latlon_to_utm ( (struct LatLon *)coord, (struct UTM *)dest ); dest->mode = dest_mode; } } static gdouble vik_coord_diff_safe(const VikCoord *c1, const VikCoord *c2) { struct LatLon a, b; vik_coord_to_latlon ( c1, &a ); vik_coord_to_latlon ( c2, &b ); return a_coords_latlon_diff ( &a, &b ); } gdouble vik_coord_diff(const VikCoord *c1, const VikCoord *c2) { if ( c1->mode == c2->mode ) return vik_coord_diff_safe ( c1, c2 ); if ( c1->mode == VIK_COORD_UTM ) return a_coords_utm_diff ( (const struct UTM *) c1, (const struct UTM *) c2 ); else return a_coords_latlon_diff ( (const struct LatLon *) c1, (const struct LatLon *) c2 ); } void vik_coord_load_from_latlon ( VikCoord *coord, VikCoordMode mode, const struct LatLon *ll ) { if ( mode == VIK_COORD_LATLON ) *((struct LatLon *)coord) = *ll; else a_coords_latlon_to_utm ( ll, (struct UTM *) coord ); coord->mode = mode; } void vik_coord_load_from_utm ( VikCoord *coord, VikCoordMode mode, const struct UTM *utm ) { if ( mode == VIK_COORD_UTM ) *((struct UTM *)coord) = *utm; else a_coords_utm_to_latlon ( utm, (struct LatLon *) coord ); coord->mode = mode; } void vik_coord_to_latlon ( const VikCoord *coord, struct LatLon *dest ) { if ( coord->mode == VIK_COORD_LATLON ) *dest = *((const struct LatLon *)coord); else a_coords_utm_to_latlon ( (const struct UTM *) coord, dest ); } void vik_coord_to_utm ( const VikCoord *coord, struct UTM *dest ) { if ( coord->mode == VIK_COORD_UTM ) *dest = *((const struct UTM *)coord); else a_coords_latlon_to_utm ( (const struct LatLon *) coord, dest ); } gboolean vik_coord_equals ( const VikCoord *coord1, const VikCoord *coord2 ) { if ( coord1->mode != coord2->mode ) return FALSE; if ( coord1->mode == VIK_COORD_LATLON ) return coord1->north_south == coord2->north_south && coord1->east_west == coord2->east_west; else /* VIK_COORD_UTM */ return coord1->utm_zone == coord2->utm_zone && coord1->north_south == coord2->north_south && coord1->east_west == coord2->east_west; } static void get_north_west(struct LatLon *center, struct LatLon *dist, struct LatLon *nw) { nw->lat = center->lat + dist->lat; nw->lon = center->lon - dist->lon; if (nw->lon < -180) nw->lon += 360.0; if (nw->lat > 90.0) { /* over north pole */ nw->lat = 180 - nw->lat; nw->lon = nw->lon - 180; } } static void get_south_east(struct LatLon *center, struct LatLon *dist, struct LatLon *se) { se->lat = center->lat - dist->lat; se->lon = center->lon + dist->lon; if (se->lon > 180.0) se->lon -= 360.0; if (se->lat < -90.0) { /* over south pole */ se->lat += 180; se->lon = se->lon - 180; } } void vik_coord_set_area(const VikCoord *coord, const struct LatLon *wh, VikCoord *tl, VikCoord *br) { struct LatLon center, nw, se; struct LatLon dist; dist.lat = wh->lat/2; dist.lon = wh->lon/2; vik_coord_to_latlon(coord, ¢er); get_north_west(¢er, &dist, &nw); get_south_east(¢er, &dist, &se); *((struct LatLon *)tl) = nw; *((struct LatLon *)br) = se; tl->mode = br->mode = VIK_COORD_LATLON; } gboolean vik_coord_inside(const VikCoord *coord, const VikCoord *tl, const VikCoord *br) { struct LatLon ll, tl_ll, br_ll; vik_coord_to_latlon(coord, &ll); vik_coord_to_latlon(tl, &tl_ll); vik_coord_to_latlon(br, &br_ll); if ((ll.lat > tl_ll.lat) || (ll.lon < tl_ll.lon)) return FALSE; if ((ll.lat < br_ll.lat) || (ll.lon > br_ll.lon)) return FALSE; return TRUE; } viking-1.4.2/src/vikenumtypes.c0000644000175000017500000000145712175546630013444 00000000000000 /* Generated data (by glib-mkenums) */ #include "vikenumtypes.h" /* enumerations from "vikviewport.h" */ #include "vikviewport.h" GType vik_viewport_draw_mode_get_type (void) { static GType the_type = 0; if (the_type == 0) { static const GEnumValue values[] = { { VIK_VIEWPORT_DRAWMODE_UTM, "VIK_VIEWPORT_DRAWMODE_UTM", "utm" }, { VIK_VIEWPORT_DRAWMODE_EXPEDIA, "VIK_VIEWPORT_DRAWMODE_EXPEDIA", "expedia" }, { VIK_VIEWPORT_DRAWMODE_MERCATOR, "VIK_VIEWPORT_DRAWMODE_MERCATOR", "mercator" }, { VIK_VIEWPORT_DRAWMODE_LATLON, "VIK_VIEWPORT_DRAWMODE_LATLON", "latlon" }, { 0, NULL, NULL } }; the_type = g_enum_register_static ( g_intern_static_string ("VikViewportDrawMode"), values); } return the_type; } /* Generated data ends here */ viking-1.4.2/src/vikfileentry.h0000644000175000017500000000356012175546146013420 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef _VIKING_FILEENTRY_H #define _VIKING_FILEENTRY_H #include #include #include G_BEGIN_DECLS #define VIK_FILE_ENTRY_TYPE (vik_file_entry_get_type ()) #define VIK_FILE_ENTRY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIK_FILE_ENTRY_TYPE, VikFileEntry)) #define VIK_FILE_ENTRY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VIK_FILE_ENTRY_TYPE, VikFileEntryClass)) #define IS_VIK_FILE_ENTRY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIK_FILE_ENTRY_TYPE)) #define IS_VIK_FILE_ENTRY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VIK_FILE_ENTRY_TYPE)) typedef struct _VikFileEntry VikFileEntry; typedef struct _VikFileEntryClass VikFileEntryClass; struct _VikFileEntryClass { GtkHBoxClass hbox_class; }; GType vik_file_entry_get_type (); GtkWidget *vik_file_entry_new (GtkFileChooserAction action); G_CONST_RETURN gchar *vik_file_entry_get_filename ( VikFileEntry *vfe ); void vik_file_entry_set_filename ( VikFileEntry *vfe, const gchar *filename ); G_END_DECLS #endif viking-1.4.2/src/authors.h0000644000175000017500000000106112175546630012362 00000000000000/* Generated file. */ const gchar *AUTHORS[] = {\ "Author:",\ "Evan Battaglia ",\ "",\ "Contributors:",\ "Alex Foobarian ",\ "Bernd Zeimetz ",\ "Guilhem Bonnefille ",\ "Jocelyn Jaubert ",\ "Mark Coulter ",\ "Mathieu Albinet ",\ "Quy Tonthat ",\ "Robert Norris ",\ "",\ "Few other bugfixes/minor patches from various contributors. See ChangeLog for details.", NULL}; viking-1.4.2/src/vikexttools.c0000644000175000017500000000524712175546146013277 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2008, Guilhem Bonnefille * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "vikexttools.h" #include #include #define VIK_TOOL_DATA_KEY "vik-tool-data" static GList *ext_tools_list = NULL; void vik_ext_tools_register ( VikExtTool *tool ) { if ( IS_VIK_EXT_TOOL( tool ) ) ext_tools_list = g_list_append ( ext_tools_list, g_object_ref ( tool ) ); } void vik_ext_tools_unregister_all () { g_list_foreach ( ext_tools_list, (GFunc) g_object_unref, NULL ); } static void ext_tools_open_cb ( GtkWidget *widget, VikWindow *vwindow ) { gpointer ptr = g_object_get_data ( G_OBJECT(widget), VIK_TOOL_DATA_KEY ); VikExtTool *ext_tool = VIK_EXT_TOOL ( ptr ); vik_ext_tool_open ( ext_tool, vwindow ); } void vik_ext_tools_add_menu_items_to_menu ( VikWindow *vwindow, GtkMenu *menu ) { GList *iter; for (iter = ext_tools_list; iter; iter = iter->next) { VikExtTool *ext_tool = NULL; gchar *label = NULL; ext_tool = VIK_EXT_TOOL ( iter->data ); label = vik_ext_tool_get_label ( ext_tool ); if ( label ) { GtkWidget *item = NULL; item = gtk_menu_item_new_with_label ( _(label) ); g_free ( label ); label = NULL; // Store tool's ref into the menu entry g_object_set_data ( G_OBJECT(item), VIK_TOOL_DATA_KEY, ext_tool ); g_signal_connect ( G_OBJECT(item), "activate", G_CALLBACK(ext_tools_open_cb), vwindow ); gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); gtk_widget_show ( item ); } } } void vik_ext_tools_add_menu_items ( VikWindow *vwindow, GtkUIManager *uim ) { GtkWidget *widget = NULL; GtkMenu *menu = NULL; widget = gtk_ui_manager_get_widget (uim, "/MainMenu/Tools/Exttools"); menu = GTK_MENU ( gtk_menu_item_get_submenu ( GTK_MENU_ITEM ( widget ) ) ); vik_ext_tools_add_menu_items_to_menu ( vwindow, menu ); gtk_widget_show ( widget ); } viking-1.4.2/src/vikwaypoint.c0000644000175000017500000001145012175546146013261 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include #include "coords.h" #include "vikcoord.h" #include "vikwaypoint.h" #include "globals.h" #include VikWaypoint *vik_waypoint_new() { VikWaypoint *wp = g_malloc0 ( sizeof ( VikWaypoint ) ); wp->altitude = VIK_DEFAULT_ALTITUDE; wp->name = g_strdup(_("Waypoint")); return wp; } // Hmmm tempted to put in new constructor void vik_waypoint_set_name(VikWaypoint *wp, const gchar *name) { if ( wp->name ) g_free ( wp->name ); wp->name = g_strdup(name); } void vik_waypoint_set_comment_no_copy(VikWaypoint *wp, gchar *comment) { if ( wp->comment ) g_free ( wp->comment ); wp->comment = comment; } void vik_waypoint_set_comment(VikWaypoint *wp, const gchar *comment) { if ( wp->comment ) g_free ( wp->comment ); if ( comment && comment[0] != '\0' ) wp->comment = g_strdup(comment); else wp->comment = NULL; } void vik_waypoint_set_description(VikWaypoint *wp, const gchar *description) { if ( wp->description ) g_free ( wp->description ); if ( description && description[0] != '\0' ) wp->description = g_strdup(description); else wp->description = NULL; } void vik_waypoint_set_image(VikWaypoint *wp, const gchar *image) { if ( wp->image ) g_free ( wp->image ); if ( image && image[0] != '\0' ) wp->image = g_strdup(image); else wp->image = NULL; // NOTE - ATM the image (thumbnail) size is calculated on demand when needed to be first drawn } void vik_waypoint_set_symbol(VikWaypoint *wp, const gchar *symname) { if ( wp->symbol ) g_free ( wp->symbol ); if ( symname && symname[0] != '\0' ) wp->symbol = g_strdup(symname); else wp->symbol = NULL; } void vik_waypoint_free(VikWaypoint *wp) { if ( wp->comment ) g_free ( wp->comment ); if ( wp->description ) g_free ( wp->description ); if ( wp->image ) g_free ( wp->image ); if ( wp->symbol ) g_free ( wp->symbol ); g_free ( wp ); } VikWaypoint *vik_waypoint_copy(const VikWaypoint *wp) { VikWaypoint *new_wp = vik_waypoint_new(); new_wp->coord = wp->coord; new_wp->visible = wp->visible; new_wp->altitude = wp->altitude; vik_waypoint_set_name(new_wp,wp->name); vik_waypoint_set_comment(new_wp,wp->comment); vik_waypoint_set_description(new_wp,wp->description); vik_waypoint_set_image(new_wp,wp->image); vik_waypoint_set_symbol(new_wp,wp->symbol); return new_wp; } /* * Take a Waypoint and convert it into a byte array */ void vik_waypoint_marshall ( VikWaypoint *wp, guint8 **data, guint *datalen) { GByteArray *b = g_byte_array_new(); guint len; // This creates space for fixed sized members like gints and whatnot // and copies that amount of data from the waypoint to byte array g_byte_array_append(b, (guint8 *)wp, sizeof(*wp)); // This allocates space for variant sized strings // and copies that amount of data from the waypoint to byte array #define vwm_append(s) \ len = (s) ? strlen(s)+1 : 0; \ g_byte_array_append(b, (guint8 *)&len, sizeof(len)); \ if (s) g_byte_array_append(b, (guint8 *)s, len); vwm_append(wp->name); vwm_append(wp->comment); vwm_append(wp->description); vwm_append(wp->image); vwm_append(wp->symbol); *data = b->data; *datalen = b->len; g_byte_array_free(b, FALSE); #undef vwm_append } /* * Take a byte array and convert it into a Waypoint */ VikWaypoint *vik_waypoint_unmarshall (guint8 *data, guint datalen) { guint len; VikWaypoint *new_wp = vik_waypoint_new(); // This copies the fixed sized elements (i.e. visibility, altitude, image_width, etc...) memcpy(new_wp, data, sizeof(*new_wp)); data += sizeof(*new_wp); // Now the variant sized strings... #define vwu_get(s) \ len = *(guint *)data; \ data += sizeof(len); \ if (len) { \ (s) = g_strdup((gchar *)data); \ } else { \ (s) = NULL; \ } \ data += len; vwu_get(new_wp->name); vwu_get(new_wp->comment); vwu_get(new_wp->description); vwu_get(new_wp->image); vwu_get(new_wp->symbol); return new_wp; #undef vwu_get } viking-1.4.2/src/print-preview.h0000644000175000017500000000714211745373131013512 00000000000000/* GIMP - The GNU Image Manipulation Program * Copyright (C) 1995 Spencer Kimball and Peter Mattis * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #if GTK_CHECK_VERSION(2,10,0) #ifndef __VIK_PRINT_PREVIEW_H__ #define __VIK_PRINT_PREVIEW_H__ G_BEGIN_DECLS #define VIK_TYPE_PRINT_PREVIEW (vik_print_preview_get_type ()) #define VIK_PRINT_PREVIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIK_TYPE_PRINT_PREVIEW, VikPrintPreview)) #define VIK_PRINT_PREVIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VIK_TYPE_PRINT_PREVIEW, VikPrintPreviewClass)) #define VIK_IS_PRINT_PREVIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIK_TYPE_PRINT_PREVIEW)) #define VIK_IS_PRINT_PREVIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VIK_TYPE_PRINT_PREVIEW)) #define VIK_PRINT_PREVIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VIK_TYPE_PRINT_PREVIEW, VikPrintPreviewClass)) typedef struct _VikPrintPreview VikPrintPreview; typedef struct _VikPrintPreviewClass VikPrintPreviewClass; struct _VikPrintPreview { GtkAspectFrame parent_instance; GtkWidget *area; GtkPageSetup *page; GdkPixbuf *pixbuf; gboolean dragging; GdkDrawable *drawable; gdouble image_offset_x; gdouble image_offset_y; gdouble image_offset_x_max; gdouble image_offset_y_max; gdouble image_xres; gdouble image_yres; gboolean use_full_page; }; struct _VikPrintPreviewClass { GtkAspectFrameClass parent_class; void (* offsets_changed) (VikPrintPreview *print_preview, gint offset_x, gint offset_y); }; GType vik_print_preview_get_type (void) G_GNUC_CONST; GtkWidget * vik_print_preview_new (GtkPageSetup *page, GdkDrawable *drawable); void vik_print_preview_set_image_dpi (VikPrintPreview *preview, gdouble xres, gdouble yres); void vik_print_preview_set_page_setup (VikPrintPreview *preview, GtkPageSetup *page); void vik_print_preview_set_image_offsets (VikPrintPreview *preview, gdouble offset_x, gdouble offset_y); void vik_print_preview_set_image_offsets_max (VikPrintPreview *preview, gdouble offset_x_max, gdouble offset_y_max); void vik_print_preview_set_use_full_page (VikPrintPreview *preview, gboolean full_page); G_END_DECLS #endif /* __VIK_PRINT_PREVIEW_H__ */ #endif viking-1.4.2/src/mapcoord.h0000644000175000017500000000216512122673673012507 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef __MAP_COORD_H #define __MAP_COORD_H #include G_BEGIN_DECLS /* common struct to all map types and map layer, to hold info about a * particular tile */ typedef struct { gint x, y; gint z; /* zone or anything else */ gint scale; } MapCoord; G_END_DECLS #endif viking-1.4.2/src/modules.h0000644000175000017500000000167311745373131012352 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2006-2007, Guilhem Bonnefille * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef __VIKING_MODULES_H #define __VIKING_MODULES_H void modules_init(); #endif viking-1.4.2/src/thumbnails.c0000644000175000017500000003475412175546146013057 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ /* * Large (and important) sections of this file were adapted from * ROX-Filer source code, Copyright (C) 2003, the ROX-Filer team, * originally licensed under the GPL v2 or greater (as above). * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #ifdef HAVE_UNISTD_H #include #endif #include #include #include #include #include "viking.h" #include "thumbnails.h" #include "icons/icons.h" #ifdef __CYGWIN__ #ifdef __CYGWIN_USE_BIG_TYPES__ #define ST_SIZE_FMT "%lld" #else #define ST_SIZE_FMT "%ld" #endif #else /* FIXME -- on some systems this may need to me "lld", see ROX-Filer code */ #define ST_SIZE_FMT "%ld" #endif #undef MIN /* quit yer whining, gcc */ #undef MAX #include /* for realpath() */ #ifndef MAX /* We need MAX macro and some system does not offer it */ #define MAX(a,b) (((a)>(b))?(a):(b)) #endif #define HOME_DIR g_get_home_dir() #ifdef WINDOWS #define THUMB_DIR "\\THUMBNAILS\\" /* viking maps default viking\maps */ #define THUMB_SUB_DIR "normal\\" #define realpath(X,Y) _fullpath(Y,X,MAX_PATH) #else #define THUMB_DIR "/.thumbnails/" #define THUMB_SUB_DIR "normal/" #endif #define PIXMAP_THUMB_SIZE 128 #ifndef MAXPATHLEN #define MAXPATHLEN 1024 #endif static char *md5_hash(const char *message); static char *pathdup(const char *path); static GdkPixbuf *save_thumbnail(const char *pathname, GdkPixbuf *full); static GdkPixbuf *child_create_thumbnail(const gchar *path); gboolean a_thumbnails_exists ( const gchar *filename ) { GdkPixbuf *pixbuf = a_thumbnails_get(filename); if ( pixbuf ) { g_object_unref ( G_OBJECT ( pixbuf ) ); return TRUE; } return FALSE; } GdkPixbuf *a_thumbnails_get_default () { return gdk_pixbuf_from_pixdata ( &thumbnails_pixbuf, FALSE, NULL ); } /* filename must be absolute. you could have a function to make sure it exists and absolutize it */ void a_thumbnails_create(const gchar *filename) { GdkPixbuf *pixbuf = a_thumbnails_get(filename); if ( ! pixbuf ) pixbuf = child_create_thumbnail(filename); if ( pixbuf ) g_object_unref ( G_OBJECT ( pixbuf ) ); } GdkPixbuf *a_thumbnails_scale_pixbuf(GdkPixbuf *src, int max_w, int max_h) { int w, h; w = gdk_pixbuf_get_width(src); h = gdk_pixbuf_get_height(src); if (w <= max_w && h <= max_h) { g_object_ref ( G_OBJECT ( src ) ); return src; } else { float scale_x = ((float) w) / max_w; float scale_y = ((float) h) / max_h; float scale = MAX(scale_x, scale_y); int dest_w = w / scale; int dest_h = h / scale; return gdk_pixbuf_scale_simple(src, MAX(dest_w, 1), MAX(dest_h, 1), GDK_INTERP_BILINEAR); } } static GdkPixbuf *child_create_thumbnail(const gchar *path) { GdkPixbuf *image, *tmpbuf; image = gdk_pixbuf_new_from_file(path, NULL); if (!image) return NULL; tmpbuf = gdk_pixbuf_apply_embedded_orientation(image); g_object_unref(G_OBJECT(image)); image = tmpbuf; if (image) { GdkPixbuf *thumb = save_thumbnail(path, image); g_object_unref ( G_OBJECT ( image ) ); return thumb; } return NULL; } static GdkPixbuf *save_thumbnail(const char *pathname, GdkPixbuf *full) { struct stat info; gchar *path; int original_width, original_height; const gchar* orientation; GString *to; char *md5, *swidth, *sheight, *ssize, *smtime, *uri; mode_t old_mask; int name_len; GdkPixbuf *thumb; if (stat(pathname, &info) != 0) return NULL; thumb = a_thumbnails_scale_pixbuf(full, PIXMAP_THUMB_SIZE, PIXMAP_THUMB_SIZE); orientation = gdk_pixbuf_get_option (full, "orientation"); original_width = gdk_pixbuf_get_width(full); original_height = gdk_pixbuf_get_height(full); swidth = g_strdup_printf("%d", original_width); sheight = g_strdup_printf("%d", original_height); ssize = g_strdup_printf(ST_SIZE_FMT, info.st_size); smtime = g_strdup_printf("%ld", (long) info.st_mtime); path = pathdup(pathname); uri = g_strconcat("file://", path, NULL); md5 = md5_hash(uri); g_free(path); to = g_string_new(HOME_DIR); g_string_append(to, THUMB_DIR); g_string_append(to, THUMB_SUB_DIR); g_mkdir_with_parents(to->str, 0700); g_string_append(to, md5); name_len = to->len + 4; /* Truncate to this length when renaming */ #ifdef WINDOWS g_string_append_printf(to, ".png.Viking"); #else g_string_append_printf(to, ".png.Viking-%ld", (long) getpid()); #endif g_free(md5); old_mask = umask(0077); gdk_pixbuf_save(thumb, to->str, "png", NULL, "tEXt::Thumb::Image::Width", swidth, "tEXt::Thumb::Image::Height", sheight, "tEXt::Thumb::Size", ssize, "tEXt::Thumb::MTime", smtime, "tEXt::Thumb::URI", uri, "tEXt::Software", PROJECT, "tEXt::Software::Orientation", orientation ? orientation : "0", NULL); umask(old_mask); /* We create the file ###.png.ROX-Filer-PID and rename it to avoid * a race condition if two programs create the same thumb at * once. */ { gchar *final; final = g_strndup(to->str, name_len); if (rename(to->str, final)) { g_warning("Failed to rename '%s' to '%s': %s", to->str, final, g_strerror(errno)); g_object_unref ( G_OBJECT(thumb) ); thumb = NULL; /* return NULL */ } g_free(final); } g_string_free(to, TRUE); g_free(swidth); g_free(sheight); g_free(ssize); g_free(smtime); g_free(uri); return thumb; } GdkPixbuf *a_thumbnails_get(const gchar *pathname) { GdkPixbuf *thumb = NULL; char *thumb_path, *md5, *uri, *path; const char *ssize, *smtime; struct stat info; path = pathdup(pathname); uri = g_strconcat("file://", path, NULL); md5 = md5_hash(uri); g_free(uri); thumb_path = g_strdup_printf("%s%s%s%s.png", HOME_DIR, THUMB_DIR, THUMB_SUB_DIR, md5); g_free(md5); thumb = gdk_pixbuf_new_from_file(thumb_path, NULL); if (!thumb) goto err; /* Note that these don't need freeing... */ ssize = gdk_pixbuf_get_option(thumb, "tEXt::Thumb::Size"); if (!ssize) goto err; smtime = gdk_pixbuf_get_option(thumb, "tEXt::Thumb::MTime"); if (!smtime) goto err; if (stat(path, &info) != 0) goto err; if (info.st_mtime != atol(smtime) || info.st_size != atol(ssize)) goto err; goto out; err: if (thumb) g_object_unref ( G_OBJECT ( thumb ) ); thumb = NULL; out: g_free(path); g_free(thumb_path); return thumb; } /* pathdup() stuff */ static char *pathdup(const char *path) { char real[MAXPATHLEN]; g_return_val_if_fail(path != NULL, NULL); if (realpath(path, real)) return g_strdup(real); return g_strdup(path); } /* * This code implements the MD5 message-digest algorithm. * The algorithm is due to Ron Rivest. The original code was * written by Colin Plumb in 1993, and put in the public domain. * * Modified to use glib datatypes. Put under GPL to simplify * licensing for ROX-Filer. Taken from Debian's dpkg package. * */ #define md5byte unsigned char typedef struct _MD5Context MD5Context; struct _MD5Context { guint32 buf[4]; guint32 bytes[2]; guint32 in[16]; }; static void MD5Init(MD5Context *ctx); static void MD5Update(MD5Context *ctx, md5byte const *buf, unsigned len); static char *MD5Final(MD5Context *ctx); static void MD5Transform(guint32 buf[4], guint32 const in[16]); #if G_BYTE_ORDER == G_BIG_ENDIAN static void byteSwap(guint32 *buf, unsigned words) { md5byte *p = (md5byte *)buf; do { *buf++ = (guint32)((unsigned)p[3] << 8 | p[2]) << 16 | ((unsigned)p[1] << 8 | p[0]); p += 4; } while (--words); } #else #define byteSwap(buf,words) #endif /* * Start MD5 accumulation. Set bit count to 0 and buffer to mysterious * initialization constants. */ static void MD5Init(MD5Context *ctx) { ctx->buf[0] = 0x67452301; ctx->buf[1] = 0xefcdab89; ctx->buf[2] = 0x98badcfe; ctx->buf[3] = 0x10325476; ctx->bytes[0] = 0; ctx->bytes[1] = 0; } /* * Update context to reflect the concatenation of another buffer full * of bytes. */ static void MD5Update(MD5Context *ctx, md5byte const *buf, unsigned len) { guint32 t; /* Update byte count */ t = ctx->bytes[0]; if ((ctx->bytes[0] = t + len) < t) ctx->bytes[1]++; /* Carry from low to high */ t = 64 - (t & 0x3f); /* Space available in ctx->in (at least 1) */ if (t > len) { memcpy((md5byte *)ctx->in + 64 - t, buf, len); return; } /* First chunk is an odd size */ memcpy((md5byte *)ctx->in + 64 - t, buf, t); byteSwap(ctx->in, 16); MD5Transform(ctx->buf, ctx->in); buf += t; len -= t; /* Process data in 64-byte chunks */ while (len >= 64) { memcpy(ctx->in, buf, 64); byteSwap(ctx->in, 16); MD5Transform(ctx->buf, ctx->in); buf += 64; len -= 64; } /* Handle any remaining bytes of data. */ memcpy(ctx->in, buf, len); } /* * Final wrapup - pad to 64-byte boundary with the bit pattern * 1 0* (64-bit count of bits processed, MSB-first) * Returns the newly allocated string of the hash. */ static char *MD5Final(MD5Context *ctx) { char *retval; int i; int count = ctx->bytes[0] & 0x3f; /* Number of bytes in ctx->in */ md5byte *p = (md5byte *)ctx->in + count; guint8 *bytes; /* Set the first char of padding to 0x80. There is always room. */ *p++ = 0x80; /* Bytes of padding needed to make 56 bytes (-8..55) */ count = 56 - 1 - count; if (count < 0) { /* Padding forces an extra block */ memset(p, 0, count + 8); byteSwap(ctx->in, 16); MD5Transform(ctx->buf, ctx->in); p = (md5byte *)ctx->in; count = 56; } memset(p, 0, count); byteSwap(ctx->in, 14); /* Append length in bits and transform */ ctx->in[14] = ctx->bytes[0] << 3; ctx->in[15] = ctx->bytes[1] << 3 | ctx->bytes[0] >> 29; MD5Transform(ctx->buf, ctx->in); byteSwap(ctx->buf, 4); retval = g_malloc(33); bytes = (guint8 *) ctx->buf; for (i = 0; i < 16; i++) sprintf(retval + (i * 2), "%02x", bytes[i]); retval[32] = '\0'; return retval; } # ifndef ASM_MD5 /* The four core functions - F1 is optimized somewhat */ /* #define F1(x, y, z) (x & y | ~x & z) */ #define F1(x, y, z) (z ^ (x & (y ^ z))) #define F2(x, y, z) F1(z, x, y) #define F3(x, y, z) (x ^ y ^ z) #define F4(x, y, z) (y ^ (x | ~z)) /* This is the central step in the MD5 algorithm. */ #define MD5STEP(f,w,x,y,z,in,s) \ (w += f(x,y,z) + in, w = (w<>(32-s)) + x) /* * The core of the MD5 algorithm, this alters an existing MD5 hash to * reflect the addition of 16 longwords of new data. MD5Update blocks * the data and converts bytes into longwords for this routine. */ static void MD5Transform(guint32 buf[4], guint32 const in[16]) { register guint32 a, b, c, d; a = buf[0]; b = buf[1]; c = buf[2]; d = buf[3]; MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7); MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12); MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17); MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22); MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7); MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12); MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17); MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22); MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7); MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12); MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17); MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22); MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7); MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12); MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17); MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22); MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5); MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9); MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14); MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20); MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5); MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9); MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14); MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20); MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5); MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9); MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14); MD5STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20); MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5); MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9); MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14); MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20); MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4); MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11); MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16); MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23); MD5STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4); MD5STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11); MD5STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16); MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23); MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4); MD5STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11); MD5STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16); MD5STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23); MD5STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4); MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11); MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16); MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23); MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6); MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10); MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15); MD5STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21); MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6); MD5STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10); MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15); MD5STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21); MD5STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6); MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10); MD5STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15); MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21); MD5STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6); MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10); MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15); MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21); buf[0] += a; buf[1] += b; buf[2] += c; buf[3] += d; } # endif /* ASM_MD5 */ static char *md5_hash(const char *message) { MD5Context ctx; MD5Init(&ctx); MD5Update(&ctx, (md5byte *) message, strlen(message)); return MD5Final(&ctx); } viking-1.4.2/src/geotag_exif.h0000644000175000017500000000300512122673673013156 00000000000000/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2011, Rob Norris * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef _VIKING_GEOTAG_EXIF_H #define _VIKING_GEOTAG_EXIF_H #include "vikwaypoint.h" #include "vikcoord.h" G_BEGIN_DECLS VikWaypoint* a_geotag_create_waypoint_from_file ( const gchar *filename, VikCoordMode vcmode, gchar **name ); VikWaypoint* a_geotag_waypoint_positioned ( const gchar *filename, VikCoord coord, gdouble alt, gchar **name, VikWaypoint *wp ); gchar* a_geotag_get_exif_date_from_file ( const gchar *filename, gboolean *has_GPS_info ); gint a_geotag_write_exif_gps ( const gchar *filename, VikCoord coord, gdouble alt, gboolean no_change_mtime ); G_END_DECLS #endif // _VIKING_GEOTAG_EXIF_H viking-1.4.2/src/vikwebtoolcenter.h0000644000175000017500000000425112122673673014267 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2008, Guilhem Bonnefille * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef _VIKING_WEBTOOL_CENTER_H #define _VIKING_WEBTOOL_CENTER_H #include #include "vikwebtool.h" G_BEGIN_DECLS #define VIK_WEBTOOL_CENTER_TYPE (vik_webtool_center_get_type ()) #define VIK_WEBTOOL_CENTER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIK_WEBTOOL_CENTER_TYPE, VikWebtoolCenter)) #define VIK_WEBTOOL_CENTER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VIK_WEBTOOL_CENTER_TYPE, VikWebtoolCenterClass)) #define IS_VIK_WEBTOOL_CENTER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIK_WEBTOOL_CENTER_TYPE)) #define IS_VIK_WEBTOOL_CENTER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VIK_WEBTOOL_CENTER_TYPE)) #define VIK_WEBTOOL_CENTER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VIK_WEBTOOL_CENTER_TYPE, VikWebtoolCenterClass)) typedef struct _VikWebtoolCenter VikWebtoolCenter; typedef struct _VikWebtoolCenterClass VikWebtoolCenterClass; struct _VikWebtoolCenterClass { VikWebtoolClass object_class; guint8 (* mpp_to_zoom) (VikWebtool *self, gdouble mpp); }; GType vik_webtool_center_get_type (); struct _VikWebtoolCenter { VikWebtool obj; }; guint8 vik_webtool_center_mpp_to_zoom (VikWebtool *self, gdouble mpp); VikWebtoolCenter* vik_webtool_center_new ( ); VikWebtoolCenter* vik_webtool_center_new_with_members ( const gchar *label, const gchar *url ); G_END_DECLS #endif viking-1.4.2/src/vikwmscmapsource.h0000644000175000017500000000412712175546146014307 00000000000000/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * viking * Copyright (C) 2010, Guilhem Bonnefille * * viking is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * viking is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef _VIK_WMSC_MAP_SOURCE_H #define _VIK_WMSC_MAP_SOURCE_H #include "vikcoord.h" #include "mapcoord.h" #include "vikmapsourcedefault.h" G_BEGIN_DECLS #define VIK_TYPE_WMSC_MAP_SOURCE (vik_wmsc_map_source_get_type ()) #define VIK_WMSC_MAP_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIK_TYPE_WMSC_MAP_SOURCE, VikWmscMapSource)) #define VIK_WMSC_MAP_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VIK_TYPE_WMSC_MAP_SOURCE, VikWmscMapSourceClass)) #define VIK_IS_WMSC_MAP_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIK_TYPE_WMSC_MAP_SOURCE)) #define VIK_IS_WMSC_MAP_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VIK_TYPE_WMSC_MAP_SOURCE)) #define VIK_WMSC_MAP_SOURCE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VIK_TYPE_WMSC_MAP_SOURCE, VikWmscMapSourceClass)) typedef struct _VikWmscMapSourceClass VikWmscMapSourceClass; typedef struct _VikWmscMapSource VikWmscMapSource; struct _VikWmscMapSourceClass { VikMapSourceDefaultClass parent_class; }; struct _VikWmscMapSource { VikMapSourceDefault parent_instance; }; GType vik_wmsc_map_source_get_type (void) G_GNUC_CONST; VikWmscMapSource * vik_wmsc_map_source_new_with_id (guint16 id, const gchar *label, const gchar *hostname, const gchar *url); G_END_DECLS #endif /* _VIK_WMSC_MAP_SOURCE_H_ */ viking-1.4.2/src/clipboard.c0000644000175000017500000003140512175546146012636 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * Copyright (C) 2005, Alex Foobarian * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_UNISTD_H #include #endif #include #include "viking.h" typedef struct { gpointer clipboard; gint pid; VikClipboardDataType type; gint subtype; guint16 layer_type; guint len; gchar *text; guint8 data[0]; } vik_clipboard_t; static GtkTargetEntry target_table[] = { { "application/viking", 0, 0 }, { "STRING", 0, 1 }, }; /***************************************************************** ** functions which send to the clipboard client (we are owner) ** *****************************************************************/ static void clip_get ( GtkClipboard *c, GtkSelectionData *selection_data, guint info, gpointer p ) { vik_clipboard_t *vc = p; if ( info == 0 ) { // Viking Data Type // g_print("clip_get: vc = %p, size = %d\n", vc, sizeof(*vc) + vc->len); gtk_selection_data_set ( selection_data, selection_data->target, 8, (void *)vc, sizeof(*vc) + vc->len ); } if ( info == 1 ) { // Should be a string, but make sure it's something if ( vc->text ) gtk_selection_data_set_text ( selection_data, vc->text, -1); // string text is null terminated } } static void clip_clear ( GtkClipboard *c, gpointer p ) { vik_clipboard_t* vc = (vik_clipboard_t*)p; g_free(vc->text); g_free(vc); } /************************************************************************** ** functions which receive from the clipboard owner (we are the client) ** **************************************************************************/ /* our own data type */ static void clip_receive_viking ( GtkClipboard *c, GtkSelectionData *sd, gpointer p ) { VikLayersPanel *vlp = p; vik_clipboard_t *vc; if (sd->length == -1) { g_warning ( _("paste failed") ); return; } // g_print("clip receive: target = %s, type = %s\n", gdk_atom_name(sd->target), gdk_atom_name(sd->type)); g_assert(!strcmp(gdk_atom_name(sd->target), target_table[0].target)); vc = (vik_clipboard_t *)sd->data; // g_print(" sd->data = %p, sd->length = %d, vc->len = %d\n", sd->data, sd->length, vc->len); if (sd->length != sizeof(*vc) + vc->len) { g_warning ( _("wrong clipboard data size") ); return; } if ( vc->type == VIK_CLIPBOARD_DATA_LAYER ) { VikLayer *new_layer = vik_layer_unmarshall ( vc->data, vc->len, vik_layers_panel_get_viewport(vlp) ); vik_layers_panel_add_layer ( vlp, new_layer ); } else if ( vc->type == VIK_CLIPBOARD_DATA_SUBLAYER ) { VikLayer *sel = vik_layers_panel_get_selected ( vlp ); if ( sel && sel->type == vc->layer_type) { if ( vik_layer_get_interface(vc->layer_type)->paste_item ) vik_layer_get_interface(vc->layer_type)->paste_item ( sel, vc->subtype, vc->data, vc->len); } else a_dialog_error_msg_extra ( VIK_GTK_WINDOW_FROM_WIDGET(GTK_WIDGET(vlp)), _("The clipboard contains sublayer data for %s layers. " "You must select a layer of this type to paste the clipboard data."), vik_layer_get_interface(vc->layer_type)->name ); } } /** * clip_parse_latlon: * @text: text containing LatLon data. * @coord: computed coordinates. * * Utility func to handle pasted text: * search for N dd.dddddd W dd.dddddd, N dd° dd.dddd W dd° dd.ddddd and so forth. * * Returns: TRUE if coordinates are set. */ static gboolean clip_parse_latlon ( const gchar *text, struct LatLon *coord ) { gint latdeg, londeg; gdouble latm, lonm; gdouble lat, lon; gchar *cand; gint len, i; gchar *s = g_strdup(text); // g_print("parsing %s\n", s); len = strlen(s); /* remove non-digits following digits; gets rid of degree symbols or whatever people use, and * punctuation */ for (i=0; i= -90.0 && lat <= 90.0 && lon >= -180.0 && lon <= 180.0) { coord->lat = lat; coord->lon = lon; return TRUE; } return FALSE; } static void clip_add_wp(VikLayersPanel *vlp, struct LatLon *coord) { VikCoord vc; VikLayer *sel = vik_layers_panel_get_selected ( vlp ); vik_coord_load_from_latlon ( &vc, VIK_COORD_LATLON, coord ); if (sel && sel->type == VIK_LAYER_TRW) { vik_trw_layer_new_waypoint ( VIK_TRW_LAYER(sel), VIK_GTK_WINDOW_FROM_LAYER(sel), &vc ); } else { a_dialog_error_msg_extra ( VIK_GTK_WINDOW_FROM_WIDGET(GTK_WIDGET(vlp)), _("In order to paste a waypoint, please select an appropriate layer to paste into."), NULL); } } static void clip_receive_text (GtkClipboard *c, const gchar *text, gpointer p) { VikLayersPanel *vlp = p; struct LatLon coord; // g_print("got text: %s\n", text); if (clip_parse_latlon(text, &coord)) { clip_add_wp(vlp, &coord); } } static void clip_receive_html ( GtkClipboard *c, GtkSelectionData *sd, gpointer p ) { VikLayersPanel *vlp = p; gsize r, w; GError *err = NULL; gchar *s, *span; gint tag = 0, i; struct LatLon coord; if (sd->length == -1) { return; } /* - copying from Mozilla seems to give html in UTF-16. */ if (!(s = g_convert ( (gchar *)sd->data, sd->length, "UTF-8", "UTF-16", &r, &w, &err))) { return; } // g_print("html is %d bytes long: %s\n", sd->length, s); /* scrape a coordinate pasted from a geocaching.com page: look for a * telltale tag if possible, and then remove tags */ if (!(span = g_strstr_len(s, w, ""))) { span = s; } for (i=0; i0) { span[i] = ' '; } if (c == '>') { if (tag>0) tag--; } } if (clip_parse_latlon(span, &coord)) { clip_add_wp(vlp, &coord); } g_free(s); } /** * clip_receive_targets: * * Deal with various data types a clipboard may hold. */ void clip_receive_targets ( GtkClipboard *c, GdkAtom *a, gint n, gpointer p ) { VikLayersPanel *vlp = p; gint i; for (i=0; ivt, &iter ); layer_type = sel->type; if ( vik_treeview_item_get_type ( sel->vt, &iter ) == VIK_TREEVIEW_TYPE_SUBLAYER ) { type = VIK_CLIPBOARD_DATA_SUBLAYER; if ( vik_layer_get_interface(layer_type)->copy_item) { subtype = vik_treeview_item_get_data(sel->vt, &iter); vik_layer_get_interface(layer_type)->copy_item(sel, subtype, vik_treeview_item_get_pointer(sel->vt, &iter), &data, &len ); // This name is used in setting the text representation of the item on the clipboard. name = vik_treeview_item_get_name(sel->vt, &iter); } } else { gint ilen; type = VIK_CLIPBOARD_DATA_LAYER; vik_layer_marshall ( sel, &data, &ilen ); len = ilen; name = vik_layer_get_name ( vik_treeview_item_get_pointer(sel->vt, &iter) ); } if (data) { a_clipboard_copy( type, layer_type, subtype, len, name, data); } } void a_clipboard_copy( VikClipboardDataType type, guint16 layer_type, gint subtype, guint len, const gchar* text, guint8 * data) { vik_clipboard_t * vc = g_malloc(sizeof(*vc) + len); GtkClipboard *c = gtk_clipboard_get ( GDK_SELECTION_CLIPBOARD ); vc->type = type; vc->layer_type = layer_type; vc->subtype = subtype; vc->len = len; vc->text = g_strdup (text); memcpy(vc->data, data, len); g_free(data); vc->pid = getpid(); gtk_clipboard_set_with_data ( c, target_table, G_N_ELEMENTS(target_table), clip_get, clip_clear, vc ); } /** * a_clipboard_paste: * * To deal with multiple data types, we first request the type of data on the clipboard, * and handle them in the callback. */ gboolean a_clipboard_paste ( VikLayersPanel *vlp ) { GtkClipboard *c = gtk_clipboard_get ( GDK_SELECTION_CLIPBOARD ); gtk_clipboard_request_targets ( c, clip_receive_targets, vlp ); return TRUE; } /** * * Detect our own data types */ static void clip_determine_viking_type ( GtkClipboard *c, GtkSelectionData *sd, gpointer p ) { VikClipboardDataType *vdct = p; // Default value *vdct = VIK_CLIPBOARD_DATA_NONE; vik_clipboard_t *vc; if (sd->length == -1) { g_warning ("DETERMINING TYPE: length failure"); return; } vc = (vik_clipboard_t *)sd->data; if ( !vc->type ) return; if ( vc->type == VIK_CLIPBOARD_DATA_LAYER ) { *vdct = VIK_CLIPBOARD_DATA_LAYER; } else if ( vc->type == VIK_CLIPBOARD_DATA_SUBLAYER ) { *vdct = VIK_CLIPBOARD_DATA_SUBLAYER; } else { g_warning ("DETERMINING TYPE: THIS SHOULD NEVER HAPPEN"); } } static void clip_determine_type ( GtkClipboard *c, GdkAtom *a, gint n, gpointer p ) { gint i; for (i=0; i * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef _VIKING_MAPSLAYER_COMPAT_H #define _VIKING_MAPSLAYER_COMPAT_H #include "vikcoord.h" #include "vikviewport.h" #include "mapcoord.h" typedef struct { guint16 uniq_id; guint16 tilesize_x; guint16 tilesize_y; guint drawmode; gboolean (*coord_to_mapcoord) ( const VikCoord *src, gdouble xzoom, gdouble yzoom, MapCoord *dest ); void (*mapcoord_to_center_coord) ( MapCoord *src, VikCoord *dest ); int (*download) ( MapCoord *src, const gchar *dest_fn, void *handle ); void *(*download_handle_init) ( ); void (*download_handle_cleanup) ( void *handle ); /* TODO: constant size (yay!) */ } VikMapsLayer_MapType; void maps_layer_register_type ( const char *label, guint id, VikMapsLayer_MapType *map_type ); #endif viking-1.4.2/src/vikexttools.h0000644000175000017500000000225212175546146013275 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2008, Guilhem Bonnefille * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef _VIKING_EXT_TOOLS_H #define _VIKING_EXT_TOOLS_H #include #include "vikwindow.h" #include "vikexttool.h" G_BEGIN_DECLS void vik_ext_tools_register ( VikExtTool *tool ); void vik_ext_tools_unregister_all (); void vik_ext_tools_add_menu_items ( VikWindow *vwindow, GtkUIManager *uim ); G_END_DECLS #endif viking-1.4.2/src/vikgpslayer.h0000644000175000017500000000471512122673673013246 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * Copyright (C) 2006-2008, Quy Tonthat * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef _VIKING_GPSLAYER_H #define _VIKING_GPSLAYER_H #include "viklayer.h" #include "viktrack.h" G_BEGIN_DECLS #define VIK_GPS_LAYER_TYPE (vik_gps_layer_get_type ()) #define VIK_GPS_LAYER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIK_GPS_LAYER_TYPE, VikGpsLayer)) #define VIK_GPS_LAYER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VIK_GPS_LAYER_TYPE, VikGpsLayerClass)) #define IS_VIK_GPS_LAYER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIK_GPS_LAYER_TYPE)) #define IS_VIK_GPS_LAYER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VIK_GPS_LAYER_TYPE)) typedef struct _VikGpsLayerClass VikGpsLayerClass; struct _VikGpsLayerClass { VikLayerClass vik_layer_class; }; GType vik_gps_layer_get_type (); typedef enum { GPS_DOWN=0, GPS_UP } vik_gps_dir; typedef enum { WPT=0, TRK=1, RTE=2 } vik_gps_xfer_type; typedef struct _VikGpsLayer VikGpsLayer; gboolean vik_gps_layer_is_empty ( VikGpsLayer *vgl ); const GList *vik_gps_layer_get_children ( VikGpsLayer *vgl ); VikTrwLayer * vik_gps_layer_get_a_child(VikGpsLayer *vgl); // Non layer specific but expose communal method gint vik_gps_comm ( VikTrwLayer *vtl, VikTrack *track, vik_gps_dir dir, gchar *protocol, gchar *port, gboolean tracking, VikViewport *vvp, VikLayersPanel *vlp, gboolean do_tracks, gboolean do_routes, gboolean do_waypoints, gboolean turn_off); G_END_DECLS #endif viking-1.4.2/src/gpx.h0000644000175000017500000000267112175546146011505 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef _VIKING_GPX_H #define _VIKING_GPX_H #include "viktrwlayer.h" G_BEGIN_DECLS /** * Options adapting GPX writing. */ typedef struct { gboolean force_ele; /// Force ele field gboolean force_time; /// Force time field gboolean hidden; /// Write invisible tracks/waypoints (default is yes) gboolean is_route; /// For internal convience } GpxWritingOptions; gboolean a_gpx_read_file ( VikTrwLayer *trw, FILE *f ); void a_gpx_write_file ( VikTrwLayer *trw, FILE *f, GpxWritingOptions *options ); void a_gpx_write_track_file ( VikTrack *trk, FILE *f, GpxWritingOptions *options ); G_END_DECLS #endif viking-1.4.2/src/bing.h0000644000175000017500000000177212120725153011612 00000000000000/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2011, Guilhem Bonnefille * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef __VIKING_BING_H #define __VIKING_BING_H void bing_init (); #endif viking-1.4.2/src/viking.desktop.in0000644000175000017500000000047012122673673014016 00000000000000[Desktop Entry] Version=1.0 _Name=Viking _GenericName=GPS Data Manager _Comment=Map Based GPS Data Manager (live data capable). Exec=viking %F Icon=viking Terminal=false Type=Application StartupNotify=true Categories=GTK;Science;Maps;Geography; MimeType=application/vnd.google-earth.kml+xml;application/gpx+xml; viking-1.4.2/src/dialog.h0000644000175000017500000000707212175546146012146 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef _VIKING_DIALOG_H #define _VIKING_DIALOG_H #include #include #include "coords.h" #include "vikwaypoint.h" #include "vikcoord.h" G_BEGIN_DECLS /* most of this file is an architechtural flaw. */ #define a_dialog_info_msg(win,info) a_dialog_msg(win,GTK_MESSAGE_INFO,info,NULL) #define a_dialog_warning_msg(win,info) a_dialog_msg(win,GTK_MESSAGE_WARNING,info,NULL) #define a_dialog_error_msg(win,info) a_dialog_msg(win,GTK_MESSAGE_ERROR,info,NULL) #define a_dialog_info_msg_extra(win,info,extra) a_dialog_msg(win,GTK_MESSAGE_INFO,info,extra) #define a_dialog_error_msg_extra(win,info,extra) a_dialog_msg(win,GTK_MESSAGE_ERROR,info,extra) GtkWidget *a_dialog_create_label_vbox ( gchar **texts, int label_count ); void a_dialog_msg ( GtkWindow *parent, gint type, const gchar *info, const gchar *extra ); void a_dialog_response_accept ( GtkDialog *dialog ); void a_dialog_about ( GtkWindow *parent ); /* okay, everthing below here is an architechtural flaw. */ gboolean a_dialog_goto_latlon ( GtkWindow *parent, struct LatLon *ll, const struct LatLon *old ); gboolean a_dialog_goto_utm ( GtkWindow *parent, struct UTM *utm, const struct UTM *old ); /* Specify if a new waypoint or not */ /* If a new waypoint then it uses the default_name for the suggested name allowing the user to change it. The name to use is returned When an existing waypoint the name is shown but is not allowed to be changed and NULL is returned */ gchar *a_dialog_waypoint ( GtkWindow *parent, gchar *default_name, VikWaypoint *wp, VikCoordMode coord_mode, gboolean is_new, gboolean *updated ); gchar *a_dialog_new_track ( GtkWindow *parent, GHashTable *tracks, gchar *default_name, gboolean is_route ); gboolean a_dialog_yes_or_no ( GtkWindow *parent, const gchar *message, const gchar *extra ); gboolean a_dialog_custom_zoom ( GtkWindow *parent, gdouble *xmpp, gdouble *ympp ); gboolean a_dialog_time_threshold ( GtkWindow *parent, gchar *title_text, gchar *label_text, guint *thr ); /** * Dialog to return a positive number via a spinbox within the supplied limits * A return value of zero indicates the dialog was cancelled */ guint a_dialog_get_positive_number ( GtkWindow *parent, gchar *title_text, gchar *label_text, guint default_num, guint min, guint max, guint step ); void a_dialog_choose_dir ( GtkWidget *entry ); gboolean a_dialog_map_n_zoom(GtkWindow *parent, gchar *mapnames[], gint default_map, gchar *zoom_list[], gint default_zoom, gint *selected_map, gint *selected_zoom); GList *a_dialog_select_from_list ( GtkWindow *parent, GList *names, gboolean multiple_selection_allowed, const gchar *title, const gchar *msg ); void a_dialog_license ( GtkWindow *parent, const gchar *map, const gchar *license, const gchar *url); G_END_DECLS #endif viking-1.4.2/src/vikviewport.h0000644000175000017500000002134712175546146013301 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef _VIKING_VIEWPORT_H #define _VIKING_VIEWPORT_H /* Requires or glib, and coords.h*/ #include #include #include #include "vikcoord.h" G_BEGIN_DECLS #define VIK_VIEWPORT_TYPE (vik_viewport_get_type ()) #define VIK_VIEWPORT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIK_VIEWPORT_TYPE, VikViewport)) #define VIK_VIEWPORT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VIK_VIEWPORT_TYPE, VikViewportClass)) #define VIK_IS_VIEWPORT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIK_VIEWPORT_TYPE)) #define VIK_IS_VIEWPORT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VIK_VIEWPORT_TYPE)) #define VIK_VIEWPORT_MAX_ZOOM 32768.0 #define VIK_VIEWPORT_MIN_ZOOM 0.125 /* used for coord to screen etc, screen to coord */ #define VIK_VIEWPORT_UTM_WRONG_ZONE -9999999 #define VIK_VIEWPORT_OFF_SCREEN_DOUBLE -9999999.9 /* Glib type inheritance and initialization */ typedef struct _VikViewport VikViewport; typedef struct _VikViewportClass VikViewportClass; struct _VikViewportClass { GtkDrawingAreaClass drawing_area_class; }; GType vik_viewport_get_type (); /* Viking initialization */ VikViewport *vik_viewport_new (); void vik_viewport_configure_manually ( VikViewport *vvp, gint width, guint height ); /* for off-screen viewports */ gboolean vik_viewport_configure ( VikViewport *vp ); /* coordinate transformations */ void vik_viewport_screen_to_coord ( VikViewport *vvp, int x, int y, VikCoord *coord ); void vik_viewport_coord_to_screen ( VikViewport *vvp, const VikCoord *coord, int *x, int *y ); /* viewport scale */ void vik_viewport_set_ympp ( VikViewport *vvp, gdouble ympp ); void vik_viewport_set_xmpp ( VikViewport *vvp, gdouble xmpp ); gdouble vik_viewport_get_ympp ( VikViewport *vvp ); gdouble vik_viewport_get_xmpp ( VikViewport *vvp ); void vik_viewport_set_zoom ( VikViewport *vvp, gdouble mpp ); gdouble vik_viewport_get_zoom ( VikViewport *vvp ); void vik_viewport_zoom_in ( VikViewport *vvp ); void vik_viewport_zoom_out ( VikViewport *vvp ); /* viewport position */ const VikCoord *vik_viewport_get_center ( VikViewport *vvp ); void vik_viewport_set_center_coord ( VikViewport *vvp, const VikCoord *coord ); void vik_viewport_set_center_screen ( VikViewport *vvp, int x, int y ); void vik_viewport_center_for_zonen ( VikViewport *vvp, struct UTM *center, int zone); gchar vik_viewport_leftmost_zone ( VikViewport *vvp ); gchar vik_viewport_rightmost_zone ( VikViewport *vvp ); void vik_viewport_set_center_utm ( VikViewport *vvp, const struct UTM *utm ); void vik_viewport_set_center_latlon ( VikViewport *vvp, const struct LatLon *ll ); void vik_viewport_corners_for_zonen ( VikViewport *vvp, int zone, VikCoord *ul, VikCoord *br ); void vik_viewport_get_min_max_lat_lon ( VikViewport *vp, gdouble *min_lat, gdouble *max_lat, gdouble *min_lon, gdouble *max_lon ); /* drawmode management */ typedef enum { VIK_VIEWPORT_DRAWMODE_UTM=0, VIK_VIEWPORT_DRAWMODE_EXPEDIA, VIK_VIEWPORT_DRAWMODE_MERCATOR, VIK_VIEWPORT_DRAWMODE_LATLON, VIK_VIEWPORT_NUM_DRAWMODES /*< skip >*/ } VikViewportDrawMode; VikCoordMode vik_viewport_get_coord_mode ( const VikViewport *vvp ); gboolean vik_viewport_is_one_zone ( VikViewport *vvp ); const gchar *vik_viewport_get_drawmode_name(VikViewport *vv, VikViewportDrawMode mode); void vik_viewport_set_drawmode ( VikViewport *vvp, VikViewportDrawMode drawmode ); VikViewportDrawMode vik_viewport_get_drawmode ( VikViewport *vvp ); /* Do not forget to update vik_viewport_get_drawmode_name() if you modify VikViewportDrawMode */ /* Triggers */ void vik_viewport_set_trigger ( VikViewport *vp, gpointer trigger ); gpointer vik_viewport_get_trigger ( VikViewport *vp ); void vik_viewport_snapshot_save ( VikViewport *vp ); void vik_viewport_snapshot_load ( VikViewport *vp ); void vik_viewport_set_half_drawn(VikViewport *vp, gboolean half_drawn); gboolean vik_viewport_get_half_drawn( VikViewport *vp ); /*************************************************************************************************** * Drawing-related operations ***************************************************************************************************/ /* Viewport buffer management/drawing to screen */ GdkPixmap *vik_viewport_get_pixmap ( VikViewport *vvp ); /* get pointer to drawing buffer */ void vik_viewport_sync ( VikViewport *vvp ); /* draw buffer to window */ void vik_viewport_pan_sync ( VikViewport *vvp, gint x_off, gint y_off ); void vik_viewport_clear ( VikViewport *vvp ); void vik_viewport_draw_pixbuf_with_alpha ( VikViewport *vvp, GdkPixbuf *pixbuf, gint alpha, gint src_x, gint src_y, gint dest_x, gint dest_y, gint w, gint h ); void vik_viewport_draw_pixbuf ( VikViewport *vvp, GdkPixbuf *pixbuf, gint src_x, gint src_y, gint dest_x, gint dest_y, gint w, gint h ); gint vik_viewport_get_width ( VikViewport *vvp ); gint vik_viewport_get_height ( VikViewport *vvp ); void vik_viewport_reset_copyrights ( VikViewport *vp ); void vik_viewport_add_copyright ( VikViewport *vp, const gchar *copyright ); void vik_viewport_reset_logos ( VikViewport *vp ); void vik_viewport_add_logo ( VikViewport *vp, const GdkPixbuf *logo ); /* Viewport features */ void vik_viewport_draw_scale ( VikViewport *vvp ); void vik_viewport_set_draw_scale ( VikViewport *vvp, gboolean draw_scale ); gboolean vik_viewport_get_draw_scale ( VikViewport *vvp ); void vik_viewport_draw_copyright ( VikViewport *vvp ); void vik_viewport_draw_centermark ( VikViewport *vvp ); void vik_viewport_set_draw_centermark ( VikViewport *vvp, gboolean draw_centermark ); gboolean vik_viewport_get_draw_centermark ( VikViewport *vvp ); void vik_viewport_draw_logo ( VikViewport *vvp ); void vik_viewport_set_draw_highlight ( VikViewport *vvp, gboolean draw_highlight ); gboolean vik_viewport_get_draw_highlight ( VikViewport *vvp ); /* Color/graphics context management */ void vik_viewport_set_background_color ( VikViewport *vvp, const gchar *color ); const gchar *vik_viewport_get_background_color ( VikViewport *vvp ); GdkColor *vik_viewport_get_background_gdkcolor ( VikViewport *vvp ); void vik_viewport_set_background_gdkcolor ( VikViewport *vvp, GdkColor * ); void vik_gc_get_fg_color ( GdkGC *gc, GdkColor *dest ); /* warning: could be slow, don't use obsessively */ GdkGC *vik_viewport_new_gc ( VikViewport *vvp, const gchar *colorname, gint thickness ); GdkGC *vik_viewport_new_gc_from_color ( VikViewport *vvp, GdkColor *color, gint thickness ); GdkFunction vik_gc_get_function ( GdkGC *gc ); void vik_viewport_set_highlight_color ( VikViewport *vvp, const gchar *color ); const gchar *vik_viewport_get_highlight_color ( VikViewport *vvp ); GdkColor *vik_viewport_get_highlight_gdkcolor ( VikViewport *vvp ); void vik_viewport_set_highlight_gdkcolor ( VikViewport *vvp, GdkColor * ); GdkGC* vik_viewport_get_gc_highlight ( VikViewport *vvp ); void vik_viewport_set_highlight_thickness ( VikViewport *vvp, gint thickness ); /* Drawing primitives */ void a_viewport_clip_line ( gint *x1, gint *y1, gint *x2, gint *y2 ); /* run this before drawing a line. vik_viewport_draw_line runs it for you */ void vik_viewport_draw_line ( VikViewport *vvp, GdkGC *gc, gint x1, gint y1, gint x2, gint y2 ); void vik_viewport_draw_rectangle ( VikViewport *vvp, GdkGC *gc, gboolean filled, gint x1, gint y1, gint x2, gint y2 ); void vik_viewport_draw_string ( VikViewport *vvp, GdkFont *font, GdkGC *gc, gint x1, gint y1, const gchar *string ); void vik_viewport_draw_arc ( VikViewport *vvp, GdkGC *gc, gboolean filled, gint x, gint y, gint width, gint height, gint angle1, gint angle2 ); void vik_viewport_draw_polygon ( VikViewport *vvp, GdkGC *gc, gboolean filled, GdkPoint *points, gint npoints ); void vik_viewport_draw_layout ( VikViewport *vvp, GdkGC *gc, gint x, gint y, PangoLayout *layout ); /* Utilities */ void vik_viewport_compute_bearing ( VikViewport *vp, gint x1, gint y1, gint x2, gint y2, gdouble *angle, gdouble *baseangle ); G_END_DECLS #endif viking-1.4.2/src/icons/0000755000175000017500000000000012175546636011727 500000000000000viking-1.4.2/src/icons/icons.h0000644000175000017500000002523312175546636013140 00000000000000/* Generated file */ extern const GdkPixdata viking_pixbuf; extern const GdkPixdata bing_maps_pixbuf; extern const GdkPixdata addtr_18_pixbuf; extern const GdkPixdata vik_new_route_18_pixbuf; extern const GdkPixdata addwp_18_pixbuf; extern const GdkPixdata edtr_18_pixbuf; extern const GdkPixdata edwp_18_pixbuf; extern const GdkPixdata geomove_18_pixbuf; extern const GdkPixdata geozoom_18_pixbuf; extern const GdkPixdata mapdl_18_pixbuf; extern const GdkPixdata demdl_18_pixbuf; extern const GdkPixdata mover_22_pixbuf; extern const GdkPixdata ruler_18_pixbuf; extern const GdkPixdata showpic_18_pixbuf; extern const GdkPixdata zoom_18_pixbuf; extern const GdkPixdata route_finder_18_pixbuf; extern const GdkPixdata select_18_pixbuf; extern const GdkPixdata thumbnails_pixbuf; extern const GdkPixdata vikaggregatelayer_pixbuf; extern const GdkPixdata vikcoordlayer_pixbuf; extern const GdkPixdata vikdemlayer_pixbuf; extern const GdkPixdata vikgeoreflayer_pixbuf; extern const GdkPixdata vikgpslayer_pixbuf; extern const GdkPixdata vikmapslayer_pixbuf; extern const GdkPixdata viktrwlayer_pixbuf; extern const GdkPixdata wp_camp_pixbuf; extern const GdkPixdata wp_car_pixbuf; extern const GdkPixdata wp_deer_pixbuf; extern const GdkPixdata wp_flag_pixbuf; extern const GdkPixdata wp_geocache_pixbuf; extern const GdkPixdata wp_geocache_fnd_pixbuf; extern const GdkPixdata wp_house_pixbuf; extern const GdkPixdata wp_wpt_dot_pixbuf; extern const GdkPixdata wp_dollar_pixbuf; extern const GdkPixdata wp_golf_pixbuf; extern const GdkPixdata wp_summit_pixbuf; extern const GdkPixdata wp_anchor_pixbuf; extern const GdkPixdata wp_forest_pixbuf; extern const GdkPixdata wp_parking_pixbuf; extern const GdkPixdata wp_sml_cty_pixbuf; extern const GdkPixdata wp_med_cty_pixbuf; extern const GdkPixdata wp_lrg_cty_pixbuf; extern const GdkPixdata wp_cap_cty_pixbuf; extern const GdkPixdata wp_bell_pixbuf; extern const GdkPixdata wp_diamond_grn_pixbuf; extern const GdkPixdata wp_diamond_red_pixbuf; extern const GdkPixdata wp_dive1_pixbuf; extern const GdkPixdata wp_dive2_pixbuf; extern const GdkPixdata wp_fish_pixbuf; extern const GdkPixdata wp_fuel_pixbuf; extern const GdkPixdata wp_horn_pixbuf; extern const GdkPixdata wp_knife_pixbuf; extern const GdkPixdata wp_light_pixbuf; extern const GdkPixdata wp_mug_pixbuf; extern const GdkPixdata wp_skull_pixbuf; extern const GdkPixdata wp_square_grn_pixbuf; extern const GdkPixdata wp_square_red_pixbuf; extern const GdkPixdata wp_wbuoy_pixbuf; extern const GdkPixdata wp_wreck_pixbuf; extern const GdkPixdata wp_null_pixbuf; extern const GdkPixdata wp_mine_pixbuf; extern const GdkPixdata wp_school_pixbuf; extern const GdkPixdata wp_cemetery_pixbuf; extern const GdkPixdata wp_church_pixbuf; extern const GdkPixdata wp_military_pixbuf; extern const GdkPixdata wp_mob_pixbuf; extern const GdkPixdata wp_buoy_ambr_pixbuf; extern const GdkPixdata wp_buoy_blck_pixbuf; extern const GdkPixdata wp_buoy_blue_pixbuf; extern const GdkPixdata wp_buoy_grn_pixbuf; extern const GdkPixdata wp_buoy_grn_red_pixbuf; extern const GdkPixdata wp_buoy_grn_wht_pixbuf; extern const GdkPixdata wp_buoy_orng_pixbuf; extern const GdkPixdata wp_buoy_red_pixbuf; extern const GdkPixdata wp_buoy_red_grn_pixbuf; extern const GdkPixdata wp_buoy_red_wht_pixbuf; extern const GdkPixdata wp_buoy_violet_pixbuf; extern const GdkPixdata wp_buoy_wht_pixbuf; extern const GdkPixdata wp_buoy_wht_grn_pixbuf; extern const GdkPixdata wp_buoy_wht_red_pixbuf; extern const GdkPixdata wp_dot_pixbuf; extern const GdkPixdata wp_rbcn_pixbuf; extern const GdkPixdata wp_boat_ramp_pixbuf; extern const GdkPixdata wp_restroom_pixbuf; extern const GdkPixdata wp_shower_pixbuf; extern const GdkPixdata wp_drinking_wtr_pixbuf; extern const GdkPixdata wp_phone_pixbuf; extern const GdkPixdata wp_1st_aid_pixbuf; extern const GdkPixdata wp_info_pixbuf; extern const GdkPixdata wp_park_pixbuf; extern const GdkPixdata wp_picnic_pixbuf; extern const GdkPixdata wp_scenic_pixbuf; extern const GdkPixdata wp_skiing_pixbuf; extern const GdkPixdata wp_swimming_pixbuf; extern const GdkPixdata wp_dam_pixbuf; extern const GdkPixdata wp_controlled_pixbuf; extern const GdkPixdata wp_danger_pixbuf; extern const GdkPixdata wp_restricted_pixbuf; extern const GdkPixdata wp_ball_pixbuf; extern const GdkPixdata wp_rv_park_pixbuf; extern const GdkPixdata wp_bridge_pixbuf; extern const GdkPixdata wp_building_pixbuf; extern const GdkPixdata wp_tunnel_pixbuf; extern const GdkPixdata wp_beach_pixbuf; extern const GdkPixdata wp_airplane_pixbuf; extern const GdkPixdata wp_ice_skating_pixbuf; extern const GdkPixdata wp_1st_aid_large_pixbuf; extern const GdkPixdata wp_airplane_large_pixbuf; extern const GdkPixdata wp_amuse_pk_large_pixbuf; extern const GdkPixdata wp_anchor_large_pixbuf; extern const GdkPixdata wp_ball_large_pixbuf; extern const GdkPixdata wp_beach_large_pixbuf; extern const GdkPixdata wp_bell_large_pixbuf; extern const GdkPixdata wp_bike_trail_large_pixbuf; extern const GdkPixdata wp_block_blue_large_pixbuf; extern const GdkPixdata wp_block_green_large_pixbuf; extern const GdkPixdata wp_block_red_large_pixbuf; extern const GdkPixdata wp_boat_ramp_large_pixbuf; extern const GdkPixdata wp_bowling_large_pixbuf; extern const GdkPixdata wp_bridge_large_pixbuf; extern const GdkPixdata wp_building_large_pixbuf; extern const GdkPixdata wp_buoy_ambr_large_pixbuf; extern const GdkPixdata wp_buoy_blck_large_pixbuf; extern const GdkPixdata wp_buoy_blue_large_pixbuf; extern const GdkPixdata wp_buoy_grn_large_pixbuf; extern const GdkPixdata wp_buoy_grn_red_large_pixbuf; extern const GdkPixdata wp_buoy_grn_wht_large_pixbuf; extern const GdkPixdata wp_buoy_orng_large_pixbuf; extern const GdkPixdata wp_buoy_red_grn_large_pixbuf; extern const GdkPixdata wp_buoy_red_large_pixbuf; extern const GdkPixdata wp_buoy_red_wht_large_pixbuf; extern const GdkPixdata wp_buoy_violet_large_pixbuf; extern const GdkPixdata wp_buoy_wht_grn_large_pixbuf; extern const GdkPixdata wp_buoy_wht_large_pixbuf; extern const GdkPixdata wp_buoy_wht_red_large_pixbuf; extern const GdkPixdata wp_camp_large_pixbuf; extern const GdkPixdata wp_car_large_pixbuf; extern const GdkPixdata wp_car_rental_large_pixbuf; extern const GdkPixdata wp_car_repair_large_pixbuf; extern const GdkPixdata wp_cemetery_large_pixbuf; extern const GdkPixdata wp_church_large_pixbuf; extern const GdkPixdata wp_civil_large_pixbuf; extern const GdkPixdata wp_controlled_large_pixbuf; extern const GdkPixdata wp_conv_store_large_pixbuf; extern const GdkPixdata wp_crossing_large_pixbuf; extern const GdkPixdata wp_dam_large_pixbuf; extern const GdkPixdata wp_danger_large_pixbuf; extern const GdkPixdata wp_deer_large_pixbuf; extern const GdkPixdata wp_dive1_large_pixbuf; extern const GdkPixdata wp_dive2_large_pixbuf; extern const GdkPixdata wp_dollar_large_pixbuf; extern const GdkPixdata wp_drinking_wtr_large_pixbuf; extern const GdkPixdata wp_fastfood_large_pixbuf; extern const GdkPixdata wp_fhs_facility_large_pixbuf; extern const GdkPixdata wp_fish_large_pixbuf; extern const GdkPixdata wp_fitness_large_pixbuf; extern const GdkPixdata wp_flag_blue_large_pixbuf; extern const GdkPixdata wp_flag_green_large_pixbuf; extern const GdkPixdata wp_flag_red_large_pixbuf; extern const GdkPixdata wp_forest_large_pixbuf; extern const GdkPixdata wp_fuel_large_pixbuf; extern const GdkPixdata wp_geocache_fnd_large_pixbuf; extern const GdkPixdata wp_geocache_large_pixbuf; extern const GdkPixdata wp_glider_large_pixbuf; extern const GdkPixdata wp_golf_large_pixbuf; extern const GdkPixdata wp_grnd_trans_large_pixbuf; extern const GdkPixdata wp_horn_large_pixbuf; extern const GdkPixdata wp_house_large_pixbuf; extern const GdkPixdata wp_ice_skating_large_pixbuf; extern const GdkPixdata wp_info_large_pixbuf; extern const GdkPixdata wp_knife_large_pixbuf; extern const GdkPixdata wp_light_large_pixbuf; extern const GdkPixdata wp_lodging_large_pixbuf; extern const GdkPixdata wp_lrg_cty_large_pixbuf; extern const GdkPixdata wp_med_cty_large_pixbuf; extern const GdkPixdata wp_mine_large_pixbuf; extern const GdkPixdata wp_mob_large_pixbuf; extern const GdkPixdata wp_movie_large_pixbuf; extern const GdkPixdata wp_mug_large_pixbuf; extern const GdkPixdata wp_museum_large_pixbuf; extern const GdkPixdata wp_oil_field_large_pixbuf; extern const GdkPixdata wp_parachute_large_pixbuf; extern const GdkPixdata wp_parking_large_pixbuf; extern const GdkPixdata wp_park_large_pixbuf; extern const GdkPixdata wp_pharmacy_large_pixbuf; extern const GdkPixdata wp_phone_large_pixbuf; extern const GdkPixdata wp_picnic_large_pixbuf; extern const GdkPixdata wp_pin_blue_large_pixbuf; extern const GdkPixdata wp_pin_green_large_pixbuf; extern const GdkPixdata wp_pin_red_large_pixbuf; extern const GdkPixdata wp_pizza_large_pixbuf; extern const GdkPixdata wp_police_large_pixbuf; extern const GdkPixdata wp_post_ofc_large_pixbuf; extern const GdkPixdata wp_rbcn_large_pixbuf; extern const GdkPixdata wp_restricted_large_pixbuf; extern const GdkPixdata wp_restroom_large_pixbuf; extern const GdkPixdata wp_rv_park_large_pixbuf; extern const GdkPixdata wp_scenic_large_pixbuf; extern const GdkPixdata wp_school_large_pixbuf; extern const GdkPixdata wp_shopping_large_pixbuf; extern const GdkPixdata wp_short_tower_large_pixbuf; extern const GdkPixdata wp_shower_large_pixbuf; extern const GdkPixdata wp_skiing_large_pixbuf; extern const GdkPixdata wp_ski_resort_large_pixbuf; extern const GdkPixdata wp_skull_large_pixbuf; extern const GdkPixdata wp_sml_cty_large_pixbuf; extern const GdkPixdata wp_stadium_large_pixbuf; extern const GdkPixdata wp_store_large_pixbuf; extern const GdkPixdata wp_summit_large_pixbuf; extern const GdkPixdata wp_swimming_large_pixbuf; extern const GdkPixdata wp_tall_tower_large_pixbuf; extern const GdkPixdata wp_theater_large_pixbuf; extern const GdkPixdata wp_toll_booth_large_pixbuf; extern const GdkPixdata wp_trail_head_large_pixbuf; extern const GdkPixdata wp_truck_stop_large_pixbuf; extern const GdkPixdata wp_tunnel_large_pixbuf; extern const GdkPixdata wp_ultralight_large_pixbuf; extern const GdkPixdata wp_wbuoy_large_pixbuf; extern const GdkPixdata wp_weigh_station_large_pixbuf; extern const GdkPixdata wp_wrecker_large_pixbuf; extern const GdkPixdata wp_wreck_large_pixbuf; extern const GdkPixdata wp_zoo_large_pixbuf; extern const GdkPixdata cursor_addtr_pixbuf; extern const GdkPixdata cursor_new_route_pixbuf; extern const GdkPixdata cursor_edtr_pixbuf; extern const GdkPixdata cursor_geozoom_pixbuf; extern const GdkPixdata cursor_ruler_pixbuf; extern const GdkPixdata cursor_addwp_pixbuf; extern const GdkPixdata cursor_edwp_pixbuf; extern const GdkPixdata cursor_route_finder_pixbuf; extern const GdkPixdata cursor_showpic_pixbuf; extern const GdkPixdata cursor_demdl_pixbuf; extern const GdkPixdata cursor_geomove_pixbuf; extern const GdkPixdata cursor_mapdl_pixbuf; extern const GdkPixdata cursor_zoom_pixbuf; viking-1.4.2/src/icons/wp_knife.png0000644000175000017500000000020111166174146014140 00000000000000PNG  IHDRVΎWHIDAT8c`1?Y]B )6PbP#x.E芈q6p!`0 FZIENDB`viking-1.4.2/src/icons/wp_block_green_large.png0000644000175000017500000000122211166174146016474 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME $2`IDATHWYڣ0 |s#s&gJT);`2KyI,yai׊/]>yhٖhEx۶F@`/5SuFP %P,qe"x%Fq6 $QZI8/BaODH5df Ĝ?HP< FuxXJ/CZkoI㸗Fx< V1U 15seB{^I>A ^BajfWG:̹#ZV0i_)S=GRȑB&{j28SLKX0Pxf!A@$JNdZJ'%T?'xs7nd= E@M㶿cĜ艜YqOky#F\\zh0J7ؗ׻̽E,0t ۑtO kV{3N\ qb\{Kx]]!U"1bM+>̀s~IENDB`viking-1.4.2/src/icons/vikmapslayer.png0000644000175000017500000000063411166174146015057 00000000000000PNG  IHDRh6sBITOTIDAT(PJQ=wl`_PE*(7$;mjעM=CڴlPP"1S(pfè4pse_u_!&UvnjfW̞qY?GtnF5 h,w["k9daM.Pf6e2V`i&\PYS;nQi $;’-U+τoE 2wS\CĿY9D`wy=,2Gﶯ0ɉjJX,糟ECRYdRT0AVxVS3lrC0f{ʖZ/$ÓQV!XYngj"2cMLJ N9j\Z4L64ۼfm/f7ىeM^*u8>{=b]_q=X^qfjSW3ձYY!{;8t^È|1ϼ.${@ 1yߏ3^8XzH4ՏBf_}I>>FxwIENDB`viking-1.4.2/src/icons/icons.c0000644000175000017500000002010412175546636013123 00000000000000/* Generated file */ #include #include "addtr_18_pixmap.h" #include "addwp_18_pixmap.h" #include "begintr_18_pixmap.h" #include "bing_maps_pixmap.h" #include "cursor_addtr_pixmap.h" #include "cursor_addwp_pixmap.h" #include "cursor_begintr_pixmap.h" #include "cursor_demdl_pixmap.h" #include "cursor_edtr_pixmap.h" #include "cursor_edwp_pixmap.h" #include "cursor_geomove_pixmap.h" #include "cursor_geozoom_pixmap.h" #include "cursor_mapdl_pixmap.h" #include "cursor_new_route_pixmap.h" #include "cursor_route_finder_pixmap.h" #include "cursor_ruler_pixmap.h" #include "cursor_showpic_pixmap.h" #include "cursor_zoom_pixmap.h" #include "demdl_18_pixmap.h" #include "edtr_18_pixmap.h" #include "edwp_18_pixmap.h" #include "geomove_18_pixmap.h" #include "geozoom_18_pixmap.h" #include "mapdl_18_pixmap.h" #include "mover_22_pixmap.h" #include "route_finder_18_pixmap.h" #include "ruler_18_pixmap.h" #include "select_18_pixmap.h" #include "showpic_18_pixmap.h" #include "thumbnails_pixmap.h" #include "vikaggregatelayer_pixmap.h" #include "vikcoordlayer_pixmap.h" #include "vikdemlayer_pixmap.h" #include "vikgeoreflayer_pixmap.h" #include "vikgpslayer_pixmap.h" #include "viking_pixmap.h" #include "vikmapslayer_pixmap.h" #include "vik_new_route_18_pixmap.h" #include "viktrwlayer_pixmap.h" #include "wp_1st_aid_large_pixmap.h" #include "wp_1st_aid_pixmap.h" #include "wp_airplane_large_pixmap.h" #include "wp_airplane_pixmap.h" #include "wp_amuse_pk_large_pixmap.h" #include "wp_anchor_large_pixmap.h" #include "wp_anchor_pixmap.h" #include "wp_ball_large_pixmap.h" #include "wp_ball_pixmap.h" #include "wp_beach_large_pixmap.h" #include "wp_beach_pixmap.h" #include "wp_bell_large_pixmap.h" #include "wp_bell_pixmap.h" #include "wp_bike_trail_large_pixmap.h" #include "wp_block_blue_large_pixmap.h" #include "wp_block_green_large_pixmap.h" #include "wp_block_red_large_pixmap.h" #include "wp_boat_ramp_large_pixmap.h" #include "wp_boat_ramp_pixmap.h" #include "wp_bowling_large_pixmap.h" #include "wp_bridge_large_pixmap.h" #include "wp_bridge_pixmap.h" #include "wp_building_large_pixmap.h" #include "wp_building_pixmap.h" #include "wp_buoy_ambr_large_pixmap.h" #include "wp_buoy_ambr_pixmap.h" #include "wp_buoy_blck_large_pixmap.h" #include "wp_buoy_blck_pixmap.h" #include "wp_buoy_blue_large_pixmap.h" #include "wp_buoy_blue_pixmap.h" #include "wp_buoy_grn_large_pixmap.h" #include "wp_buoy_grn_pixmap.h" #include "wp_buoy_grn_red_large_pixmap.h" #include "wp_buoy_grn_red_pixmap.h" #include "wp_buoy_grn_wht_large_pixmap.h" #include "wp_buoy_grn_wht_pixmap.h" #include "wp_buoy_orng_large_pixmap.h" #include "wp_buoy_orng_pixmap.h" #include "wp_buoy_red_grn_large_pixmap.h" #include "wp_buoy_red_grn_pixmap.h" #include "wp_buoy_red_large_pixmap.h" #include "wp_buoy_red_pixmap.h" #include "wp_buoy_red_wht_large_pixmap.h" #include "wp_buoy_red_wht_pixmap.h" #include "wp_buoy_violet_large_pixmap.h" #include "wp_buoy_violet_pixmap.h" #include "wp_buoy_wht_grn_large_pixmap.h" #include "wp_buoy_wht_grn_pixmap.h" #include "wp_buoy_wht_large_pixmap.h" #include "wp_buoy_wht_pixmap.h" #include "wp_buoy_wht_red_large_pixmap.h" #include "wp_buoy_wht_red_pixmap.h" #include "wp_camp_large_pixmap.h" #include "wp_camp_pixmap.h" #include "wp_cap_cty_pixmap.h" #include "wp_car_large_pixmap.h" #include "wp_car_pixmap.h" #include "wp_car_rental_large_pixmap.h" #include "wp_car_repair_large_pixmap.h" #include "wp_cemetery_large_pixmap.h" #include "wp_cemetery_pixmap.h" #include "wp_church_large_pixmap.h" #include "wp_church_pixmap.h" #include "wp_civil_large_pixmap.h" #include "wp_controlled_large_pixmap.h" #include "wp_controlled_pixmap.h" #include "wp_conv_store_large_pixmap.h" #include "wp_crossing_large_pixmap.h" #include "wp_dam_large_pixmap.h" #include "wp_dam_pixmap.h" #include "wp_danger_large_pixmap.h" #include "wp_danger_pixmap.h" #include "wp_deer_large_pixmap.h" #include "wp_deer_pixmap.h" #include "wp_diamond_grn_pixmap.h" #include "wp_diamond_red_pixmap.h" #include "wp_dive1_large_pixmap.h" #include "wp_dive1_pixmap.h" #include "wp_dive2_large_pixmap.h" #include "wp_dive2_pixmap.h" #include "wp_dollar_large_pixmap.h" #include "wp_dollar_pixmap.h" #include "wp_dot_pixmap.h" #include "wp_drinking_wtr_large_pixmap.h" #include "wp_drinking_wtr_pixmap.h" #include "wp_exit_large_pixmap.h" #include "wp_fastfood_large_pixmap.h" #include "wp_fhs_facility_large_pixmap.h" #include "wp_fish_large_pixmap.h" #include "wp_fish_pixmap.h" #include "wp_fitness_large_pixmap.h" #include "wp_flag_blue_large_pixmap.h" #include "wp_flag_green_large_pixmap.h" #include "wp_flag_pixmap.h" #include "wp_flag_red_large_pixmap.h" #include "wp_forest_large_pixmap.h" #include "wp_forest_pixmap.h" #include "wp_fuel_large_pixmap.h" #include "wp_fuel_pixmap.h" #include "wp_geocache_fnd_large_pixmap.h" #include "wp_geocache_fnd_pixmap.h" #include "wp_geocache_large_pixmap.h" #include "wp_geocache_pixmap.h" #include "wp_glider_large_pixmap.h" #include "wp_golf_large_pixmap.h" #include "wp_golf_pixmap.h" #include "wp_grnd_trans_large_pixmap.h" #include "wp_helipad_large_pixmap.h" #include "wp_horn_large_pixmap.h" #include "wp_horn_pixmap.h" #include "wp_house_large_pixmap.h" #include "wp_house_pixmap.h" #include "wp_ice_skating_large_pixmap.h" #include "wp_ice_skating_pixmap.h" #include "wp_info_large_pixmap.h" #include "wp_info_pixmap.h" #include "wp_knife_large_pixmap.h" #include "wp_knife_pixmap.h" #include "wp_light_large_pixmap.h" #include "wp_light_pixmap.h" #include "wp_lodging_large_pixmap.h" #include "wp_lrg_cty_large_pixmap.h" #include "wp_lrg_cty_pixmap.h" #include "wp_med_cty_large_pixmap.h" #include "wp_med_cty_pixmap.h" #include "wp_military_pixmap.h" #include "wp_mine_large_pixmap.h" #include "wp_mine_pixmap.h" #include "wp_mob_large_pixmap.h" #include "wp_mob_pixmap.h" #include "wp_movie_large_pixmap.h" #include "wp_mug_large_pixmap.h" #include "wp_mug_pixmap.h" #include "wp_museum_large_pixmap.h" #include "wp_null_pixmap.h" #include "wp_oil_field_large_pixmap.h" #include "wp_parachute_large_pixmap.h" #include "wp_parking_large_pixmap.h" #include "wp_parking_pixmap.h" #include "wp_park_large_pixmap.h" #include "wp_park_pixmap.h" #include "wp_pharmacy_large_pixmap.h" #include "wp_phone_large_pixmap.h" #include "wp_phone_pixmap.h" #include "wp_picnic_large_pixmap.h" #include "wp_picnic_pixmap.h" #include "wp_pin_blue_large_pixmap.h" #include "wp_pin_green_large_pixmap.h" #include "wp_pin_red_large_pixmap.h" #include "wp_pizza_large_pixmap.h" #include "wp_police_large_pixmap.h" #include "wp_post_ofc_large_pixmap.h" #include "wp_rbcn_large_pixmap.h" #include "wp_rbcn_pixmap.h" #include "wp_restricted_large_pixmap.h" #include "wp_restricted_pixmap.h" #include "wp_restroom_large_pixmap.h" #include "wp_restroom_pixmap.h" #include "wp_rv_park_large_pixmap.h" #include "wp_rv_park_pixmap.h" #include "wp_scenic_large_pixmap.h" #include "wp_scenic_pixmap.h" #include "wp_school_large_pixmap.h" #include "wp_school_pixmap.h" #include "wp_shopping_large_pixmap.h" #include "wp_short_tower_large_pixmap.h" #include "wp_shower_large_pixmap.h" #include "wp_shower_pixmap.h" #include "wp_skiing_large_pixmap.h" #include "wp_skiing_pixmap.h" #include "wp_ski_resort_large_pixmap.h" #include "wp_skull_large_pixmap.h" #include "wp_skull_pixmap.h" #include "wp_sml_cty_large_pixmap.h" #include "wp_sml_cty_pixmap.h" #include "wp_square_grn_pixmap.h" #include "wp_square_red_pixmap.h" #include "wp_stadium_large_pixmap.h" #include "wp_store_large_pixmap.h" #include "wp_summit_large_pixmap.h" #include "wp_summit_pixmap.h" #include "wp_swimming_large_pixmap.h" #include "wp_swimming_pixmap.h" #include "wp_tall_tower_large_pixmap.h" #include "wp_theater_large_pixmap.h" #include "wp_toll_booth_large_pixmap.h" #include "wp_trail_head_large_pixmap.h" #include "wp_truck_stop_large_pixmap.h" #include "wp_tunnel_large_pixmap.h" #include "wp_tunnel_pixmap.h" #include "wp_ultralight_large_pixmap.h" #include "wp_wbuoy_large_pixmap.h" #include "wp_wbuoy_pixmap.h" #include "wp_weigh_station_large_pixmap.h" #include "wp_wpt_dot_pixmap.h" #include "wp_wrecker_large_pixmap.h" #include "wp_wreck_large_pixmap.h" #include "wp_wreck_pixmap.h" #include "wp_zoo_large_pixmap.h" #include "zoom_18_pixmap.h" viking-1.4.2/src/icons/bing_maps.png0000644000175000017500000001030712120725153014274 00000000000000PNG  IHDR])`gAMA7tEXtSoftwareAdobe ImageReadyqe<YIDATxZ tT̖eC A"U $(**@@AF+(bՈE`B $('3}}/w~rGh zZ/.{yy_&O lyyy :=Wj~W* 9~aTy>ZqÉ>$$`./r𨀿\(Pell6>x<uAj/ծD1BtZ"""BCCR>VSScZhnspp  Lᨇ+NR)S{% JK[R qcqqz>ZXFLo!ZkysT l\p~'; ћL)R%'?O}|*>Is*jPt!9E̵9:Z`P3xz`P>`nwK:xVWԬ\3 Ƃ997b|yqEFFz43/%hYR*毯YN.0Щǀ`W(@bq0 9 `~AFѴ`UCe Y ;%/1W7v[(dйH4oxFVY.&fD-q}^,IiȠց=^B`@W bx9Ѐl#&CI9WU:we?ٱwT\ wuԉT$bB -!PE^0&DÚlTT@uui.4Vxqʑ79B]^QgB ϏlÌm(/Z>EӈyBLb,k"%krh!z(#n>ЋdqO>C%@vµ;vګWQM{5DR-lG0j֭ZGFF vՉ'fe=IKvv~c+E= a: F.X(}n`ǨOkyaa 0`s۶mҡCT]# "#ڣK'R[ome @40Pi%'o\O~bceee=#G$&vUUּXd~WWAuR>ŵ曓^g`<蝣Fݫ6@9mZ_ +} vqbG;e/JIIнҩ^Y,aj+9rl~oNE8"1`< 441;fWoPwA(9}l]ׯK15uX{ϔOt횐/\pSN?n}h| 8€N:tH*и#GmS'0*nÜm\BzINN~@ϝ; yGZk*COK/|0=}Tӥe2L[N^vb0Ȉ̜uȑGŗ)0a_5A*kzݳ-[>1)gik׭JK;@?CUN(F%Ϙ9=` TҤ],~c;p`qȪCy(1n[Ƶl#Ǟ9󡬂ώϜێq2!t,.\v.Sx`~>W1vl3Ν+a ѻ;;LdXk6mk1u%;wE~>ძswJJȷraB> msڥVn7iR 8[{"U.!ю!٬UWd FU3;t !( -oԀ_?c%%QMKj1UU,_d+|?gϞ!h5uʇer'Qv ƨdv6Z ͎,ޣ#w0g|AJkkc33+߿ T26m[Y3f< K1zVb'O tb99uJ'=pWfP ˧MeڧOr]veQԖ-#77{/Fft?"!?+ogԣGmٳg'99ُt$hpd#ƻJUU9s@ 8h(,ZbS%+<>Ü7?QG22߿_J RL.A[B۵kt2 ҉caՌ33Y .N4z1#FudN6e NyQEEK=?ջ N̫ĝEktDBnF9ѳt⒗^}9(豈fq⤉32dHObbIwT/҅xXТٹϬڜu=#zk#+M1,cbS[c=mSPzGWJ-X$c kjjEvku,AcWz)"%[Z֭~{<&>}ogA1 tjc; 2: b׬ eB8(F߽{G*cYTV+E<}y@³ ֥YkgV8qS@1-[i@9Gjc(L~(.` 2չYR/,65)Em_IF*{ ,r\Ȯ`|J:Yha1'k\0-%:(C̬۳́<ֱ8x'*2r"9i Ktψ.<04 8 'hŃ~}7Jr$cu,'ߊyyJJ2JVeyk)K|}Ջq<xy*%KꅢDq`s Oɐ` >-E̬cSv^rtLi1=0T|ZG;҂u9'IENDB`viking-1.4.2/src/icons/wp_ultralight_large.png0000644000175000017500000000054211166174146016405 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME ']CIDATHK D=QnDDDT4]Bn d7D3~CD@*) $8Xi($Q6/""d?Qs:U4LЊ} р*y,O%>Ph8ClԉD]WEWR R$`9JֺxJVG{%R~C2(j >=IENDB`viking-1.4.2/src/icons/wp_school.png0000644000175000017500000000023511166174146014342 00000000000000PNG  IHDRVΎWdIDAT8QA 0ҟ)Y01Zjc !Z+V\&FHH>kϨ}J,X3˾h&gFR>l-T*q#>IENDB`viking-1.4.2/src/icons/wp_skull_large.png0000644000175000017500000000071511166174146015362 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME MIDATHW[ ;5̚tM%i'39@f;? O2afnFZk?t_(^a4jI-+X2L)RpaGDC`-ȳ^_IiV.RJc}fڍmۆ\{ֺ|LYuL&+#Zj|󨮇qlXV 8c^9Cy9+2XPi-nEKğ\}_#d:x2pci5VG>ulFjqw:Y^E޹RhOϟǰxr _xף 嬣}]x IENDB`viking-1.4.2/src/icons/wp_ski_resort_large.png0000644000175000017500000000127111166174146016412 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME  ".X9IDATHW[ FgrDu& ޑv)6L\1FJ1dp{Vg"?yZ_pG`@` ArLH61p Te?1 {YDՆ/mexLיu7xyĴR\c,Qxkwr0 _fS:a~c) u~u?" 9|L8ߞ#Zr@le Jshc}ZR_{~]ǓH1&Z)َh-soIENDB`viking-1.4.2/src/icons/wp_car_rental_large.png0000644000175000017500000000074611166174146016346 00000000000000PNG  IHDR M )sRGBbKGD pHYs  tIME  )fIDATHWۍ t4WS\&G/6|B < pssཿp0tRw$Uh"+޻K%yBt0߁w{#ށmf$@7s3'TXEO#oAByrȈt3n~so ͛,Ae5+c0/݊4LŃ:ѺL{GKnA.q^$$f@MŔ@򜁄h~,*C&2y i~gLBVǍ檙261DgSm~ *B}.,s4PbݭLXvk&XC(Sx1w5>||A$ ڟ ^*)UUs7DKZxLIENDB`viking-1.4.2/src/icons/wp_buoy_red_grn_large.png0000644000175000017500000000060311166174146016702 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME  IDATH[ E/fvD4{tM8614zDwljB|nj 4WX .z: ݲsw"J㭦Zj橥6КD{zȓEX'Mbh>|G|2d-br]GDI!vc;S y"k35.k~x;]=9o)Gk.|iʼ ]Uf|Te-/}l$%IENDB`viking-1.4.2/src/icons/wp_shower_large.png0000644000175000017500000000100011166174146015523 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME  5;IDATHW[0=8YS&DĘv(3N *p TRUUH'TtdE1mW _),R# }W}|_o_ };9mQN4D TQ|CU{ iv?. r0wD'pHq<4)sP_;yzt}CQay`%yq TRruzyq>tzGndeu'o`  / ze"&CIENDB`viking-1.4.2/src/icons/wp_grnd_trans_large.png0000644000175000017500000000067312175546146016400 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME &2;;IDATHVK0}8=)9S9]& ELTC|H̾xe3.6F)5Ed6|pz`P@_tα;-䐱@U_/P8@` >g82tPQۉ9dRƨ>seu[V+wlUmfW{j23^-KZ7+SnN'5]s'h֮Q0 4 IS}oȯ9c;H7Mܨ? :aSIENDB`viking-1.4.2/src/icons/wp_police_large.png0000644000175000017500000000061511166174146015502 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME " .,g IDATHWm E3™؏D m6) iPQ:f+E ι٭L<>Vwn1ND!EZ&.~n,R63#"=u[wnq✿q9NB\$ \ղX{GGj; gb|D"Uf_N:шej"B+Wgg eq.?-zz[<IENDB`viking-1.4.2/src/icons/wp_post_ofc_large.png0000644000175000017500000000066511166174146016050 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME $%v5IDATHVQ 3OFL33g(TFn&mJq_{w fQ6}4jRB' uHB  ⶞T?c#$5;P5f=\@@nlS>pnz$Ý{NUcV^pA ;h<0yVF-v ?O5giޯߣqIB*U],լ6Bm@F6c<0׃kqUF6E[BoxfcAڤg5ڴjpix_:K$P̳y?Y+RfNVIENDB`viking-1.4.2/src/icons/vikcoordlayer.png0000644000175000017500000000137311166174146015226 00000000000000PNG  IHDRasBIT|dIDAT8[hw_uZ#:E! P' *"Z/A`Z9ntt PWVg\m;4<69q>̵8MØ6y:IԮ!I~"$pvOMFB$f|5SشzДM8)IYe$MGW+wY8gV%.?7clXY07Yn4|l k'լrxX%sxA4;ӯ[Wm0#T]{_jr~IM+E,e 46pk~3?z ;/ MkG*[pU{~~>IҶMz, ZA}\A;n0voHtǡ!;3;4ٝ4E /֐=gQ,?]g.ELbZ9TUƐux=U.o];4K[Rv+]S5߇a %N1|e~e O)3DmMƄ{ _0qJIENDB`viking-1.4.2/src/icons/wp_buoy_wht_red_large.png0000644000175000017500000000063211166174146016720 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME  -IDATH՗Q DW3xٟ1Dl͒RJŽČHC$!N "$HDh{EB$"WM} z[AyH3+mr6 `4# º=% g܏[/?-uY-߾-ښp![87":&G\![]b/V"1sϖ HGl'[Ş&coߦ>nw;%W?m]lʑIENDB`viking-1.4.2/src/icons/wp_info_large.png0000644000175000017500000000077111166174146015165 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME +/)^yIDATHVkr \Fp&{&9{B53> a  j >o!LTsxTM2(T$6iRMeqDD "I{Bƅ6!HX{F#WuJ fLI&L?H8q a3#H6\֪ a:[j l|mhPvΡyH\79fgt@o '=!й_xG~YǧU덯8^UzxO.gu\#="O`9:ָnQru'NHj)#7 N:~ˬ;DgZ]f]7 /3St-y*k_o EIENDB`viking-1.4.2/src/icons/wp_toll_booth_large.png0000644000175000017500000000047711166174146016402 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME %ʈOIDATHQ DwMoI:g?)RhdV> C0HPS!KTBz,⚔-5X.q˽;c&%IyTϢ QxuKwfb?JdKVe4R?bYm^:Kl ^LD 'b[i!x51sJ>]ݛxyeO"_fnIENDB`viking-1.4.2/src/icons/wp_flag.png0000644000175000017500000000045111166174146013764 00000000000000PNG  IHDRVΎWbKGDE!w pHYs  tIME JtEXtCommentCreated with The GIMPd%nIDAT8cd;;Ä&\N6fB`"ﰊ3r 1twvgbAD{[<a1G3twv ]ˆ (6ɓXɓ9-l0R1Ɂ= rĂ-<̰a 5''5IENDB`viking-1.4.2/src/icons/wp_beach_large.png0000644000175000017500000000070711166174146015273 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME $kmGIDATH͗Q D3LH*O eDWi9JD\n^@ūH:b4+}_h|J8kWc4jljxΓù- !|/}ՆaZN AOUCZV /9" qLJPΣw\Z"ix.W.j? b+>]E S4*cQ9j#Ѿ76=7H+sdv^<=n)qoq"b|RT2@yupg/h1I>ՒT-|{Ot0jIENDB`viking-1.4.2/src/icons/edtr_18.png0000644000175000017500000000067411166174146013622 00000000000000PNG  IHDRVΎWbKGDm pHYs  tIME ;$KtEXtCommentCreated with The GIMPd%n IDAT8˝m00\H `WV l@7 UK+B;p*F$9{= R xx:>g(J5̂]ݝIߋb9nbVr|_BA`ZRDJިCC&7Ks!8#ݚ byiUZ, p+1QsIENDB`viking-1.4.2/src/icons/wp_geocache.png0000644000175000017500000000105511166174146014612 00000000000000PNG  IHDRVΎWbKGDC pHYs  tIME  ;tEXtCommentCreated with The GIMPd%nIDAT8˕1k@W2QC'2!C/ 'At@!k]%H;I(i űC㒜{^~#8`s߲,N8bۇls6 %S߄g2"S" b7>431MR(/ZEM PnTb7@E(7:e E 80C94F ZKl"kL9d~<$a<BHK&il !#sq{U @Ϥp!)-_Z}=~1^uQ͸sIENDB`viking-1.4.2/src/icons/wp_crossing_large.png0000644000175000017500000000073711166174146016063 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME 2.r_IDATHŗa F8-=ӼJ)PtIb (:FٴF\ 2ʦE YX!<<g#-{ȑ\_:sIpy$/uAC|'5?u}0\LaMz=OoN%B+ů{oxDjڏOGyʙjvuεvSY:?yuCZj/vΨ~y~,UN]G*3vIreÓ<5Uд4V)lFq]qo{QQIENDB`viking-1.4.2/src/icons/wp_boat_ramp.png0000644000175000017500000000026411166174146015021 00000000000000PNG  IHDRVΎW{IDAT8 D8XpĎfrkG=(+" ]d@Vr޶LacX R}ݼL2*6FY6azg35[B%lO0Ca uovHIENDB`viking-1.4.2/src/icons/wp_summit.png0000644000175000017500000000046611166174146014377 00000000000000PNG  IHDRVΎWbKGD pHYs  tIME 4*tEXtCommentCreated with The GIMPd%nIDAT8 E.``֠0 T( -Q=8~Tu2 J)`fxZZ?YwJ:ZkH)7sNqC[®_bSOD03Db 4Tag}й_/R/Uo4VIENDB`viking-1.4.2/src/icons/wp_diamond_grn.png0000644000175000017500000000021711166174146015334 00000000000000PNG  IHDRVΎWVIDAT81 p2Gw3VFbT4T4U$2z[,T+B<"l\$M.bְv~mEN'u:IENDB`viking-1.4.2/src/icons/wp_boat_ramp_large.png0000644000175000017500000000121411166174146016167 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME $ i IDATHW[0 W9SzL̙C^Ҫ5Nb362̬^ɥxE," ۀj PD*w4[{;{31&vo#\OT͏a!7V>v; O?5b@Rjfx8@wüO0䜳76RP$T?>UptΌ"_>j& BP%R5-Oq1V6 uH8ASiF^1G ^^}X\brV3+}uw/ܫ]Lc݊C<͆lKiھpS1踽F]EΉs=~rY8ts#u[O Rǥ:GEO~>r=g1CKӟG-sTcEBHge>+-T/ó XFS28&9ǜ߭o_vY-Lx$?q>qtpm4[~7QIENDB`viking-1.4.2/src/icons/cursor_geozoom.png0000644000175000017500000000153411166174146015424 00000000000000PNG  IHDR szzbKGD pHYs  tIME 6"S}tEXtComment(c) 2000 Jakub 'Jimmac' Steiner This image was created using Gimp. Gimp is free software as defined by the Free Software Foundation and is available for download at http://www.gimp.orgFZ IDATXVK@} JA(JG .j\KqpJJҡRJc*t nBpLshI?&{}81s54^/T0PA0B # (4MC"pfp.IsϏ3n_ 4 $IFt4Oa`41Sc!NwAۥkZepܾ"?> i2k-u8@rb'ٴmY;-PXMonj2<^l}̾ɤj>z7a.b%$l&20 hS'Gjc&J)Y;>5WFI<#2$ʼ8Q\U*[1@:77X\-+:s+|Í߀ze\q?_r~Q,ϯ kIWv7+jmD3!fBr%@KO IENDB`viking-1.4.2/src/icons/wp_sml_cty.png0000644000175000017500000000032311166174146014523 00000000000000PNG  IHDRVΎWbKGD pHYs  tIME +}BntEXtCommentCreated with The GIMPd%n7IDAT8c`#%Lsqa$B1Q+A45(#tHIENDB`viking-1.4.2/src/icons/wp_mine_large.png0000644000175000017500000000062211166174146015155 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME 5rIDATHm Ft&ՙL/2ve) ?ySK"WX:t!d&\DRO"n|W79:ƋAf=& "sp5a!#"0F^[33xt%9[/2Ҏ˭{QfbnV$֝&qEs7^{j$ݴY-{*YK!SOW[5&>ޮM\M:>G9%w߾ $2GVgߓ{O}G5IDIENDB`viking-1.4.2/src/icons/wp_picnic.png0000644000175000017500000000016711166174146014324 00000000000000PNG  IHDRVΎW>IDAT8c`#0O>&BMP Zm# *G&ƋPI(\IENDB`viking-1.4.2/src/icons/wp_fastfood_large.png0000644000175000017500000000072011166174146016031 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME zԋPIDATHVA ;#M›7yn\O2Y1ey)ƗπUS{\%$$aG2n]R-iezgWPi9|@qA@Z9-Bh;4Mk)Ƃp"h lnuLrP2}zՖm۪hi܅1g7i'@+*IƹBZ·qmq37u, n>Nq50("یKcky&c,Ia97%;NGq7ƤeY_Bgډ٬?&کׯ_dN,^IENDB`viking-1.4.2/src/icons/wp_bridge_large.png0000644000175000017500000000077311166174146015470 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME 3ex{IDATH[0E/S^SVDĘ@ĮcRe)y/`$Ue "]*!^cRzŤbsqkG9lGC" SRI56$֋]J+_ȣew*1QWi2,˄x9n%Ϋپ>'[v1NQIҸn/g8@4'XfN/uO{u 5(՝U @+kGN 3V4`2l4zosfn@5UB$詟[1BޕIENDB`viking-1.4.2/src/icons/wp_buoy_red.png0000644000175000017500000000025011166174146014660 00000000000000PNG  IHDRVΎWoIDAT8K!Ca̬&a@1tX^'2#cꂨd(mcC}hPlCE`K{ζzlp&ª[mL rOcȘ^!u.%IENDB`viking-1.4.2/src/icons/wp_skiing_large.png0000644000175000017500000000074711166174146015521 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME $ugIDATHQn D*7iO4h(` V(RD16$$(Gkt$SChI7T~j9kZإ*JW?LX7ja7RRWtoWH3ژ^U<`%ԐtJ\HQؐ/{s8C*=ut;+NTiےaUs݉jr8<~h*%$VXuQkLfyL^V5q84"yh6W d5?AɑIENDB`viking-1.4.2/src/icons/wp_camp_large.png0000644000175000017500000000074111166174146015147 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME  D49NaIDATH͗Q '~( dd>naEdR7rF># W̆|Қ|ǜmFO@8fiX|iSe[Λ*-*baUm͌pQ.bD)ʝVi  i44 >,[ u3y`i]̏¬}ϵe۳]g}N6ۄ>=[L&W0 qB<`Sn=>zw+[>]+g~W%}cvН>^V1E=o1j`翗СI}-DބIENDB`viking-1.4.2/src/icons/cursor_ruler.png0000644000175000017500000000131111166174146015067 00000000000000PNG  IHDR szzbKGD pHYs  tIME 5MtEXtComment(c) 2000 Jakub 'Jimmac' Steiner This image was created using Gimp. Gimp is free software as defined by the Free Software Foundation and is available for download at http://www.gimp.orgFZ IDATXՖ1K@OP;9f ٥{ЯEkn$B?A"$up\zMrizzpK^ܤ8+ca$IBP$F! vL@ QpL%.VP/%Ŝ!Q=lۆeY"j1in,K}s>6Q,hG\L"gAW`4eokӂ-KS.GNwfR6\] ;_ {$J5ɂp3EKuD࠴c_"kłZ3^ګs!ns8ZGɈh{l{mJ" #1>IENDB`viking-1.4.2/src/icons/wp_lodging_large.png0000644000175000017500000000056311166174146015654 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME 8wugIDATHWK d|܈;gjT4]XIAf8 i0IŜd6B^}̼|C}N\!MRtx+dyMs-OcTy18<ڐ^$ miAe.y|R u:lY\"YT"0H8ⰥU=&gY?zmY)Tzx\uDW:6Ɋʞ@>s]&.mo7iUIENDB`viking-1.4.2/src/icons/cursor_new_route.png0000644000175000017500000000135312122673673015755 00000000000000PNG  IHDR szzbKGD?@ pHYs  tIME 1"+tEXtComment(c) 2000 Jakub 'Jimmac' Steiner This image was created using Gimp. Gimp is free software as defined by the Free Software Foundation and is available for download at http://www.gimp.orgFZ IDATX͖k1ƿH R79 łK{قu!:Kwѩ?1N%Ę\/_r?>)˥W{ ιW b!焰`V]wqLJ1-^1LjJEZ'l[  v͘j/9qlƢ ṮquF2宜ۉ4'œ.7g谪}!:8cCdh0c49 S¼X5H(#  n9jj[s 9<$Am>#oIENDB`viking-1.4.2/src/icons/wp_golf.png0000644000175000017500000000040711166174146014003 00000000000000PNG  IHDRVΎWbKGD pHYs  tIME .jtEXtCommentCreated with The GIMPd%nkIDAT8c` &HAj#B7#\@0bb50`$&Fˈl4:ߝP`d``OCx,MP "0~IENDB`viking-1.4.2/src/icons/wp_parking.png0000644000175000017500000000062311166174146014507 00000000000000PNG  IHDRVΎWbKGD pHYs  tIME 4'FtEXtCommentCreated with The GIMPd%nIDAT8c`l3P ұH W3̜9!==Z^c%Ĉp_|Ű|%?o2_6`k0}I b```x3äl°iI,$VD4?Û_I #Y)~BaA.;K~1,XqtX}0iq{o1&E|`Kשh  ]9OgΜInQE W IENDB`viking-1.4.2/src/icons/wp_ball.png0000644000175000017500000000022611166174146013765 00000000000000PNG  IHDRVΎW]IDAT8c``#DD8نe.PD$ 6[yE$I@7f.$F af!+ن˅$FK0@?pvS w-IENDB`viking-1.4.2/src/icons/wp_rbcn.png0000644000175000017500000000022411166174146013775 00000000000000PNG  IHDRVΎW[IDAT8Ւ; CSWEK .b(K g &Hw"y^j* fdr QْΆeKK0VIENDB`viking-1.4.2/src/icons/wp_restricted.png0000644000175000017500000000022611166174146015223 00000000000000PNG  IHDRVΎW]IDAT8œI /V  Q8IC+3C'*,BF $^} ܌\ZF7̤֗.eIENDB`viking-1.4.2/src/icons/zoom_18.png0000644000175000017500000000054711166174146013647 00000000000000PNG  IHDRVΎWbKGDC pHYs  tIME e%tEXtCommentCreated with The GIMPd%nIDAT8cd #'1/ J#6aLPa`+ִA(y93~fΨL@z嗀g}1rwIENDB`viking-1.4.2/src/icons/wp_sml_cty_large.png0000644000175000017500000000033411166174146015677 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME  7s\IDATHA Y}S"R$_濆1bH@ݮT*ȧ2ưX,,K6 ݎrGjx<} D$Z-RJf sRk,'c Nz=}Ev;1(Gw0f |Ne@kW\.!Zkr{5cΓf'Vn`rGRjZjN{8ha0N?;|>d2x}kj;sRbo{YkQJaM\[ vmIENDB`viking-1.4.2/src/icons/wp_mob_large.png0000644000175000017500000000036111166174146015002 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME }|g;qIDATHK Й<ǘHINR$ mʃ $d "bS&YGvV )קRIENDB`viking-1.4.2/src/icons/wp_rbcn_large.png0000644000175000017500000000060011166174146015145 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME 2y.RIDATHW[ snDĝ33y?TBHXHjJG$~?aap| i 0+XJjdjgf7T1m\ . U" F#m@:F*vĎuPU(4[j0܇ln;2#Gla LBӴ'w^d?'czpa/oP'$L=y=TίVLH E:Yco=&vCMA=CpnVVv*ȡ"=5*1u$ ޳'ōG`^=.13__-TX51r)8Jq` *cJ1;`R,uarGkЙIENDB`viking-1.4.2/src/icons/wp_geocache_fnd.png0000644000175000017500000000111311166174146015434 00000000000000PNG  IHDRVΎWbKGD3'| pHYs  tIME 5 tEXtCommentCreated with The GIMPd%nIDAT8˅1K#AORic6YX9[,B TB uW c +xa@# n] 1`7#|y0K=ا=z@{c-컩W pwXJ3`vɝI :19<>^u~΅_p!f$TՓ-cv|ǏĄ[AWݎTUQ5y㌉x:Ѹ{h'wM9a~s铪aG_]_]sDA}JmaIENDB`viking-1.4.2/src/icons/Makefile.in0000644000175000017500000006267012175546614013723 00000000000000# Makefile.in generated by automake 1.13.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = src/icons DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/mkinstalldirs $(top_srcdir)/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/expat.m4 \ $(top_srcdir)/m4/libcurl.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; am__v_AR_1 = libicons_a_AR = $(AR) $(ARFLAGS) libicons_a_LIBADD = am_libicons_a_OBJECTS = icons.$(OBJEXT) libicons_a_OBJECTS = $(am_libicons_a_OBJECTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/src depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libicons_a_SOURCES) DIST_SOURCES = $(libicons_a_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(iconsdir)" DATA = $(icons_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_STATUS_DEPENDENCIES = @CONFIG_STATUS_DEPENDENCIES@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DB2MAN_XSL = @DB2MAN_XSL@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ EXPAT_CFLAGS = @EXPAT_CFLAGS@ EXPAT_LIBS = @EXPAT_LIBS@ GDK_PIXBUF_CSOURCE = @GDK_PIXBUF_CSOURCE@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GLIB_MKENUMS = @GLIB_MKENUMS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HELP_DIR = @HELP_DIR@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ LDFLAGS = @LDFLAGS@ LIBCURL = @LIBCURL@ LIBCURL_CPPFLAGS = @LIBCURL_CPPFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_CFLAGS = @PACKAGE_CFLAGS@ PACKAGE_LIBS = @PACKAGE_LIBS@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ POW_LIB = @POW_LIB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XP = @XP@ _libcurl_config = @_libcurl_config@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ WAYPOINT_ICONS = \ wp_camp.png \ wp_car.png \ wp_deer.png \ wp_flag.png \ wp_geocache.png \ wp_geocache_fnd.png \ wp_house.png \ wp_wpt_dot.png \ wp_dollar.png \ wp_golf.png \ wp_summit.png \ wp_anchor.png \ wp_forest.png \ wp_parking.png \ wp_sml_cty.png \ wp_med_cty.png \ wp_lrg_cty.png \ wp_cap_cty.png \ wp_bell.png \ wp_diamond_grn.png \ wp_diamond_red.png \ wp_dive1.png \ wp_dive2.png \ wp_fish.png \ wp_fuel.png \ wp_horn.png \ wp_knife.png \ wp_light.png \ wp_mug.png \ wp_skull.png \ wp_square_grn.png \ wp_square_red.png \ wp_wbuoy.png \ wp_wreck.png \ wp_null.png \ wp_mine.png \ wp_school.png \ wp_cemetery.png \ wp_church.png \ wp_military.png \ wp_mob.png \ wp_buoy_ambr.png \ wp_buoy_blck.png \ wp_buoy_blue.png \ wp_buoy_grn.png \ wp_buoy_grn_red.png \ wp_buoy_grn_wht.png \ wp_buoy_orng.png \ wp_buoy_red.png \ wp_buoy_red_grn.png \ wp_buoy_red_wht.png \ wp_buoy_violet.png \ wp_buoy_wht.png \ wp_buoy_wht_grn.png \ wp_buoy_wht_red.png \ wp_dot.png \ wp_rbcn.png \ wp_boat_ramp.png \ wp_restroom.png \ wp_shower.png \ wp_drinking_wtr.png \ wp_phone.png \ wp_1st_aid.png \ wp_info.png \ wp_park.png \ wp_picnic.png \ wp_scenic.png \ wp_skiing.png \ wp_swimming.png \ wp_dam.png \ wp_controlled.png \ wp_danger.png \ wp_restricted.png \ wp_ball.png \ wp_rv_park.png \ wp_bridge.png \ wp_building.png \ wp_tunnel.png \ wp_beach.png \ wp_airplane.png \ wp_ice_skating.png WAYPOINT_ICONS_LARGE = wp_1st_aid_large.png wp_airplane_large.png \ wp_amuse_pk_large.png wp_anchor_large.png wp_ball_large.png \ wp_beach_large.png wp_bell_large.png wp_bike_trail_large.png \ wp_block_blue_large.png wp_block_green_large.png \ wp_block_red_large.png wp_boat_ramp_large.png \ wp_bowling_large.png wp_bridge_large.png wp_building_large.png \ wp_buoy_ambr_large.png wp_buoy_blck_large.png \ wp_buoy_blue_large.png wp_buoy_grn_large.png \ wp_buoy_grn_red_large.png wp_buoy_grn_wht_large.png \ wp_buoy_orng_large.png wp_buoy_red_grn_large.png \ wp_buoy_red_large.png wp_buoy_red_wht_large.png \ wp_buoy_violet_large.png wp_buoy_wht_grn_large.png \ wp_buoy_wht_large.png wp_buoy_wht_red_large.png \ wp_camp_large.png wp_car_large.png wp_car_rental_large.png \ wp_car_repair_large.png wp_cemetery_large.png \ wp_church_large.png wp_civil_large.png wp_controlled_large.png \ wp_conv_store_large.png wp_crossing_large.png wp_dam_large.png \ wp_danger_large.png wp_deer_large.png wp_dive1_large.png \ wp_dive2_large.png wp_dollar_large.png \ wp_drinking_wtr_large.png wp_fastfood_large.png \ wp_fhs_facility_large.png wp_fish_large.png \ wp_fitness_large.png wp_flag_blue_large.png \ wp_flag_green_large.png wp_flag_red_large.png \ wp_forest_large.png wp_fuel_large.png \ wp_geocache_fnd_large.png wp_geocache_large.png \ wp_glider_large.png wp_golf_large.png wp_grnd_trans_large.png \ wp_horn_large.png wp_house_large.png wp_ice_skating_large.png \ wp_info_large.png wp_knife_large.png wp_light_large.png \ wp_lodging_large.png wp_lrg_cty_large.png wp_med_cty_large.png \ wp_mine_large.png wp_mob_large.png wp_movie_large.png \ wp_mug_large.png wp_museum_large.png wp_oil_field_large.png \ wp_parachute_large.png wp_parking_large.png wp_park_large.png \ wp_pharmacy_large.png wp_phone_large.png wp_picnic_large.png \ wp_pin_blue_large.png wp_pin_green_large.png \ wp_pin_red_large.png wp_pizza_large.png wp_police_large.png \ wp_post_ofc_large.png wp_rbcn_large.png \ wp_restricted_large.png wp_restroom_large.png \ wp_rv_park_large.png wp_scenic_large.png wp_school_large.png \ wp_shopping_large.png wp_short_tower_large.png \ wp_shower_large.png wp_skiing_large.png \ wp_ski_resort_large.png wp_skull_large.png \ wp_sml_cty_large.png wp_stadium_large.png wp_store_large.png \ wp_summit_large.png wp_swimming_large.png \ wp_tall_tower_large.png wp_theater_large.png \ wp_toll_booth_large.png wp_trail_head_large.png \ wp_truck_stop_large.png wp_tunnel_large.png \ wp_ultralight_large.png wp_wbuoy_large.png \ wp_weigh_station_large.png wp_wrecker_large.png \ wp_wreck_large.png wp_zoo_large.png ICONS = \ viking.png \ bing_maps.png \ addtr_18.png \ vik_new_route_18.png \ addwp_18.png \ edtr_18.png \ edwp_18.png \ geomove_18.png \ geozoom_18.png \ mapdl_18.png \ demdl_18.png \ mover_22.png \ ruler_18.png \ showpic_18.png \ zoom_18.png \ route_finder_18.png \ select_18.png \ thumbnails.png \ vikaggregatelayer.png \ vikcoordlayer.png \ vikdemlayer.png \ vikgeoreflayer.png \ vikgpslayer.png \ vikmapslayer.png \ viktrwlayer.png CURSORS = \ cursor_addtr.png \ cursor_new_route.png \ cursor_edtr.png \ cursor_geozoom.png \ cursor_ruler.png \ cursor_addwp.png \ cursor_edwp.png \ cursor_route_finder.png \ cursor_showpic.png \ cursor_demdl.png \ cursor_geomove.png \ cursor_mapdl.png \ cursor_zoom.png ALL_ICONS = $(ICONS) $(WAYPOINT_ICONS) $(WAYPOINT_ICONS_LARGE) $(CURSORS) EXTRA_DIST = $(ALL_ICONS) ALL_ICONS_HEADER = $(ALL_ICONS:.png=_pixmap.h) BUILT_SOURCES = $(ALL_ICONS_HEADER) icons.c icons.h CLEANFILES = $(BUILT_SOURCES) SUFFIXES = .png _pixmap.h noinst_LIBRARIES = libicons.a libicons_a_SOURCES = icons.c icons.h AM_CFLAGS = -Wall -g -D_GNU_SOURCE \ $(PACKAGE_CFLAGS) iconsdir = $(datadir)/icons/hicolor/48x48/apps icons_DATA = viking.png gtk_update_icon_cache = gtk-update-icon-cache -f -t $(datadir)/icons/hicolor all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .png _pixmap.h .c .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/icons/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/icons/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libicons.a: $(libicons_a_OBJECTS) $(libicons_a_DEPENDENCIES) $(EXTRA_libicons_a_DEPENDENCIES) $(AM_V_at)-rm -f libicons.a $(AM_V_AR)$(libicons_a_AR) libicons.a $(libicons_a_OBJECTS) $(libicons_a_LIBADD) $(AM_V_at)$(RANLIB) libicons.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/icons.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` install-iconsDATA: $(icons_DATA) @$(NORMAL_INSTALL) @list='$(icons_DATA)'; test -n "$(iconsdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(iconsdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(iconsdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(iconsdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(iconsdir)" || exit $$?; \ done uninstall-iconsDATA: @$(NORMAL_UNINSTALL) @list='$(icons_DATA)'; test -n "$(iconsdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(iconsdir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(LIBRARIES) $(DATA) installdirs: for dir in "$(DESTDIR)$(iconsdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-am clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-iconsDATA @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-data-hook install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-iconsDATA .MAKE: all check install install-am install-data-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-noinstLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-data-hook install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-iconsDATA install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am \ uninstall-iconsDATA .png_pixmap.h: gdk-pixbuf-csource --name="`basename $< .png`_pixbuf" --struct --extern $< > $@ cat $@ | sed -e 's/\(pixel_data: ..\)/\1 (unsigned char \*)/' > temp$@.h mv temp$@.h $@ icons.h: $(ALL_ICONS_HEADER) echo "/* Generated file */" > $@ sed -n "s/^\(const.*\) = {/extern \1;/p" $(ALL_ICONS_HEADER) >> $@ icons.c: $(ALL_ICONS_HEADER) echo "/* Generated file */" > $@ echo "#include " >> $@ for file in *_pixmap.h ; do echo "#include \"$$file\"" >> $@ ; done $(BUILT_SOURCES): $(srcdir)/Makefile.am install-data-hook: @-if test -z "$(DESTDIR)"; then \ echo "Updating Gtk icon cache."; \ $(gtk_update_icon_cache); \ else \ echo "*** Icon cache not updated. After install, run this:"; \ echo "*** $(gtk_update_icon_cache)"; \ fi # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: viking-1.4.2/src/icons/wp_fhs_facility_large.png0000644000175000017500000000125311166174146016672 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME dpi+IDATHŗ[ Dۮّ&&&H` Hn235q: [)|}288ϲ;u9x{'YIEBA 1( -AHE)e[*'Lj!Sw@ni}Q[&>s-R*E\6CsRY1X~#JklvtWST^`VyGҕ{i/"$ϷRBSnV$MO`'lMl\E޲Zrv߈kvdRm'054=i.#ޱBѹWcFi O Y$KJ-.хn眑c"x-4N%L r󀶳W85Dx䘑y/4Kl^b;$$ĩ+W 1ɽ61yql.-2e#EIUnWtzu"̵QP_߹J~H \gp}>t>DޝQyA&G~3E&;w.O[~c?T3MS IENDB`viking-1.4.2/src/icons/wp_trail_head_large.png0000644000175000017500000000121311166174146016316 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME "TM IDATHW[ 3UwdDה=5M IuuUT<@'I+wvz9 ]{ /B!PjP0ŏjge6j՝`Ӕcl{1- D!%b*we\zˣ&uzG֌ =COH@ &ˍcM5=D|77zXR>kӸqOK˱pŹB:c7fhͺ3cr(5qB~N ynAmAc5z;g/V$8831arÚu}ULpqy.J:fFW0'\A«psFk`ssT8p2ZgcnN{ڼ2۫1y`D+4[G 4#cm 8VEuz\YWYwg5Slsud rntjs_<_Qq鞺IENDB`viking-1.4.2/src/icons/wp_buoy_blck.png0000644000175000017500000000023611166174146015025 00000000000000PNG  IHDRVΎWeIDAT8T9  B-;F T5Y>kF̭-bjhPh(P&zF,GOdx>DΚ[F7҆^IENDB`viking-1.4.2/src/icons/wp_rv_park.png0000644000175000017500000000023111166174146014513 00000000000000PNG  IHDRVΎW`IDAT81 ^ -D 8`,h]@,)9R️[?4($ Yɰje-G)[}5|iZkS.G)qۼIENDB`viking-1.4.2/src/icons/wp_airplane_large.png0000644000175000017500000000062011166174146016016 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME 6-uIDATHa +Fr&O<ۏi[nY2"g"Wə7s_'$|PDN%cmJx6Yō%؁X;>xʈJ^X 9g5Wjs:vjkil!uͨi p{4&H-p[}T7^R%뺊7<&qI?IENDB`viking-1.4.2/src/icons/wp_stadium_large.png0000644000175000017500000000042711166174146015676 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME #IDATHVA fݛ;hP7H-A&Esae5I|1>Wi)^4N.IH8'jաkK h*1gT43GT/vk|qްޅ/ `@eIENDB`viking-1.4.2/src/icons/cursor_addtr.png0000644000175000017500000000137211166174146015043 00000000000000PNG  IHDR szzbKGD pHYs  tIME 89G=ptEXtComment(c) 2000 Jakub 'Jimmac' Steiner This image was created using Gimp. Gimp is free software as defined by the Free Software Foundation and is available for download at http://www.gimp.orgFZ IDATX͖1k@ݛ/ԱS`!~'ۮupqH*]܄B Nlp.㌹hI#w ׭Iqh }Q (0q`P` V+Tդg9yIdOyTPTP.hq`ۉZj5B^'9~o(qs\ʛ?H.×wYF@$4Jk|>ض i;;0Xw}, AyL"sF靃@ l{wK/'Ӝ>omm\Ci{ڽ}t C;gd^C[mtfnU Sqd1U%mNar6W>,ȍ2_ё݆(['u$ .̤k?qZ:/rHj"$IENDB`viking-1.4.2/src/icons/wp_dive1.png0000644000175000017500000000021611166174146014062 00000000000000PNG  IHDRVΎWUIDAT8; PwM1|,t3hlXDD VR&*b/bGM;*b X?ba-ftVIENDB`viking-1.4.2/src/icons/wp_drinking_wtr_large.png0000644000175000017500000000051511166174146016727 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME 87IDATHA07M&z1Lp@ 3l"uvY8S/q$ړ%K\m)_?đd&Dt)nR8]b%s%aC*z8k.%ԉʮ=AUS1.zڳjw^Uq\{Osrmum2wrB\IENDB`viking-1.4.2/src/icons/wp_block_blue_large.png0000644000175000017500000000107711166174146016333 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME &WQIDATH՗[n EoّYSXS&(V4c_ѳ6Q@*oα?o[4AZ`B(b> Y[HHY`_"53䲮MU!pƻ)oȹJВ8Br4`Y٬mٚ)zB7MIA rflfxmZ۔qLH;Uŗ[|j-&^~*[Uwq4ү ol9uq:nT=,#Fq~-YUZ!I#%8ŪH1QzRYPH"h8J;e=1n'ڈ!"~e1W?j?,\qiЂB0]vD&14omU8HqL%eK,6/z}INևIENDB`viking-1.4.2/src/icons/cursor_edwp.png0000644000175000017500000000146611166174146014710 00000000000000PNG  IHDR szzbKGD pHYs  tIME 7!tEXtComment(c) 2000 Jakub 'Jimmac' Steiner This image was created using Gimp. Gimp is free software as defined by the Free Software Foundation and is available for download at http://www.gimp.orgFZ IDATX͖J+A[A*B %&&E,}XXxmJ*ͅy4t!Xb^m2f7o߰8vh4 As0yAiHMBd!"(Qc@ߧuJj;Kcd^(p]WZM&FZfP "vm&˽bbfi5)S22 Bx pR)IӽYKa8Vzu5_@q~K74:([$iŲwmTRQZB~s`ŀ :N.MyDKn_!IVȰ=" `m[}t%JisH6#L; hCHE~T|I=f,FݠyW.b5MA`;]'n)u-MvZ:z4L;ܯ{ݞ IENDB`viking-1.4.2/src/icons/Makefile.am0000644000175000017500000002123312175546146013700 00000000000000WAYPOINT_ICONS = \ wp_camp.png \ wp_car.png \ wp_deer.png \ wp_flag.png \ wp_geocache.png \ wp_geocache_fnd.png \ wp_house.png \ wp_wpt_dot.png \ wp_dollar.png \ wp_golf.png \ wp_summit.png \ wp_anchor.png \ wp_forest.png \ wp_parking.png \ wp_sml_cty.png \ wp_med_cty.png \ wp_lrg_cty.png \ wp_cap_cty.png \ wp_bell.png \ wp_diamond_grn.png \ wp_diamond_red.png \ wp_dive1.png \ wp_dive2.png \ wp_fish.png \ wp_fuel.png \ wp_horn.png \ wp_knife.png \ wp_light.png \ wp_mug.png \ wp_skull.png \ wp_square_grn.png \ wp_square_red.png \ wp_wbuoy.png \ wp_wreck.png \ wp_null.png \ wp_mine.png \ wp_school.png \ wp_cemetery.png \ wp_church.png \ wp_military.png \ wp_mob.png \ wp_buoy_ambr.png \ wp_buoy_blck.png \ wp_buoy_blue.png \ wp_buoy_grn.png \ wp_buoy_grn_red.png \ wp_buoy_grn_wht.png \ wp_buoy_orng.png \ wp_buoy_red.png \ wp_buoy_red_grn.png \ wp_buoy_red_wht.png \ wp_buoy_violet.png \ wp_buoy_wht.png \ wp_buoy_wht_grn.png \ wp_buoy_wht_red.png \ wp_dot.png \ wp_rbcn.png \ wp_boat_ramp.png \ wp_restroom.png \ wp_shower.png \ wp_drinking_wtr.png \ wp_phone.png \ wp_1st_aid.png \ wp_info.png \ wp_park.png \ wp_picnic.png \ wp_scenic.png \ wp_skiing.png \ wp_swimming.png \ wp_dam.png \ wp_controlled.png \ wp_danger.png \ wp_restricted.png \ wp_ball.png \ wp_rv_park.png \ wp_bridge.png \ wp_building.png \ wp_tunnel.png \ wp_beach.png \ wp_airplane.png \ wp_ice_skating.png WAYPOINT_ICONS_LARGE = WAYPOINT_ICONS_LARGE += wp_1st_aid_large.png WAYPOINT_ICONS_LARGE += wp_airplane_large.png WAYPOINT_ICONS_LARGE += wp_amuse_pk_large.png WAYPOINT_ICONS_LARGE += wp_anchor_large.png WAYPOINT_ICONS_LARGE += wp_ball_large.png WAYPOINT_ICONS_LARGE += wp_beach_large.png WAYPOINT_ICONS_LARGE += wp_bell_large.png WAYPOINT_ICONS_LARGE += wp_bike_trail_large.png WAYPOINT_ICONS_LARGE += wp_block_blue_large.png WAYPOINT_ICONS_LARGE += wp_block_green_large.png WAYPOINT_ICONS_LARGE += wp_block_red_large.png WAYPOINT_ICONS_LARGE += wp_boat_ramp_large.png WAYPOINT_ICONS_LARGE += wp_bowling_large.png WAYPOINT_ICONS_LARGE += wp_bridge_large.png WAYPOINT_ICONS_LARGE += wp_building_large.png WAYPOINT_ICONS_LARGE += wp_buoy_ambr_large.png WAYPOINT_ICONS_LARGE += wp_buoy_blck_large.png WAYPOINT_ICONS_LARGE += wp_buoy_blue_large.png WAYPOINT_ICONS_LARGE += wp_buoy_grn_large.png WAYPOINT_ICONS_LARGE += wp_buoy_grn_red_large.png WAYPOINT_ICONS_LARGE += wp_buoy_grn_wht_large.png WAYPOINT_ICONS_LARGE += wp_buoy_orng_large.png WAYPOINT_ICONS_LARGE += wp_buoy_red_grn_large.png WAYPOINT_ICONS_LARGE += wp_buoy_red_large.png WAYPOINT_ICONS_LARGE += wp_buoy_red_wht_large.png WAYPOINT_ICONS_LARGE += wp_buoy_violet_large.png WAYPOINT_ICONS_LARGE += wp_buoy_wht_grn_large.png WAYPOINT_ICONS_LARGE += wp_buoy_wht_large.png WAYPOINT_ICONS_LARGE += wp_buoy_wht_red_large.png WAYPOINT_ICONS_LARGE += wp_camp_large.png WAYPOINT_ICONS_LARGE += wp_car_large.png WAYPOINT_ICONS_LARGE += wp_car_rental_large.png WAYPOINT_ICONS_LARGE += wp_car_repair_large.png WAYPOINT_ICONS_LARGE += wp_cemetery_large.png WAYPOINT_ICONS_LARGE += wp_church_large.png WAYPOINT_ICONS_LARGE += wp_civil_large.png WAYPOINT_ICONS_LARGE += wp_controlled_large.png WAYPOINT_ICONS_LARGE += wp_conv_store_large.png WAYPOINT_ICONS_LARGE += wp_crossing_large.png WAYPOINT_ICONS_LARGE += wp_dam_large.png WAYPOINT_ICONS_LARGE += wp_danger_large.png WAYPOINT_ICONS_LARGE += wp_deer_large.png WAYPOINT_ICONS_LARGE += wp_dive1_large.png WAYPOINT_ICONS_LARGE += wp_dive2_large.png WAYPOINT_ICONS_LARGE += wp_dollar_large.png WAYPOINT_ICONS_LARGE += wp_drinking_wtr_large.png WAYPOINT_ICONS_LARGE += wp_fastfood_large.png WAYPOINT_ICONS_LARGE += wp_fhs_facility_large.png WAYPOINT_ICONS_LARGE += wp_fish_large.png WAYPOINT_ICONS_LARGE += wp_fitness_large.png WAYPOINT_ICONS_LARGE += wp_flag_blue_large.png WAYPOINT_ICONS_LARGE += wp_flag_green_large.png WAYPOINT_ICONS_LARGE += wp_flag_red_large.png WAYPOINT_ICONS_LARGE += wp_forest_large.png WAYPOINT_ICONS_LARGE += wp_fuel_large.png WAYPOINT_ICONS_LARGE += wp_geocache_fnd_large.png WAYPOINT_ICONS_LARGE += wp_geocache_large.png WAYPOINT_ICONS_LARGE += wp_glider_large.png WAYPOINT_ICONS_LARGE += wp_golf_large.png WAYPOINT_ICONS_LARGE += wp_grnd_trans_large.png WAYPOINT_ICONS_LARGE += wp_horn_large.png WAYPOINT_ICONS_LARGE += wp_house_large.png WAYPOINT_ICONS_LARGE += wp_ice_skating_large.png WAYPOINT_ICONS_LARGE += wp_info_large.png WAYPOINT_ICONS_LARGE += wp_knife_large.png WAYPOINT_ICONS_LARGE += wp_light_large.png WAYPOINT_ICONS_LARGE += wp_lodging_large.png WAYPOINT_ICONS_LARGE += wp_lrg_cty_large.png WAYPOINT_ICONS_LARGE += wp_med_cty_large.png WAYPOINT_ICONS_LARGE += wp_mine_large.png WAYPOINT_ICONS_LARGE += wp_mob_large.png WAYPOINT_ICONS_LARGE += wp_movie_large.png WAYPOINT_ICONS_LARGE += wp_mug_large.png WAYPOINT_ICONS_LARGE += wp_museum_large.png WAYPOINT_ICONS_LARGE += wp_oil_field_large.png WAYPOINT_ICONS_LARGE += wp_parachute_large.png WAYPOINT_ICONS_LARGE += wp_parking_large.png WAYPOINT_ICONS_LARGE += wp_park_large.png WAYPOINT_ICONS_LARGE += wp_pharmacy_large.png WAYPOINT_ICONS_LARGE += wp_phone_large.png WAYPOINT_ICONS_LARGE += wp_picnic_large.png WAYPOINT_ICONS_LARGE += wp_pin_blue_large.png WAYPOINT_ICONS_LARGE += wp_pin_green_large.png WAYPOINT_ICONS_LARGE += wp_pin_red_large.png WAYPOINT_ICONS_LARGE += wp_pizza_large.png WAYPOINT_ICONS_LARGE += wp_police_large.png WAYPOINT_ICONS_LARGE += wp_post_ofc_large.png WAYPOINT_ICONS_LARGE += wp_rbcn_large.png WAYPOINT_ICONS_LARGE += wp_restricted_large.png WAYPOINT_ICONS_LARGE += wp_restroom_large.png WAYPOINT_ICONS_LARGE += wp_rv_park_large.png WAYPOINT_ICONS_LARGE += wp_scenic_large.png WAYPOINT_ICONS_LARGE += wp_school_large.png WAYPOINT_ICONS_LARGE += wp_shopping_large.png WAYPOINT_ICONS_LARGE += wp_short_tower_large.png WAYPOINT_ICONS_LARGE += wp_shower_large.png WAYPOINT_ICONS_LARGE += wp_skiing_large.png WAYPOINT_ICONS_LARGE += wp_ski_resort_large.png WAYPOINT_ICONS_LARGE += wp_skull_large.png WAYPOINT_ICONS_LARGE += wp_sml_cty_large.png WAYPOINT_ICONS_LARGE += wp_stadium_large.png WAYPOINT_ICONS_LARGE += wp_store_large.png WAYPOINT_ICONS_LARGE += wp_summit_large.png WAYPOINT_ICONS_LARGE += wp_swimming_large.png WAYPOINT_ICONS_LARGE += wp_tall_tower_large.png WAYPOINT_ICONS_LARGE += wp_theater_large.png WAYPOINT_ICONS_LARGE += wp_toll_booth_large.png WAYPOINT_ICONS_LARGE += wp_trail_head_large.png WAYPOINT_ICONS_LARGE += wp_truck_stop_large.png WAYPOINT_ICONS_LARGE += wp_tunnel_large.png WAYPOINT_ICONS_LARGE += wp_ultralight_large.png WAYPOINT_ICONS_LARGE += wp_wbuoy_large.png WAYPOINT_ICONS_LARGE += wp_weigh_station_large.png WAYPOINT_ICONS_LARGE += wp_wrecker_large.png WAYPOINT_ICONS_LARGE += wp_wreck_large.png WAYPOINT_ICONS_LARGE += wp_zoo_large.png ICONS = \ viking.png \ bing_maps.png \ addtr_18.png \ vik_new_route_18.png \ addwp_18.png \ edtr_18.png \ edwp_18.png \ geomove_18.png \ geozoom_18.png \ mapdl_18.png \ demdl_18.png \ mover_22.png \ ruler_18.png \ showpic_18.png \ zoom_18.png \ route_finder_18.png \ select_18.png \ thumbnails.png \ vikaggregatelayer.png \ vikcoordlayer.png \ vikdemlayer.png \ vikgeoreflayer.png \ vikgpslayer.png \ vikmapslayer.png \ viktrwlayer.png CURSORS = \ cursor_addtr.png \ cursor_new_route.png \ cursor_edtr.png \ cursor_geozoom.png \ cursor_ruler.png \ cursor_addwp.png \ cursor_edwp.png \ cursor_route_finder.png \ cursor_showpic.png \ cursor_demdl.png \ cursor_geomove.png \ cursor_mapdl.png \ cursor_zoom.png ALL_ICONS = $(ICONS) $(WAYPOINT_ICONS) $(WAYPOINT_ICONS_LARGE) $(CURSORS) EXTRA_DIST = $(ALL_ICONS) ALL_ICONS_HEADER = $(ALL_ICONS:.png=_pixmap.h) BUILT_SOURCES = $(ALL_ICONS_HEADER) icons.c icons.h CLEANFILES = $(BUILT_SOURCES) SUFFIXES = .png _pixmap.h .png_pixmap.h: gdk-pixbuf-csource --name="`basename $< .png`_pixbuf" --struct --extern $< > $@ cat $@ | sed -e 's/\(pixel_data: ..\)/\1 (unsigned char \*)/' > temp$@.h mv temp$@.h $@ noinst_LIBRARIES = libicons.a libicons_a_SOURCES = icons.c icons.h icons.h: $(ALL_ICONS_HEADER) echo "/* Generated file */" > $@ sed -n "s/^\(const.*\) = {/extern \1;/p" $(ALL_ICONS_HEADER) >> $@ icons.c: $(ALL_ICONS_HEADER) echo "/* Generated file */" > $@ echo "#include " >> $@ for file in *_pixmap.h ; do echo "#include \"$$file\"" >> $@ ; done $(BUILT_SOURCES): $(srcdir)/Makefile.am AM_CFLAGS = -Wall -g -D_GNU_SOURCE \ $(PACKAGE_CFLAGS) iconsdir = $(datadir)/icons/hicolor/48x48/apps icons_DATA = viking.png gtk_update_icon_cache = gtk-update-icon-cache -f -t $(datadir)/icons/hicolor install-data-hook: @-if test -z "$(DESTDIR)"; then \ echo "Updating Gtk icon cache."; \ $(gtk_update_icon_cache); \ else \ echo "*** Icon cache not updated. After install, run this:"; \ echo "*** $(gtk_update_icon_cache)"; \ fi viking-1.4.2/src/icons/wp_pin_blue_large.png0000644000175000017500000000074411166174146016027 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME &dIDATH͖ѕ E;5iM5"HLݙq7J!0-Z3v|A5\Y%Z8,Rp Rnpː8[FӦj4GT3l̇kLrͽR1Fm7=raV@ʹP:vj)v% chRcnK'c;x)1{{h/uVuwʤ2nV[4;vvۣ&r}.MƹN5FNpsu)WG3:sTu^3aִ8+U%Ƶ;3g|'g1Οxs3~syJE$y;2~[PM+~D o IENDB`viking-1.4.2/src/icons/wp_square_grn.png0000644000175000017500000000015211166174146015217 00000000000000PNG  IHDRVΎW1IDAT8c`l:, f0Q=4 "b`yaDҕ 3IENDB`viking-1.4.2/src/icons/wp_church.png0000644000175000017500000000023511166174146014327 00000000000000PNG  IHDRVΎWdIDAT8ՒA0ƇtFzQqĦ{19j"u6 ;>!m@XL!ը @ckގQU>\7IENDB`viking-1.4.2/src/icons/wp_skull.png0000644000175000017500000000025111166174146014203 00000000000000PNG  IHDRVΎWpIDAT8͓A 9YJI@/-Hp18E*Hќf,wA(ewO9A| `h\: 0Dȕ jRWU? ռ*VIENDB`viking-1.4.2/src/icons/wp_buoy_blck_large.png0000644000175000017500000000070511166174146016200 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME EIDATHŗa0əLxL쏎lvL'EABHU'Oƈͷ[e꽟EϜu=3PGSKğDh.{HcdoWH9w3F$lmzt‰C>{'"FrRՉ48Ub~#@r~".ӳ[EV4FN(i%Ok˨RBƙ:Y}UcKwVlJg:5ԸY5R"B6 fL "&َ#TRer.u E(™UZkQ5y&lo6(r2GI"rDvS_ݍl2FIENDB`viking-1.4.2/src/icons/wp_buoy_red_wht_large.png0000644000175000017500000000055611166174146016725 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME I IDATH EՍSC"Ԙo͡"@A< HD@&kw"B9n R]LcM1qrgM1צqk o4sL{ kZO3bEy\59Roj&kws٪iy=wW$8Ֆ +* bl2^ ]fM3\P\-+c0 j7x権 1& ?/Q f#IENDB`viking-1.4.2/src/icons/wp_buoy_orng_large.png0000644000175000017500000000066111166174146016233 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME *A1IDATHW 4(LtTD%̙$UTq8.LO4oIr/`Әsv(g8~Vxn6RLd1bD$愙3L?(n\)jr%:\:ܫt~Ɣ"2FL!3q`ܛv+߯Ɯ2틌鄟CDb8U/l0ڸc YII 5^Քwʪ1|<5_c'egv>־%mW/N4qwV^5H5=Uk.^ʜi.qqk2}{W?,IENDB`viking-1.4.2/src/icons/wp_forest.png0000644000175000017500000000051111166174146014352 00000000000000PNG  IHDRVΎWbKGD/ڛ pHYs  tIME "tEXtCommentCreated with The GIMPd%nIDAT8˭A E?Mp6'ba2%!h/ ġ=BV@EDz$|2{"f,ȯ 7WdF!6narXF銺XGՑ-Kdbީ2F+>]=e7_Q5uxMGy>Rd]G'IENDB`viking-1.4.2/src/icons/wp_horn_large.png0000644000175000017500000000043311166174146015173 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME 4u*IDATHk w#uՙLӏT,_-, EZ3LKE'[@0+ⷫ| H$'V48V1Hcߗ:IC"?ۋ$蜻DH{&ˆ珷A@^~E}jwL,#KIENDB`viking-1.4.2/src/icons/wp_wreck_large.png0000644000175000017500000000051311166174146015337 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME UIDATH 9ԍLLLx&!  *H7#Kχ3ՠ?W 2l5@k +OL I:7PgRreo8a| ֨'['LL83vP211͕޴}JDOO)2{n66Th YӬǥJmLp;uQ'[_fj0IENDB`viking-1.4.2/src/icons/wp_car_large.png0000644000175000017500000000077711166174146015005 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME  "NIDATH] uLf0@V]k}H0L8ە+—o_1Ғo7i/Erv6lN~丒fE!_%*䶓)Ǒ|4.A".9[R*n%/!oF{q=kU" [NU˃y'x֧#rAݼd!\lOTzr rTrFTdK9Gz=sF[dfx,j t-D[r 5=F$1Eg9owS>59н3 E=44vw"#\f 꽎l]uC^ao7== _%hW}?u5cIENDB`viking-1.4.2/src/icons/wp_dam_large.png0000644000175000017500000000071011166174146014764 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME (9HIDATHWQ 7"g)w3-Y%e1<QQD{"~t"&KED@ό+ȑb; DtNco}۶q9|ufW/p|#GJ[cE`kelF5_2>1i꾸82F4g@_ 2ժPqQUfSLgק£W'{i&?d>EozmE:,Ta%p訚Uר(6[\OFeDBZV5fPY ه}%ɴm[lu7SC8jnǁt}۟sf*o_u? ػ?~]C@U:R&uU>F|߱IENDB`viking-1.4.2/src/icons/wp_bell_large.png0000644000175000017500000000050011166174146015136 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME )aDIDATHM!3u;]5M:\D\Qf]E\-6]x^/% OQsrrH=NJc&Nz*:$s!981FeuN;ѷ^~ٮ{ܳew}33}̌?^EYKiIENDB`viking-1.4.2/src/icons/wp_info.png0000644000175000017500000000022211166174146014002 00000000000000PNG  IHDRVΎWYIDAT8͓  E/_ImwvJiq]Hb_*a5o0`8!v\g [`Ph4DɊ۳oDN]N4G3 r|.)_4 %aU#%+dUFVcSXqh!=E鯁EwBk> ɃGNXt'TF^4]Uv\XvFo鼎Dbqt^<7bDwْF;cN#)*MJ =K7ފH.H:S ɡQrIENDB`viking-1.4.2/src/icons/wp_theater_large.png0000644000175000017500000000076011166174146015664 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME kpIDATHa Q=s&9=S,6!J-('CS],06i˧y džO]u3؃>$}/٩ks">gq6Uؚ[#A@Z荘8^x08B?wF=i,uGcHZ}ՑrmڣK뿩Ӝ6?FEy.N!{&ݾb~Sț˜mn ;: Dw#u&oUSd[^x{(ڪٸ?0(D",+LRfÄ79-ݺr>H0F~J~cB"i{3^=h^jғerqbmG\ /Dh6rKw2a!#Nr 1AbZ1 | ¦fI.bfBbA3"Xנ vbťED6LD3 i agIENDB`viking-1.4.2/src/icons/wp_cemetery_large.png0000644000175000017500000000054711166174146016050 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME  )IDATHݖ[!EqfeMX*?pQ8":7s]E24DF{MISJ"^/'iiWפa!jWs[LcT3]]p-{ڏʽ͸YrdD--NW=f|W[Hc ƼZĽ>/٘rc@]<˼"h=١uƫi}?5SoK"nIENDB`viking-1.4.2/src/icons/wp_truck_stop_large.png0000644000175000017500000000055611166174146016430 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME 1 XhIDATHV nDf8ipB EB<$s>5jMV̬|:r<DvrO6jܛf>)bgИ22=rmd8zB +d,'6F=HRgpTϩ40DdYG8sɼ̀9UT>VQ8cv׬go\WUn'^kQ%eոY{ |a}IENDB`viking-1.4.2/src/icons/vikgpslayer.png0000644000175000017500000000025011166174146014702 00000000000000PNG  IHDRh6sBITO`IDAT(K D_.L Lݸ=#0<*{ 8. -I^&$5k&<"ʄ)%ea*' / f!)nSIENDB`viking-1.4.2/src/icons/wp_tunnel_large.png0000644000175000017500000000067511166174146015542 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME ,8=IDATHA DTn49>dH]d6"=b3_e.g$U5X8֚]~N{VKzߏ\(_{· FD%dž`IENDB`viking-1.4.2/src/icons/wp_dollar_large.png0000644000175000017500000000050211166174146015477 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME P<4IDATH Eq#wҙp&;S=FPQ{2)T"J!L[ O(_I:VW7%pbX&^}rGTIyM9<D|qkjRc,bdɒbc\A`~_'/ǰcQu&:||T}ה|U?|c[ZicIENDB`viking-1.4.2/src/icons/wp_tunnel.png0000644000175000017500000000025011166174146014355 00000000000000PNG  IHDRVΎWoIDAT8͑Q Cxm7/ nk&&KHkDfМ@쮜fvԭ\)\ G6rR^4 }V )@wg L#w_IENDB`viking-1.4.2/src/icons/wp_mug_large.png0000644000175000017500000000073111166174146015016 00000000000000PNG  IHDR"":G sRGBbKGD pHYs  tIME 4& YIDATXݗan 7L˙3y?SeaEޡm>b#CDLCD̲)o)("qC8^#fGDZLbh=`ԴAADx"wDzz|Gڥ^"*c^$3kTso\2_o y5)[WW5q%ԫc:K\=B !]ͻG<Z"yf&WyEBYN=F涧u3sںqW+idHҸ_7>34N}y)^>յuçSJJ^}vL7ށIENDB`viking-1.4.2/src/icons/wp_buoy_wht_large.png0000644000175000017500000000047711166174146016075 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME 6IDATHk 0Ofe}V),$$! ;%w8sMqD $"䵚"3Dоs+b{ZшL:E 6%-zTsJ[LxZt2qyElj+&֪:Vgb#/NUґөC@UҒ-3OzI7 3LWIENDB`viking-1.4.2/src/icons/wp_park_large.png0000644000175000017500000000047411166174146015167 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME % a^KIDATH E)q#IgLXD+/ Fs[z"z(WxH];s+]]y|ŘJǁXY%a's])f2}cq>Nsc!'YZF}#naϕVL]\]kV 7ѱ{Y7nrMb|̎}} Ke\'ZxIENDB`viking-1.4.2/src/icons/wp_buoy_blue.png0000644000175000017500000000025311166174146015040 00000000000000PNG  IHDRVΎWrIDAT8Q Cq`ݛ2q_QAxaLQ507x˱~T gVEj jyU={n TL#rChno$M^/Phѡ02 ٙٝy:;ZN<0/r+Mu.5T!qT!qT!iAH/H݂P1gT*l5iڒ.&hu ccc(H_w%6j=33/yH[[[{exI.q$R6qqf1@666RĥR:ԶUvʈ SC,O>+pYcx^iԵ`%t~]=CYz7_D[ 3y~7O*PA0 J zO:*Am.= G:|B>jRd&|щoK|jf̷jl_t:|u&Ng}L,^4G},@ָG>-s}O}_m()IENDB`viking-1.4.2/src/icons/wp_cemetery.png0000644000175000017500000000024211166174146014666 00000000000000PNG  IHDRVΎWiIDAT8͑A@/zQC\X`b iٜ"9蔽!̂^C<ؖJ6h6ÓoF7m7 Aw/jշ6z(#IENDB`viking-1.4.2/src/icons/wp_buoy_red_wht.png0000644000175000017500000000025011166174146015542 00000000000000PNG  IHDRVΎWoIDAT8A!agQC`!AT VA( ; >VXxw4?(ZseY]\+\[[{\";T*r$1T؄l6eӋQJ% yLd\EDs֚}\hۡn, h/ƻP(PJ%6>Cy*|7ErM2CCbZi~F.(yLLL{gƺ2{'?!hIENDB`viking-1.4.2/src/icons/wp_civil_large.png0000644000175000017500000000101011166174146015323 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME  8*:"IDATHWK Fp&8) Dyn:J$DxguyJ'o @;?0;L䜎:6G&\D^wN`[w -WȹI3u ǼHx)|c r SNshρscq <:_qL1!7yN6#] (uNus*I)AʊWtl :]v+RU.bT78^f,?ꐢfuMsdȗuյI"8g\I Y]f=StD,Ͷ{s!C]}t_lut]kϑ mxȾ_P?bO/z IENDB`viking-1.4.2/src/icons/wp_conv_store_large.png0000644000175000017500000000061511166174146016410 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME   IDATHW .{L3Nn??YlpVat?KDJ$`(7[Li*G oxL^PH>Бa|O_@IzPu-g) pn9>?UN2k\Rm+Ur9{uT2h!ȱO{ƌ#fy1)evzU 9lMr]>ث%wOn9y[[]gnu\xwE9ncr;IENDB`viking-1.4.2/src/icons/wp_swimming.png0000644000175000017500000000016511166174146014707 00000000000000PNG  IHDRVΎW"p/CGJJK;#h ?ٞñє%Oٗȷ3yّ@8bHu1Nc-_q06F[u5gu R^=];>G!p6c=m>)%7l[.ZBXđf n ޗ+yZXvuyy z{Fu}_z==? V8Y~*i~=/8,#w9"BƬ jXn{)cVyR;/U}| g*q=Uɴk(N\’c>:gQUE +QPCe5{ucVb>k/𭟶p%IENDB`viking-1.4.2/src/icons/cursor_zoom.png0000644000175000017500000000165511166174146014735 00000000000000PNG  IHDRVΎWbKGD pHYs  tIME :5|tEXtComment(c) 2000 Jakub 'Jimmac' Steiner This image was created using Gimp. Gimp is free software as defined by the Free Software Foundation and is available for download at http://www.gimp.orgFZ lIDAT8˥AHa}~ܷ Q!BvE,:T dv[x v(<(2EIZk@>ooItz. /oexxx_ݧ5MEQ-EّRkH$ځA"3yf5Y*E0~rZt?l4.4!i (J6Un"\.n1NO&)%Vպo1&zwa766>Rh^J^\\A8ÁO5FD ᲈi l Dn}!IENDB`viking-1.4.2/src/icons/wp_parking_large.png0000644000175000017500000000063611166174146015665 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME &00IDATHWm yi;B%J5#1S 0ɐ,f!^)Blº03oFtmG@Gz<6-h& ^@x yhU=[p[ 9e+C{j>N^>-[ˮOI|O;bV겡&-& 'h +}uLB2E>~BdBvӮ^AֱWN:QB8ZX"nl ~+$M樑sIENDB`viking-1.4.2/src/icons/mover_22.png0000644000175000017500000000035311166174146014001 00000000000000PNG  IHDRĴl;gAMA a pHYs  d_IDATxݔ1 E?8qu$^.bPR/5l2v;Kr#UžV|aނ`Z-8.InEIENDB`viking-1.4.2/src/icons/showpic_18.png0000644000175000017500000000065611166174146014340 00000000000000PNG  IHDRVΎWbKGD pHYs  tIME  4StEXtCommentCreated with The GIMPd%nIDAT8˝=N0?GJ6+P ڴd>UJJ. D8?'xϞX/ZUks׬wyA[W( o_]~1<ЪƊ$ LN`dA {e/x*uqCdZb8 BU# RNu Ľ.fɓ7iw?~ObSFIENDB`viking-1.4.2/src/icons/wp_buoy_grn_wht.png0000644000175000017500000000025211166174146015560 00000000000000PNG  IHDRVΎWqIDAT8K!Cj2ʧVc<41Ŵ &~&<^ DU;}ˋ}( Ú*0PHc1ȱ+Ϧ\ ))IENDB`viking-1.4.2/src/icons/wp_light_large.png0000644000175000017500000000043111166174146015332 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME  XeBIDATH Dƍt'fNLh1V"5I݉w cw P>kɤ|IENDB`viking-1.4.2/src/icons/wp_geocache_fnd_large.png0000644000175000017500000000112111166174146016605 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME "(RIIDATHWQ LoDΔɜ){&އc2SglEq.U~2a}2E䑾R9YU\D$ E9~D=NE"Bҳ{L⼃2{ VrU%v"^޲.` 5O/YÆTJYs<r7'ٙ-E\"fVQإ" A2 Sׄ|y451ܣLbgR#= qk\!ƱAHɷĩ*򮢻|!Μ̅>vH2X1u1M+3G}c֛WaL19NY<46?ףj\亭vUgmKn.nr"mV}Hu4T\~=F:YFb\r! &kr nM5~x)^+G4auno.à*o!}s_i.x[IENDB`viking-1.4.2/src/icons/wp_store_large.png0000644000175000017500000000045511166174146015365 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME  (/IDATHݗ yƍNNv#1b(RS޵I/>ZcAш\rIyU;N%kr*.]}?"eon+Z(q1Ť>c#=6A88{VdDʭ)btJF-cc.|.v28\ sGnLpIENDB`viking-1.4.2/src/icons/wp_oil_field_large.png0000644000175000017500000000036511166174146016157 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME )uIDATH C]7q-"%$$jUWG^5Kљ$^8E5TnU.wIN粶~tfM0P.}?u,?axIENDB`viking-1.4.2/src/icons/wp_med_cty_large.png0000644000175000017500000000037211166174146015653 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME  4* mzIDATHc`Fk #5L̠5p E',}S0i|R!$NC??"8h\pZyQ@3)e IENDB`viking-1.4.2/src/icons/wp_house_large.png0000644000175000017500000000133511166174146015352 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME -9Q]IDATHW[n0 cH9|&L晼o'[ xiI9RJC;(}{<)upg2Rɉ9OBDUT$ !!(癹҉|qFpD^K*^!iV-) fH$Un9Ӌ i}嘨-iS=j/9Mދ+#9w$dDJ3t)D 2i%A.1`;dʦ;:ܑRv"$s8H#mM{szѡثV:J9jNZJ4y T}ef{{©l}: بbD4u0N: .\bRK6pkq*0tvΕ3Ĺ'Vʈh\.cɴ `U#W;\*5Z0Ρٟ72uއSlO wohHT+n 1=6ewq!o{e 1*ȵT9TQ\}2fM+j-P~Y%IXVm&;ddIENDB`viking-1.4.2/src/icons/wp_restroom.png0000644000175000017500000000021611166174146014724 00000000000000PNG  IHDRVΎWUIDAT8c`CbRhJ#dF$,bp5FltZJLb a " py[ؠ,\fc ?rͧIENDB`viking-1.4.2/src/icons/edwp_18.png0000644000175000017500000000065111166174146013616 00000000000000PNG  IHDRVΎWbKGDm pHYs  tIME !tEXtCommentCreated with The GIMPd%n IDAT8˕=N0m =GRХXN) H! G`'{{1D*f@FepN $I-,9 10RV+.[Jr L@?`(W҇fw8.8/$dIau{Jz{yT7mYǷu]Ypyf#Zٻ9rMGKuYb%Ʈ$djmX1YdL:ݳx9ҏ_;=Ubz;W$C\=je d뫕~W*}b|;}_4վ3l IENDB`viking-1.4.2/src/icons/wp_wbuoy_large.png0000644000175000017500000000037511166174146015377 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME  enÚ}IDATHK 0Й_nF(6*u<4⊈6E9"u*'RoguQ]I?-J¾^i^c?QB&1XtIENDB`viking-1.4.2/src/icons/wp_1st_aid_large.png0000644000175000017500000000035011166174146015547 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME  KhIDATHK DUciUgx^vth|AT}܁:" IENDB`viking-1.4.2/src/icons/wp_camp.png0000644000175000017500000000073211166174146013775 00000000000000PNG  IHDRVΎWbKGDC pHYs  tIME /9p{tEXtCommentCreated with The GIMPd%n>IDAT8˥1N0?Gzr0&@R!`sN\14.TkIIENDB`viking-1.4.2/src/icons/wp_zoo_large.png0000644000175000017500000000070311166174146015034 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME %eƻCIDATH[ ErG&&)Cs~L%b<o4!)-D<i̤u̵\Jv-,9%"D9})1ty֚K0)%'b)/s-4G{JY32 B#TKSOH tχb+խ#HF6R9?iĚf֌X4Vَ5`qJjjneա.ko9qLzK?^^Z@ky}H -Xγ!53FZYw4Zբn}i,qD*G-5⏝G};=YώӶIENDB`viking-1.4.2/src/icons/addtr_18.png0000644000175000017500000000052512041635651013751 00000000000000PNG  IHDRVΎWbKGDm pHYs  tIME 1d-tEXtCommentCreated with The GIMPd%nIDAT8˭T 0 t dJݠi7&Xֵ8Ja Aְu<^xhn׍LhaBE#q>J:gTh~f϶- %# S-?^U\8+JSoJ"BDRoMʨ nxcxZjDOgIQ-\IENDB`viking-1.4.2/src/icons/wp_shower.png0000644000175000017500000000020711166174146014361 00000000000000PNG  IHDRVΎWNIDAT8c`#O"F $6TDF4T?~*P0 AlBw=R6i`D5i1C0cdIENDB`viking-1.4.2/src/icons/vikdemlayer.png0000644000175000017500000000034511166174146014663 00000000000000PNG  IHDRh6sBITOIDAT(c?)o>aM,Ug``Ca_Wؠrk }bT,^zAܡ- ^(Rܡ-Nn)0hEgh&Cj Th6q4iR3e&MÞCIH2eIENDB`viking-1.4.2/src/icons/wp_buoy_red_grn.png0000644000175000017500000000025011166174146015526 00000000000000PNG  IHDRVΎWoIDAT8 @!C=]tF>3Ȭ4).HrV*LyԎ)p?2r=k8M`!lu. spzӊHe 2ȵ5;?}#b )"r4IENDB`viking-1.4.2/src/icons/wp_amuse_pk_large.png0000644000175000017500000000067011166174146016034 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME 8d$8IDATHkr \I=z&|d* q&L4$lcc옶۫"J0W\)=X$|V5 i_;#+:Ƙ]#jbLXJb{2fJ${{/Y3T9kkqq"H*H"HEERwzQ(1֝Ov ڝCbibtF__ IENDB`viking-1.4.2/src/icons/wp_null.png0000644000175000017500000000011511166174146014022 00000000000000PNG  IHDRVΎWIDAT8c``Q"VbJIENDB`viking-1.4.2/src/icons/wp_flag_green_large.png0000644000175000017500000000056011166174146016317 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME '2zJ IDATHm 鍸wę؏nÊԘ&%i >‹ [`xdGM̃Fq [@*R/98>HXDjG)W5u?&9&' ~;W] y,T,=9m\922jܫcouUNN\ 1T8Km^8Υ?9[ n,%:"- |tD^boglb"IENDB`viking-1.4.2/src/icons/wp_building.png0000644000175000017500000000023111166174146014644 00000000000000PNG  IHDRVΎW`IDAT8Q 0 C_YۤIiH`ϖjxCR+~$Qe{(\Y-ϵy+cIENDB`viking-1.4.2/src/icons/wp_summit_large.png0000644000175000017500000000046211166174146015545 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME "B4IDATHQ DqLLǮ(6HB`24*!DxjE<F"WϹD@Rb]dZh}ҢgH 0etّςcJeZ>U~7b.#଀]|foq33_l[43rk Im阯Җh\ѴA/2V`Jàո8Z}R©μ4qD]3Υ1q=9]cW݂>i:L(]W#-gf{jTN5dwH l߿/8l53doF^LkKNrס2o})IENDB`viking-1.4.2/src/icons/wp_block_red_large.png0000644000175000017500000000106011166174146016146 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME .:SIDATHW[ lQId@٩cjt)x~i `y_EQL0?L<XvbLD"0qXްsƼ͗XƤ Ăǰf8qENPjslU˱W?c<>~|ΤW Z:͞krFR Ԁ;F/i!CxdPCVŪ=В9TrzpmNg(c T8WKvu,=UKp7Վ+6=mЪE#0u@xދ=q,pZ/N]  7߹.-dnfX=z.)]h" =Gz.j#{]fǽ2O(I;zm'hn_UID[Ƙ0|g" bVS#ѭz x#zD%z9{_>M320~NIENDB`viking-1.4.2/src/icons/wp_anchor.png0000644000175000017500000000052111166174146014323 00000000000000PNG  IHDRVΎWbKGDC pHYs  tIME "y%tEXtCommentCreated with The GIMPd%nIDAT8˭T ! sP2;G9EWK'c'BxVJDdEE~jk*s }&;k$saoa?AN)Y/6 6#fqʫ@hdUySݺ`*V#I2UDnb;D7hh&"eL7IENDB`viking-1.4.2/src/icons/wp_buoy_ambr.png0000644000175000017500000000024711166174146015035 00000000000000PNG  IHDRVΎWnIDAT8K D5mXYO( :~Z{PT sYA&3G> u,k:Ȅef5"ȷKVݷھ6-"e&QpNIENDB`viking-1.4.2/src/icons/wp_bell.png0000644000175000017500000000022611166174146013771 00000000000000PNG  IHDRVΎW]IDAT8  P|)Ͷ{젥uk"[HY"֨*"YFwlf܄]>w1x6R܋IENDB`viking-1.4.2/src/icons/geozoom_18.png0000644000175000017500000000107011166174146014332 00000000000000PNG  IHDRVΎWbKGD pHYs  tIME 7 X6tEXtCommentCreated with The GIMPd%nIDAT8˕K1JA;tpn, B7DJ)H;:J'TQ:U q%͵⃏r L*R$ IZ.s{ax\/  -o5u^Ds"P1)j}:ܡ5[M61ŝvyzJSd2Dw+Mϝ᧣*6؂&"}v67!-k5)L}>V Y1ս&",y \f:a_wld25{ yPP:kVAb-W;HD)PE-;EDr)_."<7o8fC{3$~a-ZߛlIENDB`viking-1.4.2/src/icons/ruler_18.png0000644000175000017500000000064011166174146014006 00000000000000PNG  IHDRVΎWbKGD'^?dȂqqB,' *X9$s;iޟ/) !iw E1%wWݗ 7ILɅ*eN& SuU\छ?\IENDB`viking-1.4.2/src/icons/wp_fuel_large.png0000644000175000017500000000062411166174146015162 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME (OIDATHW[0 z#s3NIMN(Q%d'$>a?}- "]" )T "y)+U f쎄ATP{qw'sr y|~`<|V9&_vu#IENDB`viking-1.4.2/src/icons/wp_church_large.png0000644000175000017500000000065511166174146015507 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME  3-IDATHQ DhodΔ{&LG'!6RTJJ?vTbW*sUbęTߋ"A LǡLI!c1 .4PEȩKù~TxNՖǺUR mCe#X1WImn\xKA9 }Y$D?ĢR<9Dw\Z@ظ'+O WIENDB`viking-1.4.2/src/icons/wp_house.png0000644000175000017500000000055011166174146014176 00000000000000PNG  IHDRVΎWbKGDE!w pHYs  tIME %tEXtCommentCreated with The GIMPd%nIDAT8˭ H77_űTŭ.v7_i}nMΡp/ n Q.H`.`c^9P@on/]7Y@u,"?%iak^9SK)gq@MhQ,O.D]ʹOlGEm\ œ߾b5180Ns e Y-IENDB`viking-1.4.2/src/icons/wp_lrg_cty.png0000644000175000017500000000041111166174146014512 00000000000000PNG  IHDRVΎWbKGD,,m( pHYs  tIME ;tEXtCommentCreated with The GIMPd%nmIDAT8K0DWę.V&F'!! "NmˏAHFOm2L?H0C3swjOڬD$/^m;S[ZIIENDB`viking-1.4.2/src/icons/wp_flag_red_large.png0000644000175000017500000000057511166174146015777 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME , y1IDATHA E?fnzL̦6#ډ$FxB-v +[ٜEh% 8D(u7(1|> ssʹ1InU$!POzuDʩj;ѿN=]&&GĔtoV_1Y{չcdH੕Ս}WV1d7WYn3fw'V/r,IENDB`viking-1.4.2/src/icons/wp_swimming_large.png0000644000175000017500000000067311166174146016065 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME  ;IDATHWQ foԞ3P bgcIRO=A?Va橫^!ZRfRteoeۯ8DD nBEz)~kum[n(ho\w#@v~/҈n":/h<#>8H6f-,;GUP(UՉ!>C^{U* j."Z+`]׮^o=g#cyl#;܃f\YЩsAm1zz2cSuTe)EMfdwժHIH_nG͡G,߿߸l<u$IENDB`viking-1.4.2/src/icons/wp_buoy_grn_large.png0000644000175000017500000000051711166174146016054 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME ,GZmIDATHݗA E[Ls'3u6( ̰1XUiX"f6}r&Ф@i[Xd{W爾_U$Xwns,~Ony=iPg݁ Êȉh!xɴMiw+Rٗ!Z ě44h\'n$Zol$n$'b`!=~98A66ǢF力Kc5u+O#i:E.,c $KZucY2*IENDB`viking-1.4.2/src/icons/wp_diamond_red.png0000644000175000017500000000022011166174146015312 00000000000000PNG  IHDRVΎWWIDAT81 3(5qn`"BLf + $yT O. h֕\5l;z~-EIENDB`viking-1.4.2/src/icons/wp_drinking_wtr.png0000644000175000017500000000022511166174146015553 00000000000000PNG  IHDRVΎW\IDAT8͒1 p~Aq+Jyd[6R™&UB ;Zl9k`6!=$@FOݯOpml7}2C,bsL9^WȄ\?NY8EIENDB`viking-1.4.2/src/icons/wp_phone_large.png0000644000175000017500000000107311166174146015337 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME 4yizIDATHV lDgNh&Gr^mT?>~DD{;O+ԈC C? %*B دlɾlӢ@DWVɣajTu]3Ɔ4nuazB=EOUΞ3)y hNU澶,n ٰy[>Z! X}a.$Yzf\O>]C[-ZJ_f!j1~L. ػy;VCڼa9òi<@;8|Dy,]h!R}\V/>a7j#V{;ZKC4ڈ!DxwR7o nt\/n bYU.Y)͖؈B!Ym D)Wn qs4;ĿƿjGR{LIENDB`viking-1.4.2/src/icons/wp_ice_skating_large.png0000644000175000017500000000106511166174146016507 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME 'kIDATHWQ \:FLLyڎ86D]T U]/zt3GksN ҥ!(Hsݣ- f$ю~fuTս/[He%+?;U['S65B.Ճ_܄s#pE(%rFRVYqU!o 6sU(;\8q!s,|2rSո8٘nr<"`2M R |#M,yWUlj^1n(W9"讀~g<5/,RX: *}5jsߦM޺콡dk9\k屗}C(5O K԰;~zL|Pe8jj.>vr;{8.T4DnN͵LeU[]0ku]kϪL@C=MRIENDB`viking-1.4.2/src/icons/wp_deer.png0000644000175000017500000000066511166174146014001 00000000000000PNG  IHDRVΎWbKGDC pHYs  tIME 5RtEXtCommentCreated with The GIMPd%nIDAT8˥1N0?WzzTq C&PdfH,\UUT z68vm/Y%ń1}^Ut(pP_KN20A]-Mw]*j Y o֌1=$pCRc]K '@u/[9*`p¹:aͺXߵ ~&\hmpڍzZQ88H Izq0^)PW|V5)IDATHŗm Fx=)* fī0QD`ƵX&#bKAZ&]TQϻ'7h S'k7l#~ r[du?yVFis^}*i0I4w6M5Ny7\?u:8|`?'wI\{^J`fnku_Ǫqf~F9k$dG&\Aְ֑sBz$sAZ̿oc"nT{eRSeNONN8L`B:|IENDB`viking-1.4.2/src/icons/wp_car.png0000644000175000017500000000060711166174146013623 00000000000000PNG  IHDRVΎWbKGD pHYs  tIME )y$tEXtCommentCreated with The GIMPd%nIDAT8˭S10 Tl]P<DٻS!ԑ fwh&$iAȊ9@´Rv[9yR@8{ D\u> qV Y CeYb ܍ )@D'YvϺEcMWV&q2d9j?re;뺦JQ_ԇvf; \UŲZr ^]oځ Lt&#?IENDB`viking-1.4.2/src/icons/wp_wbuoy.png0000644000175000017500000000022611166174146014220 00000000000000PNG  IHDRVΎW]IDAT8ӱ Pن­i| Fb6 UZ*X<(DC:Q!2c2)ZT( t<IENDB`viking-1.4.2/src/icons/vikgeoreflayer.png0000644000175000017500000000115611166174146015366 00000000000000PNG  IHDRh6sBITO&IDAT(ukRaƟsxz= @2rd8 +ES j?i'tz}>EQT*nSnnr̘jf[P(؛%2peBnV8eRPHn[. BU*jZ4 pd2"H$ɔL& !drDat:]ѐH`0l|(jp8VM#~i@ d2i4Zzm,7~B@0KNʥ51#Vt(0,bmƚ5_je/]8mYXkH$Jl=_i8"0(AD`YJRltXV6m=::r2qIENDB`viking-1.4.2/src/icons/route_finder_18.png0000644000175000017500000000075612120725153015341 00000000000000PNG  IHDRVΎWsRGBbKGD|R2 pHYs  tIME u,nIDAT8˥KJA!q5aDB An$GzYY.:Mgт~@W*@J8xcH;<"Rp|7vׂD /ޟ\UׂVuYŃ$ Zb=(IRsܑb|ܨr ~q8>If'nzEcD2{T KX=\dOVz:N1(2T;Zonh4h6Z%[U5#2N4VFؿ#F9W&I|8`j Sp3)"+ˣߚ1_QWH F# H@5IENDB`viking-1.4.2/src/icons/viktrwlayer.png0000644000175000017500000000073111166174146014731 00000000000000PNG  IHDRasBIT|dIDAT81`?aBZ,R`afH~E`=fs]pg 'IfF4  z{ˋo@ضMV#s<=G=<\.Z-ǹ6M~ON',z~hkRR ˲lHӨ5OOwF9,\.8:?ݾae2?@Q"m@&( i @$* MH$DQ&IpP(Bjf|t:.>8Cu_M&8$ !jn/Ieh9/H$B.cXx,X,F|>KlIENDB`viking-1.4.2/src/icons/wp_controlled_large.png0000644000175000017500000000037311166174146016375 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME  :b{IDATH E廧jkjQ!Gpw7$D/Xryo-ڽJ&ʱEr72č9I/oxyJ\jB2WAo2!◪VN4~#MĖzIENDB`viking-1.4.2/src/icons/wp_buoy_wht_grn_large.png0000644000175000017500000000057711166174146016744 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME :IIDATHWQ 3Ngfg2cZ=hۈ3OEzJHD5!"}@DPl9k~h1\JG@{J=$j\9ܭT;Vp)6gEki5?ɱ ?9z2Ql)]U{Jve]:RnW4 8]ׁp +g/4#ŵVU>A.[ [Ô+MV7 ^ui{U<\jIENDB`viking-1.4.2/src/icons/wp_pharmacy_large.png0000644000175000017500000000056711166174146016041 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME #YIDATHWQ }oٍLLLL݇i&V $H UH~}c G᳖AmX.-N&.Tw}jsگqr!j_cIt1=*КӘ;I؏v I&FDI0q%I IX"iJ$I .)߀xR/$zid~rfobt:V" Z8uo a幠{np8)^.Ý 4i 84ʯ!FY-Phc%\j[jY2 PN)ppgocezp]T8_)M(6t<@[8Nj6}9b.qk9{ `Qnngd²[3zG%KmH>"+OIENDB`viking-1.4.2/src/icons/wp_bridge.png0000644000175000017500000000027511166174146014313 00000000000000PNG  IHDRVΎWIDAT8œQ C̣{c8VEXAP1Ϥ"p8y#`됡uY]2IX#i#GSȑD\/Ij#o^|_|ҁd82)VH6 @#(Pw/~;<|IENDB`viking-1.4.2/src/icons/wp_buoy_red_large.png0000644000175000017500000000060611166174146016037 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME )Dw)IDATHWA rߴ7^0!b<,IcjUyHDVGRgmt~b@B\&0sY1IHrYߒս6xHVg7تW(-NW45O'DFn2OrϵJ+܁,ꑵkhs#sw8Wߟĝ 2w ~IENDB`viking-1.4.2/src/icons/wp_wpt_dot.png0000644000175000017500000000064611166174146014541 00000000000000PNG  IHDRVΎWbKGDC pHYs  tIME 2StEXtCommentCreated with The GIMPd%n IDAT8˥1j1Ew|&UKn\E²S| Wn _/.RJkiA]͟GH|?PS0a )i3nLSqE eܚ8Y'Sdk/LşMU9ROiS2PUӑptJvmuZ%F [T>"3RoĔeφj{ӤR*f=~a~6YG1.zu{IENDB`viking-1.4.2/src/icons/wp_mug.png0000644000175000017500000000023511166174146013643 00000000000000PNG  IHDRVΎWdIDAT8c`?&0PȈ!&: bd U ]PX5r?]!>}]  Xj^Q-_5'=*IENDB`viking-1.4.2/src/icons/cursor_addwp.png0000644000175000017500000000142711166174146015045 00000000000000PNG  IHDR szzbKGD pHYs  tIME 8$$;tEXtComment(c) 2000 Jakub 'Jimmac' Steiner This image was created using Gimp. Gimp is free software as defined by the Free Software Foundation and is available for download at http://www.gimp.orgFZ IDATX͕?k@Ɵ~ɮMH(w`>D\ҥ ~&Ml8A.pILlx}QL29&1M ] ]0$q7#@QA0Rimt cnI>a$pZ0|\Ws$ {וJTVo X,p(5^G bsj*þ4m-f$ BZ*&fQm̲݄vc}x*MI%0 PTFʲcJY@]y*|V|M ?8<>p~;ckJ7$s- 9Z9\QVS  e˿>o'zevZx{ܵPIENDB`viking-1.4.2/src/icons/wp_dam.png0000644000175000017500000000017011166174146013612 00000000000000PNG  IHDRVΎW?IDAT8c` b CW8d+IG T+VV80˜ $,!O 32IENDB`viking-1.4.2/src/icons/wp_buoy_wht_grn.png0000644000175000017500000000025511166174146015563 00000000000000PNG  IHDRVΎWtIDAT8Q Ca>V#_+:BأvAWa.RV)pq} 1d{v 9QD#e# T` R.#9ukȵt(JFIENDB`viking-1.4.2/src/icons/wp_knife_large.png0000644000175000017500000000117711166174146015327 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME +oIDATHWۍ0 鈮ɩi]&s Cp8T UGD:VA]YFeu~U--[*[ebSmw|> C܎͋A~eDqąߍ#B2[}D9LxρG*Hs`1##piUFZ ܶ 7zHc0rXJUU9eSOڸp\:v{SoN0}ff^xܹ\'J[¤KV:FfTǜΦr Ƕ+խp*cRaO'QϻcTX5͹fT8vE$ӎyUzs&s;$nl\˪v}kNo ԟ_9IENDB`viking-1.4.2/src/icons/thumbnails.png0000644000175000017500000000172511166174146014520 00000000000000PNG  IHDRL\sBITOIDATxѲ DuknQ0Csӽ H;fd#lǯ{b@ A1  b@ A1  b@ A1  {UyvcC8+CB\Z{ SȀǜ'Gbu=kU5f>;c285d9,sit.ywicc6u.9Fz;VA^nߜI_z }Υ-uwHgNi2Ag/C{ j)`[.({0}垿[#R'pw9AdXtr.ag!:4JSBoʱm͵.\XNMRkŦ:NaS]FfvNIzg;zn)G2թL"7Μ9CRkEXBmPgqnlteqZs0t;upϱ^X#Ʃen$P @Ǟl:gS j8dN!4:"=r?:ԉV2S^#yx/qG6"oߤ\7_L\o;Ygx{OS&.9s֫;u{Fj.r^d4Ͻz:<]D{ce[JrWRG<>W77uD9w[8jZ E l\-EE: $*ń`X [L` b3;3P C )gDQDEl1޸th@t> j/Z̿R\٦ D? ﮸}|)y4]2Zd葮<߫z(t:A {{ANzVV&JP\0nv7f̣DJ | חUHefDv|\ Hg%dǧ53{O2ʨBűX*8 UkD"brf5"bǎv$~Wɽ]IENDB`viking-1.4.2/src/icons/wp_buoy_grn.png0000644000175000017500000000024611166174146014701 00000000000000PNG  IHDRVΎWmIDAT8K DW&b BEjᑇ1uAd(OQR'׷ͻ4\igaŭawA}Qi !EIENDB`viking-1.4.2/src/icons/wp_dive2_large.png0000644000175000017500000000064711166174146015245 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME 7$'IDATHQ EtGpM5iއ"I !DwHWU=5!/ʣ@XfA(: HNl9F`^T }Ѳ4Drɩ5brnΕmzqyqXvsxޭp6v".T"!4h5i9sK3YE1dzs՘rXI1Ȼț^1NjΓ_u^]Cޘ m<?=I9wI,"Vv;QjĻIENDB`viking-1.4.2/src/icons/wp_wrecker_large.png0000644000175000017500000000056311166174146015673 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME  ;ZoIDATHV .{#x&y&}&LR\tmML^OR$"?RIO ?9=iAsZ&"eD[_5I *qK <[uO>҉D~j~5'1"hj\ isg\["1.jP*V|=t(#ָ׮~׼jw5: #UbۑْMyG㣸<2W\I]y&IENDB`viking-1.4.2/src/icons/wp_mine.png0000644000175000017500000000022311166174146014000 00000000000000PNG  IHDRVΎWZIDAT8c`cġ%3l3az Uj#Ibs bDM!Ańjdن@RRCfIENDB`viking-1.4.2/src/icons/wp_fuel.png0000644000175000017500000000022211166174146014002 00000000000000PNG  IHDRVΎWYIDAT8ݑ7 _!q;X1ABbITYH#bPfQHZū fwNGXqMp]Q<nIENDB`viking-1.4.2/src/icons/wp_picnic_large.png0000644000175000017500000000057311166174146015477 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME '.o<IDATHWA $ ?OMM͛i5ʡ\4!M+"*1 ZiܷƢȇ=`D~u=\GSc 1r[qӓOL„-ܯi!R/՟K8.>Er`vjX+s9U~ T^~q/׹|jՂjyWtjRf>vseeHn9T}Uα׷x!u;zU7ij);oQ?mo2ݕk IENDB`viking-1.4.2/src/icons/cursor_mapdl.png0000644000175000017500000000141411166174146015037 00000000000000PNG  IHDR szzbKGD pHYs  tIME 5,NtEXtComment(c) 2000 Jakub 'Jimmac' Steiner This image was created using Gimp. Gimp is free software as defined by the Free Software Foundation and is available for download at http://www.gimp.orgFZ IDATX͕?HQ?n4KFKMR aAS -Mub ֒T MԦ()vN!8;u7=}?y/xh4<z !TUB _ a nAH=74M^(0%5v"BբX, ڭ5?sEv:*qz]P(p;c6[,i.SvR_k]>ӺlC>'J&{^{Q `.W DV znvM8 D5! )"ݢVY\*JT}cJ-cP۔^%HV2w8%6Zу,Y&ij'Fȯ w+C#bpdebG]cØe,DIENDB`viking-1.4.2/src/icons/wp_museum_large.png0000644000175000017500000000052611166174146015543 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME :1/7-IDATHV[ [ވ;NLLGe*[ : d_m}rQ:pIsVpYQ*b %OJLQ{Ƴf\ Em|W#ĺWyXggk#iwI3Zǃd{ 93b\.9\W۫0*C1GDusn}#ɓe:U2C]f溭:qSIENDB`viking-1.4.2/src/icons/wp_fitness_large.png0000644000175000017500000000061511166174146015702 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME -Lh IDATHA E ㍸==SsE*"X@fhFx|~fIJoQ nR, 髐kPm+Tڈև"%5x w!m8GJO2 ύUXpCwY>%!D@|u{1lULy_s_j,ir$kҨ }Z}lh}k Yaf~g%0{ ڟ&'2T*xX5m!IfަTvbIENDB`viking-1.4.2/src/icons/wp_1st_aid.png0000644000175000017500000000023211166174146014374 00000000000000PNG  IHDRVΎWaIDAT8͓Q 0C!Eѥ-:FA@5Y ck ܝh< ;g|yF2D}Qf , ]i1 IENDB`viking-1.4.2/src/icons/viking.png0000644000175000017500000001046111166174146013636 00000000000000PNG  IHDR00WbKGD pHYs  tIME3n4IDAThY]Wuks{{j%[2Aap qxHU@1_!_ UQgvZBB:`: u@uÓ|ሼׯ1cfMDD(΀O=Y\Msz#O55fafn0 7j}xAV/ *WJs@-z{BQ hҡ~,e/R{ 탍o#] u@ j`weW9 sXDb5T! @]ަT-3,5 4/AS:zÍFwz?/.^elׁ503iÏkfs:߽6qh&y4gh7Qu3`|0++k@eQXZGg̣wIFZd@!Loß#{Jon."fQiQ٬N9MP9A܋K2%0:1T+q!|&9)q {tetZ;xGۛ4Y/|ݾWUԑ#6qpjjjioXe EigF E 3hUz҈SEkNTjm79}, ou̬gf(ssΙs Y9'88݃O{V=Ĥ9wUԪhh-EUPf?dC` #8 ċm\I{ԓ$3T7eW';$jfEs"o=M(oF!{-󇘌`4(FXAL#OvWЋΜ^323l :y܌Zfv82UdkG@q\ߖ@&" f cFf@=gX%E-%[m]mZ5lm8pp,@̬Y5*"qŲ~m]&e8<6h V\4B@7*&LN^ YYf5&n$E/mtg;M©jB/nPP(Y+E<v(BA(hny#h$~>v.y,f>H.jJʛ?\13l X0n1%"r'Ud'kAeuGqs;o1X)SR zx` գޘC)4U(<.JXq&fш}-X[ts.^Ҳt.NUkpCvE؁D(((J^}"B(ݫ2;g1:<'I,(giq,@8NA^7fAy-fv#UEdVDdY^Lz@M B4B,*1kA;௜726C$pG{qB55z-6s*FMhNPM ef¥7TUc3hfl̲e´lf7es oaq+ylc!EC؝SٮiU*3葘-RG-U9ps+kk)k}B0^{z^Qي /SueeffvCU۹g3?n@mEjTkLu@)j W iz)zDmdYF$IJyJV6ZN;֬lW^57l̒QYLlh-T39>aC@ˮ`÷ol$<7㮃$@5&gj\8 +diԞiGzd3tW`f[fv6i7)ok̳|65;8/FUa76w" xKޢ( "puctBQ;o2Mo\Is߼F/W%`-](e;%3X>gBvdRx]_LLEǮPe Ymǘlt+ (?Xfff/3fv[^D ʶBl ^O&eڮQmE AajW?9fnT9r!׈f8`߼j[iZzg`9p73JF]*4lݪGCɕ՗&hOO2ypF;ة`JK].oaڻcߟ9U V ,NQ4Hs\(tٮٶ]0ʶ|KRCC@Ey[eI7clcf4nzO,{׺ܠ}b)CB6ӧzTխ*mvJ"GQ4UoUN|أSs{?ЪjČ9TmłrVwoeWodCc.2wQv-F%(Tu) wusz|flDZxzwZ=f7lHiPL{"hLK6J" k͢{ܳkd}&+l-&J=j 4wy5JYZ񾾕"+w.eh;eO0sSIENDB`viking-1.4.2/src/icons/wp_cap_cty.png0000644000175000017500000000041511166174146014475 00000000000000PNG  IHDRVΎWbKGD,,m( pHYs  tIME  1tEXtCommentCreated with The GIMPd%nqIDAT8 0 Ce0)q"gŵ#4FT2H9Xy67m%GNm p{X#ZӒ5d3}#' ΍%?tԭG 9IENDB`viking-1.4.2/src/icons/wp_fish_large.png0000644000175000017500000000061711166174146015162 00000000000000PNG  IHDR;0sRGBbKGD pHYs  tIME 8 CIDATHmn E&fMvM5?fbC;\@;r*+B('XBlI PJ gyCI :qR(:,_z\@ G (i@Zh e1|@y-և_ ՋS㡬FDZNB㞨}OM#ݒyո{W憼CݟJ(OvD~&Ys&uM͙s%n+]⻮˾Nweq;IENDB`viking-1.4.2/src/vikwindow.c0000644000175000017500000040261012175546146012720 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * Copyright (C) 2005-2006, Alex Foobarian * Copyright (C) 2012, Rob Norris * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "viking.h" #include "background.h" #include "acquire.h" #include "datasources.h" #include "vikgoto.h" #include "dems.h" #include "mapcache.h" #include "print.h" #include "preferences.h" #include "icons/icons.h" #include "vikexttools.h" #include "garminsymbols.h" #include "vikmapslayer.h" #include "geonamessearch.h" #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_MATH_H #include #endif #ifdef HAVE_STRING_H #include #endif #include #include #include #include #include #include #include // This seems rather arbitary, quite large and pointless // I mean, if you have a thousand windows open; // why not be allowed to open a thousand more... #define MAX_WINDOWS 1024 static guint window_count = 0; #define VIKING_WINDOW_WIDTH 1000 #define VIKING_WINDOW_HEIGHT 800 #define DRAW_IMAGE_DEFAULT_WIDTH 1280 #define DRAW_IMAGE_DEFAULT_HEIGHT 1024 #define DRAW_IMAGE_DEFAULT_SAVE_AS_PNG TRUE static void window_finalize ( GObject *gob ); static GObjectClass *parent_class; static void window_set_filename ( VikWindow *vw, const gchar *filename ); static const gchar *window_get_filename ( VikWindow *vw ); static VikWindow *window_new (); static void draw_update ( VikWindow *vw ); static void newwindow_cb ( GtkAction *a, VikWindow *vw ); // Signals static void open_window ( VikWindow *vw, GSList *files ); static void destroy_window ( GtkWidget *widget, gpointer data ); /* Drawing & stuff */ static gboolean delete_event( VikWindow *vw ); static gboolean key_press_event( VikWindow *vw, GdkEventKey *event, gpointer data ); static void window_configure_event ( VikWindow *vw ); static void draw_sync ( VikWindow *vw ); static void draw_redraw ( VikWindow *vw ); static void draw_scroll ( VikWindow *vw, GdkEventScroll *event ); static void draw_click ( VikWindow *vw, GdkEventButton *event ); static void draw_release ( VikWindow *vw, GdkEventButton *event ); static void draw_mouse_motion ( VikWindow *vw, GdkEventMotion *event ); static void draw_zoom_cb ( GtkAction *a, VikWindow *vw ); static void draw_goto_cb ( GtkAction *a, VikWindow *vw ); static void draw_refresh_cb ( GtkAction *a, VikWindow *vw ); static void draw_status ( VikWindow *vw ); /* End Drawing Functions */ static void menu_addlayer_cb ( GtkAction *a, VikWindow *vw ); static void menu_properties_cb ( GtkAction *a, VikWindow *vw ); static void menu_delete_layer_cb ( GtkAction *a, VikWindow *vw ); /* tool management */ typedef struct { VikToolInterface ti; gpointer state; gint layer_type; } toolbox_tool_t; #define TOOL_LAYER_TYPE_NONE -1 typedef struct { int active_tool; int n_tools; toolbox_tool_t *tools; VikWindow *vw; } toolbox_tools_t; static void menu_tool_cb ( GtkAction *old, GtkAction *a, VikWindow *vw ); static toolbox_tools_t* toolbox_create(VikWindow *vw); static void toolbox_add_tool(toolbox_tools_t *vt, VikToolInterface *vti, gint layer_type ); static int toolbox_get_tool(toolbox_tools_t *vt, const gchar *tool_name); static void toolbox_activate(toolbox_tools_t *vt, const gchar *tool_name); static const GdkCursor *toolbox_get_cursor(toolbox_tools_t *vt, const gchar *tool_name); static void toolbox_click (toolbox_tools_t *vt, GdkEventButton *event); static void toolbox_move (toolbox_tools_t *vt, GdkEventMotion *event); static void toolbox_release (toolbox_tools_t *vt, GdkEventButton *event); /* ui creation */ static void window_create_ui( VikWindow *window ); static void register_vik_icons (GtkIconFactory *icon_factory); /* i/o */ static void load_file ( GtkAction *a, VikWindow *vw ); static gboolean save_file_as ( GtkAction *a, VikWindow *vw ); static gboolean save_file ( GtkAction *a, VikWindow *vw ); static gboolean save_file_and_exit ( GtkAction *a, VikWindow *vw ); static gboolean window_save ( VikWindow *vw ); struct _VikWindow { GtkWindow gtkwindow; VikViewport *viking_vvp; VikLayersPanel *viking_vlp; VikStatusbar *viking_vs; GtkToolbar *toolbar; /* tool management state */ guint current_tool; toolbox_tools_t *vt; guint16 tool_layer_id; guint16 tool_tool_id; GtkActionGroup *action_group; gboolean pan_move; gint pan_x, pan_y; guint draw_image_width, draw_image_height; gboolean draw_image_save_as_png; gchar *filename; gboolean modified; GtkWidget *open_dia, *save_dia; GtkWidget *save_img_dia, *save_img_dir_dia; gboolean only_updating_coord_mode_ui; /* hack for a bug in GTK */ GtkUIManager *uim; GThread *thread; /* half-drawn update */ VikLayer *trigger; VikCoord trigger_center; /* Store at this level for highlighted selection drawing since it applies to the viewport and the layers panel */ /* Only one of these items can be selected at the same time */ gpointer selected_vtl; /* notionally VikTrwLayer */ GHashTable *selected_tracks; gpointer selected_track; /* notionally VikTrack */ GHashTable *selected_waypoints; gpointer selected_waypoint; /* notionally VikWaypoint */ /* only use for individual track or waypoint */ /* For track(s) & waypoint(s) it is the layer they are in - this helps refering to the individual item easier */ gpointer containing_vtl; /* notionally VikTrwLayer */ }; enum { TOOL_PAN = 0, TOOL_ZOOM, TOOL_RULER, TOOL_SELECT, TOOL_LAYER, NUMBER_OF_TOOLS }; enum { VW_NEWWINDOW_SIGNAL, VW_OPENWINDOW_SIGNAL, VW_LAST_SIGNAL }; static guint window_signals[VW_LAST_SIGNAL] = { 0 }; // TODO get rid of this as this is unnecessary duplication... static gchar *tool_names[NUMBER_OF_TOOLS] = { N_("Pan"), N_("Zoom"), N_("Ruler"), N_("Select") }; G_DEFINE_TYPE (VikWindow, vik_window, GTK_TYPE_WINDOW) VikViewport * vik_window_viewport(VikWindow *vw) { return(vw->viking_vvp); } VikLayersPanel * vik_window_layers_panel(VikWindow *vw) { return(vw->viking_vlp); } /** * Returns the statusbar for the window */ VikStatusbar * vik_window_get_statusbar ( VikWindow *vw ) { return vw->viking_vs; } typedef struct { VikStatusbar *vs; vik_statusbar_type_t vs_type; gchar* message; // Always make a copy of this data } statusbar_idle_data; /** * For the actual statusbar update! */ static gboolean statusbar_idle_update ( statusbar_idle_data *sid ) { vik_statusbar_set_message ( sid->vs, sid->vs_type, sid->message ); g_free ( sid->message ); g_free ( sid ); return FALSE; } /** * vik_window_statusbar_update: * @vw: The main window in which the statusbar will be updated. * @message: The string to be displayed. This is copied. * @vs_type: The part of the statusbar to be updated. * * This updates any part of the statusbar with the new string. * It handles calling from the main thread or any background thread * ATM this mostly used from background threads - as from the main thread * one may use the vik_statusbar_set_message() directly. */ void vik_window_statusbar_update ( VikWindow *vw, const gchar* message, vik_statusbar_type_t vs_type ) { statusbar_idle_data *sid = g_malloc ( sizeof (statusbar_idle_data) ); sid->vs = vw->viking_vs; sid->vs_type = vs_type; sid->message = g_strdup ( message ); if ( g_thread_self() == vik_window_get_thread ( vw ) ) { g_idle_add ( (GSourceFunc) statusbar_idle_update, sid ); } else { // From a background thread gdk_threads_add_idle ( (GSourceFunc) statusbar_idle_update, sid ); } } // Actual signal handlers static void destroy_window ( GtkWidget *widget, gpointer data ) { if ( ! --window_count ) gtk_main_quit (); } VikWindow *vik_window_new_window () { if ( window_count < MAX_WINDOWS ) { VikWindow *vw = window_new (); g_signal_connect (G_OBJECT (vw), "destroy", G_CALLBACK (destroy_window), NULL); g_signal_connect (G_OBJECT (vw), "newwindow", G_CALLBACK (vik_window_new_window), NULL); g_signal_connect (G_OBJECT (vw), "openwindow", G_CALLBACK (open_window), NULL); gtk_widget_show_all ( GTK_WIDGET(vw) ); window_count++; return vw; } return NULL; } static void open_window ( VikWindow *vw, GSList *files ) { gboolean change_fn = (g_slist_length(files) == 1); /* only change fn if one file */ GSList *cur_file = files; while ( cur_file ) { // Only open a new window if a viking file gchar *file_name = cur_file->data; if (vw != NULL && check_file_magic_vik ( file_name ) ) { VikWindow *newvw = vik_window_new_window (); if (newvw) vik_window_open_file ( newvw, file_name, TRUE ); } else { vik_window_open_file ( vw, file_name, change_fn ); } g_free (file_name); cur_file = g_slist_next (cur_file); } g_slist_free (files); } // End signals void vik_window_selected_layer(VikWindow *vw, VikLayer *vl) { int i, j, tool_count; VikLayerInterface *layer_interface; if (!vw->action_group) return; for (i=0; itools_count; for (j = 0; j < tool_count; j++) { action = gtk_action_group_get_action(vw->action_group, layer_interface->tools[j].radioActionEntry.name); g_object_set(action, "sensitive", i == vl->type, NULL); } } } static void window_finalize ( GObject *gob ) { VikWindow *vw = VIK_WINDOW(gob); g_return_if_fail ( vw != NULL ); a_background_remove_window ( vw ); G_OBJECT_CLASS(parent_class)->finalize(gob); } static void vik_window_class_init ( VikWindowClass *klass ) { /* destructor */ GObjectClass *object_class; window_signals[VW_NEWWINDOW_SIGNAL] = g_signal_new ( "newwindow", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, G_STRUCT_OFFSET (VikWindowClass, newwindow), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); window_signals[VW_OPENWINDOW_SIGNAL] = g_signal_new ( "openwindow", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, G_STRUCT_OFFSET (VikWindowClass, openwindow), NULL, NULL, g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1, G_TYPE_POINTER); object_class = G_OBJECT_CLASS (klass); object_class->finalize = window_finalize; parent_class = g_type_class_peek_parent (klass); } static void zoom_changed (GtkMenuShell *menushell, gpointer user_data) { VikWindow *vw = VIK_WINDOW (user_data); GtkWidget *aw = gtk_menu_get_active ( GTK_MENU (menushell) ); gint active = GPOINTER_TO_INT(gtk_object_get_data ( GTK_OBJECT (aw), "position" )); gdouble zoom_request = pow (2, active-2 ); // But has it really changed? gdouble current_zoom = vik_viewport_get_zoom ( vw->viking_vvp ); if ( current_zoom != 0.0 && zoom_request != current_zoom ) { vik_viewport_set_zoom ( vw->viking_vvp, zoom_request ); // Force drawing update draw_update ( vw ); } } /** * @mpp: The initial zoom level */ static GtkWidget *create_zoom_menu_all_levels ( gdouble mpp ) { GtkWidget *menu = gtk_menu_new (); char *itemLabels[] = { "0.25", "0.5", "1", "2", "4", "8", "16", "32", "64", "128", "256", "512", "1024", "2048", "4096", "8192", "16384", "32768" }; int i; for (i = 0 ; i < G_N_ELEMENTS(itemLabels) ; i++) { GtkWidget *item = gtk_menu_item_new_with_label (itemLabels[i]); gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); gtk_widget_show (item); gtk_object_set_data (GTK_OBJECT (item), "position", GINT_TO_POINTER(i)); } gint active = 2 + round ( log (mpp) / log (2) ); // Ensure value derived from mpp is in bounds of the menu if ( active >= G_N_ELEMENTS(itemLabels) ) active = G_N_ELEMENTS(itemLabels) - 1; if ( active < 0 ) active = 0; gtk_menu_set_active ( GTK_MENU(menu), active ); return menu; } static GtkWidget *create_zoom_combo_all_levels () { GtkWidget *zoom_combo = gtk_combo_box_new_text(); GtkComboBox *combo = GTK_COMBO_BOX ( zoom_combo ); gtk_combo_box_append_text ( combo, "0.25"); gtk_combo_box_append_text ( combo, "0.5"); gtk_combo_box_append_text ( combo, "1"); gtk_combo_box_append_text ( combo, "2"); gtk_combo_box_append_text ( combo, "4"); gtk_combo_box_append_text ( combo, "8"); gtk_combo_box_append_text ( combo, "16"); gtk_combo_box_append_text ( combo, "32"); gtk_combo_box_append_text ( combo, "64"); gtk_combo_box_append_text ( combo, "128"); gtk_combo_box_append_text ( combo, "256"); gtk_combo_box_append_text ( combo, "512"); gtk_combo_box_append_text ( combo, "1024"); gtk_combo_box_append_text ( combo, "2048"); gtk_combo_box_append_text ( combo, "4096"); gtk_combo_box_append_text ( combo, "8192"); gtk_combo_box_append_text ( combo, "16384"); gtk_combo_box_append_text ( combo, "32768"); /* Create tooltip */ gtk_widget_set_tooltip_text (GTK_WIDGET (combo), _("Select zoom level")); return zoom_combo; } static gint zoom_popup_handler (GtkWidget *widget) { GtkMenu *menu; g_return_val_if_fail (widget != NULL, FALSE); g_return_val_if_fail (GTK_IS_MENU (widget), FALSE); /* The "widget" is the menu that was supplied when * g_signal_connect_swapped() was called. */ menu = GTK_MENU (widget); gtk_menu_popup (menu, NULL, NULL, NULL, NULL, 1, gtk_get_current_event_time()); return TRUE; } static void vik_window_init ( VikWindow *vw ) { GtkWidget *main_vbox; GtkWidget *hpaned; vw->action_group = NULL; vw->viking_vvp = vik_viewport_new(); vw->viking_vlp = vik_layers_panel_new(); vik_layers_panel_set_viewport ( vw->viking_vlp, vw->viking_vvp ); vw->viking_vs = vik_statusbar_new(); vw->vt = toolbox_create(vw); window_create_ui(vw); window_set_filename (vw, NULL); vw->toolbar = GTK_TOOLBAR(gtk_ui_manager_get_widget (vw->uim, "/MainToolbar")); // Set the default tool gtk_action_activate ( gtk_action_group_get_action ( vw->action_group, "Pan" ) ); vw->filename = NULL; vw->modified = FALSE; vw->only_updating_coord_mode_ui = FALSE; vw->pan_move = FALSE; vw->pan_x = vw->pan_y = -1; vw->draw_image_width = DRAW_IMAGE_DEFAULT_WIDTH; vw->draw_image_height = DRAW_IMAGE_DEFAULT_HEIGHT; vw->draw_image_save_as_png = DRAW_IMAGE_DEFAULT_SAVE_AS_PNG; main_vbox = gtk_vbox_new(FALSE, 1); gtk_container_add (GTK_CONTAINER (vw), main_vbox); gtk_box_pack_start (GTK_BOX(main_vbox), gtk_ui_manager_get_widget (vw->uim, "/MainMenu"), FALSE, TRUE, 0); gtk_box_pack_start (GTK_BOX(main_vbox), GTK_WIDGET(vw->toolbar), FALSE, TRUE, 0); gtk_toolbar_set_icon_size (vw->toolbar, GTK_ICON_SIZE_SMALL_TOOLBAR); gtk_toolbar_set_style (vw->toolbar, GTK_TOOLBAR_ICONS); vik_ext_tools_add_menu_items ( vw, vw->uim ); GtkWidget * zoom_levels = gtk_ui_manager_get_widget (vw->uim, "/MainMenu/View/SetZoom"); GtkWidget * zoom_levels_menu = create_zoom_menu_all_levels ( vik_viewport_get_zoom(vw->viking_vvp) ); gtk_menu_item_set_submenu (GTK_MENU_ITEM (zoom_levels), zoom_levels_menu); g_signal_connect ( G_OBJECT(zoom_levels_menu), "selection-done", G_CALLBACK(zoom_changed), vw); g_signal_connect_swapped ( G_OBJECT(vw->viking_vs), "clicked", G_CALLBACK(zoom_popup_handler), zoom_levels_menu ); g_signal_connect (G_OBJECT (vw), "delete_event", G_CALLBACK (delete_event), NULL); g_signal_connect_swapped (G_OBJECT(vw->viking_vvp), "expose_event", G_CALLBACK(draw_sync), vw); g_signal_connect_swapped (G_OBJECT(vw->viking_vvp), "configure_event", G_CALLBACK(window_configure_event), vw); gtk_widget_add_events ( GTK_WIDGET(vw->viking_vvp), GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK ); g_signal_connect_swapped (G_OBJECT(vw->viking_vvp), "scroll_event", G_CALLBACK(draw_scroll), vw); g_signal_connect_swapped (G_OBJECT(vw->viking_vvp), "button_press_event", G_CALLBACK(draw_click), vw); g_signal_connect_swapped (G_OBJECT(vw->viking_vvp), "button_release_event", G_CALLBACK(draw_release), vw); g_signal_connect_swapped (G_OBJECT(vw->viking_vvp), "motion_notify_event", G_CALLBACK(draw_mouse_motion), vw); g_signal_connect_swapped (G_OBJECT(vw->viking_vlp), "update", G_CALLBACK(draw_update), vw); // Allow key presses to be processed anywhere g_signal_connect_swapped (G_OBJECT (vw), "key_press_event", G_CALLBACK (key_press_event), vw); gtk_window_set_default_size ( GTK_WINDOW(vw), VIKING_WINDOW_WIDTH, VIKING_WINDOW_HEIGHT); hpaned = gtk_hpaned_new (); gtk_paned_pack1 ( GTK_PANED(hpaned), GTK_WIDGET (vw->viking_vlp), FALSE, FALSE ); gtk_paned_pack2 ( GTK_PANED(hpaned), GTK_WIDGET (vw->viking_vvp), TRUE, TRUE ); /* This packs the button into the window (a gtk container). */ gtk_box_pack_start (GTK_BOX(main_vbox), hpaned, TRUE, TRUE, 0); gtk_box_pack_end (GTK_BOX(main_vbox), GTK_WIDGET(vw->viking_vs), FALSE, TRUE, 0); a_background_add_window ( vw ); vw->open_dia = NULL; vw->save_dia = NULL; vw->save_img_dia = NULL; vw->save_img_dir_dia = NULL; // Store the thread value so comparisons can be made to determine the gdk update method // Hopefully we are storing the main thread value here :) // [ATM any window initialization is always be performed by the main thread] vw->thread = g_thread_self(); } static VikWindow *window_new () { return VIK_WINDOW ( g_object_new ( VIK_WINDOW_TYPE, NULL ) ); } /** * Update the displayed map * Only update the top most visible map layer * ATM this assumes (as per defaults) the top most map has full alpha setting * such that other other maps even though they may be active will not be seen * It's more complicated to work out which maps are actually visible due to alpha settings * and overkill for this simple refresh method. */ static void simple_map_update ( VikWindow *vw, gboolean only_new ) { // Find the most relevent single map layer to operate on VikLayer *vl = vik_aggregate_layer_get_top_visible_layer_of_type (vik_layers_panel_get_top_layer(vw->viking_vlp), VIK_LAYER_MAPS); if ( vl ) vik_maps_layer_download ( VIK_MAPS_LAYER(vl), vw->viking_vvp, only_new ); } /** * This is the global key press handler * Global shortcuts are available at any time and hence are not restricted to when a certain tool is enabled */ static gboolean key_press_event( VikWindow *vw, GdkEventKey *event, gpointer data ) { // The keys handled here are not in the menuing system for a couple of reasons: // . Keeps the menu size compact (alebit at expense of discoverably) // . Allows differing key bindings to perform the same actions // First decide if key events are related to the maps layer gboolean map_download = FALSE; gboolean map_download_only_new = TRUE; // Only new or reload GdkModifierType modifiers = gtk_accelerator_get_default_mod_mask(); // Standard 'Refresh' keys: F5 or Ctrl+r // Note 'F5' is actually handled via draw_refresh_cb() later on // (not 'R' it's 'r' notice the case difference!!) if ( event->keyval == GDK_r && (event->state & modifiers) == GDK_CONTROL_MASK ) { map_download = TRUE; map_download_only_new = TRUE; } // Full cache reload with Ctrl+F5 or Ctrl+Shift+r [This is not in the menu system] // Note the use of uppercase R here since shift key has been pressed else if ( (event->keyval == GDK_F5 && (event->state & modifiers) == GDK_CONTROL_MASK ) || ( event->keyval == GDK_R && (event->state & modifiers) == (GDK_CONTROL_MASK + GDK_SHIFT_MASK) ) ) { map_download = TRUE; map_download_only_new = FALSE; } if ( map_download ) { simple_map_update ( vw, map_download_only_new ); } VikLayer *vl = vik_layers_panel_get_selected ( vw->viking_vlp ); if (vl && vw->vt->active_tool != -1 && vw->vt->tools[vw->vt->active_tool].ti.key_press ) { gint ltype = vw->vt->tools[vw->vt->active_tool].layer_type; if ( vl && ltype == vl->type ) return vw->vt->tools[vw->vt->active_tool].ti.key_press(vl, event, vw->vt->tools[vw->vt->active_tool].state); } // Ensure called only on window tools (i.e. not on any of the Layer tools since the layer is NULL) if ( vw->current_tool < TOOL_LAYER ) { // No layer - but enable window tool keypress processing - these should be able to handle a NULL layer if ( vw->vt->tools[vw->vt->active_tool].ti.key_press ) { return vw->vt->tools[vw->vt->active_tool].ti.key_press ( vl, event, vw->vt->tools[vw->vt->active_tool].state ); } } /* Restore Main Menu via Escape key if the user has hidden it */ /* This key is more likely to be used as they may not remember the function key */ if ( event->keyval == GDK_Escape ) { GtkWidget *check_box = gtk_ui_manager_get_widget ( vw->uim, "/ui/MainMenu/View/SetShow/ViewMainMenu" ); if ( check_box ) { gboolean state = gtk_check_menu_item_get_active ( GTK_CHECK_MENU_ITEM(check_box) ); if ( !state ) { gtk_widget_show ( gtk_ui_manager_get_widget ( vw->uim, "/ui/MainMenu" ) ); gtk_check_menu_item_set_active ( GTK_CHECK_MENU_ITEM(check_box), TRUE ); return TRUE; /* handled keypress */ } } } return FALSE; /* don't handle the keypress */ } static gboolean delete_event( VikWindow *vw ) { #ifdef VIKING_PROMPT_IF_MODIFIED if ( vw->modified ) #else if (0) #endif { GtkDialog *dia; dia = GTK_DIALOG ( gtk_message_dialog_new ( GTK_WINDOW(vw), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, GTK_BUTTONS_NONE, _("Do you want to save the changes you made to the document \"%s\"?\n" "\n" "Your changes will be lost if you don't save them."), window_get_filename ( vw ) ) ); gtk_dialog_add_buttons ( dia, _("Don't Save"), GTK_RESPONSE_NO, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_SAVE, GTK_RESPONSE_YES, NULL ); switch ( gtk_dialog_run ( dia ) ) { case GTK_RESPONSE_NO: gtk_widget_destroy ( GTK_WIDGET(dia) ); return FALSE; case GTK_RESPONSE_CANCEL: gtk_widget_destroy ( GTK_WIDGET(dia) ); return TRUE; default: gtk_widget_destroy ( GTK_WIDGET(dia) ); return ! save_file(NULL, vw); } } return FALSE; } /* Drawing stuff */ static void newwindow_cb ( GtkAction *a, VikWindow *vw ) { g_signal_emit ( G_OBJECT(vw), window_signals[VW_NEWWINDOW_SIGNAL], 0 ); } static void draw_update ( VikWindow *vw ) { draw_redraw (vw); draw_sync (vw); } static void draw_sync ( VikWindow *vw ) { vik_viewport_sync(vw->viking_vvp); draw_status ( vw ); } /* * Split the status update, as sometimes only need to update the tool part * also on initialization the zoom related stuff is not ready to be used */ static void draw_status_tool ( VikWindow *vw ) { if ( vw->current_tool == TOOL_LAYER ) // Use tooltip rather than the internal name as the tooltip is i8n vik_statusbar_set_message ( vw->viking_vs, VIK_STATUSBAR_TOOL, vik_layer_get_interface(vw->tool_layer_id)->tools[vw->tool_tool_id].radioActionEntry.tooltip ); else vik_statusbar_set_message ( vw->viking_vs, VIK_STATUSBAR_TOOL, _(tool_names[vw->current_tool]) ); } static void draw_status ( VikWindow *vw ) { static gchar zoom_level[22]; gdouble xmpp = vik_viewport_get_xmpp (vw->viking_vvp); gdouble ympp = vik_viewport_get_ympp(vw->viking_vvp); gchar *unit = vik_viewport_get_coord_mode(vw->viking_vvp) == VIK_COORD_UTM ? _("mpp") : _("pixelfact"); if (xmpp != ympp) g_snprintf ( zoom_level, 22, "%.3f/%.3f %s", xmpp, ympp, unit ); else if ( (int)xmpp - xmpp < 0.0 ) g_snprintf ( zoom_level, 22, "%.3f %s", xmpp, unit ); else /* xmpp should be a whole number so don't show useless .000 bit */ g_snprintf ( zoom_level, 22, "%d %s", (int)xmpp, unit ); vik_statusbar_set_message ( vw->viking_vs, VIK_STATUSBAR_ZOOM, zoom_level ); draw_status_tool ( vw ); } void vik_window_set_redraw_trigger(VikLayer *vl) { VikWindow *vw = VIK_WINDOW(VIK_GTK_WINDOW_FROM_LAYER(vl)); if (NULL != vw) vw->trigger = vl; } static void window_configure_event ( VikWindow *vw ) { static int first = 1; draw_redraw ( vw ); if (first) { // This is a hack to set the cursor corresponding to the first tool // FIXME find the correct way to initialize both tool and its cursor const GdkCursor *cursor = NULL; first = 0; cursor = toolbox_get_cursor(vw->vt, "Pan"); /* We set cursor, even if it is NULL: it resets to default */ gdk_window_set_cursor ( GTK_WIDGET(vw->viking_vvp)->window, (GdkCursor *)cursor ); } } static void draw_redraw ( VikWindow *vw ) { VikCoord old_center = vw->trigger_center; vw->trigger_center = *(vik_viewport_get_center(vw->viking_vvp)); VikLayer *new_trigger = vw->trigger; vw->trigger = NULL; VikLayer *old_trigger = VIK_LAYER(vik_viewport_get_trigger(vw->viking_vvp)); if ( ! new_trigger ) ; /* do nothing -- have to redraw everything. */ else if ( (old_trigger != new_trigger) || !vik_coord_equals(&old_center, &vw->trigger_center) || (new_trigger->type == VIK_LAYER_AGGREGATE) ) vik_viewport_set_trigger ( vw->viking_vvp, new_trigger ); /* todo: set to half_drawn mode if new trigger is above old */ else vik_viewport_set_half_drawn ( vw->viking_vvp, TRUE ); /* actually draw */ vik_viewport_clear ( vw->viking_vvp); vik_layers_panel_draw_all ( vw->viking_vlp ); vik_viewport_draw_scale ( vw->viking_vvp ); vik_viewport_draw_copyright ( vw->viking_vvp ); vik_viewport_draw_centermark ( vw->viking_vvp ); vik_viewport_draw_logo ( vw->viking_vvp ); vik_viewport_set_half_drawn ( vw->viking_vvp, FALSE ); /* just in case. */ } gboolean draw_buf_done = TRUE; static gboolean draw_buf(gpointer data) { gpointer *pass_along = data; gdk_threads_enter(); gdk_draw_drawable (pass_along[0], pass_along[1], pass_along[2], 0, 0, 0, 0, -1, -1); draw_buf_done = TRUE; gdk_threads_leave(); return FALSE; } /* Mouse event handlers ************************************************************************/ static void vik_window_pan_click (VikWindow *vw, GdkEventButton *event) { /* set panning origin */ vw->pan_move = FALSE; vw->pan_x = (gint) event->x; vw->pan_y = (gint) event->y; } static void draw_click (VikWindow *vw, GdkEventButton *event) { gtk_widget_grab_focus ( GTK_WIDGET(vw->viking_vvp) ); /* middle button pressed. we reserve all middle button and scroll events * for panning and zooming; tools only get left/right/movement */ if ( event->button == 2) { if ( vw->vt->tools[vw->vt->active_tool].ti.pan_handler ) // Tool still may need to do something (such as disable something) toolbox_click(vw->vt, event); vik_window_pan_click ( vw, event ); } else { toolbox_click(vw->vt, event); } } static void vik_window_pan_move (VikWindow *vw, GdkEventMotion *event) { if ( vw->pan_x != -1 ) { vik_viewport_set_center_screen ( vw->viking_vvp, vik_viewport_get_width(vw->viking_vvp)/2 - event->x + vw->pan_x, vik_viewport_get_height(vw->viking_vvp)/2 - event->y + vw->pan_y ); vw->pan_move = TRUE; vw->pan_x = event->x; vw->pan_y = event->y; draw_update ( vw ); } } static void draw_mouse_motion (VikWindow *vw, GdkEventMotion *event) { static VikCoord coord; static struct UTM utm; static struct LatLon ll; #define BUFFER_SIZE 50 static char pointer_buf[BUFFER_SIZE]; gchar *lat = NULL, *lon = NULL; gint16 alt; gdouble zoom; VikDemInterpol interpol_method; /* This is a hack, but work far the best, at least for single pointer systems. * See http://bugzilla.gnome.org/show_bug.cgi?id=587714 for more. */ gint x, y; gdk_window_get_pointer (event->window, &x, &y, NULL); event->x = x; event->y = y; toolbox_move(vw->vt, event); vik_viewport_screen_to_coord ( vw->viking_vvp, event->x, event->y, &coord ); vik_coord_to_utm ( &coord, &utm ); if ( vik_viewport_get_drawmode ( vw->viking_vvp ) == VIK_VIEWPORT_DRAWMODE_UTM ) { // Reuse lat for the first part (Zone + N or S, and lon for the second part (easting and northing) of a UTM format: // ZONE[N|S] EASTING NORTHING lat = g_malloc(4*sizeof(gchar)); // NB zone is stored in a char but is an actual number g_snprintf (lat, 4, "%d%c", utm.zone, utm.letter); lon = g_malloc(16*sizeof(gchar)); g_snprintf (lon, 16, "%d %d", (gint)utm.easting, (gint)utm.northing); } else { a_coords_utm_to_latlon ( &utm, &ll ); a_coords_latlon_to_string ( &ll, &lat, &lon ); } /* Change interpolate method according to scale */ zoom = vik_viewport_get_zoom(vw->viking_vvp); if (zoom > 2.0) interpol_method = VIK_DEM_INTERPOL_NONE; else if (zoom >= 1.0) interpol_method = VIK_DEM_INTERPOL_SIMPLE; else interpol_method = VIK_DEM_INTERPOL_BEST; if ((alt = a_dems_get_elev_by_coord(&coord, interpol_method)) != VIK_DEM_INVALID_ELEVATION) { if ( a_vik_get_units_height () == VIK_UNITS_HEIGHT_METRES ) g_snprintf ( pointer_buf, BUFFER_SIZE, _("%s %s %dm"), lat, lon, alt ); else g_snprintf ( pointer_buf, BUFFER_SIZE, _("%s %s %dft"), lat, lon, (int)VIK_METERS_TO_FEET(alt) ); } else g_snprintf ( pointer_buf, BUFFER_SIZE, _("%s %s"), lat, lon ); g_free (lat); lat = NULL; g_free (lon); lon = NULL; vik_statusbar_set_message ( vw->viking_vs, VIK_STATUSBAR_POSITION, pointer_buf ); vik_window_pan_move ( vw, event ); /* This is recommended by the GTK+ documentation, but does not work properly. * Use deprecated way until GTK+ gets a solution for correct motion hint handling: * http://bugzilla.gnome.org/show_bug.cgi?id=587714 */ /* gdk_event_request_motions ( event ); */ } static void vik_window_pan_release ( VikWindow *vw, GdkEventButton *event ) { if ( vw->pan_move == FALSE ) vik_viewport_set_center_screen ( vw->viking_vvp, vw->pan_x, vw->pan_y ); else vik_viewport_set_center_screen ( vw->viking_vvp, vik_viewport_get_width(vw->viking_vvp)/2 - event->x + vw->pan_x, vik_viewport_get_height(vw->viking_vvp)/2 - event->y + vw->pan_y ); vw->pan_move = FALSE; vw->pan_x = vw->pan_y = -1; draw_update ( vw ); } static void draw_release ( VikWindow *vw, GdkEventButton *event ) { gtk_widget_grab_focus ( GTK_WIDGET(vw->viking_vvp) ); if ( event->button == 2 ) { /* move / pan */ if ( vw->vt->tools[vw->vt->active_tool].ti.pan_handler ) // Tool still may need to do something (such as reenable something) toolbox_release(vw->vt, event); vik_window_pan_release ( vw, event ); } else { toolbox_release(vw->vt, event); } } static void draw_scroll (VikWindow *vw, GdkEventScroll *event) { guint modifiers = event->state & (GDK_SHIFT_MASK | GDK_CONTROL_MASK); if ( modifiers == GDK_CONTROL_MASK ) { /* control == pan up & down */ if ( event->direction == GDK_SCROLL_UP ) vik_viewport_set_center_screen ( vw->viking_vvp, vik_viewport_get_width(vw->viking_vvp)/2, vik_viewport_get_height(vw->viking_vvp)/3 ); else vik_viewport_set_center_screen ( vw->viking_vvp, vik_viewport_get_width(vw->viking_vvp)/2, vik_viewport_get_height(vw->viking_vvp)*2/3 ); } else if ( modifiers == GDK_SHIFT_MASK ) { /* shift == pan left & right */ if ( event->direction == GDK_SCROLL_UP ) vik_viewport_set_center_screen ( vw->viking_vvp, vik_viewport_get_width(vw->viking_vvp)/3, vik_viewport_get_height(vw->viking_vvp)/2 ); else vik_viewport_set_center_screen ( vw->viking_vvp, vik_viewport_get_width(vw->viking_vvp)*2/3, vik_viewport_get_height(vw->viking_vvp)/2 ); } else if ( modifiers == (GDK_CONTROL_MASK | GDK_SHIFT_MASK) ) { // This zoom is on the center position if ( event->direction == GDK_SCROLL_UP ) vik_viewport_zoom_in (vw->viking_vvp); else vik_viewport_zoom_out (vw->viking_vvp); } else { /* make sure mouse is still over the same point on the map when we zoom */ VikCoord coord; gint x, y; gint center_x = vik_viewport_get_width ( vw->viking_vvp ) / 2; gint center_y = vik_viewport_get_height ( vw->viking_vvp ) / 2; vik_viewport_screen_to_coord ( vw->viking_vvp, event->x, event->y, &coord ); if ( event->direction == GDK_SCROLL_UP ) vik_viewport_zoom_in (vw->viking_vvp); else vik_viewport_zoom_out(vw->viking_vvp); vik_viewport_coord_to_screen ( vw->viking_vvp, &coord, &x, &y ); vik_viewport_set_center_screen ( vw->viking_vvp, center_x + (x - event->x), center_y + (y - event->y) ); } draw_update(vw); } /******************************************************************************** ** Ruler tool code ********************************************************************************/ static void draw_ruler(VikViewport *vvp, GdkDrawable *d, GdkGC *gc, gint x1, gint y1, gint x2, gint y2, gdouble distance) { PangoLayout *pl; gchar str[128]; GdkGC *labgc = vik_viewport_new_gc ( vvp, "#cccccc", 1); GdkGC *thickgc = gdk_gc_new(d); gdouble len = sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2)); gdouble dx = (x2-x1)/len*10; gdouble dy = (y2-y1)/len*10; gdouble c = cos(DEG2RAD(15.0)); gdouble s = sin(DEG2RAD(15.0)); gdouble angle; gdouble baseangle = 0; gint i; /* draw line with arrow ends */ { gint tmp_x1=x1, tmp_y1=y1, tmp_x2=x2, tmp_y2=y2; a_viewport_clip_line(&tmp_x1, &tmp_y1, &tmp_x2, &tmp_y2); gdk_draw_line(d, gc, tmp_x1, tmp_y1, tmp_x2, tmp_y2); } a_viewport_clip_line(&x1, &y1, &x2, &y2); gdk_draw_line(d, gc, x1, y1, x2, y2); gdk_draw_line(d, gc, x1 - dy, y1 + dx, x1 + dy, y1 - dx); gdk_draw_line(d, gc, x2 - dy, y2 + dx, x2 + dy, y2 - dx); gdk_draw_line(d, gc, x2, y2, x2 - (dx * c + dy * s), y2 - (dy * c - dx * s)); gdk_draw_line(d, gc, x2, y2, x2 - (dx * c - dy * s), y2 - (dy * c + dx * s)); gdk_draw_line(d, gc, x1, y1, x1 + (dx * c + dy * s), y1 + (dy * c - dx * s)); gdk_draw_line(d, gc, x1, y1, x1 + (dx * c - dy * s), y1 + (dy * c + dx * s)); /* draw compass */ #define CR 80 #define CW 4 vik_viewport_compute_bearing ( vvp, x1, y1, x2, y2, &angle, &baseangle ); { GdkColor color; gdk_gc_copy(thickgc, gc); gdk_gc_set_line_attributes(thickgc, CW, GDK_LINE_SOLID, GDK_CAP_BUTT, GDK_JOIN_MITER); gdk_color_parse("#2255cc", &color); gdk_gc_set_rgb_fg_color(thickgc, &color); } gdk_draw_arc (d, thickgc, FALSE, x1-CR+CW/2, y1-CR+CW/2, 2*CR-CW, 2*CR-CW, (90 - RAD2DEG(baseangle))*64, -RAD2DEG(angle)*64); gdk_gc_copy(thickgc, gc); gdk_gc_set_line_attributes(thickgc, 2, GDK_LINE_SOLID, GDK_CAP_BUTT, GDK_JOIN_MITER); for (i=0; i<180; i++) { c = cos(DEG2RAD(i)*2 + baseangle); s = sin(DEG2RAD(i)*2 + baseangle); if (i%5) { gdk_draw_line (d, gc, x1 + CR*c, y1 + CR*s, x1 + (CR+CW)*c, y1 + (CR+CW)*s); } else { gdouble ticksize = 2*CW; gdk_draw_line (d, thickgc, x1 + (CR-CW)*c, y1 + (CR-CW)*s, x1 + (CR+ticksize)*c, y1 + (CR+ticksize)*s); } } gdk_draw_arc (d, gc, FALSE, x1-CR, y1-CR, 2*CR, 2*CR, 0, 64*360); gdk_draw_arc (d, gc, FALSE, x1-CR-CW, y1-CR-CW, 2*(CR+CW), 2*(CR+CW), 0, 64*360); gdk_draw_arc (d, gc, FALSE, x1-CR+CW, y1-CR+CW, 2*(CR-CW), 2*(CR-CW), 0, 64*360); c = (CR+CW*2)*cos(baseangle); s = (CR+CW*2)*sin(baseangle); gdk_draw_line (d, gc, x1-c, y1-s, x1+c, y1+s); gdk_draw_line (d, gc, x1+s, y1-c, x1-s, y1+c); /* draw labels */ #define LABEL(x, y, w, h) { \ gdk_draw_rectangle(d, labgc, TRUE, (x)-2, (y)-1, (w)+4, (h)+1); \ gdk_draw_rectangle(d, gc, FALSE, (x)-2, (y)-1, (w)+4, (h)+1); \ gdk_draw_layout(d, gc, (x), (y), pl); } { gint wd, hd, xd, yd; gint wb, hb, xb, yb; pl = gtk_widget_create_pango_layout (GTK_WIDGET(vvp), NULL); pango_layout_set_font_description (pl, GTK_WIDGET(vvp)->style->font_desc); pango_layout_set_text(pl, "N", -1); gdk_draw_layout(d, gc, x1-5, y1-CR-3*CW-8, pl); /* draw label with distance */ vik_units_distance_t dist_units = a_vik_get_units_distance (); switch (dist_units) { case VIK_UNITS_DISTANCE_KILOMETRES: if (distance >= 1000 && distance < 100000) { g_sprintf(str, "%3.2f km", distance/1000.0); } else if (distance < 1000) { g_sprintf(str, "%d m", (int)distance); } else { g_sprintf(str, "%d km", (int)distance/1000); } break; case VIK_UNITS_DISTANCE_MILES: if (distance >= VIK_MILES_TO_METERS(1) && distance < VIK_MILES_TO_METERS(100)) { g_sprintf(str, "%3.2f miles", VIK_METERS_TO_MILES(distance)); } else if (distance < VIK_MILES_TO_METERS(1)) { g_sprintf(str, "%d yards", (int)(distance*1.0936133)); } else { g_sprintf(str, "%d miles", (int)VIK_METERS_TO_MILES(distance)); } break; default: g_critical("Houston, we've had a problem. distance=%d", dist_units); } pango_layout_set_text(pl, str, -1); pango_layout_get_pixel_size ( pl, &wd, &hd ); if (dy>0) { xd = (x1+x2)/2 + dy; yd = (y1+y2)/2 - hd/2 - dx; } else { xd = (x1+x2)/2 - dy; yd = (y1+y2)/2 - hd/2 + dx; } if ( xd < -5 || yd < -5 || xd > vik_viewport_get_width(vvp)+5 || yd > vik_viewport_get_height(vvp)+5 ) { xd = x2 + 10; yd = y2 - 5; } LABEL(xd, yd, wd, hd); /* draw label with bearing */ g_sprintf(str, "%3.1f°", RAD2DEG(angle)); pango_layout_set_text(pl, str, -1); pango_layout_get_pixel_size ( pl, &wb, &hb ); xb = x1 + CR*cos(angle-M_PI_2); yb = y1 + CR*sin(angle-M_PI_2); if ( xb < -5 || yb < -5 || xb > vik_viewport_get_width(vvp)+5 || yb > vik_viewport_get_height(vvp)+5 ) { xb = x2 + 10; yb = y2 + 10; } { GdkRectangle r1 = {xd-2, yd-1, wd+4, hd+1}, r2 = {xb-2, yb-1, wb+4, hb+1}; if (gdk_rectangle_intersect(&r1, &r2, &r2)) { xb = xd + wd + 5; } } LABEL(xb, yb, wb, hb); } #undef LABEL g_object_unref ( G_OBJECT ( pl ) ); g_object_unref ( G_OBJECT ( labgc ) ); g_object_unref ( G_OBJECT ( thickgc ) ); } typedef struct { VikWindow *vw; VikViewport *vvp; gboolean has_oldcoord; VikCoord oldcoord; } ruler_tool_state_t; static gpointer ruler_create (VikWindow *vw, VikViewport *vvp) { ruler_tool_state_t *s = g_new(ruler_tool_state_t, 1); s->vw = vw; s->vvp = vvp; s->has_oldcoord = FALSE; return s; } static void ruler_destroy (ruler_tool_state_t *s) { g_free(s); } static VikLayerToolFuncStatus ruler_click (VikLayer *vl, GdkEventButton *event, ruler_tool_state_t *s) { struct LatLon ll; VikCoord coord; gchar *temp; if ( event->button == 1 ) { gchar *lat=NULL, *lon=NULL; vik_viewport_screen_to_coord ( s->vvp, (gint) event->x, (gint) event->y, &coord ); vik_coord_to_latlon ( &coord, &ll ); a_coords_latlon_to_string ( &ll, &lat, &lon ); if ( s->has_oldcoord ) { vik_units_distance_t dist_units = a_vik_get_units_distance (); switch (dist_units) { case VIK_UNITS_DISTANCE_KILOMETRES: temp = g_strdup_printf ( "%s %s DIFF %f meters", lat, lon, vik_coord_diff( &coord, &(s->oldcoord) ) ); break; case VIK_UNITS_DISTANCE_MILES: temp = g_strdup_printf ( "%s %s DIFF %f miles", lat, lon, VIK_METERS_TO_MILES(vik_coord_diff( &coord, &(s->oldcoord) )) ); break; default: temp = g_strdup_printf ("Just to keep the compiler happy"); g_critical("Houston, we've had a problem. distance=%d", dist_units); } s->has_oldcoord = FALSE; } else { temp = g_strdup_printf ( "%s %s", lat, lon ); s->has_oldcoord = TRUE; } vik_statusbar_set_message ( s->vw->viking_vs, VIK_STATUSBAR_INFO, temp ); g_free ( temp ); s->oldcoord = coord; } else { vik_viewport_set_center_screen ( s->vvp, (gint) event->x, (gint) event->y ); draw_update ( s->vw ); } return VIK_LAYER_TOOL_ACK; } static VikLayerToolFuncStatus ruler_move (VikLayer *vl, GdkEventMotion *event, ruler_tool_state_t *s) { VikViewport *vvp = s->vvp; VikWindow *vw = s->vw; struct LatLon ll; VikCoord coord; gchar *temp; if ( s->has_oldcoord ) { int oldx, oldy, w1, h1, w2, h2; static GdkPixmap *buf = NULL; gchar *lat=NULL, *lon=NULL; w1 = vik_viewport_get_width(vvp); h1 = vik_viewport_get_height(vvp); if (!buf) { buf = gdk_pixmap_new ( GTK_WIDGET(vvp)->window, w1, h1, -1 ); } gdk_drawable_get_size(buf, &w2, &h2); if (w1 != w2 || h1 != h2) { g_object_unref ( G_OBJECT ( buf ) ); buf = gdk_pixmap_new ( GTK_WIDGET(vvp)->window, w1, h1, -1 ); } vik_viewport_screen_to_coord ( vvp, (gint) event->x, (gint) event->y, &coord ); vik_coord_to_latlon ( &coord, &ll ); vik_viewport_coord_to_screen ( vvp, &s->oldcoord, &oldx, &oldy ); gdk_draw_drawable (buf, GTK_WIDGET(vvp)->style->black_gc, vik_viewport_get_pixmap(vvp), 0, 0, 0, 0, -1, -1); draw_ruler(vvp, buf, GTK_WIDGET(vvp)->style->black_gc, oldx, oldy, event->x, event->y, vik_coord_diff( &coord, &(s->oldcoord)) ); if (draw_buf_done) { static gpointer pass_along[3]; pass_along[0] = GTK_WIDGET(vvp)->window; pass_along[1] = GTK_WIDGET(vvp)->style->black_gc; pass_along[2] = buf; g_idle_add_full (G_PRIORITY_HIGH_IDLE + 10, draw_buf, pass_along, NULL); draw_buf_done = FALSE; } a_coords_latlon_to_string(&ll, &lat, &lon); vik_units_distance_t dist_units = a_vik_get_units_distance (); switch (dist_units) { case VIK_UNITS_DISTANCE_KILOMETRES: temp = g_strdup_printf ( "%s %s DIFF %f meters", lat, lon, vik_coord_diff( &coord, &(s->oldcoord) ) ); break; case VIK_UNITS_DISTANCE_MILES: temp = g_strdup_printf ( "%s %s DIFF %f miles", lat, lon, VIK_METERS_TO_MILES (vik_coord_diff( &coord, &(s->oldcoord) )) ); break; default: temp = g_strdup_printf ("Just to keep the compiler happy"); g_critical("Houston, we've had a problem. distance=%d", dist_units); } vik_statusbar_set_message ( vw->viking_vs, VIK_STATUSBAR_INFO, temp ); g_free ( temp ); } return VIK_LAYER_TOOL_ACK; } static VikLayerToolFuncStatus ruler_release (VikLayer *vl, GdkEventButton *event, ruler_tool_state_t *s) { return VIK_LAYER_TOOL_ACK; } static void ruler_deactivate (VikLayer *vl, ruler_tool_state_t *s) { draw_update ( s->vw ); } static gboolean ruler_key_press (VikLayer *vl, GdkEventKey *event, ruler_tool_state_t *s) { if (event->keyval == GDK_Escape) { s->has_oldcoord = FALSE; ruler_deactivate ( vl, s ); return TRUE; } // Regardless of whether we used it, return false so other GTK things may use it return FALSE; } static VikToolInterface ruler_tool = // NB Ctrl+Shift+R is used for Refresh (deemed more important), so use 'U' instead { { "Ruler", "vik-icon-ruler", N_("_Ruler"), "U", N_("Ruler Tool"), 2 }, (VikToolConstructorFunc) ruler_create, (VikToolDestructorFunc) ruler_destroy, (VikToolActivationFunc) NULL, (VikToolActivationFunc) ruler_deactivate, (VikToolMouseFunc) ruler_click, (VikToolMouseMoveFunc) ruler_move, (VikToolMouseFunc) ruler_release, (VikToolKeyFunc) ruler_key_press, FALSE, GDK_CURSOR_IS_PIXMAP, &cursor_ruler_pixbuf }; /*** end ruler code ********************************************************/ /******************************************************************************** ** Zoom tool code ********************************************************************************/ typedef struct { VikWindow *vw; GdkPixmap *pixmap; // Track zoom bounds for zoom tool with shift modifier: gboolean bounds_active; gint start_x; gint start_y; } zoom_tool_state_t; /* * In case the screen size has changed */ static void zoomtool_resize_pixmap (zoom_tool_state_t *zts) { int w1, h1, w2, h2; // Allocate a drawing area the size of the viewport w1 = vik_viewport_get_width ( zts->vw->viking_vvp ); h1 = vik_viewport_get_height ( zts->vw->viking_vvp ); if ( !zts->pixmap ) { // Totally new zts->pixmap = gdk_pixmap_new ( GTK_WIDGET(zts->vw->viking_vvp)->window, w1, h1, -1 ); } gdk_drawable_get_size ( zts->pixmap, &w2, &h2 ); if ( w1 != w2 || h1 != h2 ) { // Has changed - delete and recreate with new values g_object_unref ( G_OBJECT ( zts->pixmap ) ); zts->pixmap = gdk_pixmap_new ( GTK_WIDGET(zts->vw->viking_vvp)->window, w1, h1, -1 ); } } static gpointer zoomtool_create (VikWindow *vw, VikViewport *vvp) { zoom_tool_state_t *zts = g_new(zoom_tool_state_t, 1); zts->vw = vw; zts->pixmap = NULL; zts->start_x = 0; zts->start_y = 0; zts->bounds_active = FALSE; return zts; } static void zoomtool_destroy ( zoom_tool_state_t *zts) { if ( zts->pixmap ) g_object_unref ( G_OBJECT ( zts->pixmap ) ); g_free(zts); } static VikLayerToolFuncStatus zoomtool_click (VikLayer *vl, GdkEventButton *event, zoom_tool_state_t *zts) { zts->vw->modified = TRUE; guint modifiers = event->state & (GDK_SHIFT_MASK | GDK_CONTROL_MASK); VikCoord coord; gint x, y; gint center_x = vik_viewport_get_width ( zts->vw->viking_vvp ) / 2; gint center_y = vik_viewport_get_height ( zts->vw->viking_vvp ) / 2; gboolean skip_update = FALSE; zts->bounds_active = FALSE; if ( modifiers == (GDK_CONTROL_MASK | GDK_SHIFT_MASK) ) { // This zoom is on the center position vik_viewport_set_center_screen ( zts->vw->viking_vvp, center_x, center_y ); if ( event->button == 1 ) vik_viewport_zoom_in (zts->vw->viking_vvp); else if ( event->button == 3 ) vik_viewport_zoom_out (zts->vw->viking_vvp); } else if ( modifiers == GDK_CONTROL_MASK ) { // This zoom is to recenter on the mouse position vik_viewport_set_center_screen ( zts->vw->viking_vvp, (gint) event->x, (gint) event->y ); if ( event->button == 1 ) vik_viewport_zoom_in (zts->vw->viking_vvp); else if ( event->button == 3 ) vik_viewport_zoom_out (zts->vw->viking_vvp); } else if ( modifiers == GDK_SHIFT_MASK ) { // Get start of new zoom bounds if ( event->button == 1 ) { zts->bounds_active = TRUE; zts->start_x = (gint) event->x; zts->start_y = (gint) event->y; skip_update = TRUE; } } else { /* make sure mouse is still over the same point on the map when we zoom */ vik_viewport_screen_to_coord ( zts->vw->viking_vvp, event->x, event->y, &coord ); if ( event->button == 1 ) vik_viewport_zoom_in (zts->vw->viking_vvp); else if ( event->button == 3 ) vik_viewport_zoom_out(zts->vw->viking_vvp); vik_viewport_coord_to_screen ( zts->vw->viking_vvp, &coord, &x, &y ); vik_viewport_set_center_screen ( zts->vw->viking_vvp, center_x + (x - event->x), center_y + (y - event->y) ); } if ( !skip_update ) draw_update ( zts->vw ); return VIK_LAYER_TOOL_ACK; } static VikLayerToolFuncStatus zoomtool_move (VikLayer *vl, GdkEventMotion *event, zoom_tool_state_t *zts) { guint modifiers = event->state & (GDK_SHIFT_MASK | GDK_CONTROL_MASK); if ( zts->bounds_active && modifiers == GDK_SHIFT_MASK ) { zoomtool_resize_pixmap ( zts ); // Blank out currently drawn area gdk_draw_drawable ( zts->pixmap, GTK_WIDGET(zts->vw->viking_vvp)->style->black_gc, vik_viewport_get_pixmap(zts->vw->viking_vvp), 0, 0, 0, 0, -1, -1); // Calculate new box starting point & size in pixels int xx, yy, width, height; if ( event->y > zts->start_y ) { yy = zts->start_y; height = event->y-zts->start_y; } else { yy = event->y; height = zts->start_y-event->y; } if ( event->x > zts->start_x ) { xx = zts->start_x; width = event->x-zts->start_x; } else { xx = event->x; width = zts->start_x-event->x; } // Draw the box gdk_draw_rectangle (zts->pixmap, GTK_WIDGET(zts->vw->viking_vvp)->style->black_gc, FALSE, xx, yy, width, height); // Only actually draw when there's time to do so if (draw_buf_done) { static gpointer pass_along[3]; pass_along[0] = GTK_WIDGET(zts->vw->viking_vvp)->window; pass_along[1] = GTK_WIDGET(zts->vw->viking_vvp)->style->black_gc; pass_along[2] = zts->pixmap; g_idle_add_full (G_PRIORITY_HIGH_IDLE + 10, draw_buf, pass_along, NULL); draw_buf_done = FALSE; } } return VIK_LAYER_TOOL_ACK; } static VikLayerToolFuncStatus zoomtool_release (VikLayer *vl, GdkEventButton *event, zoom_tool_state_t *zts) { guint modifiers = event->state & (GDK_SHIFT_MASK | GDK_CONTROL_MASK); zts->bounds_active = FALSE; // Ensure haven't just released on the exact same position // i.e. probably haven't moved the mouse at all if ( modifiers == GDK_SHIFT_MASK && !( ( event->x == zts->start_x ) && ( event->y == zts->start_y )) ) { VikCoord coord1, coord2; vik_viewport_screen_to_coord ( zts->vw->viking_vvp, zts->start_x, zts->start_y, &coord1); vik_viewport_screen_to_coord ( zts->vw->viking_vvp, event->x, event->y, &coord2); // From the extend of the bounds pick the best zoom level // c.f. trw_layer_zoom_to_show_latlons() // Maybe refactor... struct LatLon ll1, ll2; vik_coord_to_latlon(&coord1, &ll1); vik_coord_to_latlon(&coord2, &ll2); struct LatLon average = { (ll1.lat+ll2.lat)/2, (ll1.lon+ll2.lon)/2 }; VikCoord new_center; vik_coord_load_from_latlon ( &new_center, vik_viewport_get_coord_mode ( zts->vw->viking_vvp ), &average ); vik_viewport_set_center_coord ( zts->vw->viking_vvp, &new_center ); /* Convert into definite 'smallest' and 'largest' positions */ struct LatLon minmin; if ( ll1.lat < ll2.lat ) minmin.lat = ll1.lat; else minmin.lat = ll2.lat; struct LatLon maxmax; if ( ll1.lon > ll2.lon ) maxmax.lon = ll1.lon; else maxmax.lon = ll2.lon; /* Always recalculate the 'best' zoom level */ gdouble zoom = VIK_VIEWPORT_MIN_ZOOM; vik_viewport_set_zoom ( zts->vw->viking_vvp, zoom ); gdouble min_lat, max_lat, min_lon, max_lon; /* Should only be a maximum of about 18 iterations from min to max zoom levels */ while ( zoom <= VIK_VIEWPORT_MAX_ZOOM ) { vik_viewport_get_min_max_lat_lon ( zts->vw->viking_vvp, &min_lat, &max_lat, &min_lon, &max_lon ); /* NB I think the logic used in this test to determine if the bounds is within view fails if track goes across 180 degrees longitude. Hopefully that situation is not too common... Mind you viking doesn't really do edge locations to well anyway */ if ( min_lat < minmin.lat && max_lat > minmin.lat && min_lon < maxmax.lon && max_lon > maxmax.lon ) /* Found within zoom level */ break; /* Try next */ zoom = zoom * 2; vik_viewport_set_zoom ( zts->vw->viking_vvp, zoom ); } draw_update ( zts->vw ); } return VIK_LAYER_TOOL_ACK; } static VikToolInterface zoom_tool = { { "Zoom", "vik-icon-zoom", N_("_Zoom"), "Z", N_("Zoom Tool"), 1 }, (VikToolConstructorFunc) zoomtool_create, (VikToolDestructorFunc) zoomtool_destroy, (VikToolActivationFunc) NULL, (VikToolActivationFunc) NULL, (VikToolMouseFunc) zoomtool_click, (VikToolMouseMoveFunc) zoomtool_move, (VikToolMouseFunc) zoomtool_release, NULL, FALSE, GDK_CURSOR_IS_PIXMAP, &cursor_zoom_pixbuf }; /*** end zoom code ********************************************************/ /******************************************************************************** ** Pan tool code ********************************************************************************/ static gpointer pantool_create (VikWindow *vw, VikViewport *vvp) { return vw; } static VikLayerToolFuncStatus pantool_click (VikLayer *vl, GdkEventButton *event, VikWindow *vw) { vw->modified = TRUE; if ( event->button == 1 ) vik_window_pan_click ( vw, event ); draw_update ( vw ); return VIK_LAYER_TOOL_ACK; } static VikLayerToolFuncStatus pantool_move (VikLayer *vl, GdkEventMotion *event, VikWindow *vw) { vik_window_pan_move ( vw, event ); return VIK_LAYER_TOOL_ACK; } static VikLayerToolFuncStatus pantool_release (VikLayer *vl, GdkEventButton *event, VikWindow *vw) { if ( event->button == 1 ) vik_window_pan_release ( vw, event ); return VIK_LAYER_TOOL_ACK; } static VikToolInterface pan_tool = { { "Pan", "vik-icon-pan", N_("_Pan"), "P", N_("Pan Tool"), 0 }, (VikToolConstructorFunc) pantool_create, (VikToolDestructorFunc) NULL, (VikToolActivationFunc) NULL, (VikToolActivationFunc) NULL, (VikToolMouseFunc) pantool_click, (VikToolMouseMoveFunc) pantool_move, (VikToolMouseFunc) pantool_release, NULL, FALSE, GDK_FLEUR }; /*** end pan code ********************************************************/ /******************************************************************************** ** Select tool code ********************************************************************************/ static gpointer selecttool_create (VikWindow *vw, VikViewport *vvp) { tool_ed_t *t = g_new(tool_ed_t, 1); t->vw = vw; t->vvp = vvp; t->vtl = NULL; t->is_waypoint = FALSE; return t; } static void selecttool_destroy (tool_ed_t *t) { g_free(t); } typedef struct { gboolean cont; VikViewport *vvp; GdkEventButton *event; tool_ed_t *tool_edit; } clicker; static void click_layer_selected (VikLayer *vl, clicker *ck) { /* Do nothing when function call returns true; */ /* i.e. stop on first found item */ if ( ck->cont ) if ( vl->visible ) if ( vik_layer_get_interface(vl->type)->select_click ) ck->cont = !vik_layer_get_interface(vl->type)->select_click ( vl, ck->event, ck->vvp, ck->tool_edit ); } static VikLayerToolFuncStatus selecttool_click (VikLayer *vl, GdkEventButton *event, tool_ed_t *t) { /* Only allow selection on primary button */ if ( event->button == 1 ) { /* Enable click to apply callback to potentially all track/waypoint layers */ /* Useful as we can find things that aren't necessarily in the currently selected layer */ GList* gl = vik_layers_panel_get_all_layers_of_type ( t->vw->viking_vlp, VIK_LAYER_TRW, FALSE ); // Don't get invisible layers clicker ck; ck.cont = TRUE; ck.vvp = t->vw->viking_vvp; ck.event = event; ck.tool_edit = t; g_list_foreach ( gl, (GFunc) click_layer_selected, &ck ); g_list_free ( gl ); // If nothing found then deselect & redraw screen if necessary to remove the highlight if ( ck.cont ) { GtkTreeIter iter; VikTreeview *vtv = vik_layers_panel_get_treeview ( t->vw->viking_vlp ); if ( vik_treeview_get_selected_iter ( vtv, &iter ) ) { // Only clear if selected thing is a TrackWaypoint layer or a sublayer gint type = vik_treeview_item_get_type ( vtv, &iter ); if ( type == VIK_TREEVIEW_TYPE_SUBLAYER || VIK_LAYER(vik_treeview_item_get_pointer ( vtv, &iter ))->type == VIK_LAYER_TRW ) { vik_treeview_item_unselect ( vtv, &iter ); if ( vik_window_clear_highlight ( t->vw ) ) draw_update ( t->vw ); } } } } else if ( ( event->button == 3 ) && ( vl && ( vl->type == VIK_LAYER_TRW ) ) ) { if ( vl->visible ) /* Act on currently selected item to show menu */ if ( t->vw->selected_track || t->vw->selected_waypoint ) if ( vik_layer_get_interface(vl->type)->show_viewport_menu ) vik_layer_get_interface(vl->type)->show_viewport_menu ( vl, event, t->vw->viking_vvp ); } return VIK_LAYER_TOOL_ACK; } static VikLayerToolFuncStatus selecttool_move (VikLayer *vl, GdkEventButton *event, tool_ed_t *t) { /* Only allow selection on primary button */ if ( event->button == 1 ) { // Don't care about vl here if ( t->vtl ) if ( vik_layer_get_interface(VIK_LAYER_TRW)->select_move ) vik_layer_get_interface(VIK_LAYER_TRW)->select_move ( vl, event, t->vvp, t ); } return VIK_LAYER_TOOL_ACK; } static VikLayerToolFuncStatus selecttool_release (VikLayer *vl, GdkEventButton *event, tool_ed_t *t) { /* Only allow selection on primary button */ if ( event->button == 1 ) { // Don't care about vl here if ( t->vtl ) if ( vik_layer_get_interface(VIK_LAYER_TRW)->select_release ) vik_layer_get_interface(VIK_LAYER_TRW)->select_release ( (VikLayer*)t->vtl, event, t->vvp, t ); } return VIK_LAYER_TOOL_ACK; } static VikToolInterface select_tool = { { "Select", "vik-icon-select", N_("_Select"), "S", N_("Select Tool"), 3 }, (VikToolConstructorFunc) selecttool_create, (VikToolDestructorFunc) selecttool_destroy, (VikToolActivationFunc) NULL, (VikToolActivationFunc) NULL, (VikToolMouseFunc) selecttool_click, (VikToolMouseMoveFunc) selecttool_move, (VikToolMouseFunc) selecttool_release, (VikToolKeyFunc) NULL, FALSE, GDK_LEFT_PTR, NULL, NULL }; /*** end select tool code ********************************************************/ static void draw_pan_cb ( GtkAction *a, VikWindow *vw ) { if (!strcmp(gtk_action_get_name(a), "PanNorth")) { vik_viewport_set_center_screen ( vw->viking_vvp, vik_viewport_get_width(vw->viking_vvp)/2, 0 ); } else if (!strcmp(gtk_action_get_name(a), "PanEast")) { vik_viewport_set_center_screen ( vw->viking_vvp, vik_viewport_get_width(vw->viking_vvp), vik_viewport_get_height(vw->viking_vvp)/2 ); } else if (!strcmp(gtk_action_get_name(a), "PanSouth")) { vik_viewport_set_center_screen ( vw->viking_vvp, vik_viewport_get_width(vw->viking_vvp)/2, vik_viewport_get_height(vw->viking_vvp) ); } else if (!strcmp(gtk_action_get_name(a), "PanWest")) { vik_viewport_set_center_screen ( vw->viking_vvp, 0, vik_viewport_get_height(vw->viking_vvp)/2 ); } draw_update ( vw ); } static void full_screen_cb ( GtkAction *a, VikWindow *vw ) { GtkWidget *check_box = gtk_ui_manager_get_widget ( vw->uim, "/ui/MainMenu/View/FullScreen" ); g_assert(check_box); gboolean state = gtk_check_menu_item_get_active ( GTK_CHECK_MENU_ITEM(check_box)); if ( state ) gtk_window_fullscreen ( GTK_WINDOW(vw) ); else gtk_window_unfullscreen ( GTK_WINDOW(vw) ); } static void draw_zoom_cb ( GtkAction *a, VikWindow *vw ) { guint what = 128; if (!strcmp(gtk_action_get_name(a), "ZoomIn")) { what = -3; } else if (!strcmp(gtk_action_get_name(a), "ZoomOut")) { what = -4; } else if (!strcmp(gtk_action_get_name(a), "Zoom0.25")) { what = -2; } else if (!strcmp(gtk_action_get_name(a), "Zoom0.5")) { what = -1; } else { gchar *s = (gchar *)gtk_action_get_name(a); what = atoi(s+4); } switch (what) { case -3: vik_viewport_zoom_in ( vw->viking_vvp ); break; case -4: vik_viewport_zoom_out ( vw->viking_vvp ); break; case -1: vik_viewport_set_zoom ( vw->viking_vvp, 0.5 ); break; case -2: vik_viewport_set_zoom ( vw->viking_vvp, 0.25 ); break; default: vik_viewport_set_zoom ( vw->viking_vvp, what ); } draw_update ( vw ); } static void draw_goto_cb ( GtkAction *a, VikWindow *vw ) { VikCoord new_center; if (!strcmp(gtk_action_get_name(a), "GotoLL")) { struct LatLon ll, llold; vik_coord_to_latlon ( vik_viewport_get_center ( vw->viking_vvp ), &llold ); if ( a_dialog_goto_latlon ( GTK_WINDOW(vw), &ll, &llold ) ) vik_coord_load_from_latlon ( &new_center, vik_viewport_get_coord_mode(vw->viking_vvp), &ll ); else return; } else if (!strcmp(gtk_action_get_name(a), "GotoUTM")) { struct UTM utm, utmold; vik_coord_to_utm ( vik_viewport_get_center ( vw->viking_vvp ), &utmold ); if ( a_dialog_goto_utm ( GTK_WINDOW(vw), &utm, &utmold ) ) vik_coord_load_from_utm ( &new_center, vik_viewport_get_coord_mode(vw->viking_vvp), &utm ); else return; } else { g_critical("Houston, we've had a problem."); return; } vik_viewport_set_center_coord ( vw->viking_vvp, &new_center ); draw_update ( vw ); } /** * Refresh maps displayed */ static void draw_refresh_cb ( GtkAction *a, VikWindow *vw ) { // Only get 'new' maps simple_map_update ( vw, TRUE ); } static void menu_addlayer_cb ( GtkAction *a, VikWindow *vw ) { gint type; for ( type = 0; type < VIK_LAYER_NUM_TYPES; type++ ) { if (!strcmp(vik_layer_get_interface(type)->name, gtk_action_get_name(a))) { if ( vik_layers_panel_new_layer ( vw->viking_vlp, type ) ) { draw_update ( vw ); vw->modified = TRUE; } } } } static void menu_copy_layer_cb ( GtkAction *a, VikWindow *vw ) { a_clipboard_copy_selected ( vw->viking_vlp ); } static void menu_cut_layer_cb ( GtkAction *a, VikWindow *vw ) { vik_layers_panel_cut_selected ( vw->viking_vlp ); vw->modified = TRUE; } static void menu_paste_layer_cb ( GtkAction *a, VikWindow *vw ) { if ( a_clipboard_paste ( vw->viking_vlp ) ) { vw->modified = TRUE; } } static void menu_properties_cb ( GtkAction *a, VikWindow *vw ) { if ( ! vik_layers_panel_properties ( vw->viking_vlp ) ) a_dialog_info_msg ( GTK_WINDOW(vw), _("You must select a layer to show its properties.") ); } static void help_help_cb ( GtkAction *a, VikWindow *vw ) { #ifdef WINDOWS ShellExecute(NULL, "open", ""PACKAGE".pdf", NULL, NULL, SW_SHOWNORMAL); #else /* WINDOWS */ #if GTK_CHECK_VERSION (2, 14, 0) gchar *uri; uri = g_strdup_printf("ghelp:%s", PACKAGE); GError *error = NULL; gboolean show = gtk_show_uri (NULL, uri, GDK_CURRENT_TIME, &error); if ( !show && !error ) // No error to show, so unlikely this will get called a_dialog_error_msg ( GTK_WINDOW(vw), _("The help system is not available.") ); else if ( error ) { // Main error path a_dialog_error_msg_extra ( GTK_WINDOW(vw), _("Help is not available because: %s.\nEnsure a Mime Type ghelp handler program is installed (e.g. yelp)."), error->message ); g_error_free ( error ); } g_free(uri); #else a_dialog_error_msg ( GTK_WINDOW(vw), "Help is not available in this build." ); // Unlikely to happen so not going to bother with I8N #endif #endif /* WINDOWS */ } static void help_about_cb ( GtkAction *a, VikWindow *vw ) { a_dialog_about(GTK_WINDOW(vw)); } static void menu_delete_layer_cb ( GtkAction *a, VikWindow *vw ) { if ( vik_layers_panel_get_selected ( vw->viking_vlp ) ) { vik_layers_panel_delete_selected ( vw->viking_vlp ); vw->modified = TRUE; } else a_dialog_info_msg ( GTK_WINDOW(vw), _("You must select a layer to delete.") ); } static void view_side_panel_cb ( GtkAction *a, VikWindow *vw ) { GtkWidget *check_box = gtk_ui_manager_get_widget ( vw->uim, "/ui/MainMenu/View/SetShow/ViewSidePanel" ); g_assert(check_box); gboolean state = gtk_check_menu_item_get_active ( GTK_CHECK_MENU_ITEM(check_box)); if ( state ) gtk_widget_show(GTK_WIDGET(vw->viking_vlp)); else gtk_widget_hide(GTK_WIDGET(vw->viking_vlp)); } static void view_statusbar_cb ( GtkAction *a, VikWindow *vw ) { GtkWidget *check_box = gtk_ui_manager_get_widget ( vw->uim, "/ui/MainMenu/View/SetShow/ViewStatusBar" ); if ( !check_box ) return; gboolean state = gtk_check_menu_item_get_active ( GTK_CHECK_MENU_ITEM(check_box) ); if ( state ) gtk_widget_show ( GTK_WIDGET(vw->viking_vs) ); else gtk_widget_hide ( GTK_WIDGET(vw->viking_vs) ); } static void view_toolbar_cb ( GtkAction *a, VikWindow *vw ) { GtkWidget *check_box = gtk_ui_manager_get_widget ( vw->uim, "/ui/MainMenu/View/SetShow/ViewToolbar" ); if ( !check_box ) return; gboolean state = gtk_check_menu_item_get_active ( GTK_CHECK_MENU_ITEM(check_box) ); if ( state ) gtk_widget_show ( GTK_WIDGET(vw->toolbar) ); else gtk_widget_hide ( GTK_WIDGET(vw->toolbar) ); } static void view_main_menu_cb ( GtkAction *a, VikWindow *vw ) { GtkWidget *check_box = gtk_ui_manager_get_widget ( vw->uim, "/ui/MainMenu/View/SetShow/ViewMainMenu" ); if ( !check_box ) return; gboolean state = gtk_check_menu_item_get_active ( GTK_CHECK_MENU_ITEM(check_box) ); if ( !state ) gtk_widget_hide ( gtk_ui_manager_get_widget ( vw->uim, "/ui/MainMenu" ) ); else gtk_widget_show ( gtk_ui_manager_get_widget ( vw->uim, "/ui/MainMenu" ) ); } /*************************************** ** tool management routines ** ***************************************/ static toolbox_tools_t* toolbox_create(VikWindow *vw) { toolbox_tools_t *vt = g_new(toolbox_tools_t, 1); vt->tools = NULL; vt->n_tools = 0; vt->active_tool = -1; vt->vw = vw; return vt; } static void toolbox_add_tool(toolbox_tools_t *vt, VikToolInterface *vti, gint layer_type ) { vt->tools = g_renew(toolbox_tool_t, vt->tools, vt->n_tools+1); vt->tools[vt->n_tools].ti = *vti; vt->tools[vt->n_tools].layer_type = layer_type; if (vti->create) { vt->tools[vt->n_tools].state = vti->create(vt->vw, vt->vw->viking_vvp); } else { vt->tools[vt->n_tools].state = NULL; } vt->n_tools++; } static int toolbox_get_tool(toolbox_tools_t *vt, const gchar *tool_name) { int i; for (i=0; in_tools; i++) { if (!strcmp(tool_name, vt->tools[i].ti.radioActionEntry.name)) { break; } } return i; } static void toolbox_activate(toolbox_tools_t *vt, const gchar *tool_name) { int tool = toolbox_get_tool(vt, tool_name); toolbox_tool_t *t = &vt->tools[tool]; VikLayer *vl = vik_layers_panel_get_selected ( vt->vw->viking_vlp ); if (tool == vt->n_tools) { g_critical("trying to activate a non-existent tool..."); return; } /* is the tool already active? */ if (vt->active_tool == tool) { return; } if (vt->active_tool != -1) { if (vt->tools[vt->active_tool].ti.deactivate) { vt->tools[vt->active_tool].ti.deactivate(NULL, vt->tools[vt->active_tool].state); } } if (t->ti.activate) { t->ti.activate(vl, t->state); } vt->active_tool = tool; } static const GdkCursor *toolbox_get_cursor(toolbox_tools_t *vt, const gchar *tool_name) { int tool = toolbox_get_tool(vt, tool_name); toolbox_tool_t *t = &vt->tools[tool]; if (t->ti.cursor == NULL) { if (t->ti.cursor_type == GDK_CURSOR_IS_PIXMAP && t->ti.cursor_data != NULL) { GError *cursor_load_err = NULL; GdkPixbuf *cursor_pixbuf = gdk_pixbuf_from_pixdata (t->ti.cursor_data, FALSE, &cursor_load_err); /* TODO: settable offeset */ t->ti.cursor = gdk_cursor_new_from_pixbuf ( gdk_display_get_default(), cursor_pixbuf, 3, 3 ); g_object_unref ( G_OBJECT(cursor_pixbuf) ); } else { t->ti.cursor = gdk_cursor_new ( t->ti.cursor_type ); } } return t->ti.cursor; } static void toolbox_click (toolbox_tools_t *vt, GdkEventButton *event) { VikLayer *vl = vik_layers_panel_get_selected ( vt->vw->viking_vlp ); if (vt->active_tool != -1 && vt->tools[vt->active_tool].ti.click) { gint ltype = vt->tools[vt->active_tool].layer_type; if ( ltype == TOOL_LAYER_TYPE_NONE || (vl && ltype == vl->type) ) vt->tools[vt->active_tool].ti.click(vl, event, vt->tools[vt->active_tool].state); } } static void toolbox_move (toolbox_tools_t *vt, GdkEventMotion *event) { VikLayer *vl = vik_layers_panel_get_selected ( vt->vw->viking_vlp ); if (vt->active_tool != -1 && vt->tools[vt->active_tool].ti.move) { gint ltype = vt->tools[vt->active_tool].layer_type; if ( ltype == TOOL_LAYER_TYPE_NONE || (vl && ltype == vl->type) ) if ( VIK_LAYER_TOOL_ACK_GRAB_FOCUS == vt->tools[vt->active_tool].ti.move(vl, event, vt->tools[vt->active_tool].state) ) gtk_widget_grab_focus ( GTK_WIDGET(vt->vw->viking_vvp) ); } } static void toolbox_release (toolbox_tools_t *vt, GdkEventButton *event) { VikLayer *vl = vik_layers_panel_get_selected ( vt->vw->viking_vlp ); if (vt->active_tool != -1 && vt->tools[vt->active_tool].ti.release ) { gint ltype = vt->tools[vt->active_tool].layer_type; if ( ltype == TOOL_LAYER_TYPE_NONE || (vl && ltype == vl->type) ) vt->tools[vt->active_tool].ti.release(vl, event, vt->tools[vt->active_tool].state); } } /** End tool management ************************************/ void vik_window_enable_layer_tool ( VikWindow *vw, gint layer_id, gint tool_id ) { gtk_action_activate ( gtk_action_group_get_action ( vw->action_group, vik_layer_get_interface(layer_id)->tools[tool_id].radioActionEntry.name ) ); } /* this function gets called whenever a toolbar tool is clicked */ static void menu_tool_cb ( GtkAction *old, GtkAction *a, VikWindow *vw ) { /* White Magic, my friends ... White Magic... */ int layer_id, tool_id; const GdkCursor *cursor = NULL; toolbox_activate(vw->vt, gtk_action_get_name(a)); cursor = toolbox_get_cursor(vw->vt, gtk_action_get_name(a)); if ( GTK_WIDGET(vw->viking_vvp)->window ) /* We set cursor, even if it is NULL: it resets to default */ gdk_window_set_cursor ( GTK_WIDGET(vw->viking_vvp)->window, (GdkCursor *)cursor ); if (!strcmp(gtk_action_get_name(a), "Pan")) { vw->current_tool = TOOL_PAN; } else if (!strcmp(gtk_action_get_name(a), "Zoom")) { vw->current_tool = TOOL_ZOOM; } else if (!strcmp(gtk_action_get_name(a), "Ruler")) { vw->current_tool = TOOL_RULER; } else if (!strcmp(gtk_action_get_name(a), "Select")) { vw->current_tool = TOOL_SELECT; } else { /* TODO: only enable tools from active layer */ for (layer_id=0; layer_idtools_count; tool_id++ ) { if (!strcmp(vik_layer_get_interface(layer_id)->tools[tool_id].radioActionEntry.name, gtk_action_get_name(a))) { vw->current_tool = TOOL_LAYER; vw->tool_layer_id = layer_id; vw->tool_tool_id = tool_id; } } } } draw_status_tool ( vw ); } static void window_set_filename ( VikWindow *vw, const gchar *filename ) { gchar *title; const gchar *file; if ( vw->filename ) g_free ( vw->filename ); if ( filename == NULL ) { vw->filename = NULL; } else { vw->filename = g_strdup(filename); } /* Refresh window's title */ file = window_get_filename ( vw ); title = g_strdup_printf( "%s - Viking", file ); gtk_window_set_title ( GTK_WINDOW(vw), title ); g_free ( title ); } static const gchar *window_get_filename ( VikWindow *vw ) { return vw->filename ? a_file_basename ( vw->filename ) : _("Untitled"); } GtkWidget *vik_window_get_drawmode_button ( VikWindow *vw, VikViewportDrawMode mode ) { GtkWidget *mode_button; gchar *buttonname; switch ( mode ) { #ifdef VIK_CONFIG_EXPEDIA case VIK_VIEWPORT_DRAWMODE_EXPEDIA: buttonname = "/ui/MainMenu/View/ModeExpedia"; break; #endif case VIK_VIEWPORT_DRAWMODE_MERCATOR: buttonname = "/ui/MainMenu/View/ModeMercator"; break; case VIK_VIEWPORT_DRAWMODE_LATLON: buttonname = "/ui/MainMenu/View/ModeLatLon"; break; default: buttonname = "/ui/MainMenu/View/ModeUTM"; } mode_button = gtk_ui_manager_get_widget ( vw->uim, buttonname ); g_assert ( mode_button ); return mode_button; } /** * vik_window_get_pan_move: * @vw: some VikWindow * * Retrieves @vw's pan_move. * * Should be removed as soon as possible. * * Returns: @vw's pan_move * * Since: 0.9.96 **/ gboolean vik_window_get_pan_move ( VikWindow *vw ) { return vw->pan_move; } static void on_activate_recent_item (GtkRecentChooser *chooser, VikWindow *self) { gchar *filename; filename = gtk_recent_chooser_get_current_uri (chooser); if (filename != NULL) { GFile *file = g_file_new_for_uri ( filename ); gchar *path = g_file_get_path ( file ); g_object_unref ( file ); if ( self->filename ) { GSList *filenames = NULL; filenames = g_slist_append ( filenames, path ); g_signal_emit ( G_OBJECT(self), window_signals[VW_OPENWINDOW_SIGNAL], 0, filenames ); // NB: GSList & contents are freed by main.open_window } else { vik_window_open_file ( self, path, TRUE ); g_free ( path ); } } g_free (filename); } static void setup_recent_files (VikWindow *self) { GtkRecentManager *manager; GtkRecentFilter *filter; GtkWidget *menu, *menu_item; filter = gtk_recent_filter_new (); /* gtk_recent_filter_add_application (filter, g_get_application_name()); */ gtk_recent_filter_add_group(filter, "viking"); manager = gtk_recent_manager_get_default (); menu = gtk_recent_chooser_menu_new_for_manager (manager); gtk_recent_chooser_set_sort_type (GTK_RECENT_CHOOSER (menu), GTK_RECENT_SORT_MRU); gtk_recent_chooser_add_filter (GTK_RECENT_CHOOSER (menu), filter); menu_item = gtk_ui_manager_get_widget (self->uim, "/ui/MainMenu/File/OpenRecentFile"); gtk_menu_item_set_submenu (GTK_MENU_ITEM (menu_item), menu); g_signal_connect (G_OBJECT (menu), "item-activated", G_CALLBACK (on_activate_recent_item), (gpointer) self); } static void update_recently_used_document(const gchar *filename) { /* Update Recently Used Document framework */ GtkRecentManager *manager = gtk_recent_manager_get_default(); GtkRecentData *recent_data = g_slice_new (GtkRecentData); gchar *groups[] = {"viking", NULL}; GFile *file = g_file_new_for_commandline_arg(filename); gchar *uri = g_file_get_uri(file); gchar *basename = g_path_get_basename(filename); g_object_unref(file); file = NULL; recent_data->display_name = basename; recent_data->description = NULL; recent_data->mime_type = "text/x-gps-data"; recent_data->app_name = (gchar *) g_get_application_name (); recent_data->app_exec = g_strjoin (" ", g_get_prgname (), "%f", NULL); recent_data->groups = groups; recent_data->is_private = FALSE; if (!gtk_recent_manager_add_full (manager, uri, recent_data)) { g_warning (_("Unable to add '%s' to the list of recently used documents"), uri); } g_free (uri); g_free (basename); g_free (recent_data->app_exec); g_slice_free (GtkRecentData, recent_data); } void vik_window_open_file ( VikWindow *vw, const gchar *filename, gboolean change_filename ) { switch ( a_file_load ( vik_layers_panel_get_top_layer(vw->viking_vlp), vw->viking_vvp, filename ) ) { case LOAD_TYPE_READ_FAILURE: a_dialog_error_msg ( GTK_WINDOW(vw), _("The file you requested could not be opened.") ); break; case LOAD_TYPE_GPSBABEL_FAILURE: a_dialog_error_msg ( GTK_WINDOW(vw), _("GPSBabel is required to load files of this type or GPSBabel encountered problems.") ); break; case LOAD_TYPE_GPX_FAILURE: a_dialog_error_msg_extra ( GTK_WINDOW(vw), _("Unable to load malformed GPX file %s"), filename ); break; case LOAD_TYPE_UNSUPPORTED_FAILURE: a_dialog_error_msg_extra ( GTK_WINDOW(vw), _("Unsupported file type for %s"), filename ); break; case LOAD_TYPE_VIK_FAILURE_NON_FATAL: { // Since we can process .vik files with issues just show a warning in the status bar // Not that a user can do much about it... or tells them what this issue is yet... gchar *msg = g_strdup_printf (_("WARNING: issues encountered loading %s"), a_file_basename (filename) ); vik_statusbar_set_message ( vw->viking_vs, VIK_STATUSBAR_INFO, msg ); g_free ( msg ); } // No break, carry on to show any data case LOAD_TYPE_VIK_SUCCESS: { GtkWidget *mode_button; /* Update UI */ if ( change_filename ) window_set_filename ( vw, filename ); mode_button = vik_window_get_drawmode_button ( vw, vik_viewport_get_drawmode ( vw->viking_vvp ) ); vw->only_updating_coord_mode_ui = TRUE; /* if we don't set this, it will change the coord to UTM if we click Lat/Lon. I don't know why. */ gtk_check_menu_item_set_active ( GTK_CHECK_MENU_ITEM(mode_button), TRUE ); vw->only_updating_coord_mode_ui = FALSE; vik_layers_panel_change_coord_mode ( vw->viking_vlp, vik_viewport_get_coord_mode ( vw->viking_vvp ) ); mode_button = gtk_ui_manager_get_widget ( vw->uim, "/ui/MainMenu/View/SetShow/ShowScale" ); g_assert ( mode_button ); gtk_check_menu_item_set_active ( GTK_CHECK_MENU_ITEM(mode_button),vik_viewport_get_draw_scale(vw->viking_vvp) ); mode_button = gtk_ui_manager_get_widget ( vw->uim, "/ui/MainMenu/View/SetShow/ShowCenterMark" ); g_assert ( mode_button ); gtk_check_menu_item_set_active ( GTK_CHECK_MENU_ITEM(mode_button),vik_viewport_get_draw_centermark(vw->viking_vvp) ); mode_button = gtk_ui_manager_get_widget ( vw->uim, "/ui/MainMenu/View/SetShow/ShowHighlight" ); g_assert ( mode_button ); gtk_check_menu_item_set_active ( GTK_CHECK_MENU_ITEM(mode_button),vik_viewport_get_draw_highlight (vw->viking_vvp) ); } //case LOAD_TYPE_OTHER_SUCCESS: default: update_recently_used_document(filename); draw_update ( vw ); break; } } static void load_file ( GtkAction *a, VikWindow *vw ) { GSList *files = NULL; GSList *cur_file = NULL; gboolean newwindow; if (!strcmp(gtk_action_get_name(a), "Open")) { newwindow = TRUE; } else if (!strcmp(gtk_action_get_name(a), "Append")) { newwindow = FALSE; } else { g_critical("Houston, we've had a problem."); return; } if ( ! vw->open_dia ) { vw->open_dia = gtk_file_chooser_dialog_new (_("Please select a GPS data file to open. "), GTK_WINDOW(vw), GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL); GtkFileFilter *filter; // NB file filters are listed this way for alphabetical ordering #ifdef VIK_CONFIG_GEOCACHES filter = gtk_file_filter_new (); gtk_file_filter_set_name( filter, _("Geocaching") ); gtk_file_filter_add_pattern ( filter, "*.loc" ); // No MIME type available gtk_file_chooser_add_filter (GTK_FILE_CHOOSER(vw->open_dia), filter); #endif filter = gtk_file_filter_new (); gtk_file_filter_set_name( filter, _("Google Earth") ); gtk_file_filter_add_mime_type ( filter, "application/vnd.google-earth.kml+xml"); gtk_file_chooser_add_filter (GTK_FILE_CHOOSER(vw->open_dia), filter); filter = gtk_file_filter_new (); gtk_file_filter_set_name( filter, _("GPX") ); gtk_file_filter_add_pattern ( filter, "*.gpx" ); // No MIME type available gtk_file_chooser_add_filter (GTK_FILE_CHOOSER(vw->open_dia), filter); filter = gtk_file_filter_new (); gtk_file_filter_set_name( filter, _("Viking") ); gtk_file_filter_add_pattern ( filter, "*.vik" ); gtk_file_filter_add_pattern ( filter, "*.viking" ); gtk_file_chooser_add_filter (GTK_FILE_CHOOSER(vw->open_dia), filter); // NB could have filters for gpspoint (*.gps,*.gpsoint?) + gpsmapper (*.gsm,*.gpsmapper?) // However assume this are barely used and thus not worthy of inclusion // as they'll just make the options too many and have no clear file pattern // one can always use the all option filter = gtk_file_filter_new (); gtk_file_filter_set_name( filter, _("All") ); gtk_file_filter_add_pattern ( filter, "*" ); gtk_file_chooser_add_filter (GTK_FILE_CHOOSER(vw->open_dia), filter); // Default to any file - same as before open filters were added gtk_file_chooser_set_filter (GTK_FILE_CHOOSER(vw->open_dia), filter); gtk_file_chooser_set_select_multiple ( GTK_FILE_CHOOSER(vw->open_dia), TRUE ); gtk_window_set_transient_for ( GTK_WINDOW(vw->open_dia), GTK_WINDOW(vw) ); gtk_window_set_destroy_with_parent ( GTK_WINDOW(vw->open_dia), TRUE ); } if ( gtk_dialog_run ( GTK_DIALOG(vw->open_dia) ) == GTK_RESPONSE_ACCEPT ) { gtk_widget_hide ( vw->open_dia ); #ifdef VIKING_PROMPT_IF_MODIFIED if ( (vw->modified || vw->filename) && newwindow ) #else if ( vw->filename && newwindow ) #endif g_signal_emit ( G_OBJECT(vw), window_signals[VW_OPENWINDOW_SIGNAL], 0, gtk_file_chooser_get_filenames (GTK_FILE_CHOOSER(vw->open_dia) ) ); else { files = gtk_file_chooser_get_filenames (GTK_FILE_CHOOSER(vw->open_dia) ); gboolean change_fn = newwindow && (g_slist_length(files)==1); /* only change fn if one file */ gboolean first_vik_file = TRUE; cur_file = files; while ( cur_file ) { gchar *file_name = cur_file->data; if ( newwindow && check_file_magic_vik ( file_name ) ) { // Load first of many .vik files in current window if ( first_vik_file ) { vik_window_open_file ( vw, file_name, TRUE ); first_vik_file = FALSE; } else { // Load each subsequent .vik file in a separate window VikWindow *newvw = vik_window_new_window (); if (newvw) vik_window_open_file ( newvw, file_name, TRUE ); } } else // Other file types vik_window_open_file ( vw, file_name, change_fn ); g_free (file_name); cur_file = g_slist_next (cur_file); } g_slist_free (files); } } else gtk_widget_hide ( vw->open_dia ); } static gboolean save_file_as ( GtkAction *a, VikWindow *vw ) { gboolean rv = FALSE; const gchar *fn; if ( ! vw->save_dia ) { vw->save_dia = gtk_file_chooser_dialog_new (_("Save as Viking File."), GTK_WINDOW(vw), GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, NULL); GtkFileFilter *filter; filter = gtk_file_filter_new (); gtk_file_filter_set_name( filter, _("All") ); gtk_file_filter_add_pattern ( filter, "*" ); gtk_file_chooser_add_filter (GTK_FILE_CHOOSER(vw->save_dia), filter); filter = gtk_file_filter_new (); gtk_file_filter_set_name( filter, _("Viking") ); gtk_file_filter_add_pattern ( filter, "*.vik" ); gtk_file_filter_add_pattern ( filter, "*.viking" ); gtk_file_chooser_add_filter (GTK_FILE_CHOOSER(vw->save_dia), filter); // Default to a Viking file gtk_file_chooser_set_filter (GTK_FILE_CHOOSER(vw->save_dia), filter); gtk_window_set_transient_for ( GTK_WINDOW(vw->save_dia), GTK_WINDOW(vw) ); gtk_window_set_destroy_with_parent ( GTK_WINDOW(vw->save_dia), TRUE ); } // Auto append / replace extension with '.vik' to the suggested file name as it's going to be a Viking File gchar* auto_save_name = g_strdup ( window_get_filename ( vw ) ); if ( ! check_file_ext ( auto_save_name, ".vik" ) ) auto_save_name = g_strconcat ( auto_save_name, ".vik", NULL ); gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER(vw->save_dia), auto_save_name); while ( gtk_dialog_run ( GTK_DIALOG(vw->save_dia) ) == GTK_RESPONSE_ACCEPT ) { fn = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER(vw->save_dia) ); if ( g_file_test ( fn, G_FILE_TEST_EXISTS ) == FALSE || a_dialog_yes_or_no ( GTK_WINDOW(vw->save_dia), _("The file \"%s\" exists, do you wish to overwrite it?"), a_file_basename ( fn ) ) ) { window_set_filename ( vw, fn ); rv = window_save ( vw ); vw->modified = FALSE; break; } } g_free ( auto_save_name ); gtk_widget_hide ( vw->save_dia ); return rv; } static gboolean window_save ( VikWindow *vw ) { if ( a_file_save ( vik_layers_panel_get_top_layer ( vw->viking_vlp ), vw->viking_vvp, vw->filename ) ) { update_recently_used_document ( vw->filename ); return TRUE; } else { a_dialog_error_msg ( GTK_WINDOW(vw), _("The filename you requested could not be opened for writing.") ); return FALSE; } } static gboolean save_file ( GtkAction *a, VikWindow *vw ) { if ( ! vw->filename ) return save_file_as ( NULL, vw ); else { vw->modified = FALSE; return window_save ( vw ); } } static void acquire_from_gps ( GtkAction *a, VikWindow *vw ) { // Via the file menu, acquiring from a GPS makes a new layer // this has always been the way (not entirely sure if this was the real intention!) // thus maintain the behaviour ATM. // Hence explicit setting here (as the value may be changed elsewhere) vik_datasource_gps_interface.mode = VIK_DATASOURCE_CREATENEWLAYER; a_acquire(vw, vw->viking_vlp, vw->viking_vvp, &vik_datasource_gps_interface ); } static void acquire_from_file ( GtkAction *a, VikWindow *vw ) { a_acquire(vw, vw->viking_vlp, vw->viking_vvp, &vik_datasource_file_interface ); } #ifdef VIK_CONFIG_GOOGLE static void acquire_from_google ( GtkAction *a, VikWindow *vw ) { a_acquire(vw, vw->viking_vlp, vw->viking_vvp, &vik_datasource_google_interface ); } #endif #ifdef VIK_CONFIG_OPENSTREETMAP static void acquire_from_osm ( GtkAction *a, VikWindow *vw ) { a_acquire(vw, vw->viking_vlp, vw->viking_vvp, &vik_datasource_osm_interface ); } static void acquire_from_my_osm ( GtkAction *a, VikWindow *vw ) { a_acquire(vw, vw->viking_vlp, vw->viking_vvp, &vik_datasource_osm_my_traces_interface ); } #endif #ifdef VIK_CONFIG_GEOCACHES static void acquire_from_gc ( GtkAction *a, VikWindow *vw ) { a_acquire(vw, vw->viking_vlp, vw->viking_vvp, &vik_datasource_gc_interface ); } #endif #ifdef VIK_CONFIG_GEOTAG static void acquire_from_geotag ( GtkAction *a, VikWindow *vw ) { vik_datasource_geotag_interface.mode = VIK_DATASOURCE_CREATENEWLAYER; a_acquire(vw, vw->viking_vlp, vw->viking_vvp, &vik_datasource_geotag_interface ); } #endif #ifdef VIK_CONFIG_GEONAMES static void acquire_from_wikipedia ( GtkAction *a, VikWindow *vw ) { a_acquire(vw, vw->viking_vlp, vw->viking_vvp, &vik_datasource_wikipedia_interface ); } #endif static void goto_default_location( GtkAction *a, VikWindow *vw) { struct LatLon ll; ll.lat = a_vik_get_default_lat(); ll.lon = a_vik_get_default_long(); vik_viewport_set_center_latlon(vw->viking_vvp, &ll); vik_layers_panel_emit_update(vw->viking_vlp); } static void goto_address( GtkAction *a, VikWindow *vw) { a_vik_goto ( vw, vw->viking_vvp ); vik_layers_panel_emit_update ( vw->viking_vlp ); } static void mapcache_flush_cb ( GtkAction *a, VikWindow *vw ) { a_mapcache_flush(); } static void preferences_cb ( GtkAction *a, VikWindow *vw ) { gboolean wp_icon_size = a_vik_get_use_large_waypoint_icons(); a_preferences_show_window ( GTK_WINDOW(vw) ); // Delete icon indexing 'cache' and so automatically regenerates with the new setting when changed if (wp_icon_size != a_vik_get_use_large_waypoint_icons()) clear_garmin_icon_syms (); draw_update ( vw ); } static void default_location_cb ( GtkAction *a, VikWindow *vw ) { /* Simplistic repeat of preference setting Only the name & type are important for setting the preference via this 'external' way */ VikLayerParam pref_lat[] = { { VIKING_PREFERENCES_NAMESPACE "default_latitude", VIK_LAYER_PARAM_DOUBLE, VIK_LOCATION_LAT, NULL, VIK_LAYER_WIDGET_SPINBUTTON, NULL, NULL, NULL }, }; VikLayerParam pref_lon[] = { { VIKING_PREFERENCES_NAMESPACE "default_longitude", VIK_LAYER_PARAM_DOUBLE, VIK_LOCATION_LONG, NULL, VIK_LAYER_WIDGET_SPINBUTTON, NULL, NULL, NULL }, }; /* Get current center */ struct LatLon ll; vik_coord_to_latlon ( vik_viewport_get_center ( vw->viking_vvp ), &ll ); /* Apply to preferences */ VikLayerParamData vlp_data; vlp_data.d = ll.lat; a_preferences_run_setparam (vlp_data, pref_lat); vlp_data.d = ll.lon; a_preferences_run_setparam (vlp_data, pref_lon); /* Remember to save */ a_preferences_save_to_file(); } static void clear_cb ( GtkAction *a, VikWindow *vw ) { vik_layers_panel_clear ( vw->viking_vlp ); window_set_filename ( vw, NULL ); draw_update ( vw ); } static void window_close ( GtkAction *a, VikWindow *vw ) { if ( ! delete_event ( vw ) ) gtk_widget_destroy ( GTK_WIDGET(vw) ); } static gboolean save_file_and_exit ( GtkAction *a, VikWindow *vw ) { if (save_file( NULL, vw)) { window_close( NULL, vw); return(TRUE); } else return(FALSE); } static void zoom_to_cb ( GtkAction *a, VikWindow *vw ) { gdouble xmpp = vik_viewport_get_xmpp ( vw->viking_vvp ), ympp = vik_viewport_get_ympp ( vw->viking_vvp ); if ( a_dialog_custom_zoom ( GTK_WINDOW(vw), &xmpp, &ympp ) ) { vik_viewport_set_xmpp ( vw->viking_vvp, xmpp ); vik_viewport_set_ympp ( vw->viking_vvp, ympp ); draw_update ( vw ); } } static void save_image_file ( VikWindow *vw, const gchar *fn, guint w, guint h, gdouble zoom, gboolean save_as_png ) { /* more efficient way: stuff draws directly to pixbuf (fork viewport) */ GdkPixbuf *pixbuf_to_save; gdouble old_xmpp, old_ympp; GError *error = NULL; GtkWidget *msgbox = gtk_message_dialog_new ( GTK_WINDOW(vw), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_NONE, _("Generating image file...") ); g_signal_connect_swapped (msgbox, "response", G_CALLBACK (gtk_widget_destroy), msgbox); // Ensure dialog shown gtk_widget_show_all ( msgbox ); // Try harder... vik_statusbar_set_message ( vw->viking_vs, VIK_STATUSBAR_INFO, _("Generating image file...") ); while ( gtk_events_pending() ) gtk_main_iteration (); // Despite many efforts & variations, GTK on my Linux system doesn't show the actual msgbox contents :( // At least the empty box can give a clue something's going on + the statusbar msg... // Windows version under Wine OK! /* backup old zoom & set new */ old_xmpp = vik_viewport_get_xmpp ( vw->viking_vvp ); old_ympp = vik_viewport_get_ympp ( vw->viking_vvp ); vik_viewport_set_zoom ( vw->viking_vvp, zoom ); /* reset width and height: */ vik_viewport_configure_manually ( vw->viking_vvp, w, h ); /* draw all layers */ draw_redraw ( vw ); /* save buffer as file. */ pixbuf_to_save = gdk_pixbuf_get_from_drawable ( NULL, GDK_DRAWABLE(vik_viewport_get_pixmap ( vw->viking_vvp )), NULL, 0, 0, 0, 0, w, h); if ( !pixbuf_to_save ) { g_warning("Failed to generate internal pixmap size: %d x %d", w, h); gtk_message_dialog_set_markup ( GTK_MESSAGE_DIALOG(msgbox), _("Failed to generate internal image.\n\nTry creating a smaller image.") ); goto cleanup; } gdk_pixbuf_save ( pixbuf_to_save, fn, save_as_png ? "png" : "jpeg", &error, NULL ); if (error) { g_warning("Unable to write to file %s: %s", fn, error->message ); gtk_message_dialog_set_markup ( GTK_MESSAGE_DIALOG(msgbox), _("Failed to generate image file.") ); g_error_free (error); } else { // Success gtk_message_dialog_set_markup ( GTK_MESSAGE_DIALOG(msgbox), _("Image file generated.") ); } g_object_unref ( G_OBJECT(pixbuf_to_save) ); cleanup: vik_statusbar_set_message ( vw->viking_vs, VIK_STATUSBAR_INFO, "" ); gtk_dialog_add_button ( GTK_DIALOG(msgbox), GTK_STOCK_OK, GTK_RESPONSE_OK ); gtk_dialog_run ( GTK_DIALOG(msgbox) ); // Don't care about the result /* pretend like nothing happened ;) */ vik_viewport_set_xmpp ( vw->viking_vvp, old_xmpp ); vik_viewport_set_ympp ( vw->viking_vvp, old_ympp ); vik_viewport_configure ( vw->viking_vvp ); draw_update ( vw ); } static void save_image_dir ( VikWindow *vw, const gchar *fn, guint w, guint h, gdouble zoom, gboolean save_as_png, guint tiles_w, guint tiles_h ) { gulong size = sizeof(gchar) * (strlen(fn) + 15); gchar *name_of_file = g_malloc ( size ); guint x = 1, y = 1; struct UTM utm_orig, utm; /* *** copied from above *** */ GdkPixbuf *pixbuf_to_save; gdouble old_xmpp, old_ympp; GError *error = NULL; /* backup old zoom & set new */ old_xmpp = vik_viewport_get_xmpp ( vw->viking_vvp ); old_ympp = vik_viewport_get_ympp ( vw->viking_vvp ); vik_viewport_set_zoom ( vw->viking_vvp, zoom ); /* reset width and height: do this only once for all images (same size) */ vik_viewport_configure_manually ( vw->viking_vvp, w, h ); /* *** end copy from above *** */ g_assert ( vik_viewport_get_coord_mode ( vw->viking_vvp ) == VIK_COORD_UTM ); g_mkdir(fn,0777); utm_orig = *((const struct UTM *)vik_viewport_get_center ( vw->viking_vvp )); for ( y = 1; y <= tiles_h; y++ ) { for ( x = 1; x <= tiles_w; x++ ) { g_snprintf ( name_of_file, size, "%s%cy%d-x%d.%s", fn, G_DIR_SEPARATOR, y, x, save_as_png ? "png" : "jpg" ); utm = utm_orig; if ( tiles_w & 0x1 ) utm.easting += ((gdouble)x - ceil(((gdouble)tiles_w)/2)) * (w*zoom); else utm.easting += ((gdouble)x - (((gdouble)tiles_w)+1)/2) * (w*zoom); if ( tiles_h & 0x1 ) /* odd */ utm.northing -= ((gdouble)y - ceil(((gdouble)tiles_h)/2)) * (h*zoom); else /* even */ utm.northing -= ((gdouble)y - (((gdouble)tiles_h)+1)/2) * (h*zoom); /* move to correct place. */ vik_viewport_set_center_utm ( vw->viking_vvp, &utm ); draw_redraw ( vw ); /* save buffer as file. */ pixbuf_to_save = gdk_pixbuf_get_from_drawable ( NULL, GDK_DRAWABLE(vik_viewport_get_pixmap ( vw->viking_vvp )), NULL, 0, 0, 0, 0, w, h); gdk_pixbuf_save ( pixbuf_to_save, name_of_file, save_as_png ? "png" : "jpeg", &error, NULL ); if (error) { g_warning("Unable to write to file %s: %s", name_of_file, error->message ); g_error_free (error); } g_object_unref ( G_OBJECT(pixbuf_to_save) ); } } vik_viewport_set_center_utm ( vw->viking_vvp, &utm_orig ); vik_viewport_set_xmpp ( vw->viking_vvp, old_xmpp ); vik_viewport_set_ympp ( vw->viking_vvp, old_ympp ); vik_viewport_configure ( vw->viking_vvp ); draw_update ( vw ); g_free ( name_of_file ); } static void draw_to_image_file_current_window_cb(GtkWidget* widget,GdkEventButton *event,gpointer *pass_along) { VikWindow *vw = VIK_WINDOW(pass_along[0]); GtkSpinButton *width_spin = GTK_SPIN_BUTTON(pass_along[1]), *height_spin = GTK_SPIN_BUTTON(pass_along[2]); gint active = gtk_combo_box_get_active ( GTK_COMBO_BOX(pass_along[3]) ); gdouble zoom = pow (2, active-2 ); gdouble width_min, width_max, height_min, height_max; gint width, height; gtk_spin_button_get_range ( width_spin, &width_min, &width_max ); gtk_spin_button_get_range ( height_spin, &height_min, &height_max ); /* TODO: support for xzoom and yzoom values */ width = vik_viewport_get_width ( vw->viking_vvp ) * vik_viewport_get_xmpp ( vw->viking_vvp ) / zoom; height = vik_viewport_get_height ( vw->viking_vvp ) * vik_viewport_get_xmpp ( vw->viking_vvp ) / zoom; if ( width > width_max || width < width_min || height > height_max || height < height_min ) a_dialog_info_msg ( GTK_WINDOW(vw), _("Viewable region outside allowable pixel size bounds for image. Clipping width/height values.") ); gtk_spin_button_set_value ( width_spin, width ); gtk_spin_button_set_value ( height_spin, height ); } static void draw_to_image_file_total_area_cb (GtkSpinButton *spinbutton, gpointer *pass_along) { GtkSpinButton *width_spin = GTK_SPIN_BUTTON(pass_along[1]), *height_spin = GTK_SPIN_BUTTON(pass_along[2]); gint active = gtk_combo_box_get_active ( GTK_COMBO_BOX(pass_along[3]) ); gdouble zoom = pow (2, active-2 ); gchar *label_text; gdouble w, h; w = gtk_spin_button_get_value(width_spin) * zoom; h = gtk_spin_button_get_value(height_spin) * zoom; if (pass_along[4]) /* save many images; find TOTAL area covered */ { w *= gtk_spin_button_get_value(GTK_SPIN_BUTTON(pass_along[4])); h *= gtk_spin_button_get_value(GTK_SPIN_BUTTON(pass_along[5])); } vik_units_distance_t dist_units = a_vik_get_units_distance (); switch (dist_units) { case VIK_UNITS_DISTANCE_KILOMETRES: label_text = g_strdup_printf ( _("Total area: %ldm x %ldm (%.3f sq. km)"), (glong)w, (glong)h, (w*h/1000000)); break; case VIK_UNITS_DISTANCE_MILES: label_text = g_strdup_printf ( _("Total area: %ldm x %ldm (%.3f sq. miles)"), (glong)w, (glong)h, (w*h/2589988.11)); break; default: label_text = g_strdup_printf ("Just to keep the compiler happy"); g_critical("Houston, we've had a problem. distance=%d", dist_units); } gtk_label_set_text(GTK_LABEL(pass_along[6]), label_text); g_free ( label_text ); } /* * Get an allocated filename (or directory as specified) */ static gchar* draw_image_filename ( VikWindow *vw, gboolean one_image_only ) { gchar *fn = NULL; if ( one_image_only ) { // Single file if (!vw->save_img_dia) { vw->save_img_dia = gtk_file_chooser_dialog_new (_("Save Image"), GTK_WINDOW(vw), GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, NULL); GtkFileChooser *chooser = GTK_FILE_CHOOSER ( vw->save_img_dia ); /* Add filters */ GtkFileFilter *filter; filter = gtk_file_filter_new (); gtk_file_filter_set_name ( filter, _("All") ); gtk_file_filter_add_pattern ( filter, "*" ); gtk_file_chooser_add_filter ( chooser, filter ); filter = gtk_file_filter_new (); gtk_file_filter_set_name ( filter, _("JPG") ); gtk_file_filter_add_mime_type ( filter, "image/jpeg"); gtk_file_chooser_add_filter ( chooser, filter ); filter = gtk_file_filter_new (); gtk_file_filter_set_name ( filter, _("PNG") ); gtk_file_filter_add_mime_type ( filter, "image/png"); gtk_file_chooser_add_filter ( chooser, filter ); // Default to pngs gtk_file_chooser_set_filter ( chooser, filter ); gtk_window_set_transient_for ( GTK_WINDOW(vw->save_img_dia), GTK_WINDOW(vw) ); gtk_window_set_destroy_with_parent ( GTK_WINDOW(vw->save_img_dia), TRUE ); } if ( gtk_dialog_run ( GTK_DIALOG(vw->save_img_dia) ) == GTK_RESPONSE_ACCEPT ) { fn = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER(vw->save_img_dia) ); if ( g_file_test ( fn, G_FILE_TEST_EXISTS ) ) if ( ! a_dialog_yes_or_no ( GTK_WINDOW(vw->save_img_dia), _("The file \"%s\" exists, do you wish to overwrite it?"), a_file_basename ( fn ) ) ) fn = NULL; } gtk_widget_hide ( vw->save_img_dia ); } else { // A directory // For some reason this method is only written to work in UTM... if ( vik_viewport_get_coord_mode(vw->viking_vvp) != VIK_COORD_UTM ) { a_dialog_error_msg ( GTK_WINDOW(vw), _("You must be in UTM mode to use this feature") ); return fn; } if (!vw->save_img_dir_dia) { vw->save_img_dir_dia = gtk_file_chooser_dialog_new (_("Choose a directory to hold images"), GTK_WINDOW(vw), GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL); gtk_window_set_transient_for ( GTK_WINDOW(vw->save_img_dir_dia), GTK_WINDOW(vw) ); gtk_window_set_destroy_with_parent ( GTK_WINDOW(vw->save_img_dir_dia), TRUE ); } if ( gtk_dialog_run ( GTK_DIALOG(vw->save_img_dir_dia) ) == GTK_RESPONSE_ACCEPT ) { fn = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER(vw->save_img_dir_dia) ); } gtk_widget_hide ( vw->save_img_dir_dia ); } return fn; } static void draw_to_image_file ( VikWindow *vw, gboolean one_image_only ) { /* todo: default for answers inside VikWindow or static (thruout instance) */ GtkWidget *dialog = gtk_dialog_new_with_buttons ( _("Save to Image File"), GTK_WINDOW(vw), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL ); GtkWidget *width_label, *width_spin, *height_label, *height_spin; GtkWidget *png_radio, *jpeg_radio; GtkWidget *current_window_button; gpointer current_window_pass_along[7]; GtkWidget *zoom_label, *zoom_combo; GtkWidget *total_size_label; /* only used if (!one_image_only) */ GtkWidget *tiles_width_spin = NULL, *tiles_height_spin = NULL; width_label = gtk_label_new ( _("Width (pixels):") ); width_spin = gtk_spin_button_new ( GTK_ADJUSTMENT(gtk_adjustment_new ( vw->draw_image_width, 10, 50000, 10, 100, 0 )), 10, 0 ); height_label = gtk_label_new ( _("Height (pixels):") ); height_spin = gtk_spin_button_new ( GTK_ADJUSTMENT(gtk_adjustment_new ( vw->draw_image_height, 10, 50000, 10, 100, 0 )), 10, 0 ); #ifdef WINDOWS GtkWidget *win_warning_label = gtk_label_new ( _("WARNING: USING LARGE IMAGES OVER 10000x10000\nMAY CRASH THE PROGRAM!") ); #endif zoom_label = gtk_label_new ( _("Zoom (meters per pixel):") ); /* TODO: separate xzoom and yzoom factors */ zoom_combo = create_zoom_combo_all_levels(); gdouble mpp = vik_viewport_get_xmpp(vw->viking_vvp); gint active = 2 + round ( log (mpp) / log (2) ); // Can we not hard code size here? if ( active > 17 ) active = 17; gtk_combo_box_set_active ( GTK_COMBO_BOX(zoom_combo), active ); total_size_label = gtk_label_new ( NULL ); current_window_button = gtk_button_new_with_label ( _("Area in current viewable window") ); current_window_pass_along [0] = vw; current_window_pass_along [1] = width_spin; current_window_pass_along [2] = height_spin; current_window_pass_along [3] = zoom_combo; current_window_pass_along [4] = NULL; /* used for one_image_only != 1 */ current_window_pass_along [5] = NULL; current_window_pass_along [6] = total_size_label; g_signal_connect ( G_OBJECT(current_window_button), "button_press_event", G_CALLBACK(draw_to_image_file_current_window_cb), current_window_pass_along ); png_radio = gtk_radio_button_new_with_label ( NULL, _("Save as PNG") ); jpeg_radio = gtk_radio_button_new_with_label_from_widget ( GTK_RADIO_BUTTON(png_radio), _("Save as JPEG") ); if ( ! vw->draw_image_save_as_png ) gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON(jpeg_radio), TRUE ); gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), width_label, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), width_spin, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), height_label, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), height_spin, FALSE, FALSE, 0); #ifdef WINDOWS gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), win_warning_label, FALSE, FALSE, 0); #endif gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), current_window_button, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), png_radio, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), jpeg_radio, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), zoom_label, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), zoom_combo, FALSE, FALSE, 0); if ( ! one_image_only ) { GtkWidget *tiles_width_label, *tiles_height_label; tiles_width_label = gtk_label_new ( _("East-west image tiles:") ); tiles_width_spin = gtk_spin_button_new ( GTK_ADJUSTMENT(gtk_adjustment_new ( 5, 1, 10, 1, 100, 0 )), 1, 0 ); tiles_height_label = gtk_label_new ( _("North-south image tiles:") ); tiles_height_spin = gtk_spin_button_new ( GTK_ADJUSTMENT(gtk_adjustment_new ( 5, 1, 10, 1, 100, 0 )), 1, 0 ); gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), tiles_width_label, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), tiles_width_spin, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), tiles_height_label, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), tiles_height_spin, FALSE, FALSE, 0); current_window_pass_along [4] = tiles_width_spin; current_window_pass_along [5] = tiles_height_spin; g_signal_connect ( G_OBJECT(tiles_width_spin), "value-changed", G_CALLBACK(draw_to_image_file_total_area_cb), current_window_pass_along ); g_signal_connect ( G_OBJECT(tiles_height_spin), "value-changed", G_CALLBACK(draw_to_image_file_total_area_cb), current_window_pass_along ); } gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), total_size_label, FALSE, FALSE, 0); g_signal_connect ( G_OBJECT(width_spin), "value-changed", G_CALLBACK(draw_to_image_file_total_area_cb), current_window_pass_along ); g_signal_connect ( G_OBJECT(height_spin), "value-changed", G_CALLBACK(draw_to_image_file_total_area_cb), current_window_pass_along ); g_signal_connect ( G_OBJECT(zoom_combo), "changed", G_CALLBACK(draw_to_image_file_total_area_cb), current_window_pass_along ); draw_to_image_file_total_area_cb ( NULL, current_window_pass_along ); /* set correct size info now */ gtk_dialog_set_default_response ( GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT ); gtk_widget_show_all ( GTK_DIALOG(dialog)->vbox ); if ( gtk_dialog_run ( GTK_DIALOG(dialog) ) == GTK_RESPONSE_ACCEPT ) { gtk_widget_hide ( GTK_WIDGET(dialog) ); gchar *fn = draw_image_filename ( vw, one_image_only ); if ( !fn ) return; gint active = gtk_combo_box_get_active ( GTK_COMBO_BOX(zoom_combo) ); gdouble zoom = pow (2, active-2 ); if ( one_image_only ) save_image_file ( vw, fn, vw->draw_image_width = gtk_spin_button_get_value_as_int ( GTK_SPIN_BUTTON(width_spin) ), vw->draw_image_height = gtk_spin_button_get_value_as_int ( GTK_SPIN_BUTTON(height_spin) ), zoom, vw->draw_image_save_as_png = gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON(png_radio) ) ); else { // NB is in UTM mode ATM save_image_dir ( vw, fn, vw->draw_image_width = gtk_spin_button_get_value_as_int ( GTK_SPIN_BUTTON(width_spin) ), vw->draw_image_height = gtk_spin_button_get_value_as_int ( GTK_SPIN_BUTTON(height_spin) ), zoom, vw->draw_image_save_as_png = gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON(png_radio) ), gtk_spin_button_get_value ( GTK_SPIN_BUTTON(tiles_width_spin) ), gtk_spin_button_get_value ( GTK_SPIN_BUTTON(tiles_height_spin) ) ); } g_free ( fn ); } gtk_widget_destroy ( GTK_WIDGET(dialog) ); } static void draw_to_image_file_cb ( GtkAction *a, VikWindow *vw ) { draw_to_image_file ( vw, TRUE ); } static void draw_to_image_dir_cb ( GtkAction *a, VikWindow *vw ) { draw_to_image_file ( vw, FALSE ); } #if GTK_CHECK_VERSION(2,10,0) static void print_cb ( GtkAction *a, VikWindow *vw ) { a_print(vw, vw->viking_vvp); } #endif /* really a misnomer: changes coord mode (actual coordinates) AND/OR draw mode (viewport only) */ static void window_change_coord_mode_cb ( GtkAction *old_a, GtkAction *a, VikWindow *vw ) { VikViewportDrawMode drawmode; if (!strcmp(gtk_action_get_name(a), "ModeUTM")) { drawmode = VIK_VIEWPORT_DRAWMODE_UTM; } else if (!strcmp(gtk_action_get_name(a), "ModeLatLon")) { drawmode = VIK_VIEWPORT_DRAWMODE_LATLON; } else if (!strcmp(gtk_action_get_name(a), "ModeExpedia")) { drawmode = VIK_VIEWPORT_DRAWMODE_EXPEDIA; } else if (!strcmp(gtk_action_get_name(a), "ModeMercator")) { drawmode = VIK_VIEWPORT_DRAWMODE_MERCATOR; } else { g_critical("Houston, we've had a problem."); return; } if ( !vw->only_updating_coord_mode_ui ) { VikViewportDrawMode olddrawmode = vik_viewport_get_drawmode ( vw->viking_vvp ); if ( olddrawmode != drawmode ) { /* this takes care of coord mode too */ vik_viewport_set_drawmode ( vw->viking_vvp, drawmode ); if ( drawmode == VIK_VIEWPORT_DRAWMODE_UTM ) { vik_layers_panel_change_coord_mode ( vw->viking_vlp, VIK_COORD_UTM ); } else if ( olddrawmode == VIK_VIEWPORT_DRAWMODE_UTM ) { vik_layers_panel_change_coord_mode ( vw->viking_vlp, VIK_COORD_LATLON ); } draw_update ( vw ); } } } static void set_draw_scale ( GtkAction *a, VikWindow *vw ) { GtkWidget *check_box = gtk_ui_manager_get_widget ( vw->uim, "/ui/MainMenu/View/SetShow/ShowScale" ); g_assert(check_box); gboolean state = gtk_check_menu_item_get_active ( GTK_CHECK_MENU_ITEM(check_box)); vik_viewport_set_draw_scale ( vw->viking_vvp, state ); draw_update ( vw ); } static void set_draw_centermark ( GtkAction *a, VikWindow *vw ) { GtkWidget *check_box = gtk_ui_manager_get_widget ( vw->uim, "/ui/MainMenu/View/SetShow/ShowCenterMark" ); g_assert(check_box); gboolean state = gtk_check_menu_item_get_active ( GTK_CHECK_MENU_ITEM(check_box)); vik_viewport_set_draw_centermark ( vw->viking_vvp, state ); draw_update ( vw ); } static void set_draw_highlight ( GtkAction *a, VikWindow *vw ) { GtkWidget *check_box = gtk_ui_manager_get_widget ( vw->uim, "/ui/MainMenu/View/SetShow/ShowHighlight" ); g_assert(check_box); gboolean state = gtk_check_menu_item_get_active ( GTK_CHECK_MENU_ITEM(check_box)); vik_viewport_set_draw_highlight ( vw->viking_vvp, state ); draw_update ( vw ); } static void set_bg_color ( GtkAction *a, VikWindow *vw ) { GtkWidget *colorsd = gtk_color_selection_dialog_new ( _("Choose a background color") ); GdkColor *color = vik_viewport_get_background_gdkcolor ( vw->viking_vvp ); gtk_color_selection_set_previous_color ( GTK_COLOR_SELECTION(GTK_COLOR_SELECTION_DIALOG(colorsd)->colorsel), color ); gtk_color_selection_set_current_color ( GTK_COLOR_SELECTION(GTK_COLOR_SELECTION_DIALOG(colorsd)->colorsel), color ); if ( gtk_dialog_run ( GTK_DIALOG(colorsd) ) == GTK_RESPONSE_OK ) { gtk_color_selection_get_current_color ( GTK_COLOR_SELECTION(GTK_COLOR_SELECTION_DIALOG(colorsd)->colorsel), color ); vik_viewport_set_background_gdkcolor ( vw->viking_vvp, color ); draw_update ( vw ); } g_free ( color ); gtk_widget_destroy ( colorsd ); } static void set_highlight_color ( GtkAction *a, VikWindow *vw ) { GtkWidget *colorsd = gtk_color_selection_dialog_new ( _("Choose a track highlight color") ); GdkColor *color = vik_viewport_get_highlight_gdkcolor ( vw->viking_vvp ); gtk_color_selection_set_previous_color ( GTK_COLOR_SELECTION(GTK_COLOR_SELECTION_DIALOG(colorsd)->colorsel), color ); gtk_color_selection_set_current_color ( GTK_COLOR_SELECTION(GTK_COLOR_SELECTION_DIALOG(colorsd)->colorsel), color ); if ( gtk_dialog_run ( GTK_DIALOG(colorsd) ) == GTK_RESPONSE_OK ) { gtk_color_selection_get_current_color ( GTK_COLOR_SELECTION(GTK_COLOR_SELECTION_DIALOG(colorsd)->colorsel), color ); vik_viewport_set_highlight_gdkcolor ( vw->viking_vvp, color ); draw_update ( vw ); } g_free ( color ); gtk_widget_destroy ( colorsd ); } /*********************************************************************************************** ** GUI Creation ***********************************************************************************************/ static GtkActionEntry entries[] = { { "File", NULL, N_("_File"), 0, 0, 0 }, { "Edit", NULL, N_("_Edit"), 0, 0, 0 }, { "View", NULL, N_("_View"), 0, 0, 0 }, { "SetShow", NULL, N_("_Show"), 0, 0, 0 }, { "SetZoom", NULL, N_("_Zoom"), 0, 0, 0 }, { "SetPan", NULL, N_("_Pan"), 0, 0, 0 }, { "Layers", NULL, N_("_Layers"), 0, 0, 0 }, { "Tools", NULL, N_("_Tools"), 0, 0, 0 }, { "Exttools", NULL, N_("_Webtools"), 0, 0, 0 }, { "Help", NULL, N_("_Help"), 0, 0, 0 }, { "New", GTK_STOCK_NEW, N_("_New"), "N", N_("New file"), (GCallback)newwindow_cb }, { "Open", GTK_STOCK_OPEN, N_("_Open..."), "O", N_("Open a file"), (GCallback)load_file }, { "OpenRecentFile", NULL, N_("Open _Recent File"), NULL, NULL, (GCallback)NULL }, { "Append", GTK_STOCK_ADD, N_("Append _File..."), NULL, N_("Append data from a different file"), (GCallback)load_file }, { "Acquire", GTK_STOCK_GO_DOWN, N_("A_cquire"), NULL, NULL, (GCallback)NULL }, { "AcquireGPS", NULL, N_("From _GPS..."), NULL, N_("Transfer data from a GPS device"), (GCallback)acquire_from_gps }, { "AcquireGPSBabel", NULL, N_("Import File With GPS_Babel..."), NULL, N_("Import file via GPSBabel converter"), (GCallback)acquire_from_file }, #ifdef VIK_CONFIG_GOOGLE { "AcquireGoogle", NULL, N_("Google _Directions..."), NULL, N_("Get driving directions from Google"), (GCallback)acquire_from_google }, #endif #ifdef VIK_CONFIG_OPENSTREETMAP { "AcquireOSM", NULL, N_("_OSM Traces..."), NULL, N_("Get traces from OpenStreetMap"), (GCallback)acquire_from_osm }, { "AcquireMyOSM", NULL, N_("_My OSM Traces..."), NULL, N_("Get Your Own Traces from OpenStreetMap"), (GCallback)acquire_from_my_osm }, #endif #ifdef VIK_CONFIG_GEOCACHES { "AcquireGC", NULL, N_("Geo_caches..."), NULL, N_("Get Geocaches from geocaching.com"), (GCallback)acquire_from_gc }, #endif #ifdef VIK_CONFIG_GEOTAG { "AcquireGeotag", NULL, N_("From Geotagged _Images..."), NULL, N_("Create waypoints from geotagged images"), (GCallback)acquire_from_geotag }, #endif #ifdef VIK_CONFIG_GEONAMES { "AcquireWikipedia", NULL, N_("From _Wikipedia Waypoints"), NULL, N_("Create waypoints from Wikipedia items in the current view"), (GCallback)acquire_from_wikipedia }, #endif { "Save", GTK_STOCK_SAVE, N_("_Save"), "S", N_("Save the file"), (GCallback)save_file }, { "SaveAs", GTK_STOCK_SAVE_AS, N_("Save _As..."), NULL, N_("Save the file under different name"), (GCallback)save_file_as }, { "GenImg", GTK_STOCK_CLEAR, N_("_Generate Image File..."), NULL, N_("Save a snapshot of the workspace into a file"), (GCallback)draw_to_image_file_cb }, { "GenImgDir", GTK_STOCK_DND_MULTIPLE, N_("Generate _Directory of Images..."), NULL, N_("FIXME:IMGDIR"), (GCallback)draw_to_image_dir_cb }, #if GTK_CHECK_VERSION(2,10,0) { "Print", GTK_STOCK_PRINT, N_("_Print..."), NULL, N_("Print maps"), (GCallback)print_cb }, #endif { "Exit", GTK_STOCK_QUIT, N_("E_xit"), "W", N_("Exit the program"), (GCallback)window_close }, { "SaveExit", GTK_STOCK_QUIT, N_("Save and Exit"), NULL, N_("Save and Exit the program"), (GCallback)save_file_and_exit }, { "GotoDefaultLocation", GTK_STOCK_HOME, N_("Go to the _Default Location"), NULL, N_("Go to the default location"), (GCallback)goto_default_location }, { "GotoSearch", GTK_STOCK_JUMP_TO, N_("Go to _Location..."), NULL, N_("Go to address/place using text search"), (GCallback)goto_address }, { "GotoLL", GTK_STOCK_JUMP_TO, N_("_Go to Lat/Lon..."), NULL, N_("Go to arbitrary lat/lon coordinate"), (GCallback)draw_goto_cb }, { "GotoUTM", GTK_STOCK_JUMP_TO, N_("Go to UTM..."), NULL, N_("Go to arbitrary UTM coordinate"), (GCallback)draw_goto_cb }, { "Refresh", GTK_STOCK_REFRESH, N_("_Refresh"), "F5", N_("Refresh any maps displayed"), (GCallback)draw_refresh_cb }, { "SetHLColor",GTK_STOCK_SELECT_COLOR, N_("Set _Highlight Color..."), NULL, NULL, (GCallback)set_highlight_color }, { "SetBGColor",GTK_STOCK_SELECT_COLOR, N_("Set Bac_kground Color..."), NULL, NULL, (GCallback)set_bg_color }, { "ZoomIn", GTK_STOCK_ZOOM_IN, N_("Zoom _In"), "plus", NULL, (GCallback)draw_zoom_cb }, { "ZoomOut", GTK_STOCK_ZOOM_OUT, N_("Zoom _Out"), "minus", NULL, (GCallback)draw_zoom_cb }, { "ZoomTo", GTK_STOCK_ZOOM_FIT, N_("Zoom _To..."), "Z", NULL, (GCallback)zoom_to_cb }, { "PanNorth", NULL, N_("Pan _North"), "Up", NULL, (GCallback)draw_pan_cb }, { "PanEast", NULL, N_("Pan _East"), "Right", NULL, (GCallback)draw_pan_cb }, { "PanSouth", NULL, N_("Pan _South"), "Down", NULL, (GCallback)draw_pan_cb }, { "PanWest", NULL, N_("Pan _West"), "Left", NULL, (GCallback)draw_pan_cb }, { "BGJobs", GTK_STOCK_EXECUTE, N_("Background _Jobs"), NULL, NULL, (GCallback)a_background_show_window }, { "Cut", GTK_STOCK_CUT, N_("Cu_t"), NULL, NULL, (GCallback)menu_cut_layer_cb }, { "Copy", GTK_STOCK_COPY, N_("_Copy"), NULL, NULL, (GCallback)menu_copy_layer_cb }, { "Paste", GTK_STOCK_PASTE, N_("_Paste"), NULL, NULL, (GCallback)menu_paste_layer_cb }, { "Delete", GTK_STOCK_DELETE, N_("_Delete"), NULL, NULL, (GCallback)menu_delete_layer_cb }, { "DeleteAll", NULL, N_("Delete All"), NULL, NULL, (GCallback)clear_cb }, { "MapCacheFlush",NULL, N_("_Flush Map Cache"), NULL, NULL, (GCallback)mapcache_flush_cb }, { "SetDefaultLocation", GTK_STOCK_GO_FORWARD, N_("_Set the Default Location"), NULL, N_("Set the Default Location to the current position"),(GCallback)default_location_cb }, { "Preferences",GTK_STOCK_PREFERENCES, N_("_Preferences"), NULL, NULL, (GCallback)preferences_cb }, { "Properties",GTK_STOCK_PROPERTIES, N_("_Properties"), NULL, NULL, (GCallback)menu_properties_cb }, { "HelpEntry", GTK_STOCK_HELP, N_("_Help"), "F1", NULL, (GCallback)help_help_cb }, { "About", GTK_STOCK_ABOUT, N_("_About"), NULL, NULL, (GCallback)help_about_cb }, }; /* Radio items */ /* FIXME use VIEWPORT_DRAWMODE values */ static GtkRadioActionEntry mode_entries[] = { { "ModeUTM", NULL, N_("_UTM Mode"), "u", NULL, 0 }, { "ModeExpedia", NULL, N_("_Expedia Mode"), "e", NULL, 1 }, { "ModeMercator", NULL, N_("_Mercator Mode"), "m", NULL, 4 }, { "ModeLatLon", NULL, N_("Lat_/Lon Mode"), "l", NULL, 5 }, }; static GtkToggleActionEntry toggle_entries[] = { { "ShowScale", NULL, N_("Show _Scale"), "F5", N_("Show Scale"), (GCallback)set_draw_scale, TRUE }, { "ShowCenterMark", NULL, N_("Show _Center Mark"), "F6", N_("Show Center Mark"), (GCallback)set_draw_centermark, TRUE }, { "ShowHighlight", GTK_STOCK_UNDERLINE, N_("Show _Highlight"), "F7", N_("Show Highlight"), (GCallback)set_draw_highlight, TRUE }, { "FullScreen", GTK_STOCK_FULLSCREEN, N_("_Full Screen"), "F11", N_("Activate full screen mode"), (GCallback)full_screen_cb, FALSE }, { "ViewSidePanel", GTK_STOCK_INDEX, N_("Show Side _Panel"), "F9", N_("Show Side Panel"), (GCallback)view_side_panel_cb, TRUE }, { "ViewStatusBar", NULL, N_("Show Status_bar"), "F12", N_("Show Statusbar"), (GCallback)view_statusbar_cb, TRUE }, { "ViewToolbar", NULL, N_("Show _Toolbar"), "F3", N_("Show Toolbar"), (GCallback)view_toolbar_cb, TRUE }, { "ViewMainMenu", NULL, N_("Show _Menu"), "F4", N_("Show Menu"), (GCallback)view_main_menu_cb, TRUE }, }; #include "menu.xml.h" static void window_create_ui( VikWindow *window ) { GtkUIManager *uim; GtkActionGroup *action_group; GtkAccelGroup *accel_group; GError *error; guint i, j, mid; GtkIconFactory *icon_factory; GtkIconSet *icon_set; GtkRadioActionEntry *tools = NULL, *radio; guint ntools; uim = gtk_ui_manager_new (); window->uim = uim; toolbox_add_tool(window->vt, &ruler_tool, TOOL_LAYER_TYPE_NONE); toolbox_add_tool(window->vt, &zoom_tool, TOOL_LAYER_TYPE_NONE); toolbox_add_tool(window->vt, &pan_tool, TOOL_LAYER_TYPE_NONE); toolbox_add_tool(window->vt, &select_tool, TOOL_LAYER_TYPE_NONE); error = NULL; if (!(mid = gtk_ui_manager_add_ui_from_string (uim, menu_xml, -1, &error))) { g_error_free (error); exit (1); } action_group = gtk_action_group_new ("MenuActions"); gtk_action_group_set_translation_domain(action_group, PACKAGE_NAME); gtk_action_group_add_actions (action_group, entries, G_N_ELEMENTS (entries), window); gtk_action_group_add_toggle_actions (action_group, toggle_entries, G_N_ELEMENTS (toggle_entries), window); gtk_action_group_add_radio_actions (action_group, mode_entries, G_N_ELEMENTS (mode_entries), 4, (GCallback)window_change_coord_mode_cb, window); icon_factory = gtk_icon_factory_new (); gtk_icon_factory_add_default (icon_factory); register_vik_icons(icon_factory); // Copy the tool RadioActionEntries out of the main Window structure into an extending array 'tools' // so that it can be applied to the UI in one action group add function call below ntools = 0; for (i=0; ivt->n_tools; i++) { tools = g_renew(GtkRadioActionEntry, tools, ntools+1); radio = &tools[ntools]; ntools++; *radio = window->vt->tools[i].ti.radioActionEntry; radio->value = ntools; } for (i=0; iname, vik_layer_get_interface(i)->name, GTK_UI_MANAGER_MENUITEM, FALSE); icon_set = gtk_icon_set_new_from_pixbuf (gdk_pixbuf_from_pixdata (vik_layer_get_interface(i)->icon, FALSE, NULL )); gtk_icon_factory_add (icon_factory, vik_layer_get_interface(i)->name, icon_set); gtk_icon_set_unref (icon_set); action.name = vik_layer_get_interface(i)->name; action.stock_id = vik_layer_get_interface(i)->name; action.label = g_strdup_printf( _("New _%s Layer"), vik_layer_get_interface(i)->name); action.accelerator = vik_layer_get_interface(i)->accelerator; action.tooltip = NULL; action.callback = (GCallback)menu_addlayer_cb; gtk_action_group_add_actions(action_group, &action, 1, window); if ( vik_layer_get_interface(i)->tools_count ) { gtk_ui_manager_add_ui(uim, mid, "/ui/MainMenu/Tools/", vik_layer_get_interface(i)->name, NULL, GTK_UI_MANAGER_SEPARATOR, FALSE); gtk_ui_manager_add_ui(uim, mid, "/ui/MainToolbar/ToolItems/", vik_layer_get_interface(i)->name, NULL, GTK_UI_MANAGER_SEPARATOR, FALSE); } // Further tool copying for to apply to the UI, also apply menu UI setup for ( j = 0; j < vik_layer_get_interface(i)->tools_count; j++ ) { tools = g_renew(GtkRadioActionEntry, tools, ntools+1); radio = &tools[ntools]; ntools++; gtk_ui_manager_add_ui(uim, mid, "/ui/MainMenu/Tools", vik_layer_get_interface(i)->tools[j].radioActionEntry.label, vik_layer_get_interface(i)->tools[j].radioActionEntry.name, GTK_UI_MANAGER_MENUITEM, FALSE); gtk_ui_manager_add_ui(uim, mid, "/ui/MainToolbar/ToolItems", vik_layer_get_interface(i)->tools[j].radioActionEntry.label, vik_layer_get_interface(i)->tools[j].radioActionEntry.name, GTK_UI_MANAGER_TOOLITEM, FALSE); toolbox_add_tool(window->vt, &(vik_layer_get_interface(i)->tools[j]), i); *radio = vik_layer_get_interface(i)->tools[j].radioActionEntry; // Overwrite with actual number to use radio->value = ntools; } } g_object_unref (icon_factory); gtk_action_group_add_radio_actions(action_group, tools, ntools, 0, (GCallback)menu_tool_cb, window); g_free(tools); gtk_ui_manager_insert_action_group (uim, action_group, 0); for (i=0; itools_count; j++ ) { GtkAction *action = gtk_action_group_get_action(action_group, vik_layer_get_interface(i)->tools[j].radioActionEntry.name); g_object_set(action, "sensitive", FALSE, NULL); } } window->action_group = action_group; accel_group = gtk_ui_manager_get_accel_group (uim); gtk_window_add_accel_group (GTK_WINDOW (window), accel_group); gtk_ui_manager_ensure_update (uim); setup_recent_files(window); } // TODO - add method to add tool icons defined from outside this file // and remove the reverse dependency on icon definition from this file static struct { const GdkPixdata *data; gchar *stock_id; } stock_icons[] = { { &mover_22_pixbuf, "vik-icon-pan" }, { &zoom_18_pixbuf, "vik-icon-zoom" }, { &ruler_18_pixbuf, "vik-icon-ruler" }, { &select_18_pixbuf, "vik-icon-select" }, { &vik_new_route_18_pixbuf, "vik-icon-Create Route" }, { &route_finder_18_pixbuf, "vik-icon-Route Finder" }, { &demdl_18_pixbuf, "vik-icon-DEM Download" }, { &showpic_18_pixbuf, "vik-icon-Show Picture" }, { &addtr_18_pixbuf, "vik-icon-Create Track" }, { &edtr_18_pixbuf, "vik-icon-Edit Trackpoint" }, { &addwp_18_pixbuf, "vik-icon-Create Waypoint" }, { &edwp_18_pixbuf, "vik-icon-Edit Waypoint" }, { &geozoom_18_pixbuf, "vik-icon-Georef Zoom Tool" }, { &geomove_18_pixbuf, "vik-icon-Georef Move Map" }, { &mapdl_18_pixbuf, "vik-icon-Maps Download" }, }; static gint n_stock_icons = G_N_ELEMENTS (stock_icons); static void register_vik_icons (GtkIconFactory *icon_factory) { GtkIconSet *icon_set; gint i; for (i = 0; i < n_stock_icons; i++) { icon_set = gtk_icon_set_new_from_pixbuf (gdk_pixbuf_from_pixdata ( stock_icons[i].data, FALSE, NULL )); gtk_icon_factory_add (icon_factory, stock_icons[i].stock_id, icon_set); gtk_icon_set_unref (icon_set); } } gpointer vik_window_get_selected_trw_layer ( VikWindow *vw ) { return vw->selected_vtl; } void vik_window_set_selected_trw_layer ( VikWindow *vw, gpointer vtl ) { vw->selected_vtl = vtl; vw->containing_vtl = vtl; /* Clear others */ vw->selected_track = NULL; vw->selected_tracks = NULL; vw->selected_waypoint = NULL; vw->selected_waypoints = NULL; // Set highlight thickness vik_viewport_set_highlight_thickness ( vw->viking_vvp, vik_trw_layer_get_property_tracks_line_thickness (vw->containing_vtl) ); } GHashTable *vik_window_get_selected_tracks ( VikWindow *vw ) { return vw->selected_tracks; } void vik_window_set_selected_tracks ( VikWindow *vw, GHashTable *ght, gpointer vtl ) { vw->selected_tracks = ght; vw->containing_vtl = vtl; /* Clear others */ vw->selected_vtl = NULL; vw->selected_track = NULL; vw->selected_waypoint = NULL; vw->selected_waypoints = NULL; // Set highlight thickness vik_viewport_set_highlight_thickness ( vw->viking_vvp, vik_trw_layer_get_property_tracks_line_thickness (vw->containing_vtl) ); } gpointer vik_window_get_selected_track ( VikWindow *vw ) { return vw->selected_track; } void vik_window_set_selected_track ( VikWindow *vw, gpointer *vt, gpointer vtl ) { vw->selected_track = vt; vw->containing_vtl = vtl; /* Clear others */ vw->selected_vtl = NULL; vw->selected_tracks = NULL; vw->selected_waypoint = NULL; vw->selected_waypoints = NULL; // Set highlight thickness vik_viewport_set_highlight_thickness ( vw->viking_vvp, vik_trw_layer_get_property_tracks_line_thickness (vw->containing_vtl) ); } GHashTable *vik_window_get_selected_waypoints ( VikWindow *vw ) { return vw->selected_waypoints; } void vik_window_set_selected_waypoints ( VikWindow *vw, GHashTable *ght, gpointer vtl ) { vw->selected_waypoints = ght; vw->containing_vtl = vtl; /* Clear others */ vw->selected_vtl = NULL; vw->selected_track = NULL; vw->selected_tracks = NULL; vw->selected_waypoint = NULL; } gpointer vik_window_get_selected_waypoint ( VikWindow *vw ) { return vw->selected_waypoint; } void vik_window_set_selected_waypoint ( VikWindow *vw, gpointer *vwp, gpointer vtl ) { vw->selected_waypoint = vwp; vw->containing_vtl = vtl; /* Clear others */ vw->selected_vtl = NULL; vw->selected_track = NULL; vw->selected_tracks = NULL; vw->selected_waypoints = NULL; } gboolean vik_window_clear_highlight ( VikWindow *vw ) { gboolean need_redraw = FALSE; if ( vw->selected_vtl != NULL ) { vw->selected_vtl = NULL; need_redraw = TRUE; } if ( vw->selected_track != NULL ) { vw->selected_track = NULL; need_redraw = TRUE; } if ( vw->selected_tracks != NULL ) { vw->selected_tracks = NULL; need_redraw = TRUE; } if ( vw->selected_waypoint != NULL ) { vw->selected_waypoint = NULL; need_redraw = TRUE; } if ( vw->selected_waypoints != NULL ) { vw->selected_waypoints = NULL; need_redraw = TRUE; } return need_redraw; } GThread *vik_window_get_thread ( VikWindow *vw ) { return vw->thread; } viking-1.4.2/src/babel.c0000644000175000017500000004255112175546146011750 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * Copyright (C) 2006, Quy Tonthat * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ /** * SECTION:babel * @short_description: running external programs and redirecting to TRWLayers. * * GPSBabel may not be necessary for everything -- for instance, * use a_babel_convert_from_shellcommand() with input_file_type == %NULL * for an external program that outputs GPX. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "viking.h" #include "gpx.h" #include "babel.h" #include #ifdef HAVE_UNISTD_H #include #endif #include #include #include /* TODO in the future we could have support for other shells (change command strings), or not use a shell at all */ #define BASH_LOCATION "/bin/bash" /** * Path to gpsbabel */ static gchar *gpsbabel_loc = NULL; /** * Path to unbuffer */ static gchar *unbuffer_loc = NULL; /** * List of file formats supported by gpsbabel. */ GList *a_babel_file_list; /** * List of device supported by gpsbabel. */ GList *a_babel_device_list; /** * a_babel_convert: * @vt: The TRW layer to modify. All data will be deleted, and replaced by what gpsbabel outputs. * @babelargs: A string containing gpsbabel command line filter options. No file types or names should * be specified. * @cb: A callback function. * @user_data: passed along to cb * @not_used: Must use NULL * * This function modifies data in a trw layer using gpsbabel filters. This routine is synchronous; * that is, it will block the calling program until the conversion is done. To avoid blocking, call * this routine from a worker thread. * * Returns: %TRUE on success */ gboolean a_babel_convert( VikTrwLayer *vt, const char *babelargs, BabelStatusFunc cb, gpointer user_data, gpointer not_used ) { int fd_src; FILE *f; gchar *name_src = NULL; gboolean ret = FALSE; gchar *bargs = g_strconcat(babelargs, " -i gpx", NULL); if ((fd_src = g_file_open_tmp("tmp-viking.XXXXXX", &name_src, NULL)) >= 0) { g_debug ("%s: temporary file: %s", __FUNCTION__, name_src); f = fdopen(fd_src, "w"); a_gpx_write_file(vt, f, NULL); fclose(f); f = NULL; ret = a_babel_convert_from ( vt, bargs, name_src, cb, user_data, not_used ); g_remove(name_src); g_free(name_src); } g_free(bargs); return ret; } /** * Perform any cleanup actions once GPSBabel has completed running */ static void babel_watch ( GPid pid, gint status, gpointer user_data ) { g_spawn_close_pid ( pid ); } /** * babel_general_convert: * @args: The command line arguments passed to GPSBabel * @cb: callback that is run for each line of GPSBabel output and at completion of the run * callback may be NULL * @user_data: passed along to cb * * The function to actually invoke the GPSBabel external command * * Returns: %TRUE on successful invocation of GPSBabel command */ static gboolean babel_general_convert( BabelStatusFunc cb, gchar **args, gpointer user_data ) { gboolean ret = FALSE; GPid pid; GError *error = NULL; gint babel_stdout; if (!g_spawn_async_with_pipes (NULL, args, NULL, G_SPAWN_DO_NOT_REAP_CHILD, NULL, NULL, &pid, NULL, &babel_stdout, NULL, &error)) { g_warning ("Async command failed: %s", error->message); g_error_free(error); ret = FALSE; } else { gchar line[512]; FILE *diag; diag = fdopen(babel_stdout, "r"); setvbuf(diag, NULL, _IONBF, 0); while (fgets(line, sizeof(line), diag)) { if ( cb ) cb(BABEL_DIAG_OUTPUT, line, user_data); } if ( cb ) cb(BABEL_DONE, NULL, user_data); fclose(diag); diag = NULL; g_child_watch_add ( pid, (GChildWatchFunc) babel_watch, NULL ); ret = TRUE; } return ret; } /** * babel_general_convert_from: * @vtl: The TrackWaypoint Layer to save the data into * If it is null it signifies that no data is to be processed, * however the gpsbabel command is still ran as it can be for non-data related options eg: * for use with the power off command - 'command_off' * @cb: callback that is run upon new data from STDOUT (?) * (TODO: STDERR would be nice since we usually redirect STDOUT) * @user_data: passed along to cb * * Runs args[0] with the arguments and uses the GPX module * to import the GPX data into layer vt. Assumes that upon * running the command, the data will appear in the (usually * temporary) file name_dst. * * Returns: %TRUE on success */ static gboolean babel_general_convert_from( VikTrwLayer *vt, BabelStatusFunc cb, gchar **args, const gchar *name_dst, gpointer user_data ) { gboolean ret = FALSE; FILE *f = NULL; if (babel_general_convert(cb, args, user_data)) { /* No data actually required but still need to have run gpsbabel anyway - eg using the device power command_off */ if ( vt == NULL ) return TRUE; f = g_fopen(name_dst, "r"); if (f) { ret = a_gpx_read_file ( vt, f ); fclose(f); f = NULL; } } return ret; } /** * a_babel_convert_from: * @vt: The TRW layer to place data into. Duplicate items will be overwritten. * @babelargs: A string containing gpsbabel command line options. In addition to any filters, this string * must include the input file type (-i) option. * @cb: Optional callback function. Same usage as in a_babel_convert(). * @user_data: passed along to cb * @not_used: Must use NULL * * Loads data into a trw layer from a file, using gpsbabel. This routine is synchronous; * that is, it will block the calling program until the conversion is done. To avoid blocking, call * this routine from a worker thread. * * Returns: %TRUE on success */ gboolean a_babel_convert_from( VikTrwLayer *vt, const char *babelargs, const char *from, BabelStatusFunc cb, gpointer user_data, gpointer not_used ) { int i,j; int fd_dst; gchar *name_dst = NULL; gboolean ret = FALSE; gchar *args[64]; if ((fd_dst = g_file_open_tmp("tmp-viking.XXXXXX", &name_dst, NULL)) >= 0) { g_debug ("%s: temporary file: %s", __FUNCTION__, name_dst); close(fd_dst); if (gpsbabel_loc ) { gchar **sub_args = g_strsplit(babelargs, " ", 0); i = 0; if (unbuffer_loc) args[i++] = unbuffer_loc; args[i++] = gpsbabel_loc; for (j = 0; sub_args[j]; j++) { /* some version of gpsbabel can not take extra blank arg */ if (sub_args[j][0] != '\0') args[i++] = sub_args[j]; } args[i++] = "-o"; args[i++] = "gpx"; args[i++] = "-f"; args[i++] = (char *)from; args[i++] = "-F"; args[i++] = name_dst; args[i] = NULL; ret = babel_general_convert_from ( vt, cb, args, name_dst, user_data ); g_strfreev(sub_args); } else g_critical("gpsbabel not found in PATH"); g_remove(name_dst); g_free(name_dst); } return ret; } /** * a_babel_convert_from_shellcommand: * @vt: The #VikTrwLayer where to insert the collected data * @input_cmd: the command to run * @cb: Optional callback function. Same usage as in a_babel_convert(). * @user_data: passed along to cb * @not_used: Must use NULL * * Runs the input command in a shell (bash) and optionally uses GPSBabel to convert from input_file_type. * If input_file_type is %NULL, doesn't use GPSBabel. Input must be GPX (or Geocaching *.loc) * * Uses babel_general_convert_from() to actually run the command. This function * prepares the command and temporary file, and sets up the arguments for bash. */ gboolean a_babel_convert_from_shellcommand ( VikTrwLayer *vt, const char *input_cmd, const char *input_file_type, BabelStatusFunc cb, gpointer user_data, gpointer not_used ) { int fd_dst; gchar *name_dst = NULL; gboolean ret = FALSE; gchar **args; if ((fd_dst = g_file_open_tmp("tmp-viking.XXXXXX", &name_dst, NULL)) >= 0) { g_debug ("%s: temporary file: %s", __FUNCTION__, name_dst); gchar *shell_command; if ( input_file_type ) shell_command = g_strdup_printf("%s | %s -i %s -f - -o gpx -F %s", input_cmd, gpsbabel_loc, input_file_type, name_dst); else shell_command = g_strdup_printf("%s > %s", input_cmd, name_dst); g_debug("%s: %s", __FUNCTION__, shell_command); close(fd_dst); args = g_malloc(sizeof(gchar *)*4); args[0] = BASH_LOCATION; args[1] = "-c"; args[2] = shell_command; args[3] = NULL; ret = babel_general_convert_from ( vt, cb, args, name_dst, user_data ); g_free ( args ); g_free ( shell_command ); g_remove(name_dst); g_free(name_dst); } return ret; } /** * a_babel_convert_from_url: * @vt: The #VikTrwLayer where to insert the collected data * @url: the URL to fetch * @cb: Optional callback function. Same usage as in a_babel_convert(). * @user_data: passed along to cb * @options: download options. Maybe NULL. * * Download the file pointed by the URL and optionally uses GPSBabel to convert from input_file_type. * If input_file_type is %NULL, doesn't use GPSBabel. Input must be GPX. * * Returns: %TRUE on successful invocation of GPSBabel or read of the GPX * */ gboolean a_babel_convert_from_url ( VikTrwLayer *vt, const char *url, const char *input_type, BabelStatusFunc cb, gpointer user_data, DownloadMapOptions *options ) { // If no download options specified, use defaults: DownloadMapOptions myoptions = { FALSE, FALSE, NULL, 2, NULL, NULL }; if ( options ) myoptions = *options; gint fd_src; int fetch_ret; gboolean ret = FALSE; gchar *name_src = NULL; gchar *babelargs = NULL; g_debug("%s: input_type=%s url=%s", __FUNCTION__, input_type, url); if ((fd_src = g_file_open_tmp("tmp-viking.XXXXXX", &name_src, NULL)) >= 0) { g_debug ("%s: temporary file: %s", __FUNCTION__, name_src); close(fd_src); g_remove(name_src); fetch_ret = a_http_download_get_url(url, "", name_src, &myoptions, NULL); if (fetch_ret == 0) { if (input_type != NULL) { babelargs = g_strdup_printf(" -i %s", input_type); ret = a_babel_convert_from( vt, babelargs, name_src, NULL, NULL, NULL ); } else { /* Process directly the retrieved file */ g_debug("%s: directly read GPX file %s", __FUNCTION__, name_src); FILE *f = g_fopen(name_src, "r"); if (f) { ret = a_gpx_read_file ( vt, f ); fclose(f); f = NULL; } } } g_remove(name_src); g_free(babelargs); g_free(name_src); } return ret; } static gboolean babel_general_convert_to( VikTrwLayer *vt, VikTrack *trk, BabelStatusFunc cb, gchar **args, const gchar *name_src, gpointer user_data ) { // Now strips out invisible tracks and waypoints if (!a_file_export(vt, name_src, FILE_TYPE_GPX, trk, FALSE)) { g_critical("Error exporting to %s", name_src); return FALSE; } return babel_general_convert (cb, args, user_data); } /** * a_babel_convert_to: * @vt: The TRW layer from which data is taken. * @track: Operate on the individual track if specified. Use NULL when operating on a TRW layer * @babelargs: A string containing gpsbabel command line options. In addition to any filters, this string * must include the input file type (-i) option. * @to: Filename or device the data is written to. * @cb: Optional callback function. Same usage as in a_babel_convert. * @user_data: passed along to cb * * Exports data using gpsbabel. This routine is synchronous; * that is, it will block the calling program until the conversion is done. To avoid blocking, call * this routine from a worker thread. * * Returns: %TRUE on successful invocation of GPSBabel command */ gboolean a_babel_convert_to( VikTrwLayer *vt, VikTrack *track, const char *babelargs, const char *to, BabelStatusFunc cb, gpointer user_data ) { int i,j; int fd_src; gchar *name_src = NULL; gboolean ret = FALSE; gchar *args[64]; if ((fd_src = g_file_open_tmp("tmp-viking.XXXXXX", &name_src, NULL)) >= 0) { g_debug ("%s: temporary file: %s", __FUNCTION__, name_src); close(fd_src); if (gpsbabel_loc ) { gchar **sub_args = g_strsplit(babelargs, " ", 0); i = 0; if (unbuffer_loc) args[i++] = unbuffer_loc; args[i++] = gpsbabel_loc; args[i++] = "-i"; args[i++] = "gpx"; for (j = 0; sub_args[j]; j++) /* some version of gpsbabel can not take extra blank arg */ if (sub_args[j][0] != '\0') args[i++] = sub_args[j]; args[i++] = "-f"; args[i++] = name_src; args[i++] = "-F"; args[i++] = (char *)to; args[i] = NULL; ret = babel_general_convert_to ( vt, track, cb, args, name_src, user_data ); g_strfreev(sub_args); } else g_critical("gpsbabel not found in PATH"); g_remove(name_src); g_free(name_src); } return ret; } static void set_mode(BabelMode mode, gchar *smode) { mode.waypointsRead = smode[0] == 'r'; mode.waypointsWrite = smode[1] == 'w'; mode.tracksRead = smode[2] == 'r'; mode.tracksWrite = smode[3] == 'w'; mode.routesRead = smode[4] == 'r'; mode.routesWrite = smode[5] == 'w'; } /** * load_feature_parse_line: * * Load a single feature stored in the given line. */ static void load_feature_parse_line (gchar *line) { gchar **tokens = g_strsplit ( line, "\t", 0 ); if ( tokens != NULL && tokens[0] != NULL ) { if ( strcmp("serial", tokens[0]) == 0 ) { if ( tokens[1] != NULL && tokens[2] != NULL && tokens[3] != NULL && tokens[4] != NULL ) { BabelDevice *device = g_malloc ( sizeof (BabelDevice) ); set_mode (device->mode, tokens[1]); device->name = g_strdup (tokens[2]); device->label = g_strndup (tokens[4], 50); // Limit really long label text a_babel_device_list = g_list_append (a_babel_device_list, device); g_debug ("New gpsbabel device: %s", device->name); } else { g_warning ( "Unexpected gpsbabel format string: %s", line); } } else if ( strcmp("file", tokens[0]) == 0 ) { if ( tokens[1] != NULL && tokens[2] != NULL && tokens[3] != NULL && tokens[4] != NULL ) { BabelFile *file = g_malloc ( sizeof (BabelFile) ); set_mode (file->mode, tokens[1]); file->name = g_strdup (tokens[2]); file->ext = g_strdup (tokens[3]); file->label = g_strdup (tokens[4]); a_babel_file_list = g_list_append (a_babel_file_list, file); g_debug ("New gpsbabel file: %s", file->name); } else { g_warning ( "Unexpected gpsbabel format string: %s", line); } } /* else: ignore */ } else { g_warning ( "Unexpected gpsbabel format string: %s", line); } g_strfreev ( tokens ); } static void load_feature_cb (BabelProgressCode code, gpointer line, gpointer user_data) { if (line != NULL) load_feature_parse_line (line); } static gboolean load_feature () { int i; gboolean ret = FALSE; gchar *args[4]; if ( gpsbabel_loc ) { i = 0; if ( unbuffer_loc ) args[i++] = unbuffer_loc; args[i++] = gpsbabel_loc; args[i++] = "-^3"; args[i] = NULL; ret = babel_general_convert (load_feature_cb, args, NULL); } else g_critical("gpsbabel not found in PATH"); return ret; } /** * a_babel_init: * * Initialises babel module. * Mainly check existence of gpsbabel progam * and load all features available in ths version. */ void a_babel_init () { /* TODO allow to set gpsbabel path via command line */ gpsbabel_loc = g_find_program_in_path( "gpsbabel" ); if ( !gpsbabel_loc ) g_critical( "gpsbabel not found in PATH" ); // Unlikely to package unbuffer on Windows so ATM don't even bother trying // Highly unlikely unbuffer is available on a Windows system otherwise #ifndef WINDOWS unbuffer_loc = g_find_program_in_path( "unbuffer" ); if ( !unbuffer_loc ) g_warning( "unbuffer not found in PATH" ); #endif load_feature (); } /** * a_babel_uninit: * * Free resources acquired by a_babel_init. */ void a_babel_uninit () { g_free ( gpsbabel_loc ); g_free ( unbuffer_loc ); if ( a_babel_file_list ) { GList *gl; for (gl = a_babel_file_list; gl != NULL; gl = g_list_next(gl)) { BabelFile *file = gl->data; g_free ( file->name ); g_free ( file->ext ); g_free ( file->label ); g_free ( gl->data ); } g_list_free ( a_babel_file_list ); } if ( a_babel_device_list ) { GList *gl; for (gl = a_babel_device_list; gl != NULL; gl = g_list_next(gl)) { BabelDevice *device = gl->data; g_free ( device->name ); g_free ( device->label ); g_free ( gl->data ); } g_list_free ( a_babel_device_list ); } } viking-1.4.2/src/datasource_osm_my_traces.c0000644000175000017500000005630612175546146015764 00000000000000/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2012, Rob Norris * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include #include #include #include "viking.h" #include "gpx.h" #include "acquire.h" #include "osm-traces.h" #include "preferences.h" #include "curl_download.h" #include "datasource_gps.h" #include "bbox.h" /** * See http://wiki.openstreetmap.org/wiki/API_v0.6#GPS_Traces */ #define DS_OSM_TRACES_GPX_URL_FMT "api.openstreetmap.org/api/0.6/gpx/%d/data" #define DS_OSM_TRACES_GPX_FILES "api.openstreetmap.org/api/0.6/user/gpx_files" typedef struct { GtkWidget *user_entry; GtkWidget *password_entry; // NB actual user and password values are stored in oms-traces.c VikViewport *vvp; } datasource_osm_my_traces_t; static gpointer datasource_osm_my_traces_init( ); static void datasource_osm_my_traces_add_setup_widgets ( GtkWidget *dialog, VikViewport *vvp, gpointer user_data ); static void datasource_osm_my_traces_get_cmd_string ( gpointer user_data, gchar **args, gchar **extra, DownloadMapOptions *options ); static gboolean datasource_osm_my_traces_process ( VikTrwLayer *vtl, const gchar *cmd, const gchar *extra, BabelStatusFunc status_cb, acq_dialog_widgets_t *adw, DownloadMapOptions *options_unused ); static void datasource_osm_my_traces_cleanup ( gpointer data ); VikDataSourceInterface vik_datasource_osm_my_traces_interface = { N_("OSM My Traces"), N_("OSM My Traces"), VIK_DATASOURCE_MANUAL_LAYER_MANAGEMENT, // we'll do this ourselves VIK_DATASOURCE_INPUTTYPE_NONE, TRUE, TRUE, FALSE, // Don't use thread method (VikDataSourceInitFunc) datasource_osm_my_traces_init, (VikDataSourceCheckExistenceFunc) NULL, (VikDataSourceAddSetupWidgetsFunc)datasource_osm_my_traces_add_setup_widgets, (VikDataSourceGetCmdStringFunc) datasource_osm_my_traces_get_cmd_string, (VikDataSourceProcessFunc) datasource_osm_my_traces_process, (VikDataSourceProgressFunc) NULL, (VikDataSourceAddProgressWidgetsFunc) NULL, (VikDataSourceCleanupFunc) datasource_osm_my_traces_cleanup, (VikDataSourceOffFunc) NULL, NULL, 0, NULL, NULL, 0 }; static gpointer datasource_osm_my_traces_init ( ) { datasource_osm_my_traces_t *data = g_malloc(sizeof(*data)); // Reuse GPS functions // Haven't been able to get the thread method to work reliably (or get progress feedback) // So thread version is disabled ATM /* if ( vik_datasource_osm_my_traces_interface.is_thread ) { vik_datasource_osm_my_traces_interface.progress_func = datasource_gps_progress; vik_datasource_osm_my_traces_interface.add_progress_widgets_func = datasource_gps_add_progress_widgets; } */ return data; } static void datasource_osm_my_traces_add_setup_widgets ( GtkWidget *dialog, VikViewport *vvp, gpointer user_data ) { datasource_osm_my_traces_t *data = (datasource_osm_my_traces_t *)user_data; GtkWidget *user_label; GtkWidget *password_label; user_label = gtk_label_new(_("Username:")); data->user_entry = gtk_entry_new(); gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(dialog)->vbox), user_label, FALSE, FALSE, 0 ); gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(dialog)->vbox), data->user_entry, FALSE, FALSE, 0 ); gtk_widget_set_tooltip_markup ( GTK_WIDGET(data->user_entry), _("The email or username used to login to OSM") ); password_label = gtk_label_new ( _("Password:") ); data->password_entry = gtk_entry_new (); gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(dialog)->vbox), password_label, FALSE, FALSE, 0 ); gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(dialog)->vbox), data->password_entry, FALSE, FALSE, 0 ); gtk_widget_set_tooltip_markup ( GTK_WIDGET(data->password_entry), _("The password used to login to OSM") ); osm_login_widgets (data->user_entry, data->password_entry); gtk_widget_show_all ( dialog ); /* Keep reference to viewport */ data->vvp = vvp; } static void datasource_osm_my_traces_get_cmd_string ( gpointer user_data, gchar **args, gchar **extra, DownloadMapOptions *options ) { datasource_osm_my_traces_t *data = (datasource_osm_my_traces_t*) user_data; /* overwrite authentication info */ osm_set_login ( gtk_entry_get_text ( GTK_ENTRY(data->user_entry) ), gtk_entry_get_text ( GTK_ENTRY(data->password_entry) ) ); // If going to use the values passed back into the process function parameters then these need to be set. // But ATM we aren't *args = NULL; *extra = NULL; options = NULL; } typedef enum { tt_unknown = 0, tt_osm, tt_gpx_file, tt_gpx_file_desc, tt_gpx_file_tag, } xtag_type; typedef struct { xtag_type tag_type; /* enum from above for this tag */ const char *tag_name; /* xpath-ish tag name */ } xtag_mapping; typedef struct { guint id; gchar *name; gchar *vis; gchar *desc; struct LatLon ll; gboolean in_current_view; // Is the track LatLon start within the current viewport // This is useful in deciding whether to download a track or not // ATM Only used for display - may want to convert to a time_t for other usage gchar *timestamp; // user made up tags - not being used yet - would be nice to sort/select on these but display will get complicated // GList *tag_list; } gpx_meta_data_t; static gpx_meta_data_t *new_gpx_meta_data_t() { gpx_meta_data_t *ret; ret = (gpx_meta_data_t *)g_malloc(sizeof(gpx_meta_data_t)); ret->id = 0; ret->name = NULL; ret->vis = NULL; ret->desc = NULL; ret->ll.lat = 0.0; ret->ll.lon = 0.0; ret->in_current_view = FALSE; ret->timestamp = NULL; return ret; } static void free_gpx_meta_data ( gpx_meta_data_t *data, gpointer userdata ) { g_free(data->name); g_free(data->vis); g_free(data->desc); g_free(data->timestamp); } static void free_gpx_meta_data_list (GList *list) { g_list_foreach (list, (GFunc)free_gpx_meta_data, NULL); g_list_free (list); } static gpx_meta_data_t *copy_gpx_meta_data_t (gpx_meta_data_t *src) { gpx_meta_data_t *dest = new_gpx_meta_data_t(); dest->id = src->id; dest->name = g_strdup(src->name); dest->vis = g_strdup(src->vis); dest->desc = g_strdup(src->desc); dest->ll.lat = src->ll.lat; dest->ll.lon = src->ll.lon; dest->in_current_view = src->in_current_view; dest->timestamp = g_strdup(src->timestamp); return dest; } typedef struct { //GString *xpath; GString *c_cdata; xtag_type current_tag; gpx_meta_data_t *current_gpx_meta_data; GList *list_of_gpx_meta_data; } xml_data; // Same as the gpx.c function static const char *get_attr ( const char **attr, const char *key ) { while ( *attr ) { if ( strcmp(*attr,key) == 0 ) return *(attr + 1); attr += 2; } return NULL; } // ATM don't care about actual path as tags are all unique static xtag_mapping xtag_path_map[] = { { tt_osm, "osm" }, { tt_gpx_file, "gpx_file" }, { tt_gpx_file_desc, "description" }, { tt_gpx_file_tag, "tag" }, }; static xtag_type get_tag ( const char *t ) { xtag_mapping *tm; for (tm = xtag_path_map; tm->tag_type != 0; tm++) if (0 == strcmp(tm->tag_name, t)) return tm->tag_type; return tt_unknown; } static void gpx_meta_data_start ( xml_data *xd, const char *el, const char **attr ) { const gchar *tmp; gchar buf[G_ASCII_DTOSTR_BUF_SIZE]; buf[0] = '\0'; // Don't need to build a path - we can use the tag directly //g_string_append_c ( xd->xpath, '/' ); //g_string_append ( xd->xpath, el ); //xd->current_tag = get_tag ( xd->xpath->str ); xd->current_tag = get_tag ( el ); switch ( xd->current_tag ) { case tt_gpx_file: if ( xd->current_gpx_meta_data ) free_gpx_meta_data ( xd->current_gpx_meta_data, NULL ); xd->current_gpx_meta_data = new_gpx_meta_data_t(); if ( ( tmp = get_attr ( attr, "id" ) ) ) xd->current_gpx_meta_data->id = atoi ( tmp ); if ( ( tmp = get_attr ( attr, "name" ) ) ) xd->current_gpx_meta_data->name = g_strdup ( tmp ); if ( ( tmp = get_attr ( attr, "lat" ) ) ) { g_strlcpy ( buf, tmp, sizeof (buf) ); xd->current_gpx_meta_data->ll.lat = g_ascii_strtod ( buf, NULL ); } if ( ( tmp = get_attr ( attr, "lon" ) ) ) { g_strlcpy ( buf, tmp, sizeof (buf) ); xd->current_gpx_meta_data->ll.lon = g_ascii_strtod ( buf, NULL ); } if ( ( tmp = get_attr ( attr, "visibility" ) ) ) xd->current_gpx_meta_data->vis = g_strdup ( tmp ); if ( ( tmp = get_attr ( attr, "timestamp" ) ) ) xd->current_gpx_meta_data->timestamp = g_strdup ( tmp ); g_string_erase ( xd->c_cdata, 0, -1 ); // clear the cdata buffer break; case tt_gpx_file_desc: case tt_gpx_file_tag: g_string_erase ( xd->c_cdata, 0, -1 ); // clear the cdata buffer break; default: g_string_erase ( xd->c_cdata, 0, -1 ); // clear the cdata buffer break; } } static void gpx_meta_data_end ( xml_data *xd, const char *el ) { //g_string_truncate ( xd->xpath, xd->xpath->len - strlen(el) - 1 ); //switch ( xd->current_tag ) { switch ( get_tag ( el ) ) { case tt_gpx_file: { // End of the individual file metadata, thus save what we have read in to the list // Copy it so we can reference it gpx_meta_data_t *current = copy_gpx_meta_data_t ( xd->current_gpx_meta_data ); // Stick in the list xd->list_of_gpx_meta_data = g_list_prepend(xd->list_of_gpx_meta_data, current); g_string_erase ( xd->c_cdata, 0, -1 ); break; } case tt_gpx_file_desc: // Store the description: if ( xd->current_gpx_meta_data ) { // NB Limit description size as it's displayed on a single line // Hopefully this will prevent the dialog getting too wide... xd->current_gpx_meta_data->desc = g_strndup ( xd->c_cdata->str, 63 ); } g_string_erase ( xd->c_cdata, 0, -1 ); break; case tt_gpx_file_tag: // One day do something with this... g_string_erase ( xd->c_cdata, 0, -1 ); break; default: break; } } static void gpx_meta_data_cdata ( xml_data *xd, const XML_Char *s, int len ) { switch ( xd->current_tag ) { case tt_gpx_file_desc: case tt_gpx_file_tag: g_string_append_len ( xd->c_cdata, s, len ); break; default: break; // ignore cdata from other things } } static gboolean read_gpx_files_metadata_xml ( gchar *tmpname, xml_data *xd ) { FILE *ff = g_fopen (tmpname, "r"); if ( !ff ) return FALSE; XML_Parser parser = XML_ParserCreate(NULL); enum XML_Status status = XML_STATUS_ERROR; XML_SetElementHandler(parser, (XML_StartElementHandler) gpx_meta_data_start, (XML_EndElementHandler) gpx_meta_data_end); XML_SetUserData(parser, xd); XML_SetCharacterDataHandler(parser, (XML_CharacterDataHandler) gpx_meta_data_cdata); gchar buf[4096]; int done=0, len; while (!done) { len = fread(buf, 1, sizeof(buf)-7, ff); done = feof(ff) || !len; status = XML_Parse(parser, buf, len, done); } XML_ParserFree (parser); fclose ( ff ); return status != XML_STATUS_ERROR; } static GList *select_from_list (GtkWindow *parent, GList *list, const gchar *title, const gchar *msg ) { GtkTreeIter iter; GtkCellRenderer *renderer; GtkWidget *view; gchar *latlon_string; int column_runner; GtkWidget *dialog = gtk_dialog_new_with_buttons (title, parent, GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL); /* When something is selected then OK */ gtk_dialog_set_default_response ( GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT ); GtkWidget *response_w = NULL; #if GTK_CHECK_VERSION (2, 20, 0) /* Default to not apply - as initially nothing is selected! */ response_w = gtk_dialog_get_widget_for_response ( GTK_DIALOG(dialog), GTK_RESPONSE_REJECT ); #endif GtkWidget *label = gtk_label_new ( msg ); GtkTreeStore *store = gtk_tree_store_new ( 6, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN ); GList *list_runner = list; while (list_runner) { gpx_meta_data_t *gpx_meta_data = (gpx_meta_data_t *)list_runner->data; // To keep display compact three digits of precision for lat/lon should be plenty latlon_string = g_strdup_printf("(%.3f,%.3f)", gpx_meta_data->ll.lat, gpx_meta_data->ll.lon); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set ( store, &iter, 0, gpx_meta_data->name, 1, gpx_meta_data->desc, 2, gpx_meta_data->timestamp, 3, latlon_string, 4, gpx_meta_data->vis, 5, gpx_meta_data->in_current_view, -1 ); list_runner = g_list_next ( list_runner ); g_free ( latlon_string ); } view = gtk_tree_view_new(); renderer = gtk_cell_renderer_text_new(); column_runner = 0; GtkTreeViewColumn *column; column = gtk_tree_view_column_new_with_attributes ( _("Name"), renderer, "text", column_runner, NULL); gtk_tree_view_column_set_sort_column_id (column, column_runner); gtk_tree_view_append_column (GTK_TREE_VIEW (view), column); column_runner++; column = gtk_tree_view_column_new_with_attributes ( _("Description"), renderer, "text", column_runner, NULL); gtk_tree_view_column_set_sort_column_id (column, column_runner); gtk_tree_view_append_column (GTK_TREE_VIEW (view), column); column_runner++; column = gtk_tree_view_column_new_with_attributes ( _("Time"), renderer, "text", column_runner, NULL); gtk_tree_view_column_set_sort_column_id (column, column_runner); gtk_tree_view_append_column (GTK_TREE_VIEW (view), column); column_runner++; column = gtk_tree_view_column_new_with_attributes ( _("Lat/Lon"), renderer, "text", column_runner, NULL); gtk_tree_view_column_set_sort_column_id (column, column_runner); gtk_tree_view_append_column (GTK_TREE_VIEW (view), column); column_runner++; column = gtk_tree_view_column_new_with_attributes ( _("Privacy"), renderer, "text", column_runner, NULL); // AKA Visibility gtk_tree_view_column_set_sort_column_id (column, column_runner); gtk_tree_view_append_column (GTK_TREE_VIEW (view), column); GtkCellRenderer *renderer_toggle = gtk_cell_renderer_toggle_new (); g_object_set (G_OBJECT (renderer_toggle), "activatable", FALSE, NULL); // No user action - value is just for display column_runner++; column = gtk_tree_view_column_new_with_attributes ( _("Within Current View"), renderer_toggle, "active", column_runner, NULL); gtk_tree_view_column_set_sort_column_id (column, column_runner); gtk_tree_view_append_column (GTK_TREE_VIEW (view), column); gtk_tree_view_set_model(GTK_TREE_VIEW(view), GTK_TREE_MODEL(store)); gtk_tree_selection_set_mode( gtk_tree_view_get_selection(GTK_TREE_VIEW(view)), GTK_SELECTION_MULTIPLE ); g_object_unref(store); GtkWidget *scrolledwindow = gtk_scrolled_window_new ( NULL, NULL ); gtk_scrolled_window_set_policy ( GTK_SCROLLED_WINDOW(scrolledwindow), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC ); gtk_container_add ( GTK_CONTAINER(scrolledwindow), view ); gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), label, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), scrolledwindow, TRUE, TRUE, 0); // Ensure a reasonable number of items are shown, but let the width be automatically sized gtk_widget_set_size_request ( dialog, -1, 400) ; gtk_widget_show_all ( dialog ); if ( response_w ) gtk_widget_grab_focus ( response_w ); while ( gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT ) { // Possibily not the fastest method but we don't have thousands of entries to process... GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(view)); GList *selected = NULL; // because we don't store the full data in the gtk model, we have to scan & look it up if ( gtk_tree_model_get_iter_first( GTK_TREE_MODEL(store), &iter) ) { do { if ( gtk_tree_selection_iter_is_selected ( selection, &iter ) ) { // For every selected item, // compare the name from the displayed view to every gpx entry to find the gpx this selection represents gchar* name; gtk_tree_model_get (GTK_TREE_MODEL(store), &iter, 0, &name, -1 ); // I believe the name of these items to be always unique list_runner = list; while (list_runner) { if ( !strcmp ( ((gpx_meta_data_t*)list_runner->data)->name, name ) ) { gpx_meta_data_t *copied = copy_gpx_meta_data_t (list_runner->data); selected = g_list_prepend (selected, copied); break; } list_runner = g_list_next ( list_runner ); } } } while ( gtk_tree_model_iter_next ( GTK_TREE_MODEL(store), &iter ) ); } if ( selected ) { gtk_widget_destroy ( dialog ); return selected; } a_dialog_error_msg(parent, _("Nothing was selected")); } gtk_widget_destroy ( dialog ); return NULL; } static void none_found ( GtkWindow *gw ) { GtkWidget *dialog = NULL; dialog = gtk_dialog_new_with_buttons ( "", gw, 0, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL ); gtk_window_set_title(GTK_WINDOW(dialog), _("GPS Traces")); GtkWidget *search_label = gtk_label_new(_("None found!")); gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(dialog)->vbox), search_label, FALSE, FALSE, 5 ); gtk_dialog_set_default_response ( GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT ); gtk_widget_show_all(dialog); gtk_dialog_run ( GTK_DIALOG(dialog) ); gtk_widget_destroy(dialog); } /** * For each track - mark whether the start is in within the viewport */ static void set_in_current_view_property ( VikTrwLayer *vtl, datasource_osm_my_traces_t *data, GList *gl ) { gdouble min_lat, max_lat, min_lon, max_lon; /* get Viewport bounding box */ vik_viewport_get_min_max_lat_lon ( data->vvp, &min_lat, &max_lat, &min_lon, &max_lon ); LatLonBBox bbox; bbox.north = max_lat; bbox.east = max_lon; bbox.south = min_lat; bbox.west = min_lon; GList *iterator = gl; while ( iterator ) { gpx_meta_data_t* gmd = (gpx_meta_data_t*)iterator->data; // Convert point position into a 'fake' bounding box // TODO - probably should have function to see if point is within bounding box // rather than constructing this fake bounding box for the test LatLonBBox gmd_bbox; gmd_bbox.north = gmd->ll.lat; gmd_bbox.east = gmd->ll.lon; gmd_bbox.south = gmd->ll.lat; gmd_bbox.west = gmd->ll.lon; if ( BBOX_INTERSECT ( bbox, gmd_bbox ) ) gmd->in_current_view = TRUE; iterator = g_list_next ( iterator ); } } static gboolean datasource_osm_my_traces_process ( VikTrwLayer *vtl, const gchar *cmd, const gchar *extra, BabelStatusFunc status_cb, acq_dialog_widgets_t *adw, DownloadMapOptions *options_unused ) { //datasource_osm_my_traces_t *data = (datasource_osm_my_traces_t *)adw->user_data; gboolean result; gchar *user_pass = osm_get_login(); DownloadMapOptions options = { FALSE, FALSE, NULL, 2, NULL, user_pass }; // Allow a couple of redirects xml_data *xd = g_malloc ( sizeof (xml_data) ); //xd->xpath = g_string_new ( "" ); xd->c_cdata = g_string_new ( "" ); xd->current_tag = tt_unknown; xd->current_gpx_meta_data = new_gpx_meta_data_t(); xd->list_of_gpx_meta_data = NULL; gchar *tmpname = a_download_uri_to_tmp_file ( DS_OSM_TRACES_GPX_FILES, &options ); result = read_gpx_files_metadata_xml ( tmpname, xd ); // Test already downloaded metadata file: eg: //result = read_gpx_files_metadata_xml ( "/tmp/viking-download.GI47PW", xd ); if ( tmpname ) { g_remove ( tmpname ); g_free ( tmpname ); } if ( ! result ) return FALSE; if ( g_list_length ( xd->list_of_gpx_meta_data ) == 0 ) { if (!vik_datasource_osm_my_traces_interface.is_thread) none_found ( GTK_WINDOW(adw->vw) ); return FALSE; } xd->list_of_gpx_meta_data = g_list_reverse ( xd->list_of_gpx_meta_data ); set_in_current_view_property ( vtl, adw->user_data, xd->list_of_gpx_meta_data ); if (vik_datasource_osm_my_traces_interface.is_thread) gdk_threads_enter(); GList *selected = select_from_list ( GTK_WINDOW(adw->vw), xd->list_of_gpx_meta_data, "Select GPS Traces", "Select the GPS traces you want to add." ); if (vik_datasource_osm_my_traces_interface.is_thread) gdk_threads_leave(); // If passed in on an existing layer - we will create everything into that. // thus with many differing gpx's - this will combine all waypoints into this single layer! // Hence the preference is to create multiple layers // and so this creation of the layers must be managed here gboolean create_new_layer = ( !vtl ); // Only update the screen on the last layer acquired VikTrwLayer *vtl_last = vtl; gboolean got_something = FALSE; GList *selected_iterator = selected; while ( selected_iterator ) { VikTrwLayer *vtlX = vtl; if ( create_new_layer ) { // Have data but no layer - so create one vtlX = VIK_TRW_LAYER ( vik_layer_create ( VIK_LAYER_TRW, vik_window_viewport(adw->vw), NULL, FALSE ) ); if ( ((gpx_meta_data_t*)selected_iterator->data)->name ) vik_layer_rename ( VIK_LAYER ( vtlX ), ((gpx_meta_data_t*)selected_iterator->data)->name ); else vik_layer_rename ( VIK_LAYER ( vtlX ), _("My OSM Traces") ); } result = FALSE; gint gpx_id = ((gpx_meta_data_t*)selected_iterator->data)->id; if ( gpx_id ) { gchar *url = g_strdup_printf ( DS_OSM_TRACES_GPX_URL_FMT, gpx_id ); result = a_babel_convert_from_url ( vtlX, url, "gpx", status_cb, adw, &options ); // TODO investigate using a progress bar: // http://developer.gnome.org/gtk/2.24/GtkProgressBar.html got_something = got_something || result; // TODO feedback to UI to inform which traces failed if ( !result ) g_warning ( _("Unable to get trace: %s"), url ); } if ( result ) { // Can use the layer vik_aggregate_layer_add_layer ( vik_layers_panel_get_top_layer (adw->vlp), VIK_LAYER(vtlX) ); // Move to area of the track vik_layer_post_read ( VIK_LAYER(vtlX), vik_window_viewport(adw->vw), TRUE ); vik_trw_layer_auto_set_view ( vtlX, vik_window_viewport(adw->vw) ); vtl_last = vtlX; } else if ( create_new_layer ) { // Layer not needed as no data has been acquired g_object_unref ( vtlX ); } selected_iterator = g_list_next ( selected_iterator ); } // Free memory if ( xd->current_gpx_meta_data ) free_gpx_meta_data ( xd->current_gpx_meta_data, NULL ); g_free ( xd->current_gpx_meta_data ); free_gpx_meta_data_list ( xd->list_of_gpx_meta_data ); free_gpx_meta_data_list ( selected ); g_free ( xd ); g_free ( user_pass ); // Would prefer to keep the update in acquire.c, // however since we may create the layer - need to do the update here if ( got_something ) vik_layer_emit_update ( VIK_LAYER(vtl_last) ); // ATM The user is only informed if all getting *all* of the traces failed if ( selected ) result = got_something; else // Process was cancelled but need to return that it proceeded as expected result = TRUE; return result; } static void datasource_osm_my_traces_cleanup ( gpointer data ) { g_free ( data ); } viking-1.4.2/src/main.c0000644000175000017500000001342012175546146011620 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG #include "config.h" #endif /* HAVE_CONFIG */ #include "viking.h" #include "icons/icons.h" #include "mapcache.h" #include "background.h" #include "dems.h" #include "babel.h" #include "curl_download.h" #include "preferences.h" #include "globals.h" #include "vikmapslayer.h" #include "util.h" #ifdef VIK_CONFIG_GEOCACHES void a_datasource_gc_init(); #endif #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_STRING_H #include #endif #include #include #include "modules.h" /* FIXME LOCALEDIR must be configured by ./configure --localedir */ /* But something does not work actually. */ /* So, we need to redefine this variable on windows. */ #ifdef WINDOWS #undef LOCALEDIR #define LOCALEDIR "locale" #endif #ifdef HAVE_X11_XLIB_H #include "X11/Xlib.h" #endif #if GLIB_CHECK_VERSION (2, 32, 0) /* Callback to log message */ static void log_debug(const gchar *log_domain, GLogLevelFlags log_level, const gchar *message, gpointer user_data) { g_print("** (viking): DEBUG: %s\n", message); } #else /* Callback to mute log message */ static void mute_log(const gchar *log_domain, GLogLevelFlags log_level, const gchar *message, gpointer user_data) { /* Nothing to do, we just want to mute */ } #endif #if HAVE_X11_XLIB_H static int myXErrorHandler(Display *display, XErrorEvent *theEvent) { g_fprintf (stderr, _("Ignoring Xlib error: error code %d request code %d\n"), theEvent->error_code, theEvent->request_code); // No exit on X errors! // mainly to handle out of memory error when requesting large pixbuf from user request // see vikwindow.c::save_image_file () return 0; } #endif /* Options */ static GOptionEntry entries[] = { { "debug", 'd', 0, G_OPTION_ARG_NONE, &vik_debug, N_("Enable debug output"), NULL }, { "verbose", 'V', 0, G_OPTION_ARG_NONE, &vik_verbose, N_("Enable verbose output"), NULL }, { "version", 'v', 0, G_OPTION_ARG_NONE, &vik_version, N_("Show version"), NULL }, { NULL } }; int main( int argc, char *argv[] ) { VikWindow *first_window; GdkPixbuf *main_icon; gboolean dashdash_already = FALSE; int i = 0; GError *error = NULL; gboolean gui_initialized; bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); textdomain (GETTEXT_PACKAGE); g_thread_init ( NULL ); gdk_threads_init (); gui_initialized = gtk_init_with_args (&argc, &argv, "files+", entries, NULL, &error); if (!gui_initialized) { /* check if we have an error message */ if (error == NULL) { /* no error message, the GUI initialization failed */ const gchar *display_name = gdk_get_display_arg_name (); g_fprintf (stderr, "Failed to open display: %s\n", (display_name != NULL) ? display_name : " "); } else { /* yep, there's an error, so print it */ g_fprintf (stderr, "Parsing command line options failed: %s\n", error->message); g_error_free (error); g_fprintf (stderr, "Run \"%s --help\" to see the list of recognized options.\n",argv[0]); } return EXIT_FAILURE; } if (vik_version) { g_printf ("%s %s\nCopyright (c) 2003-2008 Evan Battaglia\nCopyright (c) 2008-2012 Viking's contributors\n", PACKAGE_NAME, PACKAGE_VERSION); return EXIT_SUCCESS; } #if GLIB_CHECK_VERSION (2, 32, 0) if (vik_debug) g_log_set_handler (NULL, G_LOG_LEVEL_DEBUG, log_debug, NULL); #else if (!vik_debug) g_log_set_handler (NULL, G_LOG_LEVEL_DEBUG, mute_log, NULL); #endif #if HAVE_X11_XLIB_H XSetErrorHandler(myXErrorHandler); #endif a_preferences_init (); a_vik_preferences_init (); a_download_init(); curl_download_init(); a_babel_init (); /* Init modules/plugins */ modules_init(); maps_layer_init (); a_mapcache_init (); a_background_init (); #ifdef VIK_CONFIG_GEOCACHES a_datasource_gc_init(); #endif /* Set the icon */ main_icon = gdk_pixbuf_from_pixdata(&viking_pixbuf, FALSE, NULL); gtk_window_set_default_icon(main_icon); gdk_threads_enter (); /* Create the first window */ first_window = vik_window_new_window(); check_latest_version ( GTK_WINDOW(first_window) ); while ( ++i < argc ) { if ( strcmp(argv[i],"--") == 0 && !dashdash_already ) dashdash_already = TRUE; /* hack to open '-' */ else { VikWindow *newvw = first_window; gboolean change_filename = (i == 1); // Open any subsequent .vik files in their own window if ( i > 1 && check_file_magic_vik ( argv[i] ) ) { newvw = vik_window_new_window (); change_filename = TRUE; } vik_window_open_file ( newvw, argv[i], change_filename ); } } gtk_main (); gdk_threads_leave (); a_babel_uninit (); a_background_uninit (); a_mapcache_uninit (); a_dems_uninit (); a_preferences_uninit (); curl_download_uninit(); return 0; } viking-1.4.2/src/download.c0000644000175000017500000002124012175546146012502 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * Copyright (C) 2007, Guilhem Bonnefille * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_UTIME_H #include #endif #include #include #include #include "download.h" #include "curl_download.h" #include "preferences.h" #include "globals.h" static gboolean check_file_first_line(FILE* f, gchar *patterns[]) { gchar **s; gchar *bp; fpos_t pos; gchar buf[33]; size_t nr; memset(buf, 0, sizeof(buf)); fgetpos(f, &pos); rewind(f); nr = fread(buf, 1, sizeof(buf) - 1, f); fsetpos(f, &pos); for (bp = buf; (bp < (buf + sizeof(buf) - 1)) && (nr > (bp - buf)); bp++) { if (!(isspace(*bp))) break; } if ((bp >= (buf + sizeof(buf) -1)) || ((bp - buf) >= nr)) return FALSE; for (s = patterns; *s; s++) { if (strncasecmp(*s, bp, strlen(*s)) == 0) return TRUE; } return FALSE; } gboolean a_check_html_file(FILE* f) { gchar * html_str[] = { "check_file_server_time && !options->use_etag)) { /* Nothing to do as file already exists and we don't want to check server */ return -3; } time_t tile_age = a_preferences_get(VIKING_PREFERENCES_NAMESPACE "download_tile_age")->u; /* Get the modified time of this file */ struct stat buf; g_stat ( fn, &buf ); time_t file_time = buf.st_mtime; if ( (time(NULL) - file_time) < tile_age ) { /* File cache is too recent, so return */ return -3; } if (options->check_file_server_time) { file_options.time_condition = file_time; } if (options->use_etag) { gchar *etag_filename = g_strdup_printf("%s.etag", fn); gsize etag_length = 0; g_file_get_contents (etag_filename, &(file_options.etag), &etag_length, NULL); g_free (etag_filename); etag_filename = NULL; /* check if etag is short enough */ if (etag_length > 100) { g_free(file_options.etag); file_options.etag = NULL; } /* TODO: should check that etag is a valid string */ } } else { gchar *dir = g_path_get_dirname ( fn ); g_mkdir_with_parents ( dir , 0777 ); g_free ( dir ); } tmpfilename = g_strdup_printf("%s.tmp", fn); if (!lock_file ( tmpfilename ) ) { g_debug("%s: Couldn't take lock on temporary file \"%s\"\n", __FUNCTION__, tmpfilename); g_free ( tmpfilename ); if (options->use_etag) g_free ( file_options.etag ); return -4; } f = g_fopen ( tmpfilename, "w+b" ); /* truncate file and open it */ if ( ! f ) { g_warning("Couldn't open temporary file \"%s\": %s", tmpfilename, g_strerror(errno)); g_free ( tmpfilename ); if (options->use_etag) g_free ( file_options.etag ); return -4; } /* Call the backend function */ ret = curl_download_get_url ( hostname, uri, f, options, ftp, &file_options, handle ); if (ret != DOWNLOAD_NO_ERROR && ret != DOWNLOAD_NO_NEWER_FILE) { g_debug("%s: download failed: curl_download_get_url=%d", __FUNCTION__, ret); failure = TRUE; } if (!failure && options != NULL && options->check_file != NULL && ! options->check_file(f)) { g_debug("%s: file content checking failed", __FUNCTION__); failure = TRUE; } fclose ( f ); f = NULL; if (failure) { g_warning(_("Download error: %s"), fn); g_remove ( tmpfilename ); unlock_file ( tmpfilename ); g_free ( tmpfilename ); if (options->use_etag) { g_free ( file_options.etag ); g_free ( file_options.new_etag ); } return -1; } if (options->use_etag) { if (file_options.new_etag) { /* server returned an etag value */ gchar *etag_filename = g_strdup_printf("%s.etag", fn); g_file_set_contents (etag_filename, file_options.new_etag, -1, NULL); g_free (etag_filename); etag_filename = NULL; } } if (ret == DOWNLOAD_NO_NEWER_FILE) { g_remove ( tmpfilename ); #if GLIB_CHECK_VERSION(2,18,0) g_utime ( fn, NULL ); /* update mtime of local copy */ #else utimes ( fn, NULL ); /* update mtime of local copy */ #endif } else { g_rename ( tmpfilename, fn ); /* move completely-downloaded file to permanent location */ } unlock_file ( tmpfilename ); g_free ( tmpfilename ); if (options->use_etag) { g_free ( file_options.etag ); g_free ( file_options.new_etag ); } return 0; } /* success = 0, -1 = couldn't connect, -2 HTTP error, -3 file exists, -4 couldn't write to file... */ /* uri: like "/uri.html?whatever" */ /* only reason for the "wrapper" is so we can do redirects. */ int a_http_download_get_url ( const char *hostname, const char *uri, const char *fn, DownloadMapOptions *opt, void *handle ) { return download ( hostname, uri, fn, opt, FALSE, handle ); } int a_ftp_download_get_url ( const char *hostname, const char *uri, const char *fn, DownloadMapOptions *opt, void *handle ) { return download ( hostname, uri, fn, opt, TRUE, handle ); } void * a_download_handle_init () { return curl_download_handle_init (); } void a_download_handle_cleanup ( void *handle ) { curl_download_handle_cleanup ( handle ); } /** * a_download_url_to_tmp_file: * @uri: The URI (Uniform Resource Identifier) * @options: Download options (maybe NULL) * * returns name of the temporary file created - NULL if unsuccessful * this string needs to be freed once used * the file needs to be removed once used */ gchar *a_download_uri_to_tmp_file ( const gchar *uri, DownloadMapOptions *options ) { FILE *tmp_file; int tmp_fd; gchar *tmpname; if ( (tmp_fd = g_file_open_tmp ("viking-download.XXXXXX", &tmpname, NULL)) == -1 ) { g_critical (_("couldn't open temp file")); return NULL; } tmp_file = fdopen(tmp_fd, "r+"); if ( curl_download_uri ( uri, tmp_file, options, NULL, NULL ) ) { // error fclose ( tmp_file ); g_remove ( tmpname ); g_free ( tmpname ); return NULL; } fclose ( tmp_file ); return tmpname; } viking-1.4.2/src/curl_download.c0000644000175000017500000001674312175546146013543 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2007, Guilhem Bonnefille * Copyright (C) 2007, Quy Tonthat * Copyright (C) 2009-2010, Jocelyn Jaubert * Copyright (C) 2010, Sven Wegener * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #ifdef HAVE_UNISTD_H #include #endif #include #include #include #include #include #include #include "background.h" #include "dir.h" #include "file.h" #include "globals.h" #include "curl_download.h" gchar *curl_download_user_agent = NULL; /* * Even if writing to FILE* is supported by libcurl by default, * it seems that it is non-portable (win32 DLL specific). * * So, we provide our own trivial CURLOPT_WRITEFUNCTION. */ static size_t curl_write_func(void *ptr, size_t size, size_t nmemb, FILE *stream) { return fwrite(ptr, size, nmemb, stream); } static size_t curl_get_etag_func(char *ptr, size_t size, size_t nmemb, void *stream) { #define ETAG_KEYWORD "ETag: " #define ETAG_LEN (sizeof(ETAG_KEYWORD)-1) gchar **etag = stream; size_t len = size*nmemb; char *str = g_strstr_len((const char*)ptr, len, ETAG_KEYWORD); if (str) { char *etag_str = str + ETAG_LEN; char *end_str = g_strstr_len(etag_str, len - ETAG_LEN, "\r\n"); if (etag_str && end_str) { *etag = g_strndup(etag_str, end_str - etag_str); g_debug("%s: ETAG found: %s", __FUNCTION__, *etag); } } return nmemb; } static int curl_progress_func(void *clientp, double dltotal, double dlnow, double ultotal, double ulnow) { return a_background_testcancel(NULL); } static gchar *get_cookie_file(gboolean init) { static gchar *cookie_file = NULL; // Wipe any previous cookies set on startup (for some reason??) // Startup is single threaded so don't care about mutexes if (init) { static gchar *cookie_fn = "cookies.txt"; const gchar *viking_dir = a_get_viking_dir(); cookie_file = g_build_filename(viking_dir, cookie_fn, NULL); g_unlink(cookie_file); return NULL; } return(cookie_file); } /* This should to be called from main() to make sure thread safe */ void curl_download_init() { curl_global_init(CURL_GLOBAL_ALL); get_cookie_file(TRUE); curl_download_user_agent = g_strdup_printf ("%s/%s %s", PACKAGE, VERSION, curl_version()); } /* This should to be called from main() to make sure thread safe */ void curl_download_uninit() { curl_global_cleanup(); } int curl_download_uri ( const char *uri, FILE *f, DownloadMapOptions *options, DownloadFileOptions *file_options, void *handle ) { CURL *curl; struct curl_slist *curl_send_headers = NULL; CURLcode res = CURLE_FAILED_INIT; const gchar *cookie_file; g_debug("%s: uri=%s", __PRETTY_FUNCTION__, uri); curl = handle ? handle : curl_easy_init (); if ( !curl ) { return DOWNLOAD_ERROR; } if (vik_verbose) curl_easy_setopt ( curl, CURLOPT_VERBOSE, 1 ); curl_easy_setopt ( curl, CURLOPT_NOSIGNAL, 1 ); // Yep, we're a multi-threaded program so don't let signals mess it up! if ( options != NULL && options->user_pass ) { curl_easy_setopt ( curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY ); curl_easy_setopt ( curl, CURLOPT_USERPWD, options->user_pass ); } curl_easy_setopt ( curl, CURLOPT_URL, uri ); curl_easy_setopt ( curl, CURLOPT_WRITEDATA, f ); curl_easy_setopt ( curl, CURLOPT_WRITEFUNCTION, curl_write_func); curl_easy_setopt ( curl, CURLOPT_NOPROGRESS, 0 ); curl_easy_setopt ( curl, CURLOPT_PROGRESSDATA, NULL ); curl_easy_setopt ( curl, CURLOPT_PROGRESSFUNCTION, curl_progress_func); if (options != NULL) { if(options->referer != NULL) curl_easy_setopt ( curl, CURLOPT_REFERER, options->referer); if(options->follow_location != 0) { curl_easy_setopt ( curl, CURLOPT_FOLLOWLOCATION, 1); curl_easy_setopt ( curl, CURLOPT_MAXREDIRS, options->follow_location); } if (file_options != NULL) { if(options->check_file_server_time && file_options->time_condition != 0) { /* if file exists, check against server if file is recent enough */ curl_easy_setopt ( curl, CURLOPT_TIMECONDITION, CURL_TIMECOND_IFMODSINCE); curl_easy_setopt ( curl, CURLOPT_TIMEVALUE, file_options->time_condition); } if (options->use_etag) { if (file_options->etag != NULL) { /* add an header on the HTTP request */ char str[60]; g_snprintf(str, 60, "If-None-Match: %s", file_options->etag); curl_send_headers = curl_slist_append(curl_send_headers, str); curl_easy_setopt ( curl, CURLOPT_HTTPHEADER , curl_send_headers); } /* store the new etag from the server in an option value */ curl_easy_setopt ( curl, CURLOPT_WRITEHEADER, &(file_options->new_etag)); curl_easy_setopt ( curl, CURLOPT_HEADERFUNCTION, curl_get_etag_func); } } } curl_easy_setopt ( curl, CURLOPT_USERAGENT, curl_download_user_agent ); if ((cookie_file = get_cookie_file(FALSE)) != NULL) curl_easy_setopt(curl, CURLOPT_COOKIEFILE, cookie_file); res = curl_easy_perform ( curl ); if (res == 0) { glong response; curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response); if (response == 304) { // 304 = Not Modified res = DOWNLOAD_NO_NEWER_FILE; } else if (response == 200 || // http: 200 = Ok response == 226) { // ftp: 226 = sucess gdouble size; /* verify if curl sends us any data - this is a workaround on using CURLOPT_TIMECONDITION when the server has a (incorrect) time earlier than the time on the file we already have */ curl_easy_getinfo(curl, CURLINFO_SIZE_DOWNLOAD, &size); if (size == 0) res = DOWNLOAD_ERROR; else res = DOWNLOAD_NO_ERROR; } else { g_warning("%s: http response: %ld for uri %s\n", __FUNCTION__, response, uri); res = DOWNLOAD_ERROR; } } else { res = DOWNLOAD_ERROR; } if (!handle) curl_easy_cleanup ( curl ); if (curl_send_headers) { curl_slist_free_all(curl_send_headers); curl_send_headers = NULL; curl_easy_setopt ( curl, CURLOPT_HTTPHEADER , NULL); } return res; } int curl_download_get_url ( const char *hostname, const char *uri, FILE *f, DownloadMapOptions *options, gboolean ftp, DownloadFileOptions *file_options, void *handle ) { int ret; gchar *full = NULL; /* Compose the full url */ full = g_strdup_printf ( "%s://%s%s", (ftp?"ftp":"http"), hostname, uri ); ret = curl_download_uri ( full, f, options, file_options, handle ); g_free ( full ); full = NULL; return ret; } void * curl_download_handle_init () { return curl_easy_init(); } void curl_download_handle_cleanup ( void *handle ) { curl_easy_cleanup(handle); } viking-1.4.2/src/libjpeg/0000755000175000017500000000000012175546630012222 500000000000000viking-1.4.2/src/libjpeg/jpeg-data.c0000644000175000017500000002403512122673673014146 00000000000000/* jpeg-data.c * * Copyright 2001 Lutz Mller * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. */ #include "config.h" #include "jpeg-data.h" #include #include #include #include /* realloc that cleans up on memory failure and returns to caller */ #define CLEANUP_REALLOC(p,s) { \ unsigned char *cleanup_ptr = realloc((p),(s)); \ if (!cleanup_ptr) { free(p); (p) = NULL; return; } \ (p) = cleanup_ptr; \ } struct _JPEGDataPrivate { unsigned int ref_count; ExifLog *log; }; JPEGData * jpeg_data_new (void) { JPEGData *data; data = malloc (sizeof (JPEGData)); if (!data) return (NULL); memset (data, 0, sizeof (JPEGData)); data->priv = malloc (sizeof (JPEGDataPrivate)); if (!data->priv) { free (data); return (NULL); } memset (data->priv, 0, sizeof (JPEGDataPrivate)); data->priv->ref_count = 1; return (data); } void jpeg_data_append_section (JPEGData *data) { JPEGSection *s; if (!data) return; if (!data->count) s = malloc (sizeof (JPEGSection)); else s = realloc (data->sections, sizeof (JPEGSection) * (data->count + 1)); if (!s) { EXIF_LOG_NO_MEMORY (data->priv->log, "jpeg-data", sizeof (JPEGSection) * (data->count + 1)); return; } memset(s + data->count, 0, sizeof (JPEGSection)); data->sections = s; data->count++; } /*! jpeg_data_save_file returns 1 on success, 0 on failure */ int jpeg_data_save_file (JPEGData *data, const char *path) { FILE *f; unsigned char *d = NULL; unsigned int size = 0, written; jpeg_data_save_data (data, &d, &size); if (!d) return 0; remove (path); f = fopen (path, "wb"); if (!f) { free (d); return 0; } written = fwrite (d, 1, size, f); fclose (f); free (d); if (written == size) { return 1; } remove(path); return 0; } void jpeg_data_save_data (JPEGData *data, unsigned char **d, unsigned int *ds) { unsigned int i, eds = 0; JPEGSection s; unsigned char *ed = NULL; if (!data) return; if (!d) return; if (!ds) return; for (*ds = i = 0; i < data->count; i++) { s = data->sections[i]; /* Write the marker */ CLEANUP_REALLOC (*d, sizeof (char) * (*ds + 2)); (*d)[*ds + 0] = 0xff; (*d)[*ds + 1] = s.marker; *ds += 2; switch (s.marker) { case JPEG_MARKER_SOI: case JPEG_MARKER_EOI: break; case JPEG_MARKER_APP1: exif_data_save_data (s.content.app1, &ed, &eds); if (!ed) break; CLEANUP_REALLOC (*d, sizeof (char) * (*ds + 2)); (*d)[*ds + 0] = (eds + 2) >> 8; (*d)[*ds + 1] = (eds + 2) >> 0; *ds += 2; CLEANUP_REALLOC (*d, sizeof (char) * (*ds + eds)); memcpy (*d + *ds, ed, eds); *ds += eds; free (ed); break; default: CLEANUP_REALLOC (*d, sizeof (char) * (*ds + s.content.generic.size + 2)); (*d)[*ds + 0] = (s.content.generic.size + 2) >> 8; (*d)[*ds + 1] = (s.content.generic.size + 2) >> 0; *ds += 2; memcpy (*d + *ds, s.content.generic.data, s.content.generic.size); *ds += s.content.generic.size; /* In case of SOS, we need to write the data. */ if (s.marker == JPEG_MARKER_SOS) { CLEANUP_REALLOC (*d, *ds + data->size); memcpy (*d + *ds, data->data, data->size); *ds += data->size; } break; } } } JPEGData * jpeg_data_new_from_data (const unsigned char *d, unsigned int size) { JPEGData *data; data = jpeg_data_new (); jpeg_data_load_data (data, d, size); return (data); } void jpeg_data_load_data (JPEGData *data, const unsigned char *d, unsigned int size) { unsigned int i, o, len; JPEGSection *s; JPEGMarker marker; if (!data) return; if (!d) return; for (o = 0; o < size;) { /* * JPEG sections start with 0xff. The first byte that is * not 0xff is a marker (hopefully). */ for (i = 0; i < MIN(7, size - o); i++) if (d[o + i] != 0xff) break; if (!JPEG_IS_MARKER (d[o + i])) { exif_log (data->priv->log, EXIF_LOG_CODE_CORRUPT_DATA, "jpeg-data", _("Data does not follow JPEG specification.")); return; } marker = d[o + i]; /* Append this section */ jpeg_data_append_section (data); if (!data->count) return; s = &data->sections[data->count - 1]; s->marker = marker; o += i + 1; switch (s->marker) { case JPEG_MARKER_SOI: case JPEG_MARKER_EOI: break; default: /* Read the length of the section */ len = ((d[o] << 8) | d[o + 1]) - 2; if (len > size) { o = size; break; } o += 2; if (o + len > size) { o = size; break; } switch (s->marker) { case JPEG_MARKER_APP1: s->content.app1 = exif_data_new_from_data ( d + o - 4, len + 4); break; default: s->content.generic.data = malloc (sizeof (char) * len); if (!s->content.generic.data) return; s->content.generic.size = len; memcpy (s->content.generic.data, &d[o], len); /* In case of SOS, image data will follow. */ if (s->marker == JPEG_MARKER_SOS) { /* -2 means 'take all but the last 2 bytes which are hoped to be JPEG_MARKER_EOI */ data->size = size - 2 - o - len; if (d[o + len + data->size] != 0xFF) { /* A truncated file (i.e. w/o JPEG_MARKER_EOI at the end). Instead of trying to use the last two bytes as marker, touching memory beyond allocated memory and posssibly saving back screwed file, we rather take the rest of the file. */ data->size += 2; } data->data = malloc ( sizeof (char) * data->size); if (!data->data) return; memcpy (data->data, d + o + len, data->size); o += data->size; } break; } o += len; break; } } } JPEGData * jpeg_data_new_from_file (const char *path) { JPEGData *data; data = jpeg_data_new (); jpeg_data_load_file (data, path); return (data); } void jpeg_data_load_file (JPEGData *data, const char *path) { FILE *f; unsigned char *d; unsigned int size; if (!data) return; if (!path) return; f = fopen (path, "rb"); if (!f) { exif_log (data->priv->log, EXIF_LOG_CODE_CORRUPT_DATA, "jpeg-data", _("Path '%s' invalid."), path); return; } /* For now, we read the data into memory. Patches welcome... */ fseek (f, 0, SEEK_END); size = ftell (f); fseek (f, 0, SEEK_SET); d = malloc (size); if (!d) { EXIF_LOG_NO_MEMORY (data->priv->log, "jpeg-data", size); fclose (f); return; } if (fread (d, 1, size, f) != size) { free (d); fclose (f); exif_log (data->priv->log, EXIF_LOG_CODE_CORRUPT_DATA, "jpeg-data", _("Could not read '%s'."), path); return; } fclose (f); jpeg_data_load_data (data, d, size); free (d); } void jpeg_data_ref (JPEGData *data) { if (!data) return; data->priv->ref_count++; } void jpeg_data_unref (JPEGData *data) { if (!data) return; if (data->priv) { data->priv->ref_count--; if (!data->priv->ref_count) jpeg_data_free (data); } } void jpeg_data_free (JPEGData *data) { unsigned int i; JPEGSection s; if (!data) return; if (data->count) { for (i = 0; i < data->count; i++) { s = data->sections[i]; switch (s.marker) { case JPEG_MARKER_SOI: case JPEG_MARKER_EOI: break; case JPEG_MARKER_APP1: exif_data_unref (s.content.app1); break; default: free (s.content.generic.data); break; } } free (data->sections); } if (data->data) free (data->data); if (data->priv) { if (data->priv->log) { exif_log_unref (data->priv->log); data->priv->log = NULL; } free (data->priv); } free (data); } void jpeg_data_dump (JPEGData *data) { unsigned int i; JPEGContent content; JPEGMarker marker; if (!data) return; printf ("Dumping JPEG data (%i bytes of data)...\n", data->size); for (i = 0; i < data->count; i++) { marker = data->sections[i].marker; content = data->sections[i].content; printf ("Section %i (marker 0x%x - %s):\n", i, marker, jpeg_marker_get_name (marker)); printf (" Description: %s\n", jpeg_marker_get_description (marker)); switch (marker) { case JPEG_MARKER_SOI: case JPEG_MARKER_EOI: break; case JPEG_MARKER_APP1: exif_data_dump (content.app1); break; default: printf (" Size: %i\n", content.generic.size); printf (" Unknown content.\n"); break; } } } static JPEGSection * jpeg_data_get_section (JPEGData *data, JPEGMarker marker) { unsigned int i; if (!data) return (NULL); for (i = 0; i < data->count; i++) if (data->sections[i].marker == marker) return (&data->sections[i]); return (NULL); } ExifData * jpeg_data_get_exif_data (JPEGData *data) { JPEGSection *section; if (!data) return NULL; section = jpeg_data_get_section (data, JPEG_MARKER_APP1); if (section) { exif_data_ref (section->content.app1); return (section->content.app1); } return (NULL); } void jpeg_data_set_exif_data (JPEGData *data, ExifData *exif_data) { JPEGSection *section; if (!data) return; section = jpeg_data_get_section (data, JPEG_MARKER_APP1); if (!section) { jpeg_data_append_section (data); if (data->count < 2) return; memmove (&data->sections[2], &data->sections[1], sizeof (JPEGSection) * (data->count - 2)); section = &data->sections[1]; } else { exif_data_unref (section->content.app1); } section->marker = JPEG_MARKER_APP1; section->content.app1 = exif_data; exif_data_ref (exif_data); } void jpeg_data_log (JPEGData *data, ExifLog *log) { if (!data || !data->priv) return; if (data->priv->log) exif_log_unref (data->priv->log); data->priv->log = log; exif_log_ref (log); } viking-1.4.2/src/libjpeg/jpeg-marker.c0000644000175000017500000001142612122673673014516 00000000000000/* jpeg-marker.c * * Copyright 2001-2008 Lutz Mller * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. */ #include "config.h" #include "jpeg-marker.h" #include static const struct { JPEGMarker marker; const char *name; const char *description; } JPEGMarkerTable[] = { {JPEG_MARKER_SOF0, "SOF0", "Encoding (baseline)"}, {JPEG_MARKER_SOF1, "SOF1", "Encoding (extended sequential)"}, {JPEG_MARKER_SOF2, "SOF2", "Encoding (progressive)"}, {JPEG_MARKER_SOF3, "SOF3", "Encoding (lossless)"}, {JPEG_MARKER_SOF5, "SOF5", "Encoding (differential sequential)"}, {JPEG_MARKER_SOF6, "SOF6", "Encoding (differential progressive)"}, {JPEG_MARKER_SOF7, "SOF7", "Encoding (differential lossless)"}, {JPEG_MARKER_SOF9, "SOF9", "Encoding (extended sequential, arithmetic)"}, {JPEG_MARKER_SOF10, "SOF10", "Encoding (progressive, arithmetic)"}, {JPEG_MARKER_SOF11, "SOF11", "Encoding (lossless, arithmetic)"}, {JPEG_MARKER_SOF13, "SOF13", "Encoding (differential sequential, arithmetic)"}, {JPEG_MARKER_SOF14, "SOF14", "Encoding (differential progressive, arithmetic)"}, {JPEG_MARKER_SOF15, "SOF15", "Encoding (differential lossless, arithmetic)"}, {JPEG_MARKER_SOI, "SOI", "Start of image"}, {JPEG_MARKER_EOI, "EOI", "End of image"}, {JPEG_MARKER_SOS, "SOS", "Start of scan"}, {JPEG_MARKER_COM, "COM", "Comment"}, {JPEG_MARKER_DHT, "DHT", "Define Huffman table"}, {JPEG_MARKER_JPG, "JPG", "Extension"}, {JPEG_MARKER_DAC, "DAC", "Define arithmetic coding conditioning"}, {JPEG_MARKER_RST1, "RST1", "Restart 1"}, {JPEG_MARKER_RST2, "RST2", "Restart 2"}, {JPEG_MARKER_RST3, "RST3", "Restart 3"}, {JPEG_MARKER_RST4, "RST4", "Restart 4"}, {JPEG_MARKER_RST5, "RST5", "Restart 5"}, {JPEG_MARKER_RST6, "RST6", "Restart 6"}, {JPEG_MARKER_RST7, "RST7", "Restart 7"}, {JPEG_MARKER_DQT, "DQT", "Define quantization table"}, {JPEG_MARKER_DNL, "DNL", "Define number of lines"}, {JPEG_MARKER_DRI, "DRI", "Define restart interval"}, {JPEG_MARKER_DHP, "DHP", "Define hierarchical progression"}, {JPEG_MARKER_EXP, "EXP", "Expand reference component"}, {JPEG_MARKER_APP0, "APP0", "Application segment 0"}, {JPEG_MARKER_APP1, "APP1", "Application segment 1"}, {JPEG_MARKER_APP2, "APP2", "Application segment 2"}, {JPEG_MARKER_APP3, "APP3", "Application segment 3"}, {JPEG_MARKER_APP4, "APP4", "Application segment 4"}, {JPEG_MARKER_APP5, "APP5", "Application segment 5"}, {JPEG_MARKER_APP6, "APP6", "Application segment 6"}, {JPEG_MARKER_APP7, "APP7", "Application segment 7"}, {JPEG_MARKER_APP8, "APP8", "Application segment 8"}, {JPEG_MARKER_APP9, "APP9", "Application segment 9"}, {JPEG_MARKER_APP10, "APP10", "Application segment 10"}, {JPEG_MARKER_APP11, "APP11", "Application segment 11"}, {JPEG_MARKER_APP12, "APP12", "Application segment 12"}, {JPEG_MARKER_APP13, "APP13", "Application segment 13"}, {JPEG_MARKER_APP14, "APP14", "Application segment 14"}, {JPEG_MARKER_APP15, "APP15", "Application segment 15"}, {JPEG_MARKER_JPG0, "JPG0", "Extension 0"}, {JPEG_MARKER_JPG1, "JPG1", "Extension 1"}, {JPEG_MARKER_JPG2, "JPG2", "Extension 2"}, {JPEG_MARKER_JPG3, "JPG3", "Extension 3"}, {JPEG_MARKER_JPG4, "JPG4", "Extension 4"}, {JPEG_MARKER_JPG5, "JPG5", "Extension 5"}, {JPEG_MARKER_JPG6, "JPG6", "Extension 6"}, {JPEG_MARKER_JPG7, "JPG7", "Extension 7"}, {JPEG_MARKER_JPG8, "JPG8", "Extension 8"}, {JPEG_MARKER_JPG9, "JPG9", "Extension 9"}, {JPEG_MARKER_JPG10, "JPG10", "Extension 10"}, {JPEG_MARKER_JPG11, "JPG11", "Extension 11"}, {JPEG_MARKER_JPG12, "JPG12", "Extension 12"}, {JPEG_MARKER_JPG13, "JPG13", "Extension 13"}, {0, NULL, NULL} }; const char * jpeg_marker_get_name (JPEGMarker marker) { unsigned int i; for (i = 0; JPEGMarkerTable[i].name; i++) if (JPEGMarkerTable[i].marker == marker) break; return (JPEGMarkerTable[i].name); } const char * jpeg_marker_get_description (JPEGMarker marker) { unsigned int i; for (i = 0; JPEGMarkerTable[i].description; i++) if (JPEGMarkerTable[i].marker == marker) break; return (JPEGMarkerTable[i].description); } viking-1.4.2/src/libjpeg/jpeg-marker.h0000644000175000017500000000641712122673673014527 00000000000000/* jpeg-marker.h * * Copyright 2001 Lutz Mller * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. */ #ifndef __JPEG_MARKER_H__ #define __JPEG_MARKER_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ typedef enum { JPEG_MARKER_SOF0 = 0xc0, JPEG_MARKER_SOF1 = 0xc1, JPEG_MARKER_SOF2 = 0xc2, JPEG_MARKER_SOF3 = 0xc3, JPEG_MARKER_DHT = 0xc4, JPEG_MARKER_SOF5 = 0xc5, JPEG_MARKER_SOF6 = 0xc6, JPEG_MARKER_SOF7 = 0xc7, JPEG_MARKER_JPG = 0xc8, JPEG_MARKER_SOF9 = 0xc9, JPEG_MARKER_SOF10 = 0xca, JPEG_MARKER_SOF11 = 0xcb, JPEG_MARKER_DAC = 0xcc, JPEG_MARKER_SOF13 = 0xcd, JPEG_MARKER_SOF14 = 0xce, JPEG_MARKER_SOF15 = 0xcf, JPEG_MARKER_RST0 = 0xd0, JPEG_MARKER_RST1 = 0xd1, JPEG_MARKER_RST2 = 0xd2, JPEG_MARKER_RST3 = 0xd3, JPEG_MARKER_RST4 = 0xd4, JPEG_MARKER_RST5 = 0xd5, JPEG_MARKER_RST6 = 0xd6, JPEG_MARKER_RST7 = 0xd7, JPEG_MARKER_SOI = 0xd8, JPEG_MARKER_EOI = 0xd9, JPEG_MARKER_SOS = 0xda, JPEG_MARKER_DQT = 0xdb, JPEG_MARKER_DNL = 0xdc, JPEG_MARKER_DRI = 0xdd, JPEG_MARKER_DHP = 0xde, JPEG_MARKER_EXP = 0xdf, JPEG_MARKER_APP0 = 0xe0, JPEG_MARKER_APP1 = 0xe1, JPEG_MARKER_APP2 = 0xe2, JPEG_MARKER_APP3 = 0xe3, JPEG_MARKER_APP4 = 0xe4, JPEG_MARKER_APP5 = 0xe5, JPEG_MARKER_APP6 = 0xe6, JPEG_MARKER_APP7 = 0xe7, JPEG_MARKER_APP8 = 0xe8, JPEG_MARKER_APP9 = 0xe9, JPEG_MARKER_APP10 = 0xea, JPEG_MARKER_APP11 = 0xeb, JPEG_MARKER_APP12 = 0xec, JPEG_MARKER_APP13 = 0xed, JPEG_MARKER_APP14 = 0xee, JPEG_MARKER_APP15 = 0xef, JPEG_MARKER_JPG0 = 0xf0, JPEG_MARKER_JPG1 = 0xf1, JPEG_MARKER_JPG2 = 0xf2, JPEG_MARKER_JPG3 = 0xf3, JPEG_MARKER_JPG4 = 0xf4, JPEG_MARKER_JPG5 = 0xf5, JPEG_MARKER_JPG6 = 0xf6, JPEG_MARKER_JPG7 = 0xf7, JPEG_MARKER_JPG8 = 0xf8, JPEG_MARKER_JPG9 = 0xf9, JPEG_MARKER_JPG10 = 0xfa, JPEG_MARKER_JPG11 = 0xfb, JPEG_MARKER_JPG12 = 0xfc, JPEG_MARKER_JPG13 = 0xfd, JPEG_MARKER_COM = 0xfe } JPEGMarker; #define JPEG_IS_MARKER(m) (((m) >= JPEG_MARKER_SOF0) && \ ((m) <= JPEG_MARKER_COM)) const char *jpeg_marker_get_name (JPEGMarker marker); const char *jpeg_marker_get_description (JPEGMarker marker); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __JPEG_MARKER_H__ */ viking-1.4.2/src/libjpeg/jpeg-data.h0000644000175000017500000000501512122673673014150 00000000000000/* jpeg-data.h * * Copyright 2001 Lutz Mller * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. */ #ifndef __JPEG_DATA_H__ #define __JPEG_DATA_H__ #include "libjpeg/jpeg-marker.h" #include #include typedef ExifData * JPEGContentAPP1; typedef struct _JPEGContentGeneric JPEGContentGeneric; struct _JPEGContentGeneric { unsigned char *data; unsigned int size; }; typedef union _JPEGContent JPEGContent; union _JPEGContent { JPEGContentGeneric generic; JPEGContentAPP1 app1; }; typedef struct _JPEGSection JPEGSection; struct _JPEGSection { JPEGMarker marker; JPEGContent content; }; typedef struct _JPEGData JPEGData; typedef struct _JPEGDataPrivate JPEGDataPrivate; struct _JPEGData { JPEGSection *sections; unsigned int count; unsigned char *data; unsigned int size; JPEGDataPrivate *priv; }; JPEGData *jpeg_data_new (void); JPEGData *jpeg_data_new_from_file (const char *path); JPEGData *jpeg_data_new_from_data (const unsigned char *data, unsigned int size); void jpeg_data_ref (JPEGData *data); void jpeg_data_unref (JPEGData *data); void jpeg_data_free (JPEGData *data); void jpeg_data_load_data (JPEGData *data, const unsigned char *d, unsigned int size); void jpeg_data_save_data (JPEGData *data, unsigned char **d, unsigned int *size); void jpeg_data_load_file (JPEGData *data, const char *path); int jpeg_data_save_file (JPEGData *data, const char *path); void jpeg_data_set_exif_data (JPEGData *data, ExifData *exif_data); ExifData *jpeg_data_get_exif_data (JPEGData *data); void jpeg_data_dump (JPEGData *data); void jpeg_data_append_section (JPEGData *data); void jpeg_data_log (JPEGData *data, ExifLog *log); #endif /* __JPEG_DATA_H__ */ viking-1.4.2/src/degrees_converters.h0000644000175000017500000000242012122673673014565 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2006-2007, Guilhem Bonnefille * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef _VIKING_CONVERTER_H #define _VIKING_CONVERTER_H #include G_BEGIN_DECLS gchar *convert_lat_dec_to_ddd(gdouble lat); gchar *convert_lon_dec_to_ddd(gdouble lon); gchar *convert_lat_dec_to_dmm(gdouble lat); gchar *convert_lon_dec_to_dmm(gdouble lon); gchar *convert_lat_dec_to_dms(gdouble lat); gchar *convert_lon_dec_to_dms(gdouble lon); gdouble convert_dms_to_dec(const gchar *dms); G_END_DECLS #endif viking-1.4.2/src/geonames.h0000644000175000017500000000165411745373131012477 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2009, Guilhem Bonnefille * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef __GEONAMES_H #define __GEONAMES_H void geonames_init (); #endif viking-1.4.2/src/vikfilelist.c0000644000175000017500000001541512175546146013227 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * Copyright (C) 2011, Rob Norris * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include "vikfilelist.h" struct _VikFileList { GtkVBox parent; GtkWidget *treeview; GtkWidget *file_selector; GtkTreeModel *model; }; static void file_list_add ( VikFileList *vfl ) { GSList *files = NULL; GSList *fiter = NULL; if ( ! vfl->file_selector ) { GtkWidget *win; g_assert ( (win = gtk_widget_get_toplevel(GTK_WIDGET(vfl))) ); vfl->file_selector = gtk_file_chooser_dialog_new (_("Choose file(s)"), GTK_WINDOW(win), GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL); gtk_file_chooser_set_select_multiple ( GTK_FILE_CHOOSER(vfl->file_selector), TRUE ); gtk_window_set_transient_for ( GTK_WINDOW(vfl->file_selector), GTK_WINDOW(win) ); gtk_window_set_destroy_with_parent ( GTK_WINDOW(vfl->file_selector), TRUE ); } if ( gtk_dialog_run ( GTK_DIALOG(vfl->file_selector) ) == GTK_RESPONSE_ACCEPT ) { files = gtk_file_chooser_get_filenames (GTK_FILE_CHOOSER(vfl->file_selector) ); fiter = files; GtkTreeIter iter; while ( fiter ) { gchar *file_name = fiter->data; gtk_list_store_append ( GTK_LIST_STORE(vfl->model), &iter ); gtk_list_store_set ( GTK_LIST_STORE(vfl->model), &iter, 0, file_name, -1 ); g_free (file_name); fiter = g_slist_next (fiter); } g_slist_free (files); } gtk_widget_hide ( vfl->file_selector ); } static GtkTreeRowReference** file_list_get_selected_refs (GtkTreeModel *model, GList *list) { GtkTreeRowReference **arr; GList *iter; arr = g_new (GtkTreeRowReference *, g_list_length (list) + 1); gint pos = 0; for (iter = g_list_first (list); iter != NULL; iter = g_list_next (iter)) { GtkTreePath *path = (GtkTreePath *)(iter->data); arr[pos] = gtk_tree_row_reference_new (model, path); pos++; } arr[pos] = NULL; return arr; } static void file_list_store_delete_refs (GtkTreeModel *model, GtkTreeRowReference * const *rrefs) { GtkTreePath *path; GtkTreeIter iter; gint rr; for ( rr = 0; rrefs[rr] != NULL; rr++ ) { path = gtk_tree_row_reference_get_path (rrefs[rr]); gtk_tree_model_get_iter (model, &iter, path); gtk_list_store_remove (GTK_LIST_STORE (model), &iter); } } static void file_list_del ( VikFileList *vfl ) { GtkTreeSelection *ts = gtk_tree_view_get_selection (GTK_TREE_VIEW(vfl->treeview)); GList *list = gtk_tree_selection_get_selected_rows ( ts, &(vfl->model) ); // For multi delete need to store references to selected rows GtkTreeRowReference **rrefs = file_list_get_selected_refs ( vfl->model, list ); // And then delete each one individually as the path will have changed file_list_store_delete_refs ( vfl->model, rrefs ); // Cleanup g_list_foreach ( list, (GFunc) gtk_tree_path_free, NULL ); g_list_free ( list ); g_free (rrefs); } GType vik_file_list_get_type (void) { static GType vs_type = 0; if (!vs_type) { static const GTypeInfo vs_info = { sizeof (VikFileListClass), NULL, /* base_init */ NULL, /* base_finalize */ NULL, /* class init */ NULL, /* class_finalize */ NULL, /* class_data */ sizeof (VikFileList), 0, NULL /* instance init */ }; vs_type = g_type_register_static ( GTK_TYPE_VBOX, "VikFileList", &vs_info, 0 ); } return vs_type; } GtkWidget *vik_file_list_new ( const gchar *title ) { GtkWidget *add_btn, *del_btn; GtkWidget *hbox, *scrolledwindow; VikFileList *vfl = VIK_FILE_LIST ( g_object_new ( VIK_FILE_LIST_TYPE, NULL ) ); GtkTreeViewColumn *column; vfl->model = GTK_TREE_MODEL ( gtk_list_store_new(1, G_TYPE_STRING) ); vfl->treeview = gtk_tree_view_new ( ); gtk_tree_view_set_model ( GTK_TREE_VIEW(vfl->treeview), vfl->model ); column = gtk_tree_view_column_new_with_attributes ( title, gtk_cell_renderer_text_new (), "text", 0, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW (vfl->treeview), column); gtk_tree_selection_set_mode ( gtk_tree_view_get_selection (GTK_TREE_VIEW(vfl->treeview)), GTK_SELECTION_MULTIPLE ); gtk_widget_set_size_request ( vfl->treeview, 200, 100); add_btn = gtk_button_new_with_label(_("Add...")); del_btn = gtk_button_new_with_label(_("Delete")); g_signal_connect_swapped ( G_OBJECT(add_btn), "clicked", G_CALLBACK(file_list_add), vfl ); g_signal_connect_swapped ( G_OBJECT(del_btn), "clicked", G_CALLBACK(file_list_del), vfl ); hbox = gtk_hbox_new(FALSE, 2); scrolledwindow = gtk_scrolled_window_new ( NULL, NULL ); gtk_scrolled_window_set_policy ( GTK_SCROLLED_WINDOW(scrolledwindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC ); gtk_container_add ( GTK_CONTAINER(scrolledwindow), GTK_WIDGET(vfl->treeview) ); gtk_box_pack_start ( GTK_BOX(vfl), scrolledwindow, TRUE, TRUE, 3 ); gtk_box_pack_start ( GTK_BOX(hbox), add_btn, TRUE, TRUE, 3 ); gtk_box_pack_start ( GTK_BOX(hbox), del_btn, TRUE, TRUE, 3 ); gtk_box_pack_start ( GTK_BOX(vfl), hbox, FALSE, FALSE, 3 ); gtk_widget_show_all(GTK_WIDGET(vfl)); vfl->file_selector = NULL; return GTK_WIDGET(vfl); } static gboolean get_file_name(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, GList **list) { gchar *str; gtk_tree_model_get ( model, iter, 0, &str, -1 ); g_debug ("%s: %s", __FUNCTION__, str); (*list) = g_list_append((*list), g_strdup(str)); return FALSE; } GList *vik_file_list_get_files ( VikFileList *vfl ) { GList *list = NULL; gtk_tree_model_foreach (vfl->model, (GtkTreeModelForeachFunc) get_file_name, &list); return list; } void vik_file_list_set_files ( VikFileList *vfl, GList *files ) { while (files) { GtkTreeIter iter; gtk_list_store_append ( GTK_LIST_STORE(vfl->model), &iter ); gtk_list_store_set ( GTK_LIST_STORE(vfl->model), &iter, 0, files->data, -1 ); files = files->next; } } viking-1.4.2/src/vikgpslayer.c0000644000175000017500000017567212175546146013256 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * Copyright (C) 2006-2008, Quy Tonthat * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #ifdef HAVE_MATH_H #include #endif #include "viking.h" #include "icons/icons.h" #include "babel.h" #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_STRING_H #include #endif #include #include #include #ifdef VIK_CONFIG_REALTIME_GPS_TRACKING #include #endif #define DISCONNECT_UPDATE_SIGNAL(vl, val) g_signal_handlers_disconnect_matched(vl, G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, val) static VikGpsLayer *vik_gps_layer_create (VikViewport *vp); static void vik_gps_layer_realize ( VikGpsLayer *val, VikTreeview *vt, GtkTreeIter *layer_iter ); static void vik_gps_layer_free ( VikGpsLayer *val ); static void vik_gps_layer_draw ( VikGpsLayer *val, gpointer data ); static VikGpsLayer *vik_gps_layer_new ( VikViewport *vp ); static void gps_layer_marshall( VikGpsLayer *val, guint8 **data, gint *len ); static VikGpsLayer *gps_layer_unmarshall( guint8 *data, gint len, VikViewport *vvp ); static gboolean gps_layer_set_param ( VikGpsLayer *vgl, guint16 id, VikLayerParamData data, VikViewport *vp, gboolean is_file_operation ); static VikLayerParamData gps_layer_get_param ( VikGpsLayer *vgl, guint16 id, gboolean is_file_operation ); static const gchar* gps_layer_tooltip ( VikGpsLayer *vgl ); static void gps_layer_change_coord_mode ( VikGpsLayer *val, VikCoordMode mode ); static void gps_layer_add_menu_items( VikGpsLayer *vtl, GtkMenu *menu, gpointer vlp ); static void gps_layer_drag_drop_request ( VikGpsLayer *val_src, VikGpsLayer *val_dest, GtkTreeIter *src_item_iter, GtkTreePath *dest_path ); static void gps_upload_cb( gpointer layer_and_vlp[2] ); static void gps_download_cb( gpointer layer_and_vlp[2] ); static void gps_empty_upload_cb( gpointer layer_and_vlp[2] ); static void gps_empty_download_cb( gpointer layer_and_vlp[2] ); static void gps_empty_all_cb( gpointer layer_and_vlp[2] ); #if defined (VIK_CONFIG_REALTIME_GPS_TRACKING) && defined (GPSD_API_MAJOR_VERSION) static void gps_empty_realtime_cb( gpointer layer_and_vlp[2] ); static void gps_start_stop_tracking_cb( gpointer layer_and_vlp[2] ); static void realtime_tracking_draw(VikGpsLayer *vgl, VikViewport *vp); static void rt_gpsd_disconnect(VikGpsLayer *vgl); static gboolean rt_gpsd_connect(VikGpsLayer *vgl, gboolean ask_if_failed); #endif // Shouldn't need to use these much any more as the protocol is now saved as a string. // They are kept for compatibility loading old .vik files typedef enum {GARMIN_P = 0, MAGELLAN_P, DELORME_P, NAVILINK_P, OLD_NUM_PROTOCOLS} vik_gps_proto; static gchar * protocols_args[] = {"garmin", "magellan", "delbin", "navilink", NULL}; #ifdef WINDOWS static gchar * params_ports[] = {"com1", "usb:", NULL}; #else static gchar * params_ports[] = {"/dev/ttyS0", "/dev/ttyS1", "/dev/ttyUSB0", "/dev/ttyUSB1", "usb:", NULL}; #endif /* NUM_PORTS not actually used */ /* #define NUM_PORTS (sizeof(params_ports)/sizeof(params_ports[0]) - 1) */ /* Compatibility with previous versions */ #ifdef WINDOWS static gchar * old_params_ports[] = {"com1", "usb:", NULL}; #else static gchar * old_params_ports[] = {"/dev/ttyS0", "/dev/ttyS1", "/dev/ttyUSB0", "/dev/ttyUSB1", "usb:", NULL}; #endif #define OLD_NUM_PORTS (sizeof(old_params_ports)/sizeof(old_params_ports[0]) - 1) typedef struct { GMutex *mutex; vik_gps_dir direction; gchar *port; gboolean ok; gint total_count; gint count; VikTrwLayer *vtl; VikTrack *track; gchar *cmd_args; gchar *window_title; GtkWidget *dialog; GtkWidget *status_label; GtkWidget *gps_label; GtkWidget *ver_label; GtkWidget *id_label; GtkWidget *wp_label; GtkWidget *trk_label; GtkWidget *rte_label; GtkWidget *progress_label; vik_gps_xfer_type progress_type; VikViewport *vvp; #if defined (VIK_CONFIG_REALTIME_GPS_TRACKING) && defined (GPSD_API_MAJOR_VERSION) gboolean realtime_tracking; #endif } GpsSession; static void gps_session_delete(GpsSession *sess); static gchar *params_groups[] = { N_("Data Mode"), #if defined (VIK_CONFIG_REALTIME_GPS_TRACKING) && defined (GPSD_API_MAJOR_VERSION) N_("Realtime Tracking Mode"), #endif }; enum {GROUP_DATA_MODE, GROUP_REALTIME_MODE}; #if defined (VIK_CONFIG_REALTIME_GPS_TRACKING) && defined (GPSD_API_MAJOR_VERSION) static gchar *params_vehicle_position[] = { N_("Keep vehicle at center"), N_("Keep vehicle on screen"), N_("Disable"), NULL }; enum { VEHICLE_POSITION_CENTERED = 0, VEHICLE_POSITION_ON_SCREEN, VEHICLE_POSITION_NONE, }; #endif static VikLayerParam gps_layer_params[] = { { "gps_protocol", VIK_LAYER_PARAM_STRING, GROUP_DATA_MODE, N_("GPS Protocol:"), VIK_LAYER_WIDGET_COMBOBOX, NULL, NULL, NULL }, // List now assigned at runtime { "gps_port", VIK_LAYER_PARAM_STRING, GROUP_DATA_MODE, N_("Serial Port:"), VIK_LAYER_WIDGET_COMBOBOX, params_ports, NULL, NULL }, { "gps_download_tracks", VIK_LAYER_PARAM_BOOLEAN, GROUP_DATA_MODE, N_("Download Tracks:"), VIK_LAYER_WIDGET_CHECKBUTTON, NULL, NULL, NULL }, { "gps_upload_tracks", VIK_LAYER_PARAM_BOOLEAN, GROUP_DATA_MODE, N_("Upload Tracks:"), VIK_LAYER_WIDGET_CHECKBUTTON, NULL, NULL, NULL }, { "gps_download_routes", VIK_LAYER_PARAM_BOOLEAN, GROUP_DATA_MODE, N_("Download Routes:"), VIK_LAYER_WIDGET_CHECKBUTTON, NULL, NULL, NULL }, { "gps_upload_routes", VIK_LAYER_PARAM_BOOLEAN, GROUP_DATA_MODE, N_("Upload Routes:"), VIK_LAYER_WIDGET_CHECKBUTTON, NULL, NULL, NULL }, { "gps_download_waypoints", VIK_LAYER_PARAM_BOOLEAN, GROUP_DATA_MODE, N_("Download Waypoints:"), VIK_LAYER_WIDGET_CHECKBUTTON, NULL, NULL, NULL }, { "gps_upload_waypoints", VIK_LAYER_PARAM_BOOLEAN, GROUP_DATA_MODE, N_("Upload Waypoints:"), VIK_LAYER_WIDGET_CHECKBUTTON, NULL, NULL, NULL }, #if defined (VIK_CONFIG_REALTIME_GPS_TRACKING) && defined (GPSD_API_MAJOR_VERSION) { "record_tracking", VIK_LAYER_PARAM_BOOLEAN, GROUP_REALTIME_MODE, N_("Recording tracks"), VIK_LAYER_WIDGET_CHECKBUTTON, NULL, NULL, NULL }, { "center_start_tracking", VIK_LAYER_PARAM_BOOLEAN, GROUP_REALTIME_MODE, N_("Jump to current position on start"), VIK_LAYER_WIDGET_CHECKBUTTON, NULL, NULL, NULL }, { "moving_map_method", VIK_LAYER_PARAM_UINT, GROUP_REALTIME_MODE, N_("Moving Map Method:"), VIK_LAYER_WIDGET_RADIOGROUP_STATIC, params_vehicle_position, NULL, NULL }, { "gpsd_host", VIK_LAYER_PARAM_STRING, GROUP_REALTIME_MODE, N_("Gpsd Host:"), VIK_LAYER_WIDGET_ENTRY, NULL, NULL, NULL }, { "gpsd_port", VIK_LAYER_PARAM_STRING, GROUP_REALTIME_MODE, N_("Gpsd Port:"), VIK_LAYER_WIDGET_ENTRY, NULL, NULL, NULL }, { "gpsd_retry_interval", VIK_LAYER_PARAM_STRING, GROUP_REALTIME_MODE, N_("Gpsd Retry Interval (seconds):"), VIK_LAYER_WIDGET_ENTRY, NULL, NULL, NULL }, #endif /* VIK_CONFIG_REALTIME_GPS_TRACKING */ }; enum { PARAM_PROTOCOL=0, PARAM_PORT, PARAM_DOWNLOAD_TRACKS, PARAM_UPLOAD_TRACKS, PARAM_DOWNLOAD_ROUTES, PARAM_UPLOAD_ROUTES, PARAM_DOWNLOAD_WAYPOINTS, PARAM_UPLOAD_WAYPOINTS, #if defined (VIK_CONFIG_REALTIME_GPS_TRACKING) && defined (GPSD_API_MAJOR_VERSION) PARAM_REALTIME_REC, PARAM_REALTIME_CENTER_START, PARAM_VEHICLE_POSITION, PARAM_GPSD_HOST, PARAM_GPSD_PORT, PARAM_GPSD_RETRY_INTERVAL, #endif /* VIK_CONFIG_REALTIME_GPS_TRACKING */ NUM_PARAMS}; VikLayerInterface vik_gps_layer_interface = { "GPS", N_("GPS"), NULL, &vikgpslayer_pixbuf, NULL, 0, gps_layer_params, NUM_PARAMS, params_groups, sizeof(params_groups)/sizeof(params_groups[0]), VIK_MENU_ITEM_ALL, (VikLayerFuncCreate) vik_gps_layer_create, (VikLayerFuncRealize) vik_gps_layer_realize, (VikLayerFuncPostRead) NULL, (VikLayerFuncFree) vik_gps_layer_free, (VikLayerFuncProperties) NULL, (VikLayerFuncDraw) vik_gps_layer_draw, (VikLayerFuncChangeCoordMode) gps_layer_change_coord_mode, (VikLayerFuncSetMenuItemsSelection) NULL, (VikLayerFuncGetMenuItemsSelection) NULL, (VikLayerFuncAddMenuItems) gps_layer_add_menu_items, (VikLayerFuncSublayerAddMenuItems) NULL, (VikLayerFuncSublayerRenameRequest) NULL, (VikLayerFuncSublayerToggleVisible) NULL, (VikLayerFuncSublayerTooltip) NULL, (VikLayerFuncLayerTooltip) gps_layer_tooltip, (VikLayerFuncLayerSelected) NULL, (VikLayerFuncMarshall) gps_layer_marshall, (VikLayerFuncUnmarshall) gps_layer_unmarshall, (VikLayerFuncSetParam) gps_layer_set_param, (VikLayerFuncGetParam) gps_layer_get_param, (VikLayerFuncReadFileData) NULL, (VikLayerFuncWriteFileData) NULL, (VikLayerFuncDeleteItem) NULL, (VikLayerFuncCutItem) NULL, (VikLayerFuncCopyItem) NULL, (VikLayerFuncPasteItem) NULL, (VikLayerFuncFreeCopiedItem) NULL, (VikLayerFuncDragDropRequest) gps_layer_drag_drop_request, (VikLayerFuncSelectClick) NULL, (VikLayerFuncSelectMove) NULL, (VikLayerFuncSelectRelease) NULL, (VikLayerFuncSelectedViewportMenu) NULL, }; enum {TRW_DOWNLOAD=0, TRW_UPLOAD, #if defined (VIK_CONFIG_REALTIME_GPS_TRACKING) && defined (GPSD_API_MAJOR_VERSION) TRW_REALTIME, #endif NUM_TRW}; static gchar * trw_names[] = { N_("GPS Download"), N_("GPS Upload"), #if defined (VIK_CONFIG_REALTIME_GPS_TRACKING) && defined (GPSD_API_MAJOR_VERSION) N_("GPS Realtime Tracking"), #endif }; #if defined (VIK_CONFIG_REALTIME_GPS_TRACKING) && defined (GPSD_API_MAJOR_VERSION) typedef struct { struct gps_data_t gpsd; VikGpsLayer *vgl; } VglGpsd; typedef struct { struct gps_fix_t fix; gint satellites_used; gboolean dirty; /* needs to be saved */ } GpsFix; #endif /* VIK_CONFIG_REALTIME_GPS_TRACKING */ struct _VikGpsLayer { VikLayer vl; VikTrwLayer * trw_children[NUM_TRW]; GList * children; /* used only for writing file */ int cur_read_child; /* used only for reading file */ #if defined (VIK_CONFIG_REALTIME_GPS_TRACKING) && defined (GPSD_API_MAJOR_VERSION) VglGpsd *vgpsd; gboolean realtime_tracking; /* set/reset only by the callback */ gboolean first_realtime_trackpoint; GpsFix realtime_fix; GpsFix last_fix; VikTrack *realtime_track; GIOChannel *realtime_io_channel; guint realtime_io_watch_id; guint realtime_retry_timer; GdkGC *realtime_track_gc; GdkGC *realtime_track_bg_gc; GdkGC *realtime_track_pt_gc; GdkGC *realtime_track_pt1_gc; GdkGC *realtime_track_pt2_gc; /* params */ gchar *gpsd_host; gchar *gpsd_port; gint gpsd_retry_interval; gboolean realtime_record; gboolean realtime_jump_to_start; guint vehicle_position; #endif /* VIK_CONFIG_REALTIME_GPS_TRACKING */ gchar *protocol; gchar *serial_port; gboolean download_tracks; gboolean download_routes; gboolean download_waypoints; gboolean upload_tracks; gboolean upload_routes; gboolean upload_waypoints; }; /** * Overwrite the static setup with dynamically generated GPS Babel device list */ static void gps_layer_inst_init ( VikGpsLayer *self ) { gint new_proto = 0; // +1 for luck (i.e the NULL terminator) gchar **new_protocols = g_malloc(1 + g_list_length(a_babel_device_list)*sizeof(gpointer)); GList *gl = g_list_first ( a_babel_device_list ); while ( gl ) { // should be using label property but use name for now // thus don't need to mess around converting label to name later on new_protocols[new_proto++] = ((BabelDevice*)gl->data)->name; gl = g_list_next ( gl ); } new_protocols[new_proto] = NULL; vik_gps_layer_interface.params[0].widget_data = new_protocols; // assigned to [0] because this^ is the GPS protocol in the params list } GType vik_gps_layer_get_type () { static GType val_type = 0; if (!val_type) { static const GTypeInfo val_info = { sizeof (VikGpsLayerClass), NULL, /* base_init */ NULL, /* base_finalize */ NULL, /* class init */ NULL, /* class_finalize */ NULL, /* class_data */ sizeof (VikGpsLayer), 0, (GInstanceInitFunc) gps_layer_inst_init, }; val_type = g_type_register_static ( VIK_LAYER_TYPE, "VikGpsLayer", &val_info, 0 ); } return val_type; } static VikGpsLayer *vik_gps_layer_create (VikViewport *vp) { int i; VikGpsLayer *rv = vik_gps_layer_new (vp); vik_layer_rename ( VIK_LAYER(rv), vik_gps_layer_interface.name ); for (i = 0; i < NUM_TRW; i++) { rv->trw_children[i] = VIK_TRW_LAYER(vik_layer_create ( VIK_LAYER_TRW, vp, NULL, FALSE )); vik_layer_set_menu_items_selection(VIK_LAYER(rv->trw_children[i]), VIK_MENU_ITEM_ALL & ~(VIK_MENU_ITEM_CUT|VIK_MENU_ITEM_DELETE)); } return rv; } static const gchar* gps_layer_tooltip ( VikGpsLayer *vgl ) { return vgl->protocol; } /* "Copy" */ static void gps_layer_marshall( VikGpsLayer *vgl, guint8 **data, gint *datalen ) { VikLayer *child_layer; guint8 *ld; gint ll; GByteArray* b = g_byte_array_new (); gint len; gint i; #define alm_append(obj, sz) \ len = (sz); \ g_byte_array_append ( b, (guint8 *)&len, sizeof(len) ); \ g_byte_array_append ( b, (guint8 *)(obj), len ); vik_layer_marshall_params(VIK_LAYER(vgl), &ld, &ll); alm_append(ld, ll); g_free(ld); for (i = 0; i < NUM_TRW; i++) { child_layer = VIK_LAYER(vgl->trw_children[i]); vik_layer_marshall(child_layer, &ld, &ll); if (ld) { alm_append(ld, ll); g_free(ld); } } *data = b->data; *datalen = b->len; g_byte_array_free(b, FALSE); #undef alm_append } /* "Paste" */ static VikGpsLayer *gps_layer_unmarshall( guint8 *data, gint len, VikViewport *vvp ) { #define alm_size (*(gint *)data) #define alm_next \ len -= sizeof(gint) + alm_size; \ data += sizeof(gint) + alm_size; VikGpsLayer *rv = vik_gps_layer_new(vvp); VikLayer *child_layer; gint i; vik_layer_unmarshall_params ( VIK_LAYER(rv), data+sizeof(gint), alm_size, vvp ); alm_next; i = 0; while (len>0 && i < NUM_TRW) { child_layer = vik_layer_unmarshall ( data + sizeof(gint), alm_size, vvp ); if (child_layer) { rv->trw_children[i++] = (VikTrwLayer *)child_layer; g_signal_connect_swapped ( G_OBJECT(child_layer), "update", G_CALLBACK(vik_layer_emit_update_secondary), rv ); } alm_next; } // g_print("gps_layer_unmarshall ended with len=%d\n", len); g_assert(len == 0); return rv; #undef alm_size #undef alm_next } static gboolean gps_layer_set_param ( VikGpsLayer *vgl, guint16 id, VikLayerParamData data, VikViewport *vp, gboolean is_file_operation ) { switch ( id ) { case PARAM_PROTOCOL: if (data.s) { g_free(vgl->protocol); // Backwards Compatibility: previous versions protocol = g_strdup(protocols_args[index]); else vgl->protocol = g_strdup(data.s); g_debug("%s: %s", __FUNCTION__, vgl->protocol); } else g_warning(_("Unknown GPS Protocol")); break; case PARAM_PORT: if (data.s) { g_free(vgl->serial_port); // Backwards Compatibility: previous versions serial_port = g_strdup(old_params_ports[index]); else vgl->serial_port = g_strdup(data.s); g_debug("%s: %s", __FUNCTION__, vgl->serial_port); } else g_warning(_("Unknown serial port device")); break; case PARAM_DOWNLOAD_TRACKS: vgl->download_tracks = data.b; break; case PARAM_UPLOAD_TRACKS: vgl->upload_tracks = data.b; break; case PARAM_DOWNLOAD_ROUTES: vgl->download_routes = data.b; break; case PARAM_UPLOAD_ROUTES: vgl->upload_routes = data.b; break; case PARAM_DOWNLOAD_WAYPOINTS: vgl->download_waypoints = data.b; break; case PARAM_UPLOAD_WAYPOINTS: vgl->upload_waypoints = data.b; break; #if defined (VIK_CONFIG_REALTIME_GPS_TRACKING) && defined (GPSD_API_MAJOR_VERSION) case PARAM_GPSD_HOST: if (vgl->gpsd_host) g_free(vgl->gpsd_host); vgl->gpsd_host = g_strdup(data.s); break; case PARAM_GPSD_PORT: if (vgl->gpsd_port) g_free(vgl->gpsd_port); vgl->gpsd_port = g_strdup(data.s); /* TODO: check for number */ break; case PARAM_GPSD_RETRY_INTERVAL: vgl->gpsd_retry_interval = strtol(data.s, NULL, 10); break; case PARAM_REALTIME_REC: vgl->realtime_record = data.b; break; case PARAM_REALTIME_CENTER_START: vgl->realtime_jump_to_start = data.b; break; case PARAM_VEHICLE_POSITION: vgl->vehicle_position = data.u; break; #endif /* VIK_CONFIG_REALTIME_GPS_TRACKING */ default: g_warning("gps_layer_set_param(): unknown parameter"); } return TRUE; } static VikLayerParamData gps_layer_get_param ( VikGpsLayer *vgl, guint16 id, gboolean is_file_operation ) { VikLayerParamData rv; switch ( id ) { case PARAM_PROTOCOL: rv.s = vgl->protocol; g_debug("%s: %s", __FUNCTION__, rv.s); break; case PARAM_PORT: rv.s = vgl->serial_port; g_debug("%s: %s", __FUNCTION__, rv.s); break; case PARAM_DOWNLOAD_TRACKS: rv.b = vgl->download_tracks; break; case PARAM_UPLOAD_TRACKS: rv.b = vgl->upload_tracks; break; case PARAM_DOWNLOAD_ROUTES: rv.b = vgl->download_routes; break; case PARAM_UPLOAD_ROUTES: rv.b = vgl->upload_routes; break; case PARAM_DOWNLOAD_WAYPOINTS: rv.b = vgl->download_waypoints; break; case PARAM_UPLOAD_WAYPOINTS: rv.b = vgl->upload_waypoints; break; #if defined (VIK_CONFIG_REALTIME_GPS_TRACKING) && defined (GPSD_API_MAJOR_VERSION) case PARAM_GPSD_HOST: rv.s = vgl->gpsd_host ? vgl->gpsd_host : ""; break; case PARAM_GPSD_PORT: rv.s = vgl->gpsd_port ? vgl->gpsd_port : g_strdup(DEFAULT_GPSD_PORT); break; case PARAM_GPSD_RETRY_INTERVAL: rv.s = g_strdup_printf("%d", vgl->gpsd_retry_interval); break; case PARAM_REALTIME_REC: rv.b = vgl->realtime_record; break; case PARAM_REALTIME_CENTER_START: rv.b = vgl->realtime_jump_to_start; break; case PARAM_VEHICLE_POSITION: rv.u = vgl->vehicle_position; break; #endif /* VIK_CONFIG_REALTIME_GPS_TRACKING */ default: g_warning(_("%s: unknown parameter"), __FUNCTION__); } return rv; } VikGpsLayer *vik_gps_layer_new (VikViewport *vp) { gint i; VikGpsLayer *vgl = VIK_GPS_LAYER ( g_object_new ( VIK_GPS_LAYER_TYPE, NULL ) ); vik_layer_set_type ( VIK_LAYER(vgl), VIK_LAYER_GPS ); for (i = 0; i < NUM_TRW; i++) { vgl->trw_children[i] = NULL; } vgl->children = NULL; vgl->cur_read_child = 0; #if defined (VIK_CONFIG_REALTIME_GPS_TRACKING) && defined (GPSD_API_MAJOR_VERSION) vgl->realtime_tracking = FALSE; vgl->first_realtime_trackpoint = FALSE; vgl->vgpsd = NULL; vgl->realtime_io_channel = NULL; vgl->realtime_io_watch_id = 0; vgl->realtime_retry_timer = 0; vgl->realtime_track_gc = vik_viewport_new_gc ( vp, "#203070", 2 ); vgl->realtime_track_bg_gc = vik_viewport_new_gc ( vp, "grey", 2 ); vgl->realtime_track_pt1_gc = vik_viewport_new_gc ( vp, "red", 2 ); vgl->realtime_track_pt2_gc = vik_viewport_new_gc ( vp, "green", 2 ); vgl->realtime_track_pt_gc = vgl->realtime_track_pt1_gc; vgl->realtime_track = NULL; /* Setting params here */ vgl->gpsd_host = g_strdup("localhost"); vgl->gpsd_port = g_strdup(DEFAULT_GPSD_PORT); vgl->realtime_record = TRUE; vgl->realtime_jump_to_start = TRUE; vgl->vehicle_position = VEHICLE_POSITION_ON_SCREEN; vgl->gpsd_retry_interval = 10; #endif /* VIK_CONFIG_REALTIME_GPS_TRACKING */ vgl->protocol = g_strdup("garmin"); vgl->serial_port = NULL; vgl->download_tracks = TRUE; vgl->download_waypoints = TRUE; vgl->download_routes = TRUE; vgl->upload_routes = TRUE; vgl->upload_tracks = TRUE; vgl->upload_waypoints = TRUE; #ifndef WINDOWS /* Attempt to auto set default USB serial port entry */ /* Ordered to make lowest device favourite if available */ if (g_access ("/dev/ttyUSB1", R_OK) == 0) { if (vgl->serial_port != NULL) g_free (vgl->serial_port); vgl->serial_port = g_strdup ("/dev/ttyUSB1"); } if (g_access ("/dev/ttyUSB0", R_OK) == 0) { if (vgl->serial_port != NULL) g_free (vgl->serial_port); vgl->serial_port = g_strdup ("/dev/ttyUSB0"); } #endif return vgl; } static void vik_gps_layer_draw ( VikGpsLayer *vgl, gpointer data ) { gint i; VikLayer *vl; VikLayer *trigger = VIK_LAYER(vik_viewport_get_trigger( VIK_VIEWPORT(data) )); for (i = 0; i < NUM_TRW; i++) { vl = VIK_LAYER(vgl->trw_children[i]); if (vl == trigger) { if ( vik_viewport_get_half_drawn ( VIK_VIEWPORT(data) ) ) { vik_viewport_set_half_drawn ( VIK_VIEWPORT(data), FALSE ); vik_viewport_snapshot_load( VIK_VIEWPORT(data) ); } else { vik_viewport_snapshot_save( VIK_VIEWPORT(data) ); } } if (!vik_viewport_get_half_drawn( VIK_VIEWPORT(data))) vik_layer_draw ( vl, data ); } #if defined (VIK_CONFIG_REALTIME_GPS_TRACKING) && defined (GPSD_API_MAJOR_VERSION) if (vgl->realtime_tracking) { if (VIK_LAYER(vgl) == trigger) { if ( vik_viewport_get_half_drawn ( VIK_VIEWPORT(data) ) ) { vik_viewport_set_half_drawn ( VIK_VIEWPORT(data), FALSE ); vik_viewport_snapshot_load( VIK_VIEWPORT(data) ); } else { vik_viewport_snapshot_save( VIK_VIEWPORT(data) ); } } if (!vik_viewport_get_half_drawn( VIK_VIEWPORT(data))) realtime_tracking_draw(vgl, VIK_VIEWPORT(data)); } #endif /* VIK_CONFIG_REALTIME_GPS_TRACKING */ } static void gps_layer_change_coord_mode ( VikGpsLayer *vgl, VikCoordMode mode ) { gint i; for (i = 0; i < NUM_TRW; i++) { vik_layer_change_coord_mode(VIK_LAYER(vgl->trw_children[i]), mode); } } static void gps_layer_add_menu_items( VikGpsLayer *vgl, GtkMenu *menu, gpointer vlp ) { static gpointer pass_along[2]; GtkWidget *item; pass_along[0] = vgl; pass_along[1] = vlp; item = gtk_menu_item_new(); gtk_menu_shell_append ( GTK_MENU_SHELL(menu), item ); gtk_widget_show ( item ); /* Now with icons */ item = gtk_image_menu_item_new_with_mnemonic ( _("_Upload to GPS") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_GO_UP, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(gps_upload_cb), pass_along ); gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); gtk_widget_show ( item ); item = gtk_image_menu_item_new_with_mnemonic ( _("Download from _GPS") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_GO_DOWN, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(gps_download_cb), pass_along ); gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); gtk_widget_show ( item ); #if defined (VIK_CONFIG_REALTIME_GPS_TRACKING) && defined (GPSD_API_MAJOR_VERSION) item = gtk_image_menu_item_new_with_mnemonic ( vgl->realtime_tracking ? "_Stop Realtime Tracking" : "_Start Realtime Tracking" ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, vgl->realtime_tracking ? gtk_image_new_from_stock (GTK_STOCK_MEDIA_STOP, GTK_ICON_SIZE_MENU) : gtk_image_new_from_stock (GTK_STOCK_MEDIA_PLAY, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(gps_start_stop_tracking_cb), pass_along ); gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); gtk_widget_show ( item ); item = gtk_menu_item_new(); gtk_menu_shell_append ( GTK_MENU_SHELL(menu), item ); gtk_widget_show ( item ); item = gtk_image_menu_item_new_with_mnemonic ( _("Empty _Realtime") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_REMOVE, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(gps_empty_realtime_cb), pass_along ); gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); gtk_widget_show ( item ); #endif /* VIK_CONFIG_REALTIME_GPS_TRACKING */ item = gtk_image_menu_item_new_with_mnemonic ( _("E_mpty Upload") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_REMOVE, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(gps_empty_upload_cb), pass_along ); gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); gtk_widget_show ( item ); item = gtk_image_menu_item_new_with_mnemonic ( _("_Empty Download") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_REMOVE, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(gps_empty_download_cb), pass_along ); gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); gtk_widget_show ( item ); item = gtk_image_menu_item_new_with_mnemonic ( _("Empty _All") ); gtk_image_menu_item_set_image ( (GtkImageMenuItem*)item, gtk_image_new_from_stock (GTK_STOCK_REMOVE, GTK_ICON_SIZE_MENU) ); g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(gps_empty_all_cb), pass_along ); gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); gtk_widget_show ( item ); } static void disconnect_layer_signal ( VikLayer *vl, VikGpsLayer *vgl ) { guint number_handlers = DISCONNECT_UPDATE_SIGNAL(vl,vgl); if ( number_handlers != 1 ) { /* NB It's not fatal if this gives 2 for example! Hence removal of the g_assert This happens when copied GPS layer is deleted (not sure why the number_handlers would be 2) I don't think there's any side effects and certainly better than the program just aborting */ g_warning(_("Unexpected number of disconnected handlers: %d"), number_handlers); } } static void vik_gps_layer_free ( VikGpsLayer *vgl ) { gint i; for (i = 0; i < NUM_TRW; i++) { if (vgl->vl.realized) disconnect_layer_signal(VIK_LAYER(vgl->trw_children[i]), vgl); g_object_unref(vgl->trw_children[i]); } #if defined (VIK_CONFIG_REALTIME_GPS_TRACKING) && defined (GPSD_API_MAJOR_VERSION) rt_gpsd_disconnect(vgl); if (vgl->realtime_track_gc != NULL) g_object_unref(vgl->realtime_track_gc); if (vgl->realtime_track_bg_gc != NULL) g_object_unref(vgl->realtime_track_bg_gc); if (vgl->realtime_track_pt1_gc != NULL) g_object_unref(vgl->realtime_track_pt1_gc); if (vgl->realtime_track_pt2_gc != NULL) g_object_unref(vgl->realtime_track_pt2_gc); #endif /* VIK_CONFIG_REALTIME_GPS_TRACKING */ } gboolean vik_gps_layer_delete ( VikGpsLayer *vgl, GtkTreeIter *iter ) { gint i; VikLayer *l = VIK_LAYER( vik_treeview_item_get_pointer ( VIK_LAYER(vgl)->vt, iter ) ); gboolean was_visible = l->visible; vik_treeview_item_delete ( VIK_LAYER(vgl)->vt, iter ); for (i = 0; i < NUM_TRW; i++) { if (VIK_LAYER(vgl->trw_children[i]) == l) vgl->trw_children[i] = NULL; } g_assert(DISCONNECT_UPDATE_SIGNAL(l,vgl)==1); g_object_unref ( l ); return was_visible; } static void vik_gps_layer_realize ( VikGpsLayer *vgl, VikTreeview *vt, GtkTreeIter *layer_iter ) { GtkTreeIter iter; int ix; // TODO set to garmin by default //if (a_babel_device_list) // device = ((BabelDevice*)g_list_nth_data(a_babel_device_list, last_active))->name; // Need to access uibuild widgets somehow.... for (ix = 0; ix < NUM_TRW; ix++) { VikLayer * trw = VIK_LAYER(vgl->trw_children[ix]); vik_treeview_add_layer ( VIK_LAYER(vgl)->vt, layer_iter, &iter, _(trw_names[ix]), vgl, trw, trw->type, trw->type ); if ( ! trw->visible ) vik_treeview_item_set_visible ( VIK_LAYER(vgl)->vt, &iter, FALSE ); vik_layer_realize ( trw, VIK_LAYER(vgl)->vt, &iter ); g_signal_connect_swapped ( G_OBJECT(trw), "update", G_CALLBACK(vik_layer_emit_update_secondary), vgl ); } } const GList *vik_gps_layer_get_children ( VikGpsLayer *vgl ) { int i; if (vgl->children == NULL) { for (i = NUM_TRW - 1; i >= 0; i--) vgl->children = g_list_prepend(vgl->children, vgl->trw_children[i]); } return vgl->children; } VikTrwLayer * vik_gps_layer_get_a_child(VikGpsLayer *vgl) { g_assert ((vgl->cur_read_child >= 0) && (vgl->cur_read_child < NUM_TRW)); VikTrwLayer * vtl = vgl->trw_children[vgl->cur_read_child]; if (++(vgl->cur_read_child) >= NUM_TRW) vgl->cur_read_child = 0; return(vtl); } gboolean vik_gps_layer_is_empty ( VikGpsLayer *vgl ) { if ( vgl->trw_children[0] ) return FALSE; return TRUE; } static void gps_layer_drag_drop_request ( VikGpsLayer *val_src, VikGpsLayer *val_dest, GtkTreeIter *src_item_iter, GtkTreePath *dest_path ) { VikTreeview *vt = VIK_LAYER(val_src)->vt; VikLayer *vl = vik_treeview_item_get_pointer(vt, src_item_iter); gchar *dp; dp = gtk_tree_path_to_string(dest_path); /* vik_gps_layer_delete unrefs, but we don't want that here. * we're still using the layer. */ g_object_ref ( vl ); vik_gps_layer_delete(val_src, src_item_iter); g_free(dp); } static void gps_session_delete(GpsSession *sess) { /* TODO */ g_mutex_free(sess->mutex); g_free(sess->cmd_args); g_free(sess); } static void set_total_count(gint cnt, GpsSession *sess) { gchar s[128]; gdk_threads_enter(); g_mutex_lock(sess->mutex); if (sess->ok) { const gchar *tmp_str; if (sess->direction == GPS_DOWN) { switch (sess->progress_type) { case WPT: tmp_str = ngettext("Downloading %d waypoint...", "Downloading %d waypoints...", cnt); sess->total_count = cnt; break; case TRK: tmp_str = ngettext("Downloading %d trackpoint...", "Downloading %d trackpoints...", cnt); sess->total_count = cnt; break; default: { // Maybe a gpsbabel bug/feature (upto at least v1.4.3 or maybe my Garmin device) but the count always seems x2 too many for routepoints gint mycnt = (cnt / 2) + 1; tmp_str = ngettext("Downloading %d routepoint...", "Downloading %d routepoints...", mycnt); break; sess->total_count = mycnt; } } } else { switch (sess->progress_type) { case WPT: tmp_str = ngettext("Uploading %d waypoint...", "Uploading %d waypoints...", cnt); break; case TRK: tmp_str = ngettext("Uploading %d trackpoint...", "Uploading %d trackpoints...", cnt); break; default: tmp_str = ngettext("Uploading %d routepoint...", "Uploading %d routepoints...", cnt); break; } } g_snprintf(s, 128, tmp_str, cnt); gtk_label_set_text ( GTK_LABEL(sess->progress_label), s ); gtk_widget_show ( sess->progress_label ); sess->total_count = cnt; } g_mutex_unlock(sess->mutex); gdk_threads_leave(); } static void set_current_count(gint cnt, GpsSession *sess) { gchar s[128]; const gchar *tmp_str; gdk_threads_enter(); g_mutex_lock(sess->mutex); if (sess->ok) { if (cnt < sess->total_count) { if (sess->direction == GPS_DOWN) { switch (sess->progress_type) { case WPT: tmp_str = ngettext("Downloaded %d out of %d waypoint...", "Downloaded %d out of %d waypoints...", sess->total_count); break; case TRK: tmp_str = ngettext("Downloaded %d out of %d trackpoint...", "Downloaded %d out of %d trackpoints...", sess->total_count); break; default: tmp_str = ngettext("Downloaded %d out of %d routepoint...", "Downloaded %d out of %d routepoints...", sess->total_count); break; } } else { switch (sess->progress_type) { case WPT: tmp_str = ngettext("Uploaded %d out of %d waypoint...", "Uploaded %d out of %d waypoints...", sess->total_count); break; case TRK: tmp_str = ngettext("Uploaded %d out of %d trackpoint...", "Uploaded %d out of %d trackpoints...", sess->total_count); break; default: tmp_str = ngettext("Uploaded %d out of %d routepoint...", "Uploaded %d out of %d routepoints...", sess->total_count); break; } } g_snprintf(s, 128, tmp_str, cnt, sess->total_count); } else { if (sess->direction == GPS_DOWN) { switch (sess->progress_type) { case WPT: tmp_str = ngettext("Downloaded %d waypoint", "Downloaded %d waypoints", cnt); break; case TRK: tmp_str = ngettext("Downloaded %d trackpoint", "Downloaded %d trackpoints", cnt); break; default: tmp_str = ngettext("Downloaded %d routepoint", "Downloaded %d routepoints", cnt); break; } } else { switch (sess->progress_type) { case WPT: tmp_str = ngettext("Uploaded %d waypoint", "Uploaded %d waypoints", cnt); break; case TRK: tmp_str = ngettext("Uploaded %d trackpoint", "Uploaded %d trackpoints", cnt); break; default: tmp_str = ngettext("Uploaded %d routepoint", "Uploaded %d routepoints", cnt); break; } } g_snprintf(s, 128, tmp_str, cnt); } gtk_label_set_text ( GTK_LABEL(sess->progress_label), s ); } g_mutex_unlock(sess->mutex); gdk_threads_leave(); } static void set_gps_info(const gchar *info, GpsSession *sess) { gchar s[256]; gdk_threads_enter(); g_mutex_lock(sess->mutex); if (sess->ok) { g_snprintf(s, 256, _("GPS Device: %s"), info); gtk_label_set_text ( GTK_LABEL(sess->gps_label), s ); } g_mutex_unlock(sess->mutex); gdk_threads_leave(); } /* * Common processing for GPS Device information * It doesn't matter whether we're uploading or downloading */ static void process_line_for_gps_info ( const gchar *line, GpsSession *sess ) { if (strstr(line, "PRDDAT")) { gchar **tokens = g_strsplit(line, " ", 0); gchar info[128]; int ilen = 0; int i; int n_tokens = 0; while (tokens[n_tokens]) n_tokens++; // I'm not entirely clear what information this is trying to get... // Obviously trying to decipher some kind of text/naming scheme // Anyway this will be superceded if there is 'Unit:' information if (n_tokens > 8) { for (i=8; tokens[i] && ilen < sizeof(info)-2 && strcmp(tokens[i], "00"); i++) { guint ch; sscanf(tokens[i], "%x", &ch); info[ilen++] = ch; } info[ilen++] = 0; set_gps_info(info, sess); } g_strfreev(tokens); } /* eg: "Unit:\teTrex Legend HCx Software Version 2.90\n" */ if (strstr(line, "Unit:")) { gchar **tokens = g_strsplit(line, "\t", 0); int n_tokens = 0; while (tokens[n_tokens]) n_tokens++; if (n_tokens > 1) { set_gps_info(tokens[1], sess); } g_strfreev(tokens); } } static void gps_download_progress_func(BabelProgressCode c, gpointer data, GpsSession * sess ) { gchar *line; gdk_threads_enter (); g_mutex_lock(sess->mutex); if (!sess->ok) { g_mutex_unlock(sess->mutex); gps_session_delete(sess); gdk_threads_leave(); g_thread_exit ( NULL ); } g_mutex_unlock(sess->mutex); gdk_threads_leave (); switch(c) { case BABEL_DIAG_OUTPUT: line = (gchar *)data; gdk_threads_enter(); g_mutex_lock(sess->mutex); if (sess->ok) { gtk_label_set_text ( GTK_LABEL(sess->status_label), _("Status: Working...") ); } g_mutex_unlock(sess->mutex); gdk_threads_leave(); /* tells us the type of items that will follow */ if (strstr(line, "Xfer Wpt")) { sess->progress_label = sess->wp_label; sess->progress_type = WPT; } if (strstr(line, "Xfer Trk")) { sess->progress_label = sess->trk_label; sess->progress_type = TRK; } if (strstr(line, "Xfer Rte")) { sess->progress_label = sess->rte_label; sess->progress_type = RTE; } process_line_for_gps_info ( line, sess ); if (strstr(line, "RECORD")) { int lsb, msb, cnt; if (strlen(line) > 20) { sscanf(line+17, "%x", &lsb); sscanf(line+20, "%x", &msb); cnt = lsb + msb * 256; set_total_count(cnt, sess); sess->count = 0; } } if ( strstr(line, "WPTDAT") || strstr(line, "TRKHDR") || strstr(line, "TRKDAT") || strstr(line, "RTEHDR") || strstr(line, "RTEWPT") ) { sess->count++; set_current_count(sess->count, sess); } break; case BABEL_DONE: break; default: break; } } static void gps_upload_progress_func(BabelProgressCode c, gpointer data, GpsSession * sess ) { gchar *line; static int cnt = 0; gdk_threads_enter (); g_mutex_lock(sess->mutex); if (!sess->ok) { g_mutex_unlock(sess->mutex); gps_session_delete(sess); gdk_threads_leave(); g_thread_exit ( NULL ); } g_mutex_unlock(sess->mutex); gdk_threads_leave (); switch(c) { case BABEL_DIAG_OUTPUT: line = (gchar *)data; gdk_threads_enter(); g_mutex_lock(sess->mutex); if (sess->ok) { gtk_label_set_text ( GTK_LABEL(sess->status_label), _("Status: Working...") ); } g_mutex_unlock(sess->mutex); gdk_threads_leave(); process_line_for_gps_info ( line, sess ); if (strstr(line, "RECORD")) { int lsb, msb; if (strlen(line) > 20) { sscanf(line+17, "%x", &lsb); sscanf(line+20, "%x", &msb); cnt = lsb + msb * 256; /* set_total_count(cnt, sess); */ sess->count = 0; } } if ( strstr(line, "WPTDAT")) { if (sess->count == 0) { sess->progress_label = sess->wp_label; sess->progress_type = WPT; set_total_count(cnt, sess); } sess->count++; set_current_count(sess->count, sess); } if ( strstr(line, "RTEHDR") || strstr(line, "RTEWPT") ) { if (sess->count == 0) { sess->progress_label = sess->rte_label; sess->progress_type = RTE; // Maybe a gpsbabel bug/feature (upto at least v1.4.3 or maybe my Garmin device) but the count always seems x2 too many for routepoints // Anyway since we're uploading - we should know how many points we're going to put! cnt = (cnt / 2) + 1; set_total_count(cnt, sess); } sess->count++; set_current_count(sess->count, sess); } if ( strstr(line, "TRKHDR") || strstr(line, "TRKDAT") ) { if (sess->count == 0) { sess->progress_label = sess->trk_label; sess->progress_type = TRK; set_total_count(cnt, sess); } sess->count++; set_current_count(sess->count, sess); } break; case BABEL_DONE: break; default: break; } } static void gps_comm_thread(GpsSession *sess) { gboolean result; if (sess->direction == GPS_DOWN) result = a_babel_convert_from (sess->vtl, sess->cmd_args, sess->port, (BabelStatusFunc) gps_download_progress_func, sess, NULL); else { result = a_babel_convert_to (sess->vtl, sess->track, sess->cmd_args, sess->port, (BabelStatusFunc) gps_upload_progress_func, sess); } if (!result) { gtk_label_set_text ( GTK_LABEL(sess->status_label), _("Error: couldn't find gpsbabel.") ); } else { g_mutex_lock(sess->mutex); if (sess->ok) { gtk_label_set_text ( GTK_LABEL(sess->status_label), _("Done.") ); gtk_dialog_set_response_sensitive ( GTK_DIALOG(sess->dialog), GTK_RESPONSE_ACCEPT, TRUE ); gtk_dialog_set_response_sensitive ( GTK_DIALOG(sess->dialog), GTK_RESPONSE_REJECT, FALSE ); /* Do not change the view if we are following the current GPS position */ #if defined (VIK_CONFIG_REALTIME_GPS_TRACKING) && defined (GPSD_API_MAJOR_VERSION) if (!sess->realtime_tracking) #endif { if ( sess->vvp && sess->direction == GPS_DOWN ) { /* View the data available */ vik_trw_layer_auto_set_view ( sess->vtl, sess->vvp) ; vik_layer_emit_update ( VIK_LAYER(sess->vtl) ); // NB update from background thread } } } else { /* canceled */ } g_mutex_unlock(sess->mutex); } g_mutex_lock(sess->mutex); if (sess->ok) { sess->ok = FALSE; g_mutex_unlock(sess->mutex); } else { g_mutex_unlock(sess->mutex); gps_session_delete(sess); } g_thread_exit(NULL); } /** * vik_gps_comm: * @vtl: The TrackWaypoint layer to operate on * @track: Operate on a particular track when specified * @dir: The direction of the transfer * @protocol: The GPS device communication protocol * @port: The GPS serial port * @tracking: If tracking then viewport display update will be skipped * @vvp: A viewport is required as the display may get updated * @vlp: A layers panel is needed for uploading as the items maybe modified * @do_tracks: Whether tracks shoud be processed * @do_waypoints: Whether waypoints shoud be processed * @turn_off: Whether we should attempt to turn off the GPS device after the transfer (only some devices support this) * * Talk to a GPS Device using a thread which updates a dialog with the progress */ gint vik_gps_comm ( VikTrwLayer *vtl, VikTrack *track, vik_gps_dir dir, gchar *protocol, gchar *port, gboolean tracking, VikViewport *vvp, VikLayersPanel *vlp, gboolean do_tracks, gboolean do_routes, gboolean do_waypoints, gboolean turn_off ) { GpsSession *sess = g_malloc(sizeof(GpsSession)); char *tracks = NULL; char *routes = NULL; char *waypoints = NULL; sess->mutex = g_mutex_new(); sess->direction = dir; sess->vtl = vtl; sess->track = track; sess->port = g_strdup(port); sess->ok = TRUE; sess->window_title = (dir == GPS_DOWN) ? _("GPS Download") : _("GPS Upload"); sess->vvp = vvp; // This must be done inside the main thread as the uniquify causes screen updates // (originally performed this nearer the point of upload in the thread) if ( dir == GPS_UP ) { // Enforce unique names in the layer upload to the GPS device // NB this may only be a Garmin device restriction (and may be not every Garmin device either...) // Thus this maintains the older code in built restriction if ( ! vik_trw_layer_uniquify ( sess->vtl, vlp ) ) vik_statusbar_set_message ( vik_window_get_statusbar (VIK_WINDOW(VIK_GTK_WINDOW_FROM_LAYER(sess->vtl))), VIK_STATUSBAR_INFO, _("Warning - GPS Upload items may overwrite each other") ); } #if defined (VIK_CONFIG_REALTIME_GPS_TRACKING) && defined (GPSD_API_MAJOR_VERSION) sess->realtime_tracking = tracking; #endif if (do_tracks) tracks = "-t"; else tracks = ""; if (do_routes) routes = "-r"; else routes = ""; if (do_waypoints) waypoints = "-w"; else waypoints = ""; sess->cmd_args = g_strdup_printf("-D 9 %s %s %s -%c %s", tracks, routes, waypoints, (dir == GPS_DOWN) ? 'i' : 'o', protocol); tracks = NULL; waypoints = NULL; // Only create dialog if we're going to do some transferring if ( do_tracks || do_waypoints || do_routes ) { sess->dialog = gtk_dialog_new_with_buttons ( "", VIK_GTK_WINDOW_FROM_LAYER(vtl), 0, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, NULL ); gtk_dialog_set_response_sensitive ( GTK_DIALOG(sess->dialog), GTK_RESPONSE_ACCEPT, FALSE ); gtk_window_set_title ( GTK_WINDOW(sess->dialog), sess->window_title ); sess->status_label = gtk_label_new (_("Status: detecting gpsbabel")); gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(sess->dialog)->vbox), sess->status_label, FALSE, FALSE, 5 ); gtk_widget_show_all(sess->status_label); sess->gps_label = gtk_label_new (_("GPS device: N/A")); sess->ver_label = gtk_label_new (""); sess->id_label = gtk_label_new (""); sess->wp_label = gtk_label_new (""); sess->trk_label = gtk_label_new (""); sess->rte_label = gtk_label_new (""); gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(sess->dialog)->vbox), sess->gps_label, FALSE, FALSE, 5 ); gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(sess->dialog)->vbox), sess->wp_label, FALSE, FALSE, 5 ); gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(sess->dialog)->vbox), sess->trk_label, FALSE, FALSE, 5 ); gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(sess->dialog)->vbox), sess->rte_label, FALSE, FALSE, 5 ); gtk_widget_show_all(sess->dialog); sess->progress_label = sess->wp_label; sess->total_count = -1; // Starting gps read/write thread g_thread_create((GThreadFunc)gps_comm_thread, sess, FALSE, NULL ); gtk_dialog_set_default_response ( GTK_DIALOG(sess->dialog), GTK_RESPONSE_ACCEPT ); gtk_dialog_run(GTK_DIALOG(sess->dialog)); gtk_widget_destroy(sess->dialog); } else { if ( !turn_off ) a_dialog_info_msg ( VIK_GTK_WINDOW_FROM_LAYER(vtl), _("No GPS items selected for transfer.") ); } g_mutex_lock(sess->mutex); if (sess->ok) { sess->ok = FALSE; /* tell thread to stop */ g_mutex_unlock(sess->mutex); } else { if ( turn_off ) { // No need for thread for powering off device (should be quick operation...) - so use babel command directly: gchar *device_off = g_strdup_printf("-i %s,%s", protocol, "power_off"); gboolean result = a_babel_convert_from (NULL, (const char*)device_off, (const char*)port, NULL, NULL, NULL); if ( !result ) a_dialog_error_msg ( VIK_GTK_WINDOW_FROM_LAYER(vtl), _("Could not turn off device.") ); g_free ( device_off ); } g_mutex_unlock(sess->mutex); gps_session_delete(sess); } return 0; } static void gps_upload_cb( gpointer layer_and_vlp[2] ) { VikGpsLayer *vgl = (VikGpsLayer *)layer_and_vlp[0]; VikLayersPanel *vlp = VIK_LAYERS_PANEL(layer_and_vlp[1]); VikTrwLayer *vtl = vgl->trw_children[TRW_UPLOAD]; VikWindow *vw = VIK_WINDOW(VIK_GTK_WINDOW_FROM_LAYER(vgl)); VikViewport *vvp = vik_window_viewport(vw); vik_gps_comm(vtl, NULL, GPS_UP, vgl->protocol, vgl->serial_port, FALSE, vvp, vlp, vgl->upload_tracks, vgl->upload_routes, vgl->upload_waypoints, FALSE); } static void gps_download_cb( gpointer layer_and_vlp[2] ) { VikGpsLayer *vgl = (VikGpsLayer *)layer_and_vlp[0]; VikTrwLayer *vtl = vgl->trw_children[TRW_DOWNLOAD]; VikWindow *vw = VIK_WINDOW(VIK_GTK_WINDOW_FROM_LAYER(vgl)); VikViewport *vvp = vik_window_viewport(vw); #if defined (VIK_CONFIG_REALTIME_GPS_TRACKING) && defined (GPSD_API_MAJOR_VERSION) vik_gps_comm(vtl, NULL, GPS_DOWN, vgl->protocol, vgl->serial_port, vgl->realtime_tracking, vvp, NULL, vgl->download_tracks, vgl->download_routes, vgl->download_waypoints, FALSE); #else vik_gps_comm(vtl, NULL, GPS_DOWN, vgl->protocol, vgl->serial_port, FALSE, vvp, NULL, vgl->download_tracks, vgl->download_routes, vgl->download_waypoints, FALSE); #endif } static void gps_empty_upload_cb( gpointer layer_and_vlp[2] ) { VikGpsLayer *vgl = (VikGpsLayer *)layer_and_vlp[0]; // Get confirmation from the user if ( ! a_dialog_yes_or_no ( VIK_GTK_WINDOW_FROM_WIDGET(layer_and_vlp[1]), _("Are you sure you want to delete GPS Upload data?"), NULL ) ) return; vik_trw_layer_delete_all_waypoints ( vgl-> trw_children[TRW_UPLOAD]); vik_trw_layer_delete_all_tracks ( vgl-> trw_children[TRW_UPLOAD]); vik_trw_layer_delete_all_routes ( vgl-> trw_children[TRW_UPLOAD]); } static void gps_empty_download_cb( gpointer layer_and_vlp[2] ) { VikGpsLayer *vgl = (VikGpsLayer *)layer_and_vlp[0]; // Get confirmation from the user if ( ! a_dialog_yes_or_no ( VIK_GTK_WINDOW_FROM_WIDGET(layer_and_vlp[1]), _("Are you sure you want to delete GPS Download data?"), NULL ) ) return; vik_trw_layer_delete_all_waypoints ( vgl-> trw_children[TRW_DOWNLOAD]); vik_trw_layer_delete_all_tracks ( vgl-> trw_children[TRW_DOWNLOAD]); vik_trw_layer_delete_all_routes ( vgl-> trw_children[TRW_DOWNLOAD]); } #if defined (VIK_CONFIG_REALTIME_GPS_TRACKING) && defined (GPSD_API_MAJOR_VERSION) static void gps_empty_realtime_cb( gpointer layer_and_vlp[2] ) { VikGpsLayer *vgl = (VikGpsLayer *)layer_and_vlp[0]; // Get confirmation from the user if ( ! a_dialog_yes_or_no ( VIK_GTK_WINDOW_FROM_WIDGET(layer_and_vlp[1]), _("Are you sure you want to delete GPS Realtime data?"), NULL ) ) return; vik_trw_layer_delete_all_waypoints ( vgl-> trw_children[TRW_REALTIME]); vik_trw_layer_delete_all_tracks ( vgl-> trw_children[TRW_REALTIME]); } #endif static void gps_empty_all_cb( gpointer layer_and_vlp[2] ) { VikGpsLayer *vgl = (VikGpsLayer *)layer_and_vlp[0]; // Get confirmation from the user if ( ! a_dialog_yes_or_no ( VIK_GTK_WINDOW_FROM_WIDGET(layer_and_vlp[1]), _("Are you sure you want to delete All GPS data?"), NULL ) ) return; vik_trw_layer_delete_all_waypoints ( vgl-> trw_children[TRW_UPLOAD]); vik_trw_layer_delete_all_tracks ( vgl-> trw_children[TRW_UPLOAD]); vik_trw_layer_delete_all_routes ( vgl-> trw_children[TRW_UPLOAD]); vik_trw_layer_delete_all_waypoints ( vgl-> trw_children[TRW_DOWNLOAD]); vik_trw_layer_delete_all_tracks ( vgl-> trw_children[TRW_DOWNLOAD]); vik_trw_layer_delete_all_routes ( vgl-> trw_children[TRW_DOWNLOAD]); #if defined (VIK_CONFIG_REALTIME_GPS_TRACKING) && defined (GPSD_API_MAJOR_VERSION) vik_trw_layer_delete_all_waypoints ( vgl-> trw_children[TRW_REALTIME]); vik_trw_layer_delete_all_tracks ( vgl-> trw_children[TRW_REALTIME]); #endif } #if defined (VIK_CONFIG_REALTIME_GPS_TRACKING) && defined (GPSD_API_MAJOR_VERSION) static void realtime_tracking_draw(VikGpsLayer *vgl, VikViewport *vp) { struct LatLon ll; VikCoord nw, se; struct LatLon lnw, lse; vik_viewport_screen_to_coord ( vp, -20, -20, &nw ); vik_viewport_screen_to_coord ( vp, vik_viewport_get_width(vp)+20, vik_viewport_get_width(vp)+20, &se ); vik_coord_to_latlon ( &nw, &lnw ); vik_coord_to_latlon ( &se, &lse ); if ( vgl->realtime_fix.fix.latitude > lse.lat && vgl->realtime_fix.fix.latitude < lnw.lat && vgl->realtime_fix.fix.longitude > lnw.lon && vgl->realtime_fix.fix.longitude < lse.lon ) { VikCoord gps; gint x, y; gint half_back_x, half_back_y; gint half_back_bg_x, half_back_bg_y; gint pt_x, pt_y; gint ptbg_x; gint side1_x, side1_y, side2_x, side2_y; gint side1bg_x, side1bg_y, side2bg_x, side2bg_y; ll.lat = vgl->realtime_fix.fix.latitude; ll.lon = vgl->realtime_fix.fix.longitude; vik_coord_load_from_latlon ( &gps, vik_viewport_get_coord_mode(vp), &ll); vik_viewport_coord_to_screen ( vp, &gps, &x, &y ); gdouble heading_cos = cos(DEG2RAD(vgl->realtime_fix.fix.track)); gdouble heading_sin = sin(DEG2RAD(vgl->realtime_fix.fix.track)); half_back_y = y+8*heading_cos; half_back_x = x-8*heading_sin; half_back_bg_y = y+10*heading_cos; half_back_bg_x = x-10*heading_sin; pt_y = half_back_y-24*heading_cos; pt_x = half_back_x+24*heading_sin; //ptbg_y = half_back_bg_y-28*heading_cos; ptbg_x = half_back_bg_x+28*heading_sin; side1_y = half_back_y+9*heading_sin; side1_x = half_back_x+9*heading_cos; side1bg_y = half_back_bg_y+11*heading_sin; side1bg_x = half_back_bg_x+11*heading_cos; side2_y = half_back_y-9*heading_sin; side2_x = half_back_x-9*heading_cos; side2bg_y = half_back_bg_y-11*heading_sin; side2bg_x = half_back_bg_x-11*heading_cos; GdkPoint trian[3] = { { pt_x, pt_y }, {side1_x, side1_y}, {side2_x, side2_y} }; GdkPoint trian_bg[3] = { { ptbg_x, pt_y }, {side1bg_x, side1bg_y}, {side2bg_x, side2bg_y} }; vik_viewport_draw_polygon ( vp, vgl->realtime_track_bg_gc, TRUE, trian_bg, 3 ); vik_viewport_draw_polygon ( vp, vgl->realtime_track_gc, TRUE, trian, 3 ); vik_viewport_draw_rectangle ( vp, (vgl->realtime_fix.fix.mode > MODE_2D) ? vgl->realtime_track_pt2_gc : vgl->realtime_track_pt1_gc, TRUE, x-2, y-2, 4, 4 ); //vgl->realtime_track_pt_gc = (vgl->realtime_track_pt_gc == vgl->realtime_track_pt1_gc) ? vgl->realtime_track_pt2_gc : vgl->realtime_track_pt1_gc; } } static void create_realtime_trackpoint(VikGpsLayer *vgl, gboolean forced) { struct LatLon ll; GList *last_tp; /* Note that fix.time is a double, but it should not affect the precision for most GPS */ time_t cur_timestamp = vgl->realtime_fix.fix.time; time_t last_timestamp = vgl->last_fix.fix.time; if (cur_timestamp < last_timestamp) { return; } if (vgl->realtime_record && vgl->realtime_fix.dirty) { gboolean replace = FALSE; int heading = (int)floor(vgl->realtime_fix.fix.track); int last_heading = (int)floor(vgl->last_fix.fix.track); int alt = isnan(vgl->realtime_fix.fix.altitude) ? VIK_DEFAULT_ALTITUDE : floor(vgl->realtime_fix.fix.altitude); int last_alt = isnan(vgl->last_fix.fix.altitude) ? VIK_DEFAULT_ALTITUDE : floor(vgl->last_fix.fix.altitude); if (((last_tp = g_list_last(vgl->realtime_track->trackpoints)) != NULL) && (vgl->realtime_fix.fix.mode > MODE_2D) && (vgl->last_fix.fix.mode <= MODE_2D) && ((cur_timestamp - last_timestamp) < 2)) { g_free(last_tp->data); vgl->realtime_track->trackpoints = g_list_delete_link(vgl->realtime_track->trackpoints, last_tp); replace = TRUE; } if (replace || ((cur_timestamp != last_timestamp) && ((forced || ((heading < last_heading) && (heading < (last_heading - 3))) || ((heading > last_heading) && (heading > (last_heading + 3))) || ((alt != VIK_DEFAULT_ALTITUDE) && (alt != last_alt)))))) { /* TODO: check for new segments */ VikTrackpoint *tp = vik_trackpoint_new(); tp->newsegment = FALSE; tp->has_timestamp = TRUE; tp->timestamp = vgl->realtime_fix.fix.time; tp->altitude = alt; /* speed only available for 3D fix. Check for NAN when use this speed */ tp->speed = vgl->realtime_fix.fix.speed; tp->course = vgl->realtime_fix.fix.track; tp->nsats = vgl->realtime_fix.satellites_used; tp->fix_mode = vgl->realtime_fix.fix.mode; ll.lat = vgl->realtime_fix.fix.latitude; ll.lon = vgl->realtime_fix.fix.longitude; vik_coord_load_from_latlon(&tp->coord, vik_trw_layer_get_coord_mode(vgl->trw_children[TRW_REALTIME]), &ll); vgl->realtime_track->trackpoints = g_list_append(vgl->realtime_track->trackpoints, tp); vgl->realtime_fix.dirty = FALSE; vgl->realtime_fix.satellites_used = 0; vgl->last_fix = vgl->realtime_fix; } } } static void gpsd_raw_hook(VglGpsd *vgpsd, gchar *data) { gboolean update_all = FALSE; VikGpsLayer *vgl = vgpsd->vgl; if (!vgl->realtime_tracking) { g_warning("%s: receiving GPS data while not in realtime mode", __PRETTY_FUNCTION__); return; } if ((vgpsd->gpsd.fix.mode >= MODE_2D) && !isnan(vgpsd->gpsd.fix.latitude) && !isnan(vgpsd->gpsd.fix.longitude) && !isnan(vgpsd->gpsd.fix.track)) { VikWindow *vw = VIK_WINDOW(VIK_GTK_WINDOW_FROM_LAYER(vgl)); VikViewport *vvp = vik_window_viewport(vw); vgl->realtime_fix.fix = vgpsd->gpsd.fix; vgl->realtime_fix.satellites_used = vgpsd->gpsd.satellites_used; vgl->realtime_fix.dirty = TRUE; struct LatLon ll; VikCoord vehicle_coord; ll.lat = vgl->realtime_fix.fix.latitude; ll.lon = vgl->realtime_fix.fix.longitude; vik_coord_load_from_latlon(&vehicle_coord, vik_trw_layer_get_coord_mode(vgl->trw_children[TRW_REALTIME]), &ll); if ((vgl->vehicle_position == VEHICLE_POSITION_CENTERED) || (vgl->realtime_jump_to_start && vgl->first_realtime_trackpoint)) { vik_viewport_set_center_coord(vvp, &vehicle_coord); update_all = TRUE; } else if (vgl->vehicle_position == VEHICLE_POSITION_ON_SCREEN) { const int hdiv = 6; const int vdiv = 6; const int px = 20; /* adjust ment in pixels to make sure vehicle is inside the box */ gint width = vik_viewport_get_width(vvp); gint height = vik_viewport_get_height(vvp); gint vx, vy; vik_viewport_coord_to_screen(vvp, &vehicle_coord, &vx, &vy); update_all = TRUE; if (vx < (width/hdiv)) vik_viewport_set_center_screen(vvp, vx - width/2 + width/hdiv + px, vy); else if (vx > (width - width/hdiv)) vik_viewport_set_center_screen(vvp, vx + width/2 - width/hdiv - px, vy); else if (vy < (height/vdiv)) vik_viewport_set_center_screen(vvp, vx, vy - height/2 + height/vdiv + px); else if (vy > (height - height/vdiv)) vik_viewport_set_center_screen(vvp, vx, vy + height/2 - height/vdiv - px); else update_all = FALSE; } vgl->first_realtime_trackpoint = FALSE; create_realtime_trackpoint(vgl, FALSE); vik_layer_emit_update ( update_all ? VIK_LAYER(vgl) : VIK_LAYER(vgl->trw_children[TRW_REALTIME]) ); // NB update from background thread } } static gboolean gpsd_data_available(GIOChannel *source, GIOCondition condition, gpointer data) { VikGpsLayer *vgl = data; if (condition == G_IO_IN) { #if GPSD_API_MAJOR_VERSION == 3 || GPSD_API_MAJOR_VERSION == 4 if (!gps_poll(&vgl->vgpsd->gpsd)) { #elif GPSD_API_MAJOR_VERSION == 5 if (gps_read(&vgl->vgpsd->gpsd) > -1) { // Reuse old function to perform operations on the new GPS data gpsd_raw_hook(vgl->vgpsd, NULL); #else // Broken compile #endif return TRUE; } else { g_warning("Disconnected from gpsd. Trying to reconnect"); rt_gpsd_disconnect(vgl); rt_gpsd_connect(vgl, FALSE); } } return FALSE; /* no further calling */ } static gchar *make_track_name(VikTrwLayer *vtl) { const gchar basename[] = "REALTIME"; const gint bufsize = sizeof(basename) + 5; gchar *name = g_malloc(bufsize); strcpy(name, basename); gint i = 2; while (vik_trw_layer_get_track(vtl, name) != NULL) { g_snprintf(name, bufsize, "%s#%d", basename, i); i++; } return(name); } static gboolean rt_gpsd_try_connect(gpointer *data) { VikGpsLayer *vgl = (VikGpsLayer *)data; #if GPSD_API_MAJOR_VERSION == 3 struct gps_data_t *gpsd = gps_open(vgl->gpsd_host, vgl->gpsd_port); if (gpsd == NULL) { #elif GPSD_API_MAJOR_VERSION == 4 vgl->vgpsd = g_malloc(sizeof(VglGpsd)); if (gps_open_r(vgl->gpsd_host, vgl->gpsd_port, /*(struct gps_data_t *)*/vgl->vgpsd) != 0) { #elif GPSD_API_MAJOR_VERSION == 5 vgl->vgpsd = g_malloc(sizeof(VglGpsd)); if (gps_open(vgl->gpsd_host, vgl->gpsd_port, &vgl->vgpsd->gpsd) != 0) { #else // Delibrately break compilation... #endif g_warning("Failed to connect to gpsd at %s (port %s). Will retry in %d seconds", vgl->gpsd_host, vgl->gpsd_port, vgl->gpsd_retry_interval); return TRUE; /* keep timer running */ } #if GPSD_API_MAJOR_VERSION == 3 vgl->vgpsd = realloc(gpsd, sizeof(VglGpsd)); #endif vgl->vgpsd->vgl = vgl; vgl->realtime_fix.dirty = vgl->last_fix.dirty = FALSE; /* track alt/time graph uses VIK_DEFAULT_ALTITUDE (0.0) as invalid */ vgl->realtime_fix.fix.altitude = vgl->last_fix.fix.altitude = VIK_DEFAULT_ALTITUDE; vgl->realtime_fix.fix.speed = vgl->last_fix.fix.speed = NAN; if (vgl->realtime_record) { VikTrwLayer *vtl = vgl->trw_children[TRW_REALTIME]; vgl->realtime_track = vik_track_new(); vgl->realtime_track->visible = TRUE; vik_trw_layer_add_track(vtl, make_track_name(vtl), vgl->realtime_track); } #if GPSD_API_MAJOR_VERSION == 3 || GPSD_API_MAJOR_VERSION == 4 gps_set_raw_hook(&vgl->vgpsd->gpsd, gpsd_raw_hook); #endif vgl->realtime_io_channel = g_io_channel_unix_new(vgl->vgpsd->gpsd.gps_fd); vgl->realtime_io_watch_id = g_io_add_watch( vgl->realtime_io_channel, G_IO_IN | G_IO_ERR | G_IO_HUP, gpsd_data_available, vgl); #if GPSD_API_MAJOR_VERSION == 3 gps_query(&vgl->vgpsd->gpsd, "w+x"); #endif #if GPSD_API_MAJOR_VERSION == 4 || GPSD_API_MAJOR_VERSION == 5 gps_stream(&vgl->vgpsd->gpsd, WATCH_ENABLE, NULL); #endif return FALSE; /* no longer called by timeout */ } static gboolean rt_ask_retry(VikGpsLayer *vgl) { GtkWidget *dialog = gtk_message_dialog_new (VIK_GTK_WINDOW_FROM_LAYER(vgl), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, "Failed to connect to gpsd at %s (port %s)\n" "Should Viking keep trying (every %d seconds)?", vgl->gpsd_host, vgl->gpsd_port, vgl->gpsd_retry_interval); gint res = gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); return (res == GTK_RESPONSE_YES); } static gboolean rt_gpsd_connect(VikGpsLayer *vgl, gboolean ask_if_failed) { vgl->realtime_retry_timer = 0; if (rt_gpsd_try_connect((gpointer *)vgl)) { if (vgl->gpsd_retry_interval <= 0) { g_warning("Failed to connect to gpsd but will not retry because retry intervel was set to %d (which is 0 or negative)", vgl->gpsd_retry_interval); return FALSE; } else if (ask_if_failed && !rt_ask_retry(vgl)) return FALSE; else vgl->realtime_retry_timer = g_timeout_add_seconds(vgl->gpsd_retry_interval, (GSourceFunc)rt_gpsd_try_connect, (gpointer *)vgl); } return TRUE; } static void rt_gpsd_disconnect(VikGpsLayer *vgl) { if (vgl->realtime_retry_timer) { g_source_remove(vgl->realtime_retry_timer); vgl->realtime_retry_timer = 0; } if (vgl->realtime_io_watch_id) { g_source_remove(vgl->realtime_io_watch_id); vgl->realtime_io_watch_id = 0; } if (vgl->realtime_io_channel) { GError *error = NULL; g_io_channel_shutdown (vgl->realtime_io_channel, FALSE, &error); vgl->realtime_io_channel = NULL; } if (vgl->vgpsd) { #if GPSD_API_MAJOR_VERSION == 4 || GPSD_API_MAJOR_VERSION == 5 gps_stream(&vgl->vgpsd->gpsd, WATCH_DISABLE, NULL); #endif gps_close(&vgl->vgpsd->gpsd); #if GPSD_API_MAJOR_VERSION == 3 free(vgl->vgpsd); #elif GPSD_API_MAJOR_VERSION == 4 || GPSD_API_MAJOR_VERSION == 5 g_free(vgl->vgpsd); #endif vgl->vgpsd = NULL; } if (vgl->realtime_record && vgl->realtime_track) { if ((vgl->realtime_track->trackpoints == NULL) || (vgl->realtime_track->trackpoints->next == NULL)) vik_trw_layer_delete_track(vgl->trw_children[TRW_REALTIME], vgl->realtime_track); vgl->realtime_track = NULL; } } static void gps_start_stop_tracking_cb( gpointer layer_and_vlp[2]) { VikGpsLayer *vgl = (VikGpsLayer *)layer_and_vlp[0]; vgl->realtime_tracking = (vgl->realtime_tracking == FALSE); /* Make sure we are still in the boat with libgps */ g_assert((VIK_GPS_MODE_2D == MODE_2D) && (VIK_GPS_MODE_3D == MODE_3D)); if (vgl->realtime_tracking) { vgl->first_realtime_trackpoint = TRUE; if (!rt_gpsd_connect(vgl, TRUE)) { vgl->first_realtime_trackpoint = FALSE; vgl->realtime_tracking = FALSE; } } else { /* stop realtime tracking */ vgl->first_realtime_trackpoint = FALSE; rt_gpsd_disconnect(vgl); } } #endif /* VIK_CONFIG_REALTIME_GPS_TRACKING */ viking-1.4.2/src/clipboard.h0000644000175000017500000000255212175546146012644 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef _VIKING_CLIPBOARD_H #define _VIKING_CLIPBOARD_H #include "viklayerspanel.h" G_BEGIN_DECLS typedef enum { VIK_CLIPBOARD_DATA_NONE = 0, VIK_CLIPBOARD_DATA_LAYER, VIK_CLIPBOARD_DATA_SUBLAYER } VikClipboardDataType; void a_clipboard_copy(VikClipboardDataType type, guint16 layer_type, gint subtype, guint len, const gchar* text, guint8 * data); void a_clipboard_copy_selected ( VikLayersPanel *vlp ); gboolean a_clipboard_paste ( VikLayersPanel *vlp ); VikClipboardDataType a_clipboard_type ( ); G_END_DECLS #endif viking-1.4.2/src/datasource_geotag.c0000644000175000017500000001520512175546146014357 00000000000000/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2012, Rob Norris * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include #include "viking.h" #include "acquire.h" #include "geotag_exif.h" typedef struct { GtkWidget *files; GSList *filelist; // Files selected } datasource_geotag_user_data_t; /* The last used directory */ static gchar *last_folder_uri = NULL; static gpointer datasource_geotag_init( ); static void datasource_geotag_add_setup_widgets ( GtkWidget *dialog, VikViewport *vvp, gpointer user_data ); static void datasource_geotag_get_cmd_string ( gpointer user_data, gchar **babelargs_or_shellcmd, gchar **inputfile_or_inputtype, gpointer not_used ); static gboolean datasource_geotag_process ( VikTrwLayer *vtl, const gchar *cmd, const gchar *extra, BabelStatusFunc status_cb, acq_dialog_widgets_t *adw, gpointer not_used ); static void datasource_geotag_cleanup ( gpointer user_data ); VikDataSourceInterface vik_datasource_geotag_interface = { N_("Create Waypoints from Geotagged Images"), N_("Geotagged Images"), VIK_DATASOURCE_ADDTOLAYER, VIK_DATASOURCE_INPUTTYPE_NONE, TRUE, FALSE, // We should be able to see the data on the screen so no point in keeping the dialog open TRUE, (VikDataSourceInitFunc) datasource_geotag_init, (VikDataSourceCheckExistenceFunc) NULL, (VikDataSourceAddSetupWidgetsFunc) datasource_geotag_add_setup_widgets, (VikDataSourceGetCmdStringFunc) datasource_geotag_get_cmd_string, (VikDataSourceProcessFunc) datasource_geotag_process, (VikDataSourceProgressFunc) NULL, (VikDataSourceAddProgressWidgetsFunc) NULL, (VikDataSourceCleanupFunc) datasource_geotag_cleanup, (VikDataSourceOffFunc) NULL, NULL, 0, NULL, NULL, 0 }; /* See VikDataSourceInterface */ static gpointer datasource_geotag_init ( ) { datasource_geotag_user_data_t *user_data = g_malloc(sizeof(datasource_geotag_user_data_t)); user_data->filelist = NULL; return user_data; } /* See VikDataSourceInterface */ static void datasource_geotag_add_setup_widgets ( GtkWidget *dialog, VikViewport *vvp, gpointer user_data ) { datasource_geotag_user_data_t *userdata = (datasource_geotag_user_data_t *)user_data; /* The files selector */ userdata->files = gtk_file_chooser_widget_new ( GTK_FILE_CHOOSER_ACTION_OPEN ); // try to make it a nice size - otherwise seems to default to something impractically small gtk_window_set_default_size ( GTK_WINDOW (dialog) , 600, 300 ); if ( last_folder_uri ) gtk_file_chooser_set_current_folder_uri ( GTK_FILE_CHOOSER(userdata->files), last_folder_uri ); GtkFileChooser *chooser = GTK_FILE_CHOOSER ( userdata->files ); /* Add filters */ GtkFileFilter *filter; filter = gtk_file_filter_new (); gtk_file_filter_set_name ( filter, _("All") ); gtk_file_filter_add_pattern ( filter, "*" ); gtk_file_chooser_add_filter ( chooser, filter ); filter = gtk_file_filter_new (); gtk_file_filter_set_name ( filter, _("JPG") ); gtk_file_filter_add_mime_type ( filter, "image/jpeg"); gtk_file_chooser_add_filter ( chooser, filter ); // Default to jpgs gtk_file_chooser_set_filter ( chooser, filter ); // Allow selecting more than one gtk_file_chooser_set_select_multiple ( chooser, TRUE ); // Could add code to setup a default symbol (see dialog.c for symbol usage) // Store in user_data type and then apply when creating the waypoints // However not much point since these will have images associated with them! /* Packing all widgets */ gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(dialog)->vbox), userdata->files, TRUE, TRUE, 0 ); gtk_widget_show_all ( dialog ); } static void datasource_geotag_get_cmd_string ( gpointer user_data, gchar **babelargs_or_shellcmd, gchar **inputfile_or_inputtype, gpointer not_used ) { datasource_geotag_user_data_t *userdata = (datasource_geotag_user_data_t *)user_data; /* Retrieve the files selected */ userdata->filelist = gtk_file_chooser_get_filenames ( GTK_FILE_CHOOSER(userdata->files) ); // Not reusable !! /* Memorize the directory for later use */ g_free ( last_folder_uri ); last_folder_uri = gtk_file_chooser_get_current_folder_uri ( GTK_FILE_CHOOSER(userdata->files) ); last_folder_uri = g_strdup ( last_folder_uri ); /* TODO Memorize the file filter for later use... */ //GtkFileFilter *filter = gtk_file_chooser_get_filter ( GTK_FILE_CHOOSER(userdata->files) ); // return some value so *thread* processing will continue *babelargs_or_shellcmd = g_strdup ("fake command"); // Not really used, thus no translations } /** * Process selected files and try to generate waypoints storing them in the given vtl */ static gboolean datasource_geotag_process ( VikTrwLayer *vtl, const gchar *cmd, const gchar *extra, BabelStatusFunc status_cb, acq_dialog_widgets_t *adw, gpointer not_used ) { datasource_geotag_user_data_t *user_data = (datasource_geotag_user_data_t *)adw->user_data; // Process selected files // In prinicple this loading should be quite fast and so don't need to have any progress monitoring GSList *cur_file = user_data->filelist; while ( cur_file ) { gchar *filename = cur_file->data; gchar *name; VikWaypoint *wp = a_geotag_create_waypoint_from_file ( filename, vik_viewport_get_coord_mode ( adw->vvp ), &name ); if ( wp ) { // Create name if geotag method didn't return one if ( !name ) name = g_strdup ( a_file_basename ( filename ) ); vik_trw_layer_filein_add_waypoint ( vtl, name, wp ); g_free ( name ); } else { g_warning ( _("Unable to create waypoint from %s"), filename ); } g_free ( filename ); cur_file = g_slist_next ( cur_file ); } /* Free memory */ g_slist_free ( user_data->filelist ); // No failure return TRUE; } /* See VikDataSourceInterface */ static void datasource_geotag_cleanup ( gpointer user_data ) { g_free ( user_data ); } viking-1.4.2/src/terraservermapsource.h0000644000175000017500000000422212175546146015164 00000000000000/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * viking * Copyright (C) 2009, Guilhem Bonnefille * * viking is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * viking is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef _TERRASERVER_MAP_SOURCE_H #define _TERRASERVER_MAP_SOURCE_H #include "vikcoord.h" #include "mapcoord.h" #include "vikmapsourcedefault.h" G_BEGIN_DECLS #define TERRASERVER_TYPE_MAP_SOURCE (terraserver_map_source_get_type ()) #define TERRASERVER_MAP_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TERRASERVER_TYPE_MAP_SOURCE, TerraserverMapSource)) #define TERRASERVER_MAP_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TERRASERVER_TYPE_MAP_SOURCE, TerraserverMapSourceClass)) #define TERRASERVER_IS_MAP_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TERRASERVER_TYPE_MAP_SOURCE)) #define TERRASERVER_IS_MAP_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TERRASERVER_TYPE_MAP_SOURCE)) #define TERRASERVER_MAP_SOURCE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TERRASERVER_TYPE_MAP_SOURCE, TerraserverMapSourceClass)) typedef struct _TerraserverMapSourceClass TerraserverMapSourceClass; typedef struct _TerraserverMapSource TerraserverMapSource; struct _TerraserverMapSourceClass { VikMapSourceDefaultClass parent_class; }; struct _TerraserverMapSource { VikMapSourceDefault parent_instance; }; GType terraserver_map_source_get_type (void) G_GNUC_CONST; TerraserverMapSource * terraserver_map_source_new_with_id (guint16 id, const char *label, int type); G_END_DECLS #endif /* _TERRASERVER_MAP_SOURCE_H_ */ viking-1.4.2/src/terraserver.c0000644000175000017500000000273112024715566013240 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "terraserver.h" #include "terraservermapsource.h" #include "vikmapslayer.h" void terraserver_init () { VikMapSource *map_type_1 = VIK_MAP_SOURCE(terraserver_map_source_new_with_id( 2, "Terraserver Topos", 2 )); VikMapSource *map_type_2 = VIK_MAP_SOURCE(terraserver_map_source_new_with_id( 1, "Terraserver Aerials", 1 )); VikMapSource *map_type_3 = VIK_MAP_SOURCE(terraserver_map_source_new_with_id( 4, "Terraserver Urban Areas", 4 )); maps_layer_register_map_source (map_type_1); maps_layer_register_map_source (map_type_2); maps_layer_register_map_source (map_type_3); } viking-1.4.2/src/print.c0000644000175000017500000005443012175546146012036 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2003-2005, Evan Battaglia * * print.c * Copyright (C) 2007, Quy Tonthat * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include #if GTK_CHECK_VERSION(2,10,0) #include "viking.h" #include "print.h" #include "print-preview.h" typedef enum { VIK_PRINT_CENTER_NONE = 0, VIK_PRINT_CENTER_HORIZONTALLY, VIK_PRINT_CENTER_VERTICALLY, VIK_PRINT_CENTER_BOTH, } PrintCenterMode; typedef struct { gchar *name; PrintCenterMode mode; } PrintCenterName; static const PrintCenterName center_modes[] = { {N_("None"), VIK_PRINT_CENTER_NONE}, {N_("Horizontally"), VIK_PRINT_CENTER_HORIZONTALLY}, {N_("Vertically"), VIK_PRINT_CENTER_VERTICALLY}, {N_("Both"), VIK_PRINT_CENTER_BOTH}, {NULL, -1} }; typedef struct { gint num_pages; gboolean show_info_header; VikWindow *vw; VikViewport *vvp; gdouble xmpp, ympp; /* zoom level (meters/pixel) */ gdouble xres; gdouble yres; gint width; gint height; gdouble offset_x; gdouble offset_y; PrintCenterMode center; gboolean use_full_page; GtkPrintOperation *operation; } PrintData; static GtkWidget *create_custom_widget_cb(GtkPrintOperation *operation, PrintData *data); static void begin_print(GtkPrintOperation *operation, GtkPrintContext *context, PrintData *data); static void draw_page(GtkPrintOperation *print, GtkPrintContext *context, gint page_nr, PrintData *data); static void end_print(GtkPrintOperation *operation, GtkPrintContext *context, PrintData *data); void a_print(VikWindow *vw, VikViewport *vvp) { /* TODO: make print_settings non-static when saving_settings_to_file is * implemented. Keep it static for now to retain settings for each * viking session */ static GtkPrintSettings *print_settings = NULL; GtkPrintOperation *print_oper; GtkPrintOperationResult res; PrintData data; print_oper = gtk_print_operation_new (); data.num_pages = 1; data.vw = vw; data.vvp = vvp; data.offset_x = 0; data.offset_y = 0; data.center = VIK_PRINT_CENTER_BOTH; data.use_full_page = FALSE; data.operation = print_oper; data.xmpp = vik_viewport_get_xmpp(vvp); data.ympp = vik_viewport_get_ympp(vvp); data.width = vik_viewport_get_width(vvp); data.height = vik_viewport_get_height(vvp); data.xres = data.yres = 230; /* FIXME */ if (print_settings != NULL) gtk_print_operation_set_print_settings (print_oper, print_settings); g_signal_connect (print_oper, "begin_print", G_CALLBACK (begin_print), &data); g_signal_connect (print_oper, "draw_page", G_CALLBACK (draw_page), &data); g_signal_connect (print_oper, "end-print", G_CALLBACK (end_print), &data); g_signal_connect (print_oper, "create-custom-widget", G_CALLBACK (create_custom_widget_cb), &data); gtk_print_operation_set_custom_tab_label (print_oper, _("Image Settings")); res = gtk_print_operation_run (print_oper, GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG, GTK_WINDOW (vw), NULL); if (res == GTK_PRINT_OPERATION_RESULT_APPLY) { if (print_settings != NULL) g_object_unref (print_settings); print_settings = g_object_ref (gtk_print_operation_get_print_settings (print_oper)); } g_object_unref (print_oper); } static void begin_print(GtkPrintOperation *operation, GtkPrintContext *context, PrintData *data) { // fputs("DEBUG: begin_print() called\n", stderr); gtk_print_operation_set_n_pages (operation, data->num_pages); gtk_print_operation_set_use_full_page (operation, data->use_full_page); } static void end_print(GtkPrintOperation *operation, GtkPrintContext *context, PrintData *data) { // fputs("DEBUG: end_print() called\n", stderr); } static void copy_row_from_rgb(guchar *surface_pixels, guchar *pixbuf_pixels, gint width) { guint32 *cairo_data = (guint32 *) surface_pixels; guchar *p; gint i; for (i = 0, p = pixbuf_pixels; i < width; i++) { guint32 r = *p++; guint32 g = *p++; guint32 b = *p++; cairo_data[i] = 0xFF000000 | (r << 16) | (g << 8) | b; } } #define INT_MULT(a,b,t) ((t) = (a) * (b) + 0x80, ((((t) >> 8) + (t)) >> 8)) #define INT_BLEND(a,b,alpha,tmp) (INT_MULT((a) - (b), alpha, tmp) + (b)) static void copy_row_from_rgba(guchar *surface_pixels, guchar *pixbuf_pixels, gint width) { guint32 *cairo_data = (guint32 *) surface_pixels; guchar *p; gint i; for (i = 0, p = pixbuf_pixels; i < width; i++) { guint32 r = *p++; guint32 g = *p++; guint32 b = *p++; guint32 a = *p++; if (a != 255) { guint32 tmp; /* composite on a white background */ r = INT_BLEND (r, 255, a, tmp); g = INT_BLEND (g, 255, a, tmp); b = INT_BLEND (b, 255, a, tmp); } cairo_data[i] = 0xFF000000 | (r << 16) | (g << 8) | b; } } static void draw_page_cairo(GtkPrintContext *context, PrintData *data) { cairo_t *cr; GdkPixbuf *pixbuf_to_draw; cairo_surface_t *surface; guchar *surface_pixels; guchar *pixbuf_pixels; gint stride; gint pixbuf_stride; gint pixbuf_n_channels; gdouble cr_dpi_x; gdouble cr_dpi_y; gdouble scale_x; gdouble scale_y; gint y; cr = gtk_print_context_get_cairo_context(context); pixbuf_to_draw = gdk_pixbuf_get_from_drawable(NULL, GDK_DRAWABLE(vik_viewport_get_pixmap(data->vvp)), NULL, 0, 0, 0, 0, data->width, data->height); surface = cairo_image_surface_create(CAIRO_FORMAT_RGB24, data->width, data->height); cr_dpi_x = gtk_print_context_get_dpi_x (context); cr_dpi_y = gtk_print_context_get_dpi_y (context); scale_x = cr_dpi_x / data->xres; scale_y = cr_dpi_y / data->yres; cairo_translate (cr, data->offset_x / cr_dpi_x * 72.0, data->offset_y / cr_dpi_y * 72.0); cairo_scale (cr, scale_x, scale_y); surface_pixels = cairo_image_surface_get_data (surface); stride = cairo_image_surface_get_stride (surface); pixbuf_pixels = gdk_pixbuf_get_pixels (pixbuf_to_draw); pixbuf_stride = gdk_pixbuf_get_rowstride(pixbuf_to_draw); pixbuf_n_channels = gdk_pixbuf_get_n_channels(pixbuf_to_draw); // fprintf(stderr, "DEBUG: %s() surface_pixels=%p pixbuf_pixels=%p size=%d surface_width=%d surface_height=%d stride=%d data_height=%d pixmap_stride=%d pixmap_nchannels=%d pixmap_bit_per_Sample=%d\n", __PRETTY_FUNCTION__, surface_pixels, pixbuf_pixels, stride * data->height, cairo_image_surface_get_width(surface), cairo_image_surface_get_height(surface), stride, data->height, gdk_pixbuf_get_rowstride(pixbuf_to_draw), gdk_pixbuf_get_n_channels(pixbuf_to_draw), gdk_pixbuf_get_bits_per_sample(pixbuf_to_draw)); /* Assume the pixbuf has 8 bits per channel */ for (y = 0; y < data->height; y++, surface_pixels += stride, pixbuf_pixels += pixbuf_stride) { switch (pixbuf_n_channels) { case 3: copy_row_from_rgb (surface_pixels, pixbuf_pixels, data->width); break; case 4: copy_row_from_rgba (surface_pixels, pixbuf_pixels, data->width); break; } } g_object_unref(G_OBJECT(pixbuf_to_draw)); cairo_set_source_surface(cr, surface, 0, 0); cairo_rectangle(cr, 0, 0, data->width, data->height); cairo_fill(cr); cairo_surface_destroy(surface); } static void draw_page(GtkPrintOperation *print, GtkPrintContext *context, gint page_nr, PrintData *data) { // fprintf(stderr, "DEBUG: draw_page() page_nr=%d\n", page_nr); draw_page_cairo(context, data); } /*********************** page layout gui *********************/ typedef struct { PrintData *data; GtkWidget *center_combo; GtkWidget *scale; GtkWidget *scale_label; GtkWidget *preview; } CustomWidgetInfo; enum { BOTTOM, TOP, RIGHT, LEFT, WIDTH, HEIGHT }; static gboolean scale_change_value_cb(GtkRange *range, GtkScrollType scroll, gdouble value, CustomWidgetInfo *pinfo); static void get_page_dimensions (CustomWidgetInfo *info, gdouble *page_width, gdouble *page_height, GtkUnit unit); static void center_changed_cb (GtkWidget *combo, CustomWidgetInfo *info); static void get_max_offsets (CustomWidgetInfo *info, gdouble *offset_x_max, gdouble *offset_y_max); static void update_offsets (CustomWidgetInfo *info); static void set_scale_label(CustomWidgetInfo *pinfo, gdouble scale_val) { static const gdouble inch_to_mm = 25.4; gchar label_text[64]; g_snprintf(label_text, sizeof(label_text), "%.0fx%0.f mm (%.0f%%)", inch_to_mm * pinfo->data->width / pinfo->data->xres, inch_to_mm * pinfo->data->height / pinfo->data->yres, scale_val); gtk_label_set_markup (GTK_LABEL (pinfo->scale_label), label_text); } static void set_scale_value(CustomWidgetInfo *pinfo) { gdouble width; gdouble height; gdouble ratio, ratio_w, ratio_h; get_page_dimensions (pinfo, &width, &height, GTK_UNIT_INCH); ratio_w = 100 * pinfo->data->width / pinfo->data->xres / width; ratio_h = 100 * pinfo->data->height / pinfo->data->yres / height; ratio = MAX(ratio_w, ratio_h); g_signal_handlers_block_by_func(GTK_RANGE(pinfo->scale), scale_change_value_cb, pinfo); gtk_range_set_value(GTK_RANGE(pinfo->scale), ratio); g_signal_handlers_unblock_by_func(GTK_RANGE(pinfo->scale), scale_change_value_cb, pinfo); set_scale_label(pinfo, ratio); } static void update_page_setup (CustomWidgetInfo *pinfo) { gdouble paper_width; gdouble paper_height; gdouble offset_x_max, offset_y_max; PrintData *data = pinfo->data; get_page_dimensions (pinfo, &paper_width, &paper_height, GTK_UNIT_INCH); if ((paper_width < (pinfo->data->width / data->xres)) || (paper_height < (pinfo->data->height / data->yres))) { gdouble xres, yres; xres = (gdouble) pinfo->data->width / paper_width; yres = (gdouble) pinfo->data->height / paper_height; data->xres = data->yres = MAX(xres, yres); vik_print_preview_set_image_dpi (VIK_PRINT_PREVIEW (pinfo->preview), data->xres, data->yres); } get_max_offsets (pinfo, &offset_x_max, &offset_y_max); vik_print_preview_set_image_offsets_max (VIK_PRINT_PREVIEW (pinfo->preview), offset_x_max, offset_y_max); update_offsets (pinfo); set_scale_value(pinfo); if (pinfo->preview) vik_print_preview_set_image_offsets (VIK_PRINT_PREVIEW (pinfo->preview), pinfo->data->offset_x, pinfo->data->offset_y); } static void page_setup_cb (GtkWidget *widget, CustomWidgetInfo *info) { PrintData *data = info->data; GtkPrintOperation *operation = data->operation; GtkPrintSettings *settings; GtkPageSetup *page_setup; GtkWidget *toplevel; toplevel = gtk_widget_get_toplevel (widget); if (! GTK_WIDGET_TOPLEVEL (toplevel)) toplevel = NULL; settings = gtk_print_operation_get_print_settings (operation); if (! settings) settings = gtk_print_settings_new (); page_setup = gtk_print_operation_get_default_page_setup (operation); page_setup = gtk_print_run_page_setup_dialog (GTK_WINDOW (toplevel), page_setup, settings); gtk_print_operation_set_default_page_setup (operation, page_setup); vik_print_preview_set_page_setup (VIK_PRINT_PREVIEW (info->preview), page_setup); update_page_setup (info); } static void full_page_toggled_cb (GtkWidget *widget, CustomWidgetInfo *pinfo) { gboolean active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)); pinfo->data->use_full_page = active; update_page_setup (pinfo); vik_print_preview_set_use_full_page (VIK_PRINT_PREVIEW(pinfo->preview), active); } static void set_center_none (CustomWidgetInfo *info) { info->data->center = VIK_PRINT_CENTER_NONE; if (info->center_combo) { g_signal_handlers_block_by_func (info->center_combo, center_changed_cb, info); info->data->center = VIK_PRINT_CENTER_NONE; gtk_combo_box_set_active(GTK_COMBO_BOX(info->center_combo), info->data->center); g_signal_handlers_unblock_by_func (info->center_combo, center_changed_cb, info); } } static void preview_offsets_changed_cb (GtkWidget *widget, gdouble offset_x, gdouble offset_y, CustomWidgetInfo *info) { set_center_none (info); info->data->offset_x = offset_x; info->data->offset_y = offset_y; update_offsets (info); } static void get_page_dimensions (CustomWidgetInfo *info, gdouble *page_width, gdouble *page_height, GtkUnit unit) { GtkPageSetup *setup; setup = gtk_print_operation_get_default_page_setup (info->data->operation); *page_width = gtk_page_setup_get_paper_width (setup, unit); *page_height = gtk_page_setup_get_paper_height (setup, unit); if (!info->data->use_full_page) { gdouble left_margin = gtk_page_setup_get_left_margin (setup, unit); gdouble right_margin = gtk_page_setup_get_right_margin (setup, unit); gdouble top_margin = gtk_page_setup_get_top_margin (setup, unit); gdouble bottom_margin = gtk_page_setup_get_bottom_margin (setup, unit); *page_width -= left_margin + right_margin; *page_height -= top_margin + bottom_margin; } } static void get_max_offsets (CustomWidgetInfo *info, gdouble *offset_x_max, gdouble *offset_y_max) { gdouble width; gdouble height; get_page_dimensions (info, &width, &height, GTK_UNIT_POINTS); *offset_x_max = width - 72.0 * info->data->width / info->data->xres; *offset_x_max = MAX (0, *offset_x_max); *offset_y_max = height - 72.0 * info->data->height / info->data->yres; *offset_y_max = MAX (0, *offset_y_max); } static void update_offsets (CustomWidgetInfo *info) { PrintData *data = info->data; gdouble offset_x_max; gdouble offset_y_max; get_max_offsets (info, &offset_x_max, &offset_y_max); switch (data->center) { case VIK_PRINT_CENTER_NONE: if (data->offset_x > offset_x_max) data->offset_x = offset_x_max; if (data->offset_y > offset_y_max) data->offset_y = offset_y_max; break; case VIK_PRINT_CENTER_HORIZONTALLY: data->offset_x = offset_x_max / 2.0; break; case VIK_PRINT_CENTER_VERTICALLY: data->offset_y = offset_y_max / 2.0; break; case VIK_PRINT_CENTER_BOTH: data->offset_x = offset_x_max / 2.0; data->offset_y = offset_y_max / 2.0; break; } } static void center_changed_cb (GtkWidget *combo, CustomWidgetInfo *info) { info->data->center = gtk_combo_box_get_active(GTK_COMBO_BOX(combo)); update_offsets (info); if (info->preview) vik_print_preview_set_image_offsets (VIK_PRINT_PREVIEW (info->preview), info->data->offset_x, info->data->offset_y); } static gboolean scale_change_value_cb(GtkRange *range, GtkScrollType scroll, gdouble value, CustomWidgetInfo *pinfo) { gdouble paper_width; gdouble paper_height; gdouble xres, yres, res; gdouble offset_x_max, offset_y_max; gdouble scale = CLAMP(value, 1, 100); get_page_dimensions (pinfo, &paper_width, &paper_height, GTK_UNIT_INCH); xres = pinfo->data->width * 100 / paper_width / scale; yres = pinfo->data->height * 100 / paper_height / scale; res = MAX(xres, yres); pinfo->data->xres = pinfo->data->yres = res; get_max_offsets (pinfo, &offset_x_max, &offset_y_max); update_offsets (pinfo); if (pinfo->preview) { vik_print_preview_set_image_dpi (VIK_PRINT_PREVIEW (pinfo->preview), pinfo->data->xres, pinfo->data->yres); vik_print_preview_set_image_offsets (VIK_PRINT_PREVIEW (pinfo->preview), pinfo->data->offset_x, pinfo->data->offset_y); vik_print_preview_set_image_offsets_max (VIK_PRINT_PREVIEW (pinfo->preview), offset_x_max, offset_y_max); } set_scale_label(pinfo, scale); return FALSE; } static void custom_widgets_cleanup(CustomWidgetInfo *info) { g_free(info); } static GtkWidget *create_custom_widget_cb(GtkPrintOperation *operation, PrintData *data) { GtkWidget *layout; GtkWidget *main_hbox; GtkWidget *main_vbox; GtkWidget *hbox; GtkWidget *vbox; GtkWidget *button; GtkWidget *label; GtkPageSetup *setup; CustomWidgetInfo *info = g_malloc0(sizeof(CustomWidgetInfo)); g_signal_connect_swapped (data->operation, _("done"), G_CALLBACK (custom_widgets_cleanup), info); info->data = data; setup = gtk_print_operation_get_default_page_setup (data->operation); if (! setup) { setup = gtk_page_setup_new (); gtk_print_operation_set_default_page_setup (data->operation, setup); } layout = gtk_vbox_new (FALSE, 6); gtk_container_set_border_width (GTK_CONTAINER (layout), 12); /* main hbox */ main_hbox = gtk_hbox_new (FALSE, 12); gtk_box_pack_start (GTK_BOX (layout), main_hbox, TRUE, TRUE, 0); gtk_widget_show (main_hbox); /* main vbox */ main_vbox = gtk_vbox_new (FALSE, 12); gtk_box_pack_start (GTK_BOX (main_hbox), main_vbox, FALSE, FALSE, 0); gtk_widget_show (main_vbox); vbox = gtk_vbox_new (FALSE, 6); gtk_box_pack_start (GTK_BOX (main_vbox), vbox, FALSE, FALSE, 0); gtk_widget_show (vbox); /* Page Size */ button = gtk_button_new_with_mnemonic (_("_Adjust Page Size " "and Orientation")); gtk_box_pack_start (GTK_BOX (main_vbox), button, FALSE, FALSE, 0); g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (page_setup_cb), info); gtk_widget_show (button); /* Center */ GtkWidget *combo; const PrintCenterName *center; hbox = gtk_hbox_new (FALSE, 6); gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, FALSE, 0); gtk_widget_show (hbox); label = gtk_label_new_with_mnemonic (_("C_enter:")); gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); gtk_widget_show (label); combo = gtk_combo_box_new_text (); for (center = center_modes; center->name; center++) { gtk_combo_box_append_text(GTK_COMBO_BOX(combo), _(center->name)); } gtk_combo_box_set_active(GTK_COMBO_BOX(combo), VIK_PRINT_CENTER_BOTH); gtk_box_pack_start (GTK_BOX (hbox), combo, TRUE, TRUE, 0); gtk_widget_show (combo); gtk_label_set_mnemonic_widget (GTK_LABEL (label), combo); g_signal_connect(combo, "changed", G_CALLBACK(center_changed_cb), info); info->center_combo = combo; /* ignore page margins */ button = gtk_check_button_new_with_mnemonic (_("Ignore Page _Margins")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), data->use_full_page); gtk_box_pack_start (GTK_BOX (main_vbox), button, FALSE, FALSE, 0); g_signal_connect (button, "toggled", G_CALLBACK (full_page_toggled_cb), info); gtk_widget_show (button); /* scale */ vbox = gtk_vbox_new (FALSE, 1); gtk_box_pack_start (GTK_BOX (main_vbox), vbox, FALSE, FALSE, 0); gtk_widget_show (vbox); hbox = gtk_hbox_new (FALSE, 6); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); gtk_widget_show (hbox); label = gtk_label_new_with_mnemonic (_("Image S_ize:")); gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); gtk_widget_show (label); label = gtk_label_new (NULL); gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); info->scale_label = label; gtk_box_pack_start (GTK_BOX (hbox), info->scale_label, TRUE, TRUE, 0); gtk_widget_show (info->scale_label); info->scale = gtk_hscale_new_with_range(1, 100, 1); gtk_box_pack_start (GTK_BOX (vbox), info->scale, TRUE, TRUE, 0); gtk_scale_set_draw_value(GTK_SCALE(info->scale), FALSE); gtk_widget_show (info->scale); gtk_label_set_mnemonic_widget (GTK_LABEL (label), info->scale); g_signal_connect(info->scale, "change_value", G_CALLBACK(scale_change_value_cb), info); info->preview = vik_print_preview_new (setup, GDK_DRAWABLE(vik_viewport_get_pixmap(data->vvp))); vik_print_preview_set_use_full_page (VIK_PRINT_PREVIEW(info->preview), data->use_full_page); gtk_box_pack_start (GTK_BOX (main_hbox), info->preview, TRUE, TRUE, 0); gtk_widget_show (info->preview); g_signal_connect (info->preview, "offsets-changed", G_CALLBACK (preview_offsets_changed_cb), info); update_page_setup (info); gdouble offset_x_max, offset_y_max; get_max_offsets (info, &offset_x_max, &offset_y_max); vik_print_preview_set_image_offsets_max (VIK_PRINT_PREVIEW (info->preview), offset_x_max, offset_y_max); set_scale_value(info); return layout; } #endif viking-1.4.2/src/vikenumtypes.h.template0000644000175000017500000000103011507650232015236 00000000000000/*** BEGIN file-header ***/ #ifndef __VIK_ENUM_TYPES_H__ #define __VIK_ENUM_TYPES_H__ #include G_BEGIN_DECLS /*** END file-header ***/ /*** BEGIN file-production ***/ /* Enumerations from "@filename@" */ /*** END file-production ***/ /*** BEGIN enumeration-production ***/ #define VIK_TYPE_@ENUMSHORT@ (@enum_name@_get_type()) GType @enum_name@_get_type (void) G_GNUC_CONST; /*** END enumeration-production ***/ /*** BEGIN file-tail ***/ G_END_DECLS #endif /* __GITG_ENUM_TYPES_H__ */ /*** END file-tail ***/ viking-1.4.2/src/vikgobjectbuilder.c0000644000175000017500000001557612175546146014410 00000000000000/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * viking * Copyright (C) 2009, Guilhem Bonnefille * * viking is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * viking is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #ifdef HAVE_STRING_H #include #endif #include #include #include #include "vikgobjectbuilder.h" /* FIXME use private fields */ static gchar *class_name = NULL; GType gtype = 0; gchar *property_name = NULL; GParameter *parameters = NULL; gint nb_parameters = 0; /* signals */ enum { NEW_OBJECT, LAST_SIGNAL }; static guint gobject_builder_signals[LAST_SIGNAL] = { 0 }; G_DEFINE_TYPE (VikGobjectBuilder, vik_gobject_builder, G_TYPE_OBJECT); static void vik_gobject_builder_init (VikGobjectBuilder *object) { /* TODO: Add initialization code here */ } static void vik_gobject_builder_finalize (GObject *object) { /* TODO: Add deinitalization code here */ G_OBJECT_CLASS (vik_gobject_builder_parent_class)->finalize (object); } static void vik_gobject_builder_new_object (VikGobjectBuilder *self, GObject *object) { /* TODO: Add default signal handler implementation here */ } static void vik_gobject_builder_class_init (VikGobjectBuilderClass *klass) { GObjectClass* object_class = G_OBJECT_CLASS (klass); object_class->finalize = vik_gobject_builder_finalize; klass->new_object = vik_gobject_builder_new_object; gobject_builder_signals[NEW_OBJECT] = g_signal_new ("new-object", G_OBJECT_CLASS_TYPE (klass), 0, G_STRUCT_OFFSET (VikGobjectBuilderClass, new_object), NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, G_TYPE_OBJECT); } /* Called for open tags */ static void _start_element (GMarkupParseContext *context, const gchar *element_name, const gchar **attribute_names, const gchar **attribute_values, gpointer user_data, GError **error) { if (strcmp(element_name, "object") == 0) { class_name = g_strdup(attribute_values[0]); gtype = g_type_from_name (class_name); if (gtype == 0) { g_warning("Unknown GObject type '%s'", class_name); return; } } if (strcmp(element_name, "property") == 0 && gtype != 0) { int i=0; while (attribute_names[i] != NULL) { if (strcmp (attribute_names[i], "name") == 0) { g_free (property_name); property_name = g_strdup (attribute_values[i]); } i++; } } } /* Called for close tags */ static void _end_element (GMarkupParseContext *context, const gchar *element_name, gpointer user_data, GError **error) { VikGobjectBuilder *self = VIK_GOBJECT_BUILDER (user_data); gpointer object = NULL; if (strcmp(element_name, "object") == 0 && gtype != 0) { object = g_object_newv(gtype, nb_parameters, parameters); if (object != NULL) { g_debug("VikGobjectBuilder: new GObject of type %s", g_type_name(gtype)); g_signal_emit ( G_OBJECT(self), gobject_builder_signals[NEW_OBJECT], 0, object ); g_object_unref (object); } /* Free memory */ int i = 0; for (i = 0 ; i < nb_parameters ; i++) { g_free ((gchar *)parameters[i].name); g_value_unset (&(parameters[i].value)); } g_free (parameters); parameters = NULL; nb_parameters = 0; gtype = 0; } if (strcmp(element_name, "property") == 0) { g_free (property_name); property_name = NULL; } } /* Called for character data */ /* text is not nul-terminated */ static void _text (GMarkupParseContext *context, const gchar *text, gsize text_len, gpointer user_data, GError **error) { if (strcmp (g_markup_parse_context_get_element (context), "property") == 0) { GValue gvalue = {0}; gboolean found = FALSE; if (gtype != 0 && property_name != NULL) { /* parameter value */ /* We have to retrieve the expected type of the value * in order to do the correct transformation */ GObjectClass *oclass; oclass = g_type_class_ref (gtype); g_assert (oclass != NULL); GParamSpec *pspec; pspec = g_object_class_find_property (G_OBJECT_CLASS (oclass), property_name); if (!pspec) { g_warning ("Unknown property: %s.%s", g_type_name (gtype), property_name); return; } gchar *value = g_strndup (text, text_len); found = gtk_builder_value_from_string_type(NULL, pspec->value_type, value, &gvalue, NULL); g_free (value); } if (G_IS_VALUE (&gvalue) && found == TRUE) { /* store new parameter */ g_debug("VikGobjectBuilder: store new GParameter for %s: (%s)%s=%*s", g_type_name(gtype), g_type_name(G_VALUE_TYPE(&gvalue)), property_name, (gint)text_len, text); nb_parameters++; parameters = g_realloc(parameters, sizeof(GParameter)*nb_parameters); /* parameter name */ parameters[nb_parameters-1].name = g_strdup(property_name); /* parameter value */ parameters[nb_parameters-1].value = gvalue; } } } VikGobjectBuilder * vik_gobject_builder_new (void) { return g_object_new (VIK_TYPE_GOBJECT_BUILDER, NULL); } void vik_gobject_builder_parse (VikGobjectBuilder *self, const gchar *filename) { GMarkupParser xml_parser; GMarkupParseContext *xml_context; GError *error = NULL; FILE *file = g_fopen (filename, "r"); if (file == NULL) /* TODO emit warning */ return; /* setup context parse (ie callbacks) */ xml_parser.start_element = &_start_element; xml_parser.end_element = &_end_element; xml_parser.text = &_text; xml_parser.passthrough = NULL; xml_parser.error = NULL; xml_context = g_markup_parse_context_new(&xml_parser, 0, self, NULL); gchar buff[BUFSIZ]; size_t nb; while ((nb = fread (buff, sizeof(gchar), BUFSIZ, file)) > 0) { if (!g_markup_parse_context_parse(xml_context, buff, nb, &error)) g_warning("%s: parsing error: %s", __FUNCTION__, error != NULL ? error->message : "???"); } /* cleanup */ if (!g_markup_parse_context_end_parse(xml_context, &error)) g_warning("%s: errors occurred reading file '%s': %s", __FUNCTION__, filename, error != NULL ? error->message : "???"); g_markup_parse_context_free(xml_context); fclose (file); } viking-1.4.2/src/viktrwlayer_geotag.c0000644000175000017500000005534112175546146014615 00000000000000/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2011, Rob Norris * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ /* * Similar to the track and trackpoint properties dialogs, * this is made a separate file for ease of grouping related stuff together */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include #include #include #include "viking.h" #include "vikfilelist.h" #include "geotag_exif.h" #include "thumbnails.h" #include "background.h" // Function taken from GPSCorrelate 1.6.1 // ConvertToUnixTime Copyright 2005 Daniel Foote. GPL2+ #define EXIF_DATE_FORMAT "%d:%d:%d %d:%d:%d" time_t ConvertToUnixTime(char* StringTime, char* Format, int TZOffsetHours, int TZOffsetMinutes) { /* Read the time using the specified format. * The format and string being read from must * have the most significant time on the left, * and the least significant on the right: * ie, Year on the left, seconds on the right. */ /* Sanity check... */ if (StringTime == NULL || Format == NULL) { return 0; } /* Define and set up our structure. */ struct tm Time; Time.tm_wday = 0; Time.tm_yday = 0; Time.tm_isdst = -1; /* Read out the time from the string using our format. */ sscanf(StringTime, Format, &Time.tm_year, &Time.tm_mon, &Time.tm_mday, &Time.tm_hour, &Time.tm_min, &Time.tm_sec); /* Adjust the years for the mktime function to work. */ Time.tm_year -= 1900; Time.tm_mon -= 1; /* Add our timezone offset to the time. * We don't check to see if it overflowed anything; * mktime does this and fixes it for us. */ /* Note also that we SUBTRACT these times. We want the * result to be in UTC. */ Time.tm_hour -= TZOffsetHours; Time.tm_min -= TZOffsetMinutes; /* Calculate and return the unix time. */ return mktime(&Time); } // GPSCorrelate END typedef struct { GtkWidget *dialog; VikFileList *files; VikTrwLayer *vtl; // to pass on VikTrack *track; // Use specified track or all tracks if NULL GtkCheckButton *create_waypoints_b; GtkLabel *overwrite_waypoints_l; // Referenced so the sensitivity can be changed GtkCheckButton *overwrite_waypoints_b; GtkCheckButton *write_exif_b; GtkLabel *overwrite_gps_exif_l; // Referenced so the sensitivity can be changed GtkCheckButton *overwrite_gps_exif_b; GtkLabel *no_change_mtime_l; // Referenced so the sensitivity can be changed GtkCheckButton *no_change_mtime_b; GtkCheckButton *interpolate_segments_b; GtkEntry *time_zone_b; // TODO consider a more user friendly tz widget eg libtimezonemap or similar GtkEntry *time_offset_b; } GeoTagWidgets; static GeoTagWidgets *geotag_widgets_new() { GeoTagWidgets *widgets = g_malloc0(sizeof(GeoTagWidgets)); return widgets; } static void geotag_widgets_free ( GeoTagWidgets *widgets ) { // Need to free VikFileList?? g_free(widgets); } typedef struct { gboolean create_waypoints; gboolean overwrite_waypoints; gboolean write_exif; gboolean overwrite_gps_exif; gboolean no_change_mtime; gboolean interpolate_segments; gint time_offset; gint TimeZoneHours; gint TimeZoneMins; } option_values_t; typedef struct { VikTrwLayer *vtl; gchar *image; VikTrack *track; // Use specified track or all tracks if NULL // User options... option_values_t ov; GList *files; time_t PhotoTime; // Store answer from interpolation for an image gboolean found_match; VikCoord coord; gdouble altitude; // If anything has changed gboolean redraw; } geotag_options_t; static option_values_t default_values = { TRUE, TRUE, TRUE, FALSE, TRUE, TRUE, 0, 0, 0, }; /** * Correlate the image against the specified track */ static void trw_layer_geotag_track ( const gpointer id, VikTrack *track, geotag_options_t *options ) { // If already found match then don't need to check this track if ( options->found_match ) return; VikTrackpoint *trkpt; VikTrackpoint *trkpt_next; GList *mytrkpt; for ( mytrkpt = track->trackpoints; mytrkpt; mytrkpt = mytrkpt->next ) { // Do something for this trackpoint... trkpt = VIK_TRACKPOINT(mytrkpt->data); // is it exactly this point? if ( options->PhotoTime == trkpt->timestamp ) { options->coord = trkpt->coord; options->altitude = trkpt->altitude; options->found_match = TRUE; break; } // Now need two trackpoints, hence check next is available if ( !mytrkpt->next ) break; trkpt_next = VIK_TRACKPOINT(mytrkpt->next->data); // TODO need to use 'has_timestamp' property if ( trkpt->timestamp == trkpt_next->timestamp ) continue; if ( trkpt->timestamp > trkpt_next->timestamp ) continue; // When interpolating between segments, no need for any special segment handling if ( !options->ov.interpolate_segments ) // Don't check between segments if ( trkpt_next->newsegment ) // Simply move on to consider next point continue; // Too far if ( trkpt->timestamp > options->PhotoTime ) break; // Is is between this and the next point? if ( (options->PhotoTime > trkpt->timestamp) && (options->PhotoTime < trkpt_next->timestamp) ) { options->found_match = TRUE; // Interpolate /* Calculate the "scale": a decimal giving the relative distance * in time between the two points. Ie, a number between 0 and 1 - * 0 is the first point, 1 is the next point, and 0.5 would be * half way. */ gdouble scale = (gdouble)trkpt_next->timestamp - (gdouble)trkpt->timestamp; scale = ((gdouble)options->PhotoTime - (gdouble)trkpt->timestamp) / scale; struct LatLon ll_result, ll1, ll2; vik_coord_to_latlon ( &(trkpt->coord), &ll1 ); vik_coord_to_latlon ( &(trkpt_next->coord), &ll2 ); ll_result.lat = ll1.lat + ((ll2.lat - ll1.lat) * scale); // NB This won't cope with going over the 180 degrees longitude boundary ll_result.lon = ll1.lon + ((ll2.lon - ll1.lon) * scale); // set coord vik_coord_load_from_latlon ( &(options->coord), VIK_COORD_LATLON, &ll_result ); // Interpolate elevation options->altitude = trkpt->altitude + ((trkpt_next->altitude - trkpt->altitude) * scale); break; } } } /** * Correlate the image to any track within the TrackWaypoint layer */ static void trw_layer_geotag_process ( geotag_options_t *options ) { if ( !options->vtl || !IS_VIK_LAYER(options->vtl) ) return; if ( !options->image ) return; gboolean has_gps_exif = FALSE; gchar* datetime = a_geotag_get_exif_date_from_file ( options->image, &has_gps_exif ); if ( datetime ) { // If image already has gps info - don't attempt to change it. if ( !options->ov.overwrite_gps_exif && has_gps_exif ) { if ( options->ov.create_waypoints ) { // Create waypoint with file information gchar *name = NULL; VikWaypoint *wp = a_geotag_create_waypoint_from_file ( options->image, vik_trw_layer_get_coord_mode (options->vtl), &name ); if ( !wp ) { // Couldn't create Waypoint g_free ( datetime ); return; } if ( !name ) name = g_strdup ( a_file_basename ( options->image ) ); gboolean updated_waypoint = FALSE; if ( options->ov.overwrite_waypoints ) { VikWaypoint *current_wp = vik_trw_layer_get_waypoint ( options->vtl, name ); if ( current_wp ) { // Existing wp found, so set new position, comment and image current_wp = a_geotag_waypoint_positioned ( options->image, wp->coord, wp->altitude, &name, current_wp ); updated_waypoint = TRUE; } } if ( !updated_waypoint ) { vik_trw_layer_filein_add_waypoint ( options->vtl, name, wp ); } g_free ( name ); // Mark for redraw options->redraw = TRUE; } g_free ( datetime ); return; } options->PhotoTime = ConvertToUnixTime ( datetime, EXIF_DATE_FORMAT, options->ov.TimeZoneHours, options->ov.TimeZoneMins); g_free ( datetime ); // Apply any offset options->PhotoTime = options->PhotoTime + options->ov.time_offset; options->found_match = FALSE; if ( options->track ) { // Single specified track // NB Doesn't care about track id trw_layer_geotag_track ( NULL, options->track, options ); } else { // Try all tracks GHashTable *tracks = vik_trw_layer_get_tracks ( options->vtl ); if ( g_hash_table_size (tracks) > 0 ) { g_hash_table_foreach ( tracks, (GHFunc) trw_layer_geotag_track, options ); } } // Match found ? if ( options->found_match ) { if ( options->ov.create_waypoints ) { gboolean updated_waypoint = FALSE; if ( options->ov.overwrite_waypoints ) { // Update existing WP // Find a WP with current name gchar *name = NULL; name = g_strdup ( a_file_basename ( options->image ) ); VikWaypoint *wp = vik_trw_layer_get_waypoint ( options->vtl, name ); if ( wp ) { // Found, so set new position, comment and image wp = a_geotag_waypoint_positioned ( options->image, options->coord, options->altitude, &name, wp ); updated_waypoint = TRUE; } g_free ( name ); } if ( !updated_waypoint ) { // Create waypoint with found position gchar *name = NULL; VikWaypoint *wp = a_geotag_waypoint_positioned ( options->image, options->coord, options->altitude, &name, NULL ); if ( !name ) name = g_strdup ( a_file_basename ( options->image ) ); vik_trw_layer_filein_add_waypoint ( options->vtl, name, wp ); g_free ( name ); } // Mark for redraw options->redraw = TRUE; } // Write EXIF if specified if ( options->ov.write_exif ) { a_geotag_write_exif_gps ( options->image, options->coord, options->altitude, options->ov.no_change_mtime ); } } } } /* * Tidy up */ static void trw_layer_geotag_thread_free ( geotag_options_t *gtd ) { if ( gtd->files ) g_list_free ( gtd->files ); g_free ( gtd ); } /** * Run geotagging process in a separate thread */ static int trw_layer_geotag_thread ( geotag_options_t *options, gpointer threaddata ) { guint total = g_list_length(options->files), done = 0; // TODO decide how to report any issues to the user ... // Foreach file attempt to geotag it while ( options->files ) { options->image = (gchar *) ( options->files->data ); trw_layer_geotag_process ( options ); options->files = options->files->next; // Update thread progress and detect stop requests int result = a_background_thread_progress ( threaddata, ((gdouble) ++done) / total ); if ( result != 0 ) return -1; /* Abort thread */ } if ( options->redraw ) { if ( IS_VIK_LAYER(options->vtl) ) { // Ensure any new images get shown trw_layer_verify_thumbnails ( options->vtl, NULL ); // NB second parameter not used ATM // Force redraw as verify only redraws if there are new thumbnails (they may already exist) vik_layer_emit_update ( VIK_LAYER(options->vtl) ); // NB Update from background } } return 0; } /** * Parse user input from dialog response */ static void trw_layer_geotag_response_cb ( GtkDialog *dialog, gint resp, GeoTagWidgets *widgets ) { switch (resp) { case GTK_RESPONSE_DELETE_EVENT: /* received delete event (not from buttons) */ case GTK_RESPONSE_REJECT: break; default: { //GTK_RESPONSE_ACCEPT: // Get options geotag_options_t *options = g_malloc ( sizeof(geotag_options_t) ); options->vtl = widgets->vtl; options->track = widgets->track; // Values extracted from the widgets: options->ov.create_waypoints = gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON(widgets->create_waypoints_b) ); options->ov.overwrite_waypoints = gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON(widgets->overwrite_waypoints_b) ); options->ov.write_exif = gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON(widgets->write_exif_b) ); options->ov.overwrite_gps_exif = gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON(widgets->overwrite_gps_exif_b) ); options->ov.no_change_mtime = gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON(widgets->no_change_mtime_b) ); options->ov.interpolate_segments = gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON(widgets->interpolate_segments_b) ); options->ov.TimeZoneHours = 0; options->ov.TimeZoneMins = 0; const gchar* TZString = gtk_entry_get_text(GTK_ENTRY(widgets->time_zone_b)); /* Check the string. If there is a colon, then (hopefully) it's a time in xx:xx format. * If not, it's probably just a +/-xx format. In all other cases, * it will be interpreted as +/-xx, which, if given a string, returns 0. */ if (strstr(TZString, ":")) { /* Found colon. Split into two. */ sscanf(TZString, "%d:%d", &options->ov.TimeZoneHours, &options->ov.TimeZoneMins); if (options->ov.TimeZoneHours < 0) options->ov.TimeZoneMins *= -1; } else { /* No colon. Just parse. */ options->ov.TimeZoneHours = atoi(TZString); } options->ov.time_offset = atoi ( gtk_entry_get_text ( GTK_ENTRY(widgets->time_offset_b) ) ); options->redraw = FALSE; // Save settings for reuse default_values = options->ov; options->files = g_list_copy ( vik_file_list_get_files ( widgets->files ) ); gint len = g_list_length ( options->files ); gchar *tmp = g_strdup_printf ( _("Geotagging %d Images..."), len ); // Processing lots of files can take time - so run a background effort a_background_thread ( VIK_GTK_WINDOW_FROM_LAYER(options->vtl), tmp, (vik_thr_func) trw_layer_geotag_thread, options, (vik_thr_free_func) trw_layer_geotag_thread_free, NULL, len ); g_free ( tmp ); break; } } geotag_widgets_free ( widgets ); gtk_widget_destroy ( GTK_WIDGET(dialog) ); } /** * Handle widget sensitivities */ static void write_exif_b_cb ( GtkWidget *gw, GeoTagWidgets *gtw ) { // Overwriting & file modification times are irrelevant if not going to write EXIF! if ( gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON(gtw->write_exif_b) ) ) { gtk_widget_set_sensitive ( GTK_WIDGET(gtw->overwrite_gps_exif_b), TRUE ); gtk_widget_set_sensitive ( GTK_WIDGET(gtw->overwrite_gps_exif_l), TRUE ); gtk_widget_set_sensitive ( GTK_WIDGET(gtw->no_change_mtime_b), TRUE ); gtk_widget_set_sensitive ( GTK_WIDGET(gtw->no_change_mtime_l), TRUE ); } else { gtk_widget_set_sensitive ( GTK_WIDGET(gtw->overwrite_gps_exif_b), FALSE ); gtk_widget_set_sensitive ( GTK_WIDGET(gtw->overwrite_gps_exif_l), FALSE ); gtk_widget_set_sensitive ( GTK_WIDGET(gtw->no_change_mtime_b), FALSE ); gtk_widget_set_sensitive ( GTK_WIDGET(gtw->no_change_mtime_l), FALSE ); } } static void create_waypoints_b_cb ( GtkWidget *gw, GeoTagWidgets *gtw ) { // Overwriting waypoints are irrelevant if not going to create them! if ( gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON(gtw->create_waypoints_b) ) ) { gtk_widget_set_sensitive ( GTK_WIDGET(gtw->overwrite_waypoints_b), TRUE ); gtk_widget_set_sensitive ( GTK_WIDGET(gtw->overwrite_waypoints_l), TRUE ); } else { gtk_widget_set_sensitive ( GTK_WIDGET(gtw->overwrite_waypoints_b), FALSE ); gtk_widget_set_sensitive ( GTK_WIDGET(gtw->overwrite_waypoints_l), FALSE ); } } /** * trw_layer_geotag_dialog: * @parent: The Window of the calling process * @vtl: The VikTrwLayer to use for correlating images to tracks * @track: Optional - The particular track to use (if specified) for correlating images * @track_name: Optional - The name of specified track to use */ void trw_layer_geotag_dialog ( GtkWindow *parent, VikTrwLayer *vtl, VikTrack *track, const gchar *track_name ) { GeoTagWidgets *widgets = geotag_widgets_new(); widgets->dialog = gtk_dialog_new_with_buttons ( _("Geotag Images"), parent, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL ); widgets->files = VIK_FILE_LIST(vik_file_list_new ( _("Images") )); // TODO would be nice to be able to set a filefilter widgets->vtl = vtl; widgets->track = track; widgets->create_waypoints_b = GTK_CHECK_BUTTON ( gtk_check_button_new () ); widgets->overwrite_waypoints_l = GTK_LABEL ( gtk_label_new ( _("Overwrite Existing Waypoints:") ) ); widgets->overwrite_waypoints_b = GTK_CHECK_BUTTON ( gtk_check_button_new () ); widgets->write_exif_b = GTK_CHECK_BUTTON ( gtk_check_button_new () ); widgets->overwrite_gps_exif_l = GTK_LABEL ( gtk_label_new ( _("Overwrite Existing GPS Information:") ) ); widgets->overwrite_gps_exif_b = GTK_CHECK_BUTTON ( gtk_check_button_new () ); widgets->no_change_mtime_l = GTK_LABEL ( gtk_label_new ( _("Keep File Modification Timestamp:") ) ); widgets->no_change_mtime_b = GTK_CHECK_BUTTON ( gtk_check_button_new () ); widgets->interpolate_segments_b = GTK_CHECK_BUTTON ( gtk_check_button_new () ); widgets->time_zone_b = GTK_ENTRY ( gtk_entry_new () ); widgets->time_offset_b = GTK_ENTRY ( gtk_entry_new () ); gtk_entry_set_width_chars ( widgets->time_zone_b, 7); gtk_entry_set_width_chars ( widgets->time_offset_b, 7); // Defaults - TODO restore previous values / save settings somewhere?? gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON(widgets->create_waypoints_b), default_values.create_waypoints ); gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON(widgets->overwrite_waypoints_b), default_values.overwrite_waypoints ); gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON(widgets->write_exif_b), default_values.write_exif ); gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON(widgets->overwrite_gps_exif_b), default_values.overwrite_gps_exif ); gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON(widgets->no_change_mtime_b), default_values.no_change_mtime ); gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON(widgets->interpolate_segments_b), default_values.interpolate_segments ); gchar tmp_string[7]; snprintf (tmp_string, 7, "%+02d:%02d", default_values.TimeZoneHours, abs (default_values.TimeZoneMins) ); gtk_entry_set_text ( widgets->time_zone_b, tmp_string ); snprintf (tmp_string, 7, "%d", default_values.time_offset ); gtk_entry_set_text ( widgets->time_offset_b, tmp_string ); // Ensure sensitivities setup write_exif_b_cb ( GTK_WIDGET(widgets->write_exif_b), widgets ); g_signal_connect ( G_OBJECT(widgets->write_exif_b), "toggled", G_CALLBACK(write_exif_b_cb), widgets ); create_waypoints_b_cb ( GTK_WIDGET(widgets->create_waypoints_b), widgets ); g_signal_connect ( G_OBJECT(widgets->create_waypoints_b), "toggled", G_CALLBACK(create_waypoints_b_cb), widgets ); GtkWidget *cw_hbox = gtk_hbox_new ( FALSE, 0 ); gtk_box_pack_start ( GTK_BOX(cw_hbox), gtk_label_new ( _("Create Waypoints:") ), FALSE, FALSE, 5 ); gtk_box_pack_start ( GTK_BOX(cw_hbox), GTK_WIDGET(widgets->create_waypoints_b), FALSE, FALSE, 5 ); GtkWidget *ow_hbox = gtk_hbox_new ( FALSE, 0 ); gtk_box_pack_start ( GTK_BOX(ow_hbox), GTK_WIDGET(widgets->overwrite_waypoints_l), FALSE, FALSE, 5 ); gtk_box_pack_start ( GTK_BOX(ow_hbox), GTK_WIDGET(widgets->overwrite_waypoints_b), FALSE, FALSE, 5 ); GtkWidget *we_hbox = gtk_hbox_new ( FALSE, 0 ); gtk_box_pack_start ( GTK_BOX(we_hbox), gtk_label_new ( _("Write EXIF:") ), FALSE, FALSE, 5 ); gtk_box_pack_start ( GTK_BOX(we_hbox), GTK_WIDGET(widgets->write_exif_b), FALSE, FALSE, 5 ); GtkWidget *og_hbox = gtk_hbox_new ( FALSE, 0 ); gtk_box_pack_start ( GTK_BOX(og_hbox), GTK_WIDGET(widgets->overwrite_gps_exif_l), FALSE, FALSE, 5 ); gtk_box_pack_start ( GTK_BOX(og_hbox), GTK_WIDGET(widgets->overwrite_gps_exif_b), FALSE, FALSE, 5 ); GtkWidget *fm_hbox = gtk_hbox_new ( FALSE, 0 ); gtk_box_pack_start ( GTK_BOX(fm_hbox), GTK_WIDGET(widgets->no_change_mtime_l), FALSE, FALSE, 5 ); gtk_box_pack_start ( GTK_BOX(fm_hbox), GTK_WIDGET(widgets->no_change_mtime_b), FALSE, FALSE, 5 ); GtkWidget *is_hbox = gtk_hbox_new ( FALSE, 0 ); gtk_box_pack_start ( GTK_BOX(is_hbox), gtk_label_new ( _("Interpolate Between Track Segments:") ), FALSE, FALSE, 5 ); gtk_box_pack_start ( GTK_BOX(is_hbox), GTK_WIDGET(widgets->interpolate_segments_b), FALSE, FALSE, 5 ); GtkWidget *to_hbox = gtk_hbox_new ( FALSE, 0 ); gtk_box_pack_start ( GTK_BOX(to_hbox), gtk_label_new ( _("Image Time Offset (Seconds):") ), FALSE, FALSE, 5 ); gtk_box_pack_start ( GTK_BOX(to_hbox), GTK_WIDGET(widgets->time_offset_b), FALSE, FALSE, 5 ); gtk_widget_set_tooltip_text ( GTK_WIDGET(widgets->time_offset_b), _("The number of seconds to ADD to the photos time to make it match the GPS data. Calculate this with (GPS - Photo). Can be negative or positive. Useful to adjust times when a camera's timestamp was incorrect.") ); GtkWidget *tz_hbox = gtk_hbox_new ( FALSE, 0 ); gtk_box_pack_start ( GTK_BOX(tz_hbox), gtk_label_new ( _("Image Timezone:") ), FALSE, FALSE, 5 ); gtk_box_pack_start ( GTK_BOX(tz_hbox), GTK_WIDGET(widgets->time_zone_b), FALSE, FALSE, 5 ); gtk_widget_set_tooltip_text ( GTK_WIDGET(widgets->time_zone_b), _("The timezone that was used when the images were created. For example, if a camera is set to AWST or +8:00 hours. Enter +8:00 here so that the correct adjustment to the images' time can be made. GPS data is always in UTC.") ); gchar *track_string = NULL; if ( widgets->track ) track_string = g_strdup_printf ( _("Using track: %s"), track_name ); else track_string = g_strdup_printf ( _("Using all tracks in: %s"), VIK_LAYER(widgets->vtl)->name ); gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(widgets->dialog)->vbox), gtk_label_new ( track_string ), FALSE, FALSE, 5 ); gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(widgets->dialog)->vbox), GTK_WIDGET(widgets->files), TRUE, TRUE, 0 ); gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(widgets->dialog)->vbox), cw_hbox, FALSE, FALSE, 0); gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(widgets->dialog)->vbox), ow_hbox, FALSE, FALSE, 0); gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(widgets->dialog)->vbox), we_hbox, FALSE, FALSE, 0); gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(widgets->dialog)->vbox), og_hbox, FALSE, FALSE, 0); gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(widgets->dialog)->vbox), fm_hbox, FALSE, FALSE, 0); gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(widgets->dialog)->vbox), is_hbox, FALSE, FALSE, 0); gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(widgets->dialog)->vbox), to_hbox, FALSE, FALSE, 0); gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(widgets->dialog)->vbox), tz_hbox, FALSE, FALSE, 0); g_signal_connect ( widgets->dialog, "response", G_CALLBACK(trw_layer_geotag_response_cb), widgets ); gtk_dialog_set_default_response ( GTK_DIALOG(widgets->dialog), GTK_RESPONSE_REJECT ); gtk_widget_show_all ( widgets->dialog ); g_free ( track_string ); } viking-1.4.2/src/degrees_converters.c0000644000175000017500000001050012152216677014556 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2006-2007, Guilhem Bonnefille * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef HAVE_MATH_H #include #endif #include #include #define DEGREE_SYMBOL "\302\260" /** * @param pos_c char for positive value * @param neg_c char for negative value */ static gchar *convert_dec_to_ddd(gdouble dec, gchar pos_c, gchar neg_c) { gchar sign_c = ' '; gdouble val_d; gchar *result = NULL; if ( dec > 0 ) sign_c = pos_c; else if ( dec < 0 ) sign_c = neg_c; else /* Nul value */ sign_c = ' '; /* Degree */ val_d = fabs(dec); /* Format */ result = g_strdup_printf ( "%c%f" DEGREE_SYMBOL, sign_c, val_d ); return result; } gchar *convert_lat_dec_to_ddd(gdouble lat) { return convert_dec_to_ddd(lat, 'N', 'S'); } gchar *convert_lon_dec_to_ddd(gdouble lon) { return convert_dec_to_ddd(lon, 'E', 'W'); } /** * @param pos_c char for positive value * @param neg_c char for negative value */ static gchar *convert_dec_to_dmm(gdouble dec, gchar pos_c, gchar neg_c) { gdouble tmp; gchar sign_c = ' '; gint val_d; gdouble val_m; gchar *result = NULL; if ( dec > 0 ) sign_c = pos_c; else if ( dec < 0 ) sign_c = neg_c; else /* Nul value */ sign_c = ' '; /* Degree */ tmp = fabs(dec); val_d = (gint)tmp; /* Minutes */ val_m = (tmp - val_d) * 60; /* Format */ result = g_strdup_printf ( "%c%d" DEGREE_SYMBOL "%f'", sign_c, val_d, val_m ); return result; } gchar *convert_lat_dec_to_dmm(gdouble lat) { return convert_dec_to_dmm(lat, 'N', 'S'); } gchar *convert_lon_dec_to_dmm(gdouble lon) { return convert_dec_to_dmm(lon, 'E', 'W'); } /** * @param pos_c char for positive value * @param neg_c char for negative value */ static gchar *convert_dec_to_dms(gdouble dec, gchar pos_c, gchar neg_c) { gdouble tmp; gchar sign_c = ' '; gint val_d, val_m; gdouble val_s; gchar *result = NULL; if ( dec > 0 ) sign_c = pos_c; else if ( dec < 0 ) sign_c = neg_c; else /* Nul value */ sign_c = ' '; /* Degree */ tmp = fabs(dec); val_d = (gint)tmp; /* Minutes */ tmp = (tmp - val_d) * 60; val_m = (gint)tmp; /* Minutes */ val_s = (tmp - val_m) * 60; /* Format */ result = g_strdup_printf ( "%c%d" DEGREE_SYMBOL "%d'%.4f\"", sign_c, val_d, val_m, val_s ); return result; } gchar *convert_lat_dec_to_dms(gdouble lat) { return convert_dec_to_dms(lat, 'N', 'S'); } gchar *convert_lon_dec_to_dms(gdouble lon) { return convert_dec_to_dms(lon, 'E', 'W'); } gdouble convert_dms_to_dec(const gchar *dms) { gdouble d = 0.0; /* Degree */ gdouble m = 0.0; /* Minutes */ gdouble s = 0.0; /* Seconds */ gint neg = FALSE; gdouble result; if (dms != NULL) { int nbFloat = 0; const gchar *ptr, *endptr; // Compute the sign // It is negative if: // - the '-' sign occurs // - it is a west longitude or south latitude if (strpbrk (dms, "-wWsS") != NULL) neg = TRUE; // Peek the diffrent components endptr = dms; do { gdouble value; ptr = strpbrk (endptr, "0123456789,."); if (ptr != NULL) { value = g_strtod((const gchar *)ptr, (gchar **)&endptr); nbFloat++; switch(nbFloat) { case 1: d = value; break; case 2: m = value; break; case 3: s = value; break; } } } while (ptr != NULL && endptr != NULL); } // Compute the result result = d + m/60 + s/3600; if (neg) result = - result; return result; } viking-1.4.2/src/bbox.h0000644000175000017500000000235212120725153011620 00000000000000/* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * * Copyright (C) 2011, Guilhem Bonnefille * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef __BOUNDING_BOX_H #define __BOUNDING_BOX_H typedef struct { gdouble south, north; gdouble east, west; } LatLonBBox; /** * +--------+ * |a | * | +--+----+ * | | | | * +-----+--+ | * | b| * +-------+ */ #define BBOX_INTERSECT(a,b) ((a).south < (b).north && (a).north > (b).south && (a).east > (b).west && (a).west < (b).east) #endif viking-1.4.2/ChangeLog0000644000175000017500000043711712175546637011535 00000000000000 2013-07-26 Rob Norris : * Releasing Viking 1.4.2 2013-07-18 Rob Norris : * Fix menu use of named own Icons since the icons were renamed some time ago. 2013-07-15 Rob Norris : * [QA] Fix memory leak in drawing new tracks/routes. * [QA] Fix memory leak on deleting TrackWaypoint layers. * [QA] Fix large memory leak on viewing Track Properties. * [QA] Fix incorrect iterator usage. * [QA] Fix memory leaks on reading in Viking files. * [QA] Fix memory leak in treeview tooltips and selection. * [QA] Fix large memory leak when removing DEM layers. 2013-07-09 Rob Norris : * Fix some interpolated values of a trackpoint on insertion between points. 2013-07-07 Rob Norris : * Fix handling failed downloads with the My OSM Traces method. * SF Bugs#101: Fix Acquire from Google Directions. 2013-07-06 Rob Norris : * Fix name search using Google. * SF Bugs#100: Fix Crash on viewing Track Properties with extreme gradients. * SF Bugs#97: Fix missing redownload settings of some maps in the example config * SF Bugs#99: Increase limit for Map IDs 2013-06-06 Rob Norris : * Automated check for the latest version. ATM only on Windows systems. * Enable getting Viking Version as a number from a string to enable comparisons. * SF#3613971: Remove Geofabrik's OpenStreetMap WMS, as it is not for public use. * SF#3613971: Remove Geofabrik's OpenStreetMap WMS, as it is not for public use. * Don't silently fail on attempting to split to a track. * Fix background thread statusbar update instability. * Fix location of gdk_threads_enter() to be before first window creation. * Allow Bing Map source URL to be set via the configuration XML file. 2013-06-06 Michael Klein : * SF#3610708: Fix Failing to Load DEM files on Big Endian Systems. 2013-04-27 Rob Norris : * Fix incorrect setting to lowest zoom value when clicking away from the statusbar zoom menu. * [QA] Improve create zoom menu to use G_N_ELEMENTS to know array bounds. 2013-04-08 Rob Norris : * Releasing 1.4.1 * Document previous translation updates * Import Launchpad translation updates * Fix using .vik files with 'unusual' track or waypoint names * Fix waypoint selection when the waypoint has an image but the images are not being displayed. 2013-03-24 Rob Norris : * Fix showing map timestamps on Windows on the map tile info dialog. * SF#3608411: Part 2 - Avoid creating command window on Viking start-up. * SF#3608411: Part 1 - Avoid warning about unbuffer on Windows Systems. * SF#3608264: Improve Statusbar Location Info Maybe Truncated * Prevent inputting empty names for layers and sublayers via the layers panel. * SF#3608311: Fix crash caused by renaming blank sublayer names 2013-03-24 Wolfgang Goetz : * Be less strigent in loading Geotagged images without optional GPS tags 2013-03-24 Rob Norris : * Fix use of scaled tile image when tile image not present. * Enable updating the treeview to allow setting a blank waypoint symbol. * Improve the Waypoint tooltip to display the description if there is no comment. * Fix datasource acquiring waypoints from geotag images. * [QA] Remove unused variable in VikWindow. * Better copying of limited sized string. * [DOC] Update the TODO file to say that it's old and superseded by the wiki. * Updated geo-* scripts to version released on 2013/02/18 * Fix compilation with --enable-geocaches option. 2013-03-24 Greg Troxel : * help/Makefile.am: explicitly list figures. 2013-02-16 Rob Norris : * Releasing 1.4.0.1 2013-02-16 Mathieu Albinet : * Windows: Add .vik file extension association option in the installer 2013-02-11 Rob Norris : * Releasing Viking 1.4.0 * Document previous translation updates * Import Launchpad translation updates * [DOC] Add an example screenshot of Viking. * [DOC] Update map download tool text. * Fix copy and paste typo in a Windows script. * Fix crashing if creating a DEM layer with no files. 2013-02-09 Rob Norris : * Fix usage of GDateTime functionality which is only in GLIB 2.26 and newer. * Fix crash when cancelling an 'Acquire' in progress thread task. * Need more files for Windows packaging. * Fix potential unnecessary exit in trying to handle spawning of external command. * Restore help files to being part of the source distribution. * Remove checking of unused headers and functions. * Remove useless include. 2013-02-04 Cristian Klein : * Fix: crash when dealing with non-compressed DEM files 2013-02-04 Rob Norris : * Include Windows scripts in the source distribution. 2013-02-03 Rob Norris : * Windows: Script full generation of Windows build from scratch for version 1.4. 2013-01-31 Rob Norris : * Improve Windows installer script. * Make the Spanish version of the Windows Installer actually selectable. * Fix Windows installer script to run on a real Windows system. * Add Windows installer files to be included in a 'make dist' source distribution * [DOC] Minor corrections * [DOC] Remove really old file * Remember to add support of Finnish translation 2013-01-30 Rob Norris : * Merge branch 'i18n-launchpad' * Define Windows build version in the Installer script. * Windows build installation steps in installer.bat script file. * [QA] Remember Exif library removal on Windows deinstall. * Document previous translation updates * Import Launchpad translation updates from 1.3 2013-01-28 Rob Norris : * Add simple dialog to show map tile information. * Ensure tracks coloured according to the draw mode. 2013-01-26 Guilhem Bonnefille : * Remove zoom combobox in toolbar * Add a zoom selector on status bar 2013-01-26 Rob Norris : * Add file version to .vik files. * Ensure when creating tracks they are allocated a colour. * Rework TrackWaypoint layer option to draw 'All Tracks Black' into 'All Tracks Same Color'. * Add map layer option to only download missing tiles. * [QA] Remove unneeded include. * [QA] Better variable naming * Maintain script output of TrackWaypoint layer format. * [QA] Reduce warnings when compiling with Clang. * [QA] Actually use results from IS_VIK_* calls. * Add more files to ignore, when building on Windows 2013-01-23 Rob Norris : * Merge branch 'MyOSMTraces' * [DOC] Add My OSM Traces help. * Add marker to indicate whether my tracks from OSM starts within the current viewport. * Add Acquiring 'My' OSM Traces as a datasource. * [DOC] Top layer can no longer be renamed. * [DOC] Fix internal doc reference. 2013-01-21 Guilhem Bonnefille : * [QA] Apply naming convention to GType macros (vikviewport) 2013-01-20 Guilhem Bonnefille : * [QA] Replace some coef with more explicit function * [QA] Convert DEG2RAD and RAD2DEG to macro functions 2013-01-20 Rob Norris : * [QA] Tidy up vikgoto header usage. * [QA] datasource_geotag tidy ups + fix copyright * [QA] Prefer g_strdup() over strdup(). Also gives clean cppcheck 1.57 run. * [QA] Adjust test and move variable declaration to give clean a cppcheck 1.57 run 2013-01-19 Rob Norris : * [DOC] Add further TrackWaypoint detail. * [DOC] Promote individual layers into top level sections. * [DOC] Improve Acquire help wording and links to TrackWaypoint layer. * [DOC] Fix internal document linking when used with Yelp. * Add TrackWaypoint layer Delete menu options for routes. * Merge branch 'WikipediaPointsRework' * [DOC] Update Wikipedia Waypoints to be from the Acquire menu level. * Fix geonamessearch to handle not being able to map a file to memory. * Use Wikipedia featue type to generate a suitable waypoint icon * Use elevation values in creating waypoints from Wikipedia. * Allow for getting more Wikipedia Waypoints (up to 20). * All translated versions to select appropriate language Wikipedia articles. * Allow the columns to be sortable in the Wikipedia Waypoints that are available. * Decide the 'feature' type is more useful than seeing the country code. * Add getting Wikipedia Waypoints via the File->Acquire menu method. * Fix geonames country pattern * Simplify getting bounds for wikipedia waypoints by reusing existing function. * Save Wikipedia Waypoint links in a simple format as the waypoint comment. * Remove useless 'selected' check box on Wikipedia points creation method. * Move 'Add Wikipedia Waypoints' into the Acquire Menu in the TrackWaypoint Layer. 2013-01-18 Rob Norris : * Simplify layer update redraw in determining the gtk update method. * Fix: Improve internal redrawing method for layer panel updates. * Store the main thread value so comparisons can be made to determine the gdk update method * Allow acquiring an URL with a username/password authenticated download. * Allow downloading with authentication via curl * Allow an acquire datasource method to *not* have to use a threading mechanism. 2013-01-17 Guilhem Bonnefille : * Fix screenshot included in previous commit * Add bearing information while creating route/track 2013-01-16 Rob Norris : * Avoid CRITICAL warnings when updating a waypoint. Check the symbol value is something before attempting to use it. * Fix routes display in different coordinate views. * Allow attempting to open a URL in a waypoint comment or description. * [QA] Mark some GPS layer strings for translation. 2013-01-14 Guilhem Bonnefille : * [QA] Factor the way to compute window's name 2013-01-12 Rob Norris : * [QA] Use specific type GHashTable *, instead of generic gpointer. * Optimise: get reference to VikWindow only once per TrackWaypoint layer drawing update. * [QA] Better variable name usage following the change from name to an id. * [QA] Add specific enumeration for route finder tool * Change TrackWaypoint properties that are radiogroups into combo boxes for compactness of displayed dialog. * Add tooltips for Preferences and Layer Parameters. * [QA] Tidy up preferences.c * [QA] Remove unused viewport variables. * [QA] Remove unneeded include statement. 2013-01-09 Guilhem Bonnefille : * Avoid gpsbabel conversion on OSM traces * Allow to download and acquire a GPX without gpsbabel * [DOC] Improve aquire's reference documentation * Simplify acquire feature * [DOC] Improve babel's reference documentation 2013-01-07 Guilhem Bonnefille : * [DOC] Reformat viktrack's reference documentation * [DOC] Format acquire's reference documentation 2013-01-07 Rob Norris : * The vikgoto should not be calling display updates. * Factor download to a temporary file into a single reused function. * The geonamesearch should not be calling display updates. * Remove of temporary file after processing Geonames Wikipedia information. 2013-01-06 Rob Norris : * Fix an acquire callback type usage. * Allow sorting on the column of the select from list dialog. * [QA] Fixup go to Geocache Webpage * [QA] Make more local functions static. * [QA] Improve header usage * [QA] Prevent potential clash of accelerator 2013-01-05 Rob Norris : * Merge branch 'GPX-Route+Icons+Colour' * Fix Google Route Finding usage as a route type. * Maintain track properties when splitting a track. * [DOC] Help improvement - mention automatic view on file load. * [DOC] Amend help for addition of Routes capability. * [DOC] Amend and tidy man page for addition of Routes capability. * [DOC] Remove old doc. Use the User Manual instead. * Enable display of GPS Device on GPS Upload. * Add a sample route GPX file. Useful for testing. * SF#2692629: Allow control of GPX file saving track order * Improve contrast between default track colours. * Rewrite TrackWaypoint layer copy/paste to use GbyteArray rather than using a temporary GPX file. * Simplify internals of layer copy and paste for waypoints and tracks. * SF#2564997: Enable specific track colours in default draw by track mode. * Fix odd issue with waypoint symbol not getting set on copy. * Display waypoint symbols in the layers panel tree view. * Fix allocation of tree iterator as it may be used some point in time in the future. * Enable setting the icon on a viktreeview item. * Replace 'Add Track' tool with 'Create Route' tool. * Improve warning message, no creating is happening here. * Now allowed same track names so an overwrite warning is not necessary any more. * Add ability to append other type of track or route to a route or track. * Enable converting a track to a route, or a route to a track via the TrackWaypoint layer menu. * Add support for GPX routes - as a new sublayer type of the now less accurately named TrackWaypoint layer * Add paste menu option in the sublayer menu container for Tracks and Waypoints. * Add method to return the type of Viking data held in the clipboard * Add options to start making a new track and finishing it from the TrackWaypoint layer menus * Add new 'New' submenu for the TrackWaypoint layer * Move TrackWaypoint layer menu view sublayer options into a submenu * Enable tooltip for track and waypoint sublayer containers. * Make sublayer containers for track and waypoint sublayers only visible in the layers panel when they actually contain something * Fix combo box zoom level selection calculation. * [QA] Better internal variable name in track drawing * [QA] Make a local function static. 2013-01-04 Guilhem Bonnefille : * Restore Google Directions feature 2013-01-03 Guilhem Bonnefille : * [QA] Remove uneeded const modifier * Use local variable instead of multiple GCast 2012-12-30 Guilhem Bonnefille : * [QA] Add ifdef macro for Google Directions related * Add debug message tracing name of temporary files * [QA] Replace g_mapped_file_free * [QA] Remove uneeded compatibility * [I18N] Mark translatable string 2012-12-13 Guilhem Bonnefille : * [QA] Remove unusable constructor * [QA] Extract utility function from viktrwlayer 2012-12-11 Guilhem Bonnefille : * [QA] Use dedicated macro for creating abstract type 2012-12-07 Guilhem Bonnefille : * [QA] Replace code by GObject macro (viklayer) * [QA] Replace code by GObject macro (viklayerspanel) * [QA] Replace code by GObject macro (viktreeview) * [QA] Replace code by GObject macro (vikgotoxmltool) * [QA] Replace code by GObject macro (vikviewport) * [QA] Replace code by GObject macro (vikwebtoolcenter) * [QA] Replace code by GObject macro (vikwebtoolbounds) * [QA] Replace code by GObject macro (vikwebtool) * [QA] Replace code by GObject macro (vikgototool) * [QA] Replace code by GObject macro (vikexttool) * [QA] Replace code by GObject macro (googlesearch) * [QA] Replace specific code by GObject macro 2012-12-06 Guilhem Bonnefille : * [DOC] Add keycap tagging over Ctrl shortcuts 2012-12-05 Guilhem Bonnefille : * [DOC] Add reference documentation to VikStatusbar 2012-12-02 Guilhem Bonnefille : * Fix tooltip setting * Add tooltip to new zoom level combo 2012-11-30 Rob Norris : * Ensure when opening multiple .vik files they are each loaded into a new window. * Remove unnecessary pass_along variables usage. * Tidy up: remove unused parameter in select track or waypoint functions * Allow configuration of trackpoint size and direction arrow size drawing. * Add the capability to draw a directional arrow on tracks. * SF#2783468: Show UTM location in statusbar when in UTM mode. * Change the save to image to only use tile supported zoom levels. * Add a zoom combo box into the toolbar 2012-11-24 Rob Norris : * [DOC] Add version and source to the man page. 2012-11-17 Rob Norris : * [I8N] Maintain .vik file compatibilty with translated layer names. 2012-11-16 Rob Norris : * Better integer type usage * Add G_BEGIN_DECLS and G_END_DECLS to most header files. * Add missing G_END_DECLS to header files. * Add missing define for a header file * [DOC] Add information about file types and window level operations to the user manual. * [DOC] Fixup help on mouse clicks. * Fix build for optional use of libX11 2012-11-12 Rob Norris : * Tidy up: Remove used function. * Never willingly abort, remove exit() statements. 2012-11-11 Rob Norris : * Merge branch 'HelpUpdates' * [DOC] New Upload to GPS methods detail. * [DOC] Illustrate help for all the tools with the associated icon. * Improve feedback if there is some problem in opening the help. * [DOC] Reminder on how to generate the PDF help * Remove unused script * [DOC] Example on how to convert help output for the Wiki * [DOC] Map Cache Information * [DOC] There's more Howto's now. * [DOC] Add GPS Real Time Howto * [DOC] Extend Geotagging Help * [DOC] Improve Getting Started Help * [DOC] Misc tidy ups in help * Add configuration to generate help in HTML format * Add copyright of Rob Norris in documentation and update the year * Remove document which relates to using a bespoke version of Viking. * Remove unnecessary .*config files. * Remove old and unused gpsd pixmap 2012-11-09 Rob Norris : * Allow a simple Waypoint text size to be set per layer. * Use default system font in manually created layouts. * Tidy some functions to use the VikTrack type properly * Add file filter for Viking type files in the save as function. * When downloading maps along a track always display the maps when available! * Add support of GPX comments and descriptions for tracks and waypoints. * Add simple user feedback about the image generation process. * Add basic image type file filters of JPG and PNG when saving to an image file. * Rework draw_to_image_file() methods to ask for filename later in the process. * SF#2831256: Allow generation of large pixel sized images. * Correct spelling of map cache. * Bump up default map cache size to 128MB and allow setting to 1GB. * Add acquire from file into the TrackWaypoint menu options. 2012-11-04 Rob Norris : * Fixup and simplify GPX saving tracks in timestamp order. 2012-11-02 Rob Norris : * Merge branch 'TrackWaypoint-GPS-Up' 2012-10-27 Rob Norris : * SF#356778: Download Map Tiles using F5 * [DOC] Some help detail about keyboard shortcuts. * Minor tidy ups. * SF#3575828: Ensure new track drawing uses track property line thickness 2012-10-25 Stanislav Brabec : * New Desktop Menu Specification[1] finally has appropriate Category for map applications: Maps 2012-10-21 Rob Norris : * Ensures the highlight gets drawn around waypoint image when waypoint is near the screen edge * Another bit of Google Directions needs ifdef disabling 2012-10-19 Rob Norris : * Allow GPS Upload from any selected TrackWaypoint layer or individual track. * Expose methods to get details about options from the GPS datasource selection GUI. * Only create dialog in GPS communication layer if we're going to do some transferring * Add option to turn off GPS device in GPS Layer communication. * On all GPS Uploads/Downloads always update progress status with 'Status: Working...' * Fix opening GPX files with own internal "hidden" markers on waypoints. * Enable option to not write invisible tracks or waypoints in GPX file and don't write them on GPSBabel convert to method. * Allow uploading a single track via the GPS layer interface. * Expose the GPS device communication in the GPS layer for reuse. * Make GPS layer use dynamic list of GPS devices as supported by GPSBabel. * Allow passing just a track into a_babel_convert_to() for uploading to a GPS Device * Correct layer read definition + enable reporting of issues from gpspoint parts in .vik files * Add basic warning message if an issue has been detected in loading a .vik file. * Tidy up variable names * Improve optional build of documentation components * Limit the size of GPS Babel 'friendly' labels since they can be really long. 2012-10-13 Rob Norris : * [DOC] Amend help to detail new merge, split and delete points track operations. * Merge branch 'TrackMergeSplitImprovements' 2012-10-09 Rob Norris : * Add some protection against crazy elevation numbers that cause viewing a track's properties to crash * Detail on how to regenerate reference help * [I8N] Mark vikaggregatelayer.c for translation * [I8N] Mark file vikwaypoint.c for translation. * Fix memory leak detected by cppcheck 1.56 * Tidy ups to keep cppcheck 1.56 happy. * Prevent obscure crash on key press when layer is not selected but create track tool is enabled * Never use g_error() as it aborts the program. Use g_critical() instead. * Add python tool to convert a Viking tile cache into a MapBox MBTiles format file. * Rework a_file_load() to always load .vik files in preference to other kinds and other clean ups. * Suggest default filename with .vik file extension when saving a new file. 2012-10-05 Rob Norris : * Revert Stonehenge.jpg back to the previous version *without* GPS information. 2012-10-01 Rob Norris : * Use the signalling method to the update statusbar from OSM traces background thread. * Allow statusbar update signal method to specify which part of the statusbar to update. * Move window code that is unnecessarily in main.c to vikwindow.c 2012-09-28 Rob Norris : * Fix crashing due to GUI updates from the background thread on GPS Upload. * Fix CPU usage going to 100% when statusbar items update is called. 2012-09-23 Rob Norris : * git ignore the generated PDF manual. * Releasing version 1.3.2 * Fix 'make distcheck' to have a clean run. * Prevent compiler warning. 2012-09-21 Rob Norris : * Minor code tidy up to match staticness of function definitions. * Fix non slippy maps from complaining about lack of function definition. * Remove Direction Finding from the Help as direction finding via Google services has been disabled. 2012-09-20 Rob Norris : * Disable direction finding via Google services as they no longer support KML output. * Fix usage of vvp in gpslayer in uploading TRW layer data. * Ignore built viking.exe file under Windows. * Fix DEM icon usage following internal rename. * git ignore output from make dist * git ignore files generated in the data directory * Remove old and unused src/.depend file * Reduce warnings when compiling on Windows * Update ‘gdk_pixbuf_ref’ deprecated functions to the g_object_ref equivalents * Ensure correct selection of track or waypoint following name usage rework. * Add a background block to the track drawing distance to make the text easier to read. * Use gdk_draw_layout() rather than gdk_draw_string() in track distance drawing * Fix flickering map background when creating a new track and panning the map with the mouse. * Rework the create track drawing with a specific GC on which to draw the next potential point. * Fix for Debian#685817: Statusbar Update From Thread Instability * Fix openwindow internal type to match actual usage. * [Geotagging] Improve detection of image files having GPS information. * Fix GPSBabel Dynamic Device List generation on Windows Systems. * Add zoom by bounds capability when using the zoom tool and holding the SHIFT key and left click to select the zoom in area. * Enable zoom tool to recenter the display on the clicked position when the CTRL key is held at the same time. * More intuitive zoom actions involving the mouse to retain the location under the pointer within the viewport bounds. 2012-09-06 Rob Norris : * [Geotagging] Update RPM spec for new dependency. * Improve feedback for handling erroneous GPX. * [Geotagging] Fix SF#3564795: Crashing when attempting to create waypoints from EXIF images without enough GPS information. * Prevent crashing when attempting to import with GPSBabel a file and not specifying the file type (due to a malformed (null) result of the GPSBabel file types list). * Prevent crashing when attempting to acquire data with a malformed (null) result of the known GPS devices list. 2012-09-04 Guilhem Bonnefille : * Fix lack of feedback when reading erroneous GPX 2012-08-27 Guilhem Bonnefille : * [MAPS] Add OpenSeaMap source 2012-08-27 Guido Scholz : * Fix usage of directory "doc/reference" missing even it is used in configure.ac. Automake hangs here if called with autoreconf. * Clean gnome-doc-utils.make in target "dist-clean" * Further tab fixes in Makefiles * Remove doubled defined "XP" in src/Makefile.am (conplained by automake) * Fix the missing tabulator * Fix an incompatible make file rule (using "%"); this is complained by automake. * Enhance the "make dist" target wrapping the package also in a tar.bz2 as well as a zip package 2012-08-27 Rob Norris : * Ensure the pan toolbar button is activated by default to match the default tool mode. 2012-08-26 Rob Norris : * Enable merging segments of a track from the Track->Combine submenu. * Add function to merge segments of a track. * Fix implicit ordering of Trackpoint property dialog buttons. * Tidy up: simpler and better use of trackpoint free methods in TRW Layer. * Fix potential loss of track segment in vik_track_remove_dup_points() * Enable deletion of track points with the same timestamp from the Track -> Delete Points submenu. * Add functions to count and delete track points with the same timestamp. * Add new 'Delete Points' track submenu and allow deleting duplicate track points. * Update vik_track_remove_dup_points() to return the number of points deleted 2012-08-25 Rob Norris : * Add Track Split by Segments into Track menu options. * Consistent use of unique_sublayer_name function when creating new tracks via all split operations. * Internal reorganization of unique_sublayer_name function for reuse * Make splitting a track consistant in that it never asks the user the name of the new tracks. * Remove joining tracks via the Track Point dialog as it was a 'weird hack'. * Move View Track menu option above submenu options. * Add new append track command to join tracks not caring about the whether they have timestamps. * Move track merge options into a new submenu called 'Combine' * Add track split at trackpoint as an option to the menus. * Rework track split at trackpoint into a function for later reuse * Move split track menu options into a new submenu * Fix merge track by times for using the internal track id properly. * Fix display of track edit dialog values when invoked via Track Edit dialog. 2012-08-12 Rob Norris : * Fix split track at trackpoint for using the internal track id properly. 2012-08-09 Guido Scholz : * Fix the untranslated "top layer" context menu. Signed-off-by: Rob Norris * Fix radio button labels not translated in dialog windows. 2012-08-08 Rob Norris : * Add and use keyboard accelerator shortcuts to be able to create the most likely used layers. 2012-08-07 Rob Norris : * Add keyboard accelerator marker for layers used in menus. * [I18N] Ensure all layer names are marked for translation 2012-08-06 Rob Norris : * Rework Tool interface for give better control for Tool menu labels and tooltips. * Add some keyboard shortcuts to the help. 2012-08-05 Rob Norris : * Fix header as vik_trw_layer_get_waypoint is required again. 2012-08-04 Rob Norris : * Rework Track Draw by Velocity into Draw by Speed with a simple traffic light colouring scheme. * For tooltips use plain text so that comments with HTML markup or similar are shown in a literal fashion rather than causing parsing failures. * Add simple direct on disk access map type to tiles ideally pregenerated in the OSM tile layout format. * Geotagging: add option to overwrite existing waypoints. * Fixup making the track name a property of the track. 2012-07-19 Mathieu Albinet : * Windows: Really fix opening pictures 2012-07-19 Rob Norris : * Remove create_realtime_trackpoint call in cleanup which can crash. * Fix crashing when deleting a GPS layer which has started a realtime tracking. * Add missing function declaration in dir.h 2012-07-10 Rob Norris : * When uploading to a GPS device, maintain the unique names of tracks and waypoints. * Expose ability to uniquify both tracks and waypoints names in a TRW layer. * Add method to uniquify waypoint names in a TRW layer and give the option to use it within the delete selection of waypoints ability. * Add method to uniquify track names in a TRW layer and give the option to use it within the delete selection of tracks ability. * Make the track name a property of the track. * Make the waypoint name a property of the waypoint. 2012-06-28 Rob Norris : * Fix potential crashing when using multiple maps on especially 64bit systems. * Fix crashing when displayed map copyright(s) is longer than the internal buffer. * Remove incorrect comment * Fix crash in Show Picture functionality on Window's Systems. 2012-06-10 Rob Norris : * Fix intended preferences group. * Fix typo * Add missing parameter terminator. 2012-06-02 Fernando Arbeiza : * Add a Gradient Graph to the Track properties display 2012-05-10 Evan Battaglia : * Add CalTopo 7.5" (24k) USGS Topos! 2012-05-10 Guilhem Bonnefille : * Add support for many extensions' configuration 2012-05-08 Guilhem Bonnefille : * [LEGAL] Bump copyright's year 2012-05-07 Guilhem Bonnefille : * Fix printing of DEBUG message since glib 2.32 2012-05-05 Guilhem Bonnefille : * [DOC] Declare VikWebtoolBounds in documentation 2012-05-03 Guilhem Bonnefille : * [DOC] Improve build options for gtk-doc framework * [DOC] Minor improve on internal documentation * [BUILD] Remove explicit add of -lexif 2012-04-22 Guilhem Bonnefille : * Releasing viking 1.3 * Merge branch 'i18n-launchpad' * Document previous translation updates * Import Launchpad updates * Merge tag 'viking-1.2.2' * [DOC] Fix DocBook syntax in user manual * [I18N] Fix POTFILES with new files 2012-04-11 Rob Norris : * Be consistent in that track and waypoint list dialogs are always sorted alphabetically. * Fix build when --disable-alphabetized-trw is specified 2012-04-09 Rob Norris : * [DOC] Update current built in map types. * [DOC] Add more detailed help about the available preferences. * Credit tile supplier Andy Allan for OSM Cyclemap tiles. * Add OSM Transport map as a built in map option. * Tidy map examples. * Remove Tiles@home support as the service has stopped. 2012-04-03 Rob Norris : * Add supported MIME types to the desktop file specification. * Reduce warnings from the build due to slightly misformed libcurl.m4 macros. 2012-02-11 Rob Norris : * Fix Track Properties graph blob marker drawn at wrong elevation when elevation graphs have different min/max heights. 2012-02-04 Rob Norris : * Example script that can be used to upload a track as a route to a predefined GPS device. * [DOC] Update auto generated INSTALL file to latest version. * cleanup: Remove unused and out of date 'viking-remote' script and related files. * cleanup: Remove *very* old documentation and don't bother distributing any of it which is all old. * Out of date file GEOCODED-PHOTOS has been removed 2012-01-29 Rob Norris : * Reduce scope of a variable. 2012-01-20 Rob Norris : * Display the average moving speed for a track in the track properties. * Add function to return an average moving speed for a track. * Add ability to open a TrackWaypoint layer with another external program (default merkaartor). * Add ability to open a TrackWaypoint layer with an external program (default JOSM). 2012-01-19 Rob Norris : * Better memory cleanup on unint. * Update HACKING information for contribution recommendations. 2012-01-18 Rob Norris : * Add an image without GPS Information and the associated tracklog sample for testing purposes. (Location Stonehenge in England). * Add an image with GPS Information for testing purposes. (Location Brecon Beacons in Wales). * Fix small memory leak in geotagging images processing. * Correct format for an include statement of a C standard library. * Fix compiler warning. 2012-01-17 Rob Norris : * Allow TrackWaypoint layer creation without a viewport. * Restore compilation of test program gpx2gpx. 2012-01-15 Rob Norris : * Reduce scope of wikipedia_submenu variable, as it's not used if VIK_CONFIF_GEONAMES is not enabled. 2012-01-07 Rob Norris : * Fix error identified by cppcheck 1.52. * Fix error identified by cppcheck 1.52. * Fix error identified by cppcheck 1.52. * Fix error identified by cppcheck 1.52. * Fix error identified by cppcheck 1.52. * Fix error identified by cppcheck 1.52. * Fix potential GdkPixbuf-CRITICAL warning in thumbnail creation. 2011-12-22 Rob Norris : * Use map default: OSM MapQuest tileserver. * Add map OSM MapQuest tileserver as a built-in type. 2011-12-19 Rob Norris : * Merge branch 'Geotagging' * Merge branch 'ExternalOptions' * Fix Track Properties graph DEM points drawn at wrong elevation when lowest elevation is not zero. 2011-12-18 Rob Norris : * Tidy up static preference values. * Use an intermediary program which will invoke the system's default for opening images. * Add and use a preference for the associated image viewer program. * Add and use KML File Export units option. * Add second group of global preferences, called 'Export/External' 2011-12-11 Rob Norris : * Make geotag processing run in the background. * [DOC] Add help for Geotagging. Remove old documentation. * [DOC] Mention Bing maps and some more Tools. * Add files for internationalization. * Add ability to geotag images interpolating times against tracks. * Make jpeg-data build against glib i18n instead of own i18n version. * Add libjpeg utilities from exif command line tool version 0.6.20 * Acquire Geotag Images via TRW Layer * Ensure vtl created in acquire operation runs post read stage. * EXIF read implementation for geotagged images (libexif). * Rationalize babel function parameter ordering. * Add new process stage for acquire methods. * Ensure track stop is drawn before trackpoint. * Ensure track stops are always drawn if required. 2011-12-11 Greg Troxel : * Add comments. 2011-12-11 Greg Troxel : * Omit drawops when point == last point. 2011-12-11 Rob Norris : * Restore "New layer" button (with "+" icon) function. * Code cleanup. Remove very old GTK support for <2.6 since 2.12 is needed for building. * Enable reversing a track from the track menu. * Fix: Improve internal redrawing method. * Fix opening of external web sites via center method when the zoom level is less than 1 mpp. * Enable internationalization and simpilify 'Global' preferences text into less specific 'General' term. 2011-12-04 Rob Norris : * Fix crashing on opening a file via recent menu after a .vik file is opened. * Display compact message on the statusbar for the selected trackpoint or waypoint. (SF#3314888) 2011-11-16 Rob Norris : * Enable multiple selection and deletion of entries from vikfilelist. * Do not use preset Google cookie when we don't even use google maps (images) anymore. * Acquire: Maintain default to Garmin devices (assumed most popular/numerous device) * Scale waypoint icons to give large or small icons as necessary. * Add Yahoo! Maps webtool link. * Fix too easy to accidently move a waypoint with an image with the select tool - must use shift key. * Fix Join Tracks functionality - Part2. * Ensure waypoint image size always initialized. * Fix can not immediately select another layer if currently selected layer's visibility changes. * Improve trackpoint edit dialog window sizing when the trackname is very long. * Merge branch 'GPSD-API-v5' 2011-11-13 Rob Norris : * Improve libgps test with the consistently available function: gps_close * Merge branch 'master' into GPSD-API-v5 2011-11-03 Guilhem Bonnefille : * Releasing version 1.2.2 2011-11-03 Hanno Boeck : * Fix compilation with curl 7.21.7 (SF#3376584) 2011-11-03 Rob Norris : * Increase default tile age check to 7 days. 2011-10-29 Rob Norris : * Remember last track and waypoint request type on GPS acquire dialog. * Add control of GPS upload/download of components tracks and waypoints. * 'Import files with GPSBabel' help update. * Fix : * Restore distance and times between trackpoints shown on the trackpoint edit window. * Fix crashing on opening multiple files after a .vik file is opened. * Fix potential crashes if check_file_magic_vik function is used incorrectly. * Add Acquire OSM option into the Track/Waypoint layer operations. * Solution for SF#2766266 - Give user feedback about OSM uploads (success/failure). 2011-10-21 Guilhem Bonnefille : * Remove duplicate redraw * Fix: send VLP's update signal when adding a layer 2011-10-17 Guilhem Bonnefille : * Add Windows' path to configuration files 2011-10-14 Rob Norris : * Fix: Don't abort program when attempting webtool center with different x & y factors. 2011-10-08 Roberto Camarero : * Spanish translation of the win32 installer 2011-10-02 Rob Norris : * Add used geo-* scripts as they are public domain. * Continue geocaching.com support via third party tools. * Show Geocache configure status. * Show elevation gain/loss on track creation 'tooltip' (as per SF#2838561 request), when such data is available. * Automatically attempt to set elevation data from the DEM layer whilst a track is being created. * When creating a track, display the total distance of track (via a tooltip like text) on the main display. * TrackWaypoint Layer Interface function code tidy. * Improve trackpoint or waypoint edit selection. * Fix Join Tracks functionality. * Make tile age parameter jump by 1 minute steps in preferences setup. * Add keyboard accelerator 'N' for New Layer in Aggregate Menu. * Remove unused function definition. * Fix SF#3408170: Selected Track Thickness is Always 1px * Use more icons for menu entries. 2011-10-01 Guilhem Bonnefille : * Allow to import any file known by gpsbabel 2011-09-20 Rob Norris : * Merge branch 'WindowsInstaller' 2011-09-16 Rob Norris : * Fix tracks not shown over map when map layer is dragged to the end of the treeview list. * Add some file open filters to ease file selection. * Increase default tile age check to 7 days. * Show error message earlier if in incompatible print image directory coord mode. * Fix spelling * Refuse to load unsupported file types. * Restore broken GPS power off command. 2011-09-11 Guilhem Bonnefille : * Add support for any device known by gpsbabel * Dynamically adapt viking to gpsbabel's file formats * factorize gpsbabel command line 2011-09-11 Rob Norris : * Fix: SF#3042692 - Tiles May Get Deleted During Offline Usage. * Fix some tracks elevation profile may display no altitude, despite all altitudes available in the track. * Use more icons for menu entries. 2011-09-10 Rob Norris : * Add experimental support for GPSD_API_MAJOR_VERSION 5. * Rework gpsd interface for conditional compiling using GPSD_API_MAJOR_VERSION. * Add Acquire options into the Track/Waypoint layer operations. 2011-09-10 Mathieu Albinet : * Add Windows Installer (NSIS) 2011-09-07 Guilhem Bonnefille : * [DOC] Document viking's dependencies 2011-09-01 Guilhem Bonnefille : * Fix SF#3387590: Top Layer cannot be renamed 2011-08-26 Guilhem Bonnefille : * Oups: clean code * [QA] Factorize code 2011-08-25 Guilhem Bonnefille : * Minor fix: declare static internal functions 2011-08-23 Guilhem Bonnefille : * Fix typo 2011-08-21 Guilhem Bonnefille : * Add ability to acquire GPS traces stored on OSM * Extend OSM to OpenStreetMap 2011-08-20 Rob Norris : * Enable merging tracks without timestamps to other tracks that do not have timestamps. (SF#2886231) * Prevent track merge by time requests when there are no other suitable tracks. * Remove DEM data source 'None' as it does nothing. * Enable copying layer/sublayer names as plain text, so that it can be pasted into external text handling applications. * When exporting a TrackWaypoint layer as a GPX file, automatically append '.gpx' to the suggested filename. * Enable getting of the statusbar from the window. * Enumerate use of and simplify the internals of the statusbar. This enables control of the size of the first element of the statusbar. 2011-08-19 Guilhem Bonnefille : * [DOC] Fix layer related structure of documentation * [DOC] Improve reference documentation for babel.c 2011-07-25 Hanno Boeck : * Fix compilation with curl 7.21.7 (SF#3376584) 2011-07-15 Rob Norris : * Improve track name when split from Track Properties window. 2011-07-14 Rob Norris : * Better safety checking to prevent crash due to null variable reference in use of the current waypoint. 2011-07-13 Rob Norris : * Better safety checking to prevent crash due to null variable reference in use of the current trackpoint. * When loading from the recent file menu, only open a new window if a Viking file. * On creating a new waypoint always attempt to auto set the altitude if DEM data is available. * Enable the escape key to remove/reset the ruler tool. * Enable keypress processing for vik windows tools. 2011-07-02 Guilhem Bonnefille : * Document utility functions 2011-06-27 Rob Norris : * Oops, remember to remove reference to deleted icon. 2011-06-25 Rob Norris : * Internal tidy: replace magic scissor variables/references with route finder. * Improve the associated icon, remove the scissor effort and use something to try to suggest the idea of a list of directions to get somewhere for 'Route Finding'. * Replace 'Magic Scissors' by a more accurate name - 'Route Finder'. * Improve altitude track property display by adding another grid size chunk value. * Enable internationalization of the OSM Traces preferences text. 2011-06-22 Rob Norris : * Fix compiler warnings generated with gcc4.6 in viktrwlayer_propwin.c * Fix compiler warnings generated with gcc4.6 in viktrwlayer.c * Fix compiler warnings generated with gcc4.6 in viktreeview.c * Fix compiler warnings generated with gcc4.6 in viktmsmapsource.c * Fix compiler warnings generated with gcc4.6 in vikgpslayer.c * Fix compiler warnings generated with gcc4.6 in print.c * Fix compiler warnings generated with gcc4.6 in file.c 2011-06-16 Rob Norris : * Releasing viking 1.2.1 2011-06-14 Rob Norris : * Support proper MAC OS file locations. * Fix incorrect track property line marker positioning when the track has gaps. * Fix track property point marker drawing error - sometimes draws dot marker too low. 2011-05-29 Guilhem Bonnefille : * Releasing viking 1.2 * Fix translations: addbing mapsource.c 2011-05-24 Guilhem Bonnefille : * Merge branch 'i18n-launchpad' into viking-1.2.rc1 2011-05-22 Rob Norris : * Better safety checking to prevent crash due to null variable reference in use of the current trackpoint. * Remove unecessary treeview item selection. 2011-05-21 Sven Wegener : * Fix etag handling * Add zoom level 0.5 to map layer 2011-05-21 Guilhem Bonnefille : * [DOC] Add links to access Viking's source code 2011-05-16 Guilhem Bonnefille : * Fix: generate doc/reference/Makefile when needed * Improve configure script when error occurs * Document previous translation updates * Import Launchpad updates 2011-05-10 Rob Norris : * Rename file to prevent any case-insensitive issues. * Improve README to mention OSM. 2011-04-07 Rob Norris : * Add getting the users confirmation when deleting (emptying) data from the GPS layer. * Enable keypad delete to remove layers in the layers panel. * Enable deleting multiple tracks or waypoints within a layer by selecting them from a list. * Add getting the users confirmation when deleting an individual track or waypoint. * Add the ability to delete all waypoints or tracks in the layer. * Add getting the users confirmation when deleting a layer. * Start a new 'Tracks' treeview menu, similar to the 'new' Waypoints treeview menu. * Add operations on waypoints into the 'new' Waypoints treeview menu. * Prevent unnecessary internal track creation/deletion when splitting a track by time request doesn't actually alter the number of tracks. * Fix Track -> Split by Timestamp such that newly created tracks are ordered correctly. 2011-04-06 Rob Norris : * Add new graph type Speed/Distance in the track properties window. * Tidy up draw_elevations and draw_vt functions. * Add new graph type Elevation/Time in the track properties window. * Remove unnecessary calculation in make_speed_map in viktrack.c * Add new graph type Distance/Time in the track properties window. * Update source code copyright on viktrwlayer_propwin.c * Remove pointless storage of vlp in track properties window. * Improve Track Properties speed/time drawing to display in nice human friendly whole number scaled units. * Improve Track Properties elevation drawing to display in nice human friendly whole number scaled units. * On the Track Properties Window draw an always updating indicator of where the readings are taken from. * Track Properties Window internal tidy: Maintain minimum/maximum altitudes/speeds for reuse. * Enable controls of drawing DEM data and GPS speeds on the Track Properties Window. * Track Properties Window internal tidy: Enable DEM and GPS speeds to be optionally drawn on the elevation profile. * Add keyboard accelerators for the Track Properties Window. * Add ability to resize the Track Properties window. * Track Properties internal refactor: rename function to reflect what it really does. * On the Track Properties Window, also show the elevation or speed for the current track position as indicated by the mouse pointer. * Track Properties internal refactor: make getting percentage along a track via distance or time into separate functions for further reuse. * Track Properties Window internal tidy: individual profile sizes for each window. * Track Properties Window internal tidy: maintain graph profile arrays for reuse by update and future functions. * Fix sensitivity of the track properties window split marker to be disabled when the track marker is not drawn. * Restructure the graph drawing functions to only handle a single aspect of functionality. (create or update) * Rename function minmax_alt to minmax_array, and refactor for optional altitude test. * Fix crashing due to incorrect usage of libcurl - SF#3206628. 2011-03-31 Rob Norris : * Add support for kml files. * Add ... where necessary to track & waypoint menu entries. * Enable vik_layers_panel_get_all_layers_of_type to optionally return only visible layers. * Enable Open Waypoint Image via right click menu entry. * Use ability to select a waypoint given the thumbnail image size. * Add ability to open the trackpoint edit dialog via the viewport right click menu when a trackpoint is selected. * Add ability to move selected trackpoint or waypoint by the mouse within the select tool. * Add a new select tool at the window level to enable/disbale item selection of the a track or a waypoint. * Enable getting the treeview from the layerspanel. * Enable to unselect treeview item * Define an interface function to show the viewport menu on the selected item (track or waypoint). * Store name of individual track or waypoint for later selection usage. * Need to store the containing trw layer for later usage of selected track(s) or waypoint(s) operations. * Add Select Request layer interface and use within the track/waypoint layer to select an item. * Add internal track right click menu variable. * On selection of layers panel item, automatically ensure it is fully shown. * Tidy up track/waypoint sublayer callbacks to only use the layers panel if it available. * Add viewport to sublayer add menu items callback. * Make the highlight colour configurable and use as appropriate for the selected track/waypoint drawing. * Add track and waypoint highlight for the selected layer or individual item. * Add the storage and retrieval of any kind of track or waypoint selected item (either an individual item, list (i.e. a sublayer) or layer) at the window level. * Add the ability to return the layers_panel from the window. * Add viewport property to control the display of the track / waypoint item highlight. * Add backup support for launching URLs with Mac OS based browsers. * Add backup support for launching URLs with Google Chrome based browsers. * Fix non-void function should return a value. * Fix compiler warning for Bing use of dynamic copyright. * Fix compiler warning for dynamic copyright. * Improve git ignore for reference documentation generation. * Fix reference documentation generation - some systems need explicit mention of libz. * gtk_object_sink has been deprecated since gtk version 2.10, use g_object_ref_sink() instead. 2011-03-27 Guilhem Bonnefille : * Add support for Bing maps * Add support for dynamic copyright * Add map's logo support 2011-03-26 Guilhem Bonnefille : * Document VikViewport * Document Map Source hierarchie * Improve documentation of background.c * Add support for reference documentation 2011-03-17 Rob Norris : * Generate a trackwaypoint layer update on the finish creatiing of the thumbnails so the images are shown. 2011-03-16 Rob Norris : * Fix displaying of 'Waypoints' treeview menu. * Enable the tree view panel to be more usefully resized smaller than the text names. 2011-03-14 Guilhem Bonnefille : * Improve HACKING documentation 2011-03-11 Mathieu Albinet : * Windows : Open help pdf file when when clicked on Help->help 2011-03-03 Rob Norris : * Fix vik_aggregate_layer_get_all_layers_of_type for track/waypoint layer types, since these may also be stored under GPS layers. 2011-03-02 Guilhem Bonnefille : * Add autoconf HAVE macros 2011-02-28 Rob Norris : * Improve previous fix: background calling code should control return value * [DOC] Split By Number of Points * Add Track->Split by Number of Points (as per SF#2847587 request). * Add a new dialog to return positive number. 2011-02-22 Guilhem Bonnefille : * Fix: background calling code should control return value * Fix: enforce background feature 2011-02-17 Rob Norris : * Rework the a_dialog_new_waypoint function * Fix compiler warnings from gcc 4.5.4 2011-02-17 Milan Jurik : * SF#3178554: Fix Sun Studio build 2011-02-15 Rob Norris : * Prevent map license from being displayed more than necessary. 2011-02-13 Rob Norris : * Remove dulipcate icon reference. * Correct several babel.h function return types. * SF#2844872: Suggest name for the new track when splitting the track via the trackpoint edit dialog. 2011-02-10 Guilhem Bonnefille : * Reduce GObject cast 2011-02-08 Guilhem Bonnefille : * Releasing viking 1.1 * Fix typo in translation * Merge branch 'i18n' * Merge branch 'i18n-launchpad' into i18n * Document previous translation updates * Import Launchpad updates 2011-02-07 Guilhem Bonnefille : * [DOC] Add MapQuest Nominating search service in examples 2011-02-06 Guilhem Bonnefille : * Fix dangerous code 2011-02-04 Rob Norris : * Fix trackpoint edit altitude sensitivity to be re-enabled after it has been disabled. 2011-01-29 Guilhem Bonnefille : * Merge branch 'i18n-launchpad' * Add Javanese translation 2011-01-29 Rob Norris : * Use define for conversion of meters->miles units. 2011-01-28 Guilhem Bonnefille : * Document previous translation updates * Import Launchpad updates 2011-01-28 Rob Norris : * Add and use defines for conversion of meters<->miles units. * Adjust colour of last auto track colour to not clash with default create track colour. * Tidy up: Rename a dialog function as it's used to get a yes or no value. * Add menu icons for the maps layer menu. 2011-01-27 Rob Norris : * Add myself (Rob Norris) as someone you can blame in the doap file. * Improve project description in the spec file. 2011-01-24 Rob Norris : * Fix variable spelling part2. 2011-01-23 Rob Norris : * Fix spelling 2011-01-21 Rob Norris : * Make the selection list in Merge With Other Tracks sorted alphabetically. * Add sort list by name function. Will be useful for track and waypoint list ordering. * Fix incorrect cut/copy of sublayers when accessed via the layers panel buttons. * Prevent Gtk-CRITICAL **: gtk_list_store_get_path: assertion `iter->stamp == GTK_LIST_STORE (tree_model)->stamp' message. * Fix the List Dialog so that it does not become taller than the screen when there are lots of entries. * Tidy Up:Improve a_dialog_select_from_list function. 2011-01-16 Rob Norris : * [DOC] Mark ready for 1.1 release. Update help manual version to 0.2. * [DOC] Add layer information for Aggregates, Coords and GeoRefs in help. * [DOC] Add Maps layer help information. * [DOC] Add overall layer information and promote each layer to be a top level section in help. * [DOC] Add DEM layer help information. * [DOC] Mention waypoint properties in help information. * [DOC] Update GPS layer help information. * [DOC] Update track operations help information. * [DOC] Update waypoint operations help information. * [DOC] Update Tools help section * [DOC] Update TrackWaypoint layer menu help Information * Improve positioning of the menu separator on waypoint menus. 2011-01-14 Rob Norris : * Remove unecessary print statement. * Prevent Gtk-CRITICAL assertion when the application is closed with a Track Property window on display. * Prevent Gtk-CRITICAL assertion when the application is closed whilst loading DEMs. * Fix some compiler warnings in viktrwlayer.c when configured to build with --disable-alphabetized-trw 2011-01-12 Rob Norris : * Fix Resource leak detected by cppcheck 1.46 2011-01-07 Rob Norris : * Add GeoRef layer tooltip to show the file name in use. * Add GPS Layer tooltip to say the protocol (aka device manufacturer) type. * TrackWaypoint Layer tooltip featuring summaries for tracks and waypoints. * Add maps layer tooltip to show the map name(type). * Add DEM layer tooltip to show the number of DEM files in use. * Add Track and waypoint sublayer tooltip information. * Add treeview use and display of layers tooltip. * Add Layer Tooltip callback definition * Add sublayer tooltip callback definition. 2011-01-07 Guilhem Bonnefille : * Fix typo 2011-01-07 Rob Norris : * When getting data via the GPS layer automatically set the view to see it, unless the realtime tracking mode is on. * On acquiring data from sources (inc. GPS) automatically set the view to see it. Except for GeoCaches; as it's likely you're requesting data for the current area, so no point in trying to change the view. * On opening GPX files automatically view all the data. * Add 'View All Tracks' option to the panel Layer menu options, which sets the view (center & zoom) to see all the tracks of that layer. * Add 'View Waypoints' option to the TrackWaypoint layer menu options, which sets the view (center & zoom) to see all the Waypoints. * Add 'View Track' option to the Track sublayer menu options, which sets the view (center & zoom) to see the track. * Add 'View Layer' option to the TrackWaypoint Layer menu options, which sets the view (center & zoom) to see the entire layer. * Add the ability to 'autozoom' to view an area specified by maximum and minimum lat/longs for a TrackWaypoint layer. 2011-01-07 Guilhem Bonnefille : * Remove the hability to hide copyright 2011-01-07 Robert Norris : * Create a new 'Show' submenu entry 2011-01-04 Rob Norris : * Improve curl usage as should call cleanup on application exit. * Add copyright and license properties for NASA BlueMarble data. * Fix compiler warning in curl_download.c 2010-12-23 Guilhem Bonnefille : * Fix dangerous static declaration * Fix compiler warning in vikmapslayer.c 2010-12-23 Rob Norris : * Fix compiler warning in vikwindow.c - use correct const typing. * Fix compiler warnings - correct Widget / Window type. 2010-12-19 Guilhem Bonnefille : * Fix memory leak when generating image file * Fix Spotmaps license 2010-12-16 Rob Norris : * Add background thread loading of DEM files. * Add Track->Goto Highest and Lowest points features. * Tidy intended logic in if statement. * Add Track->Goto Maximum Speed feature. * Rework Track->Goto menu options. 2010-12-15 Guilhem Bonnefille : * Add support for the TMS interface provided by SPOTMaps * Fix: Improve XML reading error reporting 2010-12-14 Guilhem Bonnefille : * Add license related properties 2010-12-11 Guilhem Bonnefille : * Add copyright property 2010-12-09 Guilhem Bonnefille : * Add undeclared translations 2010-12-05 Rob Norris : * Fix compiler warnings in osm.c * Improve key binding for Mercator Mode -> ctrl+m * Fix compiler warning in vikmapslayer.c 2010-12-03 Rob Norris : * Fix Waypoint & Track visibility issues. 2010-11-30 Guilhem Bonnefille : * Add documentation for generic TMS map source 2010-11-30 Rob Norris : * Fix SF#3104028: Default Color Background is incorrectly saved as black into a new .vik file. * Improve key bindings for ModeLatLon. * Set git to ignore test_coord_conversion program 2010-11-29 Rob Norris : * Set git to ignore autogenerated documenters.h 2010-11-28 Guilhem Bonnefille : * Add OSM WMS Server * Add support for WMS-C * Add support for more standard TMS 2010-11-27 Guilhem Bonnefille : * Move-up download methods * Add LatLon projection 2010-11-27 Rob Norris : * Better safety checking code 2010-11-26 Guilhem Bonnefille : * Fix some translated strings 2010-11-25 Rob Norris : * Add support for Locosys devices via GPSBabel's navilink device protocol. * Add support for DeLorme devices via GPSBabel's delbin device protocol. * Add the ability to insert a trackpoint into a track via the Edit Trackpoint dialog. * Add internal function to insert a trackpoint after the currently selected trackpoint. 2010-11-25 Guilhem Bonnefille : * Add license notice to new file 2010-11-24 Guilhem Bonnefille : * Replace macros by enum * Simplify previous commit 2010-11-22 Rob Norris : * Enable individual track to GPX export via the Track sublayer menu. 2010-11-21 Rob Norris : * Set 'OK' default for autogenerated dialogs. * Set 'OK' default for find waypoint dialog. * Set 'OK' default for download along track dialog. * Set 'OK' defaults for new track, custom zoom & split time dialogs. * Set 'Cancel' default for merge track dialog. User needs to select items first. * Set 'OK' default for the new waypoint dialog. * Set 'OK' default for goto dialogs. * Set 'OK' default for the Save to Image dialog. * Set 'OK' default for the track properties dialog. * Set 'OK' default for the GPS layer dialog. * Set 'OK' defaults for goto dialogs. * Set 'Cancel' default for the Geo Ref dialog, as user should really specify a map file first. * Set 'Cancel' default for the OSM upload dialog. * Set defaults for geonamesearch dialogs. * Set 'OK' default for the background jobs dialog. * Set 'OK' defaults for acquire dialogs. * Add a perl script to auto generate basic Viking .vik files for directories containing images. 2010-11-19 Rob Norris : * Enable control of the visibility of the menubar [including keyboard shortcut - F4]. Also enable panic key 'Escape' to restore menubar if hidden and no tool uses it. * Enable control of the visibility of the toolbar [including keyboard shortcut - F3]. * Make use of the vikwindow toolbar variable. * Enable control of the visibility of the statusbar [including keyboard shortcut - F12]. 2010-11-17 Guilhem Bonnefille : * Releasing viking 1.0 * Remove duplicates msgid * Merge branch 'i18n-launchpad' into master * Auto-update PO translation files 2010-11-14 Guilhem Bonnefille : * Document previous translation updates * Import Launchpad updates 2010-11-11 Guilhem Bonnefille : * Add minimal translator-credits in About dialog * Use $(top_srcdir) to locate AUTHORS file * Add documenters to About dialog 2010-11-10 Guilhem Bonnefille : * Add copyright notice to maintainer's scripts 2010-11-09 Guilhem Bonnefille : * Improve copyright holders 2010-11-07 Guilhem Bonnefille : * Add copyright to srtm_continent.c * Add origin comment 2010-11-07 Rob Norris : * Add copyright for geonamessearch.h and correct for geonamessearch.c * Add copyright for files vikgoto.h & vikgotoxmltool.h 2010-11-07 Guilhem Bonnefille : * Fix copyright for googlesearch.[ch] 2010-11-07 Rob Norris : * Add copyright for files preferences.c & preferences.h * Add copyright for dems.c & dems.h * Add copyright for datasources.h. 2010-11-07 Guilhem Bonnefille : * Correct DocBook usage 2010-11-07 Rob Norris : * Various improvements and tidy ups. 2010-11-03 Guilhem Bonnefille : * Deprecated: only include gtk/gtk.h * Improve depreaction options 2010-11-02 Guilhem Bonnefille : * Add built-in map sources in example file 2010-11-02 Rob Norris : * Fix extend track using magic scissors. 2010-11-01 Guilhem Bonnefille : * Merge branch 'master' into i18n-launchpad * Document previous translation updates 2010-10-23 Guilhem Bonnefille : * Import Launchpad updates 2010-10-20 Sven Wegener : * Fix autodownloading while panning 2010-10-19 Rob Norris : * Prevent crashes when downloading Expedia Maps. 2010-10-16 Rob Norris : * Fix Debian #599048: Segmentation fault when using gpsbabel * Fix dem_gradient_colors allocation. 2010-10-13 Guilhem Bonnefille : * Fix commit 1c6a6010661da96fd105ec42ad2f048df79fabbd 2010-10-12 Rob Norris : * Fix compiler warnings in preferences.c 2010-10-12 Guilhem Bonnefille : * Fix: enforce defensive code * Releasing viking 0.9.96 2010-10-11 Guilhem Bonnefille : * Fix unecessary change in string * Free memory * Add defensive code * Increase buffer length 2010-10-11 Jon Burgess : * Fix memcheck error 2010-10-11 Guilhem Bonnefille : * Merge remote branch 'jocelyn/etag' * Disable autodownloading when dragging the map 2010-10-10 Robert Norris : * Fix: Uninitialized color value being used 2010-10-10 Guilhem Bonnefille : * Avoid uninitialized color value usage * Defensive code 2010-10-08 Rob Norris : * Add new menu entry in GPS Layer to delete the realtime information. * Ensure GPS realtime information deleted when GPS Layer -->Empty All is called. * Fix SF#3009431: Prevent Crash in Real Time Tracking GPS Mode & Autodownload Maps. * Fix display of rounded speed units scale markers in the speed profile. 2010-10-08 Guilhem Bonnefille : * Revert "Make more portable .vik file, as don't save the map cache directory if it's the map cache default directory." * Merge remote branch 'rnorris/LayerMenuKeyboardAccelerators' 2010-10-01 Rob Norris : * Make more portable .vik file, as don't save the map cache directory if it's the map cache default directory. * Remove specific user's map cache directory from test Terraserver.vik file, so that anyone can use it. * Prevent zoom factor string displaying unnecessary .0s when it's a whole number. 2010-10-01 Jon Burgess : * Prevent access to undefined data when fgets() returns NULL 2010-10-01 Rob Norris : * Improve Track Properties speed profile display for low speed difference (e.g. walking) tracks. * Use speed units in display of Track/Waypoint layer draw by velocity config values, but maintain units as metres per second when read from/saved to files. 2010-10-01 Guilhem Bonnefille : * Fix arithmetic macro definition 2010-10-01 Rob Norris : * Add and use defines for conversion of speed units. 2010-10-01 Guilhem Bonnefille : * Fix arithmetic macro definition 2010-09-29 Rob Norris : * Add keyboard accelerators for as many as possible View Menu entries. * Remove duplicated line of code in trackpoint drawing. * Fix small memory leak when downloading DEM data via the tool method. 2010-09-26 Rob Norris : * DEM layer properties tidy up. 2010-09-25 Guilhem Bonnefille : * Add a new debug message * Simplify zoom status when xmpp and ympp are equal * Fix minor source code typo * Fix arithmetic macro definition 2010-09-24 Rob Norris : * Improve grammar/usage for conversion macro function to convert meters into feet. Also prepend these macros with VIK_ as better practice. 2010-09-19 Guilhem Bonnefille : * Use constant for 'feet in meter' 2010-09-19 Rob Norris : * Use height units in the altitude readout for the cursor position on the status bar. * Use height units in display of DEM min / max elevation values, but maintain units as metres when read from/saved to files. * Extend set/get param interface to have knowledge of what type of operation it is - i.e. is it related to file i/o or display/cut/copy usage. 2010-09-19 Guilhem Bonnefille : * Fix cycle map URL * Fix GType macro usage 2010-09-19 Rob Norris : * Add keyboard accelerator for the Filter extension to the Track/Waypoint layer menu. * Add keyboard accelerators for the Waypoints sublayer menu. * Add keyboard accelerators for the Tracks sublayer menu and improve the text casing. * Add keyboard accelerators for the Track/Waypoints layer menu and improve the text casing. * Add keyboard accelerators for the Maps tools menu and improve the text casing. * Add keyboard accelerators for the Maps layer menu and improve the text casing. * Add keyboard accelerators for the GPS layer menu and improve text casing. * Add keyboard accelerators for the GeoRef layer menu. 2010-09-18 Rob Norris : * Fix compiler warning in file.c * Fix compiler warnings in vikgobjectbuilder.c * Fix compiler warnings in vikwindow.c * Fix compiler warnings in vikmaptype.c * Fix compiler warning in download.c * Fix compiler warning in degrees_converters.c * Fix compiler warnings in babel.c * Prevent getting stuck in a near infinite loop when using Coord layer, UTM mode and zoomed out to see the whole world. * Fix Track Draw by Velocity mode, so that individual track points are coloured (as was the intention). 2010-09-18 Guilhem Bonnefille : * Add a message to explain why feature does nothing * Fix previous commit 2010-09-18 Rob Norris : * Prevent lock up in attempt to download maps along a track in UTM mode. 2010-09-17 Guilhem Bonnefille : * Use the standard "Reload" verb 2010-09-17 Jocelyn Jaubert : * Clarify text on map layer menu 2010-09-17 Rob Norris : * Launchpad Bug #445374: Prevent crash when downloading maps along a track, with Terraserver maps when in Mercator mode. 2010-09-15 Jocelyn Jaubert : * Simplify code on download action to do when map file is not present * Fix bug where older file was removed when network not present 2010-09-15 Guilhem Bonnefille : * Fix a minor missing include 2010-09-14 Guilhem Bonnefille : * Comment VikSlippyMapSource 2010-09-14 Greg Troxel : * Fix bashisms. 2010-09-14 Jon Burgess : * Add explicit linking against libz and libm 2010-09-14 Guilhem Bonnefille : * Fix: warning 'draw-mode' message does not display 2010-09-13 Guilhem Bonnefille : * Fix incorrect limitation on source map id 2010-09-11 Guilhem Bonnefille : * Add warning when requested GObject type is unknown * [TEST] Add Terraserver viking file 2010-09-11 Rob Norris : * Prevent viewport tool selection/edit of trackpoint or waypoint when the layer or sublayer is invisible. 2010-09-07 Guilhem Bonnefille : * Releasing viking 0.9.95 * Merge branch 'i18n-launchpad' * Restore as many translations as possible 2010-09-06 Guilhem Bonnefille : * Document previous translation updates * Import Launchpad updates 2010-09-05 Benjamin Wagner : * Invalid number of arguments in call to a_http_download_get_u 2010-09-05 Rob Norris : * Prevent crash when cut of a GPS track/waypoint layer is attempted via the layers buttons. * Prevent DEM layer colour indexing going negative and can crash on gradient view. * Add some function short cut key definitions to control showing of the center mark and scale viewport features. * Fix DEM layer to show default sea level. 2010-08-24 Rob Norris : * [DOC] Minor update. * [DOC] Replace Google with OSM capability in man pages. 2010-08-17 Rob Norris : * When manually creating a track, automatically give it a default name. * Fix track background thickness being able to set back to zero. * [DOC] Tidy Up: First Pass * [DOC] Add contributors from the Wiki(s) history. 2010-08-16 Sven Wegener : * Fix internal tile locking 2010-08-16 Guilhem Bonnefille : * Fix debug message 2010-08-16 Rob Norris : * Fix top layer not drawn after made invisible and then back to being visible. * Fix impaired (drawcentermark setting bodged) vik file if saved with the top layer visibility turned off. 2010-08-12 Guilhem Bonnefille : * Fix syntax errors in help manual 2010-07-18 Jocelyn Jaubert : * Rename supports_if_modified_since to supports_download_only_new as it also contains etag support * Remove debug printf for etag * Write and read etag values from a file that is stored in the same directory than the image * Check if file is old enough for options check_file_server_time and use_etag * Leave download() function as soon as we know that we don't want to check server for a more recent file * Enable etag - need to use options from DownloadMapOptions * Get and send etag values to server if file_options allows it * Add use_etag in vikslippymapsource, and enable it on OSM mapnik maps only * Add use_etag to struct DownloadMapOptions * Add etag to struct DownloadFileOptions * Move time_condition to scruct DownloadFileOptions - this is to add the etag value * Rename struct DownloadOptions to DownloadMapOptions * Fix map drag and drop to show the correct whole map 2010-07-18 Rob Norris : * Fix "Go to UTM" dialog title. * Fix first opening of a file which has spaces (or other interesting characters) via the recent files menu. 2010-07-02 Rob Norris : * Better dialog name when searching for a waypoint. * Improvements for test programs. 2010-06-24 Rob Norris : * Fix unnamed_tracks / unnamed_waypoints misuse. * Prevent "Gtk-WARNING **: GtkSpinButton: setting an adjustment with non-zero page size is deprecated" messages. 2010-06-17 Greg Troxel : * Change max cache time to 1 week. 2010-06-11 Guilhem Bonnefille : * Releasing viking 0.9.94 2010-06-08 Guilhem Bonnefille : * Fix POTFILES with new source file * Merge branch 'i18n-launchpad' * Document previous translation updates * Import Launchpad updates 2010-06-06 Guilhem Bonnefille : * Fix OMF category 2010-06-06 Rob Norris : * Fix Filter->Simplify All Tracks default. * Add knots as a speed unit option. 2010-05-27 Guilhem Bonnefille : * [DOC] Fix Gnome's menu entry category for viking 2010-05-26 Guilhem Bonnefille : * Minor improves on gitchangelog script * [DOC] Update README and INSTALL files * [DOC] Fix erroneous warning 2010-05-25 Rob Norris : * Fix compiler warning. 2010-05-25 Guilhem Bonnefille : * Merge branch 'help' * [DOC] Correct tagging * Merge commit 'viking-0.9.93' into help * [DOC] Document Default maplayer directory property * [DOC] Document tile's age property * [DOC] Introduce properties related to units 2010-05-20 Guilhem Bonnefille : * Add Robert Norris as active contributor * Add Viking's contributors as copyright holders 2010-05-19 Rob Norris : * Detect USB Garmin eTrex HCx Legend devices (and maybe others). * On GPS data acquire, only create a layer if it contains something. * Auto use of /dev/ttyUSB type device if available on Unix systems. * Add ability to turn off Garmin GPS after transfer. 2010-05-19 Guilhem Bonnefille : * Add a 'home' default location preference. 2010-05-19 Rob Norris : * Add ability to changes preferences outside of the preferences.c file. 2010-05-19 Mathieu Albinet : * Fix #2977752 : win-gtk: osm tiles don't show up 2010-05-19 Robert Norris : * Fix Track -> View Google Directions URL 2010-05-18 Robert Norris : * NLS Maps API: Historic map of Great Britain 2010-05-18 Guilhem Bonnefille : * Fix function's return value * Fix compilation warnings 2010-05-02 Robert Norris : * Better Preferences Dialog Title 2010-05-02 Simon Munton : * Fix #2988574: Can't save files opened via recent file menu 2010-05-02 Rob Norris : * Change GUI related command line parameter for Waypoint symbol size into run time preference. 2010-04-29 Robert Norris : * Support All Zoom Levels in Zoom Menu 2010-04-27 Robert Norris : * More Menu Improvements * More Menu Improvements * Remove unecessary '\' from the View Menu 2010-04-27 Mark Coulter : * Fix #2991657: Terraserver downloads fail 2010-04-21 Mark Coulter : * Fix geocaching 2010-04-11 Guilhem Bonnefille : * Releasing viking 0.9.93 * Merge branch 'i18n-launchpad' * Fix old po/Changelog entry * Document previous translation updates * Fix the way to extract Translators * Import Launchpad updates * Fix: set a default filename while exporting 2010-04-03 Guilhem Bonnefille : * Allow overriding map source 2010-04-02 Guilhem Bonnefille : * [DOC] Fix: Viking's sources are hosted by Git now 2010-03-27 Robert Norris : * Clean git status 2010-03-24 Guilhem Bonnefille : * Merge commit 'viking-0.9.92' into help * Documenting extension files * Document external tools 2010-03-23 Rob Norris : * Further variable type corrections. * Make GPS layer cut/copy available from popup menu. * Minor Improvements. * Fix GPS layer copy. * Fix Track/Waypoint Layer Paste on 64bit systems. 2010-03-21 Guilhem Bonnefille : * Fix FILES section of manpage. 2010-03-20 Guilhem Bonnefille : * Document new files in viking's manpage 2010-03-18 Rob Norris : * Fix: First Track not Black in Draw All Tracks Black Mode. 2010-03-15 Jocelyn Jaubert : * Add a debug printf for map display * Increase possible smaller zoom * Add negative scales so that we can have bigger zoom on maps * Allow images from bigger and smaller zoom to be selected if current zoom has no image Merge logic for smaller zoom with current zoom 2010-03-15 Guilhem Bonnefille : * Rleasing viking 0.9.92 * Merge branch 'i18n-launchpad' * Document previous import * Import translations from launchpad 2010-03-13 Guilhem Bonnefille : * Merge commit 'viking-0.9.91' into help * Merge remote branch 'rnorris/unitPref' 2010-03-13 Gerhard Killesreiter : * Fix: Correctly rotate thumbnail images 2010-03-10 Guilhem Bonnefille : * Memorize previously selected go-to service 2010-03-09 Guilhem Bonnefille : * Fix #2958601: Support for non ascii characters in "Go-to" search 2010-03-07 Rob Norris : * Minor tidy up. * Better scale when zoomed close in and in miles distance mode. * Add and use preference for height units. * Add and use preference for speed units. * Add and use preference for distance units. 2010-02-16 Guilhem Bonnefille : * Use a preference to set the tiles age 2010-02-15 Guilhem Bonnefille : * Fix error handling in go-to feature 2010-02-14 Jocelyn Jaubert : * New preference for default maplayer cache 2010-02-08 David Rasmus Piegdon : * Improve DEM-Layer 2010-02-08 Guilhem Bonnefille : * Remove OpenAerial 2010-02-06 Guilhem Bonnefille : * Realising viking 0.9.91 2010-02-05 Guilhem Bonnefille : * Update POTFILES * Merge branch 'master' into i18n-launchpad * Declare new languages * Document previous import * Import translation from launchpad 2010-02-05 Mike Ryan : * Fix #2946287: open a recent file 2010-02-03 Mike Ryan : * cache the scaled pixbuf in the vikgeoreflayer struct if the newly-scaled width and height are the same, do not waste CPU rescaling the pixbuf * scale the georef layer based on current viewport rescales the image for every repaint, even if the mpp hasn't changed * fix some confusing indentation and bracing 2010-02-02 Robert Norris : * Fix #2881916: rename a track with c&p 2010-02-01 Jocelyn Jaubert : * Add missing ) in string 2010-02-01 Mike Ryan : * add GIO dependency and header for GFile 2010-02-01 Guilhem Bonnefille : * Portability: use GLib function g_utime if possible 2010-01-24 Sven Wegener : * Update mtime of up-to-date tiles * Allow reuse of curl connection objects 2010-01-24 Guilhem Bonnefille : * Use combobox to select map type 2010-01-14 Guilhem Bonnefille : * Add compatibility to previous GPS device setting * Fix #2766373: Use a string as device path 2010-01-13 Guilhem Bonnefille : * Merge branch 'new-maps' 2010-01-12 Guilhem Bonnefille : * Recode DownloadOptions as properties to VikSlippyMapSource 2010-01-11 Sven Wegener : * Change default map type to OSM * Fix "Moving Map Method" cannot be disabled 2010-01-11 Guilhem Bonnefille : * Fix #2880741: replace gps_open with gps_open_r * Fix #2921899: uses conditional macro to support two versions of libgps 2010-01-11 Bernd Zeimetz : * Make Viking compatible with libgps >= 2.90 2010-01-02 Guilhem Bonnefille : * Include configuration examples in distribution * Add configuration file for go-to search engines 2010-01-01 Guilhem Bonnefille : * Refactor goto feature to allow multiple search engines * Add Name finder search engine * Add Nominatim search engine * Add XPATH related attribute support 2009-12-17 Guilhem Bonnefille : * Add a unit test for VikGotoXmlTool * Add support for XML attribute based lat/lon values * Refactoring: move download code to vikgototool * Fix warnings 2009-12-16 Guilhem Bonnefille : * Use a configure option to set the age of tiles before checking them online 2009-12-14 Guilhem Bonnefille : * Replace "search" substring by "goto" * Fix URL formatting issue * Remove unused code * Fix URL formatting issue * Use only the first result * Fix error messages 2009-12-09 Guilhem Bonnefille : * Fix typo * Remove old code * Create the geonames search as an VikXmlSearchTool 2009-12-08 Guilhem Bonnefille : * Parse XML for XPath like path * Add copyright 2009-12-06 Guilhem Bonnefille : * Add generic XML earch code * Move common last search code to viksearch.c * Use a more expressive icon for "Go to" features 2009-12-03 Guilhem Bonnefille : * Fix typo * Move GoogleSearch to new framework 2009-11-26 Guilhem Bonnefille : * GObjectify search dialog 2009-11-05 Guilhem Bonnefille : * Fix #2801874: keep second part of a splitted track visible * Unecessary code * Fix #2838556: emit warning when gpsbabel is not found in PATH 2009-11-05 Stanislav Brabec : * Use motion hints to make map motion more responsive in slow environment. 2009-10-24 Guilhem Bonnefille : * Tiles must be older than a specified age before checking server * Use an internal thread concurrency model * Try to download newer tiles when autodownload is set and server supports such check * The "Download new" option must be available via download tool * Add support for recently used files 2009-10-20 Guilhem Bonnefille : * Distribute old version of ChangeLog * Add HACKING info 2009-10-19 Gleb Smirnoff : * suppress gtk warning 2009-10-18 Gleb Smirnoff : * remove declaration of non-existent function 2009-10-17 Gleb Smirnoff : * keeping OSM password safe 2009-10-12 Guilhem Bonnefille : * Declare new translations 2009-10-02 Guilhem Bonnefille : * Mark translatable strings 2009-09-30 Bernd Zeimetz : * Fix bashism in test script. 2009-09-30 David Rasmus Piegdon : * Add DEM Gradient 2009-09-29 Guilhem Bonnefille : * Merge branch 'fix-osm-api-0.6' * Update translatable strings 2009-09-29 Gleb Smirnoff : * finish OSM 0.6 API support 2009-09-29 Guilhem Bonnefille : * Add configure option to track deprecated feature 2009-09-27 Guilhem Bonnefille : * Refactoring: use a GObject model to implement MapSource hierarchy tree * Refactoring: keep a single definition for keys of global preferences * Add info for GeoRef Map's parameters * Import User Manual from wiki * Add DOAP file * Move src/.gitignore to main .gitignore * Add menu item for help contents * Setup build rules for help system * Replace autogen.sh 2009-09-22 Stanislav Brabec : * Get rid deprecated GtkTooltips API. 2009-09-22 Stanislav Brabec : * Added tooltips for layer panel buttons. 2009-09-21 Guilhem Bonnefille : * Merge commit 'viking-0.9.9' into gobjectify-map-type 2009-09-20 Jocelyn Jaubert : * ftp response code for success is 226 * Add option to download only maps that are more recent on server * Remove defines used for preferences * Move defines for preference to globals.h 2009-09-19 Guilhem Bonnefille : * Merge branch 'interpolation' 2009-09-18 Guilhem Bonnefille : * Refactoring: merge a_check_html_file and a_check_kml_file 2009-09-18 Harry G McGavran Jr : * Fix magic scissors 2009-09-09 Guilhem Bonnefille : * Releasing viking 0.9.9 * Add maintainer script to help releasing process * Document previous import * Import translations from launchpad 2009-08-28 Jocelyn Jaubert : * Change interpolation to a faster one * Use less precise images when wanted image is not present 2009-08-20 Guilhem Bonnefille : * Update translations from launchpad 2009-08-18 Guilhem Bonnefille : * Auto-Generation of ChangeLog file * Add a script to compute po/ChangeLog fragment * Update administrative file * Import current Launchpad translations 2009-08-18 Tal : * Fix #2163652: GPX file with byte order mark not parsed 2009-08-18 Guilhem Bonnefille : * Add src/mapcache.c as source file containing translatable strings 2009-07-28 Guilhem Bonnefille : * Fix #2766609: Don't use gpsd_units() 2009-07-28 Jocelyn Jaubert : * Add missing (VikLayerFuncPostRead) in structs VikLayerInterface 2009-07-26 Herm : * Fix #2812856: Change SRTM URL 2009-07-26 Guilhem Bonnefille : * Fix #2818818: unset langage preset while opening external Google * Fix copyright in --version output 2009-07-25 Herm : * Fix SRTM Server change 2009-07-24 Guilhem Bonnefille : * Add configuration file for map sources * Merge branch 'gobjectify-map-type' into gobject-builder * Manage memory of private fields * Fill in the interface * Move label 2009-07-22 Jocelyn Jaubert : * Fix memory leaks found with cppcheck 2009-07-21 Jocelyn Jaubert : * Fix warning in call to MD5Update() in function md5_hash() 2009-07-19 Guilhem Bonnefille : * Add configuration file for external tools * Remove dead code * Create the GObject builder 2009-07-19 Jocelyn Jaubert : * Add .gitignore 2009-07-19 Guilhem Bonnefille : * Value of property is the content of the property XML element 2009-07-18 Guilhem Bonnefille : * Expose VikSlippyMapSource's private fields as properties * Expose TerraserverMapSource's type as property * Expose VikMapSourceDefault's private fields as properties * GObjectify VikViewportDrawMode enum * Store test example for GValue * Use GtkBuilder to convert string to expected value's GType 2009-07-16 Guilhem Bonnefille : * Proof of concept 2009-07-15 Guilhem Bonnefille : * Style fix * Merge 'viking-0.9.8' 2009-07-14 Guilhem Bonnefille : * Merge 'viking-0.9.7' * Set VikMapSourceDefault properties * Remove dependencies to gob2 * Replace terraserver-map-type.gob by raw implementation * Merge vikslippymapsourceabstract and slippy-map-type * Finish to remove Google * Remove Google's map tiles * Remove old Google stuff 2009-06-19 Guilhem Bonnefille : * Complete 376c917751b680fd238cd85511bab4ed26727c0f * Document previous patches from Jonas Norling 2009-06-19 Jonas Norling : * Don't crash when jobs are cancelled via the background jobs dialog. * Join common code in zoom in and zoom out cases. * Filter out irrelevant modifiers. 2009-06-02 Guilhem Bonnefille : * Upgrade OSM-traces support to 0.6 API 2009-05-22 Guilhem Bonnefille : * Document previous patches * Fix previous patch 2009-05-22 Tal B : * use default values VIK_DEFAULT_DOP, VIK_DEFAULT_ALTITUDE * remove _VikTrackpoint.extended field. * Document when field in _VikTrackpoint are considered unavailable. * gpx_write_trackpoint(): * vdop, hdop, pdop, nsats and fix_mode values were not shown * hdop,vdop,pdop,nsat 2009-05-22 Guilhem Bonnefille : * Remove unused (and buggy) feature 2009-05-22 Jocelyn Jaubert : * Fix #570956: change saved_width to 1 2009-05-09 Guilhem Bonnefille : * Document previous merge * Merge improvement of map cache made by Jocelyn Jaubert 2009-05-09 Tal : * Replace g_strtod by g_ascii_strtod 2009-05-06 Jocelyn Jaubert : * Add a viking parameter for mapcache memory size * Move VIK_CONFIG_MAPCACHE_SIZE to a variable * Add menu option to flush mapcache, and reduce viking memory footprint * Add a_mapcache_flush() to completely flush the mapcache 2009-05-06 Guilhem Bonnefille : * Add a TODO * Document previous merge * Merge 'thread-pool' features from Jocelyn Jaubert 2009-05-06 Jocelyn Jaubert : * Stop all curl downloads on quit 2009-04-25 Jocelyn Jaubert : * Wait for all threads to finish before exiting viking * Replace g_thread by g_thread_pool 2009-04-17 Lixus Zoran : * Example file: OpenStreetMap 2009-04-17 Guilhem Bonnefille : * Avoid crash 2009-04-15 Guilhem Bonnefille : * Fix build problem 2009-04-13 Jocelyn Jaubert : * Show path used for map directory in options even when using default one 2009-04-13 Guilhem Bonnefille : * Change dependencies checking 2009-04-04 Jocelyn Jaubert : * Add missing include glib/gprintf.h 2009-04-04 Guilhem Bonnefille : * Document previous patch 2009-04-04 Jocelyn Jaubert : * Fix bug #2481237: Maps directory file chooser should look for directory 2009-04-04 Guilhem Bonnefille : * Document previous patch 2009-04-04 Jocelyn Jaubert : * libcurl update: replace deprecated CURLOPT_FILE by CURLOPT_WRITEDATA 2009-04-04 Guilhem Bonnefille : * Documenting previous patch 2009-04-04 Jocelyn Jaubert : * Include full libcurl version in user agent 2009-03-27 Guilhem Bonnefille : * Add vik prefix * Rename slippy-map-type-abstract as slippymapsourceabstract * Replace old-vik-map-type by vikmaptype * Replace vik-map-type-default by vikmapsourcedefault * Replace vik-map-type by vikmapsource * Document new hierarchie * Add compatibility facilities * Declare built sources * Insert a level of abstraction in map type hierarchie * Remove Google * Update design 2009-03-27 (null) <(null)>: * Add UML design * Typo * Inherit GoogleMapType from SlippyMapTypeAbstract * Insert slippy map type * Add Google Kh map type * QA: cleanning unused stuff * Cleanning code * Finalize Terraserver migration * Extract BlueMarble and OpenAerial form OSM module * Make osm-map-type running * Make google-map-type running * Start using GoogleMapType GObject * Replace VikMapsLayer_MapType by VikMapType * Correct google gobject * Declare built sources * Add Terraserver * Add OSM * Create Google map type * Initial GoogleMaps implementation based on gob2 * Allow compilation * Initial VikMapType class * QA: un-needed external reference * Portability * QA: homogeneous way of doing stuff 2009-02-13 Guilhem Bonnefille : * Release 0.9.8 * Update translations for 0.9.8 2009-02-02 Guilhem Bonnefille : * Release 0.9.8 2009-01-31 Guilhem Bonnefille : * Finish to remove Google 2009-01-22 Guilhem Bonnefille : * Document previous patch 2009-01-22 Mathieu Albinet : * Fix loading a world file 2009-01-22 Guilhem Bonnefille : * Enforce memory free 2009-01-22 Robert Norris : * Fix some memory leaks. 2009-01-18 Guilhem Bonnefille : * Document previous commits * Allow to select between Google and Geonames for searching method * Add conditional compilation for geonames 2009-01-18 Hein Ragas : * Documenting previous patches from Hein Ragas * Geonames et Wikipedia search * Better GeoNames.org implementation * a patch to use GeoNames.org instead of Google for the 'Go to'-functionality. 2009-01-15 Mathieu Albinet : * Windows port 2008-12-20 Guilhem Bonnefille : * Remove Google's map-tiles 2008-12-18 Guilhem Bonnefille : * Remove old Google stuff * Add configuration options for OpenAerial and BlueMarble 2008-12-13 Guilhem Bonnefille : * News feature: external tools * QA: improve portability 2008-12-06 Quy Tonthat : * Clicking on "vivisble" tick of a layer no longer makes the layer selected. 2008-12-03 Hein Ragas : * GPX export: sort track by time. (By Hein Ragas). 2008-11-21 Quy Tonthat : * Fix bugs that caused magic scissors not working. * Merging track: Merge with more than one tracks at a time. 2008-11-18 Quy Tonthat : * Merging track. Few safegards, enhance and bug fixes. 2008-11-18 Hein Ragas : * Merging track by name. As submitted by Hein Ragas 2008-11-13 Quy Tonthat : * No longer provide support for google satellite maps. 2008-10-31 Quy Tonthat : * Change Title of Waypoint Properties dialog to "Waypoint Properties" 2008-10-30 Quy Tonthat : * Change how waypoint names are displayed. * Make sure we won't pick up unwanted _pixmap.h files * Larger waypoint symbols 2008-10-28 Quy Tonthat : * Waypoint icons are now compatible with GPS. 2008-10-22 Quy Tonthat : * Fix compatibility problem for windows. 2008-10-20 Quy Tonthat : * New server for OSM cycle map 2008-10-14 Evan Battaglia : * minor fix in gcget. * Update gcget to adapt to changes at geocaching.com 2008-10-13 Quy Tonthat : * Make warning messages a bit more informative. * g_timeout_add_seconds() did not exist until glib 2.14 * gps realtime tracking: retry on connection to gpsd. 2008-10-12 Jon Burgess : * fix curl error buffer usage * fix missing status return in spawn_command_line_async() * fix implicit declaration of maps_layer_default_dir() 2008-10-12 Guilhem Bonnefille : * Typo * Release 0.9.7 2008-10-12 Robert Norris : * Fix some more compiler warnings 2008-10-12 Guilhem Bonnefille : * Rename test files 2008-10-12 Jon Burgess : * Properties of some tracks show as NaN 2008-10-10 Quy Tonthat : * Realtime tracking: Add new moving map method. * gps realtime tracking: fixed segfault. 2008-09-30 Stanislav Brabec : * Fix icon target dir * Improve viking.desktop * Fix missing files in po/POTFILES.in * Rename icon: viking_icon.png -> viking.png 2008-09-30 Guilhem Bonnefille : * Note TODO * Document Fix #1947260 2008-09-21 Quy Tonthat : * Change "Zoom To" short cut to avoid conflict with "Zoom Tool". 2008-09-16 Guilhem Bonnefille : * Typos * Update translations * Update translations from launchpad 2008-09-06 Quy Tonthat : * Fix parallel build (make -j8) on multi-processor machines. Based on a patch from sbrabec. 2008-09-03 Guilhem Bonnefille : * QA: cleanning unused stuff * QA: un-needed external reference * Portability * QA: homogeneous way of doing stuff 2008-09-01 Guilhem Bonnefille : * Fix #1947260: correct a corrupted escape 2008-09-01 Quy Tonthat : * Google search adapting changes from Google. 2008-08-31 Quy Tonthat : * Fix crashes when creating new layers. 2008-08-30 Guilhem Bonnefille : * Typo: removing trailing double-colon on ChangeLog * Removing critical message * QA: removing specific GtkCellRenderer * Documenting previous patch + I18N updates 2008-08-30 Armin Moser : * added a menu entry to extend an existing track using magic scissors 2008-08-30 Guilhem Bonnefille : * Documenting previous patch 2008-08-30 Armin Moser : * osm cycle layer support 2008-08-30 Guilhem Bonnefille : * Fix typo * Document previous patch and fix typo 2008-08-30 anonymous <>: * Patch #2009666: OpenAerialMap 2008-08-30 Guilhem Bonnefille : * QA: avoid segfault * Replace GTK_STOCK_GO_FORWARD with GTK_STOCK_JUMP_TO * Document previous fix and add data to reproduce problem * QA * Synchronise vikwindow.c and menu.xml around mode handling 2008-08-30 Robert Norris : * Fix 1952523 2008-08-29 Guilhem Bonnefille : * Relocate current data field * Textual properties go in a dedicated tab 2008-08-25 Guilhem Bonnefille : * Typo * QA: use standard function instead of viking specific * Add preferences to select how degrees are displayed 2008-08-24 Guilhem Bonnefille : * Update layer after modifying properties * QA: Unused code * Add documentation and test file for previous patch 2008-08-24 Mathieu Albinet : * Color picker button for the Coordlayer properties dialog 2008-08-23 Guilhem Bonnefille : * Acting (Cut, Copy, Paste) when nothing selected is not critical * QA: more generic way of computing size of an array * Add tooltips to some actions * Documenting previous patch 2008-08-23 Mathieu Albinet : * Layers panel UI improvements 2008-08-22 Guilhem Bonnefille : * Homogeneous icons management. * Replace some g_warning by g_debug * Add email support in about dialog * Replace specific about dialog by GtkAboutDialog * Add dependencies between built sources and Makefile.am 2008-08-17 Guilhem Bonnefille : * Use the new widget to hide OSM's password * Add a password entry widget * Create preferences for OSM traces module 2008-08-16 Guilhem Bonnefille : * Ensure that confirmation dialog is over file selector 2008-08-13 Quy Tonthat : * Fixed Google map download problem. 2008-07-31 Guilhem Bonnefille : * Releasing 0.9.6 * Remove unecessary directive 2008-07-28 Quy Tonthat : * Fix gcget command line to accomodate negative coords. 2008-07-22 Quy Tonthat : * Google maps no longer worked due to changes by Google. Problems now fixed. 2008-07-22 Guilhem Bonnefille : * Releasing 0.9.5 * Delete duplicates * Add directives to clean * Automatic update * Update AUTHORS list * Fix suggested by Jocelyn * Document recent activities * Automatic update * Update from Launchpad 2008-07-19 Guilhem Bonnefille : * Automatically disable man pages generation 2008-07-18 Guilhem Bonnefille : * Convert and install man pages 2008-07-15 Guilhem Bonnefille : * Better integration of .desktop file * Comment 2008-07-15 Quy Tonthat : * Add viking.desktop file 2008-07-14 Guilhem Bonnefille : * Documenting recent patch * QA: Remove some more warnings 2008-07-14 Robert Norris : * Compiler warning fixes 2008-07-14 Guilhem Bonnefille : * Package new languages * Translation update (automatic) 2008-07-09 Guilhem Bonnefille : * Update translations 2008-07-01 Quy Tonthat : * Track properties: split track at marker. 2008-06-29 Quy Tonthat : * Track Properties: Keep markers of the graphs in sync with each other. 2008-06-29 Mathieu Albinet : * Windows port: fallback temporary file * Windows port: typo in util.c 2008-06-24 Quy Tonthat : * Track graph marker now works again. 2008-06-21 Quy Tonthat : * Fix google version number. 2008-06-15 Quy Tonthat : * Mark release 0.9.4.20080614 in ChangeLog 2008-06-14 Mathieu Albinet : * Windows port: use as many directories as POSIX version * Windows: home dir define via GLib * Recursive mkdir: use dedicated GLib function * strtod -> g_strtod * Windows port: add serial port * Windows port: calling gpsbabel from windows 2008-06-09 Mathieu Albinet : * Windows port: redefine LOCALEDIR 2008-06-05 Quy Tonthat : * Do not convert waypoint names to uppercase. Make them case insensitive. 2008-06-03 Mathieu Albinet : * Portability: remove "/dev/null" reference 2008-05-09 Jon Burgess : * Fix compilation issue 2008-05-08 Mathieu Albinet : * Portability: use of g_ascii_dtostr to format google url 2008-05-08 Guilhem Bonnefille : * Improve error handling + I18N 2008-05-08 Mathieu Albinet : * Portability: replace mmap functions by g_mapped_file* * Windows port: rename interface to source_interface 2008-05-08 Guilhem Bonnefille : * Update man page * Storing manpages 2008-05-02 Guilhem Bonnefille : * Moving manpage upstream * Moving manpage upstream 2008-05-01 Guilhem Bonnefille : * Add file content checking process * Use a more generic error message * Improve error handling 2008-05-01 Mathieu Albinet : * Remove dependency to wget 2008-05-01 Guilhem Bonnefille : * Adding --debug and --verbose command line option 2008-04-27 Guilhem Bonnefille : * Portability: conditional sys/wait.h * Cosmetic change * Cosmetic change 2008-04-27 Mathieu Albinet : * Fix pipe leaks * Portability: provide our own curl WRITE function 2008-04-22 Robert Norris : * Fix for implicit declaration of function 'g_fopen' * Fix: Initalize tv_usec field 2008-04-21 Guilhem Bonnefille : * Read/Write ISO date in GLib's way * Add a GPX non regression utility 2008-04-19 Tim Scofield : * Fix: typo 2008-04-15 Guilhem Bonnefille : * M_PI already defined 2008-04-12 Mathieu Albinet : * Portability: remove dirname needs with g_mkdir_with_parents * Portability: replace deprecated bzero function by memset * Portability: use Glib function related to stdio.h * Portability: replace mkdir by g_mkdir * Portability: reduce unistd.h dependency 2008-04-12 Evan Battaglia : * add copyright in dem files * Add chinese translation from Zhang Jun 2008-04-01 Guilhem Bonnefille : * Revert "Declare the need of C99 compliant compiler" 2008-03-30 Mathieu Albinet : * Replace GtkFileSelection by GtkFileChooser 2008-03-25 Guilhem Bonnefille : * Declare the need of C99 compliant compiler * Update authors list 2008-03-24 Guilhem Bonnefille : * Make all icons in a single .o 2008-03-16 Guilhem Bonnefille : * Store cursor info directly into tool struct 2008-03-15 Guilhem Bonnefille : * Pan tool (as default) * Extract pan related codes * Fix: [ 1839948 ] Maximize/Restore changes current cursor * Comment typo 2008-02-27 Guilhem Bonnefille : * Typo * Improve form to simplify automatic extractions 2008-02-25 Guilhem Bonnefille : * Releasing 0.9.4 * Add missing file * Remove debug trace * Rename func a_array_to_glist to str_array_to_glist (due to current interface) 2008-02-25 Robert Norris : * Fix some compiler warnings (SF#1888407) * Fix 1881475 autogen can generate broken configure file 2008-02-25 Guilhem Bonnefille : * Documenting previous commit 2008-02-24 Guilhem Bonnefille : * Correct OSM URL 2008-02-21 Quy Tonthat : * viking.spec: Correct license, required packages and local. 2008-02-20 Guilhem Bonnefille : * Update translations * State of LaunchPad contributions * Update french translation * Typo * Update french translation * Typo * Update French translation * Update from fresh .pot file * Update French translation * Correct famous sentence * Remove trailing '\n' in g_message calls 2008-02-16 Guilhem Bonnefille : * Update french translation * Marking translatable string in main.c * Documenting Jocelyn's patches * Patch fr translation * I18N improvement 2008-01-25 Alex Foobarian : * Sort out the viewport header file a bit for better readability and in preparation for a cairo branch. 2008-01-22 Alex Foobarian : * fix a crash bug in the merge-by-time function 2008-01-18 Quy Tonthat : * Added mutex to protect map pixbuf cache from being corrupted. 2008-01-17 Quy Tonthat : * Fix a crash bug in mapcache reported by Jocelyn 2008-01-15 Christoph Eckert : * bugfix (thanks Christoph Eckert) 2008-01-12 Guilhem Bonnefille : * Fix: remove unused * Fix: remove warnings 2008-01-04 Alex Foobarian : * Adjusted v-t drawing 2007-12-27 Evan Battaglia : * Bugfix for preferences * DEBUG option for gcget. * gcget-perl * fix remove duplicates gpsbabel filter. full screen mode. * one bugfix for gcget. there may be another bug out there. 2007-12-27 Oddgeir Kvien : * Add GpxWritingOptions to control GPX file writing * Add default values to ele and time fields (due to OSM) 2007-12-23 Evan Battaglia : * Don't scare off users from trying geocache support. 2007-12-22 Guilhem Bonnefille : * Update french plural form 2007-12-22 Evan Battaglia : * preferences / geocaching update 2007-12-21 Jocelyn Jaubert : * Update French translation 2007-12-21 Christoph Eckert : * Update source for OSM/Osmarender tiles 2007-12-21 Evan Battaglia : * Preferences: include the file. oops. * Preferences!!!! Make way for the Geocachers. 2007-12-19 Quy Tonthat : * Revert a previous change that disabled realtime tracking if libgps does not exist. 2007-12-17 Jocelyn Jaubert : * Use specific gettext call for plural form 2007-12-17 Guilhem Bonnefille : * Fix contribution dates 2007-12-17 Evan Battaglia : * "Highest unused" (not really) waypoint number as deafult name for waypoint. * Sort waypoints in GPX output 2007-12-15 Guilhem Bonnefille : * Fix: ensure config.h is included conditionnaly 2007-12-15 Jocelyn Jaubert : * Update french translation * Mark many strings translatable 2007-12-15 Guilhem Bonnefille : * Fix: if libgps is missing, Realtime GPS Tracking is disabled * Fix compilation under HURD (missing MAXPATHLEN macro) 2007-12-15 Jocelyn Jaubert : * Make menu entries translatable 2007-12-13 Guilhem Bonnefille : * First french translation (incomplete) * Marking translatable strings. 2007-12-12 Guilhem Bonnefille : * Fix bug: "config.status: error: cannot find input file: Makefile.in" * Fix warning: underquoted definition of AM_WITH_EXPAT 2007-12-10 Quy Tonthat : * Now that autogen.sh runs configure, "make full" should not. * Fix autogen.sh to remove the assumption that version 1.9 of automake is available on all systems. 2007-12-08 Evan Battaglia : * disable printing & let viking compile for gtk < 2.10.0 * Google terrain maps. * BlueMarble tile 2007-12-01 Guilhem Bonnefille : * Renaming AC_PROG_INTLTOOL (deprecated) with IT_PROG_INTLTOOL 2007-11-27 Guilhem Bonnefille : * Use a list of possible browsers. * Forgot incremental rebuild 2007-11-26 Guilhem Bonnefille : * I18N: Adding minimal stuff * I18N: Using standard autogen.sh 2007-11-19 Quy Tonthat : * Fix a bug that can potentially cause segfault. * Improve track graphs. Some tracks looked too flat. 2007-11-13 Evan Battaglia : * add another missing file * adding forgotten uibulder code... 2007-11-10 Evan Battaglia : * gctrackbyarc script * Filters filters oh my 2007-11-07 Quy Tonthat : * New feature: map printing. 2007-10-31 Quy Tonthat : * Fix bug that caused Old Google maps not being disabled by default. 2007-10-24 Quy Tonthat : * Fix "incompatible pointer type" warnings. * Make elev graph show better graph for low altitude tracks. * Fix a bug that caused crashes when displaying elev graph for some track. 2007-10-22 Bernd Zeimetz : * Fixing the implicit declaration completely, thanks to dann frazier Debian #447662 * Fixing another implicit declaration. * Missing declaration. Thanks to Bernd Zeimetz 2007-10-21 Guilhem Bonnefille : * Releasing 0.9.3 * Add "version" option 2007-10-20 Evan Battaglia : * Fixing minor typo which caused crashes for me recently, unknown why it didn't crash before 2007-10-20 Quy Tonthat : * Added track name to title of properties dialog. * Diasable buttons on Track Properties Dialog when not needed. * Draw position marker on track elev/speed graphs at mouse click * Track Properties Dialog no longer blocks interaction of the main window. 2007-10-17 Evan Battaglia : * Minor bugfix (one_zone is 0 for non-UTM projections) 2007-10-16 Evan Battaglia : * Fix Google parsing. Should probably change default number to "2.61" too. 2007-10-15 Quy Tonthat : * Cosmetic changes and cleanup * Interpolating DEM data. * Interpolating DEM data. * Add more room to the top of altitude-distance graph. 2007-10-15 Evan Battaglia : * fix plotting of DEM data on elevation graph 2007-10-12 Evan Battaglia : * Fix tool keypresses to work only when Viewport has focus. 2007-10-12 Quy Tonthat : * Make use of DEM elevation data and GPS speed data for track graphs. 2007-10-12 Evan Battaglia : * keypress framework for tools, Esc & Backspace 2007-10-11 Guilhem Bonnefille : * Upgrading to API 0.5 of OSM 2007-10-11 Quy Tonthat : * Added new fields to trackpoints for data from GPS in realtime mode. 2007-10-10 Quy Tonthat : * Make Realtime Tracking a feature that can be disabled at configure time. 2007-10-10 Evan Battaglia : * Use $BROWSER environment variable (for viewing geocache pages) 2007-10-09 Guilhem Bonnefille : * libgps is no more mandatory 2007-10-09 Evan Battaglia : * Implement g_hash_table_remove_all in file.c too (for early glib versions) * Preview adding a trackpoint by drawing a line when moving mouse 2007-10-09 Guilhem Bonnefille : * Relax dependencies about glib 2007-10-09 Evan Battaglia : * Color current track red with dashed lines. (Better feedback) * Ctrl-shift-scroll to zoom like google, scroll to zoom w/o changing center 2007-10-09 Quy Tonthat : * Fix a crash bug caused by operation on variable inside a macro. 2007-10-08 Quy Tonthat : * Fix compiling breakage caused by missing icon file from the list. 2007-10-07 Evan Battaglia : * Experimental "begin track" tool * Extend track * Undo Magic Scissors by right clicking. * Remove debug line from last commit * Cursors! * Scroll zoom keeps cursor over same spot on map 2007-10-07 Quy Tonthat : * Track Properties: now displays track distance/time instead of "Selected Time". 2007-10-06 Quy Tonthat : * The "Selected Time" on track properties dialog is now correct. * Correctly calculate position when click on speed-time graph. * Pop a message when failed to connect to gpsd. * Fix bugs that caused odd display of date/time on track properties dialog. 2007-10-05 Quy Tonthat : * Be more selective in collecting realtime trackpoints. * Fix a segfault caused by (mistakenly) adding a new layer to gps layer. 2007-10-04 Quy Tonthat : * Improvements for GPS layer's "Realtime tracking". 2007-10-03 Evan Battaglia : * Removing GPSDLayer (functionality now in gpslayer) 2007-10-02 Quy Tonthat : * Cleanup and cosmetic changes. * Fix half-drawn problem for gps layer * Add realtime tracking to GPS layer. 2007-10-01 Quy Tonthat : * Fix crashes caused by emitting update too early at layer creation. * Disable half-drawn update mode when the center is moved. 2007-09-28 Quy Tonthat : * ChangeLog entry * Fix a long lasting bug that causes track property not working properly. 2007-09-28 Evan Battaglia : * Half-drawn hack * Draw arrow in Gpsdlayer DEM Layer -- minimum elevation 2007-09-26 Evan Battaglia : * gpsdlayer -- gps_close() the connection. 2007-09-25 Quy Tonthat : * SRTM download now works for regions outside North_America too. 2007-09-24 Evan Battaglia : * Experimental VikGpsdLayer 2007-09-23 Evan Battaglia : * Magic Scissors goodies * Add Magic Scissors icon (from GIMP) * Remove unused vik_layer_copy code * Fix crashes on using wrong tools * Serialize string lists / fix DEM Layer copy/paste * * Pan Accelerators (Ctrl+Left, etc) * Ctrl-Scroll and Ctrl-Shift-Scroll to pan, kind of like Gimp. * Add a RADIOGROUP_STATIC properties factory type to make it easy for new layers. Uses an array list (like before) instead of a GList. * DEM US 10m (dem24k) source! Option in DEM Layer & ./configure * (copying & pasting DEM layers is broken, will fix later) * Download&import SRTM 90m data (more work needed) Fix right-click geocache->goto geocaching.com web page 2007-09-18 Guilhem Bonnefille : * Refactoring: really minor change * Refactoring: minor changes 2007-09-18 Evan Battaglia : * Saner vikfilelist.c -- allow multiple selections when adding DEM files * Fix optional geocaching -- include config.h to compile * Update ChangeLog * Draw lines for file existence at very-zoomed out levels 2007-09-09 Guilhem Bonnefille : * Removing unused files (*.png.h). * Fix #1789550: define MAX macro if not defined on ALL systems * g_*ify a path building 2007-09-08 Quy Tonthat : * Automatically fetching google version numbers. 2007-09-07 Guilhem Bonnefille : * Fix #1789550: mkdtemp usage is conditioned * QA: remove a warning * g_*ify maps_layer_default_dir function and code related to maps cache * g_*ify a_get_viking_dir function 2007-09-06 Guilhem Bonnefille : * Adding command line option framework. 2007-09-05 Quy Tonthat : * Fix a bug that causes crashes when using "Maps Download" tool. * Make viking's default start location somewhere more likely has maps. 2007-09-04 Guilhem Bonnefille : * Releasing 0.9.2 * QA: removing warning 2007-09-03 Guilhem Bonnefille : * Hide Expedia view mode when expedia is not built in. * Do not warn about drawmode inconsistency while reading file. * Do not warn about drawmode inconsistency while reading file. * Use $EMAIL to initialise email field for OSM upload. * Refactoring: retrieve the VikWindow from the VikViewport via its GtkWidget nature * Preset filename when exporting a TrwLayer. * QA: strong type the second argument of the *_post_read functions. * Fix: crash when "applying" a map layer property dialog 2007-09-02 Guilhem Bonnefille : * Releasing 0.9.1 2007-09-01 Guilhem Bonnefille : * Disable Expedia map layer by default (as it is not working) 2007-08-30 Bernd Zeimetz : * Add redirect support (for Expedia map layer) 2007-08-30 Guilhem Bonnefille : * Add ability to upload a single track * QA: Remove warnings 2007-08-28 Guilhem Bonnefille : * Check current drawmode after creating a new MapsLayer * QA: testing NULL before *free is not necessary * Refactoring: compute drawmode name by getting menu entry label * Allow to retrieve VikWindow from VikViewport 2007-08-24 Quy Tonthat : * Give more instructive message for attempting to download maps in wrong mapmode * Better checking to detect downloaded text instead of images * New google version number 2007-08-22 Guilhem Bonnefille : * Adding the ability to upload to OSM. 2007-08-20 Guilhem Bonnefille : * Small target to easy multi-branch developer's work * libcurl is a requirement 2007-08-20 Quy Tonthat : * Fix bug in Google search that caused viking jump to wrong location when Google can not find the match. 2007-08-19 Quy Tonthat : * Fix bugs that cause crashes on layers copy/paste/delete. 2007-08-15 Guilhem Bonnefille : * Group "Export Layer" entries in a submenu 2007-08-15 Quy Tonthat : * Clean up and get rid of compiler warnings. * Old google modes are now disabled by default. 2007-08-14 Quy Tonthat : * Fix bug in creating temporary HOME when HOME is not set. 2007-08-14 Guilhem Bonnefille : * Adding "name" accessor 2007-08-08 Quy Tonthat : * Make Google Map default map type. 2007-08-04 Guilhem Bonnefille : * Refactoring 2007-08-01 Quy Tonthat : * Read hgt.zip files directly. Process correctly 1 arc sec hgt(.zip) files 2007-07-27 Quy Tonthat : * Plug file descriptor leak 2007-07-26 Quy Tonthat : * Display altitude at the cursor position, on status bar. 2007-07-25 Quy Tonthat : * New google version number 2007-07-24 Quy Tonthat : * Disable Geocaches Acquire. 2007-07-17 Guilhem Bonnefille : * Adding copyright * Solving a regression But Viking don't compile without libcurl, even with this modification 2007-07-17 Quy Tonthat : * Clean up (my) degug messages 2007-07-16 Bernd Zeimetz : * moving trunk/debian into the pkg-deb directory, adding tags/branches dirs 2007-07-14 Guilhem Bonnefille : * Converting printf calls 2007-07-13 Guilhem Bonnefille : * Releasing 0.9 * Declaring vikdemlayer_pixmap.h to automake * Removing Reid from AUTHORS file. * Revert "Add debian subdirectory to automaked tarball" * Declaring new icon for Debian package 2007-07-13 Quy Tonthat : * ChangeLog entry * Eliminate the needs of entering DEM files for every single track/waypoint layer. 2007-07-07 Quy Tonthat : * Fixed typo. 2007-07-06 Evan Battaglia : * DEM: fix vertical units * Fix invalid elevation * Merge DEM branch 2007-07-04 Quy Tonthat : * ChangeLog entry * Bug fix: View Mode displayed wrong setting on startup. 2007-07-03 Quy Tonthat : * ChangeLog entry * Fixed bugs that caused "draw_scale" and "draw_centermark" not consistent. 2007-07-02 Quy Tonthat : * ChangeLog entry * Fix bugs that caused crashes on gps download/upload. 2007-07-01 Quy Tonthat : * ChangeLog entry * Make "Save Image" and "Save Image Directory" dialogs reusable. 2007-06-28 Quy Tonthat : * Really using the new icon. 2007-06-27 Guilhem Bonnefille : * Using the new icon 2007-06-27 Mark Coulter : * Added Viking icon provided by Mark Coulter 2007-06-24 Guilhem Bonnefille : * Refreshing INSTALL * Removing old (and no more functional) Makefile * Add debian subdirectory to automaked tarball 2007-06-24 Ralf Meyer : * Merging with Ralf debianization 2007-06-23 Guilhem Bonnefille : * Unused variable * Add include to avoid implicit declaration * Initialisation to avoid warning * Explicit donw-casting * Correct declaration * Unused variables * Correct some erroneous declarations * Use g_mkdir instead of native mkdir * Use g_free as free function * Add requested sentinel and correct gdk_pixbuf_save call * Declare usage of math.h include * Suppress warning about backslashed newline at end of line * Dynamic version in User-Agent * Add referer to DownloadOptions 2007-06-23 Tim Scofield : * Minor change to avoid SEGFAULT on x86_64 2007-06-23 Guilhem Bonnefille : * Adding a DownloadOptions type. 2007-06-20 Quy Tonthat : * ChangeLog * Google Search: fixed to work with new Google output. 2007-06-19 Guilhem Bonnefille : * Moving acinclude.m4 as expat.m4 * File forgotten on commit trunk@289 2007-06-19 Quy Tonthat : * Fix a wild pointer bug that can cause crashes. * Fix bugs that causes "drawcentermark" not recognised when reading from files. 2007-06-18 Guilhem Bonnefille : * Declaring curl_download_init function. * Copying libcurl.m4 2007-06-18 Quy Tonthat : * Release 0.1.3-20070618 * Download maps along track: maps between far apart trackpoints. * Download maps along a track. * New Google version numbers. * Add User-Agent to http request header. * Make the center mark look a bit better. * Add center mark which can be turn on/off in View menu. * Make the scale more visible on dark maps. * Added cookies to google requests. * New google version number 2007-06-13 Ralf Meyer : * Adding an icon for the entry menu (Debian package only) 2007-06-13 Guilhem Bonnefille : * Correct the man pages generation * Adding an icon 2007-06-08 Quy Tonthat : * ChangLog entries * Fix a bug that causes segfault on trackpoint properties dialog. 2007-06-01 Quy Tonthat : * Bacported Evan's magic scissors from DEM branch. * Fix a segfault on track properties dialog. 2007-05-31 Quy Tonthat : * ChangeLog entry. * Use google maps search string as comment for new immediately created waypoint. * Add Google Maps search to toolbar. * Google Maps search: code clean up. * Go to location using Google Maps search. * Cosmetic changes: fix compiler warnings. 2007-05-26 Mark Coulter : * Many new waypoint symbols created by Mark Coulter. 2007-05-26 Quy Tonthat : * viking 0.1.3.20070526 * ChangeLog entries * Fix intermittent problem of map redraw. * Handle cases that only need redraw (without downloading). 2007-05-24 Guilhem Bonnefille : * Removing generated files * Adding man pages 2007-05-24 Quy Tonthat : * Make window dimensions easier to be changed. * Small touches on the look. * Maps layer: Improve performance for map autodownload. 2007-05-23 Quy Tonthat : * ChangeLog entries * Put Google Directions dialogs at the center of viking window. * Google Directions now remembers previous query (from/to entries). * ChangeLog Entries * Gpslayer: New menu items to remove all tracks and waypoints in GPS folders. 2007-05-22 Quy Tonthat : * Add "Save and Exit" to File menu. * Disable temporarily prompt for saving on exit. 2007-05-21 Quy Tonthat : * ChangeLog entry * Save function for GPS layer (part 2: read) * Save function for GPS layer (part 1: write only) 2007-05-20 Alex Foobarian : * edit waypoint fix 2007-05-19 Quy Tonthat : * ChangeLog entry for autodownload fixes * osm now reports download error status. * Terraserver now reports download error status. * Expedia now reports download error status. * Stop autodownload from running forever on map downloading errors. 2007-05-18 Quy Tonthat : * Add curl-devel to spec file 2007-05-17 Quy Tonthat : * ChangeLog entry * Check for non-displayable data after downloading map. * ChangeLog entry * Map tool: Left click can now refresh display of map tiles. 2007-05-17 Guilhem Bonnefille : * Releasing 0.1.3 2007-05-17 Quy Tonthat : * Fix problems in map downloading caused by unreliable error detection. 2007-05-14 Quy Tonthat : * Changelog entry for the last commit * Fix bug that causes crash on viking exit. 2007-05-13 Evan Battaglia : * Remove the old tile from cache BEFORE redrawing. * Fix "corrupted tile" problem -- was really just that incomplete tiles were being drawn & subsequently taken into memory cache. We should really add a "clear memory cache" menu item too. 2007-05-11 Evan Battaglia : * Fix stupid segfault bug in main.c (open file) * Now when we refresh tiles it will remove them from the memory cache like it was supposed to. 2007-05-09 Quy Tonthat : * New google version number 2007-05-08 Guilhem Bonnefille : * Refreshing tiles 2007-05-04 Guilhem Bonnefille : * Declaring Debianization * Added watch configuration files for other Debian packager * Removing Debian maintainer script examples * Adding menu entry inside the Debian package * Removing unused file for Viking's Debian package * Correct copyright holder in Debian package * Update Debian package documentation * Initial dh_make debianization 2007-04-29 Guilhem Bonnefille : * Declaring Reid's patch * Applying Reid's patch 2007-04-28 Guilhem Bonnefille : * Allows to enable/disable OpenStreetMap module * Adding Maplint OpenStreetMap layer 2007-04-23 Guilhem Bonnefille : * New module for OpenStreetMap sources. * Updating Changelog for libcurl adition 2007-04-21 Evan Battaglia : * Slippy maps * slippy maps 2007-04-16 Guilhem Bonnefille : * Add libcurl * Moving up cache management * Introducing download module * Unused function 2007-04-04 Quy Tonthat : * Fixed Google Directions * New google version number 2007-02-20 Quy Tonthat : * GPS layer dialog is now displayed at the center of the Viking main window 2007-02-19 Quy Tonthat : * New Google version numbers 2007-02-15 Quy Tonthat : * Added viking.spec.in (by Michael A Peters). Made autoconf be aware of the new file * Added viking.spec.in (by Michael A Peters). Made autoconf be aware of the new file 2007-02-14 Guilhem Bonnefille : * Preparing 0.1.2 * Cleanup 2007-02-13 Guilhem Bonnefille : * About dialog filled with AUTHORS file * Preparing 0.1.2: update contributors lists * Update ChangeLog for my recent modifications * Add (current) version and URL in about dialog * Remove URL and version from title 2007-02-06 Quy Tonthat : * Fix bug that causes crashes when click at the right of the track graph. 2007-02-06 Jocelyn Jaubert : * Patch from Jocelyn Jaubert. Add time position to Track Poperties 2007-02-05 Quy Tonthat : * Corrected main window title and viking website * New google version numbers * Cosmetic changes 2007-02-04 Quy Tonthat : * Simplify tools enable/disable codes 2007-02-01 Quy Tonthat : * Disable/enable tools according to what layer is active 2007-01-28 Guilhem Bonnefille : * Work done by Quy 2007-01-27 Quy Tonthat : * Display map sections while downloading 2007-01-25 Quy Tonthat : * Fixed bugs that caused crashes on creating new map layer or new track/waypoint layer 2007-01-23 Quy Tonthat : * Updated google tranparent version number * Merged branch modular (r146:173) to trunk 2007-01-18 Guilhem Bonnefille : * Content moved to the Wiki * Update 2007-01-05 Quy Tonthat : * Bug fix: main menu edit->delete and edit->cut did not work with waypoints and tracks. 2007-01-04 Quy Tonthat : * Added 'Copy' and 'Cut' to popup menus for waypoint and track 2007-01-03 Quy Tonthat : * Remove assumption aggregate is the only type of layers that has child layers. Gpslayer does too. 2007-01-02 Quy Tonthat : * menu selection for layer instances. * Layers now can have their say on what pop up menu items they want. 2007-01-01 Quy Tonthat : * gpslayer: code cleanup 2007-01-01 Guilhem Bonnefille : * Make all .h self sufficient 2007-01-01 Quy Tonthat : * gpslayer: fix bug that caused crash when click \'Cancel\' on layer creating dialog 2006-12-31 Quy Tonthat : * Added gpslayer 2006-12-26 Guilhem Bonnefille : * Improve ChangeLog for next test release * Fix a google version number change 2006-12-17 Alex Foobarian : * 2006-12-07 Alex Foobarian : * fix array overflow 2006-12-05 Alex Foobarian : * 2006-12-04 Alex Foobarian : * about dialog 2006-11-30 Alex Foobarian : * 2006-11-29 Guilhem Bonnefille : * Makefile and Makefile.in are generated files and should be ignored by SVN 2006-11-29 Alex Foobarian : * 2006-11-12 Guilhem Bonnefille : * Add explicit dependency to expat library 2006-10-31 Alex Foobarian : * visual feedback when moving waypoints 2006-10-30 Alex Foobarian : * * fix toolbar icons in recent gtk 2006-10-28 Alex Foobarian : * ticket 1577378: make viking compile with older gtk * ignore png_h files * fixing icons * fixing icons * modified mime types for png files * 2006-10-26 Alex Foobarian : * *** empty log message *** * *** empty log message *** * google version seems to be required in europe 2006-10-23 Guilhem Bonnefille : * Improve the ChangeLog for the 2006-10-23 release * Improve Makefile for a "make distcheck" support 2006-10-23 Alex Foobarian : * toolbox tool improvements 2006-08-15 Guilhem Bonnefille : * Adding implicit DMS->dec conversion in dialogs * Adding implicit DMS->dec conversion in dialogs 2006-07-26 Guilhem Bonnefille : * add dec -> DDD conversion * add dec -> DMM conversion * refactor dms conversions 2006-07-24 Reid Priedhorsky : * Adding the path for GoogleMaps from Reid Priedhorsky 2006-07-22 Guilhem Bonnefille : * Adding degrees conversion functions (DDD/DMM/DMS) 2006-07-06 Evan Battaglia : * Upgrade Google Maps -- Europe 2006-06-11 Guilhem Bonnefille : * Preparing 0.1.1 2006-05-26 Guilhem Bonnefille : * Bootstraping from CVS 2006-05-25 Alex Foobarian : * added a setup dialog for acquire from gps 2006-05-12 Alex Foobarian : * small fixes in acquire from gps code 2006-05-08 Guilhem Bonnefille : * Bootstraping from CVS 2006-05-06 Guilhem Bonnefille : * moving generated config.h to src to allow 'make dist' * bug #1479244: FreeBSD port 2005-12-04 Evan Battaglia : * More data source fixes * Data sources existence checks and other fixes 2005-11-26 Evan Battaglia : * Geocaching.com (via gcget) data source * Data sources update * Google import adds to currently-existing layer 2005-11-25 Evan Battaglia : * Data sources core structure, google directions 2005-11-24 Evan Battaglia : * Getting ready for Google directions import * Locale-independent output for gpsmapper.c and gpspoint.c 2005-11-23 Guilhem Bonnefille : * Better GPX export 2005-11-21 Alex Foobarian : * *** empty log message *** * fixed v-t diagram crash bug * fixed a v-t diagram crash bug 2005-11-19 Evan Battaglia : * Alex's GPSBabel acquire code 2005-11-18 Alex Foobarian : * *** empty log message *** * copy/paste of individual track- and waypoints- between processes now works 2005-11-17 Alex Foobarian : * finished layer marshalling support * fix sprintf warning * Fix Makefile.am 2005-11-16 Alex Foobarian : * Added layer marshalling support; for now trw and map layers are implemented. * Retooled clipboard to support interprocess pasting; only full layers work between processes for now. * fix implicit declaration warning * Commenting out converter.[ch] until the files are in CVS; otherwise the build is broken. 2005-10-28 Guilhem Bonnefille : * Adding --with-mapcache to configure 2005-10-18 Guilhem Bonnefille : * Changing my email 2005-10-18 Alex Foobarian : * fix ruler declination in UTM mode 2005-10-17 Guilhem Bonnefille : * Relocating icons.h in order to better handle its prodution 2005-10-16 Evan Battaglia : * Minor SList/List confusion fix * Some work on zoom-in overflow bugs * Fix bgitemcount * Fix ruler to show angle, distance when off-screen 2005-10-14 Alex Foobarian : * sanity check pasted lat/lon coordinate 2005-10-13 Alex Foobarian : * Drag and drop whole track/waypoint lists * fixed dnd crash when moving to same spot, and when moving from in front of target 2005-10-12 Alex Foobarian : * coord layer drawing for lat/lon * draw ruler only when idle * deadlock fix 2005-10-11 Alex Foobarian : * Draw a compass and bearing while using the ruler 2005-10-09 Alex Foobarian : * fix pasting Google Maps links 2005-10-08 Evan Battaglia : * Fix DISCONNECT_UPDATE_SIGNAL failed assertion 2005-10-07 Alex Foobarian : * Added ruler drawing to the ruler tool 2005-10-06 Alex Foobarian : * More wp icons added * Added support for pasting lat/lon coordinates as waypoints 2005-10-06 Evan Battaglia : * Name resolution for pasting wps&tracks 2005-10-05 Evan Battaglia : * Alex's �bercool clipboard patch 2005-10-01 Evan Battaglia : * Remove USGS * Remove USGS * Option as to whether to show scale * Update TODO * Update AUTHORS * Alex's optional symbols patch; Fix geocaching .loc symbols * Remove icons.h (generated) * make symbols work for geocaching .loc 2005-09-30 Alex Foobarian : * fixed name collisions during track/wp DND * added GPX symbols * Updated DND to insert layers at the point of the drop, instead of front of list * added a DnD method to layer interface, and updated treeview DnD to use it 2005-09-30 Guilhem Bonnefille : * Generated files should not appears on CVS * Added ato-tools support for src/icons 2005-09-29 Evan Battaglia : * Fix saving bug I introduced earlier; update TODO 2005-09-29 Alex Foobarian : * fix warnings and remove some debug output * Added wp symbol support; added scale ruler 2005-09-29 Evan Battaglia : * trying to get g_dtostr to work * Update TODO * Forgot to add icons.h * all icons inline * menu.xml -> menu.xml.h 2005-09-28 Guilhem Bonnefille : * Handle doc subdirectory * Use configure.ac version * Substitution of CFLAGS by AM_CFLAGS 2005-09-28 Evan Battaglia : * Update TODO file * Guilhem's autotools update * strtod -> g_strtod * Alex's DND & Toolbar patch 2005-09-17 Evan Battaglia : * Update TODO/Changelog * Update TODO/ChangeLog * Stops and elevation plotting options and fixxes * Update TODO/ChangeLog * GPX write, clickable v-vs-t diagram * Tools that may or may not be helpful/fun * Read Geocaching .loc (about time) 2005-09-16 Evan Battaglia : * Initial GPX support, experimental 3-d plotting, bugfixes, oh myg 2005-09-15 Evan Battaglia : * Fix layer editable/checkbox bug due to stupid GTK's closures * Elevation map click and bugfixes * Fix USGS support 2005-09-13 Evan Battaglia : * Guilhem's autotools support/alphabetized trw option * Fixes to Alex's last patch 2005-09-13 Alex Foobarian : * Alex Foobarian's v-vs-t and elevation map patch 2005-09-07 Evan Battaglia : * Update INSTALL file * Add dummy NEWS file * Guilhem's Autotools support 2005-09-07 Alex Foobarian : * Alex Foobarian's track profile patch * Alex Foobarian's track duration patch 2005-09-05 Evan Battaglia : * Delete from cache when updating image. 2005-09-04 Evan Battaglia : * Fix mapcache stuff 2005-09-03 Alex Foobarian : * Alex Foobarian's track split/merge patch 2005-09-01 Evan Battaglia : * Initial revision 2005-09-01 (no author) <(no author)@02d69b8e-d120-0410-893f-fe71a3b6e39e>: * New repository initialized by cvs2svn. viking-1.4.2/configure0000755000175000017500000112746112175546614011664 00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for viking 1.4.2. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='viking' PACKAGE_TARNAME='viking' PACKAGE_VERSION='1.4.2' PACKAGE_STRING='viking 1.4.2' PACKAGE_BUGREPORT='' PACKAGE_URL='' # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS VIKING_DOC_FALSE VIKING_DOC_TRUE GEN_MANPAGES_FALSE GEN_MANPAGES_TRUE HAVE_XSLTPROC_FALSE HAVE_XSLTPROC_TRUE XP DB2MAN_XSL REALTIME_GPS_TRACKING_FALSE REALTIME_GPS_TRACKING_TRUE DEM24K_FALSE DEM24K_TRUE SPOTMAPS_FALSE SPOTMAPS_TRUE GEOTAG_FALSE GEOTAG_TRUE GEOCACHES_FALSE GEOCACHES_TRUE GEONAMES_FALSE GEONAMES_TRUE BLUEMARBLE_FALSE BLUEMARBLE_TRUE OPENSTREETMAP_FALSE OPENSTREETMAP_TRUE EXPEDIA_FALSE EXPEDIA_TRUE TERRASERVER_FALSE TERRASERVER_TRUE GOOGLE_FALSE GOOGLE_TRUE BING_FALSE BING_TRUE HAVE_GNOME_DOC_UTILS_FALSE HAVE_GNOME_DOC_UTILS_TRUE DISTCHECK_CONFIGURE_FLAGS ENABLE_SK_FALSE ENABLE_SK_TRUE DOC_USER_FORMATS OMF_DIR HELP_DIR LN_S PACKAGE_LIBS PACKAGE_CFLAGS GDK_PIXBUF_CSOURCE LIBCURL LIBCURL_CPPFLAGS _libcurl_config EXPAT_LIBS EXPAT_CFLAGS EXPAT_INSTALLED_FALSE EXPAT_INSTALLED_TRUE POW_LIB LIBOBJS ACLOCAL_AMFLAGS CONFIG_STATUS_DEPENDENCIES ALL_LINGUAS INTLTOOL_PERL MSGMERGE INTLTOOL_POLICY_RULE INTLTOOL_SERVICE_RULE INTLTOOL_THEME_RULE INTLTOOL_SCHEMAS_RULE INTLTOOL_CAVES_RULE INTLTOOL_XML_NOMERGE_RULE INTLTOOL_XML_RULE INTLTOOL_KBD_RULE INTLTOOL_XAM_RULE INTLTOOL_UI_RULE INTLTOOL_SOUNDLIST_RULE INTLTOOL_SHEET_RULE INTLTOOL_SERVER_RULE INTLTOOL_PONG_RULE INTLTOOL_OAF_RULE INTLTOOL_PROP_RULE INTLTOOL_KEYS_RULE INTLTOOL_DIRECTORY_RULE INTLTOOL_DESKTOP_RULE intltool__v_merge_options_0 intltool__v_merge_options_ INTLTOOL_V_MERGE_OPTIONS INTLTOOL__v_MERGE_0 INTLTOOL__v_MERGE_ INTLTOOL_V_MERGE INTLTOOL_EXTRACT INTLTOOL_MERGE INTLTOOL_UPDATE MKINSTALLDIRS POSUB POFILES PO_IN_DATADIR_FALSE PO_IN_DATADIR_TRUE INTLLIBS INSTOBJEXT GMOFILES DATADIRNAME CATOBJEXT CATALOGS XGETTEXT GMSGFMT MSGFMT_OPTS MSGFMT USE_NLS EGREP GREP CPP GETTEXT_PACKAGE GLIB_MKENUMS RANLIB am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC GTK_DOC_USE_REBASE_FALSE GTK_DOC_USE_REBASE_TRUE GTK_DOC_USE_LIBTOOL_FALSE GTK_DOC_USE_LIBTOOL_TRUE GTK_DOC_BUILD_PDF_FALSE GTK_DOC_BUILD_PDF_TRUE GTK_DOC_BUILD_HTML_FALSE GTK_DOC_BUILD_HTML_TRUE ENABLE_GTK_DOC_FALSE ENABLE_GTK_DOC_TRUE GTKDOC_DEPS_LIBS GTKDOC_DEPS_CFLAGS HTML_DIR GTKDOC_MKPDF GTKDOC_REBASE GTKDOC_CHECK PKG_CONFIG_LIBDIR PKG_CONFIG_PATH PKG_CONFIG AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules with_html_dir enable_gtk_doc enable_gtk_doc_html enable_gtk_doc_pdf enable_dependency_tracking enable_nls with_expat with_libcurl with_help_dir with_omf_dir with_help_formats enable_scrollkeeper enable_deprecations enable_alphabetized_trw enable_bing enable_google enable_terraserver enable_expedia enable_openstreetmap enable_bluemarble enable_geonames enable_geocaches enable_geotag enable_spotmaps enable_dem24k enable_realtime_gps_tracking with_search with_mapcache with_tileage ' ac_precious_vars='build_alias host_alias target_alias PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR GTKDOC_DEPS_CFLAGS GTKDOC_DEPS_LIBS CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP PACKAGE_CFLAGS PACKAGE_LIBS' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures viking 1.4.2 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/viking] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of viking 1.4.2:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-gtk-doc use gtk-doc to build documentation [[default=no]] --enable-gtk-doc-html build documentation in html format [[default=yes]] --enable-gtk-doc-pdf build documentation in pdf format [[default=no]] --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --disable-nls do not use Native Language Support --disable-scrollkeeper do not make updates to the scrollkeeper database --enable-deprecations warn about deprecated usages [default=no] --enable-alphabetized-trw enable alphabetized track & waypoints (default is enable) --enable-bing enable Bing stuff (default is enable) --enable-google enable Google stuff (default is enable) --enable-terraserver enable Terraserver stuff (default is enable) --enable-expedia enable Expedia stuff (default is disable) --enable-openstreetmap enable OpenStreetMap stuff (default is enable) --enable-bluemarble enable BlueMarble stuff (default is enable) --enable-geonames enable Geonames stuff (default is enable) --enable-geocaches enable Geocaches Acquire (default is disable). --enable-geotag enable Geotag Support (default is enable). --enable-spotmaps enable SPOTMaps map (default is enable). --enable-dem24k enable USGS 24k DEM (default is disable) download source. Requires dem24k.pl script in path. --enable-realtime-gps-tracking enable realtime GPS tracking (default is enable) Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-html-dir=PATH path to installed docs --with-expat=PREFIX Use system Expat library --with-libcurl=DIR look for the curl library in DIR --with-help-dir=DIR path to help docs --with-omf-dir=DIR path to OMF files --with-help-formats=FORMATS list of formats --with-search specify google or geonames for searching (default is google) --with-mapcache specify the size of the map cache in MB (default is 128) --with-tileage specify the age of a tile before checking it (default is 7 days) Some influential environment variables: PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path GTKDOC_DEPS_CFLAGS C compiler flags for GTKDOC_DEPS, overriding pkg-config GTKDOC_DEPS_LIBS linker flags for GTKDOC_DEPS, overriding pkg-config CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor PACKAGE_CFLAGS C compiler flags for PACKAGE, overriding pkg-config PACKAGE_LIBS linker flags for PACKAGE, overriding pkg-config Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF viking configure 1.4.2 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_c_check_type LINENO TYPE VAR INCLUDES # ------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache # variable VAR accordingly. ac_fn_c_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else eval "$3=yes" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by viking $as_me 1.4.2, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am__api_version='1.13' ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='viking' VERSION='1.4.2' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' ac_config_headers="$ac_config_headers src/config.h" if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 $as_echo "$PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 $as_echo "$ac_pt_PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 $as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } PKG_CONFIG="" fi fi # Extract the first word of "gtkdoc-check", so it can be a program name with args. set dummy gtkdoc-check; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GTKDOC_CHECK+:} false; then : $as_echo_n "(cached) " >&6 else case $GTKDOC_CHECK in [\\/]* | ?:[\\/]*) ac_cv_path_GTKDOC_CHECK="$GTKDOC_CHECK" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GTKDOC_CHECK="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi GTKDOC_CHECK=$ac_cv_path_GTKDOC_CHECK if test -n "$GTKDOC_CHECK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_CHECK" >&5 $as_echo "$GTKDOC_CHECK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi for ac_prog in gtkdoc-rebase do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GTKDOC_REBASE+:} false; then : $as_echo_n "(cached) " >&6 else case $GTKDOC_REBASE in [\\/]* | ?:[\\/]*) ac_cv_path_GTKDOC_REBASE="$GTKDOC_REBASE" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GTKDOC_REBASE="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi GTKDOC_REBASE=$ac_cv_path_GTKDOC_REBASE if test -n "$GTKDOC_REBASE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_REBASE" >&5 $as_echo "$GTKDOC_REBASE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$GTKDOC_REBASE" && break done test -n "$GTKDOC_REBASE" || GTKDOC_REBASE="true" # Extract the first word of "gtkdoc-mkpdf", so it can be a program name with args. set dummy gtkdoc-mkpdf; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GTKDOC_MKPDF+:} false; then : $as_echo_n "(cached) " >&6 else case $GTKDOC_MKPDF in [\\/]* | ?:[\\/]*) ac_cv_path_GTKDOC_MKPDF="$GTKDOC_MKPDF" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GTKDOC_MKPDF="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi GTKDOC_MKPDF=$ac_cv_path_GTKDOC_MKPDF if test -n "$GTKDOC_MKPDF"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_MKPDF" >&5 $as_echo "$GTKDOC_MKPDF" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Check whether --with-html-dir was given. if test "${with_html_dir+set}" = set; then : withval=$with_html_dir; else with_html_dir='${datadir}/gtk-doc/html' fi HTML_DIR="$with_html_dir" # Check whether --enable-gtk-doc was given. if test "${enable_gtk_doc+set}" = set; then : enableval=$enable_gtk_doc; else enable_gtk_doc=no fi if test x$enable_gtk_doc = xyes; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk-doc >= 1.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk-doc >= 1.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : else as_fn_error $? "You need to have gtk-doc >= 1.0 installed to build $PACKAGE_NAME" "$LINENO" 5 fi if test "x$PACKAGE_NAME" != "xglib"; then pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTKDOC_DEPS" >&5 $as_echo_n "checking for GTKDOC_DEPS... " >&6; } if test -n "$GTKDOC_DEPS_CFLAGS"; then pkg_cv_GTKDOC_DEPS_CFLAGS="$GTKDOC_DEPS_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GTKDOC_DEPS_CFLAGS=`$PKG_CONFIG --cflags "glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GTKDOC_DEPS_LIBS"; then pkg_cv_GTKDOC_DEPS_LIBS="$GTKDOC_DEPS_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GTKDOC_DEPS_LIBS=`$PKG_CONFIG --libs "glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GTKDOC_DEPS_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0" 2>&1` else GTKDOC_DEPS_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GTKDOC_DEPS_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0) were not met: $GTKDOC_DEPS_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables GTKDOC_DEPS_CFLAGS and GTKDOC_DEPS_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables GTKDOC_DEPS_CFLAGS and GTKDOC_DEPS_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else GTKDOC_DEPS_CFLAGS=$pkg_cv_GTKDOC_DEPS_CFLAGS GTKDOC_DEPS_LIBS=$pkg_cv_GTKDOC_DEPS_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build gtk-doc documentation" >&5 $as_echo_n "checking whether to build gtk-doc documentation... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_gtk_doc" >&5 $as_echo "$enable_gtk_doc" >&6; } # Check whether --enable-gtk-doc-html was given. if test "${enable_gtk_doc_html+set}" = set; then : enableval=$enable_gtk_doc_html; else enable_gtk_doc_html=yes fi # Check whether --enable-gtk-doc-pdf was given. if test "${enable_gtk_doc_pdf+set}" = set; then : enableval=$enable_gtk_doc_pdf; else enable_gtk_doc_pdf=no fi if test -z "$GTKDOC_MKPDF"; then enable_gtk_doc_pdf=no fi if test x$enable_gtk_doc = xyes; then ENABLE_GTK_DOC_TRUE= ENABLE_GTK_DOC_FALSE='#' else ENABLE_GTK_DOC_TRUE='#' ENABLE_GTK_DOC_FALSE= fi if test x$enable_gtk_doc_html = xyes; then GTK_DOC_BUILD_HTML_TRUE= GTK_DOC_BUILD_HTML_FALSE='#' else GTK_DOC_BUILD_HTML_TRUE='#' GTK_DOC_BUILD_HTML_FALSE= fi if test x$enable_gtk_doc_pdf = xyes; then GTK_DOC_BUILD_PDF_TRUE= GTK_DOC_BUILD_PDF_FALSE='#' else GTK_DOC_BUILD_PDF_TRUE='#' GTK_DOC_BUILD_PDF_FALSE= fi if test -n "$LIBTOOL"; then GTK_DOC_USE_LIBTOOL_TRUE= GTK_DOC_USE_LIBTOOL_FALSE='#' else GTK_DOC_USE_LIBTOOL_TRUE='#' GTK_DOC_USE_LIBTOOL_FALSE= fi if test -n "$GTKDOC_REBASE"; then GTK_DOC_USE_REBASE_TRUE= GTK_DOC_USE_REBASE_FALSE='#' else GTK_DOC_USE_REBASE_TRUE='#' GTK_DOC_USE_REBASE_FALSE= fi # Checks for programs. ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi # Extract the first word of "glib-mkenums", so it can be a program name with args. set dummy glib-mkenums; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GLIB_MKENUMS+:} false; then : $as_echo_n "(cached) " >&6 else case $GLIB_MKENUMS in [\\/]* | ?:[\\/]*) ac_cv_path_GLIB_MKENUMS="$GLIB_MKENUMS" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GLIB_MKENUMS="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi GLIB_MKENUMS=$ac_cv_path_GLIB_MKENUMS if test -n "$GLIB_MKENUMS"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GLIB_MKENUMS" >&5 $as_echo "$GLIB_MKENUMS" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # I18N GETTEXT_PACKAGE=viking cat >>confdefs.h <<_ACEOF #define GETTEXT_PACKAGE "$GETTEXT_PACKAGE" _ACEOF ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in locale.h do : ac_fn_c_check_header_mongrel "$LINENO" "locale.h" "ac_cv_header_locale_h" "$ac_includes_default" if test "x$ac_cv_header_locale_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LOCALE_H 1 _ACEOF fi done if test $ac_cv_header_locale_h = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LC_MESSAGES" >&5 $as_echo_n "checking for LC_MESSAGES... " >&6; } if ${am_cv_val_LC_MESSAGES+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return LC_MESSAGES ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_val_LC_MESSAGES=yes else am_cv_val_LC_MESSAGES=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_val_LC_MESSAGES" >&5 $as_echo "$am_cv_val_LC_MESSAGES" >&6; } if test $am_cv_val_LC_MESSAGES = yes; then $as_echo "#define HAVE_LC_MESSAGES 1" >>confdefs.h fi fi USE_NLS=yes gt_cv_have_gettext=no CATOBJEXT=NONE XGETTEXT=: INTLLIBS= ac_fn_c_check_header_mongrel "$LINENO" "libintl.h" "ac_cv_header_libintl_h" "$ac_includes_default" if test "x$ac_cv_header_libintl_h" = xyes; then : gt_cv_func_dgettext_libintl="no" libintl_extra_libs="" # # First check in libc # { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngettext in libc" >&5 $as_echo_n "checking for ngettext in libc... " >&6; } if ${gt_cv_func_ngettext_libc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return !ngettext ("","", 1) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_ngettext_libc=yes else gt_cv_func_ngettext_libc=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_ngettext_libc" >&5 $as_echo "$gt_cv_func_ngettext_libc" >&6; } if test "$gt_cv_func_ngettext_libc" = "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dgettext in libc" >&5 $as_echo_n "checking for dgettext in libc... " >&6; } if ${gt_cv_func_dgettext_libc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return !dgettext ("","") ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_dgettext_libc=yes else gt_cv_func_dgettext_libc=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_dgettext_libc" >&5 $as_echo "$gt_cv_func_dgettext_libc" >&6; } fi if test "$gt_cv_func_ngettext_libc" = "yes" ; then for ac_func in bind_textdomain_codeset do : ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_BIND_TEXTDOMAIN_CODESET 1 _ACEOF fi done fi # # If we don't have everything we want, check in libintl # if test "$gt_cv_func_dgettext_libc" != "yes" \ || test "$gt_cv_func_ngettext_libc" != "yes" \ || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bindtextdomain in -lintl" >&5 $as_echo_n "checking for bindtextdomain in -lintl... " >&6; } if ${ac_cv_lib_intl_bindtextdomain+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char bindtextdomain (); int main () { return bindtextdomain (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_bindtextdomain=yes else ac_cv_lib_intl_bindtextdomain=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_bindtextdomain" >&5 $as_echo "$ac_cv_lib_intl_bindtextdomain" >&6; } if test "x$ac_cv_lib_intl_bindtextdomain" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngettext in -lintl" >&5 $as_echo_n "checking for ngettext in -lintl... " >&6; } if ${ac_cv_lib_intl_ngettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ngettext (); int main () { return ngettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_ngettext=yes else ac_cv_lib_intl_ngettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_ngettext" >&5 $as_echo "$ac_cv_lib_intl_ngettext" >&6; } if test "x$ac_cv_lib_intl_ngettext" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dgettext in -lintl" >&5 $as_echo_n "checking for dgettext in -lintl... " >&6; } if ${ac_cv_lib_intl_dgettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dgettext (); int main () { return dgettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_dgettext=yes else ac_cv_lib_intl_dgettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_dgettext" >&5 $as_echo "$ac_cv_lib_intl_dgettext" >&6; } if test "x$ac_cv_lib_intl_dgettext" = xyes; then : gt_cv_func_dgettext_libintl=yes fi fi fi if test "$gt_cv_func_dgettext_libintl" != "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -liconv is needed to use gettext" >&5 $as_echo_n "checking if -liconv is needed to use gettext... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 $as_echo "" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngettext in -lintl" >&5 $as_echo_n "checking for ngettext in -lintl... " >&6; } if ${ac_cv_lib_intl_ngettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl -liconv $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ngettext (); int main () { return ngettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_ngettext=yes else ac_cv_lib_intl_ngettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_ngettext" >&5 $as_echo "$ac_cv_lib_intl_ngettext" >&6; } if test "x$ac_cv_lib_intl_ngettext" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dcgettext in -lintl" >&5 $as_echo_n "checking for dcgettext in -lintl... " >&6; } if ${ac_cv_lib_intl_dcgettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl -liconv $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dcgettext (); int main () { return dcgettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_dcgettext=yes else ac_cv_lib_intl_dcgettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_dcgettext" >&5 $as_echo "$ac_cv_lib_intl_dcgettext" >&6; } if test "x$ac_cv_lib_intl_dcgettext" = xyes; then : gt_cv_func_dgettext_libintl=yes libintl_extra_libs=-liconv else : fi else : fi fi # # If we found libintl, then check in it for bind_textdomain_codeset(); # we'll prefer libc if neither have bind_textdomain_codeset(), # and both have dgettext and ngettext # if test "$gt_cv_func_dgettext_libintl" = "yes" ; then glib_save_LIBS="$LIBS" LIBS="$LIBS -lintl $libintl_extra_libs" unset ac_cv_func_bind_textdomain_codeset for ac_func in bind_textdomain_codeset do : ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_BIND_TEXTDOMAIN_CODESET 1 _ACEOF fi done LIBS="$glib_save_LIBS" if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then gt_cv_func_dgettext_libc=no else if test "$gt_cv_func_dgettext_libc" = "yes" \ && test "$gt_cv_func_ngettext_libc" = "yes"; then gt_cv_func_dgettext_libintl=no fi fi fi fi if test "$gt_cv_func_dgettext_libc" = "yes" \ || test "$gt_cv_func_dgettext_libintl" = "yes"; then gt_cv_have_gettext=yes fi if test "$gt_cv_func_dgettext_libintl" = "yes"; then INTLLIBS="-lintl $libintl_extra_libs" fi if test "$gt_cv_have_gettext" = "yes"; then $as_echo "#define HAVE_GETTEXT 1" >>confdefs.h # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case "$MSGFMT" in /*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"; then ac_cv_path_MSGFMT="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT="no" ;; esac fi MSGFMT="$ac_cv_path_MSGFMT" if test "$MSGFMT" != "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 $as_echo "$MSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "$MSGFMT" != "no"; then glib_save_LIBS="$LIBS" LIBS="$LIBS $INTLLIBS" for ac_func in dcgettext do : ac_fn_c_check_func "$LINENO" "dcgettext" "ac_cv_func_dcgettext" if test "x$ac_cv_func_dcgettext" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DCGETTEXT 1 _ACEOF fi done MSGFMT_OPTS= { $as_echo "$as_me:${as_lineno-$LINENO}: checking if msgfmt accepts -c" >&5 $as_echo_n "checking if msgfmt accepts -c... " >&6; } cat >conftest.foo <<_ACEOF msgid "" msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Project-Id-Version: test 1.0\n" "PO-Revision-Date: 2007-02-15 12:01+0100\n" "Last-Translator: test \n" "Language-Team: C \n" "MIME-Version: 1.0\n" "Content-Transfer-Encoding: 8bit\n" _ACEOF if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$MSGFMT -c -o /dev/null conftest.foo"; } >&5 ($MSGFMT -c -o /dev/null conftest.foo) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then MSGFMT_OPTS=-c; { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } echo "$as_me: failed input was:" >&5 sed 's/^/| /' conftest.foo >&5 fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GMSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case $GMSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" ;; esac fi GMSGFMT=$ac_cv_path_GMSGFMT if test -n "$GMSGFMT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 $as_echo "$GMSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_XGETTEXT+:} false; then : $as_echo_n "(cached) " >&6 else case "$XGETTEXT" in /*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"; then ac_cv_path_XGETTEXT="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" ;; esac fi XGETTEXT="$ac_cv_path_XGETTEXT" if test "$XGETTEXT" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 $as_echo "$XGETTEXT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { extern int _nl_msg_cat_cntr; return _nl_msg_cat_cntr ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : CATOBJEXT=.gmo DATADIRNAME=share else case $host in *-*-solaris*) ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : CATOBJEXT=.gmo DATADIRNAME=share else CATOBJEXT=.mo DATADIRNAME=lib fi ;; *-*-openbsd*) CATOBJEXT=.mo DATADIRNAME=share ;; *) CATOBJEXT=.mo DATADIRNAME=lib ;; esac fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$glib_save_LIBS" INSTOBJEXT=.mo else gt_cv_have_gettext=no fi fi fi if test "$gt_cv_have_gettext" = "yes" ; then $as_echo "#define ENABLE_NLS 1" >>confdefs.h fi if test "$XGETTEXT" != ":"; then if $XGETTEXT --omit-header /dev/null 2> /dev/null; then : ; else { $as_echo "$as_me:${as_lineno-$LINENO}: result: found xgettext program is not GNU xgettext; ignore it" >&5 $as_echo "found xgettext program is not GNU xgettext; ignore it" >&6; } XGETTEXT=":" fi fi # We need to process the po/ directory. POSUB=po ac_config_commands="$ac_config_commands default-1" for lang in $ALL_LINGUAS; do GMOFILES="$GMOFILES $lang.gmo" POFILES="$POFILES $lang.po" done if test "$gt_cv_have_gettext" = "yes"; then if test "x$ALL_LINGUAS" = "x"; then LINGUAS= else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for catalogs to be installed" >&5 $as_echo_n "checking for catalogs to be installed... " >&6; } NEW_LINGUAS= for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "${LINGUAS-%UNSET%}"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then NEW_LINGUAS="$NEW_LINGUAS $presentlang" fi done LINGUAS=$NEW_LINGUAS { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LINGUAS" >&5 $as_echo "$LINGUAS" >&6; } fi if test -n "$LINGUAS"; then for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done fi fi MKINSTALLDIRS= if test -n "$ac_aux_dir"; then MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" fi if test -z "$MKINSTALLDIRS"; then MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" fi test -d po || mkdir po if test "x$srcdir" != "x."; then if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then posrcprefix="$srcdir/" else posrcprefix="../$srcdir/" fi else posrcprefix="../" fi rm -f po/POTFILES sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \ < $srcdir/po/POTFILES.in > po/POTFILES glib_save_prefix="$prefix" glib_save_exec_prefix="$exec_prefix" glib_save_datarootdir="$datarootdir" test "x$prefix" = xNONE && prefix=$ac_default_prefix test "x$exec_prefix" = xNONE && exec_prefix=$prefix datarootdir=`eval echo "${datarootdir}"` if test "x$CATOBJEXT" = "x.mo" ; then localedir=`eval echo "${libdir}/locale"` else localedir=`eval echo "${datadir}/locale"` fi prefix="$glib_save_prefix" exec_prefix="$glib_save_exec_prefix" datarootdir="$glib_save_datarootdir" cat >>confdefs.h <<_ACEOF #define LOCALEDIR "$localedir" _ACEOF for ac_header in locale.h do : ac_fn_c_check_header_mongrel "$LINENO" "locale.h" "ac_cv_header_locale_h" "$ac_includes_default" if test "x$ac_cv_header_locale_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LOCALE_H 1 _ACEOF fi done if test $ac_cv_header_locale_h = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LC_MESSAGES" >&5 $as_echo_n "checking for LC_MESSAGES... " >&6; } if ${am_cv_val_LC_MESSAGES+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return LC_MESSAGES ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_val_LC_MESSAGES=yes else am_cv_val_LC_MESSAGES=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_val_LC_MESSAGES" >&5 $as_echo "$am_cv_val_LC_MESSAGES" >&6; } if test $am_cv_val_LC_MESSAGES = yes; then $as_echo "#define HAVE_LC_MESSAGES 1" >>confdefs.h fi fi USE_NLS=yes gt_cv_have_gettext=no CATOBJEXT=NONE XGETTEXT=: INTLLIBS= ac_fn_c_check_header_mongrel "$LINENO" "libintl.h" "ac_cv_header_libintl_h" "$ac_includes_default" if test "x$ac_cv_header_libintl_h" = xyes; then : gt_cv_func_dgettext_libintl="no" libintl_extra_libs="" # # First check in libc # { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngettext in libc" >&5 $as_echo_n "checking for ngettext in libc... " >&6; } if ${gt_cv_func_ngettext_libc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return !ngettext ("","", 1) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_ngettext_libc=yes else gt_cv_func_ngettext_libc=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_ngettext_libc" >&5 $as_echo "$gt_cv_func_ngettext_libc" >&6; } if test "$gt_cv_func_ngettext_libc" = "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dgettext in libc" >&5 $as_echo_n "checking for dgettext in libc... " >&6; } if ${gt_cv_func_dgettext_libc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return !dgettext ("","") ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_dgettext_libc=yes else gt_cv_func_dgettext_libc=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_dgettext_libc" >&5 $as_echo "$gt_cv_func_dgettext_libc" >&6; } fi if test "$gt_cv_func_ngettext_libc" = "yes" ; then for ac_func in bind_textdomain_codeset do : ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_BIND_TEXTDOMAIN_CODESET 1 _ACEOF fi done fi # # If we don't have everything we want, check in libintl # if test "$gt_cv_func_dgettext_libc" != "yes" \ || test "$gt_cv_func_ngettext_libc" != "yes" \ || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bindtextdomain in -lintl" >&5 $as_echo_n "checking for bindtextdomain in -lintl... " >&6; } if ${ac_cv_lib_intl_bindtextdomain+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char bindtextdomain (); int main () { return bindtextdomain (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_bindtextdomain=yes else ac_cv_lib_intl_bindtextdomain=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_bindtextdomain" >&5 $as_echo "$ac_cv_lib_intl_bindtextdomain" >&6; } if test "x$ac_cv_lib_intl_bindtextdomain" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngettext in -lintl" >&5 $as_echo_n "checking for ngettext in -lintl... " >&6; } if ${ac_cv_lib_intl_ngettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ngettext (); int main () { return ngettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_ngettext=yes else ac_cv_lib_intl_ngettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_ngettext" >&5 $as_echo "$ac_cv_lib_intl_ngettext" >&6; } if test "x$ac_cv_lib_intl_ngettext" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dgettext in -lintl" >&5 $as_echo_n "checking for dgettext in -lintl... " >&6; } if ${ac_cv_lib_intl_dgettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dgettext (); int main () { return dgettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_dgettext=yes else ac_cv_lib_intl_dgettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_dgettext" >&5 $as_echo "$ac_cv_lib_intl_dgettext" >&6; } if test "x$ac_cv_lib_intl_dgettext" = xyes; then : gt_cv_func_dgettext_libintl=yes fi fi fi if test "$gt_cv_func_dgettext_libintl" != "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -liconv is needed to use gettext" >&5 $as_echo_n "checking if -liconv is needed to use gettext... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 $as_echo "" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngettext in -lintl" >&5 $as_echo_n "checking for ngettext in -lintl... " >&6; } if ${ac_cv_lib_intl_ngettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl -liconv $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ngettext (); int main () { return ngettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_ngettext=yes else ac_cv_lib_intl_ngettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_ngettext" >&5 $as_echo "$ac_cv_lib_intl_ngettext" >&6; } if test "x$ac_cv_lib_intl_ngettext" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dcgettext in -lintl" >&5 $as_echo_n "checking for dcgettext in -lintl... " >&6; } if ${ac_cv_lib_intl_dcgettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl -liconv $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dcgettext (); int main () { return dcgettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_dcgettext=yes else ac_cv_lib_intl_dcgettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_dcgettext" >&5 $as_echo "$ac_cv_lib_intl_dcgettext" >&6; } if test "x$ac_cv_lib_intl_dcgettext" = xyes; then : gt_cv_func_dgettext_libintl=yes libintl_extra_libs=-liconv else : fi else : fi fi # # If we found libintl, then check in it for bind_textdomain_codeset(); # we'll prefer libc if neither have bind_textdomain_codeset(), # and both have dgettext and ngettext # if test "$gt_cv_func_dgettext_libintl" = "yes" ; then glib_save_LIBS="$LIBS" LIBS="$LIBS -lintl $libintl_extra_libs" unset ac_cv_func_bind_textdomain_codeset for ac_func in bind_textdomain_codeset do : ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_BIND_TEXTDOMAIN_CODESET 1 _ACEOF fi done LIBS="$glib_save_LIBS" if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then gt_cv_func_dgettext_libc=no else if test "$gt_cv_func_dgettext_libc" = "yes" \ && test "$gt_cv_func_ngettext_libc" = "yes"; then gt_cv_func_dgettext_libintl=no fi fi fi fi if test "$gt_cv_func_dgettext_libc" = "yes" \ || test "$gt_cv_func_dgettext_libintl" = "yes"; then gt_cv_have_gettext=yes fi if test "$gt_cv_func_dgettext_libintl" = "yes"; then INTLLIBS="-lintl $libintl_extra_libs" fi if test "$gt_cv_have_gettext" = "yes"; then $as_echo "#define HAVE_GETTEXT 1" >>confdefs.h # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case "$MSGFMT" in /*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"; then ac_cv_path_MSGFMT="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT="no" ;; esac fi MSGFMT="$ac_cv_path_MSGFMT" if test "$MSGFMT" != "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 $as_echo "$MSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "$MSGFMT" != "no"; then glib_save_LIBS="$LIBS" LIBS="$LIBS $INTLLIBS" for ac_func in dcgettext do : ac_fn_c_check_func "$LINENO" "dcgettext" "ac_cv_func_dcgettext" if test "x$ac_cv_func_dcgettext" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DCGETTEXT 1 _ACEOF fi done MSGFMT_OPTS= { $as_echo "$as_me:${as_lineno-$LINENO}: checking if msgfmt accepts -c" >&5 $as_echo_n "checking if msgfmt accepts -c... " >&6; } cat >conftest.foo <<_ACEOF msgid "" msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Project-Id-Version: test 1.0\n" "PO-Revision-Date: 2007-02-15 12:01+0100\n" "Last-Translator: test \n" "Language-Team: C \n" "MIME-Version: 1.0\n" "Content-Transfer-Encoding: 8bit\n" _ACEOF if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$MSGFMT -c -o /dev/null conftest.foo"; } >&5 ($MSGFMT -c -o /dev/null conftest.foo) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then MSGFMT_OPTS=-c; { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } echo "$as_me: failed input was:" >&5 sed 's/^/| /' conftest.foo >&5 fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GMSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case $GMSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" ;; esac fi GMSGFMT=$ac_cv_path_GMSGFMT if test -n "$GMSGFMT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 $as_echo "$GMSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_XGETTEXT+:} false; then : $as_echo_n "(cached) " >&6 else case "$XGETTEXT" in /*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"; then ac_cv_path_XGETTEXT="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" ;; esac fi XGETTEXT="$ac_cv_path_XGETTEXT" if test "$XGETTEXT" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 $as_echo "$XGETTEXT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { extern int _nl_msg_cat_cntr; return _nl_msg_cat_cntr ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : CATOBJEXT=.gmo DATADIRNAME=share else case $host in *-*-solaris*) ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : CATOBJEXT=.gmo DATADIRNAME=share else CATOBJEXT=.mo DATADIRNAME=lib fi ;; *-*-openbsd*) CATOBJEXT=.mo DATADIRNAME=share ;; *) CATOBJEXT=.mo DATADIRNAME=lib ;; esac fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$glib_save_LIBS" INSTOBJEXT=.mo else gt_cv_have_gettext=no fi fi fi if test "$gt_cv_have_gettext" = "yes" ; then $as_echo "#define ENABLE_NLS 1" >>confdefs.h fi if test "$XGETTEXT" != ":"; then if $XGETTEXT --omit-header /dev/null 2> /dev/null; then : ; else { $as_echo "$as_me:${as_lineno-$LINENO}: result: found xgettext program is not GNU xgettext; ignore it" >&5 $as_echo "found xgettext program is not GNU xgettext; ignore it" >&6; } XGETTEXT=":" fi fi # We need to process the po/ directory. POSUB=po ac_config_commands="$ac_config_commands default-2" for lang in $ALL_LINGUAS; do GMOFILES="$GMOFILES $lang.gmo" POFILES="$POFILES $lang.po" done if test "$gt_cv_have_gettext" = "yes"; then if test "x$ALL_LINGUAS" = "x"; then LINGUAS= else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for catalogs to be installed" >&5 $as_echo_n "checking for catalogs to be installed... " >&6; } NEW_LINGUAS= for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "${LINGUAS-%UNSET%}"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then NEW_LINGUAS="$NEW_LINGUAS $presentlang" fi done LINGUAS=$NEW_LINGUAS { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LINGUAS" >&5 $as_echo "$LINGUAS" >&6; } fi if test -n "$LINGUAS"; then for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done fi fi MKINSTALLDIRS= if test -n "$ac_aux_dir"; then MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" fi if test -z "$MKINSTALLDIRS"; then MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" fi test -d po || mkdir po if test "x$srcdir" != "x."; then if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then posrcprefix="$srcdir/" else posrcprefix="../$srcdir/" fi else posrcprefix="../" fi rm -f po/POTFILES sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \ < $srcdir/po/POTFILES.in > po/POTFILES { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5 $as_echo_n "checking whether NLS is requested... " >&6; } # Check whether --enable-nls was given. if test "${enable_nls+set}" = set; then : enableval=$enable_nls; USE_NLS=$enableval else USE_NLS=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 $as_echo "$USE_NLS" >&6; } case "$am__api_version" in 1.01234) as_fn_error $? "Automake 1.5 or newer is required to use intltool" "$LINENO" 5 ;; *) ;; esac INTLTOOL_REQUIRED_VERSION_AS_INT=`echo 0.35.0 | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` INTLTOOL_APPLIED_VERSION=`intltool-update --version | head -1 | cut -d" " -f3` INTLTOOL_APPLIED_VERSION_AS_INT=`echo $INTLTOOL_APPLIED_VERSION | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` if test -n "0.35.0"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for intltool >= 0.35.0" >&5 $as_echo_n "checking for intltool >= 0.35.0... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_APPLIED_VERSION found" >&5 $as_echo "$INTLTOOL_APPLIED_VERSION found" >&6; } test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge "$INTLTOOL_REQUIRED_VERSION_AS_INT" || as_fn_error $? "Your intltool is too old. You need intltool 0.35.0 or later." "$LINENO" 5 fi # Extract the first word of "intltool-update", so it can be a program name with args. set dummy intltool-update; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_INTLTOOL_UPDATE+:} false; then : $as_echo_n "(cached) " >&6 else case $INTLTOOL_UPDATE in [\\/]* | ?:[\\/]*) ac_cv_path_INTLTOOL_UPDATE="$INTLTOOL_UPDATE" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_INTLTOOL_UPDATE="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi INTLTOOL_UPDATE=$ac_cv_path_INTLTOOL_UPDATE if test -n "$INTLTOOL_UPDATE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_UPDATE" >&5 $as_echo "$INTLTOOL_UPDATE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "intltool-merge", so it can be a program name with args. set dummy intltool-merge; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_INTLTOOL_MERGE+:} false; then : $as_echo_n "(cached) " >&6 else case $INTLTOOL_MERGE in [\\/]* | ?:[\\/]*) ac_cv_path_INTLTOOL_MERGE="$INTLTOOL_MERGE" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_INTLTOOL_MERGE="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi INTLTOOL_MERGE=$ac_cv_path_INTLTOOL_MERGE if test -n "$INTLTOOL_MERGE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_MERGE" >&5 $as_echo "$INTLTOOL_MERGE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "intltool-extract", so it can be a program name with args. set dummy intltool-extract; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_INTLTOOL_EXTRACT+:} false; then : $as_echo_n "(cached) " >&6 else case $INTLTOOL_EXTRACT in [\\/]* | ?:[\\/]*) ac_cv_path_INTLTOOL_EXTRACT="$INTLTOOL_EXTRACT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_INTLTOOL_EXTRACT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi INTLTOOL_EXTRACT=$ac_cv_path_INTLTOOL_EXTRACT if test -n "$INTLTOOL_EXTRACT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_EXTRACT" >&5 $as_echo "$INTLTOOL_EXTRACT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$INTLTOOL_UPDATE" -o -z "$INTLTOOL_MERGE" -o -z "$INTLTOOL_EXTRACT"; then as_fn_error $? "The intltool scripts were not found. Please install intltool." "$LINENO" 5 fi if test -z "$AM_DEFAULT_VERBOSITY"; then AM_DEFAULT_VERBOSITY=1 fi INTLTOOL_V_MERGE='$(INTLTOOL__v_MERGE_$(V))' INTLTOOL__v_MERGE_='$(INTLTOOL__v_MERGE_$(AM_DEFAULT_VERBOSITY))' INTLTOOL__v_MERGE_0='@echo " ITMRG " $@;' INTLTOOL_V_MERGE_OPTIONS='$(intltool__v_merge_options_$(V))' intltool__v_merge_options_='$(intltool__v_merge_options_$(AM_DEFAULT_VERBOSITY))' intltool__v_merge_options_0='-q' INTLTOOL_DESKTOP_RULE='%.desktop: %.desktop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_DIRECTORY_RULE='%.directory: %.directory.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_KEYS_RULE='%.keys: %.keys.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -k -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_PROP_RULE='%.prop: %.prop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_OAF_RULE='%.oaf: %.oaf.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -o -p $(top_srcdir)/po $< $@' INTLTOOL_PONG_RULE='%.pong: %.pong.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SERVER_RULE='%.server: %.server.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -o -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SHEET_RULE='%.sheet: %.sheet.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SOUNDLIST_RULE='%.soundlist: %.soundlist.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_UI_RULE='%.ui: %.ui.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_XML_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' if test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge 5000; then INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u --no-translations $< $@' else INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; $(INTLTOOL_V_MERGE)_it_tmp_dir=tmp.intltool.$$RANDOM && mkdir $$_it_tmp_dir && LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u $$_it_tmp_dir $< $@ && rmdir $$_it_tmp_dir' fi INTLTOOL_XAM_RULE='%.xam: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_KBD_RULE='%.kbd: %.kbd.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -m -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_CAVES_RULE='%.caves: %.caves.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SCHEMAS_RULE='%.schemas: %.schemas.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -s -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_THEME_RULE='%.theme: %.theme.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SERVICE_RULE='%.service: %.service.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_POLICY_RULE='%.policy: %.policy.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' # Check the gettext tools to make sure they are GNU # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_XGETTEXT+:} false; then : $as_echo_n "(cached) " >&6 else case $XGETTEXT in [\\/]* | ?:[\\/]*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_XGETTEXT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi XGETTEXT=$ac_cv_path_XGETTEXT if test -n "$XGETTEXT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 $as_echo "$XGETTEXT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "msgmerge", so it can be a program name with args. set dummy msgmerge; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MSGMERGE+:} false; then : $as_echo_n "(cached) " >&6 else case $MSGMERGE in [\\/]* | ?:[\\/]*) ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_MSGMERGE="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi MSGMERGE=$ac_cv_path_MSGMERGE if test -n "$MSGMERGE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5 $as_echo "$MSGMERGE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case $MSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_MSGFMT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi MSGFMT=$ac_cv_path_MSGFMT if test -n "$MSGFMT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 $as_echo "$MSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GMSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case $GMSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" ;; esac fi GMSGFMT=$ac_cv_path_GMSGFMT if test -n "$GMSGFMT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 $as_echo "$GMSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$XGETTEXT" -o -z "$MSGMERGE" -o -z "$MSGFMT"; then as_fn_error $? "GNU gettext tools not found; required for intltool" "$LINENO" 5 fi xgversion="`$XGETTEXT --version|grep '(GNU ' 2> /dev/null`" mmversion="`$MSGMERGE --version|grep '(GNU ' 2> /dev/null`" mfversion="`$MSGFMT --version|grep '(GNU ' 2> /dev/null`" if test -z "$xgversion" -o -z "$mmversion" -o -z "$mfversion"; then as_fn_error $? "GNU gettext tools not found; required for intltool" "$LINENO" 5 fi # Extract the first word of "perl", so it can be a program name with args. set dummy perl; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_INTLTOOL_PERL+:} false; then : $as_echo_n "(cached) " >&6 else case $INTLTOOL_PERL in [\\/]* | ?:[\\/]*) ac_cv_path_INTLTOOL_PERL="$INTLTOOL_PERL" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_INTLTOOL_PERL="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi INTLTOOL_PERL=$ac_cv_path_INTLTOOL_PERL if test -n "$INTLTOOL_PERL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_PERL" >&5 $as_echo "$INTLTOOL_PERL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$INTLTOOL_PERL"; then as_fn_error $? "perl not found" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for perl >= 5.8.1" >&5 $as_echo_n "checking for perl >= 5.8.1... " >&6; } $INTLTOOL_PERL -e "use 5.8.1;" > /dev/null 2>&1 if test $? -ne 0; then as_fn_error $? "perl 5.8.1 is required for intltool" "$LINENO" 5 else IT_PERL_VERSION=`$INTLTOOL_PERL -e "printf '%vd', $^V"` { $as_echo "$as_me:${as_lineno-$LINENO}: result: $IT_PERL_VERSION" >&5 $as_echo "$IT_PERL_VERSION" >&6; } fi if test "x" != "xno-xml"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XML::Parser" >&5 $as_echo_n "checking for XML::Parser... " >&6; } if `$INTLTOOL_PERL -e "require XML::Parser" 2>/dev/null`; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } else as_fn_error $? "XML::Parser perl module is required for intltool" "$LINENO" 5 fi fi # Substitute ALL_LINGUAS so we can use it in po/Makefile # Set DATADIRNAME correctly if it is not set yet # (copied from glib-gettext.m4) if test -z "$DATADIRNAME"; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { extern int _nl_msg_cat_cntr; return _nl_msg_cat_cntr ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : DATADIRNAME=share else case $host in *-*-solaris*) ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : DATADIRNAME=share else DATADIRNAME=lib fi ;; *) DATADIRNAME=lib ;; esac fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CONFIG_STATUS_DEPENDENCIES='$(top_srcdir)/po/LINGUAS' ACLOCAL_AMFLAGS="\${ACLOCAL_FLAGS}" # Checks for header files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi for ac_header in malloc.h stdlib.h string.h sys/param.h sys/types.h unistd.h math.h utime.h X11/Xlib.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done # Checks for typedefs, structures, and compiler characteristics. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 $as_echo_n "checking for an ANSI C-conforming const... " >&6; } if ${ac_cv_c_const+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __cplusplus /* Ultrix mips cc rejects this sort of thing. */ typedef int charset[2]; const charset cs = { 0, 0 }; /* SunOS 4.1.1 cc rejects this. */ char const *const *pcpcc; char **ppc; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; pcpcc = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++pcpcc; ppc = (char**) pcpcc; pcpcc = (char const *const *) ppc; { /* SCO 3.2v4 cc rejects this sort of thing. */ char tx; char *t = &tx; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; if (s) return 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; } bx; struct s *b = &bx; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; if (!foo) return 0; } return !cs[0] && !zero.x; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_const=yes else ac_cv_c_const=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 $as_echo "$ac_cv_c_const" >&6; } if test $ac_cv_c_const = no; then $as_echo "#define const /**/" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "mode_t" "ac_cv_type_mode_t" "$ac_includes_default" if test "x$ac_cv_type_mode_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define mode_t int _ACEOF fi # Checks for library functions or symbols { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether lstat correctly handles trailing slash" >&5 $as_echo_n "checking whether lstat correctly handles trailing slash... " >&6; } if ${ac_cv_func_lstat_dereferences_slashed_symlink+:} false; then : $as_echo_n "(cached) " >&6 else rm -f conftest.sym conftest.file echo >conftest.file if test "$as_ln_s" = "ln -s" && ln -s conftest.file conftest.sym; then if test "$cross_compiling" = yes; then : ac_cv_func_lstat_dereferences_slashed_symlink=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { struct stat sbuf; /* Linux will dereference the symlink and fail, as required by POSIX. That is better in the sense that it means we will not have to compile and use the lstat wrapper. */ return lstat ("conftest.sym/", &sbuf) == 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_lstat_dereferences_slashed_symlink=yes else ac_cv_func_lstat_dereferences_slashed_symlink=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi else # If the `ln -s' command failed, then we probably don't even # have an lstat function. ac_cv_func_lstat_dereferences_slashed_symlink=no fi rm -f conftest.sym conftest.file fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_lstat_dereferences_slashed_symlink" >&5 $as_echo "$ac_cv_func_lstat_dereferences_slashed_symlink" >&6; } test $ac_cv_func_lstat_dereferences_slashed_symlink = yes && cat >>confdefs.h <<_ACEOF #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 _ACEOF if test "x$ac_cv_func_lstat_dereferences_slashed_symlink" = xno; then case " $LIBOBJS " in *" lstat.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS lstat.$ac_objext" ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stat accepts an empty string" >&5 $as_echo_n "checking whether stat accepts an empty string... " >&6; } if ${ac_cv_func_stat_empty_string_bug+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_stat_empty_string_bug=yes else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { struct stat sbuf; return stat ("", &sbuf) == 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_stat_empty_string_bug=no else ac_cv_func_stat_empty_string_bug=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_stat_empty_string_bug" >&5 $as_echo "$ac_cv_func_stat_empty_string_bug" >&6; } if test $ac_cv_func_stat_empty_string_bug = yes; then case " $LIBOBJS " in *" stat.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS stat.$ac_objext" ;; esac cat >>confdefs.h <<_ACEOF #define HAVE_STAT_EMPTY_STRING_BUG 1 _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working strtod" >&5 $as_echo_n "checking for working strtod... " >&6; } if ${ac_cv_func_strtod+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_strtod=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default #ifndef strtod double strtod (); #endif int main() { { /* Some versions of Linux strtod mis-parse strings with leading '+'. */ char *string = " +69"; char *term; double value; value = strtod (string, &term); if (value != 69 || term != (string + 4)) return 1; } { /* Under Solaris 2.4, strtod returns the wrong value for the terminating character under some conditions. */ char *string = "NaN"; char *term; strtod (string, &term); if (term != string && *(term - 1) == 0) return 1; } return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_strtod=yes else ac_cv_func_strtod=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_strtod" >&5 $as_echo "$ac_cv_func_strtod" >&6; } if test $ac_cv_func_strtod = no; then case " $LIBOBJS " in *" strtod.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strtod.$ac_objext" ;; esac ac_fn_c_check_func "$LINENO" "pow" "ac_cv_func_pow" if test "x$ac_cv_func_pow" = xyes; then : fi if test $ac_cv_func_pow = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pow in -lm" >&5 $as_echo_n "checking for pow in -lm... " >&6; } if ${ac_cv_lib_m_pow+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pow (); int main () { return pow (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_m_pow=yes else ac_cv_lib_m_pow=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_pow" >&5 $as_echo "$ac_cv_lib_m_pow" >&6; } if test "x$ac_cv_lib_m_pow" = xyes; then : POW_LIB=-lm else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot find library containing definition of pow" >&5 $as_echo "$as_me: WARNING: cannot find library containing definition of pow" >&2;} fi fi fi for ac_func in floor memset mkdtemp pow realpath sqrt strcasecmp strchr strdup strncasecmp strtol strtoul do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tan in -lm" >&5 $as_echo_n "checking for tan in -lm... " >&6; } if ${ac_cv_lib_m_tan+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char tan (); int main () { return tan (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_m_tan=yes else ac_cv_lib_m_tan=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_tan" >&5 $as_echo "$ac_cv_lib_m_tan" >&6; } if test "x$ac_cv_lib_m_tan" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBM 1 _ACEOF LIBS="-lm $LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inflate in -lz" >&5 $as_echo_n "checking for inflate in -lz... " >&6; } if ${ac_cv_lib_z_inflate+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lz $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char inflate (); int main () { return inflate (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_z_inflate=yes else ac_cv_lib_z_inflate=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_inflate" >&5 $as_echo "$ac_cv_lib_z_inflate" >&6; } if test "x$ac_cv_lib_z_inflate" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBZ 1 _ACEOF LIBS="-lz $LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XSetErrorHandler in -lX11" >&5 $as_echo_n "checking for XSetErrorHandler in -lX11... " >&6; } if ${ac_cv_lib_X11_XSetErrorHandler+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char XSetErrorHandler (); int main () { return XSetErrorHandler (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_X11_XSetErrorHandler=yes else ac_cv_lib_X11_XSetErrorHandler=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_X11_XSetErrorHandler" >&5 $as_echo "$ac_cv_lib_X11_XSetErrorHandler" >&6; } if test "x$ac_cv_lib_X11_XSetErrorHandler" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBX11 1 _ACEOF LIBS="-lX11 $LIBS" fi # Expat # Check whether --with-expat was given. if test "${with_expat+set}" = set; then : withval=$with_expat; else with_expat=yes fi if test $with_expat != no; then EXPAT_INSTALLED_TRUE= EXPAT_INSTALLED_FALSE='#' else EXPAT_INSTALLED_TRUE='#' EXPAT_INSTALLED_FALSE= fi EXPAT_CFLAGS= EXPAT_LIBS= if test $with_expat != no; then if test $with_expat != yes; then EXPAT_CFLAGS="-I$with_expat/include" EXPAT_LIBS="-L$with_expat/lib" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XML_ParserCreate in -lexpat" >&5 $as_echo_n "checking for XML_ParserCreate in -lexpat... " >&6; } if ${ac_cv_lib_expat_XML_ParserCreate+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lexpat "$EXPAT_LIBS" $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char XML_ParserCreate (); int main () { return XML_ParserCreate (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_expat_XML_ParserCreate=yes else ac_cv_lib_expat_XML_ParserCreate=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_expat_XML_ParserCreate" >&5 $as_echo "$ac_cv_lib_expat_XML_ParserCreate" >&6; } if test "x$ac_cv_lib_expat_XML_ParserCreate" = xyes; then : EXPAT_LIBS="$EXPAT_LIBS -lexpat" expat_found=yes else expat_found=no fi if test $expat_found = no; then as_fn_error $? "Could not find the Expat library" "$LINENO" 5 fi expat_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $EXPAT_CFLAGS" for ac_header in expat.h do : ac_fn_c_check_header_mongrel "$LINENO" "expat.h" "ac_cv_header_expat_h" "$ac_includes_default" if test "x$ac_cv_header_expat_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_EXPAT_H 1 _ACEOF else expat_found=no fi done if test $expat_found = no; then as_fn_error $? "Could not find expat.h" "$LINENO" 5 fi CFLAGS="$expat_save_CFLAGS" fi # Curl # Check whether --with-libcurl was given. if test "${with_libcurl+set}" = set; then : withval=$with_libcurl; _libcurl_with=$withval else _libcurl_with=yes fi if test "$_libcurl_with" != "no" ; then for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done _libcurl_version_parse="eval $AWK '{split(\$NF,A,\".\"); X=256*256*A[1]+256*A[2]+A[3]; print X;}'" _libcurl_try_link=yes if test -d "$_libcurl_with" ; then LIBCURL_CPPFLAGS="-I$withval/include" _libcurl_ldflags="-L$withval/lib" # Extract the first word of ""$withval/bin/curl-config"", so it can be a program name with args. set dummy "$withval/bin/curl-config"; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path__libcurl_config+:} false; then : $as_echo_n "(cached) " >&6 else case $_libcurl_config in [\\/]* | ?:[\\/]*) ac_cv_path__libcurl_config="$_libcurl_config" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path__libcurl_config="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi _libcurl_config=$ac_cv_path__libcurl_config if test -n "$_libcurl_config"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_libcurl_config" >&5 $as_echo "$_libcurl_config" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else # Extract the first word of "curl-config", so it can be a program name with args. set dummy curl-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path__libcurl_config+:} false; then : $as_echo_n "(cached) " >&6 else case $_libcurl_config in [\\/]* | ?:[\\/]*) ac_cv_path__libcurl_config="$_libcurl_config" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path__libcurl_config="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi _libcurl_config=$ac_cv_path__libcurl_config if test -n "$_libcurl_config"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_libcurl_config" >&5 $as_echo "$_libcurl_config" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test x$_libcurl_config != "x" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the version of libcurl" >&5 $as_echo_n "checking for the version of libcurl... " >&6; } if ${libcurl_cv_lib_curl_version+:} false; then : $as_echo_n "(cached) " >&6 else libcurl_cv_lib_curl_version=`$_libcurl_config --version | $AWK '{print $2}'` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libcurl_cv_lib_curl_version" >&5 $as_echo "$libcurl_cv_lib_curl_version" >&6; } _libcurl_version=`echo $libcurl_cv_lib_curl_version | $_libcurl_version_parse` _libcurl_wanted=`echo 0 | $_libcurl_version_parse` if test $_libcurl_wanted -gt 0 ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libcurl >= version " >&5 $as_echo_n "checking for libcurl >= version ... " >&6; } if ${libcurl_cv_lib_version_ok+:} false; then : $as_echo_n "(cached) " >&6 else if test $_libcurl_version -ge $_libcurl_wanted ; then libcurl_cv_lib_version_ok=yes else libcurl_cv_lib_version_ok=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libcurl_cv_lib_version_ok" >&5 $as_echo "$libcurl_cv_lib_version_ok" >&6; } fi if test $_libcurl_wanted -eq 0 || test x$libcurl_cv_lib_version_ok = xyes ; then if test x"$LIBCURL_CPPFLAGS" = "x" ; then LIBCURL_CPPFLAGS=`$_libcurl_config --cflags` fi if test x"$LIBCURL" = "x" ; then LIBCURL=`$_libcurl_config --libs` # This is so silly, but Apple actually has a bug in their # curl-config script. Fixed in Tiger, but there are still # lots of Panther installs around. case "${host}" in powerpc-apple-darwin7*) LIBCURL=`echo $LIBCURL | sed -e 's|-arch i386||g'` ;; esac fi # All curl-config scripts support --feature _libcurl_features=`$_libcurl_config --feature` # Is it modern enough to have --protocols? (7.12.4) if test $_libcurl_version -ge 461828 ; then _libcurl_protocols=`$_libcurl_config --protocols` fi else _libcurl_try_link=no fi unset _libcurl_wanted fi if test $_libcurl_try_link = yes ; then # we didn't find curl-config, so let's see if the user-supplied # link line (or failing that, "-lcurl") is enough. LIBCURL=${LIBCURL-"$_libcurl_ldflags -lcurl"} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether libcurl is usable" >&5 $as_echo_n "checking whether libcurl is usable... " >&6; } if ${libcurl_cv_lib_curl_usable+:} false; then : $as_echo_n "(cached) " >&6 else _libcurl_save_cppflags=$CPPFLAGS CPPFLAGS="$LIBCURL_CPPFLAGS $CPPFLAGS" _libcurl_save_libs=$LIBS LIBS="$LIBCURL $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { /* Try and use a few common options to force a failure if we are missing symbols or can't link. */ int x; curl_easy_setopt(NULL,CURLOPT_URL,NULL); x=CURL_ERROR_SIZE; x=CURLOPT_WRITEFUNCTION; x=CURLOPT_FILE; x=CURLOPT_ERRORBUFFER; x=CURLOPT_STDERR; x=CURLOPT_VERBOSE; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : libcurl_cv_lib_curl_usable=yes else libcurl_cv_lib_curl_usable=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CPPFLAGS=$_libcurl_save_cppflags LIBS=$_libcurl_save_libs unset _libcurl_save_cppflags unset _libcurl_save_libs fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libcurl_cv_lib_curl_usable" >&5 $as_echo "$libcurl_cv_lib_curl_usable" >&6; } if test $libcurl_cv_lib_curl_usable = yes ; then # Does curl_free() exist in this version of libcurl? # If not, fake it with free() _libcurl_save_cppflags=$CPPFLAGS CPPFLAGS="$CPPFLAGS $LIBCURL_CPPFLAGS" _libcurl_save_libs=$LIBS LIBS="$LIBS $LIBCURL" ac_fn_c_check_func "$LINENO" "curl_free" "ac_cv_func_curl_free" if test "x$ac_cv_func_curl_free" = xyes; then : else $as_echo "#define curl_free free" >>confdefs.h fi CPPFLAGS=$_libcurl_save_cppflags LIBS=$_libcurl_save_libs unset _libcurl_save_cppflags unset _libcurl_save_libs $as_echo "#define HAVE_LIBCURL 1" >>confdefs.h for _libcurl_feature in $_libcurl_features ; do cat >>confdefs.h <<_ACEOF #define `$as_echo "libcurl_feature_$_libcurl_feature" | $as_tr_cpp` 1 _ACEOF eval `$as_echo "libcurl_feature_$_libcurl_feature" | $as_tr_sh`=yes done if test "x$_libcurl_protocols" = "x" ; then # We don't have --protocols, so just assume that all # protocols are available _libcurl_protocols="HTTP FTP FILE TELNET LDAP DICT" if test x$libcurl_feature_SSL = xyes ; then _libcurl_protocols="$_libcurl_protocols HTTPS" # FTPS wasn't standards-compliant until version # 7.11.0 if test $_libcurl_version -ge 461568; then _libcurl_protocols="$_libcurl_protocols FTPS" fi fi fi for _libcurl_protocol in $_libcurl_protocols ; do cat >>confdefs.h <<_ACEOF #define `$as_echo "libcurl_protocol_$_libcurl_protocol" | $as_tr_cpp` 1 _ACEOF eval `$as_echo "libcurl_protocol_$_libcurl_protocol" | $as_tr_sh`=yes done else unset LIBCURL unset LIBCURL_CPPFLAGS fi fi unset _libcurl_try_link unset _libcurl_version_parse unset _libcurl_config unset _libcurl_feature unset _libcurl_features unset _libcurl_protocol unset _libcurl_protocols unset _libcurl_version unset _libcurl_ldflags fi if test x$_libcurl_with = xno || test x$libcurl_cv_lib_curl_usable != xyes ; then # This is the IF-NO path as_fn_error $? "libcurl is needed but not found" "$LINENO" 5 else # This is the IF-YES path : fi unset _libcurl_with # gdk-pixbuf-csource # Extract the first word of "gdk-pixbuf-csource", so it can be a program name with args. set dummy gdk-pixbuf-csource; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_GDK_PIXBUF_CSOURCE+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$GDK_PIXBUF_CSOURCE"; then ac_cv_prog_GDK_PIXBUF_CSOURCE="$GDK_PIXBUF_CSOURCE" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_GDK_PIXBUF_CSOURCE="yes" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi GDK_PIXBUF_CSOURCE=$ac_cv_prog_GDK_PIXBUF_CSOURCE if test -n "$GDK_PIXBUF_CSOURCE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GDK_PIXBUF_CSOURCE" >&5 $as_echo "$GDK_PIXBUF_CSOURCE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$GDK_PIXBUF_CSOURCE" != "xyes" then as_fn_error $? "gdk-pixbuf-csource is needed but not found" "$LINENO" 5 fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PACKAGE" >&5 $as_echo_n "checking for PACKAGE... " >&6; } if test -n "$PACKAGE_CFLAGS"; then pkg_cv_PACKAGE_CFLAGS="$PACKAGE_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \" glib-2.0 >= 2.14 gthread-2.0 >= 2.2 gtk+-2.0 >= 2.12 gio-2.0 >= 2.12 \""; } >&5 ($PKG_CONFIG --exists --print-errors " glib-2.0 >= 2.14 gthread-2.0 >= 2.2 gtk+-2.0 >= 2.12 gio-2.0 >= 2.12 ") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_PACKAGE_CFLAGS=`$PKG_CONFIG --cflags " glib-2.0 >= 2.14 gthread-2.0 >= 2.2 gtk+-2.0 >= 2.12 gio-2.0 >= 2.12 " 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$PACKAGE_LIBS"; then pkg_cv_PACKAGE_LIBS="$PACKAGE_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \" glib-2.0 >= 2.14 gthread-2.0 >= 2.2 gtk+-2.0 >= 2.12 gio-2.0 >= 2.12 \""; } >&5 ($PKG_CONFIG --exists --print-errors " glib-2.0 >= 2.14 gthread-2.0 >= 2.2 gtk+-2.0 >= 2.12 gio-2.0 >= 2.12 ") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_PACKAGE_LIBS=`$PKG_CONFIG --libs " glib-2.0 >= 2.14 gthread-2.0 >= 2.2 gtk+-2.0 >= 2.12 gio-2.0 >= 2.12 " 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then PACKAGE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs " glib-2.0 >= 2.14 gthread-2.0 >= 2.2 gtk+-2.0 >= 2.12 gio-2.0 >= 2.12 " 2>&1` else PACKAGE_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs " glib-2.0 >= 2.14 gthread-2.0 >= 2.2 gtk+-2.0 >= 2.12 gio-2.0 >= 2.12 " 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$PACKAGE_PKG_ERRORS" >&5 as_fn_error $? "Package requirements ( glib-2.0 >= 2.14 gthread-2.0 >= 2.2 gtk+-2.0 >= 2.12 gio-2.0 >= 2.12 ) were not met: $PACKAGE_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables PACKAGE_CFLAGS and PACKAGE_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables PACKAGE_CFLAGS and PACKAGE_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else PACKAGE_CFLAGS=$pkg_cv_PACKAGE_CFLAGS PACKAGE_LIBS=$pkg_cv_PACKAGE_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 $as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 $as_echo "no, using $LN_S" >&6; } fi if test -z "$AM_DEFAULT_VERBOSITY"; then AM_DEFAULT_VERBOSITY=1 fi gdu_cv_version_required=0.3.2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking gnome-doc-utils >= $gdu_cv_version_required" >&5 $as_echo_n "checking gnome-doc-utils >= $gdu_cv_version_required... " >&6; } if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gnome-doc-utils >= \$gdu_cv_version_required\""; } >&5 ($PKG_CONFIG --exists --print-errors "gnome-doc-utils >= $gdu_cv_version_required") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then gdu_cv_have_gdu=yes else gdu_cv_have_gdu=no fi if test "$gdu_cv_have_gdu" = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } : else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } as_fn_error $? "gnome-doc-utils >= $gdu_cv_version_required not found" "$LINENO" 5 fi # Check whether --with-help-dir was given. if test "${with_help_dir+set}" = set; then : withval=$with_help_dir; else with_help_dir='${datadir}/gnome/help' fi HELP_DIR="$with_help_dir" # Check whether --with-omf-dir was given. if test "${with_omf_dir+set}" = set; then : withval=$with_omf_dir; else with_omf_dir='${datadir}/omf' fi OMF_DIR="$with_omf_dir" # Check whether --with-help-formats was given. if test "${with_help_formats+set}" = set; then : withval=$with_help_formats; else with_help_formats='' fi DOC_USER_FORMATS="$with_help_formats" # Check whether --enable-scrollkeeper was given. if test "${enable_scrollkeeper+set}" = set; then : enableval=$enable_scrollkeeper; else enable_scrollkeeper=yes fi if test "$gdu_cv_have_gdu" = "yes" -a "$enable_scrollkeeper" = "yes"; then ENABLE_SK_TRUE= ENABLE_SK_FALSE='#' else ENABLE_SK_TRUE='#' ENABLE_SK_FALSE= fi DISTCHECK_CONFIGURE_FLAGS="--disable-scrollkeeper $DISTCHECK_CONFIGURE_FLAGS" if test "$gdu_cv_have_gdu" = "yes"; then HAVE_GNOME_DOC_UTILS_TRUE= HAVE_GNOME_DOC_UTILS_FALSE='#' else HAVE_GNOME_DOC_UTILS_TRUE='#' HAVE_GNOME_DOC_UTILS_FALSE= fi # Check whether --enable-deprecations was given. if test "${enable_deprecations+set}" = set; then : enableval=$enable_deprecations; ac_cv_enable_deprecations=$enableval else ac_cv_enable_deprecations=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable deprecated features" >&5 $as_echo_n "checking whether to enable deprecated features... " >&6; } if ${ac_cv_enable_deprecations+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_enable_deprecations=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_enable_deprecations" >&5 $as_echo "$ac_cv_enable_deprecations" >&6; } if test "x$ac_cv_enable_deprecations" = "xyes"; then DISABLE_DEPRECATED_CFLAGS="\ -DG_DISABLE_SINGLE_INCLUDES \ -DGSEAL_ENABLE \ -DG_DISABLE_DEPRECATED \ -DGDK_DISABLE_DEPRECATED \ -DGDK_PIXBUF_DISABLE_DEPRECATED \ -DGTK_DISABLE_SINGLE_INCLUDES \ -DGTK_DISABLE_DEPRECATED" CPPFLAGS="$CPPFLAGS $DISABLE_DEPRECATED_CFLAGS" fi # Options # Check whether --enable-alphabetized-trw was given. if test "${enable_alphabetized_trw+set}" = set; then : enableval=$enable_alphabetized_trw; ac_cv_enable_alpha_trw=$enableval else ac_cv_enable_alpha_trw=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable alphabetized track & waypoint" >&5 $as_echo_n "checking whether to enable alphabetized track & waypoint... " >&6; } if ${ac_cv_enable_alpha_trw+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_enable_alpha_trw=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_enable_alpha_trw" >&5 $as_echo "$ac_cv_enable_alpha_trw" >&6; } case $ac_cv_enable_alpha_trw in yes) $as_echo "#define VIK_CONFIG_ALPHABETIZED_TRW /**/" >>confdefs.h ;; esac # Check whether --enable-bing was given. if test "${enable_bing+set}" = set; then : enableval=$enable_bing; ac_cv_enable_bing=$enableval else ac_cv_enable_bing=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable Bing stuff" >&5 $as_echo_n "checking whether to enable Bing stuff... " >&6; } if ${ac_cv_enable_bing+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_enable_bing=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_enable_bing" >&5 $as_echo "$ac_cv_enable_bing" >&6; } case $ac_cv_enable_bing in yes) $as_echo "#define VIK_CONFIG_BING /**/" >>confdefs.h ;; esac if test x$ac_cv_enable_bing = xyes; then BING_TRUE= BING_FALSE='#' else BING_TRUE='#' BING_FALSE= fi # Check whether --enable-google was given. if test "${enable_google+set}" = set; then : enableval=$enable_google; ac_cv_enable_google=$enableval else ac_cv_enable_google=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable Google stuff" >&5 $as_echo_n "checking whether to enable Google stuff... " >&6; } if ${ac_cv_enable_google+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_enable_google=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_enable_google" >&5 $as_echo "$ac_cv_enable_google" >&6; } case $ac_cv_enable_google in yes) $as_echo "#define VIK_CONFIG_GOOGLE /**/" >>confdefs.h ;; esac if test x$ac_cv_enable_google = xyes; then GOOGLE_TRUE= GOOGLE_FALSE='#' else GOOGLE_TRUE='#' GOOGLE_FALSE= fi # Check whether --enable-terraserver was given. if test "${enable_terraserver+set}" = set; then : enableval=$enable_terraserver; ac_cv_enable_terraserver=$enableval else ac_cv_enable_terraserver=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable Terraserver stuff" >&5 $as_echo_n "checking whether to enable Terraserver stuff... " >&6; } if ${ac_cv_enable_terraserver+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_enable_terraserver=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_enable_terraserver" >&5 $as_echo "$ac_cv_enable_terraserver" >&6; } case $ac_cv_enable_terraserver in yes) $as_echo "#define VIK_CONFIG_TERRASERVER /**/" >>confdefs.h ;; esac if test x$ac_cv_enable_terraserver = xyes; then TERRASERVER_TRUE= TERRASERVER_FALSE='#' else TERRASERVER_TRUE='#' TERRASERVER_FALSE= fi # Check whether --enable-expedia was given. if test "${enable_expedia+set}" = set; then : enableval=$enable_expedia; ac_cv_enable_expedia=$enableval else ac_cv_enable_expedia=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable Expedia stuff" >&5 $as_echo_n "checking whether to enable Expedia stuff... " >&6; } if ${ac_cv_enable_expedia+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_enable_expedia=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_enable_expedia" >&5 $as_echo "$ac_cv_enable_expedia" >&6; } case $ac_cv_enable_expedia in yes) $as_echo "#define VIK_CONFIG_EXPEDIA /**/" >>confdefs.h ;; esac if test x$ac_cv_enable_expedia = xyes; then EXPEDIA_TRUE= EXPEDIA_FALSE='#' else EXPEDIA_TRUE='#' EXPEDIA_FALSE= fi # OpenStreetMap http://www.openstreetmap.org/ # Check whether --enable-openstreetmap was given. if test "${enable_openstreetmap+set}" = set; then : enableval=$enable_openstreetmap; ac_cv_enable_openstreetmap=$enableval else ac_cv_enable_openstreetmap=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable OpenStreetMap stuff" >&5 $as_echo_n "checking whether to enable OpenStreetMap stuff... " >&6; } if ${ac_cv_enable_openstreetmap+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_enable_openstreetmap=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_enable_openstreetmap" >&5 $as_echo "$ac_cv_enable_openstreetmap" >&6; } case $ac_cv_enable_openstreetmap in yes) $as_echo "#define VIK_CONFIG_OPENSTREETMAP /**/" >>confdefs.h ;; esac if test x$ac_cv_enable_openstreetmap = xyes; then OPENSTREETMAP_TRUE= OPENSTREETMAP_FALSE='#' else OPENSTREETMAP_TRUE='#' OPENSTREETMAP_FALSE= fi # BlueMarble # Check whether --enable-bluemarble was given. if test "${enable_bluemarble+set}" = set; then : enableval=$enable_bluemarble; ac_cv_enable_bluemarble=$enableval else ac_cv_enable_bluemarble=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable BlueMarble stuff" >&5 $as_echo_n "checking whether to enable BlueMarble stuff... " >&6; } if ${ac_cv_enable_bluemarble+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_enable_bluemarble=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_enable_bluemarble" >&5 $as_echo "$ac_cv_enable_bluemarble" >&6; } case $ac_cv_enable_bluemarble in yes) $as_echo "#define VIK_CONFIG_BLUEMARBLE /**/" >>confdefs.h ;; esac if test x$ac_cv_enable_bluemarble = xyes; then BLUEMARBLE_TRUE= BLUEMARBLE_FALSE='#' else BLUEMARBLE_TRUE='#' BLUEMARBLE_FALSE= fi # GeoNames http://www.geonames.org/ # Check whether --enable-geonames was given. if test "${enable_geonames+set}" = set; then : enableval=$enable_geonames; ac_cv_enable_geonames=$enableval else ac_cv_enable_geonames=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable Geonames stuff" >&5 $as_echo_n "checking whether to enable Geonames stuff... " >&6; } if ${ac_cv_enable_geonames+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_enable_geonames=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_enable_geonames" >&5 $as_echo "$ac_cv_enable_geonames" >&6; } case $ac_cv_enable_geonames in yes) $as_echo "#define VIK_CONFIG_GEONAMES /**/" >>confdefs.h ;; esac if test x$ac_cv_enable_geonames = xyes; then GEONAMES_TRUE= GEONAMES_FALSE='#' else GEONAMES_TRUE='#' GEONAMES_FALSE= fi # Check whether --enable-geocaches was given. if test "${enable_geocaches+set}" = set; then : enableval=$enable_geocaches; ac_cv_enable_geocaches=$enableval else ac_cv_enable_geocaches=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable Geocaches Acquire" >&5 $as_echo_n "checking whether to enable Geocaches Acquire... " >&6; } if ${ac_cv_enable_geocaches+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_enable_geocaches=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_enable_geocaches" >&5 $as_echo "$ac_cv_enable_geocaches" >&6; } case $ac_cv_enable_geocaches in yes) $as_echo "#define VIK_CONFIG_GEOCACHES /**/" >>confdefs.h ;; esac if test x$ac_cv_enable_geocaches = xyes; then GEOCACHES_TRUE= GEOCACHES_FALSE='#' else GEOCACHES_TRUE='#' GEOCACHES_FALSE= fi # Check whether --enable-geotag was given. if test "${enable_geotag+set}" = set; then : enableval=$enable_geotag; ac_cv_enable_geotag=$enableval else ac_cv_enable_geotag=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable Geotag Support" >&5 $as_echo_n "checking whether to enable Geotag Support... " >&6; } if ${ac_cv_enable_geotag+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_enable_geotag=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_enable_geotag" >&5 $as_echo "$ac_cv_enable_geotag" >&6; } case $ac_cv_enable_geotag in yes) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for exif_loader_new in -lexif" >&5 $as_echo_n "checking for exif_loader_new in -lexif... " >&6; } if ${ac_cv_lib_exif_exif_loader_new+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lexif $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char exif_loader_new (); int main () { return exif_loader_new (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_exif_exif_loader_new=yes else ac_cv_lib_exif_exif_loader_new=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_exif_exif_loader_new" >&5 $as_echo "$ac_cv_lib_exif_exif_loader_new" >&6; } if test "x$ac_cv_lib_exif_exif_loader_new" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBEXIF 1 _ACEOF LIBS="-lexif $LIBS" else as_fn_error $? "libexif is needed for Geotag features, but is not found. The feature can be disabled with --disable-geotag" "$LINENO" 5 fi $as_echo "#define VIK_CONFIG_GEOTAG /**/" >>confdefs.h ;; esac if test x$ac_cv_enable_geotag = xyes; then GEOTAG_TRUE= GEOTAG_FALSE='#' else GEOTAG_TRUE='#' GEOTAG_FALSE= fi # Check whether --enable-spotmaps was given. if test "${enable_spotmaps+set}" = set; then : enableval=$enable_spotmaps; ac_cv_enable_spotmaps=$enableval else ac_cv_enable_spotmaps=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable SPOTMaps map" >&5 $as_echo_n "checking whether to enable SPOTMaps map... " >&6; } if ${ac_cv_enable_spotmaps+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_enable_spotmaps=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_enable_spotmaps" >&5 $as_echo "$ac_cv_enable_spotmaps" >&6; } case $ac_cv_enable_spotmaps in yes) $as_echo "#define VIK_CONFIG_SPOTMAPS /**/" >>confdefs.h ;; esac if test x$ac_cv_enable_spotmaps = xyes; then SPOTMAPS_TRUE= SPOTMAPS_FALSE='#' else SPOTMAPS_TRUE='#' SPOTMAPS_FALSE= fi # Check whether --enable-dem24k was given. if test "${enable_dem24k+set}" = set; then : enableval=$enable_dem24k; ac_cv_enable_dem24k=$enableval else ac_cv_enable_dem24k=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable USGS DEM 24k download source" >&5 $as_echo_n "checking whether to enable USGS DEM 24k download source... " >&6; } if ${ac_cv_enable_dem24k+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_enable_dem24k=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_enable_dem24k" >&5 $as_echo "$ac_cv_enable_dem24k" >&6; } case $ac_cv_enable_dem24k in yes) $as_echo "#define VIK_CONFIG_DEM24K /**/" >>confdefs.h ;; esac if test x$ac_cv_enable_dem24k = xyes; then DEM24K_TRUE= DEM24K_FALSE='#' else DEM24K_TRUE='#' DEM24K_FALSE= fi # Realtime GPS tracking # Check whether --enable-realtime-gps-tracking was given. if test "${enable_realtime_gps_tracking+set}" = set; then : enableval=$enable_realtime_gps_tracking; ac_cv_enable_realtimegpstracking=$enableval else ac_cv_enable_realtimegpstracking=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable Realtime GPS Tracking stuff" >&5 $as_echo_n "checking whether to enable Realtime GPS Tracking stuff... " >&6; } if ${ac_cv_enable_realtimegpstracking+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_enable_realtimegpstracking=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_enable_realtimegpstracking" >&5 $as_echo "$ac_cv_enable_realtimegpstracking" >&6; } case $ac_cv_enable_realtimegpstracking in yes) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gps_close in -lgps" >&5 $as_echo_n "checking for gps_close in -lgps... " >&6; } if ${ac_cv_lib_gps_gps_close+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgps $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gps_close (); int main () { return gps_close (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_gps_gps_close=yes else ac_cv_lib_gps_gps_close=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gps_gps_close" >&5 $as_echo "$ac_cv_lib_gps_gps_close" >&6; } if test "x$ac_cv_lib_gps_gps_close" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBGPS 1 _ACEOF LIBS="-lgps $LIBS" else as_fn_error $? "libgps is needed for Realtime GPS Tracking feature, but not found. The feature can be disable with --disable-realtime-gps-tracking" "$LINENO" 5 fi $as_echo "#define VIK_CONFIG_REALTIME_GPS_TRACKING /**/" >>confdefs.h ;; esac if test x$ac_cv_enable_realtimegpstracking = xyes; then REALTIME_GPS_TRACKING_TRUE= REALTIME_GPS_TRACKING_FALSE='#' else REALTIME_GPS_TRACKING_TRUE='#' REALTIME_GPS_TRACKING_FALSE= fi # Check whether --with-search was given. if test "${with_search+set}" = set; then : withval=$with_search; case "x$withval" in "xgoogle") VIK_CONFIG_SEARCH=VIK_CONFIG_SEARCH_GOOGLE ;; "xgeonames") VIK_CONFIG_SEARCH=VIK_CONFIG_SEARCH_GEONAMES ;; *) as_fn_error $? "Please, set a value for search method" "$LINENO" 5 esac else VIK_CONFIG_SEARCH=VIK_CONFIG_SEARCH_GOOGLE fi cat >>confdefs.h <<_ACEOF #define VIK_CONFIG_SEARCH_GOOGLE 1 _ACEOF cat >>confdefs.h <<_ACEOF #define VIK_CONFIG_SEARCH_GEONAMES 2 _ACEOF cat >>confdefs.h <<_ACEOF #define VIK_CONFIG_SEARCH ${VIK_CONFIG_SEARCH} _ACEOF # Check whether --with-mapcache was given. if test "${with_mapcache+set}" = set; then : withval=$with_mapcache; if test "x$withval" = "xno"; then VIK_CONFIG_MAPCACHE_SIZE=0; elif test "x$withval" = "xyes"; then as_fn_error $? "Please, set a value for size of the map cache in MB" "$LINENO" 5 else VIK_CONFIG_MAPCACHE_SIZE=${withval} fi else VIK_CONFIG_MAPCACHE_SIZE=128 fi cat >>confdefs.h <<_ACEOF #define VIK_CONFIG_MAPCACHE_SIZE ${VIK_CONFIG_MAPCACHE_SIZE} _ACEOF # Check whether --with-tileage was given. if test "${with_tileage+set}" = set; then : withval=$with_tileage; if test "x$withval" = "xno"; then VIK_CONFIG_DEFAULT_TILE_AGE=0; elif test "x$withval" = "xyes"; then as_fn_error $? "Please, set a value for age of tiles" "$LINENO" 5 else VIK_CONFIG_DEFAULT_TILE_AGE=${withval} fi else VIK_CONFIG_DEFAULT_TILE_AGE=604800 fi cat >>confdefs.h <<_ACEOF #define VIK_CONFIG_DEFAULT_TILE_AGE ${VIK_CONFIG_DEFAULT_TILE_AGE} _ACEOF DB2MAN_XSL=/usr/share/sgml/docbook/stylesheet/xsl/nwalsh/manpages/docbook.xsl # Extract the first word of "xsltproc", so it can be a program name with args. set dummy xsltproc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_XP+:} false; then : $as_echo_n "(cached) " >&6 else case $XP in [\\/]* | ?:[\\/]*) ac_cv_path_XP="$XP" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_XP="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi XP=$ac_cv_path_XP if test -n "$XP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XP" >&5 $as_echo "$XP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$XP" != "x"; then HAVE_XSLTPROC_TRUE= HAVE_XSLTPROC_FALSE='#' else HAVE_XSLTPROC_TRUE='#' HAVE_XSLTPROC_FALSE= fi if test "x$XP" != "x" && test -r "$DB2MAN_XSL"; then GEN_MANPAGES_TRUE= GEN_MANPAGES_FALSE='#' else GEN_MANPAGES_TRUE='#' GEN_MANPAGES_FALSE= fi ACLOCAL_AMFLAGS="\${ACLOCAL_FLAGS}" if test x${enable_gtk_doc} = xyes; then VIKING_DOC_TRUE= VIKING_DOC_FALSE='#' else VIKING_DOC_TRUE='#' VIKING_DOC_FALSE= fi # Configuration ac_config_files="$ac_config_files Makefile src/Makefile src/icons/Makefile po/Makefile.in data/Makefile test/Makefile help/Makefile win32/Makefile win32/installer/Makefile win32/installer/pixmaps/Makefile win32/installer/translations/Makefile" if test -z "$VIKING_DOC_TRUE"; then : ac_config_files="$ac_config_files doc/Makefile doc/reference/Makefile doc/examples/Makefile" fi ac_config_files="$ac_config_files viking.spec" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 $as_echo_n "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 $as_echo "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${ENABLE_GTK_DOC_TRUE}" && test -z "${ENABLE_GTK_DOC_FALSE}"; then as_fn_error $? "conditional \"ENABLE_GTK_DOC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GTK_DOC_BUILD_HTML_TRUE}" && test -z "${GTK_DOC_BUILD_HTML_FALSE}"; then as_fn_error $? "conditional \"GTK_DOC_BUILD_HTML\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GTK_DOC_BUILD_PDF_TRUE}" && test -z "${GTK_DOC_BUILD_PDF_FALSE}"; then as_fn_error $? "conditional \"GTK_DOC_BUILD_PDF\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GTK_DOC_USE_LIBTOOL_TRUE}" && test -z "${GTK_DOC_USE_LIBTOOL_FALSE}"; then as_fn_error $? "conditional \"GTK_DOC_USE_LIBTOOL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GTK_DOC_USE_REBASE_TRUE}" && test -z "${GTK_DOC_USE_REBASE_FALSE}"; then as_fn_error $? "conditional \"GTK_DOC_USE_REBASE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi ac_config_commands="$ac_config_commands po/stamp-it" if test -z "${EXPAT_INSTALLED_TRUE}" && test -z "${EXPAT_INSTALLED_FALSE}"; then as_fn_error $? "conditional \"EXPAT_INSTALLED\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_SK_TRUE}" && test -z "${ENABLE_SK_FALSE}"; then as_fn_error $? "conditional \"ENABLE_SK\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_GNOME_DOC_UTILS_TRUE}" && test -z "${HAVE_GNOME_DOC_UTILS_FALSE}"; then as_fn_error $? "conditional \"HAVE_GNOME_DOC_UTILS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BING_TRUE}" && test -z "${BING_FALSE}"; then as_fn_error $? "conditional \"BING\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GOOGLE_TRUE}" && test -z "${GOOGLE_FALSE}"; then as_fn_error $? "conditional \"GOOGLE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${TERRASERVER_TRUE}" && test -z "${TERRASERVER_FALSE}"; then as_fn_error $? "conditional \"TERRASERVER\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${EXPEDIA_TRUE}" && test -z "${EXPEDIA_FALSE}"; then as_fn_error $? "conditional \"EXPEDIA\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${OPENSTREETMAP_TRUE}" && test -z "${OPENSTREETMAP_FALSE}"; then as_fn_error $? "conditional \"OPENSTREETMAP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BLUEMARBLE_TRUE}" && test -z "${BLUEMARBLE_FALSE}"; then as_fn_error $? "conditional \"BLUEMARBLE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GEONAMES_TRUE}" && test -z "${GEONAMES_FALSE}"; then as_fn_error $? "conditional \"GEONAMES\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GEOCACHES_TRUE}" && test -z "${GEOCACHES_FALSE}"; then as_fn_error $? "conditional \"GEOCACHES\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GEOTAG_TRUE}" && test -z "${GEOTAG_FALSE}"; then as_fn_error $? "conditional \"GEOTAG\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${SPOTMAPS_TRUE}" && test -z "${SPOTMAPS_FALSE}"; then as_fn_error $? "conditional \"SPOTMAPS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${DEM24K_TRUE}" && test -z "${DEM24K_FALSE}"; then as_fn_error $? "conditional \"DEM24K\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${REALTIME_GPS_TRACKING_TRUE}" && test -z "${REALTIME_GPS_TRACKING_FALSE}"; then as_fn_error $? "conditional \"REALTIME_GPS_TRACKING\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_XSLTPROC_TRUE}" && test -z "${HAVE_XSLTPROC_FALSE}"; then as_fn_error $? "conditional \"HAVE_XSLTPROC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GEN_MANPAGES_TRUE}" && test -z "${GEN_MANPAGES_FALSE}"; then as_fn_error $? "conditional \"GEN_MANPAGES\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${VIKING_DOC_TRUE}" && test -z "${VIKING_DOC_FALSE}"; then as_fn_error $? "conditional \"VIKING_DOC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by viking $as_me 1.4.2, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ viking config.status 1.4.2 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "src/config.h") CONFIG_HEADERS="$CONFIG_HEADERS src/config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;; "default-2") CONFIG_COMMANDS="$CONFIG_COMMANDS default-2" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "src/icons/Makefile") CONFIG_FILES="$CONFIG_FILES src/icons/Makefile" ;; "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; "data/Makefile") CONFIG_FILES="$CONFIG_FILES data/Makefile" ;; "test/Makefile") CONFIG_FILES="$CONFIG_FILES test/Makefile" ;; "help/Makefile") CONFIG_FILES="$CONFIG_FILES help/Makefile" ;; "win32/Makefile") CONFIG_FILES="$CONFIG_FILES win32/Makefile" ;; "win32/installer/Makefile") CONFIG_FILES="$CONFIG_FILES win32/installer/Makefile" ;; "win32/installer/pixmaps/Makefile") CONFIG_FILES="$CONFIG_FILES win32/installer/pixmaps/Makefile" ;; "win32/installer/translations/Makefile") CONFIG_FILES="$CONFIG_FILES win32/installer/translations/Makefile" ;; "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; "doc/reference/Makefile") CONFIG_FILES="$CONFIG_FILES doc/reference/Makefile" ;; "doc/examples/Makefile") CONFIG_FILES="$CONFIG_FILES doc/examples/Makefile" ;; "viking.spec") CONFIG_FILES="$CONFIG_FILES viking.spec" ;; "po/stamp-it") CONFIG_COMMANDS="$CONFIG_COMMANDS po/stamp-it" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; "default-1":C) case "$CONFIG_FILES" in *po/Makefile.in*) sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile esac ;; "default-2":C) case "$CONFIG_FILES" in *po/Makefile.in*) sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile esac ;; "po/stamp-it":C) if ! grep "^# INTLTOOL_MAKEFILE$" "po/Makefile.in" > /dev/null ; then as_fn_error $? "po/Makefile.in.in was not created by intltoolize." "$LINENO" 5 fi rm -f "po/stamp-it" "po/stamp-it.tmp" "po/POTFILES" "po/Makefile.tmp" >"po/stamp-it.tmp" sed '/^#/d s/^[[].*] *// /^[ ]*$/d '"s|^| $ac_top_srcdir/|" \ "$srcdir/po/POTFILES.in" | sed '$!s/$/ \\/' >"po/POTFILES" sed '/^POTFILES =/,/[^\\]$/ { /^POTFILES =/!d r po/POTFILES } ' "po/Makefile.in" >"po/Makefile" rm -f "po/Makefile.tmp" mv "po/stamp-it.tmp" "po/stamp-it" ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi echo "" echo "===========================================" echo "$PACKAGE $VERSION" echo "-------------------------------------------" echo "Alphabetized track & waypoints : $ac_cv_enable_alpha_trw" echo "Bing Maps : $ac_cv_enable_bing" echo "Google : $ac_cv_enable_google" echo "Terraserver Maps : $ac_cv_enable_terraserver" echo "Expedia Maps : $ac_cv_enable_expedia" echo "Open Street Map : $ac_cv_enable_openstreetmap" echo "BlueMarble : $ac_cv_enable_bluemarble" echo "SPOTMaps : $ac_cv_enable_spotmaps" echo "Geonames : $ac_cv_enable_geonames" echo "Geocaches Acquire : $ac_cv_enable_geocaches" echo "Geotag Support : $ac_cv_enable_geotag" echo "USGS 24k DEM : $ac_cv_enable_dem24k" echo "Realtime GPS Tracking : $ac_cv_enable_realtimegpstracking" echo "Size of map cache (in memory) : ${VIK_CONFIG_MAPCACHE_SIZE}" echo "Age of tiles (in seconds) : ${VIK_CONFIG_DEFAULT_TILE_AGE}" echo "Documentation (+HTML) : ${enable_gtk_doc} (HTML: ${enable_gtk_doc_html})" echo "-------------------------------------------" echo "" echo "Configure finished, type 'make' to build." viking-1.4.2/help/0000755000175000017500000000000012175546637010756 500000000000000viking-1.4.2/help/Makefile.in0000644000175000017500000011075212175546614012744 00000000000000# Makefile.in generated by automake 1.13.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # gnome-doc-utils.make - make magic for building documentation # Copyright (C) 2004-2005 Shaun McCance # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software Foundation, # Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. ################################################################################ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : DIST_COMMON = $(top_srcdir)/gnome-doc-utils.make $(srcdir)/Makefile.in \ $(srcdir)/Makefile.am $(top_srcdir)/mkinstalldirs subdir = help ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/expat.m4 \ $(top_srcdir)/m4/libcurl.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_STATUS_DEPENDENCIES = @CONFIG_STATUS_DEPENDENCIES@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DB2MAN_XSL = @DB2MAN_XSL@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ EXPAT_CFLAGS = @EXPAT_CFLAGS@ EXPAT_LIBS = @EXPAT_LIBS@ GDK_PIXBUF_CSOURCE = @GDK_PIXBUF_CSOURCE@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GLIB_MKENUMS = @GLIB_MKENUMS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HELP_DIR = @HELP_DIR@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ LDFLAGS = @LDFLAGS@ LIBCURL = @LIBCURL@ LIBCURL_CPPFLAGS = @LIBCURL_CPPFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_CFLAGS = @PACKAGE_CFLAGS@ PACKAGE_LIBS = @PACKAGE_LIBS@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ POW_LIB = @POW_LIB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XP = @XP@ _libcurl_config = @_libcurl_config@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ _clean_doc_header = $(if $(DOC_H_FILE),clean-doc-header) _DOC_REAL_FORMATS = $(if $(DOC_USER_FORMATS),$(DOC_USER_FORMATS),$(DOC_FORMATS)) _DOC_REAL_LINGUAS = $(if $(filter environment,$(origin LINGUAS)), \ $(filter $(LINGUAS),$(DOC_LINGUAS)), \ $(DOC_LINGUAS)) _DOC_ABS_SRCDIR = @abs_srcdir@ _xml2po_mode = $(if $(DOC_ID),mallard,docbook) @ENABLE_SK_TRUE@_ENABLE_SK = true ################################################################################ GDU_V_XML2PO = $(GDU__v_XML2PO_$(V)) GDU__v_XML2PO_ = $(GDU__v_XML2PO_$(AM_DEFAULT_VERBOSITY)) GDU__v_XML2PO_0 = @echo " XML2PO" $@; GDU_V_MSGFMT = $(GDU__v_MSGFMT_$(V)) GDU__v_MSGFMT_ = $(GDU__v_MSGFMT_$(AM_DEFAULT_VERBOSITY)) GDU__v_MSGFMT_0 = @echo " MSGFMT" $@; GDU_V_DB2OMF = $(GDU__v_DB2OMF_$(V)) GDU__v_DB2OMF_ = $(GDU__v_DB2OMF_$(AM_DEFAULT_VERBOSITY)) GDU__v_DB2OMF_0 = @echo " DB2OMF" $@; GDU_V_DB2HTM = $(GDU__v_DB2HTM_$(V)) GDU__v_DB2HTM_ = $(GDU__v_DB2HTM_$(AM_DEFAULT_VERBOSITY)) GDU__v_DB2HTM_0 = @echo " DB2HTM" $@; ################################################################################ db2omf_args = \ --stringparam db2omf.basename $(DOC_MODULE) \ --stringparam db2omf.format $(3) \ --stringparam db2omf.dtd \ $(shell xmllint --format $(2) | grep -h PUBLIC | head -n 1 \ | sed -e 's/.*PUBLIC \(\"[^\"]*\"\).*/\1/') \ --stringparam db2omf.lang $(notdir $(patsubst %/$(notdir $(2)),%,$(2))) \ --stringparam db2omf.omf_dir "$(OMF_DIR)" \ --stringparam db2omf.help_dir "$(HELP_DIR)" \ --stringparam db2omf.omf_in "$(_DOC_OMF_IN)" \ $(if $(_ENABLE_SK), \ --stringparam db2omf.scrollkeeper_cl "$(_skcontentslist)") \ $(_db2omf) $(2) _DOC_OMF_IN = $(if $(DOC_MODULE),$(wildcard $(_DOC_ABS_SRCDIR)/$(DOC_MODULE).omf.in)) _DOC_OMF_DB = $(if $(_DOC_OMF_IN), \ $(foreach lc,C $(_DOC_REAL_LINGUAS),$(DOC_MODULE)-$(lc).omf)) _DOC_OMF_HTML = $(if $(_DOC_OMF_IN), \ $(foreach lc,C $(_DOC_REAL_LINGUAS),$(DOC_MODULE)-html-$(lc).omf)) # FIXME _DOC_OMF_ALL = \ $(if $(filter docbook,$(_DOC_REAL_FORMATS)),$(_DOC_OMF_DB)) \ $(if $(filter html HTML,$(_DOC_REAL_FORMATS)),$(_DOC_OMF_HTML)) ################################################################################ _DOC_C_MODULE = $(if $(DOC_MODULE),C/$(DOC_MODULE).xml) _DOC_C_PAGES = $(foreach page,$(DOC_PAGES),C/$(page)) _DOC_C_ENTITIES = $(foreach ent,$(DOC_ENTITIES),C/$(ent)) _DOC_C_INCLUDES = $(foreach inc,$(DOC_INCLUDES),C/$(inc)) _DOC_C_DOCS = \ $(_DOC_C_ENTITIES) $(_DOC_C_INCLUDES) \ $(_DOC_C_PAGES) $(_DOC_C_MODULE) _DOC_C_DOCS_NOENT = \ $(_DOC_C_MODULE) $(_DOC_C_INCLUDES) \ $(_DOC_C_PAGES) _DOC_C_FIGURES = $(if $(DOC_FIGURES), \ $(foreach fig,$(DOC_FIGURES),C/$(fig)), \ $(patsubst $(srcdir)/%,%,$(wildcard $(srcdir)/C/figures/*.png))) # FIXME: probably have to shell escape to determine the file names _DOC_C_HTML = $(foreach f, \ $(shell xsltproc --xinclude \ --stringparam db.chunk.basename "$(DOC_MODULE)" \ $(_chunks) "C/$(DOC_MODULE).xml"), \ C/$(f).xhtml) ############################################################################### _DOC_POFILES = $(if $(DOC_MODULE)$(DOC_ID), \ $(foreach lc,$(_DOC_REAL_LINGUAS),$(lc)/$(lc).po)) _DOC_MOFILES = $(patsubst %.po,%.mo,$(_DOC_POFILES)) _DOC_LC_MODULES = $(if $(DOC_MODULE), \ $(foreach lc,$(_DOC_REAL_LINGUAS),$(lc)/$(DOC_MODULE).xml)) _DOC_LC_PAGES = \ $(foreach lc,$(_DOC_REAL_LINGUAS),$(foreach page,$(_DOC_C_PAGES), \ $(lc)/$(notdir $(page)) )) _DOC_LC_INCLUDES = \ $(foreach lc,$(_DOC_REAL_LINGUAS),$(foreach inc,$(_DOC_C_INCLUDES), \ $(lc)/$(notdir $(inc)) )) # FIXME: probably have to shell escape to determine the file names _DOC_LC_HTML = \ $(foreach lc,$(_DOC_REAL_LINGUAS),$(foreach doc,$(_DOC_C_HTML), \ $(lc)/$(notdir $(doc)) )) _DOC_LC_DOCS = \ $(_DOC_LC_MODULES) $(_DOC_LC_INCLUDES) $(_DOC_LC_PAGES) \ $(if $(filter html HTML,$(_DOC_REAL_FORMATS)),$(_DOC_LC_HTML)) _DOC_LC_FIGURES = $(foreach lc,$(_DOC_REAL_LINGUAS), \ $(patsubst C/%,$(lc)/%,$(_DOC_C_FIGURES)) ) _DOC_SRC_FIGURES = \ $(foreach fig,$(_DOC_C_FIGURES), $(foreach lc,C $(_DOC_REAL_LINGUAS), \ $(wildcard $(srcdir)/$(lc)/$(patsubst C/%,%,$(fig))) )) _DOC_POT = $(if $(DOC_MODULE),$(DOC_MODULE).pot,$(if $(DOC_ID),$(DOC_ID).pot)) ################################################################################ _DOC_HTML_ALL = $(if $(filter html HTML,$(_DOC_REAL_FORMATS)), \ $(_DOC_C_HTML) $(_DOC_LC_HTML)) _DOC_HTML_TOPS = $(foreach lc,C $(_DOC_REAL_LINGUAS),$(lc)/$(DOC_MODULE).xhtml) _clean_omf = $(if $(_DOC_OMF_IN),clean-doc-omf) _clean_dsk = $(if $(_DOC_DSK_IN),clean-doc-dsk) _clean_lc = $(if $(_DOC_REAL_LINGUAS),clean-doc-lc) _clean_dir = $(if $(DOC_MODULE)$(DOC_ID),clean-doc-dir) _doc_install_dir = $(if $(DOC_ID),$(DOC_ID),$(DOC_MODULE)) DOC_MODULE = viking DOC_ENTITIES = legal.xml DOC_INCLUDES = DOC_FIGURES = \ figures/addtr_18.png \ figures/addwp_18.png \ figures/demdl_18.png \ figures/edtr_18.png \ figures/edwp_18.png \ figures/geomove_18.png \ figures/geozoom_18.png \ figures/map_tile_info_dialog.png \ figures/mapdl_18.png \ figures/mover_22.png \ figures/properties_degree.png \ figures/properties_units.png \ figures/route_finder_18.png \ figures/ruler_18.png \ figures/select_18.png \ figures/showpic_18.png \ figures/trw_statusbar.png \ figures/vik_new_route_18.png \ figures/zoom_18.png \ figures/zoom_status_popup.png \ figures/Viking-OSM-CycleMap-ManyTracks.jpg DOC_LINGUAS = all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/gnome-doc-utils.make $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu help/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu help/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_srcdir)/gnome-doc-utils.make: $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-local mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-local dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-data-local install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic \ maintainer-clean-local mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-local pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-local .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-local \ cscopelist-am ctags-am dist-hook distclean distclean-generic \ distclean-local distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-data-local install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic maintainer-clean-local mostlyclean \ mostlyclean-generic mostlyclean-local pdf pdf-am ps ps-am \ tags-am uninstall uninstall-am uninstall-local DOC_H_FILE ?= DOC_H_DOCS ?= $(DOC_H_FILE): $(DOC_H_DOCS); @rm -f $@.tmp; touch $@.tmp; echo 'const gchar* documentation_credits[] = {' >> $@.tmp list='$(DOC_H_DOCS)'; for doc in $$list; do \ xmlpath="`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`:$(srcdir)/`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`"; \ if ! test -f "$$doc"; then doc="$(srcdir)/$$doc"; fi; \ xsltproc --path "$$xmlpath" $(_credits) $$doc; \ done | sort | uniq \ | awk 'BEGIN{s=""}{n=split($$0,w,"<");if(s!=""&&s!=substr(w[1],1,length(w[1])-1)){print s};if(n>1){print $$0;s=""}else{s=$$0}};END{if(s!=""){print s}}' \ | sed -e 's/\\/\\\\/' -e 's/"/\\"/' -e 's/\(.*\)/\t"\1",/' >> $@.tmp echo ' NULL' >> $@.tmp echo '};' >> $@.tmp echo >> $@.tmp list='$(DOC_H_DOCS)'; for doc in $$list; do \ xmlpath="`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`:$(srcdir)/`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`"; \ if ! test -f "$$doc"; then doc="$(srcdir)/$$doc"; fi; \ docid=`echo "$$doc" | sed -e 's/.*\/\([^/]*\)\.xml/\1/' \ | sed -e 's/[^a-zA-Z_]/_/g' | tr 'a-z' 'A-Z'`; \ echo $$xmlpath; \ ids=`xsltproc --xinclude --path "$$xmlpath" $(_ids) $$doc`; \ for id in $$ids; do \ echo '#define HELP_'`echo $$docid`'_'`echo $$id \ | sed -e 's/[^a-zA-Z_]/_/g' | tr 'a-z' 'A-Z'`' "'$$id'"' >> $@.tmp; \ done; \ echo >> $@.tmp; \ done; cp $@.tmp $@ && rm -f $@.tmp dist-check-gdu: @HAVE_GNOME_DOC_UTILS_FALSE@ @echo "*** GNOME Doc Utils must be installed in order to make dist" @HAVE_GNOME_DOC_UTILS_FALSE@ @false .PHONY: dist-doc-header dist-doc-header: $(DOC_H_FILE) @if test -f "$(DOC_H_FILE)"; then d=; else d="$(srcdir)/"; fi; \ echo "$(INSTALL_DATA) $${d}$(DOC_H_FILE) $(distdir)/$(DOC_H_FILE)"; \ $(INSTALL_DATA) "$${d}$(DOC_H_FILE)" "$(distdir)/$(DOC_H_FILE)"; doc-dist-hook: dist-check-gdu $(if $(DOC_H_FILE),dist-doc-header) .PHONY: clean-doc-header clean-local: $(_clean_doc_header) distclean-local: $(_clean_doc_header) mostlyclean-local: $(_clean_doc_header) maintainer-clean-local: $(_clean_doc_header) clean-doc-header: rm -f $(DOC_H_FILE) all: $(DOC_H_FILE) ################################################################################ DOC_MODULE ?= DOC_ID ?= DOC_PAGES ?= DOC_ENTITIES ?= DOC_INCLUDES ?= DOC_FIGURES ?= DOC_FORMATS ?= docbook DOC_LINGUAS ?= ################################################################################ _xml2po ?= `which xml2po` _db2html ?= `$(PKG_CONFIG) --variable db2html gnome-doc-utils` _db2omf ?= `$(PKG_CONFIG) --variable db2omf gnome-doc-utils` _chunks ?= `$(PKG_CONFIG) --variable xmldir gnome-doc-utils`/gnome/xslt/docbook/utils/chunks.xsl _credits ?= `$(PKG_CONFIG) --variable xmldir gnome-doc-utils`/gnome/xslt/docbook/utils/credits.xsl _ids ?= $(shell $(PKG_CONFIG) --variable xmldir gnome-doc-utils)/gnome/xslt/docbook/utils/ids.xsl @ENABLE_SK_TRUE@_skpkgdatadir ?= `scrollkeeper-config --pkgdatadir` @ENABLE_SK_TRUE@_sklocalstatedir ?= `scrollkeeper-config --pkglocalstatedir` @ENABLE_SK_TRUE@_skcontentslist ?= $(_skpkgdatadir)/Templates/C/scrollkeeper_cl.xml $(_DOC_OMF_DB) : $(_DOC_OMF_IN) $(_DOC_OMF_DB) : $(DOC_MODULE)-%.omf : %/$(DOC_MODULE).xml @test "x$(_ENABLE_SK)" != "xtrue" -o -f "$(_skcontentslist)" || { \ echo "The file '$(_skcontentslist)' does not exist." >&2; \ echo "Please check your ScrollKeeper installation." >&2; \ exit 1; } $(GDU_V_DB2OMF)xsltproc -o $@ $(call db2omf_args,$@,$<,'docbook') || { rm -f "$@"; exit 1; } $(_DOC_OMF_HTML) : $(_DOC_OMF_IN) $(_DOC_OMF_HTML) : $(DOC_MODULE)-html-%.omf : %/$(DOC_MODULE).xml @ENABLE_SK_TRUE@ @test "x$(_ENABLE_SK)" != "xtrue" -o -f "$(_skcontentslist)" || { \ @ENABLE_SK_TRUE@ echo "The file '$(_skcontentslist)' does not exist" >&2; \ @ENABLE_SK_TRUE@ echo "Please check your ScrollKeeper installation." >&2; \ @ENABLE_SK_TRUE@ exit 1; } $(GDU_V_DB2OMF)xsltproc -o $@ $(call db2omf_args,$@,$<,'xhtml') || { rm -f "$@"; exit 1; } .PHONY: omf omf: $(_DOC_OMF_ALL) .PHONY: po po: $(_DOC_POFILES) .PHONY: mo mo: $(_DOC_MOFILES) $(_DOC_POFILES): @if ! test -d $(dir $@); then \ echo "mkdir $(dir $@)"; \ mkdir "$(dir $@)"; \ fi @if test ! -f $@ -a -f $(srcdir)/$@; then \ echo "cp $(srcdir)/$@ $@"; \ cp "$(srcdir)/$@" "$@"; \ fi; @docs=; \ list='$(_DOC_C_DOCS_NOENT)'; for doc in $$list; do \ docs="$$docs $(_DOC_ABS_SRCDIR)/$$doc"; \ done; \ if ! test -f $@; then \ echo "(cd $(dir $@) && \ $(_xml2po) -m $(_xml2po_mode) -e $$docs > $(notdir $@).tmp && \ cp $(notdir $@).tmp $(notdir $@) && rm -f $(notdir $@).tmp)"; \ (cd $(dir $@) && \ $(_xml2po) -m $(_xml2po_mode) -e $$docs > $(notdir $@).tmp && \ cp $(notdir $@).tmp $(notdir $@) && rm -f $(notdir $@).tmp); \ else \ echo "(cd $(dir $@) && \ $(_xml2po) -m $(_xml2po_mode) -e -u $(notdir $@) $$docs)"; \ (cd $(dir $@) && \ $(_xml2po) -m $(_xml2po_mode) -e -u $(notdir $@) $$docs); \ fi $(_DOC_MOFILES): %.mo: %.po $(AM_V_at)if ! test -d $(dir $@); then mkdir "$(dir $@)"; fi $(GDU_V_MSGFMT)msgfmt -o $@ $< # FIXME: fix the dependancy # FIXME: hook xml2po up $(_DOC_LC_DOCS) : $(_DOC_MOFILES) $(_DOC_LC_DOCS) : $(_DOC_C_DOCS) $(AM_V_at)if ! test -d $(dir $@); then mkdir $(dir $@); fi $(GDU_V_XML2PO)if [ -f "C/$(notdir $@)" ]; then d="../"; else d="$(_DOC_ABS_SRCDIR)/"; fi; \ mo="$(dir $@)$(patsubst %/$(notdir $@),%,$@).mo"; \ if [ -f "$${mo}" ]; then mo="../$${mo}"; else mo="$(_DOC_ABS_SRCDIR)/$${mo}"; fi; \ (cd $(dir $@) && \ $(_xml2po) -m $(_xml2po_mode) -e -t "$${mo}" \ "$${d}C/$(notdir $@)" > $(notdir $@).tmp && \ cp $(notdir $@).tmp $(notdir $@) && rm -f $(notdir $@).tmp) .PHONY: pot pot: $(_DOC_POT) $(_DOC_POT): $(_DOC_C_DOCS_NOENT) $(GDU_V_XML2PO)$(_xml2po) -m $(_xml2po_mode) -e -o $@ $^ $(_DOC_HTML_TOPS): $(_DOC_C_DOCS) $(_DOC_LC_DOCS) $(GDU_V_DB2HTM)xsltproc -o $@ --xinclude --param db.chunk.chunk_top "false()" --stringparam db.chunk.basename "$(DOC_MODULE)" --stringparam db.chunk.extension ".xhtml" $(_db2html) $(patsubst %.xhtml,%.xml,$@) ################################################################################ all: \ $(_DOC_C_DOCS) $(_DOC_LC_DOCS) \ $(_DOC_OMF_ALL) $(_DOC_DSK_ALL) \ $(_DOC_HTML_ALL) $(_DOC_POFILES) ################################################################################ .PHONY: clean-doc-omf clean-doc-dsk clean-doc-lc clean-doc-dir clean-doc-omf: ; rm -f $(_DOC_OMF_DB) $(_DOC_OMF_HTML) clean-doc-dsk: ; rm -f $(_DOC_DSK_DB) $(_DOC_DSK_HTML) clean-doc-lc: rm -f $(_DOC_LC_DOCS) rm -f $(_DOC_MOFILES) @list='$(_DOC_POFILES)'; for po in $$list; do \ if ! test "$$po" -ef "$(srcdir)/$$po"; then \ echo "rm -f $$po"; \ rm -f "$$po"; \ fi; \ done # .xml2.po.mo cleaning is obsolete as of 0.18.1 and could be removed in 0.20.x @for lc in C $(_DOC_REAL_LINGUAS); do \ if test -f "$$lc/.xml2po.mo"; then \ echo "rm -f $$lc/.xml2po.mo"; \ rm -f "$$lc/.xml2po.mo"; \ fi; \ done clean-doc-dir: clean-doc-lc @for lc in C $(_DOC_REAL_LINGUAS); do \ for dir in `find $$lc -depth -type d`; do \ if ! test $$dir -ef $(srcdir)/$$dir; then \ echo "rmdir $$dir"; \ rmdir "$$dir"; \ fi; \ done; \ done clean-local: \ $(_clean_omf) $(_clean_dsk) \ $(_clean_lc) $(_clean_dir) distclean-local: \ $(_clean_omf) $(_clean_dsk) \ $(_clean_lc) $(_clean_dir) mostlyclean-local: \ $(_clean_omf) $(_clean_dsk) \ $(_clean_lc) $(_clean_dir) maintainer-clean-local: \ $(_clean_omf) $(_clean_dsk) \ $(_clean_lc) $(_clean_dir) ################################################################################ .PHONY: dist-doc-docs dist-doc-pages dist-doc-figs dist-doc-omf dist-doc-dsk doc-dist-hook: \ $(if $(DOC_MODULE)$(DOC_ID),dist-doc-docs) \ $(if $(_DOC_C_FIGURES),dist-doc-figs) \ $(if $(_DOC_OMF_IN),dist-doc-omf) # $(if $(_DOC_DSK_IN),dist-doc-dsk) dist-doc-docs: $(_DOC_C_DOCS) $(_DOC_LC_DOCS) $(_DOC_POFILES) @for lc in C $(_DOC_REAL_LINGUAS); do \ echo " $(mkinstalldirs) $(distdir)/$$lc"; \ $(mkinstalldirs) "$(distdir)/$$lc"; \ done @list='$(_DOC_C_DOCS)'; \ for doc in $$list; do \ if test -f "$$doc"; then d=; else d="$(srcdir)/"; fi; \ docdir=`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \ if ! test -d "$(distdir)/$$docdir"; then \ echo "$(mkinstalldirs) $(distdir)/$$docdir"; \ $(mkinstalldirs) "$(distdir)/$$docdir"; \ fi; \ echo "$(INSTALL_DATA) $$d$$doc $(distdir)/$$doc"; \ $(INSTALL_DATA) "$$d$$doc" "$(distdir)/$$doc"; \ done @list='$(_DOC_LC_DOCS)'; \ for doc in $$list; do \ if test -f "$$doc"; then d=; else d="$(srcdir)/"; fi; \ docdir=`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \ if ! test -d "$(distdir)/$$docdir"; then \ echo "$(mkinstalldirs) $(distdir)/$$docdir"; \ $(mkinstalldirs) "$(distdir)/$$docdir"; \ fi; \ echo "$(INSTALL_DATA) $$d$$doc $(distdir)/$$doc"; \ $(INSTALL_DATA) "$$d$$doc" "$(distdir)/$$doc"; \ done @list='$(_DOC_POFILES)'; \ for doc in $$list; do \ if test -f "$$doc"; then d=; else d="$(srcdir)/"; fi; \ docdir=`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \ if ! test -d "$(distdir)/$$docdir"; then \ echo "$(mkinstalldirs) $(distdir)/$$docdir"; \ $(mkinstalldirs) "$(distdir)/$$docdir"; \ fi; \ echo "$(INSTALL_DATA) $$d$$doc $(distdir)/$$doc"; \ $(INSTALL_DATA) "$$d$$doc" "$(distdir)/$$doc"; \ done dist-doc-figs: $(_DOC_SRC_FIGURES) @list='$(_DOC_C_FIGURES) $(_DOC_LC_FIGURES)'; \ for fig in $$list; do \ if test -f "$$fig"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$fig"; then \ figdir=`echo $$fig | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \ if ! test -d "$(distdir)/$$figdir"; then \ echo "$(mkinstalldirs) $(distdir)/$$figdir"; \ $(mkinstalldirs) "$(distdir)/$$figdir"; \ fi; \ echo "$(INSTALL_DATA) $$d$$fig $(distdir)/$$fig"; \ $(INSTALL_DATA) "$$d$$fig" "$(distdir)/$$fig"; \ fi; \ done; dist-doc-omf: @if test -f "$(_DOC_OMF_IN)"; then d=; else d="$(srcdir)/"; fi; \ echo "$(INSTALL_DATA) $$d$(_DOC_OMF_IN) $(distdir)/$(notdir $(_DOC_OMF_IN))"; \ $(INSTALL_DATA) "$$d$(_DOC_OMF_IN)" "$(distdir)/$(notdir $(_DOC_OMF_IN))" dist-doc-dsk: @if test -f "$(_DOC_DSK_IN)"; then d=; else d="$(srcdir)/"; fi; \ echo "$(INSTALL_DATA) $$d$(_DOC_DSK_IN) $(distdir)/$(notdir $(_DOC_DSK_IN))"; \ $(INSTALL_DATA) "$$d$(_DOC_DSK_IN)" "$(distdir)/$(notdir $(_DOC_DSK_IN))" ################################################################################ .PHONY: check-doc-docs check-doc-omf check: \ $(if $(DOC_MODULE),check-doc-docs) \ $(if $(DOC_ID),check-doc-pages) \ $(if $(_DOC_OMF_IN),check-doc-omf) check-doc-docs: $(_DOC_C_DOCS) $(_DOC_LC_DOCS) @for lc in C $(_DOC_REAL_LINGUAS); do \ if test -f "$$lc"; \ then d=; \ xmlpath="$$lc"; \ else \ d="$(srcdir)/"; \ xmlpath="$$lc:$(srcdir)/$$lc"; \ fi; \ echo "xmllint --noout --noent --path $$xmlpath --xinclude --postvalid $$d$$lc/$(DOC_MODULE).xml"; \ xmllint --noout --noent --path "$$xmlpath" --xinclude --postvalid "$$d$$lc/$(DOC_MODULE).xml"; \ done check-doc-pages: $(_DOC_C_PAGES) $(_DOC_LC_PAGES) for lc in C $(_DOC_REAL_LINGUAS); do \ if test -f "$$lc"; \ then d=; \ xmlpath="$$lc"; \ else \ d="$(srcdir)/"; \ xmlpath="$$lc:$(srcdir)/$$lc"; \ fi; \ for page in $(DOC_PAGES); do \ echo "xmllint --noout --noent --path $$xmlpath --xinclude $$d$$lc/$$page"; \ xmllint --noout --noent --path "$$xmlpath" --xinclude "$$d$$lc/$$page"; \ done; \ done check-doc-omf: $(_DOC_OMF_ALL) @list='$(_DOC_OMF_ALL)'; for omf in $$list; do \ echo "xmllint --noout --xinclude --dtdvalid 'http://scrollkeeper.sourceforge.net/dtds/scrollkeeper-omf-1.0/scrollkeeper-omf.dtd' $$omf"; \ xmllint --noout --xinclude --dtdvalid 'http://scrollkeeper.sourceforge.net/dtds/scrollkeeper-omf-1.0/scrollkeeper-omf.dtd' $$omf; \ done ################################################################################ .PHONY: install-doc-docs install-doc-html install-doc-figs install-doc-omf install-doc-dsk install-data-local: \ $(if $(DOC_MODULE)$(DOC_ID),install-doc-docs) \ $(if $(_DOC_HTML_ALL),install-doc-html) \ $(if $(_DOC_C_FIGURES),install-doc-figs) \ $(if $(_DOC_OMF_IN),install-doc-omf) # $(if $(_DOC_DSK_IN),install-doc-dsk) install-doc-docs: @for lc in C $(_DOC_REAL_LINGUAS); do \ echo "$(mkinstalldirs) $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$lc"; \ $(mkinstalldirs) $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$lc; \ done @list='$(_DOC_C_DOCS)'; for doc in $$list; do \ if test -f "$$doc"; then d=; else d="$(srcdir)/"; fi; \ docdir="$$lc/"`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \ docdir="$(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$docdir"; \ if ! test -d "$$docdir"; then \ echo "$(mkinstalldirs) $$docdir"; \ $(mkinstalldirs) "$$docdir"; \ fi; \ echo "$(INSTALL_DATA) $$d$$doc $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc"; \ $(INSTALL_DATA) $$d$$doc $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc; \ done @list='$(_DOC_LC_DOCS)'; for doc in $$list; do \ if test -f "$$doc"; then d=; else d="$(srcdir)/"; fi; \ docdir="$$lc/"`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \ docdir="$(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$docdir"; \ if ! test -d "$$docdir"; then \ echo "$(mkinstalldirs) $$docdir"; \ $(mkinstalldirs) "$$docdir"; \ fi; \ echo "$(INSTALL_DATA) $$d$$doc $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc"; \ $(INSTALL_DATA) $$d$$doc $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc; \ done install-doc-figs: @list='$(patsubst C/%,%,$(_DOC_C_FIGURES))'; for fig in $$list; do \ for lc in C $(_DOC_REAL_LINGUAS); do \ figsymlink=false; \ if test -f "$$lc/$$fig"; then \ figfile="$$lc/$$fig"; \ elif test -f "$(srcdir)/$$lc/$$fig"; then \ figfile="$(srcdir)/$$lc/$$fig"; \ else \ figsymlink=true; \ fi; \ figdir="$$lc/"`echo $$fig | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \ figdir="$(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$figdir"; \ if ! test -d "$$figdir"; then \ echo "$(mkinstalldirs) $$figdir"; \ $(mkinstalldirs) "$$figdir"; \ fi; \ figbase=`echo $$fig | sed -e 's/^.*\///'`; \ if $$figsymlink; then \ echo "cd $$figdir && $(LN_S) -f ../../C/$$fig $$figbase"; \ ( cd "$$figdir" && $(LN_S) -f "../../C/$$fig" "$$figbase" ); \ else \ echo "$(INSTALL_DATA) $$figfile $$figdir$$figbase"; \ $(INSTALL_DATA) "$$figfile" "$$figdir$$figbase"; \ fi; \ done; \ done install-doc-html: echo install-html install-doc-omf: $(mkinstalldirs) $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir) @list='$(_DOC_OMF_ALL)'; for omf in $$list; do \ echo "$(INSTALL_DATA) $$omf $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \ $(INSTALL_DATA) $$omf $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf; \ done @if test "x$(_ENABLE_SK)" = "xtrue"; then \ echo "scrollkeeper-update -p $(DESTDIR)$(_sklocalstatedir) -o $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)"; \ scrollkeeper-update -p "$(DESTDIR)$(_sklocalstatedir)" -o "$(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)"; \ fi; install-doc-dsk: echo install-dsk ################################################################################ .PHONY: uninstall-doc-docs uninstall-doc-html uninstall-doc-figs uninstall-doc-omf uninstall-doc-dsk uninstall-local: \ $(if $(DOC_MODULE)$(DOC_ID),uninstall-doc-docs) \ $(if $(_DOC_HTML_ALL),uninstall-doc-html) \ $(if $(_DOC_C_FIGURES),uninstall-doc-figs) \ $(if $(_DOC_OMF_IN),uninstall-doc-omf) # $(if $(_DOC_DSK_IN),uninstall-doc-dsk) uninstall-doc-docs: @list='$(_DOC_C_DOCS)'; for doc in $$list; do \ echo " rm -f $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc"; \ rm -f "$(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc"; \ done @list='$(_DOC_LC_DOCS)'; for doc in $$list; do \ echo " rm -f $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc"; \ rm -f "$(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc"; \ done uninstall-doc-figs: @list='$(_DOC_C_FIGURES) $(_DOC_LC_FIGURES)'; for fig in $$list; do \ echo "rm -f $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$fig"; \ rm -f "$(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$fig"; \ done; uninstall-doc-omf: @list='$(_DOC_OMF_ALL)'; for omf in $$list; do \ if test "x$(_ENABLE_SK)" = "xtrue"; then \ echo "scrollkeeper-uninstall -p $(_sklocalstatedir) $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \ scrollkeeper-uninstall -p "$(_sklocalstatedir)" "$(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \ fi; \ echo "rm -f $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \ rm -f "$(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \ done # Annoyingly in the XML, yelp refuses to load relative images fileref, i.e. ../../src/icons/file.png # whereas the PDF generation inserts these references OK # Nevertheless we need to copy the images into figures/ so they are available for the distribution installed help # Most tool icons are _18, except the pan one which is _22 just to be annoying get-icons: -cp -f ../src/icons/*_[12][0-9].png C/figures/ # '-' ^^^^^ means it doesn't care about the exit status # this copy statement is not critical (especially when run under make distcheck) dist-hook: get-icons doc-dist-hook # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: viking-1.4.2/help/Makefile.am0000644000175000017500000000253112152216677012724 00000000000000include $(top_srcdir)/gnome-doc-utils.make # Annoyingly in the XML, yelp refuses to load relative images fileref, i.e. ../../src/icons/file.png # whereas the PDF generation inserts these references OK # Nevertheless we need to copy the images into figures/ so they are available for the distribution installed help # Most tool icons are _18, except the pan one which is _22 just to be annoying get-icons: -cp -f ../src/icons/*_[12][0-9].png C/figures/ # '-' ^^^^^ means it doesn't care about the exit status # this copy statement is not critical (especially when run under make distcheck) dist-hook: get-icons doc-dist-hook DOC_MODULE = viking DOC_ENTITIES = legal.xml DOC_INCLUDES = DOC_FIGURES = \ figures/addtr_18.png \ figures/addwp_18.png \ figures/demdl_18.png \ figures/edtr_18.png \ figures/edwp_18.png \ figures/geomove_18.png \ figures/geozoom_18.png \ figures/map_tile_info_dialog.png \ figures/mapdl_18.png \ figures/mover_22.png \ figures/properties_degree.png \ figures/properties_units.png \ figures/route_finder_18.png \ figures/ruler_18.png \ figures/select_18.png \ figures/showpic_18.png \ figures/trw_statusbar.png \ figures/vik_new_route_18.png \ figures/zoom_18.png \ figures/zoom_status_popup.png \ figures/Viking-OSM-CycleMap-ManyTracks.jpg DOC_LINGUAS = viking-1.4.2/help/C/0000755000175000017500000000000012175546637011140 500000000000000viking-1.4.2/help/C/figures/0000755000175000017500000000000012175546637012604 500000000000000viking-1.4.2/help/C/figures/properties_units.png0000644000175000017500000001331112175546637016647 00000000000000PNG  IHDRx6PsBITOIDATx}P'Cl TOPXHGj2*Yfr\Xu8mڱs4#E!1tM6$n>|w}|yv$+X,BBMޱZnn:0ށ sQAlݺR\|&[/ QxŚ/<)#\o% an`1AsСC555/a@ ~xzzzaaaDD[O*aG3,:,hWWױc&''gϞpvvVӭZ*..NRMLL哓EEE8'%%?~aɓ'E"pr ABSSS%%%bX,ꩩ)0ׯF.555::ZPf2jppp޽ 111wl{tl<4R*JF–GٳgOkk+Zwvv `VK9rd||d2Fpd0FGG݄3S LB1nzqwܼׯ_xo%%%d?PRj=rI\ܵ8z^.S%r\ ǜo`MOO?z!$J/\ZiiiC]qPLa؝;w"##M1335wީ뭷Bta===!ݎX,nKRrȕ{yBj:~I\Z\}y|||Ν&|kO˺o_._|=22qFj-KLL :661J@n™ʙXV2"pwBdCgff׷oj]]]ϟ?d\xw-BCC 8p' RA7o&_D+WXVG(>|LCnnu333 CCC 7|@!BoLLLlO:Oj^nꪬ$,W333fYRcccccc0™ʙرfl6F# RTyXXX__cMM_<aH$ZzuqqҥKoܸA]d 233_=99yӦM֭c4 S8S9O>D(DFFVTT,xz}UU)))Tyaa-[8HnN<}pyyyn_8O_K*GyzbO)/66655U&9n`݌T*ռ@Qr'OPk+o*(`8l^f͟'4߹{I =X,jUׯF.55FLVsyj{ð'O&''D"(C4R*JF¢GٳgOkk+eeeMU*lNLLt|w[[˗{{{333fnܸcPwvv `VU]`/6oZMMȈhuÇ?lܼׯ_xo%%%dƹWB&`02E|>z^.S%r\ ^a6LOO?zqD")**ڶm[TTXnJðp\,#/^(R BV5--޽{L-2ȱc˃b99%/ʢӎwީ뭷BDNnd:5ΧΝ;"S;hϱ߹sd"uhh(6FGG/_N+<@L_B7_uVHyk#s,<@'Nb?x -2xfMy㕕֭z_|n,CPOOφ  My}K99͛Vȑ#d^4 Z}yMM͓'O:::}jnkk|roooff&Ibs8PVVدiݿgc444]~ŋ}}}۷o/))!xh4nڴ\tӥ8zYr\ ^_\vm``@(fff?Daf4Brrr#R BV5--޽{n׮][__On?{0Bjðpnô h۶mQQQ/^>bv^DB:.oj_}sUslwi2wzhh(*++롡ϟ?߿?6..zAe7III6}b㸷-$ߜO:ܜaÆk׮y/ݵkH񪖩P(`w<@ XrÇoݺE /D"9ww}WSSxl LChiiO~2x%"".""bޚMy;vhhhZ=֭[G~ɓ'Orrr|Z=00033c6JLvl6[eef3vǥ?,,Z,((陞sETTTCCAǎ<ٳg}}}ׯy )OV_twߍz_WjL&R4<<,,..d9998dff/ H$7o~w]6ѣW^YYYwIUXXe*edd۷/>>^zY__}72lɒ%/a8b*9O_׿ʕ+A7M_xQxp#bon߾&(jd7(<)#0}C8< \xRG x/w[غu+>n2Z[[F㪶˗/fffjKQu(`Z.z@cJ.\HLLDYִ{!ۮ]qPL GvX<<<>ZwS@DRTTm۶9?ǖ<ҳg^~ٳvzKΝ;w"##EI3slwi23n;ʳ8Vlܸ&JJJlα111XUdB,^mԩS6lvBNw׿{׮]=_*߹  %BP(YHtʕ+V0U >$GyoG";wnnn`0&{Gynꁁ٬Rhƪ`XXX__UIII'N?.--mLOO9 cT\\<<<8qAb:_nMSO NbLxAAAff&Byy믿iӦu-Y l2=zիb8++.hطo_||V|;|v7Q|Ip,XDyyynHpM_xQ'={fX>Sa 6Ʀd27 Jr\ʇyHy^ | \xRG xRG r*MIENDB`viking-1.4.2/help/C/figures/edtr_18.png0000644000175000017500000000067412175546637014507 00000000000000PNG  IHDRVΎWbKGDm pHYs  tIME ;$KtEXtCommentCreated with The GIMPd%n IDAT8˝m00\H `WV l@7 UK+B;p*F$9{= R xx:>g(J5̂]ݝIߋb9n:e E 80C94F ZKl"kL9d~<$a<BHK&il !#sq{U @Ϥp!)-_Z}=~1^uQ͸sIENDB`viking-1.4.2/help/C/figures/properties_degree.png0000644000175000017500000001001512175546637016736 00000000000000PNG  IHDRYsBITOIDATxkPEn``6 NIࣱu1M[#րӈ3 ~QfVyP Rh"P 3/Jx$%!l{Y'{?xz ^!`xHC">>Cf/(!qCIL0ϵHC4p1HCs4s\ \=3Se2c {|APX,@ S(L z#4619rGu)LnFFFAuuҥKgvl,X1)B^h Vxx?jw|-tQo9rd۶m2 ''' """BBBB0fggXSN38A|WQQQt:Bwsq Axalll޽ⱱ1#_repp0ϯ/++[jɌU*Wgg;BCCl2000upSt i+[AN\ #ڶmrQQQSS\.W(T*U*ѣG_xqΝׯvs\.\OL&u֓'O,i;ЯZYYںiӦ[//^TT7nܻw/n}vPT* EXXX~~=z-c4Dӟ>}KKKe2˫Ç%TJN-n.nΥK /^LѾrC2Lcǎ/p7n|*pƒ^v~=#%N}<Vroo5kU /eY%K溛hX,^fXB- >>>F/uM޾}[*677Xwwg_cfY :*--]n^MMM#}h4ړ'OǏm\wsqsh4Z˝/@IOO߽{z#[bv|k4j%Iiiinn.ڵK,wttt:R) q<%%%??hhhhhϭd9d`````)))6T*JjXLU*aK IfƄ|׉kp2 (/555H$*..NMMp8,onnX, 555&l9}Ynnntt4BhƍIEEEyyyiiiAAA8_E˱ǫZ ZGy֭[6448}W{Mbⷮ3o{YCesfZtUbbb-<3" Z#t=#A!A,{!A!A!A!χO9NllÇ |'~۰8Мh|ĉQ@`LW/g___6B˓'O~Gm# EB۷BuuuO>MJJ2l?mih.27o^ff&>9ydVVּyƘsq1mٲݻ.]R(7oet݊WǛ< wV|¼ٓ- vv3{= j:hZJuuqE"H$}g2߭r3Lw9r>m:;;we˖r#gΜxL&3668>11믇8899YPP" g/&wDhS >]|H$(`vn,++kUUUs(\yپ}P(T* ",,̰b]]]uuukkkbb"Yرc=ihh&\P(TT* M:B׮]7,rkOSFQ|bbfwuur6l`0Z-S*YKK (j9Nww7B(**ŋǰ#ǻpBXXBHѬ_ÇL4#M,=z̶:eS[A}୷޺rɎol6A,khh\SBGӑ;bXF]f t$drGXsP'6 Mn!rϞ=#LftCJOO߽{ oM2NwvvN 655ojG///V c+k DӤ!V,HJKKsssfddLLLz,_RmFGGT*JU|7o|ϟ]bqGGNS*&EFF>}ZL#рMr)jf3iȚVlT*-))̸8C[TTbRRRPNNβe5gDTa2uaa˗9NRRϷMA^S5pSMQ+ib.ib.ib.i9X ŋdŊ cٲe;wqLhG ٳgbb7oܴigtAC+TWW2?bF <ȦAbattcsȦA}]pp~$ɳg\0h E6H$7nPϟIOOih.@BB9r֭[32L0W-<}֬Y{+Vx\ihN Bl@PSScX2X7۷˗t:}_+-k y>OϷij x= 92f3Ґ^D^_@>`- E- Y SN-_b}8>99YPP" -E"uL褆|Ię3gx<Ɍ}a_\.L&;wmiE7o޼~zccF9z(555rBARRL&lll㊯511Ѩ:#4u_q$++kUUU ){yqq+W:::h4ZbbbNNk">44!޻w!.\h4ׯoYQQֶz#$0H$WjۨaG.aauʀo];%zJURRVGA===Gt a f +Л=y) Y5{naap‚{ώiAx;H^Nj5>y1FA:O?m\ r;j޽ZBNq[qܳgz\'oڶmF1q޽;wfeeAieBB¡CV^=mH㿠 %''WVVj4ɮÇ^?88888v:NT BDbrxZX?~JEhiif1E`0*++KKKO8a}gϞT+W`Ķ4$׮]422bx{QLL x-AHb222-8r׭[vZ(,,|2IJJ≯82$$$lTZRRb[XdIEE?`*~ ҁ`ιt݅h4EN`%/zGDjfΆ `(8#?4p1HC)jOPZZ!`?ne4p1HC/z<-߬IENDB`viking-1.4.2/help/C/figures/Viking-OSM-CycleMap-ManyTracks.jpg0000644000175000017500000030570312175546637020666 00000000000000JFIFHHC  !"$"$C"V!1"AQ2aq#UBRS3b$c5Crs%46etDTd£;!1AQ"aq2R#Bbr$3 ?!>e9^]AvZ(B/<;jhcL, )့~x&Mj{7USS"+,?EVY,-2iEM,2qR}\ɱxlJ T#,E`>{7UDS"+,?EVY,-riFVSI0,O0PE M0WT*&=v-p{[|'f>!Jd_eecȾ?-2IYV)7&y̤9" nD4sr*Я LgZcUVU7ݐX)'p<7}?(n#EVY,;L쬳X,Yތ y^i#U*eIM@mAfTQI5<*\b,A<7}?(n#EVY,;L쬳X,Yt\Hjz bYv_"^"9dRL d!cǴ ٸzҙYgX2/cV7?V7?,7}?(n#?S"+,?EVY,4F'R~xF'R~x=O|CgJd_eecȾ?ƁZ߲*OZ߲*O ٸzL쬳X,wҙYgX?]\I㿫]\I>{7U)} S"+,?k~˓?!2/cJd_eec@tor'tor'Xo~QG=VEVY,=zi2'4[A]mnok~˓?ǒz_]\I㿫]\I}# =71&P*+e;q-EfFnpR)XHќG1ěqq\_?]\I㿫]\I=#tުNr`Zi2rHE$(QpGw G&U-3Sn ܂9ѿeT;ѿeThAwz22Z9k#*H^(&ְe+$njeQꐋvXZ߲*OZ߲*O4w(?1SϑC@f;6,W_::?.PYJRFC!=l9#F'R~xF'R~x=l}qꨐKISOOdZi=M,@#&&Y#("O>cq"ώ/ծ*Oծ.O{FG?(tǪT+-^M PDzǐI ſFl(JEfES걋lmc8]\I㿫]\I[0 ?$G=>U\RBJk8~ z .P8 o8$:bZ߲*OZ߲*O{AOTs&Xr׾_{7U)} S"+,?k~˓?!2/cJd_eec@tor'tor'Xo~QG=VEVY,;L쬳X,hծ.Oծ.O{K O=Ⱦ?})} ѿeT;ѿeTiaGqYҙYgX2/cV7?V7?,7}?(n#?S"+,?EVY,4F'R~xF'R~x=O|CgJd_eecȾ?ƁZ߲*OZ߲*O ٸzL쬳X,wҙYgX?]\I㿫]\I>{7UA2dcL-gv R&tĹ]J$dzHy\sp7\›Αaf˦a䀹ثF5ެލnG)EÙĴJe[5fsKscirPsN}bý Z[}EY-nKctͫ2cY#Yق'F1I:|[IĐ3E>a[/zy䫉TRUө1f!)iڜFr5EJf;@61/܎%t*vު^pS11Q3ّlR[x5CU 42E CK:(Up-%MODhp%NgZS] ^8aǧNq(S>VXS2ACerM\5^MW-_n@,Hxx>Us-np:z}C_%+*?:1mC(* \JUE--DZVCUMQn̂k3]A$Fg>I=xEfBA>H'݊U.<-i޶:D1" `cV*E]Ntp>"3,bohz=?%) TZ>ǟg0'瀚PndAěl6ߓq2z,:5q^c,CgcX7+8Bs~xY>ǟWG(/.m ilZsO$vۏv5.]/*IB l#p:ک&_$~&'x|2j+7\誊iHD gϲ:5@Rjlzf˞`Ĥ~8{s~x劣/deE FuY m5 --,s4gF k-Xf7;Ih}?za<OMWSe9=lԑIS›%diY<u \)Ӫ%VYE`.P6<($5ZJ?9?\J9?ǟ⯧Efkd44]k23JCA]MDaIP#Dw`A[44_WBi"YU$_+v R3+'c޳}?1zHjA2H%L8ZHpnNmгeԢURBՍȸm |Dxg^za<O9?XX溓;zd9!ıR}+])V}?za<OJz3*&g2UT p:~Iv"z0YΦ̫(Z :u&Gf,T7$*9?k&M7RL)!bb r%֊ܻ,Jd$ש8Dگ=M>eGA QitoB p,E'0XL+CP,\\^p5lkK cIFQ]AQL%hR zn &Iv Cp!:ss| 6Y]5nµv¬7tRi|\BjKA(U5}D- G17pÐCRQ =v;O%d?0ʳ kaiB1 IUǙ#uz*mܠZčr닏c,k%61ɘQ奼lX}Syu9mm3S Y#\py} =v/}''9fWA,P+K"3}؃HeN0bs!Q$%7K@{wbcX2PR% )nc wCp Ȝ=O]Ҭ1ÕeuUIm#yp1Run-"m\;f=׶:W$f(餲V@${R}d0js=@ ܋OkMEQNj$HK)[Ojg U>6h+Z5[J}T&2$c'-m/3UTC H oG%5$T.ȡA-(ֿ 41|Ǫ$I4GFEy q5"k\#z\3"Dnʞ<ŰEqCHV>8M-P?F:#(T6cޮq_v ) McD<&B/m-*5WZNH>b2"+&ǎ 9# *-TH6ȴLV]%W-g;E'gA iËgF{=ʼncs^N͗O&@uF2+?gIAaqe1$Z]Ekqe`)>z)%vӳ'w GZIC4$e6M!e?&$brI;|}ܮT3RreǿI~X]Aj{)Xu' fewfX:[n7ecFm|#XX';gQMcϥ)<~XM.OUYbk\{?܌QҴwt?c>a{" NP̦ܠ٥".2(]ef.DPQ(_fD72j}XfGƀF@A?A T2"G7G/18&R&9$QoYY xs~ž_TL)5+ dXѕBn#k,6,IS'fU'WL+!zAWO$Fwշ;j @.b54!(Dd7xxdtqMpyNO`PͥҝKͿ,x+3ȫmŐ,"x#4Vڄy:Za AbVtчZ@ǐ_;j+%ەs YdqQGGUtiJYP\O1K_b3z|4k̄+QvseP<?<**z' N݀qe}.ˤ9-,YN77cH&)? O/>/fj́VϦ(,j=;p(IG!eOdta4=\r R'=8m`.̩'ѹ;4P̨'a>߁"cASM-n0H3N 459rT'`䆷̲ܗ&k3W}AJ~p-© NeQOO RL] 3n/aYU--sH/i܏;cwh ~QSS5>yS8䍙7 ȺO5T˩#^I"^Օ721G^8VW EpR"p,eR+'֤Ey. #O%FaY/=u4r*㕦t YwY5)H55X^E1$0fі_L c}o`rMyI,ɷo~[UPP 3:V /rI 9'J )F: 0$,GJ#TVl8 :ǻ`p{n bQe:[/$R頦(6ͻqY ikrTX#/U߸tK_¦-I=[=f%'>s<+քwww{FH̑@ dE $wJjA&4F`xYeHeŸi/dscx?~j9ŨHR-u l/Ӛ `UD 0&_]fѡE#ôn׶Z2iUAGJj* BrGo#*MGUB ̃,g9;z 5f.,B,<>ŻL:Lƪ\Z =-H6}ؖL( 6gh?wi5i*腹oOvwGkAo HرF i J᠅lZ@i;CvvǠ;J 0ѨY@V)>߇ K2Y[JOr{JV5i$*>͵ow>A@ؑ:FdP?Df7b&u]%2ANH1JE 빹ģae2u&քnv>u°K4|1,~#IvhԶTy 34l8zJ0 7A$FIu­*JҥLSk&oTtRHlaqS"FQ#H$-Kp1+v[6Hb+" OXMihWx+bD`rB7na/ywGJ[mt &A[MvPCa"9JήBcȵבn;硴 $yC*Fwܧ~mJMĤ7*I!}_gk@sb=KuGN&:%låwHX3u,~VsɱWUed~b~gj3sCj֘`+&T u~N0ASƣhS]S8z70ux RjӤIT[6'2$w}/X45s4 ܑR;L PeU!_u[af3p> s8bʱLZђZm@as5r,iRI+я[BOje[ ی7DRfzRE ͘o7ń5F8BDk<|5I R/_tfiDg=հ{`Čq{K[ғOI#݂-i!mkS#*O!9\%4mD(X vBBDں.+Uww>0@I`BY )_<Sk'$\*[HcyP)<3Zpic{;@>XCXig4Hj%rݜn|g'۶6feuHzZDDERà$}Ǔ+w ^-ddڊ8'ELtg!C Yy a([mђi ?|7.YL+t J<.-{t't2!PτfYqOm84s>B dX+݂ikhg4s#d~$|w`->e$44i'ddmT~ `zfP4N1+'Ѯ{A`J UouD$P%$)mH-A5RSz¿GKAWSŚI[ vxKcͥ _ E 9!Ji)"6z{}RmPAn1a\Sh5-AvQJ# Ye\^://TM3L&}Z#Ju&5n^9ȄƚPSVBa\!嬖'єXsn58ZvphNҬWx|<`fv vi`B ?Q~wfv vi`B ?Q~wfv }ʹ,c2gI5˪A"K(+PywkHycxQ"wڤ=NԚepP*K6Y t$úop fcFUv]-_2:ZˠW]F$X[\<b)jS tX&y%cQlny7*%5iSQA@T &pY ,j cQkPB v*d_ҵǦB# I{\qowNVAV?*rnEO6ݔP*E3nX1 5x;,trKڸ kߞ88Ίٶ7ka\ʃ,e̳ "]+- x1Ef">xD⬓>INi/^<͎2ldYYɘ2-#Jjmk .^IA,Pfg>4%|3LZq/raJf qc-=JأK5MB;ʯf75qY_ -^΢$Vll-~+pzj5R2=ܸ?k갔E~lNj(iisJC[[B1k{q$-ҥ<{c6~>xܼn:vb(;I$'{AUzY3hJ4QDjB玽>#*-M ,-޲ )jG5v:* Ux ?\h))B.$N1ts{l+ag0].뷶ݺ䒚X$seTۺK"e< &XڼVKL%*hb]+db5uk ]g4DH+v~ [/b#݄iwJK(3QN6q@I1WISGV3T[ f*(@pI8n#Zr3a* $Rwv$*pvn:ba#nhH,\W&5rV]=Uw,QI30\X~!GO$$o<ޏY .H<`o5hSoSJ*#y0/e SӄU_lZ)RrY;9D ~,欺%!#݅fɵ2r$~,=>XO#v[qK*#3C-cVFta$mX^!1kZs-hm.7xg,||v%temS9#>=0 u:s=0=Ssqd!(A/n<8ȍT94 ՌS׵I!={u&jAPXh])_iZqk۱>}J~GϢӹ%c20dxYPnlMO7$)e*Xҷ;ܳd<,o,gze/Ms9-Lb/&a 2hʹnYGS'dUmͽq?U,0qZ².*p{ǑBa3RrGX@F5,#{1R?a֛:vScTS8;7[oZβzx6A?wijޝ$|6ؙMQISdvq 7[=^ LbB>bQ[Ud2f2 R FqIUY$y?C( <~^EvB'Wd  GL3Q=rFmARd97[`q.)fbvWl5E!a{݉@ |-#OBd+ϫ{J%'͍$Zf7hަyÑ1mq*l@HwY7}hc #n?!8Z+Ev#`C06o u ee?P?LuAPǏOā<σ'-͐ʄ<ǫO3v %^qfkԊwSC) vS )6Wav6$ .ĭdӰIu%;ZDYT0^#l nukYAU3OR#1,w=ke,+pH7T(5^Z#1fd;9$Odı==VK|y#b?L*4c$d㍑RRnD+; $vGWI6S:ʑ~ NL78ϪOYUO>a4tƱVCU]ṰdZu2eZ^UCڸ?XGt__kVgBw~OٯߌRQiU:VUVKG NS@D3snlp;N/> W/m,l/uĆ_k~Oٯ߁Zʭ!!.H O 5S39 -*hiVy ⹥)47& EP$_WEiztHr7m.][!N8}}/(1g@˛'bBTxom,9f̫94 VvQ4h=.b.jQ4T},lA'qGa`؞K<_"4Wfmtd,ƶOcÎqst& %{x,pSh\4QٕNZcjO 70:\2LVj JF ƬLwXs}Y SRL ,#ǁװjq ))>Y\[^se),{ aq V(WT/P/?=9xKI7^I̖2H7ߢ2~ZvwfN|uLC_I噅%<ߏǮ+ڗB9M.W'Ϋ&@{4H١kFi6<^k~~}ips{@9Iw*-JH3=mKE:WN">;NQf8@@n-k8ɲF(&R(|[ÑW_V7袐HA# 1XȅMY( ڌ_zPT@X[ KbHxh$TYB<8${Vt u)t^PF–]eQfљaU@O;?Ȣ͖,N <7/%aUP+-q,m3D2)ao{.j,B?m؅췁=n#o[Ś!Uݬ74MEW4,"@z,|z +FvF,pk1ZU'" į.#"z-(V~t(iMf?ZMHjwE)=~C#*x!2HX Q|b9Ͳmec9j`UIuOű­(d0]}W֒mU?1JDa5E -h ,o2YY;:أkc{S NHQTX(|Ž0zJH*kohá3tyiX'z,>~l*BK-" *S֜JTLPTcWZ8i`DUG nQ6kXbqwHKYX+Er0|ptBM3Ym_ O}1ﺡ[îoziI^TLSv6}&P܏#JR`FDfmܠ$) $,ߛ)<|0~2,a/msU}(e3!l14()NTX}QTSU剝vਅgH6\xEFSuejDG~[D0rrҥ*`ȫ6NbOP|d\Mֺp굑aR{^~muMYBHv_GuL͗-#̢KH{GKzi:5WkO6F%#!ܼ[8w<.Xǐv:IJ$7_8N͒MN ,;T,hȭkK}`6`đlUJul Sh@w`a{@"Uzĵ4K,KOT:&H24 ~A(E\*_YwRAY'|8" J"zF8)_,:jN޶IraY ;)kL'Hks("q r59t-nhCp{)HE˝M!)&UXv$Zq׏;} SytGU<# &4\ Skev1gj_Y|$XIi6 r{%H3J3j[z*UlK3G *pI=qf4 oUr$IJB*%`ctē`O$QzB^S`ݙuoh<@lG#RCMMZu+NN화/xMXqD23\bp.M͆!hV%A|(5:0q֐$ BQde<Ԍyc~-8 º? tr=^I$p88r`>Xbq"ǿ,Xc-ݖaZh3 i媕]"KX[q,ҞK[eRQ)a;}81I]I qSMKU1wx:.薎P>(VgQYGN#7(JLj۳d|m4F]ӳR-<3K}cn,nyb EՁ1`dT]>%(7&#*~5ӂށ'k+>'$sj2 wp3 )'V-b)KR&Ӽ(M:Der>ä<~9*V,FVIh",9I#!T-,itS` R_xu墨ёdQ@gVᙀ uAѪIJȀw8O )VS0*CAC,Gb]Cۺz*1ԲpOdPZ4é<_ -*A܍@ĆI+kb{CMSQ$Q̌_U1) c4> (W.0*"zs~8$rLhftT}۸[ Ƞ5J0=-{yŵ\ ,13Nеy]*t.mSMGIHb,^'} 1G DPv@䎘ŔWvwI{ݰZ1nm>oXӹJRǃ>Yh#*I}^i?> 3C UPD|?j~SM!eKbp$1#uE=28j)3Jܽ**U,`T7$ݔqaseYLږ,YYꡉcK,&8L:s3eϻB֗afڅ}kU*Йm8n’!H/C{o1˧ŁZ:E1NZ.-clS)dP S{YD@2G*.9Q>_= ,UDL%Fܲl ^Wapx|]%H(Q{Xi}6uWb3<֪TR8)#pA[hDPeTձS,Hrֵܟq8m'I5e$b$2F5$7~%WhU&yfU iϩ${[ynlI"M"c0.7oUG/TfG: je|*^<^.xќ(Q ~aF #odxn*c m?>$|Nn%,IP k꣥igz_o爯DT҃dXPT5 pFG7E'o<o.nB|td7AF#EzvH=Rf oawpPi6HKY7o%n7ck&o,Hy}r̒ѹpc쟇ęt~)=QH}iW2zߟ,,dUz35/v^}/݉pXVPۮ?d;O{X]O._KISG,}:}^w"DWRDI>MEE # ckE⮕У%DFCwlʦ xHcZ p~(#f#rl.|/CP JT[~GQPvc%,n{D'fXaa]R?m!by7GwzKT cgJܤV*jlS&M^B?JG%d⟫E^gsÖ籂$x_nq/*ӭ.Z\#y6<~' r͡<\WЪ<<~x]1uЊڞnh]#P%r6f8fiT{ 6ߎ,D΋f펅^`E5];2tw>^xnѿӧ݇\A[ ,$q׶6حzH:%2Ii#c,Y;Q|07We<ȫ2\$y ލ,^Hi^EAX%)y;c|̵e˳, ෹dYd4QdzN1&*y*t V}(IgW*\j{wNְ,ҙ.U9~k[(j[.{WA6GT.M7}?RT4A -ĩOcgKk 1q\}7LaOM3;[\cJP68dH7*:9$bjHE)uĨۋ8ek3*.0|m~1UZ\*iWHKj^~X-^`6oeյi+H>_ƣENShUS U,^`ZO_jjE\ƺNbݧt5kt%hYb$u[@P'gـ6X%<[$v*ajsVA\@NTʤEd-4@w|̄~A̡D}>VZڬm%IW*̞H7Q[r?Uer8`j/KY{Nb-;,{yindUtC 9p6' K̨d:@>b瑩N5PS"6ҡܾ c):$@46[MQ`zZMɈ2h Ӳ63kd,Ćv(fgǮNK6t6y -R<pmG_ 2/:.l49W$z1_Q,t;#P։{/1˞y,`^kw.|ր<;ֽ*yGplUFKkQCM,*QS d /v T5Ҳj8%*{$B,X(Ӡ`6k7! Eg$'3Py BME:1Kj]r8Wm=ɳzdeGI%XIH9C=9Ng[Jt@F]β\/RB&A(rmuU~&P*/;IMAW>vkqDZʖZXy/ʃ˥r1AxҚ mӖ8ϖ[ʎAP. `U' TcMN$--@$eh6jdHȶHe\6=*ʱX#h m Q*#ca#/ybܳy6!Kr;Z>9D 59,((=l fG#,Oì݄ƙ̞if9C+Sr ?|zMf3׫%nSγJeVH%_g})7R \Lj$YUlK \;BqXZmZUfNBZ3r:QPYQM3fLUdBRfZ-)sX7F޸BJU¦˃sscCS.l( E$HHѦ<[\-4ސEu< J*gBxg0{JUd5y4yUI7bfYXlm_9aNzH!bbHPۀ5vyn]E49kCY50fT[ʧA/yJnֶ,JOK H) ؐv>,1oxf9V|(*_d9Bxs෫%ޯ'ޯz_v z_~~Bq-~~w%!h^X\*:]IYQW@55zʸ*R; *Ep@/K*ҘUoVqE*std!gH)c2,8 ؎G$`R|‡RW#SeY[&9reh=#m7v@[ڪmGsiIAu fdkkkǁ́:W/JN]"В% vX Q2kizxTCvE{③5Ud*ߔPn[4G%[Ů7B[no BU]<9uUOkP"(=-lN]Ѹ[cT2'i!"IO5"CUOꚃ*‰n%By +;4\s8XPzL}}=nF>:zZfd'xKnHvKd_cf)`ҵtIDleƕcL!%B[0#CtwҼ/yOZ5ubMZƲ)f#$,~F#w6ݓs+ ^YxJ6$zӅ >8C"G#%XڈK߉ņ8L$2.JQG27Ez1>&ݷ5,EmcCZ4]hQ4254$hYDP<|1+4ZS22cm[ ppn$h_># Rojvm /ԁycm& Jo4>M ;/8rlEu<@˵T*y҆OBnx A#̪'ofEx@c!ݵ\Z؋[g)*iad&a $PۙZBwH\V-TtF*0oI?;Ynoг9Qf*+hhV@* { ߡ>xShI)`s*t1P2}wkAcÕ6?IRfFdwщ p![~]֎M2Č;(T~ i Zڥzh"" 8†G[GynqY+,ՉCe۲rF#cߤ??M%RX^xAc//?Hňo6!KC,wb'c/v2;OUfF:i\R)T'dGt^^"ɷ$ZY$s؝% l9EqSMژjA*d)t @#),n $RnMd†uw$l cz=[jٖ13꼶)t”Φ+.\I*HSk'*6SƬvSciiuZG%ϴ&sFONRxؤqW:`5Pf*U d^n> uQje07j>!3PYTn5aKar1 1Dd` +pR"ԙ=k%]>iE$d^۠$}׃t"euoN7l0J|Okz,>Zjw4}]6iRžDG%onA<.Q?q!,D3 5׭4Ei~+B do|<".Q3#1F* Anj@TVmx{ +Rh J;0H%,ajX͒-ı#$,-ۧ{$#7gr=~&Y;Kra%w \݈U:4GtadFQ^fڹ[za$v -17\hy; -H7$cfN b6_3o#TCNV}áGb{czTTKw@e9 mxHJ&pCf@IO [' lQN < 3}*e&45rN Մ.:8_};&nYm =1BL{^0.Ni<,j LQ! =x'l#fYh<斞Ie!)ਅd7r3}Uh$(@ {X&)2*_pAB OϤ[FCcΊw1}8>0W|71W2n8$ʑvfP>c65|Zf2KgYӠ33! .# _2Hy3ZT(η"Z\{˗L[{+O}<*ii3-Rӥmj<ƣ/⭫JpJ $H$o"j/J|V(9nO6CeY^(r8 R2O$s{|5D={ͻA꒲M$iÝߥ"2kDJ;Kqx{=0F ,Ieᰀ&b $q95 rb-?hM{=҂Eم›{d32 gC#^o8 ^Ef@ ?<*Hmv=p)+ yQAoR+ 65uGa#Xتوh&3&+6zVT.gJ%d^@ï8O9kYT>U}537^S,~kb|aGY>8|bY[U1em}ñ|: pɘSavVSo.i4l'L2^M 5*n/cc{^E{:IU@U. ( GiUGU$ "2IUaa;9˵p1włJwЂ[5ә-m, A>4R >XU#`Ys-<ːƫ!O=_gV(&$#5*A_h>بHRH?*/R-.! {6\zyĽ2H#ӂ:h{ʎ]P gy,s3,-}T gRtEZFV(.w],u">ow3QƩ$,fEI ST*wR7ok:fi&HcSt poН`yѓ\~E,7~֡0p,߇fd[C43H9*f,n {޹y5"cG+o()ٹPHõ/s,I*j#Tad$"cTW]M%(`m6B5gu$ z%DcQk9{̵-esǜeqɎeBCܵԱpI*m>ɇmL= qﷺ7Ӵ+QY"]xVc%E`08v)YFQ2OMUIy ;Xkm'Kt+H&fڗ sm'ޱ 펖68W|,/0˪zInbG#{%?p[>?O1޳?O0!jzJyR9lP=f:2*#iTiy:\޼޶,YA,@abcmjbhDs0"7u #eO6e&G[+ŞV9b^ѣnR@"`#-HC35zL/*7M.wQYR0{`{COrǒZ^M"Dz[دhsI)j |+U&ٶe,K( yʗ2ouMUx5 Dbp l>KHU^~ "<c4H[iNQ*;E[$R*ٜ+|z©{!Z(8YWrRE4F^BSF)#>: ? 1hLAoX > ʻXxEuQF&2;][E_Z()MʜsRY2E[oUL֔f<:))k6i`N YJ~cIBxGZtX54ƶ) `/0BfG d? \bSU<curMsfszO@#56f ~?1݂(ip%nvͯM;W T52_Sej^N%Kn N!mDq#dVȸUߎ<\xbd `R yZ(C:QUQ}SK$Zwc#f+i! [|A (:ZB zG[K %<3p0o7FSf0VHj }r{0!eHMzNA~vFM'W`N[NPԭBP"<'i%@ #+NZ':,*O,u)HT,f qn xFb`BGCG! n4aP/݉_O wkC?P/ݎؙDv~?0!SKT9Xg{ '8l-ָ Vi*y,tw`,1fiSin≤tlY^y֠(IJrH́blv| tE{ =IK_g}s1*'Dq#B)2r%WȂo3eHb9 hvBb "'|2ͫbP[ ^x!H.DaPe1`; TaҜHf;7I@ *k1d7"c Hk–/3?_Lm $ق5nkpУa+֚pDFf%:W 9*`'6|q U)=yN][Df E_JYu م6Li'݌ kݏ}c_wn[i-z>ǡ_e%*i0ӘI"D u)nv5ʟ &)wV(|`! ثpīT>6ACI[ 3TFC6xĺ0+3%ܖ&؝A IV,.ؾ67'po7)]VYO-[d0-o)~(r e3)(u[gxd<j$ku nA؂Ь.ƙ7 YpdbURzzPb=l6G%ŷT8Y]ʞjww@?dE|1{6e#^I8 3U$FVGa:*O $G s%*؛ (*8SnH$xl։.x}f~z=#vݝŎ߆Y40Bm 9vu^N>' Oe]J ;Iqxy}|suq5B!Y$3GF8v4ʄ N!H"xs6m_1Q $͸ |_6bob8mJoET:+H]#:z9lA,Ubr1;* +ސr-_F5*9%έ>3 7bUFwr⨭xA`OzdAR-YP=flQ"$whڠC׸BܻXi ʈ>*ODMYwm ՔxHԚbh⩨BRLf8S"gb8+r!jM2.k+ wo&'~^;=Rqީ~8OTmMRI*z⥢s2 fGI7cyZY}j$׃#;K z)n6s'<ɓVe+ew6X*lT[H7R2ϪuйfSYQ$Mc$E$ ڤ;r[&Q$EYoy]5&Q5RRE9zWl`^nx'*‰AQ`ƺU( P wu {\yenUs7ϼ)iP1^vbޫ4ice7e^cĤ9P,J~ȠZָ?A7ok*fw0vh)0TlMOǛ;Q1Kw-ْ} i PK,C8fC$ Wؒ'=M@ I#  :HTUzd5-F}Y5TVFn 8@勆Ӑ S,Sm0ֺ4fCW245j@y40xc3hzuGx\,\8_n-n5\l*jɢ2Q s4ݭ2ȲȤ܋HH8[`tfY ٭e%,yU5 Hw7g+t1BD޳z4d]V*?3cdi r w 1+.mTxx牕G`'ɣP%5hR9eu<ߤ>"0#88}dҔ܌]e;Q`'煰P4Gv/Ħd+5ȵ{)mfEtpI;;̒"| yNf%pBwYl<%E@"BpFr L5$QVB*S܀|: uyz/EKURR&U[h)U. -qKI  ¸[{: N^a1i'FUI#[%{Ob66'&H[q mc{6C(.v|4lyh1YT׊Yj; !%u󙖎hժ%bՕK_nҤqO8j);c'o 6zQ=|Hwr}ѤqZ׺=\ҫ.Գ_%H7&b/y~I5tYK?ak_l-М4M()vӲw$V*ӞLZuIS"ڳSjxR73r-c\p[>gI>g[JS1 Vx  yBX|=:HWa.}acR"D u_E0)cFvn7nM|2-)3mO*%,rȾ5,Ҥ乌H44$W%EIx늷EwZi̕L׹v-0I+Xv{RZf֝?EoV a<~ JasGV䭏\u#$ ";;ğBDC*D+ڳ#~O<ơV6oqޒ%nPFPSy\0!edXJ xJ zxy 2,QE4 ڐHφ!5 ^v `RFF$xFSXIqsuaHS3zXpVjmYnOytYّe~8ƪ9[lx[,\g2-'$"0Y{:;eY\}-ehqOKYGaEǍăz=Z%zO)GvƘ[8kQp.#dn )UuDD!T^[!VI4zFCETD\ﻋsv}G hUS-T5KcrmnCajE95(m#kF ʽaΓs\Ҟ2E(X!m^ϼQh:ZZs[ֵ3*TFYTmIj8(ƞI!}dlc!K!,ɲɌ9hRgQk&(d1:)kֻ͊Cbv^>+O4Ygt3\5eCYb?\kˢ}!PjBԠk0pz Ri]IAI(c/K>`Dh@$ _5Q_@Ҕx D$@c6GYSSGׇ:zCzcAkIwY6\ɸϼcxkV{KnFlUwjVAU*'X 8/= lmoc1.G#00.E~_IK삯,eEvwHxi JskjĨ%puߏśV2 ̶`köOWM$H6F ӠKWXUNWcOʦc2`X.e*} +EDqrj݉k(evqD3*|:`Mı m>jz 1Mlʺ,AxU}z%i%hr0 kwe.:Rc a)sm{M]d6JQKwᇕn^Am7hnm[IKUIURPgv6=qS2͡vsSTnóJkc.RA.oe"5+ʡ(l^H╒TEPPX­tR5?zOgU{qi%`-e>x4]#ceNmrf1,NI`Ex_$C4Q; ~=1[ZN쎵Dq<'g,h[܃ULYW*FҶз$PЭ0.Ǵ%IPrjX*:NU. ~GxsFr~ϵcj;;T[ kqrTҔa-34dp}􇄅k&^ )[ ,y b*Z̽2/:G 5ذbPnP M|RhuWZ-7KɅnY)Fo9_B  pDb)TV+SEm-6cnmRT-ISr:u`#&Ғ$=YiVXCu\;㖨^ {_x#|J>ݢ ;q{>XAʺj5/K+mf<#߮ ɣgZ;e&~s֡bhsZejmLLӴS(-SG|qPCL4cWa37  6A~l:x۰Q&W\GI *LԊm^Koce17BYwj<,jj Mw$π˩PGJΕ2IJF- 5]QSOO$eXn9gT]o U(FUu&eo;4,ep-z`-? -quV0Ѵ1Mu);"scq*]d1IGi ,WjE?U)77*-mc@6dv+n9k7\7`B I_-3>JzwE+=S_Łavy>]YH .VIc#mo *@ ִx"gkH5w06"MV{)a "/,7rٸs YR$- R+Hĉ3*`1`2]e 3fUQ :6|'[<ޫ֙U._%thʐI`$K\lkT TV2 ^0\ڶr.m{7[˫֡1b#b&lkBcE&V=aiڦZTa],@#}kC+A-N+mYف^BcP\n72 hvqqO6^350Ic$. dKO#ȉ"fV#e (zRkUPQ˚e5ɤ1Q|T%A/Z窮x)&fR#p9>qM$mb8\,\ƪB`ÍhhFqjIuCY=deyTJ A-rZ+IgV<~#։UҒiIyDc%秀$pNF+uU*4}(3T WޛVU$>u#ˡ'hۏ_!%f9Ǜ9BY茲%&_3JAEJϝKRófG^~5(i֕&V*IOX8ޏw\j:y}I8 0JA2ʡh;]tXx0sX] X C@5g,j<&6^-*hх1mAp|-3}!?TbbfM儑^OK-uFUA,wĜ|9mIǖ·r#m~#*p03L!U -bUkM{(tYդ*ZV^ 7;.zίM|ƃ3rR5JIF>x0HEF fE.S8J!Xχ(?ӜNOQ̪eUQ99^8i7ɩ )ҦH,T8n&ˊnˊ%[&`xFmjcqĊdž#S8e kG_,"EK 0O4$.!ϴ$rj;37m b)uox!AF[ORS(]ߒA7 ~VJ*[rm4D].U S㵏_~:B/^MwpAvg;I{eۃRvAUKN_:ٔ*HE9<|+>3Sj]6Q?v,:IOcr cj3fs*AHlc/_{%6 Mw-'& o@x鶊p^7ÑȲpcvOE]M[SkA0cű=#A<[t/;o=⸙?+% ٣#/q_iwBڔT5'^fh}{qX՞-@rUIT;Ӏ/!u&H|[}ؖᝎ!έ)q$^zΕ6>Y4̥'2ب38HSb:RI|5}!3# *MV9#:oQU#*Fg[Nj6q^m]ߴ9|Q}cn1̞Yдۚh-"Ľ9 F;VA,FV,|/ۏ zsmI .Cz,i.a4c- GM, h?ƍZ.KS٭$/ ^)T͸qbVXq&h_%V;h>VvUTP4ٜUI~Ƞurj'Yj2|.yʰ@A")tFhe]hCoֹ7[emȅd彐ͼN@{.E Y IJ}OI&SCӺ[xⷘPԑ!%W kw`oa|6a{h UA;+uy˵b.MF"݊vnxݦ9ξjzڃ/fҖDV_3]&cG$jh*%{o7 #`f Mht‹E^EkAR }ݏ %1wavρ2]˒9RYL2۸Z8&U$gڽHG < 5(=o yb&+vpm8vXaٱ6zDfbO F6,akrGL[) TGN}:Vģ;@?U\rEIVV1=0RƅK&k ?$ ]#3, m X8N[TU "ZcgA"|x֒B'V$bCD n8_^|n}In)$u*.  <d JP=\8cwW8ڸlGEA9U**quZkL0jF`0Wnqbۯלt;L4Knn.q{K:wVPNBU*8Rjƒ,{+{-ХR֣9L%!OelV[b<ce>aSC1GT1}RB*oqSHjhg4Rg){F}T ߼d-7GC MOJ==4-15d̈/kv[rRJ9Ѽ|% 'nFcAXQ[ nzpU?ƃuUjc|{[H!;*,MⴚsT-\1=KU )Y]cXBy<7 Ά6apc!vȠ I{.^\H$XAH;w f*ճ҂s( twdEYڥo]qO8\6c =6 @3n mO{AozjT=8*iIPyP\ |Yv_]s:JYvA"i駋&2LDl|<-DAZ#2dd p㉳*TD^9Xs쏇\AiP QQۊJ)$K#(sAL Dl[=-N[HUQ@*b/pb-2znXw³b/_Ci7ӗTDq}I !6/-8#(M{#HFqmYi A"尘%2pl1I2l].:>9 mmqP YoI#pF<̠FJa0u$aeX~Q ԣXk[~>e >a-+$?z3RO5-KK*#hP?HXy+ F.(k6BVQQ+(z6Z,WeG>ȳ=R%Z*ȑxS׭q,#U /3ҋ].Z2*r@`hiʨ#ko>DV(esK0[泊呟$X-].nO:{H%Q$mH784E,KKx!H?HkRuG=VGX $ď3qz`k3+hǸ}Yң ?|}I؝\?R~7UU)keiF$ *$Hܙ.wt>co^>ԙf[0C5=TݜF].[Ë\WejȥHdK`BCthB.9e}-Q5)2IpC3RAukqU+<^f IxlNف[!'Rj˷x*Vz,֥A$+xZ/6I#EH-Icozc\/5^!.~у*H&q \qol[5Peu9{8ҩeAE7~̳=/iI;XjVBkykeriH2epesk:tĚɑֆxTcC !XMM߉>Cq%P{z?! FwQlU> ߊԵg]RPk_08zwܠ2,+4 9%(;9HPR,+"&ǎv ZH^gyU&k5|3t4HTel\iUw=.<9nOӭRҫ;YX}Đ,PE*#_Ex*uW2z jnw3vf~pIVsavzs:XՃ؍s\,{le2[^ӯN`j5!fZZI`̽3,u rvYIZy? xMI![.17 5bu6$'BRϜ@s a< )G?5|YM Ȳ%7h]]χ /I)sTLnSq] <l1,=k7)#7zH5.m9Q)X Q즖 ߠ<$zz]i"k<@c<M"HF$l-JR;(#nj$+~x͝n$H} Jh(`z |Ēܙ N'gzXAK.CQՅĖu:G//5oUg.MՐ+&ƪa՛RY$2d^#ӏKpAU$Z_)sF l{ R5s3M6]ETv4Rw,<<>8'(h")j,]-P1CZsML/;:ؙrW0bEK;Dxems-cGEI=|ϱO$j=Eَ{&}UEGR㛐=طCjU5=}4 PGPfZF, l#Fߦmb,AGo<ʻ"z%Y(fHwF` 8^Xa,{ ïLX(a1+{u@FC q*GUx&*o<1wBma+"sY wms5KUTHŝ :7LL+>\2 I6r8wK}gl4Zx2W+[g]ow_xellmNiY>.cM\Ϋ' ä#K4>E=H][_i(c4BIJ|E$QKĹ)^wFtʱwԪ&{M420܍mF3M6Q~TtsM"Q}OSZ7&2]Ef3ʮC3e))Ec5s25Gj·(%X(sIUSXi$`a# ` ŋ%@ԉQ]y|,J"/;Ǫ 3A< `{s jE_A0Uhubq3^gZ׉( 0@uS&2()+qd^)=$PVJjudzǜOY=sG(S]8-2lkc'>:?mk&߁&-OjԵ% K0 ok<02i&0]L,Q|b~q`C- H -?YimWXkHGi&OU*%,B8&YO[x㣄w^ 79\Gך-gB߶Fȣjoyq][z MM6kyVuE ci 6Ưg:QU]J"{yJccǻ4VN h#^?#H#Sm6>XJyXG۩qW8!;ǟ[+əQqLe{Hc nUn)(xčeZPb<}\ėHcs_^gڄOW=gmp@-8oU[oDCO"Fa N<qb㜐FXV=*Ae'x~[FQk\yyNϩ4)_P{۞d5}m_Md xUse~γ|\3UH(t!&( m`~# d{Pj Q"TlY#6A| ] )&v=0Q;^^HZE:ksW iȑ\M=|5y݊g|vn<`[8SBM5P噼SV [ԧYP qboАA˓TLkLTJPA7=/t^@25&WVE] mҬ]!U;N+HWC1iL/5\ܛ\ܒKiM=W2G2UG@(@边5EY,HQ6+Wb,@aa` ڞ*dhFTHQv]m4O̎e.]mn AtXjEMlGQ=щ*w#ՑÖIYPՖ9Oo]YVD*}7&3-IZS1#8a;в);M}hHih򱗭3VdSɸ)]n =WE=a4PS %C $FR DžTd=%*L=a}ܖRVQHg Dz_Y-Y]IeZ)*cPAخ {WLN"Nbex\?X6˪3Zֹ}YT)P;ܛ1Xu<:h+jNxY@C0[!$,]oŸ jQoXUPOt{~XT Bj\(Z3D'ÌOB%yݎ2%J{ a` $e^ŀ<<7Lac` +t[bz\i)Z.8 ڞOeRT;49%bzo 6<@7$#4j6!Tqq۔+1K {|5*ȱ̼';#bQl6@#y,,n3Tu,ըj y\N*4ci:}SOeLRZ+nlʨX"f\BOM.#iv") |VDCׂ"T̵gk*U}o81-bg|]e+WP$wNЏ:|hFȫP5ǜ6(:)->l@]xY63%8~5s<̢:vٰyHkMfi-76݊[Pd^*D0%+994Mwň,/? +mC?RL(l.{tPQV,9^/u>DᬢDC`ôKުWQOQqNTtFeݽۜ=5#\1BrpOx9viA#@Vf:|LI=,䆆*h#W{wTy|1>/Ύ&!)OruQM~ǿmAnVAҹoGJI@H#< &+Z7bŀ'8SXA[CQ2xE~u_hB{<^$y*EU"*X=̶ Xl s J4JkBsĠRD7_*٫aY`fڧziQo,/CѴ%ON`S)n/&UFUtG *Ibl_(˝꣭S)vK#p=2S2pH[+\|tMjCDĀHx6%#ʲHk9.L;FZDҒ:*,4s2ԽC+[bәdzRv_J|ɵ)%%}XXqr<()#6wrly\/;8Cbw`w:yh!WԠYE]Da{x:.uettd5MҼ /r=m7jVDkz]CO(fo|4sk&e| xՋNk%|]f_5TnofR6~LD_ҖgMe Ej2H#u04MVXK4Иc/劖徕Zy.yzAyA7S{&+ko 2?/?MiU6GɚH NjЮH6GsWE2NETo/Gb4A sUjK" !n9 rx'rxhi-4dqDUGO}JTy_rqo+mJ03PC5k9v &[#md@E1QH  0/ tu ":TxOsjWѕǧ@aOb!T&xf =;ǏN8̒4IHʒsѥCलNe,)nf}~MYyYEG6m6]Py -Vz͚5zZjk< h6 ;e1QAAY[`ZFU0ap oH792:ڼ I =<ǃ-ŚAZ57bgih)歬:dBgwbQ$8Q.;F ƪζMLaXGԑ{TG ]. ~ ɫP-!䁄s^U9Y6z)F6Wʿ !IaC#~ PVI{q;&3:z:Ij*f8bi~X)W0jU=YJh07y-o&sǭ5赖ZL,SW7 djy n:q~D#;QA<`X"aIqF'=RS ,ᢥXiR=/LwO<MU6[ 7" Qz݇"HٔtߞF -/*KG,vdXv'xptjݗ9$Vx?>TASȹ8eh-va {mi=o3Pɕ?WW TI$lI ~6!;H!~מ$4NF ۭT2"),J;D5,7t0k؁%6w,gftTT &a8G}+FTkoc-u 0Vs-SMeRVAz;$==Kt#) -ZdP0 `IY1hA$no>0Ȥc&I"726 8i1JT^Xc*ONMЁb 'T Y",::7ֹh*hvǙӺnC(_b'd@4$ND:Qڃ1:NTfUpdye2SHbjoayLktʯR#rHY/Gs1c3*3S,P8U]ţk \k\_|xPH;G5,8p.x%@ ksUXwR6$Ez%hL-))䓳* ȵɹ<cPN:`=m|vc$HǨǎ7100{q[mli#&~K|-u(i O0({EmVSe:3zVE7*,}AŰ%jgYs"&he^uHz0S*j)֏*Go#-TLJ]`_.fiLcj6m]7m{ڃVdt&ᢉOy%yԋl9$_R5].KfHȢ*]6,N9llRKݫD~i>"8ӿj0Z-T+n0%jK DN=ݮ~v-QZ#ete*Ť-_+#].]M(V&wV07:xbad1}6oc=7,5*} Z&] IAsi4k#|F*zUHrfHb ce;)6* 7,Lse .>fގv fTX=|1B>a2݂>ޘ=b"GfP7X ЛZ<ڲ=E "@FxrpwDG%MoccXd3+'Ot6ja`ZYgO<  T nQ$yLAۣ A83(qev>3 *rȽKǴ>r6k[eMDTyQuRQSDw8OXrc8h(BCeF&ɵ_HOLTH]+Huž#=E$Ȥx4S/Z7AvD"x%f',a0HYNoݲ1H!X1&/3fUOQ'gS$PA*zr[ȻobC'H83ByVKz9ɞ x;H]vTmhkqfR%:[ŚlR"jO R aY63P &:3$|ީdlao Pop!E4U6]P'<sdO[ks瀔PfVUO$ R:2! k\7ӜiU̇NŒQ:D_y&㸀 XX ?ꏿ1>wOLv!#Qs0 y%psrOb} iWUJ3|Y#Fv1.Ѵ00]e c`lw-qog/ՒO#>ER>]A*ox;\Qrظ k@M:/&:=KR|h&dcJ,jzy⻜d2OP}T 6a+/XC*weWR.,%*Beauaa0A["<𹼰?g竕2} &g\dq[71ˑf'{d٥=oKDZ~؂(=/ÓV5SNGA^SM__i*! RF sk[ ѺcT5YKV`3ChQKf:m.'m+یMWOAW幮%Fm^΅B x Li$^.C8Knpd@DpM(WTT jOg,q!,+] +@`Ch| Pn"E's#55ETe/+X aYN䠜.W΂OC}5$9 ?fմ4:>6iϯ(4Z$kFEÚسIFp(g+q$A\&Y@q?Ί!CMҥ!3EP'={yu8ٖToTɵQ7|Eͨt&l0lžR,w'c0xʪh=;Ӏ!zzU&ɴVg<D\]^8ğG,CeKnQ/^kS %:_ZڹP$hzt7'+AUI>s.č ` KBps€~4X l+9)3-z4Ij#8*GA91 w!@o&e2eW_Vb+D-{8#hkwYQ4#/YI8=y>Pffҍ~vUtkEL 2Xy/ے(ĿY `%U oq!jnž96YEb5]-F4 WaYL3V0ro+xߟR/-Txe2+gN Z3!)|s[{ȂGcf?݋bSSSƂDOp|,;m; 9z;E$AR5hj&\62F3Yb,GعԽ<Zr)W5|<WY &%+4423WQe4j"ʣ*8&д&U$94=xbHH9g#|6SIf, XMqCġX>9Ɛ:n_Yn!K¶|aV[hrop*rXma;FP/ߏ&C)gfWA#% c2MGĞ :Lzv%JieK#-O>XR;GU9-ŭb/I/+ YDYN7t7N2=f:9.zAdH?!5N&i}A?hv:`uɬ%ZY%jURVI>_up@$'=J-Ae4Xk$(HP,: Kt7o2勜 Uk"q "ϕ?vZmE<u5Kl8Ǩ*g(j|TyYR$>ÍI;[2#P&aҥUGK=@hĜ \n.n8Z5өAO\sX =LM,.xAsĊji4qܪ+)0!QHYL9)̦X ] xZq4^JX&y2=By E_"Rbn2UIRFeM3P($,GU<Z PYn*$z(*)ђc=JK%Lpwy.XXö]^)J#Cb azy W;Lg9 "HK0Wcqɳm5 Ltj`*$E^Nii`ā,Qqekk{E .5VHP*\y)ͭ[Ǘ,q;V©*Pu)2)gPA& Zy kj(sQ+ P;UEwc}(eS,THalS,ZDqMT'>;\5y5-U3\k?" ~_ 3T|RƯ{[G}A?hv;`B"KQSLдhVt歒9Ӣ ,-ijiXh_r1X2e)YbjD%bg6Ab'Fi925a6PPXl픱/^7~I7*eWPGr֯Z:X٧fB%P[1gBI$UَOG<(4*RIхUG( W of*0ndmnDz<6iOA$&k$zi,yE8մdMW5:SB{0׶O4_:-\)O5L}wB KRNH'ccMeLzTzuދ LkGcJF_k|4XJ X)#j_ЖIKE(Eijk"*1-)EO@8s 5Tv`yy*`y䅱 gidC-{5&;Gll%s^HM/LGtd (ng\rGOwVWKm~/odޤa e_aQ$Fkn4Rg8&0E8kHCy`D}XuqmR끀Hi#26F` 76搲mT~k "[U*&11tB9XcZd2 cH"~Av#e\@`ݽbǕ.:RF)/p)E7U,p+Sّj䩼bg9 /aBךs-9SD;.$YN)Z3;)zz`=jXwes2SD^N96Dll Yhb2-NPy|;%ymZYzC%E1%#7u_Zz&͛w' a6985IR'K q^$TyɵD~$~l;%  #⢠4!B'm>X򺺇*j3:ɕiNY|ɰ,zҢmMw VVZ^+xk zֱԑl4X(KcUkt2ݙaa; q勢.aT#|G_b>IDj,ͣ,idREUfq \&)*x <8aufZd6SG#L) f~%LF*e6#Hc*%ŸIQ :)7'y!-)6 "n6=<+V5yUkM0Aca| UTX2TS*B435ȫ4*b&> ?qS/v re<3zFI%P ti_Ɉ«js:<+$jexrnVjŠ F6xp!n8F(W%E$'=-9ycf\i&t+ $EEn7cas`Dlʭ -ej,PT9]L3CZ.;Nޗ!xMS5D* (ドG%ib;$aϟ'q]ajqk&bEf_(vunKc?DL>n2rV5< |.mQ23H^a0ʊ)RE®y#am|C*rXnA QP!x̪$m<$ k8ܪL1OANꪌd7GKs+wd!=}u1Ϫrభ dX8 RV%U&XYP<1&nI@6퉵%րi ®1f%>,,y$+=GiPm$b I` yሡ=k.޴A+kF*Ô# R^m9kG凪IPN<}Hd=mELM;*vrYGtbKp卻Jab.b S>e.laG4PZMY沆O@^d24Ӱ+~/م7eZ"AkDL=:f+ `p,w\bn')ePhoPG{m 7\sg|˔hj~GKH&QF|Pgybc17,jǽ']=,Wpbo~"O 0G4 W-ŀ$"oa-m{e7%l1CC;"//u^IvnᎧʫ "  .C4Cawrmljh-[@]I&jaq.d2D&ƻ$]mcr]9)dߖ94Mjxwc/Dе<=ufYM=ovXt =-}.ewz ޅ`.bA$ ?lp:y5z r {N \4R=K{.*E@S8F} JK6콭%(._q n@abŇ+7]8dwn u(?zhٖTrA93N%|O8etg8 g$-TE r\xq㖒"k$ H2:t5y(>z}saYKI+FC K[#s,.̇ݼh{D[WG|,1P$/dN4<پ]sGY8kbTO2IGa֥lSF6 bOqZȲ,. ju;;Q?)Ȳ+XL,$o' +j\ c~ٛ#嶋YꞓвY'|#fS/%xm-htLB=o!z,,9%Ypbn|0#CiYۍtRXU7qϻ8ڥ|bʢ,x%( Puu!tcIk)d5e̤+tAkJ|8]SVyEMFG$j,AsdlMW;*uB~z66Ԥ]́!^Xq(kGኽ@҇AeZW%#revJOPuG2HB.>]:OOo99TbJ$鹷 u˛+]r5\a< k`HiKrzF7p'Dž| "i{Xv><m*SL{F#*M cg<3P2.K{`)W2) @6 Ů D[orjdiƞ!]B|hNJhh:jQI|7E5Zu`i_ocxC΄z=:2$Z91d六﹔XJu$Z{(}* =ؙ ̎]Y {"ℐΑ7ztл7hGBɸy[U*F "LԨLBH$60bX`EaJRW\J=T%]{ GEdpRPiYm.f-v$M)uԭuʽY 9ްyٮ{@A'Zo3@,8/59]KGY|o 1M Fji*&FIzfkIUT5*Iѣ:2HmFSQ85S&+.y(4O,ܒ' óA>[ =×lU7 Cf^ǃi{]L7G<#il=e-HL\ޮw;X|wez\SIiPNB-@"3-bb2 *JUTjeu $y..co+"#G[xV'4ԋ]6ն\ b}=>e@$O ]:}k0O,Q4.Q9b0wBDu}TtQP1 ,O9XJӽ'<k[#k։S]O$*rK;\ U@Y!"#djUScƴW i%=T#P@y8,11Pf3oy1Bѣf{IOMK "0&?٢z^  ARm;T{*䚎Kt9m>j{SN} p֜‰Lr3r vAH3JW5>iT 򊋬TM;[ 2KCy>ˣ kϰ;zXQcQ{uv3Mz19hi3\ڂ{sv-µnp 4x:SAn`G#謐Xtԙu^QY7~-\&]GsgYO*fdrvƋo3L-+$3K3= -БXc]u){4RJ|71@A4ޥVg/&g8@@NZVgefh1@=o-в\xWN):Mmštvq^waQIXew7 t&ˬh=~E2f!g~A ?r?!9#pqku_~iSeD,/kΡu[|lt˺:n՚A# GLޒUp H{zY#)n,^$ʲ3G5T<2XY=:~8&f"A 颫Dæ揠c[醟(i0F$*b"=ʳ}Mz<ٌ=(n<ŇuƅYSZO-vFfEu#uеu>[f?i45a݌nŌ3C# ] JHNwQD\Jqx1J\4wMHDd*Jx(ꡨ@7 # bp3tE|~jCö\Q777 v&u]xi& 95= sRdg큰/ԓAP4}FIzڦejӒGqtq ͭצ3/ErE.ϔ*k58-vN:GXZKsJfd۶78  gV1q}I*fcG%C#(OXM: ,^T5ԋ>?H) .lo]DN_5Lqn%K?"U8ڞ)i`hјb8V)4;ICNs`If?;K[Ff$(FNb`([\/{5,ͷ(^ǎ|pR'uS4z,jcMD{n8~Xd~\!P&qYS\lV^QHh8V c"$cnHfSe..@,a&89\<|V/É Uޔhh-0iJv(*j%*Ffck^x-Wꌎj*H+!n{In{hتk7$z[TgOYi,r `$1'Io>ȱlNJW$ H r}l 9c ?.:`~9HKWQŘsȿ fZIS-nD5BV s+a# C*an݂I!Py$2Tq,QŶi_Ɏ#jm!I$Y+ᔲROK[w.óI#&L)%y/eA D: (rX+7o86x\t V-Tuy+M|HG] q4-_dbTЄ-w{p [0N +VLѵ9lMdw]{6-"x޵B$Y"j5JKReg$?w`*lAImGST8ޞ:{e3@zÁ {͠[s slғטX6-dMl?R FC1)WS 5,l۞ i&(>,h\MFkAN"] y(>8W9r"XTDnIT ۃ|'ׇeVQ! ;^# Zx Gƫ:YLlla^?$3T_5.mYsdsɻ}6RҶУ vk_[=M=mu@FVg95ڦL* ͛CSLN$ɱ|:&wKv,rY{Af(+հ*112B,ڤhXTvNEURq` ,d %Ī:`<7bVn)C]wO{?9T쮢pJu"hWY4|7OM-1 ,@2͈M$5T -3QL%5j O26o{xc2#:FVdm;:пdy((B$o`sЏ|Z؃INӵ[}[)5'4yM@d wnZ#zMZziʸ>8w4 +kg/=x45|öW6,łF/: KD`d2.;_jsJyEM b5jj%ҙԐhJ_ 8Uj]OE%IOl:wcUnmnK-ElFd]T _WyGt8 s3l9U|hR|.E-us]:Ơ1G㌧ӖaQMeiCbA=Y֥j*L8DO"׿O $X;^ MD) :N׮Þh^)9Ŕ[|f5b}W\dQ*,xeЪ@>е54b9DP\o35 6>(!4rK8#ۄ[a]&ozdE1oFmo0vy d4vuF@;H$vS1AcqrN"C5$*eRjVðLNGqh~E!)ZI.J;X2~F=dܹ<u x$`/翏%"%H7.T);Ulx]G_ ^@h`U:W*yYS爺 :cCgYK2eުx=msSER: qPS: xjrM7={0D@NA-,QBz=(LHZDtcdQH'դ1"ʧ$#֜+lŁdV6|&2 7ZQnQ"8—E!cBБ'Ïp7Kq&Nv" ʋsr X{ ڠ`8Ld[7p4^h\00yo7_Fd?ik?|36U[Uu,jG+4:ʏr.dQM̫ՆԚ\*ޞy`{D-h(6R=+6'4I5 V"FrR~#fvFs 6XkR5)5o}ώv*:ڕiEuI)j @E=O&}E%DfQ5Z=絕U}7:}3QF}[.iP7h{:T@wp:Zs>sOMj 1d֐p<q*5,0W Q#Xn~GԹZzC2ɍa >cڈ,dB@7(ܭ2\upCDž9$qo7eIN"4YlK3?V@[S<*O'+c4v, )ek]z6cV)5yZ,eM}A-ȫ* S̱*# NuDzx #)`=-04mt T[TA `e`#2֋]O{vo݃9{sDk(*%xCanM)=lLrY*$(B0kkὮO85MMgLwc(B}ߵW'? w~v~wo7_ğP?1ޠi`B+UC[+%l'⿓('ӕfJM-*X-~L bWNC nvV:LXҚMTHĆiKw#Ŭ!͵Q%2:t)R״0vOS`lWf678a#E4[`T!Mn OE@ۏ cPg8#k`9[U{oNp8[zox8E*6G7z)Fnu׾Ek=TG(;y]8zwHi ۋyb5)[$Qح ï7dk2<0& GFSpMO^&5v'nxcAUzjh,9:1Z* d֔(J @z{E傠Jn1-vR,y*XfP7<ǁN~Ɋ:/@$qǿĆI5 6yFL됀өpA1gePuU2&^3xEX,4\g٦e ØN=m`d7_QtŞÒgDә%@":Lyt؎ W`HvsGG7' u_CLtQTǸG-7x HyZi`=/=5"܀9@6BJuD3bNu0QرUУUc\ K̳RgUٮs93::(Vm R5QԴ\^7Q.ǧ)a#N(E-A1Bu8ܺD)xP~D G|I_N^F絤@,4:OʣQǝ}+GVXi1E25hcc 2>Z*,XQfЏ\{gWc/c{Wʹf75$B Mfx,t#^'6y9r2Zy$hc#Y1Gu(,TCS3S+vwPkuf,@BkƱicnv,^ŀe_?< ı/))1M8⒊rPjzT]zuZ:eU$pEg=oVZ(Wt&釲"+QI( Em`nT<IdAA>=-lzU`/#݄D),X[1K+`БOOs2Ā;HP8-S4Dl\Xpk9f}$,:so~%+92K(B$ F^~XNW5eTvGI<*Pr|=*TQȓ'[Z} YjϙQVw̿3i3z[3 C A' #eu<z7H3&ʥ,54Ţ+S#AFuqޖYAf0e҉ AUqYe/qN2=_(bݠJq',S$3CkiSP$-q Y@<[(3X XbG[ܢZkiyjqvOKWп_ൠ+:'lPY=2YD9ܕgA`{ES\ik2GMeu4$ܞ+2?qP\@-g|?KrL5iIN/vՉŏW)nY#= nhy^F!ZTԔݛ7H19n}R&^qOB'1afAQ T[ȿe&~:8t[):z5+s# Yx1uKxYeK+},.ǂ=ʨ&hX1@O|mp{oR/㕀6ftN Ǡ!soIguPVgTƶ5PzêA֠M_M `3_K'Fgge[S8GHO2Ffg n>A;n<ⲕ- K‹OMhbP6l8|0e êzS-BC>8ja+t]Ҋv\{W4ZPP23׆"Spuj<ovq/OiIG`QSQ5-3M23Vm܃ͺ|qn5KQE[Tٍ4jN yR`0ٞiU)[بR:ڥWI#j4)IxpF~cƒ) km52i);)zhMDM?|!A'φL4QUȱ{}`$cWUnl,TŨef$6)nWmc8siNa %@*VvT8,,zr<7V8wh_,woSX_,woSXYi$d'JWjRBno^V$\ n6^cW]*)3Cq'B6T[o2P4V #3Oͳڢ9hN1@f<VM SOM-7yPL*eZ׷m[*ǕI/׳@j/u6kz1TȳT*{QM-8uh] b WiOu>V;ho" z{w|sJ(L~ VO*)ӭ-T#t=JBFXb0; ol]ҝlN!N:ݴFFjU&Ժs,35o(d]q`ę_==cC2feR|POպ`eOJLut\9guu-Qaxo TpW],>:g.H',v`n/3rHG ^pNy:錺\hTf٤ Ei7c1n)] C]*2ؠGUc~Xz.3XrVZ97ʻf?6 r ^\ȉG]˧󙱎F 14CYUQyL&I,Oay8'UM3IUf0p3HclM݂ɰP }mYG#AP>3rkaXP̷O|z`nVdgdSĒ@IF$9u&m(kY;X7TٔiKQmʲO̕ӱLQmmxs&A*A9x`]vh~cL(&lbѩƎR9=+7|Av%* AI1~lFGyM7xYTD$O3`ە!~:؜(bEU=#<\T ͉<>_ S6ۖ#g1Ҹo&b[IY_­Z4SA`m=TUеl3DȃrM3PO٫[.87v[#Î/K=8RXz`Tu,^eM`V $)Yk+j؀ M -v3FdHV3;SPE|:1])=$F*yvjCf7>vCH徎̓;/`HdDVd`yV<\$N W@y-:뎦#CJⱱmҕk{ HH*He+-$gSQ! CXk)brTF:g-#Ƶ<3v#d.oጺ#'Rao>Ӕ}4593Iw݅/V>gvyEP Ku8 /lq׿ Xʎfmexڵ5_r~XzV:gͣ> vQPTTcɦ4fb`NB2n?qOs5FCaEzPOU5<%d`@&s.jd i20[=S5~6(cfβ IPֵW'ΌEkB8 |o zw̎D}am7 2Lσ^+*cӱ!M?7|56⹭(yu-}-URG$U=hP3Xc"߀p=N:"S~l҈ջKm:ٓRE%\Af4Ix _i7ob=SMYhcN6MsP֚R}1.rjH ֺ*"1DN&hU]әw{EmͰb==,1S<67C{Gb&ivK2$@ַ9gl3ZEfӿF0*C)#ZٌB)i)(R(>$I=I$IpA1h?f0ϯz;OzVc ;wA1h?f0ϯz;OzVc ;w/^ֶAs *h(f%2! 56#?OOZ>יN(d A*L_\U',ּǏ2:3CohdIRE+fb },p@-Uo㊵6֙;sXER8ac[~7}+s*ʍ=䊇8l 6IykZO=a9֎JB$2DTbFRXG I$@Ǟ8ýg&ٸ>aɻLO-0]2PBY^`]y8x}}e;|/DM<2̂ic.ѲG zuƳ?(% on^i;xT9M;lqˆ%&@d-3i3(_Z1vK$kʂ}EÐU[Ek XfhNk#|' ;!,nJ#8ݐ4At-^Z1[.ˠhYd E 9et^,SKL4ыIn/?<5ZzW}7rOH&- JDh(K~}eH5lQSın¹P-$5u#s5$n4q=BI3cy!ڥI #|V"й=.OƮI3P,n$ktWb r,b̩m21ӏ3np,{ <_5m̳\-{FRz{2+>a՞1آWTp%*U^.٥ģ>DU7S[L()2%bljnMo$' e$xRl03.-n@h k{ѭ[BX7 lElS`9!˹AK-}uit]0ff†srXbњM4*vωR@!WO[y1҄PK;dpV $Tkq¨gN {a&qR)&YI9ijKˠ5ogkybO4cA0Oeu1VbԜXmc ]gD[d.fglAP~7Ero+:3{ob/X-qa"@b:1y~\s<+\"xȫ،DISZ|pf5J2nI/MܗoqgAoIHb]9&'&ЬkkM>mSpăbim O3ٕR1'6|1 eEnU V[x6)-VeVU[:O&Xn:ӳ -̡e_@uHM9eC stN  9~G7 1vP4L+S kO!5|90Ma,#ʱ??&[ZX59wH)r)R,Ҭjn,OCn 3b[yehǗ#Ai()fdTۑ7źi#&gTEc`3,rUD{<(ckKٟRg^Os;7k aǫAmT~0Ař@K̤LN'4F~"$/@]h4vMqrEǿx!|N<2m %L"A3؋ya<,3$EvW4iak5quoJ)7Uce7ЌW%(]B<(@׶#r Q.7ɪݒ*l[:=4[_=mRfjIůkX]uUTHY _IN#8~a-ލ\ºhs!v|}F?|şv >:*=Vc3VUQ죩Xv{'Ջ[mUfU3& ewomUTA+1) gYej'eVRvZ g~y8%ҢcnxtSQ1Hʆ Z|Xqvr~;wg'v ݜo6g7g'vr~;`B 6ݜoqvr~;wg'v*nkse4qYH>`~5MSP49J rx՘d~k;V褱kv}[s-C^idȳN#]S%IT>M*Q݋.gg,2e8tcLv4\v;4&K$gF̪=J_WYn^ vI!rD$3zI?shBLʝm7~;I')Z^jʚ8JF542fs.i9i)̧Μ?Xc!߮= puM6xnpAA S4J+J[ƀ7BweԔVPTvr{4 ߯8z=Tr* 2 Ǡn#UGEP,08):Y:t=9JKaF NMnC~)uQ1g.!Y2rZ͙+ĊQa-`o 0WQ1GŘa49{W[S%EK`Zϩm5IUy qY4T a_shIh* GO$k>ͧ3DyJ^3 y=GLhƗ/a`W׏ *ꚡxa,nRQ/8^!1GN#O GʖNl`=VMf(6ҭ @E:#*]-=(7 sOR}ጶ.6A-a@׉X%sYuĂQp7E=ٛ,yܻn{~V; q Z:Za[iX55XdI;u];~$;qFFZ y.S*)3A&7۸;H$qa=f9c4&nY#`A cSW 괝ES0U!;/}aܗM xv@ݛo88+*w ̘߶Hr8l- Z9-ϼn[ۮx`fu$&!o/1i=G#xb2HP_U6`VmEÜa,.U6[tB'#.m N\ٌ((,NjupGM"o;]囩8bJTwwڛ@. "X5`n:<#}K\^GKA&ܒ{R>"Tn[؃qlKƃ0dnE ֵ/saHqvXo R8E %bI*H¤h.~Xsg- m<[:uTK+(ĺ>?w8bPR-ZHtpB#pk"Ŭis Zh 5꨻QG<{Ľ7Y_kX(s:kbwd{k`{e䙋FamyOCYGvNI&zwuvCx^ŷ朻-8d8j6'ݢ-!V#NO; `<%x(,rp?2IIA2Z){PGB<#LUŸo~@-2O"bDlF]Թ$)TR%}4~pl2us'6Y%.#YbйݠccC1䏆YوlA ‘GI"8 =sdw^efƿy :UGW벌dV.pHdBg7n;ozD*̒2ƴthđ^G N؆cR,OOT3GO,R3?W@U/nudocZIKפ~yb5v;b{BW8y _IFn!\OݜROeƗ'%y-lޕ[-m+V) wCu녱6'vS[ZѳcAfnU94bIDRA۩xa\_ݜT֖4?\޶-˨z26A&@\+еl|MR-RSu,ٷ uu5fsQMil$1,O? 5dO'b·)Pׇ I|XgyfGSWG㎋7>w\#Ej "y"Ik<[Jh2qWh3JITfۃka\OݜU2Ij_&c"ZFwYcċ8S35#nbvT\XM>eK< 4FF=r>V̤ `ifZm:[QVILB z~11ZjIsJ:dWEf fOO g6Χ(恏m [O &CZIvW*k!֗gI3TI=Pa΢C6j l+Rcnó-턻e 4U攂iIڲ ٷ uþ8 r_٦L5i>Y@ H2 k~jIT5KT!Fb=~8 +Ik%RE8P\s׏%R6:,Yy}RxX#dSwa! 1a)aIx*Xn`(`%ʑC+3Qaůl^*v; j$O1.-<1Y-=q,DH*=q:sFRc *e"R ׶[㥭xkQ9ea%ː"8e*n;3U5Utbȿa&y)Y"ee31.Qu5E*ƗsyUp=w 6 S$ԔWW<INLj ;--ZӔq]<y [eJw(ʩrȈIHY|='aʨi&%![ aT(`V[߇=i+QՈppZǛ8dPVN^Je5j\i"YY^T-@p yYyKXPZ6[nB"[w hUOv;c]c!v;v;cノ`B!GSP<qu?1ءj*¬8ɒ,ISo /jtqt5-`#xc'DFɦbZĒ+w(abD[8,[7d*7ꯀÔZ/5-KMS0aҝuyќ /k-Jb{BW8KǦFJT D"Im+ ؗ =s~|괤RLP dr:bZuPA W\-kULm*!nm=/^W\BgffwlͱYO-5NiWS_<ANL$Hজ2MKLԻ-V*Zr 9ƎjME,BJB\1rx7\.S#11&ʾҢ!?2v*nWT_'c*JIuJ PVib:*+_EoWT_'c*J`R6sE4dfQEn$Y27+ʾҢ!?I=ހpA~pG t\У# '/Le_iQ+(e2fpHue,XWp# w:CP ĪtK^ѣ2f2eq6UEOEE&7%<)V@Tr 9LVG9*TV]'gz㈡[y33,)2JLj %^ͭf<|,T1f+bAϖE,M2r0lpspn!ym]4ӵ4V#f'0y#%a,1mIa%o&Tgb=SQLV:ϳuu!x7o0+*9*W6#[#=?~+#䧨Hjiƭpe= X*=uF2z: Yu&A>>X]ؽ;KM䣩nv!<{&Kvlp:;39\tJx1HM%&8 a ѢB,H瓈GSbHLjZF\<ڄ66[*J451j*yaJ#4k. +i+ 읐6cHcJ1YP=7y_ݏ;1f= D}EnZs8k^L{A\܁x8MNS|ՙVkb#~B0P '䎦4BUcf`^#$?優 ,n[ǕY~]QKgYTPI̥%# 9$*u%1Z*wȬ`[LhU6n=[DZ$`ȮŶm`])$Z&mN χL-5K3ԵFT-R@)Faak䎦5*a7}U tߖ}1}EB~x2O䎦4*3IG A l9562OU ⅍;`TGV b/WT_'c*JSy+R5)y)#@f7 ǟJf9[QJi@fRᏏğ2OTHΞ1 CZO^aÚPV~ʾҢ!?~,c*JLe_iQ$u1?G~o7>~,c*JLe_iQ$u1>W tߖ;*a72OU GS}W&~Xa72OU GSMcB~,c*JLe_iQ$u1?G~o7则_RrZѺUݣ`=ŧ錫*/Ced9QM U$67viking-1.4.2/help/C/figures/map_tile_info_dialog.png0000644000175000017500000004133312175546637017362 00000000000000PNG  IHDROƳsBIT|d IDATxwxTf{BzHW@@@)^(*zADA wRP( ]! fw,ly<̙w9gT2`}eB!>Z0^Qŀ ㍧[͗N!FJZJ: ΡP}|}WzjB!):= hx+t^^_RBQ'Bŀ ~~nף+USMVf: qSHHD ~pswCB! M&z(U). '62bI&++lɇIGfDqC!quu-@mjgm#x)vѓͩh~Vz(PB!ij rh<lu+@I/٨녠AM} \ȳKE_OkYD6iW!]sɸvzڵFSBV%:u8(>~PFV-ya"qs}@SF~p.n:ڭ#BK(bpq+A@o-( .%0V\= !J09^F3{黔bs߼nݒWn}m!d1FG%|lYĵC3K.j26 2FMiOBi1U>3ȏ 8u .Ju#BZ9h X<}, cX0m cf."[>VweރٍH:qFGp9){o66W0~^0}#{ֳ;KP" ԑwpTdMmҢ U$B>h2xc8Տ5ZwFO__=<}SWΌ4KZFҙ,;.KK-_瓗C{n).9ߠ lJu)+ .wy g s }ldBQeRX2}rC /q/1굥{]Wo4ZFN򹓉FNҷfrenmZӍݽP$0JwRz}z]!::E3tF(ݴ39%F-1BQR\\'0~ O˂i(*)ԮاѨts5Ow(֨q7~*]ʃywπzq%=Ocz/(*txGO'a.Ji !uÓz H9aN3,԰V( …I 0B; .3xx1@|Eop.x\"1\t؛W5JOᖖfB!9xNWKhmZlC'f弩4sVl;p o;zJ,niєQR^:])EEl{ wN*p*BH$^+ըQg_[6le?xS6 EI.۷bϿyz P((-)"#"iWNn!45"=q4H7/ʂ:W(\@av&aSBtu79!bvu0 6ӻ")$x !7.B!FBQG9.B!0B!* B!D%A\!$ !uq! .BQąB:JBQGIB!( B!D%A\!0 Aj_JKK&+3 ^_%B!j ? ұ]]] ?  B!DqBAhX~7RY]]]ISH BU#AZ?q| ?#* իGXX<{iӦFH BUAR߷o&L`Νf޽Sҹsg͛G6m H BOVLv,psvA۶m2d%%%~EP(Zv! n.T*:ẇ~X^ߧK.T*r B!-Bv=ӽ{wsitޝ2?@Co8m!k ?ϑ#GnM=ԩ 6ܹsڵ~B}9СCO 3!ăCquu3޼y3moATTɺ#GĨQꫯLg 0]FPp(*mBj9^4i&Oիr|L8I&o>t! ^{n:d3<Ü9sP(xyꩧL߿:{żBje͚5&˂y뭷iZ29Ϟ +3VkXP(x +!Arz&׏@eJҔ4%(8RiMPP}5IrrBʷy]xd=zT9}s^pjB#233V~*ߠAedgg-Bw[*,+..{ÇseqF,* nBOly}3:+i Rv-Օ_dݻs뭷-t* Fc#&&h{sٳqu-MRZ!';iTnol=ǎTSJ|| ۋF=\2UZ 777˪52sex(и׶sټe+{u;xT5#337{=.X8 >q+W?n M:H}8rZ>۵5,tFi4Ξ= oid83N@?@-uii鄇P(FÉ'iܸt:._J".._tZ'OhHHh\_yyy;vK/۬cV՜:u8C:wy4krs8q$ёDEERKoikm]q_O)-՘%>걗ťZK\ ]=h{/}segJZJJJxg[4I(ThY0wop^0p0͚5ݿ°^q[1r pyf͜Nn]8C^Ņ _Ȣsԩ6w3oll9AAA.Bڴne]jyvzi0{_~17ߤE 8Ю4WZe;ҡC- G7^~՝SڤM2vD Ǎ1~֭֏9ʦ @ӧv["sfVKaa!zP2m;?q2;m˓,.^d58wLJ~„Sx~=w3O?Eޏ7 𑣬_5g'66ƤZ;v2쥡&mգrYcO]UũSZx{JFϘQ#7w6j=aۧ:id {i(zQq̘ f־,e_}ȱq9 /]]mnC{V<}[=爌 j5eRyϟ>s3\z۶BF ykbJoƫS0q ))e߾,7c\~aT$XƒoX˟G^τISyq^g܄vkN<5K=Ms1l0؋6l=:Rɒ%K,P^=z-=܋/V˜;w~sq]K;}{P ʕ1FJ%~~~$%%qQnߎ'NrI"))QsiWj1/}z@vm)((ҵ}zn݊[om]?-ǡC gX"{*zz///ڴZMON˖- /p_`ewX xiCZ־mKky[;la`@|ɧN_)T>mFcag{G ==Ærplq{~ F`wz)׮RR 7b>DGGAZz:_1sY zn|֛c;|HJJ2 jgehnӪU+Nkf+ؾ};k֬iӦFN8A^8u|^}UHR_kt_~s^`CT=6<< (WW5!T* 5}pMJ5\\\X2E˖M[SãYqqXnnevubuzZS"gUe]atݝ5x{{ Ю־mKky[;laDD8~1W$$$qcFp~eǚk<''?3oޑ|[=6px}|#cg3=V1?n /t'v{O'-%ʠCٳgΜӋ;v[qwwZj{wcvv6^^^xz^?tcw'TKf p>}:)))fv*%1˗R[o-/{Q߆IIɆӭnnnܖ^GP#|Eӱb{qGK\Gw=oت*l޲pj\R荥ip6ZzAAADGW>}Z&YSt:l5߂\p5jH +)n9B]'.]ys i1:nfWx2^~}A+*..ڵT܈7&Q@a8URVʕ8t*,77t"#"MFSr-znʃ#woHݹr*a&oyIJ{1"kXU7JKKt2aa{Ln+sJyUڸ*,N#9%FCTda3WTgWOUy[:pxRSS/ ""wT*JJDEEWY/==BBBw=6mm;sMyuMJRSӓE07`R9~G@k@ʽ6cM*\"kXU7\]] udiX{_9qUXjCb5G/)۾*yKV7ROxx8XOBavBBRzNfw9۶ŋ4lؐ+W|Ż =}_9s&om?s>[""¾Q㉉ͬ'89n㛝e7<οf8gNG%00yϢK{^N/ר7w:^O;sF&B9?X}ۄBQ$ !uq!mM0=< zF !uM3 ZB!tBQGXO0i$V^]t|IΝkBOsS^K6sի A\!')A7d~ IDATɒ%UwԨQN.BQ7ݔm<(>h i !D5z=* lP9xB!D# !uTN8{|2M! =qg FmB!([}ߌNJ 8BՒYږX|f^^;oo/5l;hPyTn[UW;uhP(]cQQ1G[g>Zd~OmwIlL]~*gNh| 6?q+W?n X<ƍADxs|l޲t4I@T|7]={hhР> ¤vfM4looo׋gס35/v)Ν9PUl5_:))-n'RFAAA\v6~owzz13gJЩ;C2V=u#y*oOQ0l~E }ek+1c'NTT$Ædݺo;99}O*<.'j'm|aQ~v5znKlFPPaY^^'O"::H5 gϞƷ4*##oooj5N">>Ν@^n.͚5ݡcX<4 'NqF[-WlN:CLL4Q6 77^G`iqU*xxx|?h4222 dc*-XN:MxX(QQQTiZ/\4R-F 4>'j,:,oo.㡞=6uL9ꇇѱՆӧm/< CТEsz~L 6ɯr> L0hiy~s̝ll7q'ya{?.0a(]\ ,Z0N:h>6w3olylݺnݺ^o.[NPP'Obq<ݿDZ?6|$jΊhPvf$&6 Sbmc/_}//Ob LfMy0Z.]?feDDs1?gy ![6o4,;{=] N : 0gL:``7={}QPXH֭X߷GGńSbc| AAZ̀IHhMQ1bh>JB[, 8}:Ït2@̟7Фdj5%&~{"iiqxuk0uk4\;u4[o/_ɨ3j$FVӣ#l=}̕ȑlڸZ->r>r& ̳xƘͣ܃=ڬ99r-[fz:v+r* zínk'LʋC0x@z=&LV9G`+#(t:^1>X1ҴTܵ6+BXqy)~{P(t2q\xdVoҨQCZh770q Z&22°?SLܶm;$ШQCZ8қ&LBJ5|ٷo? *1GXv=*)),}z Vd[|3ak=>đ#G};N8ɉ'Dӧ-G|\I>_4:LHH=×"@>}ƥ˗9w< 0l\jX֫#i}'jݝ-[pl6-W> ׻[nŭ6a箟-QLJᅬ5k˾Z-g|1= ??f//z?III^BI6nbG՗gC߯srr|l-1bK<֯?yyy6j3-On?Ƚt"1ٺl`|t}]4x(={̙0F\r~{ g233tvCtFϿd sOG|||LEpRA3uLo 7,#**?_j s)))M_)JKNN.6>#>>OOO\M"1niVKvV6zy(---Bx%.r:DGGѮ]~}>EEE@){Ch>;w̢KYiv򋍍Y;zZ-o֭4Og=e\_}Բ[nKtr<֬]W]οBGͧ-[Ʃt 掖-x^h۶ %;'dJiYT*t(/]_|ezLJJ6ussDz= lqFʯeWDpE8y4/be5r99lٺN_|_ޛGNc㎖Ǚ=[NT*6mZi[K/((hxݺoQ$6kjNc󖭆[PP˖NF С=_|o;e-7?is]'^C/ԩӹ]'"IH'::|Q8qM`40m0GPx0Y$t5>kX֧x]smCP0s4^'>Ye8%2yʫtaa Att\EII~zT꣢]vDZc{1BBG˖-LX' t:n޽QXXHll ׍ƍoy'nTU9fnzR{cN=f^^ϲWɭ6amc۟?3&i$l?3-[烸qq*RRY㪮EMcvzJozLGhϔk/sӤz8c͊^\֯pkӳya_a+cZCoRqT*qqqDD[m~ھ0-&/|G`{MkmO]69Lg ΛԞӹv63xy׮]E $ue*RG"әSZLhM MjiR}Cmx#oV\TTĺu2F&+ Ǝ}?hӦ5.^d1ùs5s:Gl;TV1DDRft~ZKߜG[mnnzr6=5;hQQk֮gkMN}E, 56ME ΜZ3z))7ԤpUqTwuokAsh4׎6h/?A֭3fݖȜY3pqqARXXHn]&zrnw=hͭMYQM쩏h4nݾA׀438sjQ{Ȟ1rOMjk W^IQ߬犗bV/\r8ƨW^6\P*F2jx淶gIQԣ66g9KSVLϞ@+峪Az5.MEjgN-jt3=SnIa*{Miwh(Pֻ냲٩T4IMMETUj3v"׮fvgI*rXo֦6-g>~uӁAVɁ&%WD%AԥH͞2Y.NY֦ԼN(c/[oVT~<1|FZ/um@vmjhZ&T1~Ν;ǧ23}-ү Gќ{V ▦6V}\r@c\sKnn1116~x fgnNi*ҚfL<=cV)5v#o3a֭֐Ƒ#GY < DGGѦMk^;ߐv~~>ni27MhEzIq!.]^#++l6֦۴uz润,gij٪L 8y (;kƒ7z?}E&㫯{RTTl87}oWfIOԖHoke5])*,M ֧pu~ӜMi),b֜x{_P/[p&LMێ[oAXhvo֬orwwÀ6]ܞ=-Mmj.=[ᨾ}zs}?򉏏cٲ%v֭[,f%#;;3mDDvb/gW"VY=`d~'>S#c|VkVe9p &Mӻ~m۰@:ް=Ӌ.ąB7'Tz̛7ɓ'qFG^^>Q(Jx_Hn ls9vk֮㧟v^+<;___pkB!j{zzdr<0A!̘1F-[6m޸{x~W8t}}-[`+c>Fv󖭼8efΘ㒞BZ:z>DFlt; 0`-ZīJiiaDƌFFVnݷ }y|||  cǾgؿQ}˘Xp>}ĩ&=q!{>Emv~._BdT,B eL:u@ݼys[׏'% ú3gϡhh~m&y5l___<~°lO;65Yws걁ąB"{yٵk?8)R fΜiOHH`͚5r-*uQ%a/mpAѐHF !5 K<dffp|AzҥK fbccHIR  )9uTisOG$4f ;@zB!jgċ \SǏg…F<11kGjU~xbcc&P}F{͜ƨ1-84&.pfO<;+|,X/l+*౱1\RzIDATM7/u5D?r( g!""dˌS5z?n+rV}t!7̙z2S΢EP*,]Ngئyxk sAV|rz xzz )) FClL nn==̝AzB!jOb|ŸaklQ(8BZ:^#7oG&2"n@ząB/P-%0J==UjeBQkTwdgeTk5IBQk"O\!DQNWvBQk,_QĄB3ܒ^ܙ7(uڮܐlmB!nO{pq!UP(nv䚸BQGIO\!d4z =q! .BQąB:JBQGIB!( B!D%A\!$ !uq! .BQąB:JBQGIB!(қ]!BةZ0^GШ<IENDB`viking-1.4.2/help/C/figures/zoom_18.png0000644000175000017500000000054712175546637014534 00000000000000PNG  IHDRVΎWbKGDC pHYs  tIME e%tEXtCommentCreated with The GIMPd%nIDAT8cd #'1/ J#6aLPa`+ִA(|S{S@ 2&@ (@^/84y Px648t?~da{QT!KT]]T*Nŗ$eYEQDQqz z^ELFQ!W(rq$Iu]E~>>z$UUU-h0SAժT\YA (ƌ <0(bFd$F+Ib]5[<''| $ϛ72̲,q({xya[6_wշ~:wٽ}g`[Y{[MMM6mU5k{ϷyKKKͪƱc,C o^zO?߶ݸq?w+2Nsiڣg/^{`윜0_rgw_\sϜi„}N3cF=nG32,\ZZ6hv͚W[n%&a/_dqll̢ŋܺmۨѣkdppڵVۧ{u9O,8!##z2%չɓrss}7r;q"ʡI3  sر5k֬s͟>}چ|}} 6FXYZqlhXxrssi?T9rTSN {yIBcͣGRkV$$?~Biܸ10sΩrph2cƌaZcΡ!!&HSC&sΕ6qpX0$IV%ȸ>RM_VVVxںu"²̅ W43{ッZ)eqq~I&M$Lwb6oa;w| {IQI(a^E~7SRǙ{dsf:}999ǍQsqO^"ann( 0`Fi&\{e˖t:5G>9ߣgOO?"Jbee%xBVH}͛vQZZ4xR 4cF ^`y?kZ&&JMMڵ˂@X_ǎea&M~p=Ƥ(jeB{S?ސM7߹s8%دT*].ۧ˲ +ܹe;vܿ$|}}sOڹ͛/xwQZZjl=L,fɓ׭w޽A~~?Ap-[,v W o\jsfk4j[[63 h: @߽{!ٰq?|s-[efe͙YܲgNo~n^ K777C82u̘18k7rdaJJJ׿ӥ+{lefFFK-NZd)и}?5eEӁ'NxV66zϻw>}89::88v1ܣG͝oݺ ^ܲeݺuuvvs\M6nۺ>*z*hlEE(#BDQM̨~"IUUUUU/ţ e&Z=yAH6Nq)lieE'ⅵkVTϝ3ȑ#[>;qAN(E>˹K~fرcFMDH#G8.V6A ͚5cf 6XݷoߎJJJ>| _|屬c~󍍍j9>~AJ AAßF._±,M: VV"ZtO_/jȅJ̙3g͞  5>4eݻsn`+IB%$IG:iӦ iQx[ZYTZZjooߨQ#9MDQvRز?555#FdefS𙹵 9rMRҪ#wU*I9::ۿGEF md=AJ$cMPkw-KElqzjǎ$A^EItʕsZo 0:cH̬4&ӧwu$=iMyy9EQ bڴO?#C1*"hxŦd2-BVQD2F!VU*UJact`R2[70fiګw̿wx>^# dӷmjS߮UC=r +/gYvMQ>y6pkkkOcO7K̟9n||EBAlhV` 04 -Z|ĈA &9(jcc=q„%K&Zյkؙ(qsub:qjkEÂ'tAׯ藞ֺu+ ̟ߦ6mqㆳsxXXHXH9;9nZf0LRMJ36Сmڴ6Sfo7XAe˖Ç I~x҇NNmڴ8p@BCCcg΢iU&(jeii|iCqʰ$ S4/ih$ž={曒[ 2Nt?[$%%m߾}{۷kL(^zuPԔVAHKO3lH7$ؘǏ2{m۶|y3~ܸK%ZթS_|x`޶mdfΜ9;9:M4,iif6ؘ«CA7Xok׮ݾ}GmZ֬N ?tpVn366.k)RX8n5ge5#şϞ(,]eիroXVf]ϼwЩ^?<ϧg_FQjBP4M$\bvh[L$9w\-^((S7oDAzȞL(OA͛HMMMYyN۶mW>(Mӛ7mS.oڸ՛0c4EBg.]wy#Y`@.@4…})𾁄g ade$8cz@BXAeV-E<' "ESzSDeDQKtz2.ƏIA^)IҠqtwr_!b^ݷ췫ڵicccm2r(A;iPL@\iwi>!{a5o0`8!v\g [`Ph4DɊ۳oDN]N4G3 r|.)_4 %aU#%+dUFVcSXqh!=E鯁EwBk> ɃGNXt'TF^4]Uv\XvFo鼎Dbqt^<7bDwْF;cN#)*MJ =K7ފH.H:S ɡQrIENDB`viking-1.4.2/help/C/figures/mover_22.png0000644000175000017500000000035312175546637014666 00000000000000PNG  IHDRĴl;gAMA a pHYs  d_IDATxݔ1 E?8qu$^.bPR/5l2v;Kr#UžV|aނ`Z-8.InEIENDB`viking-1.4.2/help/C/figures/showpic_18.png0000644000175000017500000000065612175546637015225 00000000000000PNG  IHDRVΎWbKGD pHYs  tIME  4StEXtCommentCreated with The GIMPd%nIDAT8˝=N0?GJ6+P ڴd>UJJ. D8?'xϞX/ZUks׬wyA[W( o_]~1<ЪƊ$ LN`dA J:gTh~f϶- %# S-?^U\8+JSoJ"BDRoMʨ nxcxZjDOgIQ-\IENDB`viking-1.4.2/help/C/figures/zoom_status_popup.png0000644000175000017500000002725312175546637017055 00000000000000PNG  IHDR!pz^[ pHYs  tIME ztEXtCommentCreated with GIMPW IDATxw\Ggwqwp"HۣQvX/$*(ŠO51 *<l("b "R;n\;0yLaޯ 73|g-T?2J)(,4:Çc ڵk'ɰ5:$65`a01 k `0%"lVBȲ,0B333|q0<ϓ$))2,Ų,G(J"aXy:1xk[L,&A+++ 0̮]bccШm6 1LsV=01 q={$'' bbb?1 rk rD?W8p '''kc/4 Qŝbq3fDGGvssիWTT-Z>F`;wܳgObb"xf,n\}n}Ջ$ɤ$eQa .4Moܸq֭GE>!p^n]ccVEY»&~I&_ݻK.3f?-DZXf́~7!6ŝ+ e7oDo߮'₼fZlٸq ,Xxĉ8v9w܆ 9bU[ōIJJB.\Xd 555##VVVP(Іq `#q킢j> XlY>} rĉ={r{X nO:u '~!3Xۥ&+++++_~5 88ѣˠG Q*7y]/6mK{c/)x 01 5`a0Xc k `0 5`a01 k `a0XcS0~FP__Bh)D"1 /%d!%am 0 q\mm-~ cmV۫W/ èǥ:}FJJJbq<#Fx{{wuݺuz^(h{{{;w[kMڵkƎo:u*""b'N@Y׮]3fСC322bbb6o޼eEibcc,XSSSӿlduTb Xۢ`ŊhtkZR)V((K 5jVݼy… t*Lvڅ4(&&&::k (4M0]vڵu`kkP(rssX &OUZZѣ:Ü<==RXcm ƌbq44x`X,3QW;vlҤIN8j,˞9smgGՎӧ!CRRRsIȢ 6DFF ԩnnn 8M~Glj1 bqg۶mCCBBP]tqpp ꫯ $9rVݰaӷo_lۗ 61 k `a0Xc `01 5`a0Xc k `0Xc ~F8Nӡ2L !iaJF$bYyX,JA`;qrԩ}zyyBzqqޥKJe3gFӭ[k j޷ow9**kBq322F=i$Q/^rJR׮]{7^{5{˖-7o7aVZs˗/O>hXu떧gIIWII=9ABٳg޽}oQ4oO<9rȺjkc/.QQQW^]hQDDVK*++mmmA܄X܆0 sY <4n8͗,YC'OFI& c͚5'NpppFkӔreIyݝeY!Wp/A" pwƍcǎ8p@(iӦl{{{R6Ǵi.\0L@@{.] wIIL&D)/^ܰaӅXaÆAQ }[&0/>wߚ{_~-I&}h؉2e˗/={6١XӧO7]]]m{q5X01 k `a0Xc `01 5{06G/aPd%IR$G2`ڢh.yֻ֭$IR!J1mWc=|՜\܍t0 S|̩SBoU-i7ՊUb/o/g ln!Mh BXW[<PYZBrFC4M<ϛFsr9333,9P% |y'I0V80/M ;8f'04Ao#Kp[nFuuuA:vxy~… &=… N:տGթhBCCmb<3;w;$Ev w/mǚǏtҊ+|M,^Y\\`={ 5X3Z-ٹsgFFFBB/H8hB_}/0k B|u]:EQjUUH(5aۯ-[n={#222;;[R=zѢEr\8ݻ+W1b#JD?裕+W_~Сt:]TTTtt /\tRw'W?Zr{yhР={o߾#Gxyy?^p&ׯ}ҥKǍ? V\zjVBi4F<8@HRؖs@l͈''''F3ző]~vѩSvfϞlp{,;x`x~_&tJ%$?חn'N֭H$bY["<[XXbsssRQQaff&vssC,X%4jkk{ ???ܡ_\D"Oc,<B!o ~C' à^Q|^PXXXDjBHRkkkpߟ:u[ӷlٲo>tZy4&&746uE~3r_e+#D^lg1 TYs:-BT/SSS_.kSNT*xxٲe(#6o޼qE޽O>T\\܎;mlltR5kָ}(wddoڮJs{hH=a50l Mǒ$yP ڈ5nj3f̘rz뭷z4oV9hF0s̙3g>]ZK1H e0*f Zyx9c98 [{׃` c4 ӺRR!yOpC{;_dF3(Bt:7i$Iσ&sӿҫz By ݷ!/OK3ژGcE!ozzOiuY4<@a`0Oҡ uϸ%_Hkc0ь94ޡ I@O7韧0Uch 2^II;G$A$A$ Я?q I061`y >(ӧERE$%H :Hcgniilt!F by5$DaY7lJ7s,//?pY}3?W4H$cu݆sOG>w!mڕM<!{yx UQMXjca\*J$ӫQcy^ZEDc@Ey!$Le:{'{]ex,1XZ<@8c1 dRiVR2kkk _x΀yn#IJv6IPV66$IBbn0X! 4"}9(8X¿U1.S{:>2E$<OO%f.@ eIH@XDh^(H@D(%C<}q5FDή.7oިUߖ$OD$T!!?)l 8栒[+"xa MHdV/UjhN&&v0$ 2*j RLD j熜}TJ3A^)bS;eqE7DҒ^I4 .>y.+ |`G}gM[$;uz\. Pz呎~J+3B/ Z %BT ja]y-94)l}>AYxJV i HeR)hIQPK746BU:gFA=*bAtz❦`oZqvp-BIS7x:ȭK  ɤTDkt쭇 ]Ub[sG{gg'VH+h;sfteeUfB!iQXXc%GKiemh)hlU; >,BL1^A) Peީa^\بo}hZ_uonV m~kh>p};8ZJ8$^0" gٱ+UF )L$R.6Nߨe,l Ԣ2zX7fWDwrss3 /C=jTcZM@ϴ p,BߺGN]NqbyWzwJBTB\W^ЖR2#YhꂲWe6iչZ5}ZiŹbmdStȥt @WoKGyBziIi& r8zLt\m/TV/cxum-]5Y,!^\fm,P6Zgn<4TVJq]{JAh?˲333;%ƚ)z;(㸺:[[[?iFQT;k:xJafiv{->EEz~]aaVtݴ“N.YdݺEjy/oBA>Ippÿ<(%ܻWp\a7xW۾yfN4oWKKKۼyKn^՘1gΘBc'srr,Ym_PPi9sa/@͙34**[666-+K˖*J1,#3ל ^MPٓ'O^vmőӍH$}.Zeٸ'}U7nܘ9}9ؔxX5Bx͝3(EؤI'Ol֡_~yÿykh^}&є$I$5FeH`u(!)x䰩׬]SL/^n]I63IDATx2n۾BBk%K,''eˢ'O~}f*$Ir5| 5k֘jLRY?$$A<ievҵk ݱ+(Y1޾rܮ]aaf566>;wmΝC.^4Y<t:]޽c>x/ݷBnHH}4g#Oh>#j۷oO]CobF`YY8BXU퉿bƴg}~LOᇽ¯|/6mڂ Vh_cA|6wz23/dC Ͷ2as  +c6yfq{nQU <9lݺe覫?ǭZjΕg~C { };eC%O܄*%s'ڸq=J)XtFmͣ?k\6Ztwp<~,YX)rCNF>a,qg11gϜ6o<o"8(-YnQV~~~^qh~ա뫪ڠ.QQ3 +++?pƤoEջNe-zgcXEV(o4v-Ba d?=a<-ǒ8`ggg+>Wn–?^ݴic~+** Irܸ7Ǎ{}>o5nܸqYƒy!4!VȿGq~~~O D äڵQYTy!6jZp 544|WLH84)9mL3`Ȑ!)))]tQ&N"&ٹA,Nz*''G☘N.y93j<ӥ5] ,)yit7_oi/)^dҡ}ު+bV OHXr|*.f^LNN^rq۷T7Q ifΘ)'(Wڟ;G"gӺw~HIݻX,tǎ8p`ja6oҩS~} iii;wL9qVY=s,iNK;׭[W`K6Q/2Z-2nfx0qf2\.G[jvTׯ}""*jf^c(:HIIX"D/%BxmO?~aw5jԑ#GRiIIuMMo{anBJ}|"QSAxzz?;x{ylmlvvbAn]rB!o^Z?1 C'ܲe#xjGBXXTTS]u;'M[8fr\.c#g1O><|}g͚eGbY\$)y̘~X,sΰ#nO8q\{UUȑϙ3yjjj֮[7ߠK׿oq^ye-,v_<==ѥnM%q߾}ϟOo<<<U?Zv]zz:aa1}Fpㆍq[[[Nb,v/<<n;wUUVJe2I&YYlrm?KC"}}ۓEDB¡ooY?K7n ;wn]s[lyޭ[7DyE+2ڕ˽ m=– Gx?|ܹ,̟q\l+--G)Ja~~~~~C)ߤIÞtgd^ ǟs]ΟKŵZX,V*毼ݻ<(Dmdmq܆ /JHkQ_mܸBFFBXv5a/_רՍXfkhNMMݺujNes^=71ÇX,xuk++0tz Ł@H$T°^fhZPxLtEIRtdR@mYi56F#RAfX+mFt&g9o߾3f.rKKKbBJeJs%ER@d'crz-98!VkRH$iF*5H,IQCz"QC RiZq<C'^iŧNz=ytjO#, |}CRy <]gM? R") m`^!/m*8N)IzZO&A744(J1jԨ7oR`RRoiik<<<aaa\FӱcG@NNJBwp Çܽ{:88X$5(SÆ 3V Y1ս&",y \f:a_wld25{ yPP:kVAb-W;HD)PE-;EDr)_."<7o8fC{3$~a-ZߛlIENDB`viking-1.4.2/help/C/figures/ruler_18.png0000644000175000017500000000064012175546637014673 00000000000000PNG  IHDRVΎWbKGD'^?dȂqqB,' *X9$s;iޟ/) !iw E1%wWݗ 7ILɅ*eN& SuU\छ?\IENDB`viking-1.4.2/help/C/figures/route_finder_18.png0000644000175000017500000000075612175546637016237 00000000000000PNG  IHDRVΎWsRGBbKGD|R2 pHYs  tIME u,nIDAT8˥KJA!q5aDB An$GzYY.:Mgт~@W*@J8xcH;<"Rp|7vׂD /ޟ\UׂVuYŃ$ Zb=(IRsܑb|ܨr ~q8>If'nzEcD2{T KX=\dOVz:N1(2T;Zonh4h6Z%[U5#2N4VFؿ#F9W&I|8`j Sp3)"+ˣߚ1_QWH F# H@5IENDB`viking-1.4.2/help/C/figures/select_18.png0000644000175000017500000000036412175546637015024 00000000000000PNG  IHDRVΎWsRGBbKGD pHYs  tIME3YtIDAT8˵ d`. =ԊXQ TUZG7JP tcSCPPF麭6IB)yȓVh$aIIENDB`viking-1.4.2/help/C/figures/mapdl_18.png0000644000175000017500000000076112175546637014643 00000000000000PNG  IHDRVΎWbKGD pHYs  tIME  !_tEXtCommentCreated with The GIMPd%nUIDAT8˝JA >Z E l\-EE: $*ń`X [L` b3;3P C )gDQDEl1޸th@t> j/Z̿R\٦ D? ﮸}|)y4]2Zd葮<߫z(t:A {{ANzVV&JP\0nv7f̣DJ | חUHefDv|\ Hg%dǧ53{O2ʨBűX*8 UkD"brf5"bǎv$~Wɽ]IENDB`viking-1.4.2/help/C/viking.xml0000644000175000017500000030761012175546637013100 00000000000000 Viking"> ]>
&app; Manual &app; is a free/open source program to manage GPS data. 2013 Guilhem Bonnefille Rob Norris GNOME Documentation Project Guilhem Bonnefille Rob Norris username: Alexxy username: Vikingis username: Tallguy username: EliotB Alex Foobarian &appname; Manual V&manrevision; &date; Guilhem Bonnefille guilhem.bonnefille@gmail.com Rob Norris rw_norris@hotmail.com GNOME Documentation Project This document was generated on . This manual describes version &appversion; of &appname;. Feedback To report a bug or make a suggestion regarding the &app; application or this manual, follow the directions in the Feedback section of the GNOME User Guide. &app;
Introduction &appname; aims to be easy to use, yet powerful in accomplishing a wide variety of tasks. Some of the things you can use &appname; for are: Uploading and downloading waypoints, tracks and routes to/from GPS. Preparing tracks, routes and waypoints for trips using maps from services such as OpenStreetMap (OSM) and/or Terrasever. The data is only needed to be uploaded to your GPS before you leave. The maps together with your tracks, routes and waypoints can also be printed and used during the trip. After trips, tracks and waypoints from GPS can be downloaded, stored, managed and reused in your (or your friends') later trips. Analyzing Off Highway Vehicle (OHV) and hiking trips, understanding where you went and how far you were from something. Making waypoints, tracks and routes to follow to easily get someplace you've never been before or don't have GPS data for but online maps exist for it. Making maps with coordinate lines. Grouping data from multiple trips using a hierarchical data manager. Analyzing speed at different places (to some degree), adding waypoints where you forgot to mark one but did slow down or stop. Downloading and storing OpenStreetMap and/or Terraserver maps on your hard drive and looking at them later. Editing routes or tracks and their trackpoints, joining and splitting up tracks and routes. Show the live GPS position on the map (for use on a mobile device - e.g. a laptop). Not Windows at the moment. Import track, route and waypoint files of various types via GPSBabel View, create and update Geotagged Images (using EXIF data). &appname; is under continual improvement: see the potential areas in the Roadmap / Wishlist:
Screenshot: OSM Cycle Map and Many Tracks
General Concepts
Layers 'Layers' is concept one may know from powerful graphics editors such as Photoshop or GIMP. Instead of putting all the data on the same level, it is stacked (i.e. layered) with different data over one another. This can be useful for analysis and general handling of various sets of data. Unfortunately the downside of this complexity is remembering how differing layers of data can obscure other data. The Map layers have Alpha Compositing, to create the appearance of partial transparency. By controlling this value one can see data below it in the layer heirarchy for interesting effects.
Layers Panel The panel on the left is called the layers panel. It determines which layers and sublayers (such as tracks and waypoints) are shown, and the order in which they are drawn. Layers list on the top of the layers panel are drawn last. You can change the order by drag and drop, or by selecting a layer and using the up and down buttons at the bottom of the layers panel.
Viewport The main &appname; area where the layer data is drawn, is called the viewport.
Statusbar This provides a readout of various information: The currently selected (mouse pointer) tool The number of items to process in the background - normally this the number in the map tile download queue The zoom factor The location of the mouse pointer (and potentially height information if DEM data is available) When creating a track/route, the statusbar also displays some information about the track/route.
Statusbar
This part of the statusbar displays: The total distance of the track/route (including currently edited segment). The bearing of the currently edited segment. The distance of the currently edited segment. For convenience, a zoom selector can be opened from the status bar. Simply left-click on the zoom factor.
The zoom selector available from status bar
Projections &appname; supports differents projections: UTM LatLon (also called EPSG:4326) Mercator (also called Spherical Mercator)
Map Cache &appname; stores downloaded map tiles to disk for a couple of reasons: Enables off line usage Reduces loading on the map tile provider The &appname; automatic caching strategy is two fold: If the age of the tile on disk is less than the specified tile age (see ), it will not attempt to contact the server to get a new version of the tile. When the tile age has expired &appname; will attempt a refresh update, so that it provides the cached tile generation timestamp so the server can determine if a new tile image needs to be returned. Not all map types support this refresh method. You can override the caching scheme by using right-click on the Map on the layers panel and selecting Redownload All Onscreen Maps, or Ctrl+F5 for the top most map displayed. This will get the latest version held by the server. This can be useful if you contribute to OpenStreetMap and wish to see your modifications (of course give time for the server to have processed your changes - see I have made edits but they don't show up on the map)
Shortcut Keys &appname; has several shortcut keys or key combinations for commands as listed in the main window along side the command. Some function keys follow standard GUI behaviour: F1 Help (view this manual) F5 or Ctrl+R Refresh the maps on screen F10 Select the Menubar (in built behaviour) F11 Full Screen Ctrl+F5 or Ctrl+Shift+R Redownload the maps on screen Refresh attempts to get new maps only if the local tile cache time period has expired for any particular map tile. Redownload gets all on screen maps from the server, ignoring the local tile cache. Other function keys control turn on/off visibility of various elements: F3 Toggle visibility of the Toolbar F4 Toggle visibility of the Menubar Shift+F5 Toggle visibility of the Scale indicator on the viewport F6 Toggle visibility of the Center Crosshairs on the viewport F7 Toggle showing selected items (e.g. tracks or waypoints) in the highlight colour in the viewport F9 Toggle visibility of the Layers Panel F12 Toggle visibility of the Statusbar Standard shortcuts are provided for normal GUI operations: such as creating new files, opening, saving and exitting. Then there are shortcuts specific to &appname; to switch projection modes, zoom in/out, create layers and switch the active tool mode. For these combinations see the menu entry themselves.
Tracks vs Routes In theory a route is path you are planning to follow and a track of where you have actually been. The GPX specification splits these into two separate catergories, although tracks contain everything route may have. Q. When planning a 'route' what difference does it make if it's a route or a track? A. One difference is in how a GPS device navigates following the route or track. Or you may want to consider interoperability with other software. Otherwise it is probably best to use tracks as they are a superset of the route functionality. For example on Garmin Etrex: Route following: Uses navigation mode with compass and estimated time to next point. If following on road it can calculate a route on fly. I (RN) always use this mode to follow pre planned routes. Track following: Uses a TracBack mode I (RN) never use this so I can't comment on how it actually compares to the route mode. There are often restrictions on the numbers of route points the GPS Device can handle - may be 250 or as little as 50. This generally not a problem for single day routes, but needs managing for multi-day events or for highly detailed routes.
File Types and the Main Window &appname; has it's own file type traditionally marked by the .vik file extension. This is a plain text file saving all information of the current window including the view location, zoom level, projection type and then all the layer information (aggregrates, maps, tracks, waypoints, etc...). Besides it's own file type, &appname; can open (and save to via export methods) GPX and KML file types. &appname; does not handle GPX 1.1 particularly well - it prefers GPX 1.0 By default &appname; opens a default blank window centered on the home location. Each window contains menus, a toolbar, a viewport, layers panel and a statusbar. Each section (apart from the viewport) can be hidden using the or from the ViewShow choices. One may consider each &appname; window to be a separate project - each with it's project Viking file. However generally one window is enough for most purposes! Several operations apply at the window level as follows next. Also see for the operational modes that generally work in conjunction with a selected layer.
New Located on the FileNew menu and on the toolbar New. This creates a new window with the default settings.
Open Located on the FileOpen menu and on the toolbar Open. This opens a file chooser dialog to select one (or more) files of the supported GPS data file types: Viking GPX KML GPX and KML files will be loaded into the existing &appname; view. A Viking file will be given a new window if the current window is already assigned. &appname; handles more file types via the Acquire methods below.
Save Located on the FileSave menu and on the toolbar Save. If the current opened file is Viking file, this save will simply update it. If it is a new file or the file loaded was an external type (i.e. GPX or KML), then this will ask for a new name to save as a Viking file.
Save As Located on the FileSave As menu only. This will ask for a new name to save as a Viking file (even it was already a Viking file).
Append Located on the FileAppend menu only. Selecting a Viking file from this method will join the file contents to the current window (instead of creating a new one). GPX and KML files may also be appended, but this is exactly the same as the normal file open method.
Acquire Available on the FileAcquire menu and from the layer menu. If used from the File menu and a TrackWaypoint layer is not currently selected, these methods place the results in a new TrackWaypoint layer. When a TrackWaypoint layer is selected, then using the FileAcquire will put the results into the selected TrackWaypoint layer. If used from the layer menu these methods place the results in that TrackWaypoint layer.
From GPS FileAcquireFrom GPS Probably the easiest way of getting information from a GPS Device. Select the GPS Device communication settings and then hit OK. See the Getting Started section for more info about the settings. Some GPS devices (such as the Garmin Nuvi 255) support a native file system and write information to a Current.gpx file or similar. You will have to browse the file system on the device and open it directly.
Import File With GPSBabel FileAcquireImport File With GPSBabel Other formats can be imported that are supported by GPSBabel. You need to select the file and the type of the file that is going to be opened, since there is no automatic detection of the file kind.
OSM Traces FileAcquireOSM Traces See section for more information.
My OSM Traces FileAcquireMy OSM Traces See section for more information.
From Geotagged Images FileAcquireFrom Geotagged Images Enables automatic creation of waypoints from geotagged images. This menu opens a dialog to select such image files. If the image files have geotag information in them, then a layer with named waypoints positioned at the location of each image with a thumbnail of that image is created.
From Wikipedia Waypoints FileAcquireFrom Wikipedia Waypoints This gets 'interesting' points from Wikipedia for the specified view: either within the extent of layer bounds or within the current viewport boundary.
Print Located on the FilePrint menu and on the toolbar Print. Print uses what is displayed on the current map view for printing: i.e. what ever map, tracks and waypoints that are in view, including the cross hairs and the scale. It uses a standard system print dialog using an image the size of the current viewport in pixel terms. On the Image Settings you can move the image around the page and scale the image up / or down.
Generate Image File Located on the FileGenerate Image File menu only. Allows generation of larger (pixel) area images than the standard Print method above. From the generated image you can use the facilities of the Operating System to print the image or perform other actions. You should have previously downloaded the tile images for the chosen zoom level, otherwise the image produced will have missing sections. Using large areas takes some time to process and due to the method used it may run out of memory to complete the operation. Unfortunately under Windows systems it can not detect this failure and may crash the program. So the maximum size is dependent on the capabilities of your system. For instance the largest successful image generated on my (RN) Debian system is a pixel area of 20,000 x 20,000.
Generate Directory of Images Located on the FileGenerate Directory of Images menu only. This is only available in UTM mode.
Layers Layers supported by &appname; are: For each layer there are a few standard options: Properties - Layer setup / configuration settings Cut Copy Paste Delete Visibility - This checkbox on the Layers Panel controls whether the layer is shown in the viewport or not The cut/copy/paste options can be accessed in a variety of ways once the layer has been selected: Standard keys: Ctrl+x|c|v Main menu Edit From the right click menu Buttons at the bottom of the Layers Panel See the individual section for detail about each layer.
TrackWaypoint Layer TrackWaypoint layers display GPS data (tracks, routes and waypoints). One way to create new waypoints is to copy a latitude/longitude coordinate pair, such as the one shown on most geocaches, and paste it into an active TrackWaypoint layer. &appname; can automatically recognize several variations of the lat/lon format. By right-clicking on tracks, routes or waypoints in the layers panel, you can access many commands on them. You can easily find a specific track, route or waypoint by expanding the appropriate containing Tracks, Routes or Waypoints sublayer in the layers panel to show all the individual items and then typing the name of the track, route or waypoint. The containing Tracks, Routes or Waypoints sublayers are only shown when items of that type exist. To start creating them enter into a create mode via either the Create toolbar commands or the New menu commands. The sublayers also offer right click menu options. These are the same as those available at the TrackWaypoint level, but only those that relate to the sublayer type. By default routes are coloured red. Tracks are automatically assigned a spread of colours. Most operations are available on tracks are available on routes, except for functionality that relies on having timestamps - since routes by definition have no timing information. Thus for example, uploading a route to OpenStreetMap Traces is not available nor is Geotagging on a route. It is possible to convert between Tracks and Routes, although converting from a Track to a Route may involve a loss of information (hence you are required to confirm this operation before it happens).
Layer Operations The layer has a context menu with several operations.
View Layer Version1.1+: This will automatically move the viewport and select the best zoom level to see the whole layer (i.e. all tracks, routes and waypoints).
View
View All Tracks Version1.1+: This will automatically move the viewport and select the best zoom level to see the all the tracks in the layer (ignoring positions of any routes or waypoints).
View All Routes Version1.4+: This will automatically move the viewport and select the best zoom level to see the all the routes in the layer (ignoring positions of any tracks or waypoints).
View All Waypoints Version1.1+: This will automatically move the viewport and select the best zoom level to see the all the waypoints in the layer (ignoring positions of any tracks or routes).
Goto Center of Layer This will automatically move the viewport to see the whole layer (i.e. tracks, routes and waypoints). It does not adjust the zoom level.
Goto Waypoint This opens a dialog box to enter a name of waypoint to search for. If it is found the viewport is centred on it. Note this search is not very clever and only finds exact matches. You are probably better off expanding the waypoint list and directly start typing, as mentioned above, which finds a match based on each letter typed.
Export Layer The layer (all tracks, routes and waypoints) can be exported to a file GPX, GPSPoint, GPSMapper or Google's KML format. Version1.1+: An individual track can be exported to a GPX file via the track menu.
Finish Track or Route This is only available when a track or route is being created by the or tools. Selecting this option ends the creation of that individual track or route.
New
New Waypoint This opens a dialog box to create a new waypoint. A default name will be suggested and the default position is the center of the viewport.
New Track This turns on the tool.
New Route This turns on the tool.
Geotag Images This starts the Geotagging Images dialog against all tracks in the layer. See Geotagging for further detail.
Acquire This offers the same choice from methods as on the File menu. However when invoked from here, the results will be stored in this layer (instead of creating a new one).
Upload
Upload to GPS This opens a dialog to select the GPS Device and port to which the layer information will be transferred. The types of GPS information (tracks, routes or waypoints) to be transferred can be selected. Tracks, Routes or Waypoints that are invisible will not be transferred.
Upload To OSM This opens a dialog to upload all tracks and waypoints to OpenStreetMap traces. Useful if you are an OpenStreetMap contributor (you will need an OpenStreetMap account), these details can be stored in &appname; &appname; allows you to edit a track, e.g. remove duplicate points, perhaps remove track points leading to your home and then upload it to OpenStreetMap. The password is transferred unencrypted in every request sent to the OpenStreetMap server. This is due to the use of OpenStreetMap's basic authentication method. Currently &appname; does not support the OAuth mechanism.
Delete Offers deletion of various parts of a TrackWaypoint layer:
Delete All Tracks Deletes all the tracks in this layer.
Delete Tracks from Selection Opens a dialog with list of all the tracks from this layer to choose the ones to delete.
Delete All Routes Deletes all the routes in this layer.
Delete Routes from Selection Opens a dialog with list of all the routes from this layer to choose the ones to delete.
Delete All Waypoints Deletes all the waypoints in this layer.
Delete Waypoints from Selection Opens a dialog with list of all the waypoints from this layer to choose the ones to delete.
Filter
Simplify All Tracks This opens dialog to request the number of points each track will be simplified using GPSBabel. The result is put into a new layer. The simplification method removes points considered to be in a 'near straight line', thus reducing the number of points and attempting to keep the most important turning points.
Remove Duplicate Waypoints Remove Duplicate Waypoints - fairly self explainatory, with the results created in a new layer. However it only considers a precise position (waypoints only 1 metre away from each other are considered different) and also doesn't consider if the waypoints have different comments, symbols or images.
Filter With <emphasis>Trackname</emphasis> This runs GPSBabel on the layer using information from a previously selected track (select via the track menu "Use With Filter" option) with the following command types: Waypoints Inside This Waypoints Outside This The result is generated in a new Track/Waypoint layer.
Geotag Images This starts the Geotagging Images dialog using the specific track. See Geotagging for further detail.
Track and Route Sublayer Options Repeats options available at the TrackWaypoint level, but only those for tracks and routes: Finish Track or Route. Same as the layer Finish Track or Route New Track or Route. Same as the layer New Track or New Route View All Tracks or Routes. Same as the layer View All Tracks or View All Routes Delete All Tracks or Routes. Same as the layer Delete All Tracks or Delete All Routes Delete Tracks or Routes from Selection. Same as the layer Delete Tracks from Selection or Delete Routes from Selection
Track and Route Properties Show many useful statistics about a track or a route, including a elevation-distance graph and a speed-time graph (if data is available). You can click these graphs to jump to the point in the track. You can also reverse it, delete duplicates, and split a track from its component segments (discontinuous breaks in a track) into separate tracks. The following colors are used in the elevation-distance graph: 'Main' colour - this is dependent on your Desktop theme - often blue by default elevation data in graph Yellow no elevation data Green elevation data from DEM Red speed
Track and Route Operations
Finish Track This is only available when a track is being created by the tool. Selecting this option ends the creation of the individual track.
Goto This centers the viewport on the selected position on the track: Startpoint "Center" - the notional center from the bounds of the track Endpoint Version1.1+: Highest Altitude Version1.1+: Lowest Altitude Version1.1+: Maximum Speed (Not Available on Routes)
View Version1.1+: This centers the viewport on the track and selects the best zoom level to see it.
Combine
Merge By Time This operation repeatedly tries to merge the right-clicked track with tracks in the same TrackWaypoint layer. The tracks which are merged are those which have at least one trackpoint less than some threshold time away. This way, if you somehow end up with lots of small segments (say, caused by turning the GPS on and off) you can merge them easily into one track. This is not available on routes as they have no timestamps.
Merge With Other Tracks This opens a dialog listing the other tracks in the same TrackWaypoint layer, from which one can select the other tracks to merge with.
Merge Segments Combines track segments. Effectively removing track segment markers to leave one segment for the whole track.
Append Track or Route Enable joining of a single track to the end of the current track. This opens a dialog listing the other tracks in the same TrackWaypoint layer from which one can make the selection.
Split
Split By Time This operation will split a single track into segments wherever the time interval between successive trackpoints is larger than some threshold. This is useful when processing raw NMEA GPS data, especially taken over a long time. This is not available on routes as they have no timestamps.
Split By Number of Points Version1.2+: This operation will split a single track into segments by the number of points specified. This can be useful with devices which may have limits on the number of points it supports.
Split Segments Splits track segments into new tracks. This is not available on routes as they do not have route segments.
Split at Trackpoint Splits the track at the currently selected trackpoint. This is only enabled when a trackpoint is selected.
Delete Points
Delete Points With the Same Position Deletes subsequent points that have the same position (but have different timestamps).
Delete Points With the Same Time Deletes subsequent points that have the same time stamp (but may have different positions). This is not available on routes as they have no timestamps.
Apply DEM data If any DEM data is loaded, this will apply the DEM data to give the track elevation data.
Export Track as GPX Version1.1+: This allows exporting the track as a GPX file by opening a file save dialog.
Extend Track End Changes the current tool to add trackpoints to the end of the track.
Extend Using Route Finder Enables the Route Finder tool. Thus on a subsequent left click in the viewport, a route is calculated from the end of track to that point using Google's route service and applied to the track.
Upload
Upload to GPS Same as the layer Upload to GPS command, but only applies to the track.
Upload to OSM Same as the layer Upload to OSM command, but only applies to the track.
Use With Filter This selects the track to be used in the Filter With Trackname feature. This is not available on routes.
View Google Directions This option is only available on a track created using the Route Finder tool. Launch a web browser to see the Google directions page which yielded the route. The record of the Google route is stored in the track's comment, so if the comment is changed (or the route was created by something other than the Route Finder tool) this will not work correctly.
Waypoint Sublayer Options Repeats options available at the TrackWaypoint level, but only those for waypoints: New Waypoint. Same as the layer New Waypoint View All Waypoints. Same as the layer View All Waypoints Goto Waypoint. Same as the layer Goto Waypoint Delete All Waypoints. Same as the layer Delete All Waypoints Delete Waypoints from Selection. Same as the layer Delete Waypoints from Selection
Waypoint Properties This shows a dialog with detailed information for the waypoint. Many properties of the waypoint can changed here, such as the comment, the symbol used in drawing or the image (normally a photograph taken at this position) assiocated with it. When a waypoint has an image, a thumbnail of it is drawn in the viewport for the waypoint (in preference to the symbol). If the waypoint has an associated image, then the Geotag information may be updated, either with updating the file's modification timestamp or not. This can be useful when the waypoint has been moved.
Waypoint Operations
Goto This centers the viewport on the selected waypoint.
Visit Webpage If the waypoint's comment (or description) starts with 'http:' then this option is available and allows launching a web browser to go to the webpage.
Visit Geocache Webpage If the waypoint's name is in Geocache form (GCXXXXX) then this option is available and allows launching a web browser to go to the Geocache page.
New Waypoint Same as the layer New Waypoint.
Version1.3+: Geotag Images This dialog allows geotagging images (normally taken with a digital camera) via interpolation against a specific track or all tracks in the TrackWaypoint layer - depending on how it is invoked. Images need to have an EXIF DATE_TIME_ORIGINAL (nearly always set by a camera). This timestamp is then used to find the location when the image(s) was taken by searching through the track(s) to find the nearest time - interpolating between points if necessary to set the location. Generally it is good policy to synchronize your camera's clock with your GPS clock before taking photographs. However the times can be adjusted afterwards (if necessary) to take into consideration clock differences. Various options allow control of how the geotagging process is performed: Images - Add the images used for geotagging Create Waypoints Overwrite Existing Waypoints Write EXIF Overwrite Existing GPS Information Interpolate Between Track Segments Image Time Offset - The number of seconds to ADD to the photos time to make it match the GPS data. Calculate this with (GPS - Photo). Can be negative or positive. Useful to adjust times when a camera's timestamp was incorrect. Image Timezone - The timezone that the used when the images were created. For example, if a camera is set to AWST or +8:00 hours. Enter +8:00 here so that the correct adjustment to the images' time can be made. GPS data is always in UTC.
GPS Layer The GPS layer is responsible for uploading and downloading GPS data from a GPS device. It also is responsible for realtime GPS tracking. Expand the GPS layer in the layers panel to see the two layers it uses for uploading and downloading. To upload, download, or use realtime tracking, right-click the GPS layer and click the appropiate menu item.
Download To download data from the GPS, right-click the GPS layer and click Download from GPS.
Upload To upload data to the GPS, first populate the GPS Upload child layer of the GPS layer (either by creating waypoints/tracks/routes in it, or copying and pasting or dragging waypoints/tracks/routes from another layer). Then right-click the GPS layer and click Upload to GPS.
Realtime Tracking You must set up gpsd correctly or use a GPSD server and put the correct information in the GPS layer properties dialog. Then right-click the layer and select Start Realtime Tracking.
Empty <emphasis>Item</emphasis> There are several options to quickly delete a subsection of data: Empty Realtime Empty Upload Empty Download Empty All
DEM (Digital Elevation Model) Layer This layer provides elevation data from the Shuttle Radar Topography Mission (SRTM) Elevation data can be useful in planning trips, as you many wish to avoid/minimise the hills encountered. [OSM Cyclemap is also useful this way too] To download the data use the DEM Download tool (shown on the toolbar), and then click on a area of the viewport. Once files have been downloaded they can then be loaded from disk via the DEM properties in future application runs. The current data server is: NASA STRM 2.1. ATM &appname; does not auto download DEM data. If you want to get lots of data blocks, you may wish to use some other program get such as curl or wget to download them for an area. Using many DEMs is CPU/memory intensive. Depending on your computer's capability, &appname; will be less responsive when about 50+ DEM blocks are loaded. It is probably unwise to attempt using 200+ blocks, so trying to use DEMs covering large countries/continents (USA, Australia etc...) is unlikely to work. In these conditions under Linux, &appname; may be automatically stopped by the "OOM Killer"
Maps Layer This layer provides a single map resource, you may have multiple map layers but only top one (if enabled) will be visible. You will need an open internet connection when you are downloading maps, but once downloaded they are available from the hard disk cache. When map are avaliable from the disk cache it is much faster and can be used offline. Some maps are continually improving over time (e.g. OpenStreetMap) and so in order to not to have to (re)download the data all the time &appname; employs a timeout method - 'Tile Age' to determine whether to access the server. However a forced refresh for the current view can be made via the Reload All Onscreen Maps option. Inbuilt maps include various Terraserver (Primarily USA coverage) and OpenStreetMap (OSM) ones and more: Bing Bird's Eye (Aerial) Maps (&appname; Version1.2+) Terraserver Topos Terraserver Aerials Terraserver Urban Areas OpenStreetMap (Mapquest) - This is the default (&appname; Version1.3+) OpenStreetMap (Mapnik) OpenStreetMap (Cycle) OpenStreetMap (Transport) (&appname; Version1.3+) NASA BlueMarble SpotMap (&appname; Version1.1+) &appname; can be configured to handle additional maps. See for further detail.
Layer Operations
Download Missing Onscreen Maps This requests map tiles for areas of the viewport that do not currently have one.
Download New Onscreen Maps This requests map tiles only if the maps are older than the Tile Age preference.
Reload All Onscreen Maps Force a refresh of all visible map tiles.
Aggregate Layer This layer is a container layer to hold other layers. There is always an initial and controlling Top Layer that can not be removed or renamed. This layer type is useful for grouping other layers, especially layers, in whatever categories are relevant to you: such as by activity, location or date. Here are some suggestions: Hiking Mountain Biking Road Cycling Car Trips Sailing Holidays UK Points of Interest USA Points of Interest etc... Thus one can have a list of all your tracks, but groups can be shown or not using the relevant layers visibility checkbox. This layer only has one operation: New Layer
New Layer Add a new layer of the selected type.
GeoRef Layer This layer allows one to use any image as a map. You will need to tell it how to align the map to a position in the world and the scale of map.
Layer Operations
Zoom to Fit Map Automatically set a zoom level to see the entire map coverage.
Goto Map Center Center the viewport on this map.
Export to World File Opens a file save dialog to save the scale and position information as a World File.
Coordinate Layer This layer is allows drawing of grid lines on the viewport.
Tools &appname;'s mouse actions on the viewport are controlled by which tool is active. Only one tool can be active at a time. The default mode is pan. You can use the scroll wheel, the middle-click, the middle-click+drag to zoom, center map at position and pan respectively no matter what tool you are using. Scroll: zoom in and out keeping the mouse over same location Ctrl-scroll: pan north-south (also Ctrl-up, Ctrl-down) Shift-scroll: pan east-west (also Ctrl-left, Ctrl-right) Ctrl-shift-scroll: zoom in and out, without changing the center (also Ctrl+, Ctrl- [*not* KeyPad +/-]) Middle-click: make the clicked point on the map the center Middle-click and drag: pan
Pan This is the default mode of operation for &appname;. This mode is entered by clicking on the toolbar icon: Pan moves the viewpoint. A single click centers the viewport at that point, whereas click and drag dynamically moves the view around. This is the default tool. This mode can also be entered by the keyboard shortcut Ctrl+Shift+P
Zoom This mode is entered by clicking on the toolbar icon: Zooms in and out on the clicked part of the map or by the selected area. This mode can also be entered by the keyboard shortcut Ctrl+Shift+Z Ctrl + left or right click: Zoom in/out and center the map on the clicked location Shift (and hold) + left mouse button: Draws a bounding box area on which to zoom in. The zoom action is performed when the left mouse button is released.
Ruler This mode is entered by clicking on the toolbar icon: The ruler is used to measure the bearing and distance between two points: Click on first point and then move the mouse point around - the values will be continually updated. A second click will 'freeze' the ruler at that point. This mode can also be entered by the keyboard shortcut Ctrl+Shift+U
Version1.1+: Select This mode is entered by clicking on the toolbar icon: The select tool allows one to choose any waypoint or track by clicking on it (or reasonably near) in the viewpoint. ATM to select a track one must actually click on a trackpoint, which is also selected. This mode can also be entered by the keyboard shortcut Ctrl+Shift+S
TrackWaypoint Layer Tools You must have a Layer selected to use these tools.
Create Waypoint Enable this tool by clicking on the toolbar icon: Left click will open the new waypoint dialog using the specified position.
Create Track Enable this tool by clicking on the toolbar icon: Left click to create a new trackpoint. If it's the initial trackpoint you will be asked to enter a name for the track. If Ctrl is held at the same time, it will jump the new trackpoint position to a nearby existing trackpoint. Right click or Backspace: undo one point. Double click or Escape: to finish track creation. Finishing the track is also available via the right click and track menus. One must finish the current track to be able to create another track.
Create Route Enable this tool by clicking on the toolbar icon: This operates in exactly the same way as the Create Track above. One must finish the current route to be able to create another route.
Edit Waypoint Enable this tool by clicking on the toolbar icon: Left Click/drag: select/move a waypoint. If Ctrl is held at the same time, it will jump the waypoint position to a nearby existing trackpoint. If Shift is held at the same time, it will jump the waypoint position to a nearby existing waypoint. Right-click on waypoint: opens a menu with waypoint actions (the same menu accessed by right-clicking the waypoint in the layers panel)
Edit Trackpoint Enable this tool by clicking on the toolbar icon: Left click near a trackpoint (in screen pixel terms) to bring up the Track Point Edit dialog on that trackpoint. Whilst the edit dialog is already open, left click again and drag enables moving of the trackpoint. If Ctrl is held at the same time, it will jump the new trackpoint position to a nearby existing trackpoint. Options in the Track Point Edit dialog include: change position, go to next, go to previous, delete, insert (halfway to next trackpoint) and splitting the track.
Show Picture Enable this tool by clicking on the toolbar icon: Opens an image viewer with the picture associated with the waypoint. By default this uses the default system image viewer. For Linux you can override this with the setting in the
Route Finder Enable this tool by clicking on the toolbar icon: Creates a track using Google maps routing between two points. Requires an internet connection. Click one point, then click another to create a track. Right-click: undo last routing (only track removed - not any waypoints) Ctrl: continue previous track
Georef Map Layer Tools You must have a Map Layer selected to use these tools.
Georef zoom Enable this tool by clicking on the toolbar icon: Changes the zoom level of the georeferenced map and changes the &appname; zoom level accordingly. Useful if you are trying to match GPS data to a georeferenced map.
Georef move Enable this tool by clicking on the toolbar icon: Drag to move the georeferenced map.
Map Download You must have a Layer selected to use this. Enable this tool by clicking on the toolbar icon: Click to download a single tile. Drag to download tiles in the dragged rectangle area. Right-click to redownload tiles via the selected method. Right-click and drag to redownload tiles in the dragged rectangle area by the selected method. The possible methods to redownload one or more tiles are: Bad - Only if the tile is corrupt in some way or missing, then this will download a new copy New - Refresh the tile according to the local map cache and if server has a newer version All - Redownload the tile Map Tile Information By right clicking on viewport you can see the tile properties of the that location for the current map layer and current zoom level. This includes the remote source URL for the tile and the cached version on the local filesystem with timestamp details.
Map Tile Info Dialog: Example
This is using MapQuest at &appname; zoom level 128 over the Isle of Wight, UK.
DEM Download You must have a Layer selected to use this. Enable this tool by clicking on the toolbar icon: Click to download and import a DEM file.
Webtools Many services are available only via a web browser (Google Maps, OpenStreetMap Potlach editor, etc.). Jumping from &app; to such service can become annoying. &appname; allows you to open such service directly at the position currently viewed in &app;. This feature is called Webtools. It is also known as External Tools.
Preferences
General
Localisation You can select units displayed by &appname; to best fit your usage.
Properties dialog: units part
Concerning degrees, you can select the way to display them: DDDdecimal degree DMMpartial sexagesimal display: degrees, minutes and decimal part of minutes DMSsexagesimal display: degrees, minutes and seconds
Properties dialog: degree display options
Waypoint Icon Size An option exists to control the icon (symbol) size used for waypoints
'Home' Default Location: Latitude and Longitude You can set the 'Home' location directly by inputting the latitude and longitude in decimal degrees.
Tile's age This age is used to decided wether or not a new request to tile server must be done. Changing this value, you will increase or decrese the network load.
Default maplayer directory This property sets the default directory of the tiles cache. This value is used when you create a new map layer. You are still able to change this value in each map layer properties.
Map Cache Memory Size This controls the amount of maps that are stored in memory, rather than having to reread from disk. Generally if you have a system with lots of memory it's recommended to increase this value.
Export/External
KML Export Units Allows setting the units used when saved as the KML file type, such as Metric or Statue units
Image Viewer (Not Windows) Allows setting the program used to view images associated with Waypoints. By default this is set to xdg-open which should open the system's default image viewer, however this can be overridden with this setting. Note: for Windows systems, viewing images associated with Waypoints always uses the system's default image viewer.
External GPX programs Allows setting the programs invoked via the Layer menu Export LayerOpen With 'program' Two options are given so that it can be configured for various uses such as: An OSM editor (default) Some other user defined program
OpenStreetMap Traces
OSM Username + Password Store your OSM details here, so that you don't need to enter it in every time in the procedure. Your OSM password will be stored in plain text.
Howto's
Getting Started To quickly get started using &appname;, follow these instructions.
Go to an area of interest &appname;'s default location is a Manhatten, New York, USA, so you may need to pick another place that interests you - such as where you live. Method A Use the online location address/place search. Use the Go to Location toolbar button or from the menus ViewGo to Location. You can change the search location provider if desired. Enter the name of place you wish to go to (you may need to specify the country to refine the search). Also you can enter a post code or a ZIP code instead. You will need an internet connection for this search to work Method B If you know the coordinates of where you want to view: Use View and select from either Go to Lat/Lon or Go to UTM and then enter in the specific coordinates. Method C Use the GPS Layer or FileAcquireFrom GPS to load data directly from your GPS into &appname;. You can specify the types of data to acquire: Tracks, Routes and/or Waypoints. You must have write permission to the port used. For Unix like OS: /dev/ttyS0 is the first serial port /dev/ttyUSB0 is the first USB port usb: is any USB port Depending on your distribution only one of the USB port types may work For Windows: com1: is the first serial port usb: is any USB port The GPS devices supported are those supported by GPSBabel. Garmin and Magellan GPS devices supported by all versions, later versions of GPSBabel support more devices such as DeLorme and Navilink. Method D Get data from files in GPX or KML format, which can be opened directly. Use FileOpen Other formats can be imported that are supported by GPSBabel. FileAcquireImport File With GPSBabel... The viewport will be automatically moved and resized to view the contents of the file.
Add a map layer 1. Use Layers - New Map Layer, and choose a suitable cache directory where you would like to store your tracks and click OK. Zoom to a comfortable level (I suggest 4 mpp) by clicking the left and right mouse buttons on the gray area where your tracks are. Now from the menu choose Tools - Map Download, Click where you would like to download a map. Regardless of what tool you are using, the middle mouse button always pans. You need an open internet connection when you are downloading maps. 1. You will notice the maps are being drawn on top of the tracks, which is probably not what you want. Look at the Layers Panel to the left. Notice how the layer named Map is ABOVE your TrackWaypoint layer that your GPS data is in. This means that it will be drawn last, or on top of the other layers. Select the Map layer from the list and click the down arrow button beneath the list. Your tracks will now be drawn over the map.
Set Your Home Location You can save the current center position of the viewport as the default location AKA the Home Location by EditSet the Default Location. Then at any time you can return to this place by clicking on the Home icon on the toolbar. You can also set the default location via specifing the exact latitude and longitude in the .
From 1st startup to GPS track (including offline maps) The first you'll see is an empty map, because &appname; in its default configuration will download maps only on demand. Before fetching unneeded data, one can position to a location of interest, e.g. Stuttgart: ViewGo to Location, enter 'Stuttgart'.
Fetching the maps Map LayersNew Map Layer in the layer properties dialogue choose e.g. OpenStreetMap (Mapnik). For the moment, we keep the default Maps Directory (the directory in which the maps will be stored and can be used for offline usage). Check Autodownload maps and keep the zoom level as Use Viking Zoom Level. however, that these settings will play an important role in the pre-fetch for offline usage discussed later You'll see a map of Stuttgart. Using the mouse wheel, you can zoom in and out. The maps for the choosen resolution will be downloaded automatically. DEM Layer (Height Map) Zoom out to 512. LayersNew DEM Layer Keep the download source as is (SRTM Global 90m), hit OK. In the layer listing on the left, the layer should reside above the map layer. If this is not the case, highlight the DEM layer an shift it one up (using the arrow up button). highlight the DEM layer in the layer listing on the left in the toolbar, check DEM layer download/import (the last symbol) a left-click in the map window should then fetch the DEM data This might take some time. Sometimes, a tile does not show up correctly (you might see only a black frame in the map window) because it got corrupted during transfer. In order to correct this, you can delete the corresponding datafile in the cache. right-click the DEM layer properties The DEM Files listing allows you to delete the specific tiles (alternatively do this from the command line). You can also alter the Min. and Max. elevation in this dialogue.
GPS Track with Height Profile Uncheck the layer (the map is shown again) LayersNew TrackWaypoint Layer Ensure the new track layer is above the map layer. Expand the layer, select Tracks In the tools menu choose Create Track Leftclick in the map window, enter a name Click several times to generate a track (a right-click removes the last point). Height data is set automatically since DEM data is available Expand tracks in the layer menu, your track should show up, select it Right click your track, select Properties Click the tab Elevation-distance - enjoy the plot In order to save this setting for later usage click OK in the Track Properties dialog FileSave As, choose a name (you can open this view later via fileOpen).
Usecase: offline data for holiday Suppose you want to have the and data offline for your holiday in Italy near Bologna. Start a new &appname; session. ViewGo to Location, enter Bologna LayersNew Map Layer Choose e.g. OpenStreetMap (mapnik). adapt the maps directory e.g. to /home/user/.viking-map-holiday/. This allows you to delete the map stuff after holiday without purging the rest of your maps. check autodownload map keep viking zoom level zoom out to 1024 add a layer (as discussed above) download the DEM data In the &app; version discussed here, the DEM data automatically are stored in /home/user/.viking-maps/. You can move the corresponding tiles into .viking-map-holiday/ if you like. Download map data for all zoom levels uncheck the DEM layer for the map to show up navigate the map to be centered at Bologna choose the zoom such, that all regions of interest are displayed in the map window (e.g. 1024) follow this sequence until you have all tiles for all zoom levels you need right-click the map layer properties set the zoomlevel explicitely one below the last (in the first cycle 512), hit OK right click the map layer Download Missing Onscreen Maps wait until all tiles for that resolution have been downloaded This may take some time and some hard disk capacity. Do not forget to save your configuration (as discussed above).
OpenStreetMap project OpenStreetMap (OSM) is a collaborative project to create a free editable map of the world. One of sources of data for this project is GPS tracks. &appname; supports this project via the GPS Traces methods, both uploading and downloading such data. Also see for further detail.
Uploading data to OpenStreetMap It is possible to upload data directly from &appname; to OpenStreetMap. Upload a layer One solution is to upload whole a layer. To do this, simply select the layer and right click on it. Then, select Upload to OSM. Upload a single track Another solution is to upload an individual track. Simply select the track and right click on it. Then select Upload to OSM. Fill in the form In both cases, &appname; will retain some information. The email field is the email you used to subscribed into OpenStreetMap. The password field is the password you used with this account. The filename is the name you want your upload has on the server. This information is displayed by the osm server. The description is some descriptive information. The tags field is a white separated list of tags.
Downloading Traces from OpenStreetMap It is possible to download GPS traces directly from OpenStreetMap into &appname;. This feature can be really useful for checking existing data before uploading new ones. Download all visible tracks One solution is to select File Acquire OSM traces... . Each request can get up to 5,000 points. The dialog box allows setting which group of 5,000 points to get. These groups are known as 'Page Numbers' which start at 0. Increasing the page number parameter allows one to request the subsequent sets of point groups.
Downloading Your Own Traces from OpenStreetMap It is possible to download any of your personal GPS traces previously uploaded to OpenStreetMap into &appname;. You will need to provide your OSM username and password to get the list of your OSM Traces. From this list you can select which traces to retrieve. This list can be sorted on each column so that it easier to find an individual trace or select a group of traces by similar properties.
Geotagging This assumes you already have a layer enabled for ease of use (if not see above to get one).
Manual Positioning This is useful for instances when you already know exactly where the image was taken (no need for tracklog). Or maybe you want to adjust an automatically generated waypoint for the position of the subject of the image rather than the location that the photograph is taken from. ATM this process only works on an individual image, so it will be tedious for handling lots of images. First create a layer or use an existing one; and select it in the Layers Panel. NB Make sure this layer is above the map layer in the Layers Panel list. Create a new waypoint (or move an existing one) to exact location desired: Select the tool, then left click on the map at the location desired, choosing an image to associate with it in the new waypoint dialog Select the tool, then left click on waypoint to be moved. Left click again and drag the waypoint to the location desired Then using the Select tool left click on waypoint to select it, then right click to access the Waypoint properties menu, then choose Update Geotag on ImageUpdate The Update Geotag on Image options are only available when a waypoint has an image associated with it.
Automatic Positioning Against a Tracklog First you will need a tracklog with timestamps in it. Either load one from a previously saved file or freshly acquired from a GPS device - see Getting Started. It helps if this is the track that was recorded at the time you took some photographs! Select the track either from the layers panel on the left or via the viewport using the tool. Then right click on it and chose the Geotag Images... leading you to the Dialog. Load some images that where taken around the time the track log was recorded. Confirm the other options in the dialog - normally the defaults should be alright and select OK. If things are succesful, new waypoints with thumbnail images of the photographs will appear. You should probably check they are really in the right place as often the timestamp of the camera may not be aligned to the GPS correctly leading to inferring incorrect locations. Option: Overwrite Waypoints This is particularly useful when one finds an attempt at geotagging gives wrong locations, often due to time offset issues. Simply try again with a new time offset (often 1 hour adjustments due to Daylight Savings or Summer Time times) and the old waypoints will be updated (instead of creating new ones). If you have multiple tracks in a TrackWaypoint layer, then invoking the Geotag Images... action on the layer will search all the tracks to find location matches.
GPS Real Time Location (Not <trademark>Windows</trademark>) &appname; relies on gpsd to provide the current location from a real time feed from a GPS device. Unfortunately gpsd is not available on Windows, so currently this functionality is disabled in Windows builds of &appname; This assumes you already have a layer enabled for ease of use (if not see above to get one). Turn on the GPS Device, ensure it has figured out it's location and plug it in to your computer.
Set Up GPS Layer You will need a layer. One can be added via LayersAdd GPS Layer. Adjust the Realtime Tracking Mode settings to interface with gpsd as necessary. Normally the defaults should suffice. Current Linux distributions should run gpsd automatically when a GPS Device is plugged in. Otherwise you may have to run gpsd manually. Then right-click the layer and select Start Realtime Tracking. Hopefully the viewport should jump to the GPS location. Troubleshooting checklist: Confirm gpsd is running. Confirm on the GPS device it has a location. Confirm the Realtime Tracking Mode settings.
Extending Viking Currently, &app; has some extention points based on configuration files. The file format is heavily inspired by the GtkBuilder file format: you specify the class of the GObject to build and set its properties. Technically, it is a XML file containing a "objects" root element. Inside this element, you set a collection of "object". Here is an example: Property value Property value ... ]]> You can find more examples in the documentation part of the distribution.
Map Source It is possible to add new map's sources. The file is ~/.viking/maps.xml for UNIX like systems and C:\Documents and Settings\username\.viking\maps.xml on Windows XP. An example of the file is in the distribution doc/examples/maps.xml. Further examples and values are online in the Maps Wiki The VikSlippyMapSource allows to declare any map's source working like OpenStreetMap. It supports the following properties: id this is an integer and should be unique as it used to identify the map source label the text displayed in the map's source selection dialog hostname the server's hostname (eg. "tile.openstreetmap.org") url the parametrized address of the tile, in the spirit of C printf format, with 3 "%d" fields for X, Y and Z (zoom level) (eg. "/%d/%d/%d.png") The VikTmsMapSource allows to declare any TMS service. It supports the following properties: id this is an integer and should be unique as it used to identify the map source label the text displayed in the map's source selection dialog hostname the server's hostname (eg. "tile.openstreetmap.org") url the parametrized address of the tile, in the spirit of C printf format, with 3 "%d" fields for X, Y and Z (zoom level) (eg. "/%d/%d/%d.png") The VikWmscMapSource allows to declare any WMS or WMS-C service. It supports the following properties: id this is an integer and should be unique as it used to identify the map source label the text displayed in the map's source selection dialog hostname the server's hostname (eg. "tile.openstreetmap.org") url the parametrized address of the tile, in the spirit of C printf format, with 4 "%s" fields for bounding box coordinates (eg. "/coord=%s,%s,%s,%s")
Go-to search engines It is possible to add new new search engines for the "Go-To" feature. The file is ~/.viking/goto_tools.xml. An example of the file in the distribution doc/examples/goto_tools.xml. Currently, there is a single object class available: VikGotoXmlTool. Such feature allows to declare any search engine using a XML format as result. The related properties are: label the text displayed in the Go-To dialog url-format the parametrized address of the query, in the spirit of C printf format, with a single "%s" field (replaced by the query string) lat-path XML path of the latitude (eg. /root/parent/elem) lat-attr (optional) name of the attribute (of previous element) containing the latitude lon-path XML path of the longitude (eg. /root/parent/elem) lon-attr (optional) name of the attribute (of previous element) containing the longiude As a facility (or readability) it is possible to set both path and attribute name in a single property, like an XPath expression. To do so, simply set both info in lat-path (or lon-path) in the following format: /root/parent/elem@attribute.
External tools It is possible to add new external tools. The file is ~/.viking/external_tools.xml. An example of the file in the distribution doc/examples/external_tools.xml. The VikWebtoolCenter allows to declare any Webtool using a logic based on center coordinates and zoom level value. The related properties are: id this is an integer and should be unique as it used to identify the tool label the text displayed in the menu entry url the parametrized URL to open, in the spirit of C printf format, with 2 "%s" and a "%d" fields for X, Y and Z (zoom level) (eg. "http://hostname/?lat=%s&lon=%s&zoom=%d") The VikWebtoolBounds allows to declare any Webtool using a logic based on bounds coordinates. The related properties are: id this is an integer and should be unique as it used to identify the tool label the text displayed in the menu entry url the parametrized address of the tile, in the spirit of C printf format, with 4 "%s" fields for left, right, bottom and top (eg. "http://hostname:8111/load_and_zoom?left=%s&right=%s&bottom=%s&top=%s")
More Note that, on UNIX like systems, the extension files (maps.xml, goto_tools.xml, external_tools.xml) are also searched in /etc/viking and /usr/share/viking directories (or related in your system). The XDG_DATA_DIRS environment variable can be used to change these directories. The XDG_DATA_HOME environment variable s also used (if set) to look for these extension files.
What to Do if &appname; Does Not Seem to Work In order to get some information about what &appname; is doing, start it in verbose debug mode via the command line: viking -dV For instance you can check the correct URLs &appname; is using in requesting remote data for DEMs or map tiles in the verbose debug output. E.g. Something like this for DEMs: ** (viking:28778): DEBUG: curl_download_uri: uri=http://dds.cr.usgs.gov/srtm/version2_1/SRTM3/Eurasia/N48E008.hgt.zip * About to connect() to dds.cr.usgs.gov port 80 (#0) * Trying 152.61.128.95... * connected * Connected to dds.cr.usgs.gov (152.61.128.95) port 80 (#0) GET /srtm/version2_1/SRTM3/Eurasia/N48E008.hgt.zip HTTP/1.1 User-Agent: viking/0.9.8 libcurl/7.18.2 GnuTLS/2.4.2 zlib/1.2.3.3 libidn/1.8 Host: dds.cr.usgs.gov Accept: */* HTTP/1.1 200 OK Date: Sun, 26 Jul 2009 18:13:38 GMT Server: Apache Last-Modified: Tue, 21 Jul 2009 19:57:35 GMT ETag: eac3f8-1828f5-46f3caa76070a Accept-Ranges: bytes Content-Length: 1583349 Content-Type: application/zip * Connection #0 to host dds.cr.usgs.gov left intact * Closing connection #0 ** (viking:28778): DEBUG: dem_layer_add_file: /home/username/.viking-maps/srtm3-Eurasia/N48E008.hgt.zip Or for OSM Mapnik tile server: * About to connect() to tile.openstreetmap.org port 80 (#0) * Trying 193.63.75.28... * connected * Connected to tile.openstreetmap.org (193.63.75.28) port 80 (#0) GET /13/4065/2748.png HTTP/1.1 User-Agent: viking/0.9.96 libcurl/7.20.1 GnuTLS/2.8.6 zlib/1.2.3.4 libidn/1.18 Host: tile.openstreetmap.org Accept: */* * HTTP 1.0, assume close after body HTTP/1.0 200 OK Date: Thu, 14 Oct 2010 22:18:42 GMT Server: Apache/2.2.8 (Ubuntu) ETag: "b66ff9d46474bab68262a3483428a232" ** (viking:16704): DEBUG: curl_get_etag_func: ETAG found: "b66ff9d46474bab68262a3483428a232" Content-Length: 17194 Cache-Control: max-age=94805 Expires: Sat, 16 Oct 2010 00:38:47 GMT Content-Type: image/png Age: 5153 X-Cache: HIT from konqi.openstreetmap.org X-Cache-Lookup: HIT from konqi.openstreetmap.org:3128 Via: 1.1 konqi.openstreetmap.org:3128 (squid/2.7.STABLE7) Connection: close * Closing connection #0 * About to connect() to a.andy.sandbox.cloudmade.com port 80 (#0) * Trying 178.63.75.195... ** (viking:16704): DEBUG: curl_download_uri: uri=http://tile.openstreetmap.org/13/4065/2749.png * About to connect() to tile.openstreetmap.org port 80 (#0) * Trying 193.63.75.28... * connected * Connected to a.andy.sandbox.cloudmade.com (178.63.75.195) port 80 (#0) GET /tiles/cycle/13/4065/2747.png HTTP/1.1 User-Agent: viking/0.9.96 libcurl/7.20.1 GnuTLS/2.8.6 zlib/1.2.3.4 libidn/1.18 Host: a.andy.sandbox.cloudmade.com Accept: */* * connected * Connected to tile.openstreetmap.org (193.63.75.28) port 80 (#0) GET /13/4065/2749.png HTTP/1.1 User-Agent: viking/0.9.96 libcurl/7.20.1 GnuTLS/2.8.6 zlib/1.2.3.4 libidn/1.18 Host: tile.openstreetmap.org Accept: */* * HTTP 1.0, assume close after body HTTP/1.0 200 OK Date: Thu, 14 Oct 2010 23:44:35 GMT Server: Apache/2.2.8 (Ubuntu) ETag: "8e520ad47ce9c1b63430554886eb5fab" ** (viking:16704): DEBUG: curl_get_etag_func: ETAG found: "8e520ad47ce9c1b63430554886eb5fab" Content-Length: 18094 Cache-Control: max-age=87742 Expires: Sat, 16 Oct 2010 00:06:57 GMT Content-Type: image/png X-Cache: MISS from konqi.openstreetmap.org X-Cache-Lookup: MISS from konqi.openstreetmap.org:3128 Via: 1.1 konqi.openstreetmap.org:3128 (squid/2.7.STABLE7) Connection: close
Dependencies gpsbabel &appname; uses GPSBabel to convert data. unbuffer (optional) &appname; uses unbuffer command to optimize conversion calls. gpsd (optional - but not <trademark>Windows</trademark>) &appname; can use gpsd to get the current location.
viking-1.4.2/help/C/legal.xml0000644000175000017500000000747612175546637012704 00000000000000 Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License (GFDL), Version 1.1 or any later version published by the Free Software Foundation with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. You can find a copy of the GFDL at this link or in the file COPYING-DOCS distributed with this manual. This manual is part of a collection of GNOME manuals distributed under the GFDL. If you want to distribute this manual separately from the collection, you can do so by adding a copy of the license to the manual, as described in section 6 of the license. Many of the names used by companies to distinguish their products and services are claimed as trademarks. Where those names appear in any GNOME documentation, and the members of the GNOME Documentation Project are made aware of those trademarks, then the names are in capital letters or initial capital letters. DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT ARE PROVIDED UNDER THE TERMS OF THE GNU FREE DOCUMENTATION LICENSE WITH THE FURTHER UNDERSTANDING THAT: DOCUMENT IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS FREE OF DEFECTS MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY, ACCURACY, AND PERFORMANCE OF THE DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS WITH YOU. SHOULD ANY DOCUMENT OR MODIFIED VERSION PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL WRITER, AUTHOR OR ANY CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER; AND UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER IN TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL THE AUTHOR, INITIAL WRITER, ANY CONTRIBUTOR, OR ANY DISTRIBUTOR OF THE DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER DAMAGES OR LOSSES ARISING OUT OF OR RELATING TO USE OF THE DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. viking-1.4.2/help/viking.omf.in0000644000175000017500000000045712175546637013303 00000000000000 manual viking-1.4.2/intltool-merge.in0000644000175000017500000000000012170052156013204 00000000000000viking-1.4.2/Makefile.in0000644000175000017500000006330312175546613012012 00000000000000# Makefile.in generated by automake 1.13.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = . DIST_COMMON = INSTALL NEWS README AUTHORS ChangeLog \ $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/configure $(am__configure_deps) mkinstalldirs \ $(srcdir)/viking.spec.in COPYING TODO depcomp install-sh \ missing ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/expat.m4 \ $(top_srcdir)/m4/libcurl.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/src/config.h CONFIG_CLEAN_FILES = viking.spec CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope distdir dist dist-all distcheck am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags CSCOPE = cscope DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.bz2 $(distdir).zip GZIP_ENV = --best DIST_TARGETS = dist-bzip2 dist-gzip dist-zip am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = -I m4 ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_STATUS_DEPENDENCIES = @CONFIG_STATUS_DEPENDENCIES@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DB2MAN_XSL = @DB2MAN_XSL@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DISTCHECK_CONFIGURE_FLAGS = \ --disable-scrollkeeper DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ EXPAT_CFLAGS = @EXPAT_CFLAGS@ EXPAT_LIBS = @EXPAT_LIBS@ GDK_PIXBUF_CSOURCE = @GDK_PIXBUF_CSOURCE@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GLIB_MKENUMS = @GLIB_MKENUMS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HELP_DIR = @HELP_DIR@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ LDFLAGS = @LDFLAGS@ LIBCURL = @LIBCURL@ LIBCURL_CPPFLAGS = @LIBCURL_CPPFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_CFLAGS = @PACKAGE_CFLAGS@ PACKAGE_LIBS = @PACKAGE_LIBS@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ POW_LIB = @POW_LIB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XP = @XP@ _libcurl_config = @_libcurl_config@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = src test data po win32 help $(DO_DOCS) INTLTOOL = \ intltool-extract.in \ intltool-merge.in \ intltool-update.in EXTRA_DIST = \ gnome-doc-utils.make \ ChangeLog.0 \ viking.spec \ $(INTLTOOL) MAINTAINERCLEANFILES = \ gnome-doc-utils.make DISTCLEANFILES = \ intltool-extract \ intltool-merge \ intltool-update # Ignore gtk theme cache files on distcheck distuninstallcheck_listfiles = find . -type f -print | grep -v 'icon-theme.cache' all: all-recursive .SUFFIXES: am--refresh: Makefile @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): viking.spec: $(top_builddir)/config.status $(srcdir)/viking.spec.in cd $(top_builddir) && $(SHELL) ./config.status $@ # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) mkdir $(distdir)/_build $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__post_remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--refresh check check-am clean clean-cscope clean-generic \ cscope cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \ dist-gzip dist-hook dist-lzip dist-shar dist-tarZ dist-xz \ dist-zip distcheck distclean distclean-generic distclean-tags \ distcleancheck distdir distuninstallcheck dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags tags-am uninstall uninstall-am # Optionally build documentation bits @VIKING_DOC_TRUE@ DO_DOCS = "doc" full: ./autogen.sh make .PHONY: generate-changelog generate-changelog: if test -d $(top_srcdir)/.git; then \ cd $(top_srcdir) ; sh $(top_srcdir)/maintainer/git2changelog.sh > $(distdir)/c-l; \ mv $(distdir)/c-l $(distdir)/ChangeLog; \ fi dist-hook: viking.spec generate-changelog cp $(top_builddir)/viking.spec $(distdir) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: viking-1.4.2/win32/0000755000175000017500000000000012175546637010770 500000000000000viking-1.4.2/win32/installer.bat0000644000175000017500000000650012175546146013371 00000000000000@echo OFF :: :: TODO return an error code when not completed as expected :: echo STARTING INSTALLER PROCESS... :: For windres + strip set PATH=%PATH%;%SystemDrive%\MinGW\bin echo Create Icon pushd installer\pixmaps windres.exe viking_icon.rc -o viking_icon.o popd echo Remove debugging symbols pushd ..\src strip.exe -g viking.exe popd set MYCOPY=copy /y set DESTINATION=installer\bin echo Copying locale files into layout required by NSIS dir ..\po\*.gmo /B > gmolist.txt :: Create directories like de\LC_MESSAGES for /f %%i in (gmolist.txt) do mkdir %DESTINATION%\locale\%%~ni\LC_MESSAGES for /f %%i in (gmolist.txt) do %MYCOPY% ..\po\%%i %DESTINATION%\locale\%%~ni\LC_MESSAGES\viking.mo del gmolist.txt echo Copying Viking %MYCOPY% ..\src\viking.exe %DESTINATION% %MYCOPY% installer\pixmaps\viking_icon.ico %DESTINATION% %MYCOPY% ..\COPYING %DESTINATION%\COPYING_GPL.txt %MYCOPY% ..\AUTHORS %DESTINATION%\AUTHORS.txt %MYCOPY% ..\NEWS %DESTINATION%\NEWS.txt %MYCOPY% ..\README %DESTINATION%\README.txt :: ATM this relies on being generated by an external system %MYCOPY% cache\ChangeLog.txt %DESTINATION% :: ATM this relies on being generated by an external system %MYCOPY% ..\help\C\viking.pdf %DESTINATION% echo Copying Libraries set MINGW=C:\MinGW if not exist "%MINGW%" ( echo Required %MINGW% does not exist goto Tidy ) set MINGW_BIN=%MINGW%\Bin set LIBCURL=%MINGW_BIN%\libcurl.dll if exist "%LIBCURL%" ( %MYCOPY% "%LIBCURL%" %DESTINATION% %MYCOPY% "%MINGW%\COPYING_curl.txt" %DESTINATION% ) else ( echo %LIBCURL% does not exist goto Tidy ) set LIBEXIF=%MINGW_BIN%\libexif-12.dll if exist "%LIBEXIF%" ( %MYCOPY% "%LIBEXIF%" %DESTINATION% ) else ( echo Required %LIBEXIF% does not exist goto Tidy ) :: TODO Maybe embed http://gtk-win.sourceforge.net/home/index.php/Main/EmbeddingGTK directly in NSIS? :: Best to use the same GTK version as we built against in prepare.bat!! echo =+=+= echo Checking gtk runtime echo =+=+= set GTK_RUNTIME=gtk2-runtime-2.24.10-2012-10-10-ash.exe pushd cache if not exist %GTK_RUNTIME% ( set PATH=%PATH%;%ProgramFiles%\GnuWin32\bin wget http://downloads.sourceforge.net/gtk-win/%GTK_RUNTIME% ) if not exist %GTK_RUNTIME% ( echo Required GTK Runtime does not exist goto Tidy ) :: Install GTK into temporary location so we can repackage it :: Destination path appears to have to be an absolute kind popd cd > tmp.tmp set /p PWD=&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = win32 DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/mkinstalldirs ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/expat.m4 \ $(top_srcdir)/m4/libcurl.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_STATUS_DEPENDENCIES = @CONFIG_STATUS_DEPENDENCIES@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DB2MAN_XSL = @DB2MAN_XSL@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ EXPAT_CFLAGS = @EXPAT_CFLAGS@ EXPAT_LIBS = @EXPAT_LIBS@ GDK_PIXBUF_CSOURCE = @GDK_PIXBUF_CSOURCE@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GLIB_MKENUMS = @GLIB_MKENUMS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HELP_DIR = @HELP_DIR@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ LDFLAGS = @LDFLAGS@ LIBCURL = @LIBCURL@ LIBCURL_CPPFLAGS = @LIBCURL_CPPFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_CFLAGS = @PACKAGE_CFLAGS@ PACKAGE_LIBS = @PACKAGE_LIBS@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ POW_LIB = @POW_LIB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XP = @XP@ _libcurl_config = @_libcurl_config@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = \ prepare.bat \ configure_and_make.bat \ make.bat \ installer.bat \ README.txt SUBDIRS = installer all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu win32/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu win32/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic cscopelist-am ctags ctags-am \ distclean distclean-generic distclean-tags distdir dvi dvi-am \ html html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags tags-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: viking-1.4.2/win32/Makefile.am0000644000175000017500000000016712175546146012743 00000000000000 EXTRA_DIST = \ prepare.bat \ configure_and_make.bat \ make.bat \ installer.bat \ README.txt SUBDIRS = installer viking-1.4.2/win32/installer/0000755000175000017500000000000012175546637012765 500000000000000viking-1.4.2/win32/installer/langmacros.nsh0000644000175000017500000000524512152216677015544 00000000000000;; ;; Windows Viking NSIS installer language macros ;; Based on Win32 Pidgin installer !macro VIKING_MACRO_DEFAULT_STRING LABEL VALUE !ifndef "${LABEL}" !define "${LABEL}" "${VALUE}" !ifdef INSERT_DEFAULT !warning "${LANG} lang file missing ${LABEL}, using default..." !endif !endif !macroend !macro VIKING_MACRO_LANGSTRING_INSERT LABEL LANG LangString "${LABEL}" "${LANG_${LANG}}" "${${LABEL}}" !undef "${LABEL}" !macroend !macro VIKING_MACRO_LANGUAGEFILE_BEGIN LANG !define CUR_LANG "${LANG}" !macroend !macro VIKING_MACRO_LANGUAGEFILE_END !define INSERT_DEFAULT !include "${VIKING_DEFAULT_LANGFILE}" !undef INSERT_DEFAULT ; Viking Language file Version 3 ; String labels should match those from the default language file. ; Startup checks !insertmacro VIKING_MACRO_LANGSTRING_INSERT INSTALLER_IS_RUNNING ${CUR_LANG} !insertmacro VIKING_MACRO_LANGSTRING_INSERT VIKING_IS_RUNNING ${CUR_LANG} ; License Page !insertmacro VIKING_MACRO_LANGSTRING_INSERT VIKING_LICENSE_BUTTON ${CUR_LANG} !insertmacro VIKING_MACRO_LANGSTRING_INSERT VIKING_LICENSE_BOTTOM_TEXT ${CUR_LANG} ; Components Page !insertmacro VIKING_MACRO_LANGSTRING_INSERT VIKING_SECTION_TITLE ${CUR_LANG} !insertmacro VIKING_MACRO_LANGSTRING_INSERT VIKING_SHORTCUTS_SECTION_TITLE ${CUR_LANG} !insertmacro VIKING_MACRO_LANGSTRING_INSERT VIKING_DESKTOP_SHORTCUT_SECTION_TITLE ${CUR_LANG} !insertmacro VIKING_MACRO_LANGSTRING_INSERT VIKING_STARTMENU_SHORTCUT_SECTION_TITLE ${CUR_LANG} !insertmacro VIKING_MACRO_LANGSTRING_INSERT VIKING_FILE_ASSOCIATION_SECTION_TITLE ${CUR_LANG} !insertmacro VIKING_MACRO_LANGSTRING_INSERT VIKING_SECTION_DESCRIPTION ${CUR_LANG} !insertmacro VIKING_MACRO_LANGSTRING_INSERT VIKING_SHORTCUTS_SECTION_DESCRIPTION ${CUR_LANG} !insertmacro VIKING_MACRO_LANGSTRING_INSERT VIKING_DESKTOP_SHORTCUT_DESC ${CUR_LANG} !insertmacro VIKING_MACRO_LANGSTRING_INSERT VIKING_STARTMENU_SHORTCUT_DESC ${CUR_LANG} !insertmacro VIKING_MACRO_LANGSTRING_INSERT VIKING_FILE_ASSOCIATION_DESC ${CUR_LANG} ; Installer Finish Page !insertmacro VIKING_MACRO_LANGSTRING_INSERT VIKING_FINISH_VISIT_WEB_SITE ${CUR_LANG} ; Viking Section Prompts and Texts !insertmacro VIKING_MACRO_LANGSTRING_INSERT VIKING_PROMPT_CONTINUE_WITHOUT_UNINSTALL ${CUR_LANG} ; Uninstall Section Prompts !insertmacro VIKING_MACRO_LANGSTRING_INSERT un.VIKING_UNINSTALL_ERROR_1 ${CUR_LANG} !insertmacro VIKING_MACRO_LANGSTRING_INSERT un.VIKING_UNINSTALL_ERROR_2 ${CUR_LANG} !undef CUR_LANG !macroend !macro VIKING_MACRO_INCLUDE_LANGFILE LANG FILE !insertmacro VIKING_MACRO_LANGUAGEFILE_BEGIN "${LANG}" !include "${FILE}" !insertmacro VIKING_MACRO_LANGUAGEFILE_END !macroend viking-1.4.2/win32/installer/pixmaps/0000755000175000017500000000000012175546637014446 500000000000000viking-1.4.2/win32/installer/pixmaps/viking_icon.rc0000644000175000017500000000003412152216677017201 00000000000000100 ICON "viking_icon.ico" viking-1.4.2/win32/installer/pixmaps/Makefile.in0000644000175000017500000003100112175546614016421 00000000000000# Makefile.in generated by automake 1.13.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = win32/installer/pixmaps DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/mkinstalldirs ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/expat.m4 \ $(top_srcdir)/m4/libcurl.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_STATUS_DEPENDENCIES = @CONFIG_STATUS_DEPENDENCIES@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DB2MAN_XSL = @DB2MAN_XSL@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ EXPAT_CFLAGS = @EXPAT_CFLAGS@ EXPAT_LIBS = @EXPAT_LIBS@ GDK_PIXBUF_CSOURCE = @GDK_PIXBUF_CSOURCE@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GLIB_MKENUMS = @GLIB_MKENUMS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HELP_DIR = @HELP_DIR@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ LDFLAGS = @LDFLAGS@ LIBCURL = @LIBCURL@ LIBCURL_CPPFLAGS = @LIBCURL_CPPFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_CFLAGS = @PACKAGE_CFLAGS@ PACKAGE_LIBS = @PACKAGE_LIBS@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ POW_LIB = @POW_LIB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XP = @XP@ _libcurl_config = @_libcurl_config@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = \ viking_icon.ico \ viking_icon.rc all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu win32/installer/pixmaps/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu win32/installer/pixmaps/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic cscopelist-am \ ctags-am distclean distclean-generic distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: viking-1.4.2/win32/installer/pixmaps/Makefile.am0000644000175000017500000000006312152216677016412 00000000000000 EXTRA_DIST = \ viking_icon.ico \ viking_icon.rc viking-1.4.2/win32/installer/pixmaps/viking_icon.ico0000644000175000017500000007234612120730273017352 00000000000000 ( 00hh&  V00! h0 5  >00 %>O( a`!mWqBz|qQm#`e£cj3e '',ƿR'w#_rgwh8fc6Й3rfe68r&[7u J?(0 OePfH>YaSs}~ynji,ߵXRUURfX"""' X"gkjeRDDDzb+DtDDIkPRMtDDMv tGtDMtDGwDGwh-DwwDMwOb$DsDGwh44=wwt =33=ww}e333wwgjh933wvnh:34wf㣓=7wf%P33=DM3CD{(k( UO( @IiKcD9WkvEm}^(XbPUffUXyeX"-ykPU"ffkٗkPUtGif%X+dDDLIvgDdDDDDb+dDdDDDDkPXDGwDDGwJfRDGwDDDgJftDGwDDGvthDDwwtDGvtbDDwwDDGwtAhDDwyCDGvwOC43347wwwCPCsC33GwwwD93337wwffv9334wwvviv㙙333wwvf 㙙34wwgfP93CGwvk%P339tGGvb3334DDk(P3344DFk%Pk(U?(0`EjB_=@[#Oceh+|wUUX"(P"%X+fffPPUUUUX+fifbUXUUUU+fifUX""""(yf(PU"+"-fU"kffkkfbUX"fg|ffikU+fgf%X+f̚fUl̚fbPX+flʪvkR+llLfUlLLįf(X+lLgDDw̯fX+DwfDDGf?fbRDvgtDDLGf|kDLvv|DDDflsf%DDGgggDDDGfgf%dDDwwwwDDDGfgLf+dDDwwwt4DDvgAv%+D4Gww444Dwgft{ 44GyCCCGwwff|bP4X ~lU+V?s#TRhzzzy۴TDyyyPzXs"'^#yZ1T3ho,_ZaJOLcaUOGxy2C^Ep`Lnnn1gRQ ud@xLLL(H v0ؚHw{szZZZpc|.#K5`O/R4Qh'KW7nJ`K(kIocRUZUNwUnV ts,5[ C 3f*+VSsoiMQMcRRRDi87e!aKZDFjhL m|-*Alfdg w,9\b~HX$` s;:"v%zBGV c#_^t0[Q–Ď'xyu/o5) @2{ICU]STO=?&3krJn}p(E1W>P 6N+Y<.RqM4?(0@U E cȊ94nNsR PlWGO@Vx)͗GXWPU,W2d=] 1UTSWo/+++`mN@\cI_H;+TkϓW 6xlX][Os(avu.4`rW3JeDDq[FJG{zyUv%%P[ E{}l?`ThJMQ ;sXPFhݣV @M6moPSYLp*ahn+yyx8a ["0d\V^Z֙Hs",J isnX TlqS *xM̎<f GON 5q\Ryۺΐ?QEEEeUXFXLlhhhLe$|Y[ #W/|<SyvtH7k,c(B a1{{44;5_u3S|Oe`PȋP; 3f*:kJQuƴ5"swUaMRcdMQMiiity4ZZZ?b~lU'd)5qDnnnl|*(S1[ fbBb#kkkiJ]SRFYQΏ>UȹRD6k=j-X\XX3IӶIX@^uȶIoo AUuu"'Io**Mً@ta>ZĔZMVڄ" 'Z++eBUNZ+6bv)" oLTS~c,ɧvVU0t;J44(.ǘv " >RRhs&$R4~/."q$H׿6H|$&5ice)MlHtxxE!OO;^z3O( @9s*e+ E j̎<paJs[ Tu$סWLLLj3e3PhU<`1;iVkx:KQWWYk=<+QV3Pƈ[VsN Lw*˔GZZZ6zYvvv…4dpW6S)=oI2;-αc{*V] XskrNAm G.f,=tfUiTLNSIt*Hpu27_"V2ZX\:m$a'C gȋ9{{{KLLؙGs#Qo[ZmoΧZ TۺtۯX UwwwRxRRRWQRQRcEd0h:F pSNNN|||Js5|Q^```X}+>H;k!]#zeJdŇ6i|՗Dr#NvU oW[ΑEMBPWUAAA=,cڛyUvU Ps$יGlllyyyƈ7fSgO&_$6iUSm#J ]=pi"Wq;HHM NIjSYQnnn+R|Ёǘ*****ҭ:g/A*ǘ*~~~+A9gA~*ə||9lllg>A*RԚ?SS9A+Й)3ʞ3)9@@A̚),ʂY00kX9A7+3,--тXXh@lAZ=,ˉ-тIXTkT@SAb!=}}[PHHH}٧,ׅXX/Կ7,H%H(XkkkS>A=AommQvO%[]TkXgAQ]EEvF4\ٛS7{E#cc;;am%󕃓0?{G]c paQmFwVa0eu^ ;f$PnyeYYY^uu #%%$PnnAWr'''16 p5QPn/7ai 8y1y1'u p]fF$nAaLIyNc]5f4PnAMer޵""""Y^a5 xP/t+DuNEOo<}=7 s8u ;Oo=7НLLx7!Zb rrMZ엗?(0` K@b-e+G Nk+\ ~2j```E7lY&bI&dmmmu'MkQ d՘qkcT4qXqmT9lŰvYNt$c,D "]#7qXcd_P4]^^u4YYYH5l1h4STɎfM 7wV&T5i^b=t Fhkkky(SmkBwZ`]FަTR֘Fs.[ VUlllB{TVY p)ҔBRQY UK'c)ɋ:^odWĕHJW_aaPXWg̎<ƈ62SPZ-ߺ+eD"vvu8vvvvv,,""""j M ܑ;>;RNN^Dvvv ooo,""u .;;U-/6P}}8 uwww}}}}op,,l YH;δ/ߟ ,nnn u\n n nw8,p HHtD6W0 򗖖 u,fYtZP+!}11777 \\uޞfYVHt?D63<˖77Tc]]7E $YHtZ笲Wts,ma`O/֍s$M}l~lUsoit<'7=2 (0 ` "FC $^Z[Z.40555ʛd (01-# \OTQ+V?.X0a5">>>0#?\t|||yyy}jsBy[6f7n2h1g+Vq 3apppNLJJ>.P; P;E8(B@=EnW@w:q8|e5q3u6k7$III&9rVTQ`BORQQQL]SK~BwDJVD+P砠` 1qUOGM TaMUUTSRQfbU̓m[NS;t+ZZZ[_ZTQ WlRNN Y X X WUTs)fܝuƴ]eSI)qJ&&&߱O8|||xP[ \ CQL^^] [ qU (H U{͉y۴sYX[?Ώ>ˍ<Ň6Xr2)e+ \#T%OIqRc{kߩKl]rf.]cRFaJvLɚKؚHҔCˎ<4=j-Bb#@[N GC (S1~outEEEHHH6DTUXUXnUPԙHΐ?5Vm-Mc"UL F A :B:rrrnnnYYYCCCD*orib^ak\hUJΐ?3hn*![!RJ E <eeelnnniii㙙tBoe^wUI{=yw1u%A]KWKAMQMh-* PlZ֠PD8ts,q iazSRSLs6 "MvИNΏ=ƒ1w%maoT0hfdj6 :`yu_~lUsj]vtttN+ '3;=7-  ( @  GktD &VoooIIIBBB}}}*  " Mrrr999"B0-Y-\+sss##/:@B@:/'Jeee-60)oH2d4g3f+V GGG> 6Pjnnnddd```dddmmm~~~tNl;o;o9p4u2QM0c5hP3|||8YzgggQQQAAA999666999AAAPPPaaaBo?s?JD8m/ ###u !Et\\\H=-ԂLSSSRRRRQPaFNăFGċM]cYr':::ʹGMvvv^egg$WVXXgckjhf[YLIDN ^z_]fU@uE/)))ܦZ[smfknp~k!#`%$a&%b(7d(t&t$r"p lEZPLJQY u.kbmòb@3Y333ӬU^{o_ps!v$u'+f+*g,.h.t,{*y(w&r#o =[RMJwU W ο}nPDy:a]]]9^vg|)-0{457ƈ7Ň6Å41st/)e,$`'[!UP!N]S X WwbߥXύMÂY~ٞl"Z}nƒ0~4Nx9:<=̎<ʌ;Ȋ9Ć5sw2,h.&b) \#VQ;RJW ys0teݛUĆ[o̴QK̏=PCTGHIؚHיGԖDВAʍ;6Fn1)e+"^$X SL H D @Yw}q```***PPPƼI CőMTJKNMOYPNܝKיHӕC͏>ň7x1Pk+cg#Y`GXL GD > 5w,r$"Z$TM H D %;&eeeb64I% F}ϰhd]vWQPEn=>q5w*s"aa}`aWH?MMMI% CqdZRڛHƐ?6}-u%ohb[ dK)aa`sD +Oz٤^OטE͎<ą3|*s"lf`hN-]]]}P, 5UuvzVԠu?n6d6l\Fb`^rrrwV72Lf{xxxwww}}}|gM4  (0` %''  *GbttY0&DioooQQQ@@@BBB```e*    +Krccc???%)'("""VVVY !"! (Mz]]]999#,'$[<-Y1c*V+ )))sss:  #+3:?ABB?:3+'4`eee787"5+)oH1`4h4g3g3f+V  GGG` (5BMYbimomicYOJ^ilj5TB/S6h8k7k6k1r2o4h3gK/ )))vvv5  &6GYjzxxxnnnfffbbb```aaafffmmmxxx{tdv6,M8]<sEtEtEsD[:I36.#210;;;@oCx@~:vi7r:z:YT5~8z6{7|8o7k,T XXXN #8RprrrWWWBA?N;!sE ORRQQQQQQNpBE18zSH}FAja=tkC}?>?FOD9q7j/ 777ˋu(!7StkkkMMMH=-xH RSSSSSRRRRRQQPsRP|NăHEGċIR]beðY>:n)wK cccE4QsiiiKJJ^CPTTRmOTTTTTSSSRRRPgYTˉSʈPʗ^ji]UW^K;t8j&???Ėk" ,ImnnnLLKbDTUUT%FoQVVVVUUUTTSSRg]ΌZѐZ̞sy^JtJuEyoNW@r!T8+++www5 #AgqqqSLCV Z Z [ [ Y I HDP] ] ] ] \ \ [ Z Z VP G dP UV zǃrqĶp]ZQySeeK?u6dPPPX-P{]]]xP\ \ ] ^ ^ eWKKM^```__^]\ @N FF U UL|vxĵdYTTcZA>sG0111ԁ.9`wwwZQG\ ^ _`abMVOOONXcdccba`^&M H F=L U LS~j[W[ddI@u2[ YYYNCnjjjtT+abcdea%TSSTT}bhgfedc_MJ HHnS 6J cumfYWfWA>r;):::ʑpMz```^dfghg$WVWXXXgclkjihfcPLJ HDN vT hm_\^fcH@u-}Q)))www*Ue]Rehjkl]bZ [!\" ]#!]#!]#Gb#p onmkifRNLJaSY W }zodWYgS@y?ɑ@BCΓBҔBғBВAϐ?̎=ɋ:ƈ7}50l3,h/(d*#_&["WS0SLIH sS :I Jp_ŨK}g/62BBBق7Kyw̏=_BBETGGIIٚHؚHיG՗EӕCВȀ=ɋ:6_t3-i0)e+$`' \"XT&RL I G D B ?YwwʴqkkkUUU***555kkkICmőM_IILKNMONPYPOܟMܝKٛI֘GӕCϑ@ˍ<ň73Oo0Pk+Fe&i Y`r`PL I F D B ; q5w-x's"xfJ\}`x\KSH D !<"MMMooomI.1Mpfb^YTOIC=Rw89n2?j,q%q lhd`] aR >B$MMMkkkrP35Qqd]WRݞLטEƐ?Ƌ93}-w(s"ojfb_Y dK)SSRooosS6  !6OlϢhUOڛHԕB͎<Lj60|*v%qlhd`TUM@]]]vvvnP6"   2Ic}]ϔGБ?ʋ8Å2,y't"ojcY"aR>ZZZmmmdK3!  ,?UkjzVԣxBs;n6i2}aJT]dhjid]TJ>2&   viking-1.4.2/win32/installer/Makefile.in0000644000175000017500000004537212175546614014760 00000000000000# Makefile.in generated by automake 1.13.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = win32/installer DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/mkinstalldirs ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/expat.m4 \ $(top_srcdir)/m4/libcurl.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_STATUS_DEPENDENCIES = @CONFIG_STATUS_DEPENDENCIES@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DB2MAN_XSL = @DB2MAN_XSL@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ EXPAT_CFLAGS = @EXPAT_CFLAGS@ EXPAT_LIBS = @EXPAT_LIBS@ GDK_PIXBUF_CSOURCE = @GDK_PIXBUF_CSOURCE@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GLIB_MKENUMS = @GLIB_MKENUMS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HELP_DIR = @HELP_DIR@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ LDFLAGS = @LDFLAGS@ LIBCURL = @LIBCURL@ LIBCURL_CPPFLAGS = @LIBCURL_CPPFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_CFLAGS = @PACKAGE_CFLAGS@ PACKAGE_LIBS = @PACKAGE_LIBS@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ POW_LIB = @POW_LIB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XP = @XP@ _libcurl_config = @_libcurl_config@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = \ viking-installer.nsi \ langmacros.nsh SUBDIRS = pixmaps translations all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu win32/installer/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu win32/installer/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic cscopelist-am ctags ctags-am \ distclean distclean-generic distclean-tags distdir dvi dvi-am \ html html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags tags-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: viking-1.4.2/win32/installer/Makefile.am0000644000175000017500000000013012152216677014724 00000000000000 EXTRA_DIST = \ viking-installer.nsi \ langmacros.nsh SUBDIRS = pixmaps translations viking-1.4.2/win32/installer/viking-installer.nsi0000644000175000017500000003504312175546567016711 00000000000000; Installer script for win32 Viking ; Based on Win32 Pidgin installer by Herman Bloggs ; and Daniel Atallah ; Heavily modified for Viking by Mathieu Albinet ;-------------------------------- ;Global Variables Var name ;-------------------------------- ;Configuration ;Needs to be 4 numbers: W.X.Y.Z !define VIKING_VERSION "1.4.2.0" ;The name var is set in .onInit Name $name OutFile "viking-${VIKING_VERSION}.exe" SetCompressor /SOLID lzma ShowInstDetails show ShowUninstDetails show SetDateSave on ; $name and $INSTDIR are set in .onInit function.. !include "MUI.nsh" !include "Sections.nsh" !include "WinVer.nsh" !include "LogicLib.nsh" ;; http://nsis.sourceforge.net/File_Association !include "FileAssociation.nsh" !include "FileFunc.nsh" !insertmacro GetParameters !insertmacro GetOptions !insertmacro GetParent !include "WordFunc.nsh" ;-------------------------------- ;Defines !define VIKING_NSIS_INCLUDE_PATH "." ; Remove these and the stuff that uses them at some point !define VIKING_REG_KEY "SOFTWARE\viking" !define VIKING_UNINSTALL_KEY "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\viking" !define HKLM_APP_PATHS_KEY "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\viking.exe" !define VIKING_UNINST_EXE "viking-uninst.exe" ;-------------------------------- ;Version resource VIProductVersion "${VIKING_VERSION}" VIAddVersionKey "ProductName" "Viking" VIAddVersionKey "FileVersion" "${VIKING_VERSION}" VIAddVersionKey "ProductVersion" "${VIKING_VERSION}" VIAddVersionKey "LegalCopyright" "" VIAddVersionKey "FileDescription" "Viking Installer" ;-------------------------------- ;Modern UI Configuration !define MUI_ICON ".\pixmaps\viking_icon.ico" !define MUI_UNICON ".\pixmaps\viking_icon.ico" ; !define MUI_WELCOMEFINISHPAGE_BITMAP ".\pixmaps\viking-intro.bmp" ; !define MUI_HEADERIMAGE ; !define MUI_HEADERIMAGE_BITMAP ".\pixmaps\viking-header.bmp" ; Alter License section !define MUI_LICENSEPAGE_BUTTON $(VIKING_LICENSE_BUTTON) !define MUI_LICENSEPAGE_TEXT_BOTTOM $(VIKING_LICENSE_BOTTOM_TEXT) !define MUI_LANGDLL_REGISTRY_ROOT "HKCU" !define MUI_LANGDLL_REGISTRY_KEY ${VIKING_REG_KEY} !define MUI_LANGDLL_REGISTRY_VALUENAME "Installer Language" !define MUI_COMPONENTSPAGE_SMALLDESC !define MUI_ABORTWARNING ;Finish Page config !define MUI_FINISHPAGE_NOAUTOCLOSE !define MUI_FINISHPAGE_RUN "$INSTDIR\viking.exe" !define MUI_FINISHPAGE_RUN_NOTCHECKED !define MUI_FINISHPAGE_LINK $(VIKING_FINISH_VISIT_WEB_SITE) !define MUI_FINISHPAGE_LINK_LOCATION "http://viking.sourceforge.net" ;-------------------------------- ;Pages !insertmacro MUI_PAGE_WELCOME !insertmacro MUI_PAGE_LICENSE ".\bin\COPYING_GPL.txt" !insertmacro MUI_PAGE_COMPONENTS ; Viking install dir page !insertmacro MUI_PAGE_DIRECTORY !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_PAGE_FINISH !insertmacro MUI_UNPAGE_WELCOME !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_INSTFILES !insertmacro MUI_UNPAGE_FINISH ;-------------------------------- ;Languages ;; English goes first because its the default. The rest are ;; in alphabetical order (at least the strings actually displayed ;; will be). !insertmacro MUI_LANGUAGE "English" !insertmacro MUI_LANGUAGE "French" !insertmacro MUI_LANGUAGE "Spanish" ;-------------------------------- ;Translations !define VIKING_DEFAULT_LANGFILE "${VIKING_NSIS_INCLUDE_PATH}\translations\english.nsh" !include "${VIKING_NSIS_INCLUDE_PATH}\langmacros.nsh" !insertmacro VIKING_MACRO_INCLUDE_LANGFILE "ENGLISH" "${VIKING_NSIS_INCLUDE_PATH}\translations\english.nsh" !insertmacro VIKING_MACRO_INCLUDE_LANGFILE "FRENCH" "${VIKING_NSIS_INCLUDE_PATH}\translations\french.nsh" !insertmacro VIKING_MACRO_INCLUDE_LANGFILE "SPANISH" "${VIKING_NSIS_INCLUDE_PATH}\translations\spanish.nsh" ;-------------------------------- ;Reserve Files ; Only need this if using bzip2 compression !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS !insertmacro MUI_RESERVEFILE_LANGDLL ReserveFile "${NSISDIR}\Plugins\UserInfo.dll" ;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Start Install Sections ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;-------------------------------- ;Uninstall any old version of Viking Section -SecUninstallOldViking ; Check install rights.. Call CheckUserInstallRights Pop $R0 ;First try to uninstall Viking StrCpy $R4 ${VIKING_REG_KEY} StrCpy $R5 ${VIKING_UNINSTALL_KEY} StrCpy $R6 ${VIKING_UNINST_EXE} StrCpy $R7 "Viking" ;Determine user install rights StrCmp $R0 "HKLM" compare_hklm StrCmp $R0 "HKCU" compare_hkcu done compare_hkcu: ReadRegStr $R1 HKCU $R4 "" ReadRegStr $R2 HKCU $R4 "Version" ReadRegStr $R3 HKCU "$R5" "UninstallString" Goto try_uninstall compare_hklm: ReadRegStr $R1 HKLM $R4 "" ReadRegStr $R2 HKLM $R4 "Version" ReadRegStr $R3 HKLM "$R5" "UninstallString" ; If a previous version exists, remove it try_uninstall: StrCmp $R1 "" done StrCmp $R2 "" uninstall_problem ; Check if we have uninstall string.. IfFileExists $R3 0 uninstall_problem ; Have uninstall string, go ahead and uninstall. SetOverwrite on ; Need to copy uninstaller outside of the install dir ClearErrors CopyFiles /SILENT $R3 "$TEMP\$R6" SetOverwrite off IfErrors uninstall_problem ; Ready to uninstall.. ClearErrors ExecWait '"$TEMP\$R6" /S _?=$R1' IfErrors exec_error Delete "$TEMP\$R6" Goto done exec_error: Delete "$TEMP\$R6" Goto uninstall_problem uninstall_problem: ; We can't uninstall. Either the user must manually uninstall or we ignore and reinstall over it. MessageBox MB_OKCANCEL $(VIKING_PROMPT_CONTINUE_WITHOUT_UNINSTALL) /SD IDOK IDOK done Quit done: SectionEnd ;-------------------------------- ;Viking Install Section Section $(VIKING_SECTION_TITLE) SecViking SectionIn 1 RO ; Check install rights.. Call CheckUserInstallRights Pop $R0 StrCmp $R0 "NONE" viking_none StrCmp $R0 "HKLM" viking_hklm viking_hkcu ;Install rights for Local Machine viking_hklm: WriteRegStr HKLM "${HKLM_APP_PATHS_KEY}" "" "$INSTDIR\viking.exe" WriteRegStr HKLM "${HKLM_APP_PATHS_KEY}" "Path" "$R1\bin" WriteRegStr HKLM ${VIKING_REG_KEY} "" "$INSTDIR" WriteRegStr HKLM ${VIKING_REG_KEY} "Version" "${VIKING_VERSION}" WriteRegStr HKLM "${VIKING_UNINSTALL_KEY}" "DisplayName" "Viking" WriteRegStr HKLM "${VIKING_UNINSTALL_KEY}" "DisplayVersion" "${VIKING_VERSION}" WriteRegStr HKLM "${VIKING_UNINSTALL_KEY}" "HelpLink" "http://sourceforge.net/apps/mediawiki/viking/" WriteRegDWORD HKLM "${VIKING_UNINSTALL_KEY}" "NoModify" 1 WriteRegDWORD HKLM "${VIKING_UNINSTALL_KEY}" "NoRepair" 1 WriteRegStr HKLM "${VIKING_UNINSTALL_KEY}" "UninstallString" "$INSTDIR\${VIKING_UNINST_EXE}" ; Sets scope of the desktop and Start Menu entries for all users. SetShellVarContext "all" Goto viking_install_files ;Install rights for Current User only viking_hkcu: WriteRegStr HKCU ${VIKING_REG_KEY} "" "$INSTDIR" WriteRegStr HKCU ${VIKING_REG_KEY} "Version" "${VIKING_VERSION}" WriteRegStr HKCU "${VIKING_UNINSTALL_KEY}" "DisplayName" "Viking" WriteRegStr HKCU "${VIKING_UNINSTALL_KEY}" "DisplayVersion" "${VIKING_VERSION}" WriteRegStr HKCU "${VIKING_UNINSTALL_KEY}" "HelpLink" "http://sourceforge.net/apps/mediawiki/viking/" WriteRegDWORD HKCU "${VIKING_UNINSTALL_KEY}" "NoModify" 1 WriteRegDWORD HKCU "${VIKING_UNINSTALL_KEY}" "NoRepair" 1 WriteRegStr HKCU "${VIKING_UNINSTALL_KEY}" "UninstallString" "$INSTDIR\${VIKING_UNINST_EXE}" Goto viking_install_files ;No install rights! viking_none: viking_install_files: SetOutPath "$INSTDIR" SetOverwrite on File /r .\bin\*.* ; If we don't have install rights we're done StrCmp $R0 "NONE" done SetOverwrite off ; write out uninstaller SetOverwrite on WriteUninstaller "$INSTDIR\${VIKING_UNINST_EXE}" SetOverwrite off done: SectionEnd ; end of default Viking section ;-------------------------------- ;Shortcuts SectionGroup /e $(VIKING_SHORTCUTS_SECTION_TITLE) SecShortcuts ;Desktop shortcuts Section /o $(VIKING_DESKTOP_SHORTCUT_SECTION_TITLE) SecDesktopShortcut SetOverwrite on CreateShortCut "$DESKTOP\Viking.lnk" "$INSTDIR\viking.exe" SetOverwrite off SectionEnd ;Start menu shortcuts Section $(VIKING_STARTMENU_SHORTCUT_SECTION_TITLE) SecStartMenuShortcut SetOverwrite on CreateDirectory "$SMPROGRAMS\Viking" CreateShortCut "$SMPROGRAMS\Viking\Viking.lnk" "$INSTDIR\viking.exe" CreateShortCut "$SMPROGRAMS\Viking\User Manual.lnk" "$INSTDIR\viking.pdf" CreateShortCut "$SMPROGRAMS\Viking\Uninstall.lnk" "$INSTDIR\viking-uninst.exe" SetOverwrite off SectionEnd SectionGroupEnd ;-------------------------------- ;File association Section $(VIKING_FILE_ASSOCIATION_SECTION_TITLE) SecFileAssociation ${registerExtension} "$INSTDIR\viking.exe" ".vik" "Viking File" SectionEnd ;-------------------------------- ;Uninstaller Section Section Uninstall Call un.CheckUserInstallRights Pop $R0 StrCmp $R0 "NONE" no_rights StrCmp $R0 "HKCU" try_hkcu try_hklm try_hkcu: ReadRegStr $R0 HKCU ${VIKING_REG_KEY} "" StrCmp $R0 $INSTDIR 0 cant_uninstall ; HKCU install path matches our INSTDIR so uninstall DeleteRegKey HKCU ${VIKING_REG_KEY} DeleteRegKey HKCU "${VIKING_UNINSTALL_KEY}" Goto cont_uninstall try_hklm: ReadRegStr $R0 HKLM ${VIKING_REG_KEY} "" StrCmp $R0 $INSTDIR 0 try_hkcu ; HKLM install path matches our INSTDIR so uninstall DeleteRegKey HKLM ${VIKING_REG_KEY} DeleteRegKey HKLM "${VIKING_UNINSTALL_KEY}" DeleteRegKey HKLM "${HKLM_APP_PATHS_KEY}" ; Sets start menu and desktop scope to all users.. SetShellVarContext "all" cont_uninstall: ;Simply wipe the Viking install dir RMDir /r "$INSTDIR" ; Shortcuts.. Delete "$DESKTOP\Viking.lnk" ; File association ${unregisterExtension} ".vik" "Viking File" Goto done cant_uninstall: MessageBox MB_OK $(un.VIKING_UNINSTALL_ERROR_1) /SD IDOK Quit no_rights: MessageBox MB_OK $(un.VIKING_UNINSTALL_ERROR_2) /SD IDOK Quit done: SectionEnd ; end of uninstall section ;-------------------------------- ;Descriptions !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN !insertmacro MUI_DESCRIPTION_TEXT ${SecViking} \ $(VIKING_SECTION_DESCRIPTION) !insertmacro MUI_DESCRIPTION_TEXT ${SecShortcuts} \ $(VIKING_SHORTCUTS_SECTION_DESCRIPTION) !insertmacro MUI_DESCRIPTION_TEXT ${SecDesktopShortcut} \ $(VIKING_DESKTOP_SHORTCUT_DESC) !insertmacro MUI_DESCRIPTION_TEXT ${SecStartMenuShortcut} \ $(VIKING_STARTMENU_SHORTCUT_DESC) !insertmacro MUI_DESCRIPTION_TEXT ${SecFileAssociation} \ $(VIKING_FILE_ASSOCIATION_DESC) !insertmacro MUI_FUNCTION_DESCRIPTION_END ;-------------------------------- ;Functions ;Macro to determine user install rights ;Will be used to determine where to install the program, shortcuts, ... !macro CheckUserInstallRightsMacro UN Function ${UN}CheckUserInstallRights Push $0 Push $1 ClearErrors UserInfo::GetName IfErrors Win9x Pop $0 UserInfo::GetAccountType Pop $1 StrCmp $1 "Admin" 0 +3 StrCpy $1 "HKLM" Goto done StrCmp $1 "Power" 0 +3 StrCpy $1 "HKLM" Goto done StrCmp $1 "User" 0 +3 StrCpy $1 "HKCU" Goto done StrCmp $1 "Guest" 0 +3 StrCpy $1 "NONE" Goto done ; Unknown error StrCpy $1 "NONE" Goto done Win9x: StrCpy $1 "HKLM" done: Exch $1 Exch Pop $0 FunctionEnd !macroend !insertmacro CheckUserInstallRightsMacro "" !insertmacro CheckUserInstallRightsMacro "un." ;Macro to determine if Viking is running before installation/unistallation !macro RunCheckMacro UN Function ${UN}RunCheck FindProcDLL::FindProc "viking.exe" IntCmp $R0 1 0 notRunning MessageBox MB_OK|MB_ICONEXCLAMATION $(VIKING_IS_RUNNING) /SD IDOK Abort notRunning: FunctionEnd !macroend !insertmacro RunCheckMacro "" !insertmacro RunCheckMacro "un." ;Installer extra configuration at execution time: language, path, ... Function .onInit ;Check if viking installer is already running Push $R0 Push $R1 Push $R2 ;Check if viking is running Call RunCheck StrCpy $name "Viking ${VIKING_VERSION}" ClearErrors ;Make sure that there was a previous installation ReadRegStr $R0 HKCU "${VIKING_REG_KEY}" "Installer Language" ;Preselect the "shortcuts" checkboxes according to the previous installation !insertmacro SelectSection ${SecDesktopShortcut} !insertmacro selectSection ${SecStartMenuShortcut} ;Read command line parameters ;Read language command line parameters ${GetParameters} $R0 ClearErrors ${GetOptions} "$R0" "/L=" $R1 IfErrors +3 StrCpy $LANGUAGE $R1 Goto skip_lang ; Select Language ; Display Language selection dialog !insertmacro MUI_LANGDLL_DISPLAY skip_lang: ;Read desktop shortcut command line options ClearErrors ${GetOptions} "$R0" "/DS=" $R1 IfErrors +8 SectionGetFlags ${SecDesktopShortcut} $R2 StrCmp "1" $R1 0 +2 IntOp $R2 $R2 | ${SF_SELECTED} StrCmp "0" $R1 0 +3 IntOp $R1 ${SF_SELECTED} ~ IntOp $R2 $R2 & $R1 SectionSetFlags ${SecDesktopShortcut} $R2 ;Read start menu shortcuts command line options ClearErrors ${GetOptions} "$R0" "/SMS=" $R1 IfErrors +8 SectionGetFlags ${SecStartMenuShortcut} $R2 StrCmp "1" $R1 0 +2 IntOp $R2 $R2 | ${SF_SELECTED} StrCmp "0" $R1 0 +3 IntOp $R1 ${SF_SELECTED} ~ IntOp $R2 $R2 & $R1 SectionSetFlags ${SecStartMenuShortcut} $R2 ; If install path was set on the command, use it. StrCmp $INSTDIR "" 0 instdir_done ; If viking is currently installed, we should default to where it is currently installed ClearErrors ReadRegStr $INSTDIR HKCU "${VIKING_REG_KEY}" "" IfErrors +2 StrCmp $INSTDIR "" 0 instdir_done ClearErrors ReadRegStr $INSTDIR HKLM "${VIKING_REG_KEY}" "" IfErrors +2 StrCmp $INSTDIR "" 0 instdir_done Call CheckUserInstallRights Pop $R0 StrCmp $R0 "HKLM" 0 user_dir StrCpy $INSTDIR "$PROGRAMFILES\Viking" Goto instdir_done user_dir: Push $SMPROGRAMS ${GetParent} $SMPROGRAMS $R2 ${GetParent} $R2 $R2 StrCpy $INSTDIR "$R2\Viking" instdir_done: ;LogSet on Pop $R2 Pop $R1 Pop $R0 FunctionEnd Function un.onInit ;Check if viking is running Call un.RunCheck StrCpy $name "Viking ${VIKING_VERSION}" ; Get stored language preference !insertmacro MUI_UNGETLANGUAGE FunctionEnd viking-1.4.2/win32/installer/translations/0000755000175000017500000000000012175546637015506 500000000000000viking-1.4.2/win32/installer/translations/spanish.nsh0000644000175000017500000000442512152216677017603 00000000000000;; vim:syn=winbatch:fileencoding=cp1252: ;; ;; spanish.nsh ;; ;; Spanish language strings for the Windows Viking NSIS installer. ;; Windows Code page: 1252 ;; ;; Author: Roberto ;; ;; Modified for Viking by Mathieu Albinet ; Make sure to update the VIKING_MACRO_LANGUAGEFILE_END macro in ; langmacros.nsh when updating this file ; Startup Checks !define INSTALLER_IS_RUNNING "El programa de instalacin ya se est ejecutando." !define VIKING_IS_RUNNING "Una instancia de Viking se est ejecutando. Por favor, salga de Viking y vuelva a intentarlo." ; License Page !define VIKING_LICENSE_BUTTON "Siguiente >" !define VIKING_LICENSE_BOTTOM_TEXT "$(^Name) est disponible bajo licencia GNU General Public License (GPL). El siguiente texto de licencia es ofrecido nicamente a titulo informativo. $_CLICK" ; Components Page !define VIKING_SECTION_TITLE "Viking, software de edicin y de anlisis de datos GPS (obligatorio)" !define VIKING_SHORTCUTS_SECTION_TITLE "Accesos directos" !define VIKING_DESKTOP_SHORTCUT_SECTION_TITLE "Escritorio" !define VIKING_STARTMENU_SHORTCUT_SECTION_TITLE "Men Inicio" !define VIKING_FILE_ASSOCIATION_SECTION_TITLE "Extensin.vik" !define VIKING_SECTION_DESCRIPTION "Ficheros y DLLs de base de Viking" !define VIKING_SHORTCUTS_SECTION_DESCRIPTION "Accesos directos para lanzar Viking" !define VIKING_DESKTOP_SHORTCUT_DESC "Crear un acceso directo a Viking en el escritorio" !define VIKING_STARTMENU_SHORTCUT_DESC "Crear un acceso directo a Viking en el men de inicio" !define VIKING_FILE_ASSOCIATION_DESC "Asociar Viking con la extensin .vik" ; Installer Finish Page !define VIKING_FINISH_VISIT_WEB_SITE "Visite la pgina web de Viking" ; Viking Section Prompts and Texts !define VIKING_PROMPT_CONTINUE_WITHOUT_UNINSTALL "Desinstalacin de la versin actual de Viking imposible. La nueva versin ser instalada sin suprimir la versin actual." ; Uninstall Section Prompts !define un.VIKING_UNINSTALL_ERROR_1 "El programa de desinstalacin no ha encontrado las entradas de Viking en la base de registros.$\rLa aplicacin quiz haya sido instalada por un usuario distinto." !define un.VIKING_UNINSTALL_ERROR_2 "Usted no tiene los permisos necesarios para suprimir esta aplicacin." viking-1.4.2/win32/installer/translations/Makefile.in0000644000175000017500000003102712175546614017471 00000000000000# Makefile.in generated by automake 1.13.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = win32/installer/translations DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/mkinstalldirs ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/expat.m4 \ $(top_srcdir)/m4/libcurl.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_STATUS_DEPENDENCIES = @CONFIG_STATUS_DEPENDENCIES@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DB2MAN_XSL = @DB2MAN_XSL@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ EXPAT_CFLAGS = @EXPAT_CFLAGS@ EXPAT_LIBS = @EXPAT_LIBS@ GDK_PIXBUF_CSOURCE = @GDK_PIXBUF_CSOURCE@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GLIB_MKENUMS = @GLIB_MKENUMS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HELP_DIR = @HELP_DIR@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ LDFLAGS = @LDFLAGS@ LIBCURL = @LIBCURL@ LIBCURL_CPPFLAGS = @LIBCURL_CPPFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_CFLAGS = @PACKAGE_CFLAGS@ PACKAGE_LIBS = @PACKAGE_LIBS@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ POW_LIB = @POW_LIB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XP = @XP@ _libcurl_config = @_libcurl_config@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = \ english.nsh \ french.nsh \ spanish.nsh all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu win32/installer/translations/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu win32/installer/translations/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic cscopelist-am \ ctags-am distclean distclean-generic distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: viking-1.4.2/win32/installer/translations/Makefile.am0000644000175000017500000000007212152216677017452 00000000000000 EXTRA_DIST = \ english.nsh \ french.nsh \ spanish.nsh viking-1.4.2/win32/installer/translations/english.nsh0000644000175000017500000000536112152216677017567 00000000000000;; ;; english.nsh ;; ;; Default language strings for the Windows Viking NSIS installer. ;; Windows Code page: 1252 ;; ;; Version 3 ;; Note: If translating this file, replace '!insertmacro VIKING_MACRO_DEFAULT_STRING' ;; with '!define'. ; Make sure to update the VIKING_MACRO_LANGUAGEFILE_END macro in ; langmacros.nsh when updating this file ; Startup Checks !insertmacro VIKING_MACRO_DEFAULT_STRING INSTALLER_IS_RUNNING "The installer is already running." !insertmacro VIKING_MACRO_DEFAULT_STRING VIKING_IS_RUNNING "An instance of Viking is currently running. Please exit Viking and try again." ; License Page !insertmacro VIKING_MACRO_DEFAULT_STRING VIKING_LICENSE_BUTTON "Next >" !insertmacro VIKING_MACRO_DEFAULT_STRING VIKING_LICENSE_BOTTOM_TEXT "$(^Name) is released under the GNU General Public License (GPL). The license is provided here for information purposes only. $_CLICK" ; Components Page !insertmacro VIKING_MACRO_DEFAULT_STRING VIKING_SECTION_TITLE "Viking GPS data editor and analyzer (required)" !insertmacro VIKING_MACRO_DEFAULT_STRING VIKING_SHORTCUTS_SECTION_TITLE "Shortcuts" !insertmacro VIKING_MACRO_DEFAULT_STRING VIKING_DESKTOP_SHORTCUT_SECTION_TITLE "Desktop" !insertmacro VIKING_MACRO_DEFAULT_STRING VIKING_STARTMENU_SHORTCUT_SECTION_TITLE "Start Menu" !insertmacro VIKING_MACRO_DEFAULT_STRING VIKING_FILE_ASSOCIATION_SECTION_TITLE "File association" !insertmacro VIKING_MACRO_DEFAULT_STRING VIKING_SECTION_DESCRIPTION "Core Viking files and dlls" !insertmacro VIKING_MACRO_DEFAULT_STRING GTK_SECTION_DESCRIPTION "A multi-platform GUI toolkit, used by Viking" !insertmacro VIKING_MACRO_DEFAULT_STRING VIKING_SHORTCUTS_SECTION_DESCRIPTION "Shortcuts for starting Viking" !insertmacro VIKING_MACRO_DEFAULT_STRING VIKING_DESKTOP_SHORTCUT_DESC "Create a shortcut to Viking on the Desktop" !insertmacro VIKING_MACRO_DEFAULT_STRING VIKING_STARTMENU_SHORTCUT_DESC "Create a Start Menu entry for Viking" !insertmacro VIKING_MACRO_DEFAULT_STRING VIKING_FILE_ASSOCIATION_DESC "Associate .vik files with Viking" ; Installer Finish Page !insertmacro VIKING_MACRO_DEFAULT_STRING VIKING_FINISH_VISIT_WEB_SITE "Visit the Viking Web Page" ; Viking Section Prompts and Texts !insertmacro VIKING_MACRO_DEFAULT_STRING VIKING_PROMPT_CONTINUE_WITHOUT_UNINSTALL "Unable to uninstall the currently installed version of Viking. The new version will be installed without removing the currently installed version." ; Uninstall Section Prompts !insertmacro VIKING_MACRO_DEFAULT_STRING un.VIKING_UNINSTALL_ERROR_1 "The uninstaller could not find registry entries for Viking.$\rIt is likely that another user installed this application." !insertmacro VIKING_MACRO_DEFAULT_STRING un.VIKING_UNINSTALL_ERROR_2 "You do not have permission to uninstall this application." viking-1.4.2/win32/installer/translations/french.nsh0000644000175000017500000000451312152216677017401 00000000000000;; vim:syn=winbatch:fileencoding=cp1252: ;; ;; french.nsh ;; ;; French language strings for the Windows Viking NSIS installer. ;; Windows Code page: 1252 ;; ;; Based on Win32 Pidgin installer french translation file by ;; Author: Eric Boumaour , 2003-2007. ;; ;; Modified for Viking by Mathieu Albinet ; Make sure to update the VIKING_MACRO_LANGUAGEFILE_END macro in ; langmacros.nsh when updating this file ; Startup Checks !define INSTALLER_IS_RUNNING "Le programme d'installation est dj en cours d'excution." !define VIKING_IS_RUNNING "Une instance de Viking est en cours d'excution. Veuillez quitter Viking et ressayer." ; License Page !define VIKING_LICENSE_BUTTON "Suivant >" !define VIKING_LICENSE_BOTTOM_TEXT "$(^Name) est disponible sous licence GNU General Public License (GPL). Le texte de licence suivant est fourni uniquement titre informatif. $_CLICK" ; Components Page !define VIKING_SECTION_TITLE "Viking, logiciel d'dition et d'analyse de donnes GPS (obligatoire)" !define VIKING_SHORTCUTS_SECTION_TITLE "Raccourcis" !define VIKING_DESKTOP_SHORTCUT_SECTION_TITLE "Bureau" !define VIKING_STARTMENU_SHORTCUT_SECTION_TITLE "Menu Dmarrer" !define VIKING_FILE_ASSOCIATION_SECTION_TITLE "Extension .vik" !define VIKING_SECTION_DESCRIPTION "Fichiers et DLLs de base de Viking" !define VIKING_SHORTCUTS_SECTION_DESCRIPTION "Raccourcis pour lancer Viking" !define VIKING_DESKTOP_SHORTCUT_DESC "Crer un raccourci pour Viking sur le bureau" !define VIKING_STARTMENU_SHORTCUT_DESC "Crer un raccourci pour Viking dans le menu Dmarrer" !define VIKING_FILE_ASSOCIATION_DESC "Associer Viking avec l'extension .vik" ; Installer Finish Page !define VIKING_FINISH_VISIT_WEB_SITE "Visitez la page web de Viking" ; Viking Section Prompts and Texts !define VIKING_PROMPT_CONTINUE_WITHOUT_UNINSTALL "Impossible de dsinstaller la version de Viking en place. La nouvelle version sera installe sans supprimer la version en place." ; Uninstall Section Prompts !define un.VIKING_UNINSTALL_ERROR_1 "Le programme de dsinstallation n'a pas retrouv les entres de Viking dans la base de registres.$\rL'application a peut-tre t installe par un utilisateur diffrent." !define un.VIKING_UNINSTALL_ERROR_2 "Vous n'avez pas les permissions pour supprimer cette application." viking-1.4.2/win32/configure_and_make.bat0000644000175000017500000000057612175546146015203 00000000000000:: Full build :: :: Note this assumes the 'configure' script already exists :: either via part of the source download or via separate generation - e.g. using wine :: set PATH=%PATH%;%SystemDrive%\Mingw\bin;%SystemDrive%\msys\1.0\bin cd ..\ sh configure CFLAGS="-DWINDOWS -mwindows" LIBCURL=-lcurldll LIBS=-lzdll --disable-realtime-gps-tracking --disable-scrollkeeper make viking-1.4.2/win32/README.txt0000644000175000017500000000256212175546146012406 00000000000000 The build under Windows follows the same process as the traditional Linux build: cd ../src sh configure make There is a separate installer method using NSIS to generate the viking-1.X.Y.Z.exe installer file. To generate the installer (once the code has been compiled as above) run the installer.bat For further details (especially about how to set up the development dependencies) see: http://sourceforge.net/apps/mediawiki/viking/index.php?title=WindowsBuildInstructions These instructions have now been turned turned into a series of scripts to produce the Viking installer: 1. prepare.bat 2a. configure_and_make.bat 2b. make.bat 3. installer.bat The scripts are aimed at a pristine Windows XP installation. Using *prepare.bat* will attempt to *download* and *install* various Open Source software to aid this process. An administrator level account is needed to run this which will *modify* your system. The other scripts simply make use of these (assumed) available system programs. This setup is for dedicated usage to build Viking, primarily under Wine with: ./generate_install.sh Such that any Windows system (or of course a Virtual Machine) can be simply deleted (e.g. rm -rf /.wine) and recreated fully via the scripts. From Viking 1.4 onwards this is how the Windows viking-W.X.Y.Z.exe installer file is produced. viking-1.4.2/win32/prepare.bat0000644000175000017500000002456212175546146013042 00000000000000@echo OFF :: :: Setup wget first - this has to be done manually :: http://gnuwin32.sourceforge.net/packages/wget.htm :: http://downloads.sourceforge.net/gnuwin32/wget-1.11.4-1-setup.exe :: :: Simple script to check required built environment in default locations :: Versions downloaded are specified absolutely as otherwise it's tricky to try and work out the latest/stable version :: In principal the idea is to try and automate the process as much as possible :: set PATH=%PATH%;%ProgramFiles%\GnuWin32\bin set MINGW=%SystemDrive%\MinGW set MINGW_BIN=%MinGW%\bin set ERRORLEVEL=0 if not exist cache mkdir cache pushd cache echo =+=+= echo Checking mingw... echo =+=+= set MINGW_EXE=MinGW-5.1.6.exe set BIN_UTILS=binutils-2.19.1-mingw32-bin.tar.gz set GCC_CORE=gcc-core-3.4.5-20060117-3.tar.gz set GCC_GPP=gcc-g++-3.4.5-20060117-3.tar.gz set MINGWRTDLL=mingwrt-3.15.2-mingw32-dll.tar.gz set MINGWRTDEV=mingwrt-3.15.2-mingw32-dev.tar.gz set W32API=w32api-3.13-mingw32-dev.tar.gz if not exist "%MINGW_BIN%" ( :: Here we download all default components manually in an attempt to get autoinstall to work... if not exist %MINGW_EXE% ( wget "http://sourceforge.net/projects/mingw/files/OldFiles/MinGW 5.1.6/%MINGW_EXE%" ) if not exist %BIN_UTILS% ( wget "http://sourceforge.net/projects/mingw/files/MinGW/Base/binutils/binutils-2.19.1/%BIN_UTILS%/download" ) if not exist %GCC_CORE% ( wget "http://sourceforge.net/projects/mingw/files/MinGW/Base/gcc/Version3/Current Release_ gcc-3.4.5-20060117-3/%GCC_CORE%/download" ) if not exist %GCC_GPP% ( wget "http://sourceforge.net/projects/mingw/files/MinGW/Base/gcc/Version3/Current Release_ gcc-3.4.5-20060117-3/%GCC_GPP%/download" ) if not exist %MINGWRTDEV% ( wget http://sourceforge.net/projects/mingw/files/MinGW/Base/mingw-rt/mingwrt-3.15.2/%MINGWRTDEV%/download ) if not exist %MINGWRTDLL% ( wget http://sourceforge.net/projects/mingw/files/MinGW/Base/mingw-rt/mingwrt-3.15.2/%MINGWRTDLL%/download ) if not exist %W32API% ( wget http://sourceforge.net/projects/mingw/files/MinGW/Base/w32api/w32api-3.13/%W32API%/download ) :: Can't get it to silent install. As a NSIS installer it supports /S, but it doesn't seem to work - it just hangs :: Have to click through manually %MINGW_EXE% if ERRORLEVEL 1 goto Error ) echo =+=+= echo Checking MSYS... echo =+=+= set MSYS_EXE=MSYS-1.0.11.exe if not exist "%SystemDrive%\msys" ( if not exist %MSYS_EXE% ( wget http://downloads.sourceforge.net/mingw/%MSYS_EXE% ) if not [%WINELOADER%]==[] ( echo Running under WINE - Requires MSYS install fixes: run msys-pi-wine.sh when msys install halts..." echo Ctrl-C to stop and then rerun the installation if necessary ) %MSYS_EXE% /sp- /silent if ERRORLEVEL 1 goto Error ) :: We need a program to be able to extract not only zips, but bz2 and *lzma* set PATH=%PATH%;%ProgramFiles%\7-Zip echo =+=+= echo Checking 7Zip is Available... echo =+=+= set ZIP_INST=7z920.exe if not exist "%ProgramFiles%\7-Zip\7z.exe" ( if not exist %ZIP_INST% ( wget http://downloads.sourceforge.net/sevenzip/%ZIP_INST% ) %ZIP_INST% /S if ERRORLEVEL 1 goto Error ) :: echo =+=+= echo Checking gtk+-bundle... echo =+=+= set GTK_ZIP=gtk+-bundle_2.24.10-20120208_win32.zip if not exist "%MINGW_BIN%\gtk-update-icon-cache.exe" ( if not exist %GTK_ZIP% ( wget http://ftp.gnome.org/pub/gnome/binaries/win32/gtk+/2.24/%GTK_ZIP% ) 7z x %GTK_ZIP% -o"%MinGW%" if ERRORLEVEL 1 goto Error ) set EXPAT_ZIP=expat-dev_2.0.1-1_win32.zip echo =+=+= echo Checking expat-dev... echo =+=+= if not exist "%MINGW%\include\expat.h" ( if not exist %EXPAT_ZIP% ( wget http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/%EXPAT_ZIP% ) 7z x %EXPAT_ZIP% -o"%MinGW%" if ERRORLEVEL 1 goto Error ) set GTT_ZIP=gettext-tools-dev_0.18.1.1-2_win32.zip echo =+=+= echo Checking gettext-tools-dev... echo =+=+= if not exist "%MINGW_BIN%\libgettextlib-0-18-1.dll" ( if not exist %GTT_ZIP% ( wget http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/%GTT_ZIP% ) 7z x -y %GTT_ZIP% -o"%MinGW%" if ERRORLEVEL 1 goto Error ) echo =+=+= echo Checking intltool... echo =+=+= set INTLTOOL_ZIP=intltool_0.40.4-1_win32.zip if not exist "%MINGW_BIN%\intltoolize" ( if not exist %INTLTOOL_ZIP% ( wget http://ftp.acc.umu.se/pub/GNOME/binaries/win32/intltool/0.40/%INTLTOOL_ZIP% ) 7z x %INTLTOOL_ZIP% -o"%MinGW%" if ERRORLEVEL 1 goto Error ) echo =+=+= echo Checking iconv... echo =+=+= set ICONV_ZIP=libiconv-1.9.2-1-bin.zip if not exist "%MINGW_BIN%\iconv.exe" ( if not exist %ICONV_ZIP% ( wget http://sourceforge.net/projects/gnuwin32/files/libiconv/1.9.2-1/%ICONV_ZIP% ) 7z x -y %ICONV_ZIP% -o"%MinGW%" if ERRORLEVEL 1 goto Error ) echo =+=+= echo Checking libintl... echo =+=+= :: Needed by iconv set LIBINTL_ZIP=libintl-0.14.4-bin.zip if not exist "%MINGW_BIN%\libintl3.dll" ( if not exist %LIBINTL_ZIP% ( wget http://sourceforge.net/projects/gnuwin32/files/libintl/0.14.4/%LIBINTL_ZIP% ) 7z x -y %LIBINTL_ZIP% -o"%MinGW%" if ERRORLEVEL 1 goto Error ) echo =+=+= echo Checking libcurl... echo =+=+= set CURL_TAR=libcurl-7.14.0_nossl-1sid.tar set CURL_BZ2=%CURL_TAR%.bz2 if not exist "%MINGW_BIN%\libcurl.dll" ( if not exist %CURL_BZ2% ( wget http://downloads.sourceforge.net/devpaks/libcurl-7.14.0_nossl-1sid.DevPak?download move libcurl-7.14.0_nossl-1sid.DevPak %CURL_BZ2% ) echo Extracting libcurl... 7z e %CURL_BZ2% 7z x %CURL_TAR% -o"libcurl" if ERRORLEVEL 1 goto Error @echo ON move libcurl\include "%MinGW%\include\curl copy /Y libcurl\bin\*.* "%MinGW_BIN%" copy /Y libcurl\lib\*.* "%MinGW%\lib" copy /Y libcurl\docs\*.* "%MinGW%\doc" copy /Y COPYING.txt "%MinGW%\COPYING_curl.txt" rmdir /S /Q libcurl del %CURL_TAR% @echo OFF ) echo =+=+= echo Checking libexif... echo =+=+= set EXIF=libexif-0.6.20_winxp_mingw set EXIF_7Z=%EXIF%.7z if not exist "%MINGW_BIN%\libexif-12.dll" ( if not exist %EXIF_7Z% ( wget "http://sourceforge.net/projects/maille/files/Extern libs/%EXIF_7Z%/download" ) echo Extracting libexif... 7z x %EXIF_7Z% if ERRORLEVEL 1 goto Error echo Using *xcopy* (to get all subdirs) libexif into place... @echo ON xcopy /Y /S %EXIF%\*.* "%MinGW%" rmdir /S /Q %EXIF% @echo OFF ) echo =+=+= echo Checking libstdc++... echo =+=+= set STDCPP_TAR=libstdc++-4.6.2-1-mingw32-dll-6.tar set STDCPP_LZ=%STDCPP_TAR%.lzma if not exist "%MINGW_BIN%\libstdc++-6.dll" ( if not exist %STDCPP_LZ% ( wget http://sourceforge.net/projects/mingw/files/MinGW/Base/gcc/Version4/gcc-4.6.2-1/%STDCPP_LZ% ) echo Extracting lidstdc++... 7z e %STDCPP_LZ% 7z x %STDCPP_TAR% -o"%MinGW%" if ERRORLEVEL 1 goto Error del %STDCPP_TAR% ) :: :: Ideally building the code on Windows shouldn't need Doc Utils or the Help processor stuff :: But ATM it's too hard to avoid. :: echo =+=+= echo Checking Gnome Doc Utils... echo =+=+= set GNOME_DOC_ZIP=gnome-doc-utils-0.12.0.zip if not exist "%MINGW_BIN%\gnome-doc-prepare" ( if not exist %GNOME_DOC_ZIP% ( wget http://ftp.gnome.org/pub/gnome/binaries/win32/gnome-doc-utils/0.12/%GNOME_DOC_ZIP% ) echo Extracting Gnome Doc Utils... 7z x %GNOME_DOC_ZIP% -o"%MinGW%" if ERRORLEVEL 1 goto Error ) echo =+=+= echo Checking xsltproc... echo =+=+= set XLST=libxslt-1.1.26.win32 set XLST_ZIP=%XLST%.zip if not exist "%MINGW_BIN%\xsltproc.exe" ( if not exist %XLST_ZIP% ( wget ftp://ftp.zlatkovic.com/libxml/%XLST_ZIP% ) echo Extracting XLST... 7z x %XLST_ZIP% xcopy /Y /S "%XLST%\bin\*" "%MinGW_BIN%" if ERRORLEVEL 1 goto Error rmdir /Q /S %XLST% ) echo =+=+= echo Checking xmllint... echo =+=+= set XML2=libxml2-2.7.8.win32 set XML2_ZIP=%XML2%.zip if not exist "%MINGW_BIN%\xmllint.exe" ( if not exist %XML2_ZIP% ( wget ftp://ftp.zlatkovic.com/libxml/%XML2_ZIP% ) echo Extracting xmllint... 7z x %XML2_ZIP% xcopy /Y /S "%XML2%\bin\*" "%MinGW_BIN%" if ERRORLEVEL 1 goto Error rmdir /Q /S %XML2% ) echo =+=+= echo Checking iconv... echo =+=+= set ICONV=iconv-1.9.2.win32 set ICONV_ZIP=%ICONV%.zip if not exist "%MINGW_BIN%\iconv.dll" ( if not exist %ICONV_ZIP% ( wget ftp://ftp.zlatkovic.com/libxml/%ICONV_ZIP% ) echo Extracting iconv... 7z x %ICONV_ZIP% xcopy /Y /S "%ICONV%\bin\*" "%MinGW_BIN%" if ERRORLEVEL 1 goto Error rmdir /Q /S %ICONV% ) :: Note GPSBabel can not be directly downloaded via wget :: ATM get it manually from here: :: http://www.gpsbabel.org/download.html set GPSBABEL_INST=GPSBabel-1.4.4-Setup.exe if not exist "%ProgramFiles%\GPSBabel" ( echo Installing GPSBabel... if exist %GPSBABEL_INST% ( %GPSBABEL_INST% /silent if ERRORLEVEL 1 goto Error ) ) echo =+=+= echo Checking Perl Installation... echo =+=+= set PERL_MSI=ActivePerl-5.14.3.1404-MSWin32-x86-296513.msi if not exist "%SystemDrive%\Perl" ( if not exist %PERL_MSI% ( wget http://downloads.activestate.com/ActivePerl/releases/5.14.3.1404/%PERL_MSI% ) echo Installing Perl takes a little time... msiexec /qb /i %PERL_MSI% PERL_PATH=Yes PERL_EXT=Yes if ERRORLEVEL 1 goto Error ) echo =+=+= echo Checking NSIS installed... echo =+=+= set NSIS_INST=nsis-2.46-setup.exe if not exist "%ProgramFiles%\NSIS" ( if not exist %NSIS_INST% ( wget http://prdownloads.sourceforge.net/nsis/nsis-2.46-setup.exe?download ) echo Installing NSIS... %NSIS_INST% /S if ERRORLEVEL 1 goto Error ) echo =+=+= echo Checking NSIS Plugins installed... echo =+=+= set FPDLLZIP=FindProc.zip if not exist "%ProgramFiles%\NSIS\Plugins\FindProcDLL.dll" ( if not exist %FPDLLZIP% ( wget http://nsis.sourceforge.net/mediawiki/images/3/3c/%FPDLLZIP% ) echo Extracting NSIS Plugins... 7z e %FPDLLZIP% -o"%ProgramFiles%\NSIS\Plugins" if ERRORLEVEL 1 goto Error ) popd echo Fixing Perl reference REM Sadly '-i' for in place changes doesn't seem available with Windows sed 3.02 set PATH=%PATH%;C:\msys\1.0\bin sed -e 's:#! /bin/perl:#! /opt/perl/bin/perl:' %MINGW_BIN%\glib-mkenums > tmp.enums if ERRORLEVEL 1 goto Error xcopy /Y tmp.enums %MINGW_BIN%\glib-mkenums if ERRORLEVEL 1 goto Error del tmp.enums :: Potentially Clean Up :: If any parameters given on the command line then remove all downloaded items :Clean if not [%1]==[] ( echo Removing downloaded files if exist cache rmdir /S /Q cache ) goto End :Error echo exitting due to error: %ERRORLEVEL% exit :End echo Finished viking-1.4.2/win32/make.bat0000644000175000017500000000015012175546146012304 00000000000000:: Standard build set PATH=%PATH%;%SystemDrive%\MinGW\bin;%SystemDrive%\msys\1.0\bin cd ..\src make viking-1.4.2/Makefile.am0000644000175000017500000000171412152216677011776 00000000000000# Optionally build documentation bits if VIKING_DOC DO_DOCS = "doc" endif SUBDIRS = src test data po win32 help $(DO_DOCS) INTLTOOL = \ intltool-extract.in \ intltool-merge.in \ intltool-update.in full: ./autogen.sh make EXTRA_DIST = \ gnome-doc-utils.make \ ChangeLog.0 \ viking.spec \ $(INTLTOOL) .PHONY: generate-changelog generate-changelog: if test -d $(top_srcdir)/.git; then \ cd $(top_srcdir) ; sh $(top_srcdir)/maintainer/git2changelog.sh > $(distdir)/c-l; \ mv $(distdir)/c-l $(distdir)/ChangeLog; \ fi dist-hook: viking.spec generate-changelog cp $(top_builddir)/viking.spec $(distdir) MAINTAINERCLEANFILES = \ gnome-doc-utils.make DISTCLEANFILES = \ intltool-extract \ intltool-merge \ intltool-update ACLOCAL_AMFLAGS = -I m4 DISTCHECK_CONFIGURE_FLAGS = \ --disable-scrollkeeper # Ignore gtk theme cache files on distcheck distuninstallcheck_listfiles = find . -type f -print | grep -v 'icon-theme.cache' viking-1.4.2/TODO0000644000175000017500000004674712152216677010451 00000000000000=============================== FOR HISTORICAL REFERENCE ONLY =============================== This file hasn't been touched since early 2007 (other than this update!) Most of the TODOs/ideas are now maintained in the Wiki and/or feature requests in the SourceForge tracker. It also contains some historical implementation data for changes made in the 0.0.X series in 2003+2004, before the public source code version tracking started (2005 onwards in svn and then git). -------------------------------- FEATURE FREEZE!!! -------------- BEFORE RELEASE: fix KH maps download clipping -- OK as is? fix SEGFAULT when clicking too far right on elevation diagram google maps download stops (try auto-download), extra processes in background doing nothing GPSBABEL!!! * existence check sed, wget, etc. * Smooth over rough edges / ugliness / crashes ------------------ * Filter a TRW layer: simplify paths, get out waypoints inside a path, etc. * geocaches: all on screen / radius * error if gcget isn't functioning correctly * Google address -> WP FEATURES: Paste GPX files into Viking -> TRW Layer Paste TRW layers into text editor -> GPX Undo function Map licensing issues (?) DND between VikWindows arrows to show track direction Select multiple items (waypoints, etc) in layers panel (???) Merge layers easier ("Merge down" la Gimp) Output to gc2visor Selections (select waypoints, tracks in an area) EASY FIXES: "click to go there" elevation map: average out, not nearest trackpoint. Ruler: calculate degrees by spherical geometry formula ('zoom in too much' bug -- coord_to_screen out of range of double) for UTM: rotate compass for declination. ----------------------------------------- RATHER HARD FIXES, SHOULD BE DONE BUT NOT MANDATORY FOR RELEASE: tracks have their own colors, etc. replace HTTP code!!! relative photo pathnames (relative to GPS data file) Optimizations (compare to 0.0.5) SETTABLE OPTIONS: map cache size, alphabetized waypoints/tracks, picture viewer, webbrowser Speed up waypoint drawing; option for faster drawing. what if try to REDOWLOAD while RE/DOWNLOADing? Redraw when becomes available, somehow? Also, show maps in progress a different color. map loading/memory caching in the background? (for zoom out) WHITE UNDER TRACKS! DONE FASTER! CLEAN THIS UP! FEATURE WISHLIST (i.e. unlikely to get done): selections (select area of waypoints, trackpoints, etc) elevation plotting is not so pretty if you're moving north, as it overlays stuff uglily. discussion? bicycle runs your track (animation) that tilts depending on slope hover over pic Better annotation for tracks, etc. Fields, etc. Filled polygons New UI: "Track Tool" => just analyze/pick out, right click or button to edit right click to do new track or "Track/Waypoint Tool" I18N (das mundo ne parle pas agglika) Vector/TIGER maps!!! (use Cairo/Roadster code?) MISC FIXES (i.e. will never get done): Reid's 23, including waypoints, GPX/XML Viking files. modular plotting styles? just an idea... optimize Lat/Lon performance with its own CE1, CE2 etc. make ce1, cn2 etc for lat/lon & utm; maybe get out the checking code in vik_viewport (see draw_rectange for instance) Progressive Loading (GdkPixbufLoader) CACHING WHOLE CHUNKS? (USEFUL FOR MAP ZOOM TOO!) RELOAD BUTTON? * instead of using "emit"s in tools, do this: * "add-only" return value -- only redraw this layer and layers above it. OR maybe even more advanced -- only redraw certain portions of screen. what about ALPHA??? uh oh... "always redraw" return value -- if layer is visible or not -- e.g. goto wp "redraw if visible" return value settable defaults for layers (sigh...) OR at least config.h stuff -------------------------------- 0.0.9 / 0.1.0 SELECTIONS (?) * square & track-based * select everything in, everything out * download maps in WAYPOINTS * pango for text; text background with settable colors & options * move & edit waypoints!!! auto-select for that * maybe an option to turn on auto-select: off, on, only for same layer (default) MAPS * some of the above optimizations MERGE TRW * auto-rename dupes * delete dupes by name * delete dupes by location; name & location TRACKS * track editing -- everything on that idea sheet on my desk. * insert into track * show list of pics in one location * maybe track-by-elevation MISC * alphabetize waypoints & tracks * d&d layers (not worth it?) FIXES * crazhy-crazhy auto-switch UTM? * figure out save image in background stuff, sigh... * "widget properties set value param data" -> check if has properties params -> in layer_prop_fact: hold value's check if changed. -> return TRUE only if value affects look -> beautify dynamic properties boxes (checkboxes please?) -> groups -> maybe get rid of post_read (use set_param to update gc's -- but maybe not...) * TODOs & FIXMEs * due <= 2004-6-12 (1 yr after 0.0.3) DONE: * do alpha _right_ (to see what I mean, try drawing a transparent PNG) ----------------------- POSSIBLE MAP OPTIMIZATIONS: save conglomerates of shrunken images [to disk]? static cache.c shared between everything -- SHARE MAP CACHES BETWEEN LAYERS AND WINDOWS!!! background loading thread load zoomed out images into conglomerates -or- Sort images by some sort of checksum (maybe sum of all digits) into 10 groups makes finding cached image 10 times faster if we somehow know we're not going to have enough room to store all maps for 1 redraw in cache, don't cache at all. better cache management -- maybe every map in memory? --> cache should fit more small maps than big ones!!! maybe number for cache_size, keep track of it manuall, calculate from shrinkfactor? <-- good idea pixmap (not pixbuf) cache? vikmaplayer.c:520, don't run g_slist_length who-knows-howmany times (only noticable when shrinking cache) stat images to make sure the size isn't zero (vs. trying to load them). then show errors for bad ones (?) don't lookup IP each time (?) ------------------------------ Then, focus on Lat/Lon and mapquest maps. (????) Then, focus on Lat/Lon and mapquest maps. 0.0.9 "260 million maps... I can't hear you at all" release: finalize pthread/map download UI. export to image fix bug viking running -> use this thread ( good luckers !!! ) merge trw layers 0.1.0 "where we're going, we don't need roads" release (concept idea): Select a waypoint, delete to delete it, real tools, a toolbar, etc. Drag and drop layers alphabetatize waypoints & tracks "area selections" -- select tool -> select waypoints in/outside area, download maps in area, etc. etc. -/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/ 0.1.0: the "fixes, patches, improvements, and goodies" release "Where we're going, we don't need roads..." * move a_dialog_new_track to viktrwlayer.c. Clean up VikTrwLayer, separating into several more-managable functions. * get rids of pass_along, layer_and_vlp junk, just use update signal and track_iters (maybe make waypoint_iters) (?) * TODO longones * general cleanups, what you have time for (vik_trackpoint_free etc, draw_track, etc.) * do we really have to have all those global funcs in vik_trw_layer ? right click->new track here, new waypoint here. general TRWEdit tool with popup on vikviewport, it can be done. general edit->delete to delete whatever is selected. ugly stuff ahead. show human-readable timestamp toolbar/toolbox, tool opts win (for tpwin) like in gimp (?) Maybe fix "private" ref_count in clipboard.c (?) clean up viktrwlayer.c, call track_realize() when adding track with add_track(), del dup. code, esp. in track_draw move/edit by click for wp? toolbar/toolbox, tool opts win (for tpwin) like in gimp (?) only draw if in UTM zone !!! Track color-by-elevation ( go all over an area, make tracks thicker/zoom out to create DEM color map ?! ) maps zoomed out Thing to download lotsa maps (script or builtin -- ?) Merge layers (what a say we have 2 layers, one with wp's, one with tracks) merge: auto rename (everything begins with "layer name: ") right click agg -> merge trw children -> super trw or multiple slect/copy & paste picture layer, thumbnails and all... move to gpsbabel default altitude, reflect it everywhere, include viking-remote gpspoint.c -- use new easy gpsbabel code, abc, 123. hard things to think about that need to be done sometime (mainly hard/impossible): 1) map downloader process / map download queue 2) if viking already running, use that process. cut and paste will work much better. EVERYTHING ABOVE THIS LINE SHOULD BE IN 0.1.0! 0.2.0 WILL FOCUS ON LAT/LON AND STREET MAPS ----- 0.2.0 * Plot as lat/lon For mapquest & georef maps: vikviewport "mode" to draw in (utm or straightened lat/lon), check before drawing, convert for TP, etc. * full georef support, release minnesota/manganese * mapquest maps * smart drawing -- determine if line segment passes thru area, fancy math... * map downloading manager, smarter ways -- e.g. "download maps within polygon" * maybe a gpsbabel plug-in * topos zoomed out if it didn't make it into 0.1.0 * maybe better wp drawing * wp's alphabetically (good luckers) or at least when loading * wp editing * direct gps support 0.3.0 (still here?) * new viking -> not new process * wp icons * routes * improve direct manipulation * bugfixes * smart labeling so we can see 2 wp's (nearly) in the same place * UTM zones (?) 1.0 * DEM maps * mapsource files * anything else possible, plausible and desirable. * lots and lots of docs * UI cleanups Uses: * planning * viewing -- showing places/tracks on topo or street maps or scanned maps * map download & printing -- your own, TOPO-thomas guides or city thomas guies * adding coord lines to scanning maps -- print 'em out or see where they are * editing tracks * managing & organizing data * creating maps and gps maps SCALING: * maybe downn scaling of higher-quality topos to accommodate odd zoom resolutions. this would also be useful for downloading _only_ high quality topos, or zooming out and seeing what topos we are missing, or downloading LOTS more topos at once (w/ download all on screen) again, we will have to see how good GTK scaling is. * maybe scaling of weird-scale (georeferenced) maps Other * georeferenced raster layer: Optional: - fix off-by-one-pixel bug (probably corner stuff) (?) - utm zones (?) - tool (maybe BUTTON 4,5 thing), and maybe a better zoom tool. but for release it's OK. ROTATION/MESSED UP MAPS: * Track/Waypoint Plotting as Lat/Lon (or artificial rotation, maybe preferred) for those kind of maps and/or rotation of maps (not as good) * maybe option "draw as lat long -- UTM center +- 1000 or something to find degrees/pixel (or use some other formula a la odu) * or just rotation in screen_to_utm and utm_to_screen * "anchoring down" one part of a georeferenced map for rotation and scaling. * fix coord layer, it is SO horribly broken for high zoom levels. * Investigate "chunk already freed" * investigate if layer type doesnt have icon wont start bug * Cleanups and fixes until 0.0.5-final: * at least two of these things * Merge TRW Layers * copy and paste items * MapBlast These Cleanups: -> These Cleanups maybe "max size" thing for each param --> maybe address within layer (struct offset) so wwe can just do away with set_param (in most cases). put stuff in realize or after_read cleanup interface <---- IMPORTANT -> cleanups below -> sometime: has_altitude or NO_ALTITUDE -> 999999 -> 0.0.6 C*L*E*A*N*U*P*S dialog.c -> misc.c, viktrwlayer.c export a layer from the file menu, some how. Export Layer -> choose layer. or Export Selected Layer (disabled as need be --- *MAYBE* RGN type and other type in something of its own, not name. that way, we can use the same file for waypoints to gps and for maps. solutions to this problem: File->Properties: Position: Save current position Save this position: UTM/LATLON ZOOM Save no position ------- ------- ------- ------- (fixes + cleanups + scaling + rotation + ruler widgets (?) + topos & orthos in one (?) + copy&past items + merge layers) = 0.0.6 then 0.0.7, 0.0.8, 0.0.9 focus things before "major" release: direct manipulation (major feature/use) use current viking (maybe) to second "major" release: libgpspoint2 and/or gpsd (show current pos) map ui (rough edge) analyzing stuff better, exact analyzing. to 1.0 UTM ZONE!!! > Although almost all of these are on your todo list I thought I would add my thoughts. > > 1. Being able to choose the map units. The metric system still baffles > some of us. > 2. Modular set up for map sources. The urls tend to change/disapear > when companies get bought up by micro$oft (mapblast). The ability to > import/export georefrenced maps. > 3. Manipulations of track data...distance, altitude etc. > 4. Export/printing of maps. > 5. Eyecandy. Colors and symbols for tracks, waypoints and routes. Shade > topo maps with DEM data. file format + hig compliance + bug fixes + MAYBE track undo = 0.0.4 FF2 + ruler widget + topos&orthos in one +comment field + bugfixes = 0.0.5 if viking already running, use that process. + copy and paste layers + merge layers + copy and paste items + bugfixes = 0.0.6 Direct manipulation, WYSIWYG moving + track connecting + etc = 0.0.7 track segment selection, deletion, track point deletion (create two segments or skip point) + waypoint symbols + bugfixes = 0.0.8 toolbar + layer properties boxes changes, etc. + misc = 0.0.9 routes + misc + code cleanups = 0.0.10 map download ui + code cleanups + bugfixes = 0.0.11 other goodies, fixes, break release = 0.0.12 misc, etc. fixes, cleanups = 0.0.14 autotools, I18n + etc. = 0.0.15 fixes = 0.1.0 (NOT IMPORTANT. FF2 will come.) functions write_utm, read_utm to save space sizeof(Waypoint) != sizeof(components)! try to save disk space len of layer for each layer so older versions can skip over new layers Make it so if layertype >= vik_layer_num_types, skip layer. (in aggregatelayer.c) Use magic numbers, and lengths to better prevent version messing ups (len of layer data, if extra, rest skip, if not enough, ignore, etc.) 9in layer file themselves) --- Viking 0.1.0 "It's been a long road..." > 0.1.0: anylyzing speed and time, libgpspoint, misc goodies > 0.2.0: garmap layers, utm zones, etc. 0.0.4 "Lame Duck Tape" -------------------- 0.0.6 "Where we're going, we don't need roads..." -------------------- --Definitely: UNDO DELETE LAYER!!! Or ask, maybe? For now, ask: later, maybe an undo "stack of commands" where things at the bottom of the stack are done only as new things push them down? more "Forgive the user" kind of stuff. FIXES: Acceptable chars in dialog.c & gpspoint.c file check if it's a directory for load & save. Route support! Toolbar Do something similar with tools. layer_tools func in interface, then a tools structure, array, or add2menu func. humm Track Colors -- PROBABLY. viktrwlayer_dialog.c -- we MUST do this one. No, even better Idea. framework where properties are stored as RESOURCES for each type of layer. Each type of layer defines it's own resources and the viking layer dialog builder picks it up and draws the dialog. Comments? Format? Fields? Type: check, double/spin (including range, and all other params), string, double/entry, int/entry And then subdivisions (tabs) of that. Track drawing, track colors, waypoints. or Drawing, Colors, ... fix layers_menu_add_layers I've made a mess of the add menu stuff. The add submeny is bad. maybe a itemfactory thing in layer interface (for now, it's OK... but...) at the very least a serializedicon thing in interface so I don't have to serialize it every time... draining resources. -- what if i have one menu with the icons and everything already made, and both vlp and wikwindow adds that? no, then i could't have custom callback data. what if all layer types' itemfactory items were modeled as "Add Layer/TRW Layer" Then I'd have an add layer menu in each? -- think about it. MAYBE: MOVE A WAYPOINT Waypoint Symbols, get started. symbols.c where i have a Name->ID mapping, then an ID->icon mapping. Get Started on Icons. Merge 2 TRW Layer Better CoordLayer. Fix Some Bugs, Clean up Some Code. Bulk Map Downloader (maybe another project) renaming waypoints -- overwriting And There's Your Release. Other Ideas: fix editing / move bug (ideas?) copy & paste individual tracks & waypoints tracks & waypoint ordering (?!) don't forget about track SEGMENTs !!! (shoot for 0.0.5; should be in by 0.0.6) vik_trw_layernew_track like waypoint. or maybe not (need starting point?) I18N -- at least fake ( all strs _() ized) HIG compliance... maybe export all visible trw's (nah, merge) select waypoint; break up a track Coordlayer color chooser Coordlayer: UTM trw_layer centerize: randompoints & average maybe in item_add get visible and name from the layer / track / whatever itself. ALSO, maybe chane set_name to update_name. show tracks and waypoints (dynamic stuff)!! Copying between layers! YEAH do some TODOs --------------------------------------- | 0.0.5 | --------------------------------------- | "Not all those who wander are lost" | --------------------------------------- Track & Waypoint sorting Convert to GLIB Gobjects for layers I18N AutoTools Track Colors select waypoints; select trackpoints; selet track segments; measuring track & segment length; analyzing trackpoint altitude & time by selecting it; color by altitude/ Copy & Paste Layer (see below) legend (length) copying between layers: sublayer_add_menu_items () -> copy -> static pointer for layers panel, or whole process. two ways of doing it: layer2copy & sublayer2copy, or general purpose "cliboard" var. on paste, layer / aggregate layer figures it out. I vote for "layer2copy" and "sublayer2copy". That way, each layer can check if it can paste the sublayer and paste layer will always be there. then you need a duplicate function for each thing you want to copy. shouldn't be too bad. ~-~-~-~-~-~-~-~ 0.0.6 "Where no man has gone before" --------------- Map Download Background Thread LibGpsPoint Settabl eFonts UTM zones Waypoint Symbols Edit Timestamps show different fields on side: altitude, time, etc. sort by these. maybe a layer edit dialog box. ------ 0.1.0 ------ Garmap Layer! Other: -------------- waypoint symbols make your own timestamp CACHE MAP SERVER IP; RETURN ERROR FOR WHY DOESNT WORK MAP DOWNLOAD PROGERESS (!) more g_asserts ... lots more UTM zones, aye... ---------------------------------------- ======================================== ++++++++++++++++++++++++++++++++++++++++ fix tracks thing: STILL BUGS ! and clean up function maybe? start noplace, when open file start in middle of there clarification of new / open ( add to or what? maybe add to in layer; merge layer stuff ) status bar: don't overlap stuff i18n!!! coordlayer -- ticks only tick marks or lines for utm lines so you can tell where you are (TickLayer) Intelligent Map Caching: knows which way you're going ... just something to think about. Download all maps routes choosable gcs including background Maybe each track has it's own GC? Just a thought. Tools, explore etc. tools menu. tools window / bar save stuff status bar for track info, etc. +TODO from otu ... glist for routes (pointer directly to string used in ghashtable key? possible?) and tracks. "Viking -- can you handle the power?" "Viking -- where do you want to go today?" "Viking -- where have you been today?" "Viking -- where did you go today?" "Vikingis Conqueris" "The Viking Conquereth" Viking 0.0.1pre15 Viking "the fake GIS" Viking "the wannabee GIS" Viking "CasiGIS" Viking QuasiGIS (tm) GPX support, loc.gz So Many Possibilities... OTU can do Viking can't: * routes * instant GPS location (sorta) viking-1.4.2/test/0000755000175000017500000000000012175546636011004 500000000000000viking-1.4.2/test/gpx2gpx.c0000644000175000017500000000067312122673673012467 00000000000000#include #include #include int main(int argc, char *argv[]) { g_type_init (); VikLayer *vl = vik_layer_create (VIK_LAYER_TRW, NULL, NULL, 0); VikTrwLayer *trw = VIK_TRW_LAYER (vl); a_gpx_read_file(trw, stdin); a_gpx_write_file(trw, stdout, NULL); // NB no layer_free functions directly visible anymore // automatically called by layers_panel_finalize cleanup in full Viking program return 0; } viking-1.4.2/test/Makefile.in0000644000175000017500000010215712175546614012773 00000000000000# Makefile.in generated by automake 1.13.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : @REALTIME_GPS_TRACKING_TRUE@am__append_1 = -lgps check_PROGRAMS = degrees_converter$(EXEEXT) gpx2gpx$(EXEEXT) \ test_vikgotoxmltool$(EXEEXT) test_coord_conversion$(EXEEXT) subdir = test DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/mkinstalldirs $(top_srcdir)/depcomp \ $(top_srcdir)/test-driver README ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/expat.m4 \ $(top_srcdir)/m4/libcurl.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am_degrees_converter_OBJECTS = degrees_converter.$(OBJEXT) degrees_converter_OBJECTS = $(am_degrees_converter_OBJECTS) am__DEPENDENCIES_1 = am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) \ $(top_builddir)/src/icons/libicons.a $(am__DEPENDENCIES_1) degrees_converter_DEPENDENCIES = \ $(top_builddir)/src/degrees_converters.o $(am__DEPENDENCIES_2) am_gpx2gpx_OBJECTS = gpx2gpx.$(OBJEXT) gpx2gpx_OBJECTS = $(am_gpx2gpx_OBJECTS) gpx2gpx_DEPENDENCIES = $(top_builddir)/src/libviking.a \ $(am__DEPENDENCIES_2) am_test_coord_conversion_OBJECTS = test_coord_conversion.$(OBJEXT) test_coord_conversion_OBJECTS = $(am_test_coord_conversion_OBJECTS) test_coord_conversion_DEPENDENCIES = $(top_builddir)/src/libviking.a \ $(am__DEPENDENCIES_2) am_test_vikgotoxmltool_OBJECTS = test_vikgotoxmltool.$(OBJEXT) test_vikgotoxmltool_OBJECTS = $(am_test_vikgotoxmltool_OBJECTS) test_vikgotoxmltool_DEPENDENCIES = $(top_builddir)/src/libviking.a \ $(am__DEPENDENCIES_2) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/src depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(degrees_converter_SOURCES) $(gpx2gpx_SOURCES) \ $(test_coord_conversion_SOURCES) \ $(test_vikgotoxmltool_SOURCES) DIST_SOURCES = $(degrees_converter_SOURCES) $(gpx2gpx_SOURCES) \ $(test_coord_conversion_SOURCES) \ $(test_vikgotoxmltool_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_STATUS_DEPENDENCIES = @CONFIG_STATUS_DEPENDENCIES@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DB2MAN_XSL = @DB2MAN_XSL@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ EXPAT_CFLAGS = @EXPAT_CFLAGS@ EXPAT_LIBS = @EXPAT_LIBS@ GDK_PIXBUF_CSOURCE = @GDK_PIXBUF_CSOURCE@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GLIB_MKENUMS = @GLIB_MKENUMS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HELP_DIR = @HELP_DIR@ HTML_DIR = @HTML_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ LDFLAGS = @LDFLAGS@ LIBCURL = @LIBCURL@ LIBCURL_CPPFLAGS = @LIBCURL_CPPFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_CFLAGS = @PACKAGE_CFLAGS@ PACKAGE_LIBS = @PACKAGE_LIBS@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ POW_LIB = @POW_LIB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XP = @XP@ _libcurl_config = @_libcurl_config@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = -I$(top_srcdir)/src \ $(PACKAGE_CFLAGS) LDADD = $(PACKAGE_LIBS) @EXPAT_LIBS@ @LIBCURL@ \ $(top_builddir)/src/icons/libicons.a $(am__append_1) TESTS = check_degrees_conversions.sh check_SCRIPTS = check_degrees_conversions.sh EXTRA_DIST = check_degrees_conversions.sh degrees_converter_SOURCES = degrees_converter.c degrees_converter_LDADD = \ $(top_builddir)/src/degrees_converters.o \ $(LDADD) gpx2gpx_SOURCES = gpx2gpx.c gpx2gpx_LDADD = \ $(top_builddir)/src/libviking.a \ $(LDADD) test_vikgotoxmltool_SOURCES = test_vikgotoxmltool.c test_vikgotoxmltool_LDADD = \ $(top_builddir)/src/libviking.a \ $(LDADD) test_coord_conversion_SOURCES = test_coord_conversion.c test_coord_conversion_LDADD = \ $(top_builddir)/src/libviking.a \ $(LDADD) all: all-am .SUFFIXES: .SUFFIXES: .c .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu test/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: -test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS) degrees_converter$(EXEEXT): $(degrees_converter_OBJECTS) $(degrees_converter_DEPENDENCIES) $(EXTRA_degrees_converter_DEPENDENCIES) @rm -f degrees_converter$(EXEEXT) $(AM_V_CCLD)$(LINK) $(degrees_converter_OBJECTS) $(degrees_converter_LDADD) $(LIBS) gpx2gpx$(EXEEXT): $(gpx2gpx_OBJECTS) $(gpx2gpx_DEPENDENCIES) $(EXTRA_gpx2gpx_DEPENDENCIES) @rm -f gpx2gpx$(EXEEXT) $(AM_V_CCLD)$(LINK) $(gpx2gpx_OBJECTS) $(gpx2gpx_LDADD) $(LIBS) test_coord_conversion$(EXEEXT): $(test_coord_conversion_OBJECTS) $(test_coord_conversion_DEPENDENCIES) $(EXTRA_test_coord_conversion_DEPENDENCIES) @rm -f test_coord_conversion$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_coord_conversion_OBJECTS) $(test_coord_conversion_LDADD) $(LIBS) test_vikgotoxmltool$(EXEEXT): $(test_vikgotoxmltool_OBJECTS) $(test_vikgotoxmltool_DEPENDENCIES) $(EXTRA_test_vikgotoxmltool_DEPENDENCIES) @rm -f test_vikgotoxmltool$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_vikgotoxmltool_OBJECTS) $(test_vikgotoxmltool_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/degrees_converter.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gpx2gpx.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_coord_conversion.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_vikgotoxmltool.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ else \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) $(check_SCRIPTS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? check_degrees_conversions.sh.log: check_degrees_conversions.sh @p='check_degrees_conversions.sh'; \ b='check_degrees_conversions.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(check_SCRIPTS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \ clean-checkPROGRAMS clean-generic cscopelist-am ctags ctags-am \ distclean distclean-compile distclean-generic distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: viking-1.4.2/test/Makefile.am0000644000175000017500000000163711777110616012757 00000000000000AM_CFLAGS = -I$(top_srcdir)/src \ $(PACKAGE_CFLAGS) LDADD = $(PACKAGE_LIBS) @EXPAT_LIBS@ @LIBCURL@ $(top_builddir)/src/icons/libicons.a if REALTIME_GPS_TRACKING LDADD += -lgps endif TESTS = check_degrees_conversions.sh check_PROGRAMS = degrees_converter gpx2gpx test_vikgotoxmltool test_coord_conversion check_SCRIPTS = check_degrees_conversions.sh EXTRA_DIST = check_degrees_conversions.sh degrees_converter_SOURCES = degrees_converter.c degrees_converter_LDADD = \ $(top_builddir)/src/degrees_converters.o \ $(LDADD) gpx2gpx_SOURCES = gpx2gpx.c gpx2gpx_LDADD = \ $(top_builddir)/src/libviking.a \ $(LDADD) test_vikgotoxmltool_SOURCES = test_vikgotoxmltool.c test_vikgotoxmltool_LDADD = \ $(top_builddir)/src/libviking.a \ $(LDADD) test_coord_conversion_SOURCES = test_coord_conversion.c test_coord_conversion_LDADD = \ $(top_builddir)/src/libviking.a \ $(LDADD) viking-1.4.2/test/test_coord_conversion.c0000644000175000017500000000513011642054602015462 00000000000000#include #include #include void test_coord_to_mapcoord(VikMapSource *source, gdouble lat, gdouble lon, gdouble zoom) { VikCoord vikCoord; MapCoord mapCoord; vikCoord.mode = VIK_COORD_LATLON; vikCoord.east_west = lon; vikCoord.north_south = lat; printf("%s: %f %f %f => ", g_type_name(G_OBJECT_TYPE(source)), vikCoord.east_west, vikCoord.north_south, zoom); vik_map_source_coord_to_mapcoord (source, &vikCoord, zoom, zoom, &mapCoord); printf("x=%d y=%d\n", mapCoord.x, mapCoord.y); } void test_mapcoord_to_center_coord (VikMapSource *source, int x, int y, int scale) { VikCoord vikCoord; MapCoord mapCoord; mapCoord.x = x; mapCoord.y = y; mapCoord.scale = scale; printf("%s: %d %d %d => ", g_type_name(G_OBJECT_TYPE(source)), mapCoord.x, mapCoord.y, scale); vik_map_source_mapcoord_to_center_coord (source, &mapCoord, &vikCoord); printf("lon=%f lat=%f\n", vikCoord.east_west, vikCoord.north_south); } int main(int argc, char *argv[]) { g_type_init(); VikMapSource *spotmaps4osm_wmsc_type = VIK_MAP_SOURCE(g_object_new(VIK_TYPE_WMSC_MAP_SOURCE, "id", 202, "label", "Spotmaps (WMS-C)", "hostname", "spotmaps.youmapps.org", "url", "/spotmaps4osm/?LAYERS=spotmaps4osm&SERVICE=SPOTMAPS4OSM&SRS=EPSG:4326&bbox=%s,%s,%s,%s&width=256&height=256", NULL)); VikMapSource *osmarender_type = VIK_MAP_SOURCE(g_object_new(VIK_TYPE_SLIPPY_MAP_SOURCE, "id", 12, "label", "OpenStreetMap (Osmarender)", "hostname", "tah.openstreetmap.org", "url", "/Tiles/tile/%d/%d/%d.png", "check-file-server-time", TRUE, NULL)); gdouble lats[] = { 0, 90, 45, -45, -90 }; gdouble lons[] = { 0, 180, 90, 45, -45, -90, -180 }; int scale; for (scale = 0 ; scale < 18 ; scale++) { int i; for (i=0 ; i $result != $expected" exit 1 fi done } check_failure () { expected=$1 shift for value in "$@" do result=`./degrees_converter "$value" | cut -d' ' -f3` diff=`echo "$result - $expected" | bc -l` if [ $diff = 0 ] then echo "$value -> $result = $expected" exit 1 fi done } check_success 3.5 3.5 330 "330'0.00" check_failure 3.5 3.6 340 "330'1.00" exit 0 viking-1.4.2/test/test_vikgotoxmltool.c0000644000175000017500000000275211507650232015220 00000000000000#include #include void parse(VikGotoTool *tool, gchar *filename) { struct LatLon ll; ll.lat = NAN; ll.lon = NAN; if (vik_goto_tool_parse_file_for_latlon(tool, filename, &ll)) printf("Found %g %g in %s\n", ll.lat, ll.lon, filename); else printf("Failed to parse file %s\n", filename); } int main(int argc, char *argv[]) { g_type_init(); VikGotoXmlTool *with_element = VIK_GOTO_XML_TOOL ( g_object_new ( VIK_GOTO_XML_TOOL_TYPE, "label", "OSM", "url-format", "http://ws.geonames.org/search?q=%s&maxRows=1&lang=es&style=short", "lat-path", "/geonames/geoname/lat", "lon-path", "/geonames/geoname/lng", NULL ) ); VikGotoXmlTool *with_attr = VIK_GOTO_XML_TOOL ( g_object_new ( VIK_GOTO_XML_TOOL_TYPE, "label", "OSM", "url-format", "http://ws.geonames.org/search?q=%s&maxRows=1&lang=es&style=short", "lat-path", "/geonames/geoname", "lat-attr", "lat", "lon-path", "/geonames/geoname", "lon-attr", "lng", NULL ) ); VikGotoXmlTool *with_xpath = VIK_GOTO_XML_TOOL ( g_object_new ( VIK_GOTO_XML_TOOL_TYPE, "label", "OSM", "url-format", "http://ws.geonames.org/search?q=%s&maxRows=1&lang=es&style=short", "lat-path", "/geonames/geoname@lat", "lon-path", "/geonames/geoname@lng", NULL ) ); int i; for (i = 1; i #include #include "degrees_converters.h" int main(int argc, char *argv[]) { int i; gdouble value; gchar *latDDD, *lonDDD; gchar *latDMM, *lonDMM; gchar *latDMS, *lonDMS; for (i=1 ; i < argc ; i++) { value = convert_dms_to_dec(argv[i]); latDDD = convert_lat_dec_to_ddd(value); lonDDD = convert_lon_dec_to_ddd(value); latDMM = convert_lat_dec_to_dmm(value); lonDMM = convert_lon_dec_to_dmm(value); latDMS = convert_lat_dec_to_dms(value); lonDMS = convert_lon_dec_to_dms(value); printf("'%s' -> %f %s %s %s %s %s %s\n", argv[i], value, latDDD, lonDDD, latDMM, lonDMM, latDMS, lonDMS); free(latDMS); free(lonDMS); free(latDMM); free(lonDMM); free(latDDD); free(lonDDD); } return 0; } viking-1.4.2/test/README0000644000175000017500000000022211507650232011562 00000000000000To create the test programs in this directory: make check To run memory checks eg: valgrind --leak-check=full ./gpx2gpx < file.gpx > /dev/null viking-1.4.2/mkinstalldirs0000755000175000017500000000672212134470534012546 00000000000000#! /bin/sh # mkinstalldirs --- make directory hierarchy scriptversion=2009-04-28.21; # UTC # Original author: Noah Friedman # Created: 1993-05-16 # Public domain. # # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' IFS=" "" $nl" errstatus=0 dirmode= usage="\ Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ... Create each directory DIR (with mode MODE, if specified), including all leading file name components. Report bugs to ." # process command line arguments while test $# -gt 0 ; do case $1 in -h | --help | --h*) # -h for help echo "$usage" exit $? ;; -m) # -m PERM arg shift test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } dirmode=$1 shift ;; --version) echo "$0 $scriptversion" exit $? ;; --) # stop option processing shift break ;; -*) # unknown option echo "$usage" 1>&2 exit 1 ;; *) # first non-opt arg break ;; esac done for file do if test -d "$file"; then shift else break fi done case $# in 0) exit 0 ;; esac # Solaris 8's mkdir -p isn't thread-safe. If you mkdir -p a/b and # mkdir -p a/c at the same time, both will detect that a is missing, # one will create a, then the other will try to create a and die with # a "File exists" error. This is a problem when calling mkinstalldirs # from a parallel make. We use --version in the probe to restrict # ourselves to GNU mkdir, which is thread-safe. case $dirmode in '') if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then echo "mkdir -p -- $*" exec mkdir -p -- "$@" else # On NextStep and OpenStep, the `mkdir' command does not # recognize any option. It will interpret all options as # directories to create, and then abort because `.' already # exists. test -d ./-p && rmdir ./-p test -d ./--version && rmdir ./--version fi ;; *) if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 && test ! -d ./--version; then echo "mkdir -m $dirmode -p -- $*" exec mkdir -m "$dirmode" -p -- "$@" else # Clean up after NextStep and OpenStep mkdir. for d in ./-m ./-p ./--version "./$dirmode"; do test -d $d && rmdir $d done fi ;; esac for file do case $file in /*) pathcomp=/ ;; *) pathcomp= ;; esac oIFS=$IFS IFS=/ set fnord $file shift IFS=$oIFS for d do test "x$d" = x && continue pathcomp=$pathcomp$d case $pathcomp in -*) pathcomp=./$pathcomp ;; esac if test ! -d "$pathcomp"; then echo "mkdir $pathcomp" mkdir "$pathcomp" || lasterr=$? if test ! -d "$pathcomp"; then errstatus=$lasterr else if test ! -z "$dirmode"; then echo "chmod $dirmode $pathcomp" lasterr= chmod "$dirmode" "$pathcomp" || lasterr=$? if test ! -z "$lasterr"; then errstatus=$lasterr fi fi fi fi pathcomp=$pathcomp/ done done exit $errstatus # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: viking-1.4.2/test-driver0000755000175000017500000000761112152165162012132 00000000000000#! /bin/sh # test-driver - basic testsuite driver script. scriptversion=2012-06-27.10; # UTC # Copyright (C) 2011-2013 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . # Make unconditional expansion of undefined variables an error. This # helps a lot in preventing typo-related bugs. set -u usage_error () { echo "$0: $*" >&2 print_usage >&2 exit 2 } print_usage () { cat <$log_file 2>&1 estatus=$? if test $enable_hard_errors = no && test $estatus -eq 99; then estatus=1 fi case $estatus:$expect_failure in 0:yes) col=$red res=XPASS recheck=yes gcopy=yes;; 0:*) col=$grn res=PASS recheck=no gcopy=no;; 77:*) col=$blu res=SKIP recheck=no gcopy=yes;; 99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;; *:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;; *:*) col=$red res=FAIL recheck=yes gcopy=yes;; esac # Report outcome to console. echo "${col}${res}${std}: $test_name" # Register the test result, and other relevant metadata. echo ":test-result: $res" > $trs_file echo ":global-test-result: $res" >> $trs_file echo ":recheck: $recheck" >> $trs_file echo ":copy-in-global-log: $gcopy" >> $trs_file # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: viking-1.4.2/COPYING0000644000175000017500000004310511166174146010773 00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 19yy This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) 19yy name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. viking-1.4.2/ChangeLog.00000644000175000017500000022175711507650232011655 000000000000002009-07-28 Guilhem Bonnefille : * Fix #2766609: Don't use gpsd_units() 2009-07-26 Herm : * Fix #2812856: Change SRTM URL 2009-07-26 Guilhem Bonnefille : * Fix #2818818: unset langage preset while opening external Google 2009-06-19 Jonas Norling * Filters out irrelevant modifiers when using the scroll wheel * Minor refactoring of the zooming code * Fix #2796985: Crash when cancelling background job 2009-06-02 Guilhem Bonnefille : * Upgrade OSM-traces support to 0.6 API 2009-05-22 Tal : * Add hdop,vdop,pdop,nsat support in GPX 2009-05-22 Jocelyn Jaubert : * Fix #570956: change saved_width to 1 2009-05-09 Jocelyn Jaubert : * Allow to flush memory consumed by map cache * Add a preference to change the map cache size 2009-05-09 Tal : * Replace g_strtod by g_ascii_strtod 2009-05-06 Jocelyn Jaubert : * Add a thread pool for downloading 2009-04-04 Jocelyn Jaubert : * Include full libcurl version in user agent * replace deprecated CURLOPT_FILE by CURLOPT_WRITEDATA * Fix bug #2481237: Maps directory file chooser should look for directory 2009-02-08 Guilhem Bonnefille : * Update translations * Release 0.9.8 2009-01-22 Mathieu Albinet : * Fix loading of world map file 2009-01-22 Rob Norris : * Fix 2249398: Fix some memory leaks 2009-01-18 Guilhem Bonnefille : * configure.ac: allow to enable/disable geonames and select the search method 2009-01-18 Hein Ragas : * Add GeoNames support (both for search and for POI import from Geonames+Wikipedia) 2009-01-15 Mathieu Albinet : * Windows port: avoid "\\" in URL 2008-12-20 Guilhem Bonnefille : * Remove Google's map tiles 2008-12-17 Guilhem Bonnefille : * Remove old Google stuff 2008-12-13 Guilhem Bonnefille : * Add external tools framework * Add OpenStreetMap and Google web tools 2008-12-07 Quy Tonthat : * Clicking on "vivisble" tick no longer makes the layer selected. 2008-12-03 Hein Ragas * GPX export: sort track by time. Some application can make use of this feature when reading gpx files. 2008-11-22 Quy Tonthat : * Merging tracks by name. Users can now select more than one tracks to merge with. * Fix bugs that caused magic scissors not working. 2008-11-19 Quy Tonthat : * Merging tracks by name. As submitted by Hein Ragas * Merging tracks by name. Tracks can only be merged if they have timestamps. Make sure users won't cause damage to themselves by merging tracks without timestamps. Also a few bug fixes and optimisation. 2008-11-13 Quy Tonthat : * Viking no longer support Google satellite maps due to requests from Google. 2008-10-31 Quy Tonthat : * Tittle waypoint properties dialog as "Waypoint Properties" not "Create". 2008-10-30 Quy Tonthat : * Add larger size waypoint symbols (icons) that look similar to the ones used in Garmin GPS. * The larger symbols are now used by default. To switch back to the old smaller icons, use command line option "-s" or "--small_waypoint". * Waypoint Property Dialog: The combo box "symbol" (used for selecting waypoint symbol) now has tooltip that shows the name of the selected symbol. * src/icons/Makefile.am: Make sure we won't pick up unwanted _pixmap.h files * Waypoint names are now displayed at the top of waypoint symbol and no longer overlap symbols. 2008-10-28 Quy Tonthat : * Waypoint symbols: Use Garmin waypoit names so that waypoint has proper symbols on GPS after upload (and on Viking after download). Old viking files still works the way they did. 2008-10-22 Quy Tonthat : * Fix compatibility problem for windows caused by g_shell_parse_argv() 2008-10-20 Quy Tonthat : * New server for OSM cycle map. 2008-10-13 Quy Tonthat : * GPS realtime tracking: Keep retrying when fail to connect to gpsd, either because gpsd is not (yet) running or gpsd disconnect (eg. gps unplugged). 2008-10-12 Jon Burgess : * fix implicit declaration of maps_layer_default_dir() * fix missing status return in spawn_command_line_async() * fix curl error buffer usage 2008-10-12 Guilhem Bonnefille : * Release 0.9.7 2008-10-12 Rob Norris : * Fix 2161310: Fix some more compiler warnings 2008-10-12 Jon Burgess : * Fix 2134452: Properties of some tracks show as NaN 2008-10-11 Quy Tonthat : * Fix segfault in realtime tracking. * Add new moving map method for realtime tracking. 2008-09-30 Stanislav Brabec : * Rename icon: viking_icon.png -> viking.png * Fix missing files in po/POTFILES.in * src/viking.desktop.in: add GenericName and revise Categories * viking.spec.in, src/icons/Makefile.am: Fix icon target dir 2008-09-22 Quy Tonthat : * Change "Zoom To" short cut to avoid conflict with "Zoom Tool". 2008-09-16 Guilhem Bonnefille : * Update translations 2008-09-07 Quy Tonthat : * fix parallel build (make -j8) on multi-processor machines. Based on a patch from sbrabec. Thanks. 2008-09-03 Guilhem Bonnefille : * QA: cleanning old stuff 2008-09-01 Guilhem Bonnefille : * Fix #1947260: correct a corrupted escape 2008-09-01 Quy Tonthat : * Google search adapting changes from Google. 2008-09-01 Quy Tonthat : * Fixed crashes when creating new layers. 2008-08-30 Guilhem Bonnefille : * QA: removing specific GtkCellRenderer 2008-08-30 Armin Moser : * add osm cycle layer support * add a menu entry to extend an existing track using magic scissors 2008-08-30 anonymous: * Patch #2009666: OpenAerialMap 2008-08-30 Rob Norris : * Fix #1952523: mode_button assertion loading old datafile 2008-08-25 Guilhem Bonnefille : * Add preferences to select how degrees are displayed 2008-08-24 Guilhem Bonnefille : * Fix: update layer after applying properties 2008-06-24 Mathieu Albinet : * Color picker button for the Coordlayer properties dialog 2008-08-23 Guilhem Bonnefille : * Cut/Copy/Paste empty selection is not critical 2008-06-23 Mathieu Albinet : * Layers panel UI improvements 2008-08-22 Guilhem Bonnefille : * Replace specific about dialog by GtkAboutDialog * Replace some g_warning by g_debug * Homogeneous icons management. 2008-08-17 Guilhem Bonnefille : * Add preferences to store OSM login/password * Add a password entry widget 2008-08-16 Guilhem Bonnefille : * Ensure that confirmation dialog is over file selector 2008-08-13 Quy Tonthat : * Fixed google map download problem. 2008-07-31 Guilhem Bonnefille : * Release Viking 0.9.6 * Fix unecessary (and probably) Makefile.am directive 2008-07-28 Quy Tonthat : * Fix gcget command line to accomodate negative coords. 2008-07-22 Quy Tonthat : * Google maps no longer worked due to changes made by Google. The Problems now fixed. 2008-07-21 Guilhem Bonnefille : * Release Viking 0.9.5 2008-07-18 Guilhem Bonnefille : * Install man pages * Update translations 2008-07-15 Quy Tonthat : * Added viking.desktop 2008-07-13 Rob Norris : * Fix #1947456: Compiler warning fixes 2008-07-09 Guilhem Bonnefille : * Update translations 2008-07-02 Quy Tonthat : * Track properties: split track at marker. 2008-06-30 Quy Tonthat : * Track properties: Keep markers of the graphs in sync with each other. 2008-06-29 Guilhem Bonnefille : * Windows port: fallback temporary file 2008-06-29 Mathieu Albinet : * Windows port: typo in util.c 2008-06-24 Quy Tonthat : * Track graph marker now works again. 2008-06-22 Quy Tonthat : * Fix google version number. 2008-06-15 Quy Tonthat : * RELEASE: Test release 0.9.4.20080614 (by Guilhem) 2008-06-09 Mathieu Albinet : * Windows port: redefine LOCALEDIR 2008-06-06 Quy Tonthat : * viking no longer converts waypoint names to uppercase. Waypoint names are now case insensitive. 2008-06-02 Mathieu Albinet : * Portability: remove "/dev/null" use 2008-05-08 Mathieu Albinet : * Windows port: rename interface to source_interface * Portability: replace mmap functions by g_mapped_file* * Portability: use of g_ascii_dtostr to format google url 2008-05-02 Guilhem Bonnefille : * Update man page 2008-05-01 Guilhem Bonnefille : * Add file content checking process 2008-05-01 Mathieu Albinet : * Remove dependency to wget 2008-05-01 Guilhem Bonnefille : * Adding --debug and --verbose command line option 2008-04-26 Guilhem Bonnefille : * Fix pipe leaks 2008-04-26 Mathieu Albinet : * Portability: provide our own curl WRITE function 2008-04-22 Robert Norris : * Fix: Initalize tv_usec field. * Fix for implicit declaration of function 'g_fopen' 2008-04-21 Guilhem Bonnefille : * Bug #1915121: add an utility to reproduce (test/gpx2gpx) * Fix #1915121: use GLib functions to handle ISO8601 dates 2008-04-16 Tim Scofield : * Fix: typo false -> FALSE 2008-04-12 Mathieu Albinet : * M_PI already defined 2008-04-12 Guilhem Bonnefille : Mathieu Albinet : * Portability: reduce unistd.h dependency * Portability: replace mkdir by g_mkdir * Portability: replace deprecated bzero function by memset * Portability: remove dirname needs with g_mkdir_with_parents 2008-03-27 Mathieu Albinet : * Replace GtkFileSelection by GtkFileChooser 2008-03-24 Guilhem Bonnefille : * Merge icons in a single binary object 2008-03-15 Guilhem Bonnefille : * Fix: [ 1839948 ] Maximize/Restore changes current cursor * Add panning tool as default 2008-02-25 Guilhem Bonnefille : * po/ChangeLog: needed file for distribution 2008-02-25 Rob Norris : * Fix: autogen can generate broken configure file (SF#1881475) * Fix some compiler warnings (SF#1888407) 2008-02-24 Guilhem Bonnefille : * Change OSM's tiles URL 2008-02-22 Michael A. Peters : * viking.spec: Correct license, required packages and local. 2008-02-20 Guilhem Bonnefille : * Update translations 2008-02-16 Guilhem Bonnefille : * main.c: I18N improvements * French translation update 2008-02-16 Jocelyn Jaubert : * I18N improvements * French translation update (both submitted the 2008-01-12 on mailing-list) 2008-01-22 Alex Foobarian : * Fix a crash bug in merge-by-time reported by Evan 2008-01-18 Quy Tonthat : * Fix a crash bug in mapcache reported by Jocelyn * Added mutex to protect mapcache from being corrupted by threads. 2008-01-04 Alex Foobarian : * Tuned the v-t diagram drawing 2007-12-27 Evan Battaglia : * Minor fixes/debugging to gcget. Add gcget-perl * Full screen mode. * Bugfix for prefernces -- don't cut off last character of password 2007-12-27 Guilhem Bonnefille : * Add GpxWritingOptions to control GPX file writing 2007-12-23 Oddgeir Kvien : * Add default values to ele and time fields (due to OSM) 2007-12-21 Evan Battaglia : * Preferences groups/tabs * Fix gcget to accept username and password. Pass this in to gcget. * Oops! Reading preferences from the file wasn't working. Fixed. 2007-12-21 Jocelyn Jaubert : * Update French translation 2007-12-21 Christoph Eckert : * Update source for OSM/Osmarender tiles 2007-12-20 Evan Battaglia : * Preferences in ~/.viking/viking.prefs, this will soon allow geocaching support to go mainstream, (hopefully) 2007-12-20 Quy Tonthat : * Revert a previous change that disabled realtime tracking if libgps does not exist. 2007-12-17 Jocelyn Jaubert : * Use specific gettext call for plural form 2007-12-16 Evan Battaglia : * Sort waypoints in GPX output. * Use the "next unused" (not really) waypoint number as default. 2007-12-15 Guilhem Bonnefille : * Fix compilation under HURD (missing MAXPATHLEN macro) * Fix: if libgps is missing, Realtime GPS Tracking is disabled 2007-12-15 Jocelyn Jaubert : * Make menu entries translatable * Mark many strings translatable * Update french translation 2007-12-12 Guilhem Bonnefille : * Marking translatable strings * First french translation (incomplete) 2007-12-12 Guilhem Bonnefille : * Fix warning: underquoted definition of AM_WITH_EXPAT * Fix bug: "config.status: error: cannot find input file: Makefile.in" 2007-12-07 Quy Tonthat : * Fix autogen.sh to remove the assumption that version 1.9 of automake is available on all systems. * Now that autogen.sh runs configure, "make full" should not. 2007-12-07 Evan Battaglia : * BlueMarble tiles: http://mike.teczno.com/notes/blue-marble-tiles.html * Google Terrain maps * Disable printing to make Viking compile for GTK < 2.10 2007-11-27 Guilhem Bonnefille : * util.c: Use a list of possible browsers. 2007-11-20 Quy Tonthat : * Fix a bug that can potentially cause segfault. 2007-11-19 Quy Tonthat : * Improve track graphs. Some tracks looked too flat. 2007-11-09 Evan Battaglia : * GPSBabel filter work I've been sitting on for a while now. * Draw circle for downloading geocaches. Constrain by maximum distance. 2007-11-08 Quy Tonthat : * Printing support 2007-11-01 Quy Tonthat : * Fix bug that caused Old Google maps not being disabled by default. 2007-10-24 Quy Tonthat : * Fix crashes on elev graph for some tracks. * Make low alt tracks look more visible on elev graph. * Fix "incompatible pointer type" warnings. 2007-10-23 Quy Tonthat : * Missing declaration. Thanks to Bernd Zeimetz 2007-10-20 Guilhem Bonnefille : * Releasing 0.9.3 2007-10-20 Evan Battaglia : * Fixing minor typo in vikdemlayer.c which could cause crashes 2007-10-20 Quy Tonthat : * Track Properties Dialog no longer blocks interaction of the main window. * Draw position marker on track elev/speed graphs at mouse click. * Diasable buttons on Track Properties Dialog when not needed. * Display track name on title of track property dialog. Now that viking allows multiple dialogs displayed simultaneously. 2007-10-17 Evan Battaglia : * Fix problem with extraneous waypoints being plotted (wrap around problem). May still be problems in UTM mode. 2007-10-16 Evan Battaglia : * Fix Google version parsing. Google no longer uses '=' and '&' but hex equivalents to describe the URI. Not sure if this will last :/ 2007-10-16 Quy Tonthat : * Interpolating DEM data in 3 different methods. Track data, elevation-distance graph and elevation info on status bar now make use of interpolation. 2007-10-15 Quy Tonthat : * Add more room to the top of elevation-distance graph. 2007-10-14 Evan Battaglia : * Fix plotting of DEM elevation data (subtract min altitude) 2007-10-12 Evan Battaglia : * Fix Esc and Backspace to work only when VikViewport has focus. * VikViewport grabs focus on click or release events, or when a tool move event returns VIK_LAYER_TOOL_ACK_GRAB_FOCUS. 2007-10-12 Quy Tonthat : * Make use of DEM elevation data and GPS speed for track graphs. 2007-10-11 Evan Battaglia * Key press framework for tools. Esc to stop track. Backspace to end track. 2007-10-11 Guilhem Bonnefille : * Upgrading to API 0.5 of OSM 2007-10-11 Quy Tonthat : * Make Realtime Tracking a feature that can be disabled at configure time. Do not quietly disable it beacause libgps is not available at compiling time. * Extra data from GPS in realtime mode are now stored in trackpoints. 2007-10-10 Quy Tonthat : * Fix a crash bug caused by operation on variable inside a macro. 2007-10-09 Evan Battaglia : * Ctrl-shift-scroll to zoom like Google. Just scroll zooms like before. * Show currently edited track in red-dashed line. This makes it easier to tell if we've ended the track. * When using new track tool, draw a line before making a point to preview the new point. * Use $BROWSER environment variable (for viewing geocache pages) 2007-10-08 Quy Tonthat : * Fix compiling breakage caused by missing icon file from the list. 2007-10-07 Guilhem Bonnefille : * libgps is no more mandatory 2007-10-07 Evan Battaglia : * Scroll zoom keeps cursor over same spot on map (like Google, QLandKarte) * Cursors for tools. * Undo magic scissors by right-clicking. * Extend a track by right-clicking on it. * Experiment: "Begin track" tool 2007-10-07 Quy Tonthat : * Correctly calculate position (based on time instead of distance) when clicking on speed-time graph. * Added km/h to speed entries of the track properties dialog. * The "Selected Time" on track properties dialog is now correct. * Track Properties: now displays track distance/time instead of "Selected Time". 2007-10-06 Quy Tonthat : * Fix bugs that caused odd display of time on track properties dialog. * Pop a message when failed to connect to gpsd. 2007-10-05 Quy Tonthat : * Fix a segfault caused by (mistakenly) adding a new layer to gps layer. * Be more selective in collecting realtime trackpoints. 2007-10-04 Quy Tonthat : * Improvements for GPS layer's "realtime tracking". 2007-10-02 Quy Tonthat : * Fix crashes caused by emitting update too early at layer creation. * Add realtime tracking to GPS layer. * fix half-drawn problems for GPS layer. 2007-10-01 Guilhem Bonnefille : * Relax dependencies about glib by implementing g_hash_table_remove_all ourselves (Evan's patch) 2007-10-01 Quy Tonthat : * Disable half-drawn update when the center is moved. Avoid using static "trigger" in viklayer.c which causes problems when viking has more than one windows. 2007-09-28 Quy Tonthat : * Fix bug that caused Elevation graph not working properly with some tracks. 2007-09-27 Evan Battaglia : * GPSD Layer -- draw an arrow. * Minimum elevation for DEM layer. * Half-drawn hack to only draw layers on top of the one that has recently changed. A must for realtime GPS. 2007-09-25 Quy Tonthat : * SRTM download now works for regions outside North_America too. 2007-09-23 Evan Battaglia : * Fix copy & pasting DEM layers -- new serializing string list code. * Don't crash if using tool on wrong type of layer / no layer. Although I really want to know what happened to "use the top visible layer", and return TRUE if the tool "accepts" the use... editing lots of TRWLayers was way easier that way... * Remove unused vik_layer_copy() code * Add Magic Scissors icon (from GIMP) * Add comment when making a Google Route. * Continue a magic scissors route by holding down control. Continue the comment too. * Right-click a route created by google route (multiple or single) to see the Google directions web page which created it. Useful for creating a route w/ Viking, then seeing the verbal directions (left here, right there) * Experimental GPSD support (VikGpsdLayer) 2007-09-22 Evan Battaglia : * Pan Accelerators (Ctrl+Left, etc) * Ctrl-Scroll and Ctrl-Shift-Scroll to pan, kind of like Gimp. * Add a RADIOGROUP_STATIC properties factory type to make it easy for new layers. Uses an array list (like before) instead of a GList. * DEM US 10m (dem24k) source! Option in DEM Layer & ./configure * (copying & pasting DEM layers is broken, will fix later) 2007-09-21 Evan Battaglia : * Fix right-click on geocache to work with new geocache names. * Download & import SRTM 90m DEM data (still working on US 10m) 2007-09-17 Evan Battaglia : * Draw lines to show file existence for MapsLayer for very zoomed out maps. It's faster that actually showing the maps but still gets slow at a certain level. 2007-09-09 Guilhem Bonnefille : * Removing unused files (*.png.h). 2007-09-08 Guilhem Bonnefille : * Fix #1789550: define MAX macro if not defined on ALL systems 2007-09-08 Quy Tonthat : * AUtomatically fetching google version number. 2007-09-07 Guilhem Bonnefille : * Fix #1789550: mkdtemp usage is conditioned, so it is possible to build viking on system not offering such feature. 2007-09-06 Guilhem Bonnefille : * Adding command line option framework. 2007-09-06 Quy Tonthat : * Make viking's default start location somewhere more likely has maps. * Fix crash when using "Maps Download" tools right after viking is started (without a viking file). 2007-09-05 Quy Tonthat : * Viking 0.9.2 (By Guilhem Bonnefille ) 2007-09-03 Guilhem Bonnefille : * Fix: crash when "applying" a map layer property dialog. * QA: strong type the second argument of the *_post_read functions. * Preset filename when exporting a TrwLayer. * Refactoring: retrieve the VikWindow from the VikViewport via its GtkWidget nature. * Use $EMAIL to initialise email field for OSM upload. * Do not warn about drawmode inconsistency while reading file. * Hide Expedia view mode when expedia is not built in. 2007-09-01 Guilhem Bonnefille : * Disable Expedia map layer by default (as it is not working). 2007-08-30 Bernd Zeimetz : * Add redirect support (for Expedia map layer). 2007-08-30 Guilhem Bonnefille : * Add ability to upload a single track. 2007-08-28 Guilhem Bonnefille : * Check current drawmode after creating a new MapsLayer. 2007-08-25 Quy Tonthat : * New google version number. * Better checking to detect downloaded text instead of images. * Give more instructive message for attempting to download maps in wrong mapmode. 2007-08-20 Guilhem Bonnefille : * libcurl is a requirement 2007-08-20 Quy Tonthat : * Fix bugs that cause crashes on layers copy/paste/delete. * Fix bug in Google search that caused viking jump to wrong location when Google can not find the match. 2007-08-16 Guilhem Bonnefille : * Group "Export Layer..." entries in a sub-menu. 2007-08-16 Quy Tonthat : * Clean up and eliminate compiler warning. 2007-08-15 Quy Tonthat : * Fix bug in creating temporary HOME when HOME is not set. * Added --enable-old-google to configure script. Old google modes are now disabled by default. * Default mode for new maps is Google Maps. 2007-08-09 Quy Tonthat : * Make Google Map default map type. 2007-08-02 Quy Tonthat : * DEM module can now read hgt.zip files directly (no need to unzip them). * DEM module can now process 1 arc sec hgt(.zip) files (mainly for USA regions). 2007-07-27 Quy Tonthat : * Plug filedescriptor leak in dem.c 2007-07-26 Quy Tonthat : * Display on status bar altitude at cursor using data from DEM layer(s). 2007-07-25 Quy Tonthat : * New google version numbers. 2007-07-24 Quy Tonthat : * Disable GeoCache Acquire since it nolonger works. Can be enabled again using configure --enable-geocaches. 2007-07-18 Quy Tonthat : * Remove (my) debug messages which are no longer needed. 2007-07-15 Quy Tonthat : * Missing a few changes here. * release 0.9 (by Guilhem) 2007-07-13 Quy Tonthat : * Eliminate the needs of entering DEM files for every single track/waypoint layer. 2007-07-07 Quy Tonthat : * Fixed typo in Makefile.am 2007-07-06 Evan Battaglia : * Merge DEM Branch 2007-07-04 Quy Tonthat : * Bug fix: View Mode displayed wrong setting on start up 2007-07-03 Quy Tonthat : * Fixed bugs that caused draw_scale and draw_centermark status not being consistent among View menu, viewport and loaded files. 2007-07-02 Evan Battaglia : * DEM Branch: Trying to fix/cleanup various DEM things * DEM Branch: Support for SRTM 3 arcsecond _global_ DEM data from http://www2.jpl.nasa.gov/srtm/ 2007-07-02 Quy Tonthat : * Fixed bugs that caused crashes during GPS upload/download. 2007-07-01 Quy Tonthat : * Make "Save Image" and "Save Image Directory" dialogs reusable. 2007-06-24 Guilhem Bonnefille : * Merging with Ralf's work around debianization * INSTALL: refreshed 2007-06-23 Guilhem Bonnefille : * Minor change to avoid SEGFAULT on x86_64 * Add DownloadOptions type to specify referer per map source 2007-06-19 Quy Tonthat : * Fix bugs that causes "drawcentermark" not recognised when reading from files. * Fix a wild pointer bug that can cause crashes 2007-06-18 Guilhem Bonnefille : * Copying libcurl.m4 as it is needed everywhere 2007-06-18 Quy Tonthat : * New google version numbers. * Make scale more visible. * Add center mark which can be turn on/off in View menu. * Viking now uses cookies for http requests. Some server(s) is quite picky about this. (With great help from Lixus ) * Download maps along a track. Right click on a track layer, select map type and zoom level, viking will do the rest. * release 0.1.3-20070618 2007-06-13 Guilhem Bonnefille : * Adding an icon (suggested by Ralf Meyer ) 2007-06-8 Quy Tonthat : * Fix a bug that causes segfault when viewing properties of a waypoint. 2007-06-1 Quy Tonthat : * Fix a bug that causes segfault when viewing properties of a track that has only one trackpoint with elevation information. * Backport Evan's magic scissors from DEM branch. 2007-05-31 Quy Tonthat : * Add Google Maps search to View menu and Toolbar * Waypoint created right after the search will pick up the search string as comment. (Use TrackWaypoint Layer menu, not toolbar, to create waypoint). 2007-05-26 Mark Coulter : * new waypoint symbols. 2007-05-26 Quy Tonthat : * Fix intermittent problem of map redraw. * Mapslayer: Fixed bugs that cause in some cases, map display can not be refreshed without downloading. 2007-05-24 Ralf Meyer : * Adding man pages. 2007-05-24 Quy Tonthat : * Maps layer: Improve performance for map autodownload. * Make dimensions easier to be found and changed to suit own tastes. * Small touches on the look. 2007-05-23 Quy Tonthat : * New GPS layer menu items: "empty upload", "empty download", "empty all" * acquire->Google Directions now record and display previous queries fo "From"/"To" entries. * Position Google Directions dialogs at the center of Viking window. 2007-05-22 Quy Tonthat : * GPS layer track and waypoint data can now be saved. * Disable prompt for save before exit. * Add "Save and Exit" to File menu. 2007-05-20 Evan Battaglia : * DEM Branch 2007-05-20 Quy Tonthat : * Stop autodownload from running forever on map downloading errors. 2007-05-18 Quy Tonthat : * Add curl-devel to spec file. * Map tool: Left click can now refresh display of map tiles. * Check for non-displayable data after downloading map. 2007-05-17 Quy Tonthat : * Fix problems in map downloading caused by unreliable error detection. * Release 0.1.3 2007-05-15 Quy Tonthat : * Fixed bugs that can cause segfault on exit. The problem was caused by mapslayer's weak_ref not being unref'ed in some cases. 2007-05-13 Evan Battaglia : * Fix problem of "bad" tiles showing up when downloading. The problem was loading of incomplete tiles. Fixed this by first downloading to a temporary file, then moving when complete. 2007-05-11 Evan Battaglia : * Fix removal of redownloaded tiles from memory cache. * Fix a stupid segfault in main.c (opening new files) 2007-05-09 Quy Tonthat : * New Google version numbers. 2007-05-08 Guilhem Bonnefille : * New "Refresh onscreen tiles" menu entry 2007-05-04 Guilhem Bonnefille : * debian/: debianization 2007-04-29 Reid Priedhorsky : * libusb support 2007-04-28 Guilhem Bonnefille : * OpenSourceMap slippy maps (in osm.c) -- Maplink tiles * Add configuration option for OpenStreetMap sources 2007-04-23 Guilhem Bonnefille : * OpenSourceMap slippy maps (in osm.c) -- Osmarender and Mapnik 2007-04-21 Evan Battaglia : * OpenSourceMap slippy maps (in google.c) -- identical to google maps except zoom numbering 2007-04-16 Guilhem Bonnefille : * Adding libcurl support 2007-04-04 Quy Tonthat : * New Google version number. * Fixed Google Directions 2007-02-20 Quy Tonthat : * GPS layer dialog now displayed at the center of the Viking main window. 2007-02-19 Quy Tonthat : * New Google version numbers. 2007-02-15 Quy Tonthat : * Made viking.spec.in out of Michael's viking.spec * Added viking.spec.in to autoconf files. 2007-02-15 Michael A. Peters : * Added viking.spec 2007-02-14 Guilhem Bonnefille : * NEWS, configure.ac: preparing 0.1.2 2007-02-13 Guilhem Bonnefille : * src/vikwindow.c: remove URL and version number from window title * src/dialog.c: add URL and use dynamic information for version * AUTHORS, src/dialog.c: update contributors list * AUTHORS, src/dialog.c, src/Makefile.am: About dialog filled with AUTHORS file 2007-02-07 Quy Tonthat : * Fix bug that causes crashes when click at the right side (outside) of the track graph area in the Track Poperties window. 2007-02-06 Jocelyn Jaubert : * Add new information to Track Properties. Postion in time will be tracked and display when moving mouse cursor around the track graph. 2007-02-06 Quy Tonthat : * New google version numbers. * correct main window title and viking website. 2007-02-05 Quy Tonthat : * Cosmetic changes. 2007-02-04 Quy Tonthat : * Simplify tools enable/disable codes. 2007-02-01 Quy Tonthat : * Only tools that work with current active layer are enable, others are disable (fade out and does nothing when clicked on). 2007-01-27 Quy Tonthat : * Display map sections while downloading (bug 1303429) 2007-01-25 Quy Tonthat : * Fixed bugs that caused crashes on creating new map layer or new track/waypoint layer. 2007-01-24 Quy Tonthat : * Updated google tranparent version number. * Made it more convenient to update google version numbers. 2007-01-23 Quy Tonthat : * Merged branch modular to trunk. 2007-01-05 Quy Tonthat : * Bug fix: main menu edit->delete and edit->cut did not work with waypoints and tracks. 2007-01-04 Quy Tonthat : * Added "Copy" and "Cut" to popup menus for track and waypoint (on the layer panel). 2007-01-03 Quy Tonthat : * bug fix: crash on inserting aggregate layer if the selected layer's parent is not an aggregate layer. * bug fix: crash when delete a child layer whose parent is not an aggregiate layer (eg gpslayer) * Menu item selection for layer instances. 2007-01-02 Quy Tonthat : * gpslayer: Unexpose interface functions. * Layers now can have their say on what pop up menu items they want. 2007-01-02 Guilhem Bonnefille : * Add ability to disable Terraserver stuff * Add ability to disable Expedia stuff 2007-01-01 Quy Tonthat : * gpslayer: fix bugs that causes crashes when click "Cancel" on layer creation dialog. 2007-01-01 Guilhem Bonnefille : * Make all .h self sufficient * Add ability to disable Google stuff 2006-12-31 Quy Tonthat : * Added gps layer 2007-01-02 Guilhem Bonnefille : * Add ability to disable Terraserver stuff * Add ability to disable Expedia stuff 2007-01-01 Guilhem Bonnefille : * Make all .h self sufficient * Add ability to disable Google stuff 2006-12-26 Quy Tonthat : * Fix a google version number change (at least in Australia). 2006-12-07 Quy Tonthat : * Fix an array overflow bug in Map Layer Properties 2006-12-04 Alex Foobarian : * Added an "About" dialog 2006-11-30 Alex Foobarian : * Added Quy Tonthat's patch to fix a bug in Track Properties 2006-11-29 Alex Foobarian : * Added patch by Quy Tonthat to fix a crash bug 2006-11-12 Guilhem Bonnefille : * Add expat explicit dependency 2006-10-31 Alex Foobarian : * Visual feedback for moving waypoints 2006-10-30 Alex Foobarian : * Created standard Edit menu * Implemented Cut for trackpoints and waypoints * When moving trackpoints, we now draw one under the cursor for visual feedback 2006-10-26 Alex Foobarian : * Cleared up the drawing modes and map type descriptions * Updated google version string to make it work in Europe * Added Cut/Copy/Paste shortcuts to right-click menus * Compacted the track properties dialog 2006-10-23 Alex Foobarian : * Introduced a toolbar tool interface, converted existing tools to use it * As a result, ruler drawing bugs are gone * Sped up ruler drawing by increasing the redraw priority 2006-08-15 Guilhem Bonnefille : * Add implicit DMS->DDD conversions in waypoints dialogs 2006-07-26 Guilhem Bonnefille : * src/degrees_converters.c, src/degrees_converters.h, test/degrees_converter.c: add dec -> DDD conversion * src/degrees_converters.c, src/degrees_converters.h, test/degrees_converter.c: add dec -> DMM conversion * src/degrees_converters.c: refactor dms conversions 2006-07-24 Guilhem Bonnefille : * Add patch for GoogleMaps from Reid Priedhorsky 2006-07-22 Guilhem Bonnefille : * Makefile.am, configure.ac, src/Makefile.am, src/degrees_converters.c, src/degrees_converters.h, test/Makefile.am, test/check_degrees_conversions.sh, test/degrees_converter.c: Adding degrees conversion functions (DDD/DMM/DMS) 2006-07-06 Evan Battaglia : * ChangeLog, src/google.c: Upgrade Google Maps -- Europe 2006-07-01 Evan Battaglia : * Upgrade Google Maps version (yay Europe!) 2006-06-11 Guilhem Bonnefille : * NEWS, configure.ac: Preparing 0.1.1 2006-05-25 Alex Foobarian : * Cleaned up the data source interface * Added a setup dialog to the GPS data source, with protocol type and serial port location 2006-05-12 Alex Foobarian : * Small fixes in Acquire from GPS code 2006-05-08 Guilhem Bonnefille : * autogen.sh: simpler method to start from CVS 2005-12-03 Evan Battaglia : * Data sources -- check for existence of necessary things 2005-11-25 Evan Battaglia : * Created "data sources" structure to easily add new data sources via GPS babel. It's ugly now and there's a lot to be done, but I think 79-line datasources_google.c shows the power of the approach. * Data sources: Google & Geocaches 2005-11-23 Guilhem Bonnefille : * src/gpx.c (gpx_dtostr): add better GPX export Evan Battaglia : * dtostr -> coords.c; use in gpsmapper.c and gpspoint.c (locale-independent output) 2005-11-21 Alex Foobarian : * Fixed v-t diagram crash bug 2005-11-19 Alex Foobarian : * GPSBabel acquire code 2005-11-18 Alex Foobarian : * Copy/paste of individual track- and way-points updated to work between processes. 2005-11-17 Alex Foobarian : * Copy/paste between viking processes * Layer marshalling support 2005-10-28 Guilhem Bonnefille : * configure.ac: Adding --with-mapcache configure option * src/config.h: Removed because no more used (generated) 2005-10-18 Alex Foobarian : * Fix ruler declination in UTM mode 2005-10-17 Guilhem Bonnefille : * src/icons/Makefile.am: assumes the creation of icons.h * src/garminsymbols.c, src/vikwindow.c: icons.h re-located * src/Makefile.am: no more icons.h production 2005-10-16 Evan Battaglia : * Fix ruler: show angle, distance even when compass off-screen. * Fix bgitemcount. Background items status bar "should" be accurate now. 2005-10-13 Alex Foobarian : * Drag and drop whole track/waypoint lists 2005-10-12 Alex Foobarian : * Coord layer drawing for lat/lon based projections 2005-10-11 Alex Foobarian : * Draw a compass when using a ruler 2005-10-07 Alex Foobarian : * Added ruler drawing to the ruler tool 2005-10-06 Alex Foobarian : * Added support for pasting coordinates in lat/lon format 2005-10-05 Alex Foobarian : * Change clipboard so as to use GTKClipboard. Prepare for support for pasting coordinates, etc. Evan Battaglia : * When pasting waypoints and tracks, do name resolution (add #2, etc) 2005-10-01 Evan Battaglia : * make symbols work for geocaching .loc files (and case-insensitive symbol names) * Option as to whether or not to show unit scale (esp for exporting images) 2005-09-30 Guilhem Bonnefille : * configure.ac, src/Makefile.am (SUBDIRS): added auto-tools support for src/icons Alex Foobarian : * Added a drag_drop_request method to layer interface, updated DnD to use it * Updated DND to insert layers at the point of the drop, instead of front of list * Added wp symbol support to gpx * Fixed name collisions during track/wp DND * Layer-wide option as to whether to show waypoint symbols 2005-09-29 Alex Foobarian : * Added support for waypoint symbols (changing, loading, saving), and a small number of icons. * Added a scale ruler * Changed panning to show less "garbage" in exposed areas 2005-09-28 Evan: * menu.xml & icons inline 2005-09-27 Alex Foobarian : * GtkUIManager/Toolbar * DND in the LayersPanel Evan: * strtod -> g_strtod (i18n glitch) 2005-09-25 Guilhem Bonnefille : * src/globals.h (VIKING_VERSION): uses the PACKAGE_VERSION macro * Makefile.am (EXTRA_DIST): handles viking-remote * src/Makefile.am (AM_CFLAGS): substitution of CFLAGS by AM_CFLAGS * doc/Makefile.am, doc/dev/Makefile.am: new files * Makefile.am (SUBDIRS): handles doc directory * configure.ac: handles doc and doc/dev directories 2005-09-16 Alex Foobarian : fix to v-vs-t (better drawing) Evan: * GPX fixes * So Geocaching .LOC _isn't_ GPX?!?!? Oh well, it's XML... * GPX write, click v-vs-t diagram * Option to show stops in TRWLayer options, and stop_length * Elevation plotting relative to min and max elevation in track. * Option to do elevation plotting, and controlling relative height 2005-09-15 * 4+ hours later and voila, GPX read support * Fixes in propwin if track doesn't have certain data, say so. 2005-09-14 Me (Evan) again: * Fix USGS support * Click on the elevation map to go there, so you can see where a mountain-top is etc. * Don't crash on track properties of an empty track. 2005-09-13 Guilhem Bonnefille : * bootstrap: new file to bootstrap auto-tools * src/config.h (VIK_CONFIG_ALPHABETIZED_TRW): no more set via this file * Makefile.am (bin_SCRIPTS): viking-remote added * configure.ac: --enable-alphabetized-trw option added Evan Battaglia : * Experimental altitude funky plotting I'm working on 2005-09-12 Alex Foobarian 's changes * disable stops, for now (I forgot about those...) * Track elevation graph: minimum altitude difference for less jagged curves * Track elevation graph: gray background, blue foreground * Track elevation graph: lines to clearly show absolute elevation * New velocity-vs-time graph & calculating function * Notebook to hold this new graph with track elevation graph My (Evan's) changes: * Fix above v-vs-t patch to not crash on tracks without timestamp. * Not show v-vs-t graph and/or elevation map if the necessary data isn't there. Guilhem Bonnefille 's changes * bootstrap: new file to bootstrap auto-tools * src/config.h (VIK_CONFIG_ALPHABETIZED_TRW): no more set via this file * Makefile.am (bin_SCRIPTS): viking-remote added * configure.ac: --enable-alphabetized-trw option added 2005-09-07 Autotools support by Guilhem Bonnefille. 2005-09-06 Added Alex Foobarian's track duration patch. Added Alex Foobarian's track profile patch. Added Alex Foobarian's elevation map fix. 2005-09-04 Map cache fix: if only one map can fit / one map is bigger than cache size, then that's OK. Delete from cache when updating image. 2005-08-18 Map cache size based on memory usage, not number of images. Some flaws to be worked out still in this. 2005-08-16 Accepted USGS maps support from Clark McKines. Pretty slick, I'll have to take a look at it. 2005-08-02 Quite easily added support for Mercator projection & Google Mercator maps (regular, transparent etc) Chaned waypoint types a little bit (size of waypoint) 2005-07-31 Hopefully fixed background.c item # count Fixed KH Maps (v=2) 2005-06-20 A little research & added KH Maps support. 2005-06-19 Fixed right-click waypoint edit -> crash bug, hopefully. Fixed "everyone lives in zone 11" assumption for vikgeoreflayer.c; still monozone though ... Made it so when you paste or add a new layer, it pastes it before the selected layer, not to the top. Fixed the bug where pasting a map layer messed up the name. Made dragging middle mouse button pan. Removed pan tool. Thanks Reid for the idea. Made different options for drawing waypoint dots. Not very good but we can make better-looking ones later. Side view of tracks la Garmin MapSource, nice ... Fixed Google street maps simply by changing "v=.1" to "v=.3" ; the newest version of gmaps is completely different, I'm unsure how long this will work for. 2005-05-05 Experimenting with stops 2005-05-01 Fixed cheap ruler bug (use ruler, change draw mode, use ruler, crash). That's really not good... but hey, it _is_ alpha software. 2005-04-24 Added "how many maps currently downloading" status bar hack 2005-03-11 What the heck? Viking-remote didn't work? Fixing --/- stuff. Also fixing hang if can't open. Did this by putting gdk_threads_enter() before file opening in main.c. Update viking-remote to work _right_ with maps, also geo://GC1234/ works, nice... 2005-03-08 Uffda, I forgot Oggdeir's gpsmapper.c patch. Also fixed Windows compiling. 2005-02-28 Fixed Windows compiling, hopefully. Removed TopoZone support per topozone.com request. 2005-02-27 Instituted a really nice background downloading system with a separate system, works like a charm. Fixed (hopefully) a bug where a download failed the filename wasn't deleted, leaving an empty file. Misc cleanups/testing surrounding downloading. Autodownload Fix other stuff, including moving a waypoint (delete while moving -> crash) 2005-02-26 X and Y zoom levels for maps so factors don't have to be equal. Fixed maps zoomed out, added an combo box for it by adding a combo box in viklayer.c, fixed maptype to use map id and not internal array index Changed VikTrwLayer properties dialog to add an image tab, fixed GtkTable layout so as not to stretch out stuff in the y direction. Fixed /var/cache/maps stuff Safety for maps zoomed out Fixed mapzoom for cases where factors aren't equal Got the basic download in background code on, now just minor nicities Got the genius idea that someone might want to open up more than one file at one time ;) 2005-02-25 No time tonight, gotta get some sleep. Did work on hooking up Google Maps with GPSBabel's module into viking with a wget & a sed command. Totally awesome. Also, added support for the highest google zoom level which I didn't know existed. 2005-02-23 I'm not really supposed to be working on this ... but it get's addictive, so close to a release... Added back alpha support. It works for all map types now. Mostly useless for other types, unless you want to see tracks under your map, since you can't show more than one non-Terraserver map at the same time. Started work on maps for different zoom levels. You can do all different maps at all different zoom levels, even zoom in. Don't zoom in with expedia maps though, it could create a 2000px x 3000px size image or so, and cache up to 10,000 of those. Yeah. 2005-02-22 Made it easier to use all these maps -- switching between them, correct zoom levels, etc. Expedia for Europe (thanks GPSDrive people again) Kit Transue's UTM zone patch is back in for the new MapLayer. This marks the first time I have seen cross-UTM zone Topozone maps. Interestingly enough it seems that they patch the maps together. Viking messes this up a little bit but in general it works fairly well. I'm still amazed it's possible ;) Minor cleanups etc. 2005-02-21 Tons of work today, too much to list really. Basicly I threw away VikMapLayer and started over. This one's nice, really easy to add new types. Google, Expedia, and Terraserver maps are now functioning, but the layer isn't completed yet, many things such as alpha, download in the background, etc. aren't quite there yet. Topozone support, heh ;) Of course none of these maps can be used together. Especially since scaling isn't done yet. I'm also going to have to create some handy ways to switch between layers. 2005-02-20 Finally got the brilliant notion that a GSList isn't the smartest way to do memory map caching. In fact it's probably one of the stupidest. Increased speed (when all maps loaded) by 30x or so by using a GHashTable shared between layers. How much of the slowdown was accumulated somehow since 0.0.8 is unknown. New map caching file naming scheme. Hierarchial directory structure for faster lookup. Tweaked the above memory caching scheme to use a linked list in conjunction with a hashtable to allow for a maximum size limit to the cache. Currently you have to edit the file to set this upper limit. And it's in tiles -- doesn't matter the size of the tiles. Added some code in http.c of all places to make 2 directories above if they don't exist (new caching filename scheme) 2005-02-19 Fixed params[3] -> params[2] l1738 to fix click image Fixed delete a waypoint->crash bug Fixed TOPLAYER_FROM_WIDGET() error on right click wp -> properties (no VLP to use this on; use FROM_LAYER()) 2005-02-18 Wow, Haven't worked on this in a while... Sorry, just adding a hack to allow me use mapzoom at 0.25 quality. 2005-02-02 Changed pan, a little bit, to move the map. Not good enough though, it leaves behind stuff now. Couldn't get it to not flicker, and run at a decent speed. 2005-01-29 Fixed waypoint pango drawing. Compatibility layer for GtkColorButton to use an entry for GTK 2.2 Move Waypoints by dragging Snap to WP (shift-) for TP & WP moving. Snap to TP (ctrl-) for WP moving and still TP moving. Select WP on the side when editing (if the layer is selected that is) 2005-01-28 Changed over to Pango, finally. Just experimentally so far, though; gotta cement it and fix it over. Changed the properties/parameters system to allow tabs (groups) in properties boxes. Tracks & waypoints now alphabetized! Three cheers! I can't believe how relatively easy that was. Two new functions in viktreewview.c and two more lines of code in viktrwlayer.c, I thought it was going to be hard for some reason... Added a GtkColorButton thing for layer properties. This officially boosts the minimum requirements to GTK+ 2.4. This shouldn't be too much of a problem since 2.6 is out already. Settable waypoint background & text colors. Different ones for different layers is incredibly snazzy. Settable track bg color. Also fix some switch/case stuff... forgot to break... So you can do plain transparent (no WP background) by choosing white and selecting color translucency... Not exactly clear. But wow, these colors are looking really awesome. 2005-01-23 Expedia maps working now. Don't *exactly* match up on the top and bottom sides, but I'm not sure I can get much better. Good enough. More fixes, added autodownload (thought that was already in here? maybe only in my topozone version). Fixes, lots of small stuff -- e.g. a bug I introduced where it wasn't getting the correct utm zone for terraserver maps when downloading. Fixed a weird GTK bug where updating the coord mode menu radio button would change the coord mode. See only_updating_coord_mode_ui Implemented "invisble auto-downloads". Thought up a new way of doing downloads -- a queue and only one other process -- but probably won't implement that for a while. Wow, auto-download + street maps is really neat! 2005-01-22 Working on implementing Expedia maps .. Lots of stuff, had to change HTTP to hande forwarding, that took a while just to test. Had to restructure some vikmaplayer code to know about expedia maps and download differently. LOTS more to go however. It now downloads maps, but that's about it. Lots of work to go. OK, now it cuts off the sides (ads) and stuff. Snazzy. I made a test "draw" function but it isn't working perfectly yet. It is working and piecing together maps though. They look OK pieced together but street names are messed up at borders sometimes to I'm going to make the pieces bigger. Did I mention it draws the maps in the wrong places? 2005-01-21 Many little things tonight: Much cleaner way of doing alpha/bleach. Slightly less functionality (can't do bleach and alpha) but cleaner and should be faster. Made it so it saves coordinate mode in the .vik file. Made it so you can change the background. Saves this to the .vik file. White background under tracks. Inefficient but it works. 2005-01-20 Added support for Urban Areas color photograph maps from TerraServer. Just a note: TopoZone isn't going to work. I had added support for it in my own prviate version, and used it happily for areas where TerraServer was messed up. But one day it didn't work. They changed their site so it's hard (if not impossible) to get to the image directly. I could always do indirect, though ... 2005-01-17 Made it so you can change modes Optimized a little tiny bit, drawing still slow GREATLY Improved UTM drawing speed by remember zone width in VikViewport. I think kit meant to do that, there was a zonie_width item in VikViewport; it went unused. Re-instituted UTM ce1, cn2, etc. checks that went out the door when multiple zones became available. It now does these checks only if UTM is used and there is one zone. Performance is now comparable to 0.0.5 speeds. Fixed minor UTM 2 zones bug I (apparently) introduced above where some things are on zoom. 2005-01-16 Added "Visit Geocache Webpage" right-click waypoint option. Not very useful until I can click on waypoints, though. 2005-01-15 Started massive UTM -> VikCoord abstraction project Wow. Biggest. Change. Ever. Worked on it about 5 hours. It seems to be going excellent! Most UTM's have been made into VikCoord's, except for some things like VikCoordLayer which I simply disabled. I just plugged in the Lat/Lon coord to screen code and it works! Now I have to work out all the bugs, add a change coordinate / conversion system, and fix a lot of stuff. WOO HOO!!! Update: added coord_to_screen and screen_to_coord for Lat/Lon. works FLAWLESSLY!!! AWESOME!!! --- viking 0.0.8 --- 2004-12-25 Added UTM zone glue-together by Kit Transue Fixed various things regarding this patch (distance, lines, etc.) Packages & uploaded changes 2004-11-27 Back, but not really ... Added a fix by Peter Jones (gpspoint.c glitch) Added CYGWIN/Makefile fixes by Alex Stohr --- viking 0.0.8 --- 2004-04-13 Back from a 3-day GPS data gathering mission. Fixed bug wherein track GC's weren't getting updated when line_thickness was updated. Only waypoints and trackpoints if they're in the right UTM zone. Use g_spawn_command_line_async for showing pictures; support for Windows for this too. Rather drastically changed background.c so as not to use pthread's detach() and cancel() functions which are strangely absent in gthread. Changed background.c to gthread. Auto-switch UTM if you go too far. Draw little star on tracks if it was cut off due to UTM zones. Show human-readable time in trackpoint window. Fix trackpoint window so as to not show time of '0' if the TP has no timestamp. I didn't want to take this long with 0.0.8. 0.0.7 was released in just 27 days but 0.0.8 took 50. Oh well, I'll have to work doubly hard for 0.0.9. Here is Viking 0.0.8 all. Enjoy. 2004-04-09 Prevent loading partially-downloaded file by first writing to a temp file and them writing that data to the image file. g_error_free () where neccessary. Changed "Map Download All" to clearer, more direct and generic code. Very easily used this code to make downloading lots of maps with the "map download" tool. Just drag over the square you want to download. Added map size parameter. Had to change viklayer.[ch], add an extra_widget_data field in the param struct and change viklayer.c to support different uint values for options 2004-04-08 Some experimental work with maps at a different zoom level (e.g. 4mpp maps viewed at 16mpp) 2004-04-04 Load thumbs in a background thread. Thumbs show up as soon as they are loaded and you redraw. Cleanup function for maps so incomplete map downloads will be deleted, woo hoo! Snap to TP for edit TP and new track. Hold down control. Added Max Speed, Average Speed, Average Dist Between Trackpoints in track property window. Added "Diff Speed" in TPWin so you can tell speed between one trackpoint to the next. 2004-04-03 Put maps in a background thread while updating the UI, but you can still use viking. I have to duplicate all necessary data passed to the thread (what threads to download and where) in case that layer is deleted. I still have to a couple things (actually canceling the download operation) but it works very nicely, I can download lots of maps at the same time! It feels very liberating... Right click to redownload a map. Regretably some messed up maps have been showing up with the above method, it's a big mystery how exactly... Did a little test: disconnected my Internet connection and tried to download a map. Viking hanged for 22 seconds. I consider that acceptable, for now at least. 2004-04-02 Fixed trw_layer_new_track_gcs getting called twice -- post_read link and in vik_trw_layer_create Just got finished loading thumbnails in the background. Aye, what a bother. But it works nice. (However once I got it to crash with an Xlib async error? Sigh, that's not good...) 2004-03-31 Added support for clicking images to show it, using eog -- this currently cannot be changed. (!) 2004-03-23 Fix crash on export code (Mike Davison) Use $VIKING_MAPS for default map directory if available (Mike Davison) 2004-03-08 Move image to use when alpha drawing to VikViewport. That simplifies a lot. Little changes, here and there. Lots of options for images. 2004-03-07 More work on dynamic Properties boxes, it will make adding new options _so_ much easier... A lot of work on this. Wow, Viking is getting big. And ugly. Also fixed a bug similar to another old bug -- forgot to copy waypoint image filename when a waypoint is copied. You can now choose the image size, via the new dynamic properties box. 2004-03-06 Fixed a dumb bug that prevented you from opening GPSPoint files after Viking files. Working on dynamic Properties boxes, getting nowhere fast... 2004-03-05 Wrote a tiny bit of code to further shrink and cache thumbnails. 2004-02-29 background.c to use pthread to run stuff in the background (think -- downloading maps) and give a dialog to cancel (d'uh!) The ability to use pthread opens up a lot of possibilities about how to handle map downloads. For instance, you could have a little dialog where you have different groups of maps downloading. Lots of possibilities, I just have to think about how I want to implement them. 2004-02-28 Lately I've been working on a GUI tool written in Python to link up pictures and track logs to figure out where a picture was taken. That's my excuse, anyways, for not working on Viking. Thought a little bit about how I'm going to do pictures in Viking. Looked over ROX-Filer's thumbnailing code. Added a bit of picture thumbnail code. You can now see photos in Viking. --- viking 0.0.7 --- 2004-02-22 Fixed edit TP, then rename track -> updates current_tp_track_name glitch. Took quite a bit of time to change the way tools work. Instead of returning TRUE to redraw, tools return TRUE if they "accept" the tool call. If they don't, then it will look for another layer that will accept the tool call. That way you can edit trackpoints on different layers. It's nice, actually. Fixed "edit layer name, then move it" bug the crept in somehow. It wasn't in 0.0.5-pre4, but I don't see any differences in the code, oh well, fixed it this time. One month and almost 4000 LOC later... Viking 0.0.7 "Gonna Move Those Mountains Aside" 2004-02-21 Fixed track join deleting problem mentioned yesterday by keeping track of individual GtkTreeIter's for all tracks in a hash_table. Whenever a track is added/realized it's iter is added to the hash. Actually a rather pleasant (and fairly easy) solution. This simplifies deleting tracks in other places too, since we now don't need to know the iter. Very easily made it so that when you edit a trackpoint it selects the appropriate track in the layers panel. Press Shift+10 for fast deleting. Evidently the tracks list must be expanded. Fixed last_tpl (VikTrwLayer) / cur_tp (VikTrwLayerTpwin) confusion. Changed split up track to change current tp to first of new track rather than last of old. For some reason I felt I needed to add a thing in track properties which would count the number of duplicate TPs (same coords, one after the other) and make a button to remove them. You can now change latitude, longitude, and altitude of each TP in the track window. Good for setting exact location rather then moving. Added _real_ transparency support. I've tried before, but this time it actually wasn't hard it all. It was harder adding the UI stuff and layer attribute and all that. Anyway it might be a tad slow wise but it looks FANTASTIC! Fixed open and save dialogs (including VikFileEntry, but excluding render to image and export as gps* dialogs) so that the dialogs are not deleted and created each time but the same one is used. This means that it will stay in the same directory. How does a release tomorrow sound? 2004-02-20 Can't seem to find the time for Viking these days. Today I managed to get a little work in. I did manage to add support for moving trackpoints. It's awesome. You just choose the edit TP tool, select a TP, and drag it. After experimenting with arcs (arrows) for TPs (it didn't work), I changed track drawing to draw a triangle for the startpoint and a circle for the endpoint. OK, So you can now join tracks (kind of ugly solution, but that was how it worked out), but the really ugly part is that it won't show up as deleted in the layers panel, and to make it do that, I need the track's layers panel Iter which I don't have from the tpwin. I sense major hackage ahead. 2004-02-16 Thursday through Sunday was another "data gathering mission". I also though up a _lot_ of great ideas for Viking. Now I just have to find the time to implement them all. Today I added support in file.c for opening from stdin, aka "-". I also changed the magic number determining code to use ungetc() rather than rewind() so it will work correctly with stdin. Not part of viking, but I wrote a quickie viking-remote script. 2004-02-10 Gotta get back to work. Sigh. Saturday and Sunday I went on a "data gathering mission", so there's my excuse. Yesterday I was away hacking on gpsbabel to support gpspoint (Viking) files. Fixing little tiny things, like making the tpwin not close when you delete a waypoint, fixing little mistakes in trwlayer, graying buttons, etc. Added little things to tpwin -- forward, previous, diff, makind diff work for delete button, etc. Added a_coord_utm_diff for tpwin diff & ruler tool & track length Added a_dialog_create_vbox_label function, converted vik_trw_layer_tpwin_new() Added track length, tp count, segment count in properties box Fixed if try to rename waypoint or track to one that already exists, crash bug (had to uppercase user input) Added split up into segments. Had to change a_dialog_new_track, do above change, and a million other things. Sigh. Fixed split up segments so it first makes a copy, then deletes the old copy. That way if the track was on the clipboard you can paste to get the original track again. Nifty eh? Added reverse track. That's all folks. I'm a-goin to bed. 2004-02-06 Just got through fixing the hardest-to-track-bug I've ever tackled. Viking would crash when I copied a pasted a layer in a certain file, but it seemed fairly random and gdb's backtraces were no help because it was crashing on totally unrelated things (free'ing memory twice does weird things). I finally narrowed it down to do a certain sequence to give me the warning: viking in free() chunk already freed, etc. Then I used step (starting from vik_trw_layer_free) to determine exactly where it was free'ing something twice. It was the waypoint comment. I noticed comments were different from the original waypoint (on the original layer that had been copied) so I tried stepping thru vik_waypoint_copy to see whether the waypoint was being copied correctly. It was then when I something wrong. I had assigned one waypoint to another, then called the function vik_waypoint_set_comment(), which, upon seeing that the comment of this new waypoint was not null, proceeded to free it, whilst the old waypoint still carried that comment pointer around. The ironic part is one line of code (new_wp->comment = NULL;) fixed everything. Well, glad to get that out of the way. Now I can proceed to work on new stuff. I also made sure to delete the trackpoint window if the track gets deleted. The long-awaited SPLIT UP TRACK is finally in Viking. Goodie. 2004-02-03 Set up signals for VikLayer. Constructed a super-cool yet slightly-slow chain of signals using VikAggregateLayer. It's wacky. All my hard internal work has finally payed off. I just added code for deleting trackpoints. It works, the signal is given to update and all is good. Yay. 2004-02-02 Back to work. I hit a snag and had to switch VikLayer to a GObject to give off signals for updating for the track editing tool. 2004-01-30 Very very small amount of code to report export image write errors to stderr. Some various work on track editing: Made another file/class viktrwlayer_tpwin.c Added labels to show info when you click a trackpoint Made it draw a big TP for the current TP I don't know why it's not in this ChangeLog, but some experimental Track[point] "editing" (realling finding) support was already there: the tool, the code for finding the nearest TP, and a line of code showing a dialog with the buttons which would be useful (I obviously did some planning.) Oh, Also, cut and paste waypoints support has been in for quite a while, before September, I'd say, somehow that escaped this log. Anywho, the road looks clear as to how to procede with respect to track editing: make sure to reset current_tp if track is deleted, add on features, etc. 2004-01-29 Added a little thing to tell you how much are the map(s) will cover. FINALLY fixed coord layer so it shows ALL necessary coord lines (it actually checks your zoom level now!!!) 2004-01-28 Slowly added "Generate directory of Images" support. Fixed pan tool. 2004-01-27 You can now choose the name of the image to export to, choose the zoom level, and choose to get everything in the current viewing window. Also took 15 minutes to add a pan tool. Also made it remember your choices of width and height and image format for draw to image file. 2004-01-26 I'm celebrating Australia Day by working on the Vik for the first time in ... My fingers don't go up that high, anyway. Adding code for exporting to image. 2003-9-22 Took a short two month break. Hehe. Finally got around to checking whether server returns "200". Sometimes terraserver has erras. --- viking 0.0.5 -- 2003-7-15 Simplified vikfileentry.c by using gtk_dialog_run Loading from World files Saving to World files 2003-7-14 Map Layer -- default cache directory ~/.viking-maps (on UNIX) or C:\VIKING-MAPS (on Windows). This way people don't have to worry at all about cache directories, they can just use the default and it will automatically be created. Create default cache directory if it doesn't exist. Automatically add file separator on cache directory name. Don't write cache directory name to Viking file if it is default; if no directory use default (that way people can share files without having to worry about someone elses cache directory) Readability/Naming: InitGcs -> PostRead 2003-7-11 More work on GeorefLayer. It's now pretty much working. Made vikfileentry.c, changed vikgeoreflayer and vikmaplayer to use it. 2003-7-10 Changed zoom to two variables -- xmpp and ympp and implemented necessary changes in the layers. Added a "Goto Any Zoom" kind of dialog/function. Changed status bar a tad to reflect this. Started some work (mainly UI/semantics/program interface) on GeorefLayer. Will make it actually do something later. 2003-7-09 Changed zoom limit from 32 mpp to 512 mpp. Changed zoom to a double to allow any zoom level. 2003-7-07 Sorry ... "Real Life" (tm) has been taking up a lot of time lately. Anyway today I managed to implement track visibility in Viking GPS files. 2003-6-27 Don't show an empty menu for a sublayer if it doesn't add anything to the empty menu Little bugfixes 2003-6-26 Put all file stuff in one file. Removed old binary fileformat support. 3 days of work deleted in no time. Track -> VikTrack, Waypoint -> VikWaypoint, Trackpoint -> VikTrackpoint, vikwaypoint.c, viktrack.c Comment support, comment support for gpsmapper export Comment for gpspoint, backslashed quotes, etc. in comment in gpspoint.c. Lot of work... I could easily backslash track/wp name, but they usually dont have quotes in OK, I've been programming for over 4 hours. Break time. OK, back to work. Comment support complete, I've also added altitude output support for gpspoint. Switched various button order around in dialog.c to comply with HIG Track undo support. Double-click to end, right click to undo. Crazy day, huh? 2003-6-25 Support for reading map and trackwaypoint layers. Also support for trackwaypoint data (in GPSPoint format) Whew! Write support is complete! Man, that's a lot of work. Now I just gotta iron out any wrinkles (such as getting rid of old file format support) 2003-6-24 Half hour's worth of coding has made copying and pasting TrackWaypoint layers a reality. Started working on FF2. TODO: implement individual layer getters/setters functions, write support I've done an incredible amount of work today. Mission: By the weekend I must have FF2 support out the door. 2003-6-23 Created Viking 0.0.5 branch. Started work on copy & paste layers. With just two hours or so worth of code, you can now cut, copy and paste coord and map layers and aggregate layers made up of these. You can even copy and paste between windows. Next up -- trackwaypoint layers, then we're off to copying items. Onward -- 0.0.5! --- viking 0.0.4 --- 2003-6-23 Viking 0.0.4 "Lame Duck Release" Alright, I haven't been doing anything for the last two days. Guess I'll just release what I have... 2003-6-20 Added GpsMapper export support to make it easy to make Garmin maps. Made it so you can now rename tracks. Implemented map fade into white (alpha)! This should help distinguish tracks while still seeing maps. 2003-6-19 Fixed a map caching problem that occurs when you lower the size of the memory cache (it won't really be lowered). Started experimenting with map semi-transparency. It's pretty cool. 2003-6-18 HIG document compliance (Open, New, Close, modified flag, etc.) I probably won't be making a "Exit" menu item, because that is the dumbest and most confusing aspect of the HIG. Tearoff item for tools. Made a_file_basename and replaced all places where I previously just copied and pasted the code. Fixed _another_ "forgot to initialize" bug (layer.realized) Simplified interface by having one Open menu item for opening any type of file and an Append menu item to do the same In doing this, "./viking my.vik my2.vik my.gps my2.gps" etc. now works (concatenates into an unamed file.) Removed "Properties" from Aggregate Layer popup, and added info message when running "Properties" from the Layers menu on an Aggregate Provided a info message that tells the user the Top Layer cannot be deleted. 2003-6-17: Added error message for failed writes, fixed various bugs such as not free()ing any of the layers on exit (!) Also fixed some crashes such as when you try to export a trw layer and you can't write to it. Fixed button order in model dialogs to comply with GNOME HIG. Added a "Delete All Layers" item from the menu. Change menu names a little bit. Added "Save" support (current filename) Started thinking about HIG compliance in the way of documents. Will probably get rid of delete all layers and add new, open (in new window) 2003-6-16: Added VikTrwLayer serialization support, added "open" and "save" dialog boxes. Added error messages for failed reads, etc. 2003-6-15: More serialization work. The basics are now working, I have to add VikTrwlayer, maybe add some things in to make it less vulnerable to crashes and really big mallocs(), and maintain compatibility between versions. 2003-6-14: Got some more sample data for Viking via motorcycle riding ;) 2003-6-13: Fixed serious glitch that crashes on creating a new track. Fixed viking crash that happens when a new track is being created, then deleted. Designed file format & started on serialization of layers. Moved Layer Icon loading stuff to VikTreeview, as poor designed as it sounds, to get ready for Serialization code. 2003-6-12: Viking 0.0.3, first public release viking-1.4.2/viking.spec0000644000175000017500000000430612175546637012114 00000000000000#%% Fedora style spec file written by Michael A. Peters #%% It is released under Public Domain #%% May be redistributed without this notice. Name: viking Version: 1.4.2 Release: 1 Summary: GPS data editor and analyzer Group: Applications/Productivity License: GPLv2 URL: http://sourceforge.net/projects/viking/ Source0: %{name}-%{version}.tar.gz BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRequires: curl-devel BuildRequires: expat-devel BuildRequires: gtk2-devel >= 2.2.0 BuildRequires: pkgconfig BuildRequires: gpsd-devel BuildRequires: gettext perl(XML::Parser) BuildRequires: intltool BuildRequires: libxslt BuildRequires: libexif-devel %description Viking is a free/open source program to manage GPS data. You can import, plot and create tracks and waypoints, show OSM, Terraserver and other maps, see real-time GPS position, get geocaches, control items, etc. It is written in C with the GTK+2 toolkit. %prep %setup -q %build %configure make %install rm -rf %{buildroot} make DESTDIR=%{buildroot} install %find_lang %{name} rm -f doc/Makefile* rm -f doc/dev/Makefile* %check make test %clean rm -rf %{buildroot} %files -f %{name}.lang %defattr(-,root,root,-) %doc AUTHORS ChangeLog COPYING NEWS README TODO doc/ %{_bindir}/viking %{_bindir}/viking-remote %{_datadir}/applications/viking.desktop %{_datadir}/icons/hicolor/48x48/apps/viking.png %changelog * Thu Feb 21 2008 Michael A. Peters - 0.9.3.20080220-1 - change License field from GPL to GPLv2 - BR gpsd-devel - BR gettext perl(XML::Parser) - needed for intltool - use find_land macro to package mo files * Sun Sep 4 2007 Guilhem Bonnefille - 0.9.2-1 - Update to upstream version 0.9.2. * Sun Sep 2 2007 Guilhem Bonnefille - 0.9.1-1 - Update to upstream version 0.9.1. * Fri Jul 13 2007 Guilhem Bonnefille - 0.9-1 - Update to upstream version 0.9. * Thu May 18 2007 Quy Tonthat - Added curl-devel to BuildRequires list. * Thu May 15 2007 Guilhem Bonnefille - 0.1.3-1 - Update to upstream version 0.1.3. * Wed Feb 14 2007 Michael A. Peters - 0.1.2-1 - Initial Fedora style spec file. viking-1.4.2/viking.spec.in0000644000175000017500000000431212122673673012507 00000000000000#%% Fedora style spec file written by Michael A. Peters #%% It is released under Public Domain #%% May be redistributed without this notice. Name: viking Version: @VERSION@ Release: 1 Summary: GPS data editor and analyzer Group: Applications/Productivity License: GPLv2 URL: http://sourceforge.net/projects/viking/ Source0: %{name}-%{version}.tar.gz BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRequires: curl-devel BuildRequires: expat-devel BuildRequires: gtk2-devel >= 2.2.0 BuildRequires: pkgconfig BuildRequires: gpsd-devel BuildRequires: gettext perl(XML::Parser) BuildRequires: intltool BuildRequires: libxslt BuildRequires: libexif-devel %description Viking is a free/open source program to manage GPS data. You can import, plot and create tracks and waypoints, show OSM, Terraserver and other maps, see real-time GPS position, get geocaches, control items, etc. It is written in C with the GTK+2 toolkit. %prep %setup -q %build %configure make %install rm -rf %{buildroot} make DESTDIR=%{buildroot} install %find_lang %{name} rm -f doc/Makefile* rm -f doc/dev/Makefile* %check make test %clean rm -rf %{buildroot} %files -f %{name}.lang %defattr(-,root,root,-) %doc AUTHORS ChangeLog COPYING NEWS README TODO doc/ %{_bindir}/viking %{_bindir}/viking-remote %{_datadir}/applications/viking.desktop %{_datadir}/icons/hicolor/48x48/apps/viking.png %changelog * Thu Feb 21 2008 Michael A. Peters - 0.9.3.20080220-1 - change License field from GPL to GPLv2 - BR gpsd-devel - BR gettext perl(XML::Parser) - needed for intltool - use find_land macro to package mo files * Sun Sep 4 2007 Guilhem Bonnefille - 0.9.2-1 - Update to upstream version 0.9.2. * Sun Sep 2 2007 Guilhem Bonnefille - 0.9.1-1 - Update to upstream version 0.9.1. * Fri Jul 13 2007 Guilhem Bonnefille - 0.9-1 - Update to upstream version 0.9. * Thu May 18 2007 Quy Tonthat - Added curl-devel to BuildRequires list. * Thu May 15 2007 Guilhem Bonnefille - 0.1.3-1 - Update to upstream version 0.1.3. * Wed Feb 14 2007 Michael A. Peters - 0.1.2-1 - Initial Fedora style spec file. viking-1.4.2/configure.ac0000644000175000017500000003477712175546567012260 00000000000000# -*- Autoconf -*- # Process this file with autoconf to produce a configure script. AC_PREREQ(2.59) AC_INIT(viking, 1.4.2) AM_INIT_AUTOMAKE([dist-bzip2 dist-zip]) dnl AC_CONFIG_SRCDIR([src/main.c]) AC_CONFIG_HEADERS([src/config.h]) GTK_DOC_CHECK(1.0) # Checks for programs. AC_PROG_CC AC_PROG_MAKE_SET AC_PROG_RANLIB AC_PATH_PROG(GLIB_MKENUMS, glib-mkenums) # I18N GETTEXT_PACKAGE=viking AC_SUBST(GETTEXT_PACKAGE) AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE",[Gettext package name]) AM_GLIB_DEFINE_LOCALEDIR(LOCALEDIR) AM_GLIB_GNU_GETTEXT IT_PROG_INTLTOOL([0.35.0]) AC_SUBST([CONFIG_STATUS_DEPENDENCIES],['$(top_srcdir)/po/LINGUAS']) dnl This will cause the automake generated makefiles to pass the dnl correct flags to aclocal. ACLOCAL_AMFLAGS="\${ACLOCAL_FLAGS}" AC_SUBST(ACLOCAL_AMFLAGS) # Checks for header files. AC_HEADER_STDC AC_CHECK_HEADERS([malloc.h stdlib.h string.h sys/param.h sys/types.h unistd.h math.h utime.h X11/Xlib.h]) # Checks for typedefs, structures, and compiler characteristics. AC_C_CONST AC_TYPE_MODE_T # Checks for library functions or symbols AC_FUNC_STAT AC_FUNC_STRTOD AC_CHECK_FUNCS([floor memset mkdtemp pow realpath sqrt strcasecmp strchr strdup strncasecmp strtol strtoul]) AC_CHECK_LIB(m, tan) AC_CHECK_LIB(z, inflate) AC_CHECK_LIB(X11, XSetErrorHandler) # Expat AM_WITH_EXPAT # Curl LIBCURL_CHECK_CONFIG([yes],[],[],[AC_MSG_ERROR([libcurl is needed but not found])]) # gdk-pixbuf-csource AC_CHECK_PROG([GDK_PIXBUF_CSOURCE],gdk-pixbuf-csource,[yes]) if test "x$GDK_PIXBUF_CSOURCE" != "xyes" then AC_MSG_ERROR([gdk-pixbuf-csource is needed but not found]) fi dnl ------------------ dnl | Pkgconfig checks |--------------------------------------- dnl ------------------ PKG_CHECK_MODULES(PACKAGE, [ glib-2.0 >= 2.14 gthread-2.0 >= 2.2 gtk+-2.0 >= 2.12 gio-2.0 >= 2.12 ]) AC_SUBST(PACKAGE_CFLAGS) AC_SUBST(PACKAGE_LIBS) dnl ------------- dnl | User Manual |--------------------------------------- dnl ------------- GNOME_DOC_INIT dnl --------------------------------------------------------------------------- dnl - Use deprecated options (default enabled for devs, disabled in releases) dnl --------------------------------------------------------------------------- AC_ARG_ENABLE(deprecations, [AC_HELP_STRING([--enable-deprecations], [warn about deprecated usages [default=no]])], [ac_cv_enable_deprecations=$enableval], [ac_cv_enable_deprecations=no]) AC_CACHE_CHECK([whether to enable deprecated features], [ac_cv_enable_deprecations], [ac_cv_enable_deprecations=no]) if test "x$ac_cv_enable_deprecations" = "xyes"; then DISABLE_DEPRECATED_CFLAGS="\ -DG_DISABLE_SINGLE_INCLUDES \ -DGSEAL_ENABLE \ -DG_DISABLE_DEPRECATED \ -DGDK_DISABLE_DEPRECATED \ -DGDK_PIXBUF_DISABLE_DEPRECATED \ -DGTK_DISABLE_SINGLE_INCLUDES \ -DGTK_DISABLE_DEPRECATED" CPPFLAGS="$CPPFLAGS $DISABLE_DEPRECATED_CFLAGS" fi # Options AC_ARG_ENABLE(alphabetized-trw, AC_HELP_STRING([--enable-alphabetized-trw], [enable alphabetized track & waypoints (default is enable)]), [ac_cv_enable_alpha_trw=$enableval], [ac_cv_enable_alpha_trw=yes]) AC_CACHE_CHECK([whether to enable alphabetized track & waypoint], [ac_cv_enable_alpha_trw], [ac_cv_enable_alpha_trw=yes]) case $ac_cv_enable_alpha_trw in yes) AC_DEFINE(VIK_CONFIG_ALPHABETIZED_TRW, [], [NO ALPHABETIZED TRW]) ;; esac AC_ARG_ENABLE(bing, AC_HELP_STRING([--enable-bing], [enable Bing stuff (default is enable)]), [ac_cv_enable_bing=$enableval], [ac_cv_enable_bing=yes]) AC_CACHE_CHECK([whether to enable Bing stuff], [ac_cv_enable_bing], [ac_cv_enable_bing=yes]) case $ac_cv_enable_bing in yes) AC_DEFINE(VIK_CONFIG_BING, [], [BING STUFF]) ;; esac AM_CONDITIONAL([BING], [test x$ac_cv_enable_bing = xyes]) AC_ARG_ENABLE(google, AC_HELP_STRING([--enable-google], [enable Google stuff (default is enable)]), [ac_cv_enable_google=$enableval], [ac_cv_enable_google=yes]) AC_CACHE_CHECK([whether to enable Google stuff], [ac_cv_enable_google], [ac_cv_enable_google=yes]) case $ac_cv_enable_google in yes) AC_DEFINE(VIK_CONFIG_GOOGLE, [], [GOOGLE STUFF]) ;; esac AM_CONDITIONAL([GOOGLE], [test x$ac_cv_enable_google = xyes]) AC_ARG_ENABLE(terraserver, AC_HELP_STRING([--enable-terraserver], [enable Terraserver stuff (default is enable)]), [ac_cv_enable_terraserver=$enableval], [ac_cv_enable_terraserver=yes]) AC_CACHE_CHECK([whether to enable Terraserver stuff], [ac_cv_enable_terraserver], [ac_cv_enable_terraserver=yes]) case $ac_cv_enable_terraserver in yes) AC_DEFINE(VIK_CONFIG_TERRASERVER, [], [TERRASERVER STUFF]) ;; esac AM_CONDITIONAL([TERRASERVER], [test x$ac_cv_enable_terraserver = xyes]) AC_ARG_ENABLE(expedia, AC_HELP_STRING([--enable-expedia], [enable Expedia stuff (default is disable)]), [ac_cv_enable_expedia=$enableval], [ac_cv_enable_expedia=no]) AC_CACHE_CHECK([whether to enable Expedia stuff], [ac_cv_enable_expedia], [ac_cv_enable_expedia=yes]) case $ac_cv_enable_expedia in yes) AC_DEFINE(VIK_CONFIG_EXPEDIA, [], [EXPEDIA STUFF]) ;; esac AM_CONDITIONAL([EXPEDIA], [test x$ac_cv_enable_expedia = xyes]) # OpenStreetMap http://www.openstreetmap.org/ AC_ARG_ENABLE(openstreetmap, AC_HELP_STRING([--enable-openstreetmap], [enable OpenStreetMap stuff (default is enable)]), [ac_cv_enable_openstreetmap=$enableval], [ac_cv_enable_openstreetmap=yes]) AC_CACHE_CHECK([whether to enable OpenStreetMap stuff], [ac_cv_enable_openstreetmap], [ac_cv_enable_openstreetmap=yes]) case $ac_cv_enable_openstreetmap in yes) AC_DEFINE(VIK_CONFIG_OPENSTREETMAP, [], [OPENSTREETMAP STUFF]) ;; esac AM_CONDITIONAL([OPENSTREETMAP], [test x$ac_cv_enable_openstreetmap = xyes]) # BlueMarble AC_ARG_ENABLE(bluemarble, AC_HELP_STRING([--enable-bluemarble], [enable BlueMarble stuff (default is enable)]), [ac_cv_enable_bluemarble=$enableval], [ac_cv_enable_bluemarble=yes]) AC_CACHE_CHECK([whether to enable BlueMarble stuff], [ac_cv_enable_bluemarble], [ac_cv_enable_bluemarble=yes]) case $ac_cv_enable_bluemarble in yes) AC_DEFINE(VIK_CONFIG_BLUEMARBLE, [], [BLUEMARBLE STUFF]) ;; esac AM_CONDITIONAL([BLUEMARBLE], [test x$ac_cv_enable_bluemarble = xyes]) # GeoNames http://www.geonames.org/ AC_ARG_ENABLE(geonames, AC_HELP_STRING([--enable-geonames], [enable Geonames stuff (default is enable)]), [ac_cv_enable_geonames=$enableval], [ac_cv_enable_geonames=yes]) AC_CACHE_CHECK([whether to enable Geonames stuff], [ac_cv_enable_geonames], [ac_cv_enable_geonames=yes]) case $ac_cv_enable_geonames in yes) AC_DEFINE(VIK_CONFIG_GEONAMES, [], [GEONAMES STUFF]) ;; esac AM_CONDITIONAL([GEONAMES], [test x$ac_cv_enable_geonames = xyes]) AC_ARG_ENABLE(geocaches, AC_HELP_STRING([--enable-geocaches], [enable Geocaches Acquire (default is disable).]), [ac_cv_enable_geocaches=$enableval], [ac_cv_enable_geocaches=no]) AC_CACHE_CHECK([whether to enable Geocaches Acquire], [ac_cv_enable_geocaches], [ac_cv_enable_geocaches=yes]) case $ac_cv_enable_geocaches in yes) AC_DEFINE(VIK_CONFIG_GEOCACHES, [], [GEOCACHES STUFF]) ;; esac AM_CONDITIONAL([GEOCACHES], [test x$ac_cv_enable_geocaches = xyes]) AC_ARG_ENABLE(geotag, AC_HELP_STRING([--enable-geotag], [enable Geotag Support (default is enable).]), [ac_cv_enable_geotag=$enableval], [ac_cv_enable_geotag=yes]) AC_CACHE_CHECK([whether to enable Geotag Support], [ac_cv_enable_geotag], [ac_cv_enable_geotag=yes]) case $ac_cv_enable_geotag in yes) AC_CHECK_LIB(exif,exif_loader_new,,AC_MSG_ERROR([libexif is needed for Geotag features[,] but is not found. The feature can be disabled with --disable-geotag])) AC_DEFINE(VIK_CONFIG_GEOTAG, [], [GEOTAG STUFF]) ;; esac AM_CONDITIONAL([GEOTAG], [test x$ac_cv_enable_geotag = xyes]) AC_ARG_ENABLE(spotmaps, AC_HELP_STRING([--enable-spotmaps], [enable SPOTMaps map (default is enable).]), [ac_cv_enable_spotmaps=$enableval], [ac_cv_enable_spotmaps=yes]) AC_CACHE_CHECK([whether to enable SPOTMaps map], [ac_cv_enable_spotmaps], [ac_cv_enable_spotmaps=yes]) case $ac_cv_enable_spotmaps in yes) AC_DEFINE(VIK_CONFIG_SPOTMAPS, [], [SPOTMAPS STUFF]) ;; esac AM_CONDITIONAL([SPOTMAPS], [test x$ac_cv_enable_spotmaps = xyes]) AC_ARG_ENABLE(dem24k, AC_HELP_STRING([--enable-dem24k], [enable USGS 24k DEM (default is disable) download source. Requires dem24k.pl script in path.]), [ac_cv_enable_dem24k=$enableval], [ac_cv_enable_dem24k=no]) AC_CACHE_CHECK([whether to enable USGS DEM 24k download source], [ac_cv_enable_dem24k], [ac_cv_enable_dem24k=yes]) case $ac_cv_enable_dem24k in yes) AC_DEFINE(VIK_CONFIG_DEM24K, [], [DEM24K STUFF]) ;; esac AM_CONDITIONAL([DEM24K], [test x$ac_cv_enable_dem24k = xyes]) # Realtime GPS tracking AC_ARG_ENABLE(realtime-gps-tracking, AC_HELP_STRING([--enable-realtime-gps-tracking], [enable realtime GPS tracking (default is enable)]), [ac_cv_enable_realtimegpstracking=$enableval], [ac_cv_enable_realtimegpstracking=yes]) AC_CACHE_CHECK([whether to enable Realtime GPS Tracking stuff], [ac_cv_enable_realtimegpstracking], [ac_cv_enable_realtimegpstracking=yes]) case $ac_cv_enable_realtimegpstracking in yes) AC_CHECK_LIB(gps,gps_close,,AC_MSG_ERROR([libgps is needed for Realtime GPS Tracking feature[,] but not found. The feature can be disable with --disable-realtime-gps-tracking])) AC_DEFINE(VIK_CONFIG_REALTIME_GPS_TRACKING, [], [REALTIME GPS TRACKING STUFF]) ;; esac AM_CONDITIONAL([REALTIME_GPS_TRACKING], [test x$ac_cv_enable_realtimegpstracking = xyes]) AC_ARG_WITH(search, [AC_HELP_STRING([--with-search], [specify google or geonames for searching (default is google)])], [case "x$withval" in "xgoogle") VIK_CONFIG_SEARCH=VIK_CONFIG_SEARCH_GOOGLE ;; "xgeonames") VIK_CONFIG_SEARCH=VIK_CONFIG_SEARCH_GEONAMES ;; *) AC_MSG_ERROR([Please, set a value for search method]) esac], [VIK_CONFIG_SEARCH=VIK_CONFIG_SEARCH_GOOGLE]) AC_DEFINE_UNQUOTED(VIK_CONFIG_SEARCH_GOOGLE, 1, [Id. for searching via GOOGLE]) AC_DEFINE_UNQUOTED(VIK_CONFIG_SEARCH_GEONAMES, 2, [Id. for searching via GEONAMES]) AC_DEFINE_UNQUOTED(VIK_CONFIG_SEARCH, ${VIK_CONFIG_SEARCH}, [Method for the search]) AC_ARG_WITH(mapcache, [AC_HELP_STRING([--with-mapcache], [specify the size of the map cache in MB (default is 128)])], [if test "x$withval" = "xno"; then VIK_CONFIG_MAPCACHE_SIZE=0; elif test "x$withval" = "xyes"; then AC_MSG_ERROR([Please, set a value for size of the map cache in MB]) else VIK_CONFIG_MAPCACHE_SIZE=${withval} fi], [VIK_CONFIG_MAPCACHE_SIZE=128]) AC_DEFINE_UNQUOTED(VIK_CONFIG_MAPCACHE_SIZE, ${VIK_CONFIG_MAPCACHE_SIZE}, [Size of the map cache]) AC_ARG_WITH(tileage, [AC_HELP_STRING([--with-tileage], [specify the age of a tile before checking it (default is 7 days)])], [if test "x$withval" = "xno"; then VIK_CONFIG_DEFAULT_TILE_AGE=0; elif test "x$withval" = "xyes"; then AC_MSG_ERROR([Please, set a value for age of tiles]) else VIK_CONFIG_DEFAULT_TILE_AGE=${withval} fi], [VIK_CONFIG_DEFAULT_TILE_AGE=604800]) AC_DEFINE_UNQUOTED(VIK_CONFIG_DEFAULT_TILE_AGE, ${VIK_CONFIG_DEFAULT_TILE_AGE}, [Age of tiles before checking it (in seconds)]) dnl man pages processing DB2MAN_XSL=/usr/share/sgml/docbook/stylesheet/xsl/nwalsh/manpages/docbook.xsl AC_SUBST(DB2MAN_XSL) AC_PATH_PROG(XP,xsltproc) AM_CONDITIONAL([HAVE_XSLTPROC],[test "x$XP" != "x"]) AM_CONDITIONAL([GEN_MANPAGES],[test "x$XP" != "x" && test -r "$DB2MAN_XSL"]) dnl This will cause the automake generated makefiles to pass the dnl correct flags to aclocal. ACLOCAL_AMFLAGS="\${ACLOCAL_FLAGS}" AC_SUBST(ACLOCAL_AMFLAGS) AM_CONDITIONAL([VIKING_DOC], test x${enable_gtk_doc} = xyes) # Configuration AC_CONFIG_FILES([ Makefile src/Makefile src/icons/Makefile po/Makefile.in data/Makefile test/Makefile help/Makefile win32/Makefile win32/installer/Makefile win32/installer/pixmaps/Makefile win32/installer/translations/Makefile]) AM_COND_IF([VIKING_DOC], [AC_CONFIG_FILES([ doc/Makefile doc/reference/Makefile doc/examples/Makefile])]) AC_OUTPUT([ viking.spec ]) dnl Output the configuration summary echo "" echo "===========================================" echo "$PACKAGE $VERSION" echo "-------------------------------------------" echo "Alphabetized track & waypoints : $ac_cv_enable_alpha_trw" echo "Bing Maps : $ac_cv_enable_bing" echo "Google : $ac_cv_enable_google" echo "Terraserver Maps : $ac_cv_enable_terraserver" echo "Expedia Maps : $ac_cv_enable_expedia" echo "Open Street Map : $ac_cv_enable_openstreetmap" echo "BlueMarble : $ac_cv_enable_bluemarble" echo "SPOTMaps : $ac_cv_enable_spotmaps" echo "Geonames : $ac_cv_enable_geonames" echo "Geocaches Acquire : $ac_cv_enable_geocaches" echo "Geotag Support : $ac_cv_enable_geotag" echo "USGS 24k DEM : $ac_cv_enable_dem24k" echo "Realtime GPS Tracking : $ac_cv_enable_realtimegpstracking" echo "Size of map cache (in memory) : ${VIK_CONFIG_MAPCACHE_SIZE}" echo "Age of tiles (in seconds) : ${VIK_CONFIG_DEFAULT_TILE_AGE}" echo "Documentation (+HTML) : ${enable_gtk_doc} (HTML: ${enable_gtk_doc_html})" echo "-------------------------------------------" echo "" echo "Configure finished, type 'make' to build." viking-1.4.2/m4/0000755000175000017500000000000012175546627010345 500000000000000viking-1.4.2/m4/expat.m40000644000175000017500000000271611166174146011646 00000000000000dnl Expat macro retrived on the Expat CVS dnl Check if --with-expat[=PREFIX] is specified and dnl Expat >= 1.95.0 is installed in the system. dnl If yes, substitute EXPAT_CFLAGS, EXPAT_LIBS with regard to dnl the specified PREFIX and set with_expat to PREFIX, or 'yes' if PREFIX dnl has not been specified. Also HAVE_LIBEXPAT, HAVE_EXPAT_H are defined. dnl If --with-expat has not been specified, set with_expat to 'no'. dnl In addition, an Automake conditional EXPAT_INSTALLED is set accordingly. dnl This is necessary to adapt a whole lot of packages that have expat dnl bundled as a static library. AC_DEFUN([AM_WITH_EXPAT], [ AC_ARG_WITH(expat, [ --with-expat=PREFIX Use system Expat library], , with_expat=yes) AM_CONDITIONAL(EXPAT_INSTALLED, test $with_expat != no) EXPAT_CFLAGS= EXPAT_LIBS= if test $with_expat != no; then if test $with_expat != yes; then EXPAT_CFLAGS="-I$with_expat/include" EXPAT_LIBS="-L$with_expat/lib" fi AC_CHECK_LIB(expat, XML_ParserCreate, [ EXPAT_LIBS="$EXPAT_LIBS -lexpat" expat_found=yes ], [ expat_found=no ], "$EXPAT_LIBS") if test $expat_found = no; then AC_MSG_ERROR([Could not find the Expat library]) fi expat_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $EXPAT_CFLAGS" AC_CHECK_HEADERS(expat.h, , expat_found=no) if test $expat_found = no; then AC_MSG_ERROR([Could not find expat.h]) fi CFLAGS="$expat_save_CFLAGS" fi AC_SUBST(EXPAT_CFLAGS) AC_SUBST(EXPAT_LIBS) ]) viking-1.4.2/m4/libcurl.m40000644000175000017500000002171312122673673012161 00000000000000# LIBCURL_CHECK_CONFIG ([DEFAULT-ACTION], [MINIMUM-VERSION], # [ACTION-IF-YES], [ACTION-IF-NO]) # ---------------------------------------------------------- # David Shaw May-09-2006 # # Checks for libcurl. DEFAULT-ACTION is the string yes or no to # specify whether to default to --with-libcurl or --without-libcurl. # If not supplied, DEFAULT-ACTION is yes. MINIMUM-VERSION is the # minimum version of libcurl to accept. Pass the version as a regular # version number like 7.10.1. If not supplied, any version is # accepted. ACTION-IF-YES is a list of shell commands to run if # libcurl was successfully found and passed the various tests. # ACTION-IF-NO is a list of shell commands that are run otherwise. # Note that using --without-libcurl does run ACTION-IF-NO. # # This macro #defines HAVE_LIBCURL if a working libcurl setup is # found, and sets @LIBCURL@ and @LIBCURL_CPPFLAGS@ to the necessary # values. Other useful defines are LIBCURL_FEATURE_xxx where xxx are # the various features supported by libcurl, and LIBCURL_PROTOCOL_yyy # where yyy are the various protocols supported by libcurl. Both xxx # and yyy are capitalized. See the list of AH_TEMPLATEs at the top of # the macro for the complete list of possible defines. Shell # variables $libcurl_feature_xxx and $libcurl_protocol_yyy are also # defined to 'yes' for those features and protocols that were found. # Note that xxx and yyy keep the same capitalization as in the # curl-config list (e.g. it's "HTTP" and not "http"). # # Users may override the detected values by doing something like: # LIBCURL="-lcurl" LIBCURL_CPPFLAGS="-I/usr/myinclude" ./configure # # For the sake of sanity, this macro assumes that any libcurl that is # found is after version 7.7.2, the first version that included the # curl-config script. Note that it is very important for people # packaging binary versions of libcurl to include this script! # Without curl-config, we can only guess what protocols are available, # or use curl_version_info to figure it out at runtime. AC_DEFUN([LIBCURL_CHECK_CONFIG], [ AH_TEMPLATE([LIBCURL_FEATURE_SSL],[Defined if libcurl supports SSL]) AH_TEMPLATE([LIBCURL_FEATURE_KRB4],[Defined if libcurl supports KRB4]) AH_TEMPLATE([LIBCURL_FEATURE_IPV6],[Defined if libcurl supports IPv6]) AH_TEMPLATE([LIBCURL_FEATURE_LIBZ],[Defined if libcurl supports libz]) AH_TEMPLATE([LIBCURL_FEATURE_ASYNCHDNS],[Defined if libcurl supports AsynchDNS]) AH_TEMPLATE([LIBCURL_FEATURE_IDN],[Defined if libcurl supports IDN]) AH_TEMPLATE([LIBCURL_FEATURE_SSPI],[Defined if libcurl supports SSPI]) AH_TEMPLATE([LIBCURL_FEATURE_NTLM],[Defined if libcurl supports NTLM]) AH_TEMPLATE([LIBCURL_PROTOCOL_HTTP],[Defined if libcurl supports HTTP]) AH_TEMPLATE([LIBCURL_PROTOCOL_HTTPS],[Defined if libcurl supports HTTPS]) AH_TEMPLATE([LIBCURL_PROTOCOL_FTP],[Defined if libcurl supports FTP]) AH_TEMPLATE([LIBCURL_PROTOCOL_FTPS],[Defined if libcurl supports FTPS]) AH_TEMPLATE([LIBCURL_PROTOCOL_FILE],[Defined if libcurl supports FILE]) AH_TEMPLATE([LIBCURL_PROTOCOL_TELNET],[Defined if libcurl supports TELNET]) AH_TEMPLATE([LIBCURL_PROTOCOL_LDAP],[Defined if libcurl supports LDAP]) AH_TEMPLATE([LIBCURL_PROTOCOL_DICT],[Defined if libcurl supports DICT]) AH_TEMPLATE([LIBCURL_PROTOCOL_TFTP],[Defined if libcurl supports TFTP]) AC_ARG_WITH(libcurl, AC_HELP_STRING([--with-libcurl=DIR],[look for the curl library in DIR]), [_libcurl_with=$withval],[_libcurl_with=ifelse([$1],,[yes],[$1])]) if test "$_libcurl_with" != "no" ; then AC_PROG_AWK _libcurl_version_parse="eval $AWK '{split(\$NF,A,\".\"); X=256*256*A[[1]]+256*A[[2]]+A[[3]]; print X;}'" _libcurl_try_link=yes if test -d "$_libcurl_with" ; then LIBCURL_CPPFLAGS="-I$withval/include" _libcurl_ldflags="-L$withval/lib" AC_PATH_PROG([_libcurl_config],["$withval/bin/curl-config"]) else AC_PATH_PROG([_libcurl_config],[curl-config]) fi if test x$_libcurl_config != "x" ; then AC_CACHE_CHECK([for the version of libcurl], [libcurl_cv_lib_curl_version], [libcurl_cv_lib_curl_version=`$_libcurl_config --version | $AWK '{print $[]2}'`]) _libcurl_version=`echo $libcurl_cv_lib_curl_version | $_libcurl_version_parse` _libcurl_wanted=`echo ifelse([$2],,[0],[$2]) | $_libcurl_version_parse` if test $_libcurl_wanted -gt 0 ; then AC_CACHE_CHECK([for libcurl >= version $2], [libcurl_cv_lib_version_ok], [ if test $_libcurl_version -ge $_libcurl_wanted ; then libcurl_cv_lib_version_ok=yes else libcurl_cv_lib_version_ok=no fi ]) fi if test $_libcurl_wanted -eq 0 || test x$libcurl_cv_lib_version_ok = xyes ; then if test x"$LIBCURL_CPPFLAGS" = "x" ; then LIBCURL_CPPFLAGS=`$_libcurl_config --cflags` fi if test x"$LIBCURL" = "x" ; then LIBCURL=`$_libcurl_config --libs` # This is so silly, but Apple actually has a bug in their # curl-config script. Fixed in Tiger, but there are still # lots of Panther installs around. case "${host}" in powerpc-apple-darwin7*) LIBCURL=`echo $LIBCURL | sed -e 's|-arch i386||g'` ;; esac fi # All curl-config scripts support --feature _libcurl_features=`$_libcurl_config --feature` # Is it modern enough to have --protocols? (7.12.4) if test $_libcurl_version -ge 461828 ; then _libcurl_protocols=`$_libcurl_config --protocols` fi else _libcurl_try_link=no fi unset _libcurl_wanted fi if test $_libcurl_try_link = yes ; then # we didn't find curl-config, so let's see if the user-supplied # link line (or failing that, "-lcurl") is enough. LIBCURL=${LIBCURL-"$_libcurl_ldflags -lcurl"} AC_CACHE_CHECK([whether libcurl is usable], [libcurl_cv_lib_curl_usable], [ _libcurl_save_cppflags=$CPPFLAGS CPPFLAGS="$LIBCURL_CPPFLAGS $CPPFLAGS" _libcurl_save_libs=$LIBS LIBS="$LIBCURL $LIBS" AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]],[[ /* Try and use a few common options to force a failure if we are missing symbols or can't link. */ int x; curl_easy_setopt(NULL,CURLOPT_URL,NULL); x=CURL_ERROR_SIZE; x=CURLOPT_WRITEFUNCTION; x=CURLOPT_FILE; x=CURLOPT_ERRORBUFFER; x=CURLOPT_STDERR; x=CURLOPT_VERBOSE; ]])],libcurl_cv_lib_curl_usable=yes,libcurl_cv_lib_curl_usable=no) CPPFLAGS=$_libcurl_save_cppflags LIBS=$_libcurl_save_libs unset _libcurl_save_cppflags unset _libcurl_save_libs ]) if test $libcurl_cv_lib_curl_usable = yes ; then # Does curl_free() exist in this version of libcurl? # If not, fake it with free() _libcurl_save_cppflags=$CPPFLAGS CPPFLAGS="$CPPFLAGS $LIBCURL_CPPFLAGS" _libcurl_save_libs=$LIBS LIBS="$LIBS $LIBCURL" AC_CHECK_FUNC(curl_free,, AC_DEFINE(curl_free,free, [Define curl_free() as free() if our version of curl lacks curl_free.])) CPPFLAGS=$_libcurl_save_cppflags LIBS=$_libcurl_save_libs unset _libcurl_save_cppflags unset _libcurl_save_libs AC_DEFINE(HAVE_LIBCURL,1, [Define to 1 if you have a functional curl library.]) AC_SUBST(LIBCURL_CPPFLAGS) AC_SUBST(LIBCURL) for _libcurl_feature in $_libcurl_features ; do AC_DEFINE_UNQUOTED(AS_TR_CPP(libcurl_feature_$_libcurl_feature),[1]) eval AS_TR_SH(libcurl_feature_$_libcurl_feature)=yes done if test "x$_libcurl_protocols" = "x" ; then # We don't have --protocols, so just assume that all # protocols are available _libcurl_protocols="HTTP FTP FILE TELNET LDAP DICT" if test x$libcurl_feature_SSL = xyes ; then _libcurl_protocols="$_libcurl_protocols HTTPS" # FTPS wasn't standards-compliant until version # 7.11.0 if test $_libcurl_version -ge 461568; then _libcurl_protocols="$_libcurl_protocols FTPS" fi fi fi for _libcurl_protocol in $_libcurl_protocols ; do AC_DEFINE_UNQUOTED(AS_TR_CPP(libcurl_protocol_$_libcurl_protocol),[1]) eval AS_TR_SH(libcurl_protocol_$_libcurl_protocol)=yes done else unset LIBCURL unset LIBCURL_CPPFLAGS fi fi unset _libcurl_try_link unset _libcurl_version_parse unset _libcurl_config unset _libcurl_feature unset _libcurl_features unset _libcurl_protocol unset _libcurl_protocols unset _libcurl_version unset _libcurl_ldflags fi if test x$_libcurl_with = xno || test x$libcurl_cv_lib_curl_usable != xyes ; then # This is the IF-NO path ifelse([$4],,:,[$4]) else # This is the IF-YES path ifelse([$3],,:,[$3]) fi unset _libcurl_with ])dnl viking-1.4.2/AUTHORS0000644000175000017500000000125211507650232010777 00000000000000Author: Evan Battaglia ** Concept and main design/coding Contributors: Alex Foobarian ** DND, icons, various other features/bugfixes Bernd Zeimetz ** Debian packaging Guilhem Bonnefille ** Autotools and releases Jocelyn Jaubert ** Track Properties dialog improves Mark Coulter ** Waypoint symbols Mathieu Albinet ** Windows port Quy Tonthat ** Many improves Robert Norris ** Many improves Few other bugfixes/minor patches from various contributors. See ChangeLog for details. viking-1.4.2/gnome-doc-utils.make0000644000175000017500000006120212170052156013573 00000000000000# gnome-doc-utils.make - make magic for building documentation # Copyright (C) 2004-2005 Shaun McCance # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software Foundation, # Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. ################################################################################ ## @@ Generating Header Files ## @ DOC_H_FILE ## The name of the header file to generate DOC_H_FILE ?= ## @ DOC_H_DOCS ## The input DocBook files for generating the header file DOC_H_DOCS ?= $(DOC_H_FILE): $(DOC_H_DOCS); @rm -f $@.tmp; touch $@.tmp; echo 'const gchar* documentation_credits[] = {' >> $@.tmp list='$(DOC_H_DOCS)'; for doc in $$list; do \ xmlpath="`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`:$(srcdir)/`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`"; \ if ! test -f "$$doc"; then doc="$(srcdir)/$$doc"; fi; \ xsltproc --path "$$xmlpath" $(_credits) $$doc; \ done | sort | uniq \ | awk 'BEGIN{s=""}{n=split($$0,w,"<");if(s!=""&&s!=substr(w[1],1,length(w[1])-1)){print s};if(n>1){print $$0;s=""}else{s=$$0}};END{if(s!=""){print s}}' \ | sed -e 's/\\/\\\\/' -e 's/"/\\"/' -e 's/\(.*\)/\t"\1",/' >> $@.tmp echo ' NULL' >> $@.tmp echo '};' >> $@.tmp echo >> $@.tmp list='$(DOC_H_DOCS)'; for doc in $$list; do \ xmlpath="`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`:$(srcdir)/`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`"; \ if ! test -f "$$doc"; then doc="$(srcdir)/$$doc"; fi; \ docid=`echo "$$doc" | sed -e 's/.*\/\([^/]*\)\.xml/\1/' \ | sed -e 's/[^a-zA-Z_]/_/g' | tr 'a-z' 'A-Z'`; \ echo $$xmlpath; \ ids=`xsltproc --xinclude --path "$$xmlpath" $(_ids) $$doc`; \ for id in $$ids; do \ echo '#define HELP_'`echo $$docid`'_'`echo $$id \ | sed -e 's/[^a-zA-Z_]/_/g' | tr 'a-z' 'A-Z'`' "'$$id'"' >> $@.tmp; \ done; \ echo >> $@.tmp; \ done; cp $@.tmp $@ && rm -f $@.tmp dist-check-gdu: if !HAVE_GNOME_DOC_UTILS @echo "*** GNOME Doc Utils must be installed in order to make dist" @false endif .PHONY: dist-doc-header dist-doc-header: $(DOC_H_FILE) @if test -f "$(DOC_H_FILE)"; then d=; else d="$(srcdir)/"; fi; \ echo "$(INSTALL_DATA) $${d}$(DOC_H_FILE) $(distdir)/$(DOC_H_FILE)"; \ $(INSTALL_DATA) "$${d}$(DOC_H_FILE)" "$(distdir)/$(DOC_H_FILE)"; doc-dist-hook: dist-check-gdu $(if $(DOC_H_FILE),dist-doc-header) .PHONY: clean-doc-header _clean_doc_header = $(if $(DOC_H_FILE),clean-doc-header) clean-local: $(_clean_doc_header) distclean-local: $(_clean_doc_header) mostlyclean-local: $(_clean_doc_header) maintainer-clean-local: $(_clean_doc_header) clean-doc-header: rm -f $(DOC_H_FILE) all: $(DOC_H_FILE) ################################################################################ ## @@ Generating Documentation Files ## @ DOC_MODULE ## The name of the document being built DOC_MODULE ?= ## @ DOC_ID ## The unique identifier for a Mallard document DOC_ID ?= ## @ DOC_PAGES ## Page files in a Mallard document DOC_PAGES ?= ## @ DOC_ENTITIES ## Files included with a SYSTEM entity DOC_ENTITIES ?= ## @ DOC_INCLUDES ## Files included with XInclude DOC_INCLUDES ?= ## @ DOC_FIGURES ## Figures and other external data DOC_FIGURES ?= ## @ DOC_FORMATS ## The default formats to be built and installed DOC_FORMATS ?= docbook _DOC_REAL_FORMATS = $(if $(DOC_USER_FORMATS),$(DOC_USER_FORMATS),$(DOC_FORMATS)) ## @ DOC_LINGUAS ## The languages this document is translated into DOC_LINGUAS ?= _DOC_REAL_LINGUAS = $(if $(filter environment,$(origin LINGUAS)), \ $(filter $(LINGUAS),$(DOC_LINGUAS)), \ $(DOC_LINGUAS)) _DOC_ABS_SRCDIR = @abs_srcdir@ ################################################################################ ## Variables for Bootstrapping _xml2po ?= `which xml2po` _xml2po_mode = $(if $(DOC_ID),mallard,docbook) _db2html ?= `$(PKG_CONFIG) --variable db2html gnome-doc-utils` _db2omf ?= `$(PKG_CONFIG) --variable db2omf gnome-doc-utils` _chunks ?= `$(PKG_CONFIG) --variable xmldir gnome-doc-utils`/gnome/xslt/docbook/utils/chunks.xsl _credits ?= `$(PKG_CONFIG) --variable xmldir gnome-doc-utils`/gnome/xslt/docbook/utils/credits.xsl _ids ?= $(shell $(PKG_CONFIG) --variable xmldir gnome-doc-utils)/gnome/xslt/docbook/utils/ids.xsl if ENABLE_SK _ENABLE_SK = true _skpkgdatadir ?= `scrollkeeper-config --pkgdatadir` _sklocalstatedir ?= `scrollkeeper-config --pkglocalstatedir` _skcontentslist ?= $(_skpkgdatadir)/Templates/C/scrollkeeper_cl.xml endif ################################################################################ ## Support for automake silent-rules GDU_V_XML2PO=$(GDU__v_XML2PO_$(V)) GDU__v_XML2PO_=$(GDU__v_XML2PO_$(AM_DEFAULT_VERBOSITY)) GDU__v_XML2PO_0=@echo " XML2PO" $@; GDU_V_MSGFMT=$(GDU__v_MSGFMT_$(V)) GDU__v_MSGFMT_=$(GDU__v_MSGFMT_$(AM_DEFAULT_VERBOSITY)) GDU__v_MSGFMT_0=@echo " MSGFMT" $@; GDU_V_DB2OMF=$(GDU__v_DB2OMF_$(V)) GDU__v_DB2OMF_=$(GDU__v_DB2OMF_$(AM_DEFAULT_VERBOSITY)) GDU__v_DB2OMF_0=@echo " DB2OMF" $@; GDU_V_DB2HTM=$(GDU__v_DB2HTM_$(V)) GDU__v_DB2HTM_=$(GDU__v_DB2HTM_$(AM_DEFAULT_VERBOSITY)) GDU__v_DB2HTM_0=@echo " DB2HTM" $@; ################################################################################ ## @@ Rules for OMF Files db2omf_args = \ --stringparam db2omf.basename $(DOC_MODULE) \ --stringparam db2omf.format $(3) \ --stringparam db2omf.dtd \ $(shell xmllint --format $(2) | grep -h PUBLIC | head -n 1 \ | sed -e 's/.*PUBLIC \(\"[^\"]*\"\).*/\1/') \ --stringparam db2omf.lang $(notdir $(patsubst %/$(notdir $(2)),%,$(2))) \ --stringparam db2omf.omf_dir "$(OMF_DIR)" \ --stringparam db2omf.help_dir "$(HELP_DIR)" \ --stringparam db2omf.omf_in "$(_DOC_OMF_IN)" \ $(if $(_ENABLE_SK), \ --stringparam db2omf.scrollkeeper_cl "$(_skcontentslist)") \ $(_db2omf) $(2) ## @ _DOC_OMF_IN ## The OMF input file _DOC_OMF_IN = $(if $(DOC_MODULE),$(wildcard $(_DOC_ABS_SRCDIR)/$(DOC_MODULE).omf.in)) ## @ _DOC_OMF_DB ## The OMF files for DocBook output _DOC_OMF_DB = $(if $(_DOC_OMF_IN), \ $(foreach lc,C $(_DOC_REAL_LINGUAS),$(DOC_MODULE)-$(lc).omf)) $(_DOC_OMF_DB) : $(_DOC_OMF_IN) $(_DOC_OMF_DB) : $(DOC_MODULE)-%.omf : %/$(DOC_MODULE).xml @test "x$(_ENABLE_SK)" != "xtrue" -o -f "$(_skcontentslist)" || { \ echo "The file '$(_skcontentslist)' does not exist." >&2; \ echo "Please check your ScrollKeeper installation." >&2; \ exit 1; } $(GDU_V_DB2OMF)xsltproc -o $@ $(call db2omf_args,$@,$<,'docbook') || { rm -f "$@"; exit 1; } ## @ _DOC_OMF_HTML ## The OMF files for HTML output _DOC_OMF_HTML = $(if $(_DOC_OMF_IN), \ $(foreach lc,C $(_DOC_REAL_LINGUAS),$(DOC_MODULE)-html-$(lc).omf)) $(_DOC_OMF_HTML) : $(_DOC_OMF_IN) $(_DOC_OMF_HTML) : $(DOC_MODULE)-html-%.omf : %/$(DOC_MODULE).xml if ENABLE_SK @test "x$(_ENABLE_SK)" != "xtrue" -o -f "$(_skcontentslist)" || { \ echo "The file '$(_skcontentslist)' does not exist" >&2; \ echo "Please check your ScrollKeeper installation." >&2; \ exit 1; } endif $(GDU_V_DB2OMF)xsltproc -o $@ $(call db2omf_args,$@,$<,'xhtml') || { rm -f "$@"; exit 1; } ## @ _DOC_OMF_ALL ## All OMF output files to be built # FIXME _DOC_OMF_ALL = \ $(if $(filter docbook,$(_DOC_REAL_FORMATS)),$(_DOC_OMF_DB)) \ $(if $(filter html HTML,$(_DOC_REAL_FORMATS)),$(_DOC_OMF_HTML)) .PHONY: omf omf: $(_DOC_OMF_ALL) ################################################################################ ## @@ C Locale Documents ## @ _DOC_C_MODULE ## The top-level documentation file in the C locale _DOC_C_MODULE = $(if $(DOC_MODULE),C/$(DOC_MODULE).xml) ## @ _DOC_C_PAGES ## Page files in a Mallard document in the C locale _DOC_C_PAGES = $(foreach page,$(DOC_PAGES),C/$(page)) ## @ _DOC_C_ENTITIES ## Files included with a SYSTEM entity in the C locale _DOC_C_ENTITIES = $(foreach ent,$(DOC_ENTITIES),C/$(ent)) ## @ _DOC_C_XINCLUDES ## Files included with XInclude in the C locale _DOC_C_INCLUDES = $(foreach inc,$(DOC_INCLUDES),C/$(inc)) ## @ _DOC_C_DOCS ## All documentation files in the C locale _DOC_C_DOCS = \ $(_DOC_C_ENTITIES) $(_DOC_C_INCLUDES) \ $(_DOC_C_PAGES) $(_DOC_C_MODULE) ## @ _DOC_C_DOCS_NOENT ## All documentation files in the C locale, ## except files included with a SYSTEM entity _DOC_C_DOCS_NOENT = \ $(_DOC_C_MODULE) $(_DOC_C_INCLUDES) \ $(_DOC_C_PAGES) ## @ _DOC_C_FIGURES ## All figures and other external data in the C locale _DOC_C_FIGURES = $(if $(DOC_FIGURES), \ $(foreach fig,$(DOC_FIGURES),C/$(fig)), \ $(patsubst $(srcdir)/%,%,$(wildcard $(srcdir)/C/figures/*.png))) ## @ _DOC_C_HTML ## All HTML documentation in the C locale # FIXME: probably have to shell escape to determine the file names _DOC_C_HTML = $(foreach f, \ $(shell xsltproc --xinclude \ --stringparam db.chunk.basename "$(DOC_MODULE)" \ $(_chunks) "C/$(DOC_MODULE).xml"), \ C/$(f).xhtml) ############################################################################### ## @@ Other Locale Documentation ## @ _DOC_POFILES ## The .po files used for translating the document _DOC_POFILES = $(if $(DOC_MODULE)$(DOC_ID), \ $(foreach lc,$(_DOC_REAL_LINGUAS),$(lc)/$(lc).po)) .PHONY: po po: $(_DOC_POFILES) ## @ _DOC_MOFILES ## The .mo files used for translating the document _DOC_MOFILES = $(patsubst %.po,%.mo,$(_DOC_POFILES)) .PHONY: mo mo: $(_DOC_MOFILES) ## @ _DOC_LC_MODULES ## The top-level documentation files in all other locales _DOC_LC_MODULES = $(if $(DOC_MODULE), \ $(foreach lc,$(_DOC_REAL_LINGUAS),$(lc)/$(DOC_MODULE).xml)) ## @ _DOC_LC_PAGES ## Page files in a Mallard document in all other locales _DOC_LC_PAGES = \ $(foreach lc,$(_DOC_REAL_LINGUAS),$(foreach page,$(_DOC_C_PAGES), \ $(lc)/$(notdir $(page)) )) ## @ _DOC_LC_XINCLUDES ## Files included with XInclude in all other locales _DOC_LC_INCLUDES = \ $(foreach lc,$(_DOC_REAL_LINGUAS),$(foreach inc,$(_DOC_C_INCLUDES), \ $(lc)/$(notdir $(inc)) )) ## @ _DOC_LC_HTML ## All HTML documentation in all other locales # FIXME: probably have to shell escape to determine the file names _DOC_LC_HTML = \ $(foreach lc,$(_DOC_REAL_LINGUAS),$(foreach doc,$(_DOC_C_HTML), \ $(lc)/$(notdir $(doc)) )) ## @ _DOC_LC_DOCS ## All documentation files in all other locales _DOC_LC_DOCS = \ $(_DOC_LC_MODULES) $(_DOC_LC_INCLUDES) $(_DOC_LC_PAGES) \ $(if $(filter html HTML,$(_DOC_REAL_FORMATS)),$(_DOC_LC_HTML)) ## @ _DOC_LC_FIGURES ## All figures and other external data in all other locales _DOC_LC_FIGURES = $(foreach lc,$(_DOC_REAL_LINGUAS), \ $(patsubst C/%,$(lc)/%,$(_DOC_C_FIGURES)) ) _DOC_SRC_FIGURES = \ $(foreach fig,$(_DOC_C_FIGURES), $(foreach lc,C $(_DOC_REAL_LINGUAS), \ $(wildcard $(srcdir)/$(lc)/$(patsubst C/%,%,$(fig))) )) $(_DOC_POFILES): @if ! test -d $(dir $@); then \ echo "mkdir $(dir $@)"; \ mkdir "$(dir $@)"; \ fi @if test ! -f $@ -a -f $(srcdir)/$@; then \ echo "cp $(srcdir)/$@ $@"; \ cp "$(srcdir)/$@" "$@"; \ fi; @docs=; \ list='$(_DOC_C_DOCS_NOENT)'; for doc in $$list; do \ docs="$$docs $(_DOC_ABS_SRCDIR)/$$doc"; \ done; \ if ! test -f $@; then \ echo "(cd $(dir $@) && \ $(_xml2po) -m $(_xml2po_mode) -e $$docs > $(notdir $@).tmp && \ cp $(notdir $@).tmp $(notdir $@) && rm -f $(notdir $@).tmp)"; \ (cd $(dir $@) && \ $(_xml2po) -m $(_xml2po_mode) -e $$docs > $(notdir $@).tmp && \ cp $(notdir $@).tmp $(notdir $@) && rm -f $(notdir $@).tmp); \ else \ echo "(cd $(dir $@) && \ $(_xml2po) -m $(_xml2po_mode) -e -u $(notdir $@) $$docs)"; \ (cd $(dir $@) && \ $(_xml2po) -m $(_xml2po_mode) -e -u $(notdir $@) $$docs); \ fi $(_DOC_MOFILES): %.mo: %.po $(AM_V_at)if ! test -d $(dir $@); then mkdir "$(dir $@)"; fi $(GDU_V_MSGFMT)msgfmt -o $@ $< # FIXME: fix the dependancy # FIXME: hook xml2po up $(_DOC_LC_DOCS) : $(_DOC_MOFILES) $(_DOC_LC_DOCS) : $(_DOC_C_DOCS) $(AM_V_at)if ! test -d $(dir $@); then mkdir $(dir $@); fi $(GDU_V_XML2PO)if [ -f "C/$(notdir $@)" ]; then d="../"; else d="$(_DOC_ABS_SRCDIR)/"; fi; \ mo="$(dir $@)$(patsubst %/$(notdir $@),%,$@).mo"; \ if [ -f "$${mo}" ]; then mo="../$${mo}"; else mo="$(_DOC_ABS_SRCDIR)/$${mo}"; fi; \ (cd $(dir $@) && \ $(_xml2po) -m $(_xml2po_mode) -e -t "$${mo}" \ "$${d}C/$(notdir $@)" > $(notdir $@).tmp && \ cp $(notdir $@).tmp $(notdir $@) && rm -f $(notdir $@).tmp) ## @ _DOC_POT ## A pot file _DOC_POT = $(if $(DOC_MODULE),$(DOC_MODULE).pot,$(if $(DOC_ID),$(DOC_ID).pot)) .PHONY: pot pot: $(_DOC_POT) $(_DOC_POT): $(_DOC_C_DOCS_NOENT) $(GDU_V_XML2PO)$(_xml2po) -m $(_xml2po_mode) -e -o $@ $^ ################################################################################ ## @@ All Documentation ## @ _DOC_HTML_ALL ## All HTML documentation, only if it's built _DOC_HTML_ALL = $(if $(filter html HTML,$(_DOC_REAL_FORMATS)), \ $(_DOC_C_HTML) $(_DOC_LC_HTML)) _DOC_HTML_TOPS = $(foreach lc,C $(_DOC_REAL_LINGUAS),$(lc)/$(DOC_MODULE).xhtml) $(_DOC_HTML_TOPS): $(_DOC_C_DOCS) $(_DOC_LC_DOCS) $(GDU_V_DB2HTM)xsltproc -o $@ --xinclude --param db.chunk.chunk_top "false()" --stringparam db.chunk.basename "$(DOC_MODULE)" --stringparam db.chunk.extension ".xhtml" $(_db2html) $(patsubst %.xhtml,%.xml,$@) ################################################################################ ## All all: \ $(_DOC_C_DOCS) $(_DOC_LC_DOCS) \ $(_DOC_OMF_ALL) $(_DOC_DSK_ALL) \ $(_DOC_HTML_ALL) $(_DOC_POFILES) ################################################################################ ## Clean .PHONY: clean-doc-omf clean-doc-dsk clean-doc-lc clean-doc-dir clean-doc-omf: ; rm -f $(_DOC_OMF_DB) $(_DOC_OMF_HTML) clean-doc-dsk: ; rm -f $(_DOC_DSK_DB) $(_DOC_DSK_HTML) clean-doc-lc: rm -f $(_DOC_LC_DOCS) rm -f $(_DOC_MOFILES) @list='$(_DOC_POFILES)'; for po in $$list; do \ if ! test "$$po" -ef "$(srcdir)/$$po"; then \ echo "rm -f $$po"; \ rm -f "$$po"; \ fi; \ done # .xml2.po.mo cleaning is obsolete as of 0.18.1 and could be removed in 0.20.x @for lc in C $(_DOC_REAL_LINGUAS); do \ if test -f "$$lc/.xml2po.mo"; then \ echo "rm -f $$lc/.xml2po.mo"; \ rm -f "$$lc/.xml2po.mo"; \ fi; \ done clean-doc-dir: clean-doc-lc @for lc in C $(_DOC_REAL_LINGUAS); do \ for dir in `find $$lc -depth -type d`; do \ if ! test $$dir -ef $(srcdir)/$$dir; then \ echo "rmdir $$dir"; \ rmdir "$$dir"; \ fi; \ done; \ done _clean_omf = $(if $(_DOC_OMF_IN),clean-doc-omf) _clean_dsk = $(if $(_DOC_DSK_IN),clean-doc-dsk) _clean_lc = $(if $(_DOC_REAL_LINGUAS),clean-doc-lc) _clean_dir = $(if $(DOC_MODULE)$(DOC_ID),clean-doc-dir) clean-local: \ $(_clean_omf) $(_clean_dsk) \ $(_clean_lc) $(_clean_dir) distclean-local: \ $(_clean_omf) $(_clean_dsk) \ $(_clean_lc) $(_clean_dir) mostlyclean-local: \ $(_clean_omf) $(_clean_dsk) \ $(_clean_lc) $(_clean_dir) maintainer-clean-local: \ $(_clean_omf) $(_clean_dsk) \ $(_clean_lc) $(_clean_dir) ################################################################################ ## Dist .PHONY: dist-doc-docs dist-doc-pages dist-doc-figs dist-doc-omf dist-doc-dsk doc-dist-hook: \ $(if $(DOC_MODULE)$(DOC_ID),dist-doc-docs) \ $(if $(_DOC_C_FIGURES),dist-doc-figs) \ $(if $(_DOC_OMF_IN),dist-doc-omf) # $(if $(_DOC_DSK_IN),dist-doc-dsk) dist-doc-docs: $(_DOC_C_DOCS) $(_DOC_LC_DOCS) $(_DOC_POFILES) @for lc in C $(_DOC_REAL_LINGUAS); do \ echo " $(mkinstalldirs) $(distdir)/$$lc"; \ $(mkinstalldirs) "$(distdir)/$$lc"; \ done @list='$(_DOC_C_DOCS)'; \ for doc in $$list; do \ if test -f "$$doc"; then d=; else d="$(srcdir)/"; fi; \ docdir=`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \ if ! test -d "$(distdir)/$$docdir"; then \ echo "$(mkinstalldirs) $(distdir)/$$docdir"; \ $(mkinstalldirs) "$(distdir)/$$docdir"; \ fi; \ echo "$(INSTALL_DATA) $$d$$doc $(distdir)/$$doc"; \ $(INSTALL_DATA) "$$d$$doc" "$(distdir)/$$doc"; \ done @list='$(_DOC_LC_DOCS)'; \ for doc in $$list; do \ if test -f "$$doc"; then d=; else d="$(srcdir)/"; fi; \ docdir=`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \ if ! test -d "$(distdir)/$$docdir"; then \ echo "$(mkinstalldirs) $(distdir)/$$docdir"; \ $(mkinstalldirs) "$(distdir)/$$docdir"; \ fi; \ echo "$(INSTALL_DATA) $$d$$doc $(distdir)/$$doc"; \ $(INSTALL_DATA) "$$d$$doc" "$(distdir)/$$doc"; \ done @list='$(_DOC_POFILES)'; \ for doc in $$list; do \ if test -f "$$doc"; then d=; else d="$(srcdir)/"; fi; \ docdir=`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \ if ! test -d "$(distdir)/$$docdir"; then \ echo "$(mkinstalldirs) $(distdir)/$$docdir"; \ $(mkinstalldirs) "$(distdir)/$$docdir"; \ fi; \ echo "$(INSTALL_DATA) $$d$$doc $(distdir)/$$doc"; \ $(INSTALL_DATA) "$$d$$doc" "$(distdir)/$$doc"; \ done dist-doc-figs: $(_DOC_SRC_FIGURES) @list='$(_DOC_C_FIGURES) $(_DOC_LC_FIGURES)'; \ for fig in $$list; do \ if test -f "$$fig"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$fig"; then \ figdir=`echo $$fig | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \ if ! test -d "$(distdir)/$$figdir"; then \ echo "$(mkinstalldirs) $(distdir)/$$figdir"; \ $(mkinstalldirs) "$(distdir)/$$figdir"; \ fi; \ echo "$(INSTALL_DATA) $$d$$fig $(distdir)/$$fig"; \ $(INSTALL_DATA) "$$d$$fig" "$(distdir)/$$fig"; \ fi; \ done; dist-doc-omf: @if test -f "$(_DOC_OMF_IN)"; then d=; else d="$(srcdir)/"; fi; \ echo "$(INSTALL_DATA) $$d$(_DOC_OMF_IN) $(distdir)/$(notdir $(_DOC_OMF_IN))"; \ $(INSTALL_DATA) "$$d$(_DOC_OMF_IN)" "$(distdir)/$(notdir $(_DOC_OMF_IN))" dist-doc-dsk: @if test -f "$(_DOC_DSK_IN)"; then d=; else d="$(srcdir)/"; fi; \ echo "$(INSTALL_DATA) $$d$(_DOC_DSK_IN) $(distdir)/$(notdir $(_DOC_DSK_IN))"; \ $(INSTALL_DATA) "$$d$(_DOC_DSK_IN)" "$(distdir)/$(notdir $(_DOC_DSK_IN))" ################################################################################ ## Check .PHONY: check-doc-docs check-doc-omf check: \ $(if $(DOC_MODULE),check-doc-docs) \ $(if $(DOC_ID),check-doc-pages) \ $(if $(_DOC_OMF_IN),check-doc-omf) check-doc-docs: $(_DOC_C_DOCS) $(_DOC_LC_DOCS) @for lc in C $(_DOC_REAL_LINGUAS); do \ if test -f "$$lc"; \ then d=; \ xmlpath="$$lc"; \ else \ d="$(srcdir)/"; \ xmlpath="$$lc:$(srcdir)/$$lc"; \ fi; \ echo "xmllint --noout --noent --path $$xmlpath --xinclude --postvalid $$d$$lc/$(DOC_MODULE).xml"; \ xmllint --noout --noent --path "$$xmlpath" --xinclude --postvalid "$$d$$lc/$(DOC_MODULE).xml"; \ done check-doc-pages: $(_DOC_C_PAGES) $(_DOC_LC_PAGES) for lc in C $(_DOC_REAL_LINGUAS); do \ if test -f "$$lc"; \ then d=; \ xmlpath="$$lc"; \ else \ d="$(srcdir)/"; \ xmlpath="$$lc:$(srcdir)/$$lc"; \ fi; \ for page in $(DOC_PAGES); do \ echo "xmllint --noout --noent --path $$xmlpath --xinclude $$d$$lc/$$page"; \ xmllint --noout --noent --path "$$xmlpath" --xinclude "$$d$$lc/$$page"; \ done; \ done check-doc-omf: $(_DOC_OMF_ALL) @list='$(_DOC_OMF_ALL)'; for omf in $$list; do \ echo "xmllint --noout --xinclude --dtdvalid 'http://scrollkeeper.sourceforge.net/dtds/scrollkeeper-omf-1.0/scrollkeeper-omf.dtd' $$omf"; \ xmllint --noout --xinclude --dtdvalid 'http://scrollkeeper.sourceforge.net/dtds/scrollkeeper-omf-1.0/scrollkeeper-omf.dtd' $$omf; \ done ################################################################################ ## Install .PHONY: install-doc-docs install-doc-html install-doc-figs install-doc-omf install-doc-dsk _doc_install_dir = $(if $(DOC_ID),$(DOC_ID),$(DOC_MODULE)) install-data-local: \ $(if $(DOC_MODULE)$(DOC_ID),install-doc-docs) \ $(if $(_DOC_HTML_ALL),install-doc-html) \ $(if $(_DOC_C_FIGURES),install-doc-figs) \ $(if $(_DOC_OMF_IN),install-doc-omf) # $(if $(_DOC_DSK_IN),install-doc-dsk) install-doc-docs: @for lc in C $(_DOC_REAL_LINGUAS); do \ echo "$(mkinstalldirs) $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$lc"; \ $(mkinstalldirs) $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$lc; \ done @list='$(_DOC_C_DOCS)'; for doc in $$list; do \ if test -f "$$doc"; then d=; else d="$(srcdir)/"; fi; \ docdir="$$lc/"`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \ docdir="$(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$docdir"; \ if ! test -d "$$docdir"; then \ echo "$(mkinstalldirs) $$docdir"; \ $(mkinstalldirs) "$$docdir"; \ fi; \ echo "$(INSTALL_DATA) $$d$$doc $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc"; \ $(INSTALL_DATA) $$d$$doc $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc; \ done @list='$(_DOC_LC_DOCS)'; for doc in $$list; do \ if test -f "$$doc"; then d=; else d="$(srcdir)/"; fi; \ docdir="$$lc/"`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \ docdir="$(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$docdir"; \ if ! test -d "$$docdir"; then \ echo "$(mkinstalldirs) $$docdir"; \ $(mkinstalldirs) "$$docdir"; \ fi; \ echo "$(INSTALL_DATA) $$d$$doc $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc"; \ $(INSTALL_DATA) $$d$$doc $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc; \ done install-doc-figs: @list='$(patsubst C/%,%,$(_DOC_C_FIGURES))'; for fig in $$list; do \ for lc in C $(_DOC_REAL_LINGUAS); do \ figsymlink=false; \ if test -f "$$lc/$$fig"; then \ figfile="$$lc/$$fig"; \ elif test -f "$(srcdir)/$$lc/$$fig"; then \ figfile="$(srcdir)/$$lc/$$fig"; \ else \ figsymlink=true; \ fi; \ figdir="$$lc/"`echo $$fig | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \ figdir="$(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$figdir"; \ if ! test -d "$$figdir"; then \ echo "$(mkinstalldirs) $$figdir"; \ $(mkinstalldirs) "$$figdir"; \ fi; \ figbase=`echo $$fig | sed -e 's/^.*\///'`; \ if $$figsymlink; then \ echo "cd $$figdir && $(LN_S) -f ../../C/$$fig $$figbase"; \ ( cd "$$figdir" && $(LN_S) -f "../../C/$$fig" "$$figbase" ); \ else \ echo "$(INSTALL_DATA) $$figfile $$figdir$$figbase"; \ $(INSTALL_DATA) "$$figfile" "$$figdir$$figbase"; \ fi; \ done; \ done install-doc-html: echo install-html install-doc-omf: $(mkinstalldirs) $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir) @list='$(_DOC_OMF_ALL)'; for omf in $$list; do \ echo "$(INSTALL_DATA) $$omf $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \ $(INSTALL_DATA) $$omf $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf; \ done @if test "x$(_ENABLE_SK)" = "xtrue"; then \ echo "scrollkeeper-update -p $(DESTDIR)$(_sklocalstatedir) -o $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)"; \ scrollkeeper-update -p "$(DESTDIR)$(_sklocalstatedir)" -o "$(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)"; \ fi; install-doc-dsk: echo install-dsk ################################################################################ ## Uninstall .PHONY: uninstall-doc-docs uninstall-doc-html uninstall-doc-figs uninstall-doc-omf uninstall-doc-dsk uninstall-local: \ $(if $(DOC_MODULE)$(DOC_ID),uninstall-doc-docs) \ $(if $(_DOC_HTML_ALL),uninstall-doc-html) \ $(if $(_DOC_C_FIGURES),uninstall-doc-figs) \ $(if $(_DOC_OMF_IN),uninstall-doc-omf) # $(if $(_DOC_DSK_IN),uninstall-doc-dsk) uninstall-doc-docs: @list='$(_DOC_C_DOCS)'; for doc in $$list; do \ echo " rm -f $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc"; \ rm -f "$(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc"; \ done @list='$(_DOC_LC_DOCS)'; for doc in $$list; do \ echo " rm -f $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc"; \ rm -f "$(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc"; \ done uninstall-doc-figs: @list='$(_DOC_C_FIGURES) $(_DOC_LC_FIGURES)'; for fig in $$list; do \ echo "rm -f $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$fig"; \ rm -f "$(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$fig"; \ done; uninstall-doc-omf: @list='$(_DOC_OMF_ALL)'; for omf in $$list; do \ if test "x$(_ENABLE_SK)" = "xtrue"; then \ echo "scrollkeeper-uninstall -p $(_sklocalstatedir) $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \ scrollkeeper-uninstall -p "$(_sklocalstatedir)" "$(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \ fi; \ echo "rm -f $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \ rm -f "$(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \ done viking-1.4.2/intltool-update.in0000644000175000017500000000000012170052156013367 00000000000000viking-1.4.2/NEWS0000644000175000017500000012451012175546567010452 00000000000000Viking 1.4.2.0 (2013-07-26) Bug Fix Release * Fix menu use of named own Icons since the icons were renamed some time ago. * [QA] Fix memory leak in drawing new tracks/routes. * [QA] Fix memory leak on deleting TrackWaypoint layers. * [QA] Fix large memory leak on viewing Track Properties. * [QA] Fix incorrect iterator usage. * [QA] Fix memory leaks on reading in Viking files. * [QA] Fix memory leak in treeview tooltips and selection. * [QA] Fix large memory leak when removing DEM layers. * Fix some interpolated values of a trackpoint on insertion between points. * Fix handling failed downloads with the My OSM Traces method. * SF Bugs#101: Fix Acquire from Google Directions. * Fix name search using Google. * SF Bugs#100: Fix Crash on viewing Track Properties with extreme gradients. * SF Bugs#97: Fix missing redownload settings of some maps in the example config * SF Bugs#99: Increase limit for Map IDs * Automated check for the latest version. ATM only on Windows systems. * Enable getting Viking Version as a number from a string to enable comparisons. * SF#3613971: Remove Geofabrik's OpenStreetMap WMS, as it is not for public use. * Don't silently fail on attempting to split to a track. * Fix background thread statusbar update instability. * Fix location of gdk_threads_enter() to be before first window creation. * Allow Bing Map source URL to be set via the configuration XML file. * SF#3610708: Fix Failing to Load DEM files on Big Endian Systems. * Fix incorrect setting to lowest zoom value when clicking away from the statusbar zoom menu. * [QA] Improve create zoom menu to use G_N_ELEMENTS to know array bounds. Viking 1.4.1.0 (2013-04-08) Bug Fix Release + updated translations * Import Launchpad translation updates [Mainly for large Czech update] * Fix using .vik files with 'unusual' track or waypoint names * Fix waypoint selection when the waypoint has an image but the images are not being displayed. * Fix showing map timestamps on Windows on the map tile info dialog. * SF#3608411: Part 2 - Avoid creating command window on Viking start-up. * SF#3608411: Part 1 - Avoid warning about unbuffer on Windows Systems. * SF#3608264: Improve Statusbar Location Info Maybe Truncated * Prevent inputting empty names for layers and sublayers via the layers panel. * SF#3608311: Fix crash caused by renaming blank sublayer names * Be less strigent in loading Geotagged images without optional GPS tags * Fix use of scaled tile image when tile image not present. * Enable updating the treeview to allow setting a blank waypoint symbol. * Improve the Waypoint tooltip to display the description if there is no comment. * Fix datasource acquiring waypoints from geotag images. * Updated geo-* scripts to version released on 2013/02/18 * Fix compilation with --enable-geocaches option. * help/Makefile.am: explicitly list figures. Viking 1.4.0.1 (2013-02-16) Windows Only Release. * Windows: Add .vik file extension association option in the installer Viking 1.4 (2013-02-11) New features since 1.3.2 * Support for GPX Route type including transfer to/from GPS Devices. ** Replaced 'Add Track' tool with 'Create Route' tool. (NB There still is the Create Track tool) * Support for GPX 'Description' for tracks, waypoints and routes. * Add ability to Acquire My OSM Traces and ability to choose any subset of the available traces. * GPS Upload from a track. * Enable giving a track a specific colour (drawn in default draw by track mode). * Enable drawing all tracks in a specific colour (no longer is Black the only option). * Allow option of drawing a direction arrow when drawing a track. * Allow configuration of trackpoint size and direction arrow size. * Display Waypoint Icons in the layers panel treeview. * Restored Route Finding via Google Services. [Was disabled in 1.3.2 due to change in formats supported] * Only display sublayer container when there are sublayers. * Display map tile source and cached file information in a dialog for a position. * Quick zoom level change from the statusbar by clicking on the zoom level to select another level. * In the Zoom Tool mode: can select an area to zoom in on (via holding shift key + drag mouse). * Mouse Zooming in/out maintains the position focus on the mouse pointer location. ** (Use the keys Ctrl+Shift and mouse zoom to maintain the centered map location). * Improvements in Acquiring Wikipedia Points (allow more points, sortable columns, URL and feature type). * Allow opening a URL on a waypoint which has a URL for a comment or description. * Re-organized TrackWaypoint Layer menus to group functionality together better with New, View, Combine, Split, Delete, Acquire and Upload submenus. * Gradient Graph view on the Track Properties. * Allow same named TrackWaypoint sublayer items. i.e. can now have 2 (or more) waypoints with the same name. * Add support of a Map type for a local On Disk OSM Tile Format. * Revised Draw Track by Speed mode with a simple traffic light colouring scheme to represent slow/average/fast speeds. * Enable deletion of track points with the same timestamp. * Ability to merge segments of a track. * Allow generation of large pixel sized images. * Rework image generation to ask for file name first and then only allow supported map zoom levels. * Allow control of waypoint text size on the viewport display. * Allow control of GPX file saving track order (either Alphabetical or By Time via global preference). * Keyboard shortcuts to create layers and enable some tools. * Show the bearing and the step distance of the next point when creating a track or route. * Improved feedback in reading erroneous files. * Improved Help Manual. * More translation texts including a Finnish version. * Scripts to support the creation of the Windows Executable Installer. * Add a python tool to convert the Viking tile cache into a MapBox MBTiles format file. * Many internal improvements. Fixes since 1.3.2 * Don't accidently overwrite GPX and KML files in the Viking file type. * Use the default desktop font for waypoint viewport display text. * Ensure when opening multiple .vik files they are each loaded into a new window. * Show UTM location in statusbar when in UTM mode. * Fix: crash when dealing with non-compressed DEM files Viking 1.3.2 (2012-09-23) Bug Fix Release including: * Removed Route Finder Tool as Google Direction service interface has disabled the method Viking interfaced with it. * Fix for Debian#685817: Statusbar Update From Thread Instability * Fix SF#3564795: Crashing when attempting to create waypoints from EXIF images without enough GPS information. * Fix drawing of next potential trackpoint on Windows Systems. * Fix GPSBabel Dynamic Device List generation on Windows Systems. * Fix crashing when displayed map copyright(s) is longer than the internal buffer. * Fix crashing when deleting a GPS layer which has started a realtime tracking. * Fix printing of DEBUG message since glib 2.32 Viking 1.3.1 (2012-06-26) Bug Fix for Windows Systems Release: * Fix crash in Show Picture functionality on Window's Systems. Viking 1.3 (2012-04-22) New features since 1.2.2 * Be consistent in that track and waypoint list dialogs are always sorted alphabetically. * Add OSM Transport map as a built in map option. * Add supported MIME types to the desktop file specification. * Add example script that can be used to upload a track as a route to a predefined GPS device. * Display the average moving speed for a track in the track properties. * Add ability to open a TrackWaypoint layer with another external program (default merkaartor). * Add ability to open a TrackWaypoint layer with an external program (default JOSM). * Use map default: OSM MapQuest tileserver. * Add and use a preference for the associated image viewer program. * Add and use KML File Export units option. * Add ability to geotag images interpolating times against tracks. * Acquire Geotag Images via TRW Layer * Ensure vtl created in acquire operation runs post read stage. * EXIF read implementation for geotagged images (libexif). * Add new process stage for acquire methods. * Enable reversing a track from the track menu. * Display compact message on the statusbar for the selected trackpoint or waypoint. (SF#3314888) * Enable multiple selection and deletion. * Scale waypoint icons to give large or small icons as necessary. * Add Yahoo! Maps webtool link. * Extend webtools with a bounds version for the URL which takes four string parameters. * Add webtool for Bing maps. * Add Acquire OSM option into the Track/Waypoint layer operations. * Add used geo-* scripts as they are public domain. * Continue geocaching.com support via third party tools. * Show elevation gain/loss on track creation 'tooltip' (as per SF#2838561 request), when such data is available. * Automatically attempt to set elevation data from the DEM layer whilst a track is being created. * When creating a track, display the total distance of track (via a tooltip like text) on the main display. * Allow to import any file known by gpsbabel * Add support for any device known by gpsbabel * Add experimental support for GPSD_API_MAJOR_VERSION 5. * Add ability to acquire GPS traces stored on OSM * Enable copying layer/sublayer names as plain text, so that it can be pasted into external text handling applications. * Enable getting of the statusbar from the window. * On creating a new waypoint always attempt to auto set the altitude if DEM data is available. * Enable the escape key to remove/reset the ruler tool. Fixes since 1.2.2 * Remove Tiles@home support as the service has stopped. * cleanup: Remove unused and out of date 'viking-remote' script and related files. * cleanup: Remove *very* old documentation and don't bother distributing any of it which is all old. * Fix Track Properties graph blob marker drawn at wrong elevation when elevation graphs have different min/max heights. * Fix Track Properties graph DEM points drawn at wrong elevation when lowest elevation is not zero. * Use an intermediary program which will invoke the system's default for opening images. * Fix opening of external web sites via center method when the zoom level is less than 1 mpp. * Fix crashing on opening a file via recent menu after a .vik file is opened. * Fix too easy to accidently move a waypoint with an image with the select tool - must use shift key. * Fix can not immediately select another layer if currently selected layer's visibility changes. * Fix compilation with curl 7.21.7 (SF#3376584) * Improve libgps test with the consistently available function: gps_close * Fix help * [DOC] Split By Number of Points * Add Track->Split by Number of Points (as per SF#2847587 request). * Add a new dialog to return positive number. * SF#2844872: Suggest name for the new track when splitting the track via the trackpoint edit dialog. Fixes since 1.1 * Better safety checking to prevent crash due to null variable reference in use of the current trackpoint. * Fix: Reduce GObject cast * Fix etag handling * Fix: generate doc/reference/Makefile when needed * Fix Track -> Split by Timestamp such that newly created tracks are ordered correctly. * Fix sensitivity of the track properties window split marker to be disabled when the track marker is not drawn. * Fix crashing due to incorrect usage of libcurl - SF#3206628. * Fix non-void function should return a value. * Fix reference documentation generation - some systems need explicit mention of libz. * Fix displaying of 'Waypoints' treeview menu. * Fix vik_aggregate_layer_get_all_layers_of_type for track/waypoint layer types, since these may also be stored under GPS layers. * Improve previous fix: background calling code should control return value * Fix: background calling code should control return value * Fix: enforce background feature * Fix compiler warnings from gcc 4.5.4 * SF#3178554: Fix Sun Studio build * gtk_object_sink has been deprecated since gtk version 2.10, use g_object_ref_sink() instead. Viking 1.1 (2011-02-08) New features since 1.0 * [DOC] Add MapQuest Nominating search service in examples * Adjust colour of last auto track colour to not clash with default create track colour. * Add menu icons for the maps layer menu. * Make the selection list in Merge With Other Tracks sorted alphabetically. * Add sort list by name function. Will be useful for track and waypoint list ordering. * [DOC] Mark ready for 1.1 release. Update help manual version to 0.2. * [DOC] Add layer information for Aggregates, Coords and GeoRefs in help. * [DOC] Add Maps layer help information. * [DOC] Add overall layer information and promote each layer to be a top level section in help. * [DOC] Add DEM layer help information. * [DOC] Mention waypoint properties in help information. * [DOC] Update GPS layer help information. * [DOC] Update track operations help information. * [DOC] Update waypoint operations help information. * [DOC] Update Tools help section * [DOC] Update TrackWaypoint layer menu help Information * Improve positioning of the menu separator on waypoint menus. * Add GeoRef layer tooltip to show the file name in use. * Add GPS Layer tooltip to say the protocol (aka device manufacturer) type. * TrackWaypoint Layer tooltip featuring summaries for tracks and waypoints. * Add maps layer tooltip to show the map name(type). * Add DEM layer tooltip to show the number of DEM files in use. * Add Track and waypoint sublayer tooltip information. * Add treeview use and display of layers tooltip. * Add Layer Tooltip callback definition * Add sublayer tooltip callback definition. * When getting data via the GPS layer automatically set the view to see it, unless the realtime tracking mode is on. * On acquiring data from sources (inc. GPS) automatically set the view to see it. Except for GeoCaches; as it's likely you're requesting data for the current area, so no point in trying to change the view. * On opening GPX files automatically view all the data. * Add 'View All Tracks' option to the panel Layer menu options, which sets the view (center & zoom) to see all the tracks of that layer. * Add 'View Waypoints' option to the TrackWaypoint layer menu options, which sets the view (center & zoom) to see all the Waypoints. * Add 'View Track' option to the Track sublayer menu options, which sets the view (center & zoom) to see the track. * Add 'View Layer' option to the TrackWaypoint Layer menu options, which sets the view (center & zoom) to see the entire layer. * Add the ability to 'autozoom' to view an area specified by maximum and minimum lat/longs for a TrackWaypoint layer. * Create a new 'Show' submenu entry * Improve curl usage as should call cleanup on application exit. * Add copyright and license properties for NASA BlueMarble data. * Add background thread loading of DEM files. * Add Track->Goto Highest and Lowest points features. * Add Track->Goto Maximum Speed feature. * Rework Track->Goto menu options. * Add support for the TMS interface provided by SPOTMaps * Add license related properties * Add copyright property * Improve key binding for Mercator Mode -> ctrl+m * Add documentation for generic TMS map source * Improve key bindings for ModeLatLon. * Add OSM WMS Server * Add support for WMS-C * Add support for more standard TMS * Move-up download methods * Add LatLon projection * Better safety checking code * Add support for Locosys devices via GPSBabel's navilink device protocol. * Add support for DeLorme devices via GPSBabel's delbin device protocol. * Add the ability to insert a trackpoint into a track via the Edit Trackpoint dialog. * Add internal function to insert a trackpoint after the currently selected trackpoint. * Add license notice to new file * Enable individual track to GPX export via the Track sublayer menu. * Set default action on dialogs. * Add a perl script to auto generate basic Viking .vik files for directories containing images. * Enable control of the visibility of the menubar [including keyboard shortcut - F4]. Also enable panic key 'Escape' to restore menubar if hidden and no tool uses it. * Enable control of the visibility of the toolbar [including keyboard shortcut - F3]. * Make use of the vikwindow toolbar variable. * Enable control of the visibility of the statusbar [including keyboard shortcut - F12]. Fixes since 1.0 * Prevent Gtk-CRITICAL assertion when the application is closed with a Track Property window on display. * Prevent Gtk-CRITICAL assertion when the application is closed whilst loading DEMs. * Fix trackpoint edit altitude sensitivity to be re-enabled after it has been disabled. * Fix incorrect cut/copy of sublayers when accessed via the layers panel buttons. * Fix the List Dialog so that it does not become taller than the screen when there are lots of entries. * Fix some compiler warnings in viktrwlayer.c when configured to build with --disable-alphabetized-trw * Fix Resource leak detected by cppcheck 1.46 * Fix compiler warning in curl_download.c * Fix compiler warning in vikmapslayer.c * Fix compiler warning in vikwindow.c - use correct const typing. * Fix compiler warnings - correct Widget / Window type. * Fix memory leak when generating image file * Fix: Improve XML reading error reporting * Fix compiler warnings in osm.c * Fix compiler warning in vikmapslayer.c * Fix Waypoint & Track visibility issues. * Fix SF#3104028: Default Color Background is incorrectly saved as black into a new .vik file. Viking 1.0 (2010-11-14) New features since 0.9.96 * Add minimal translator-credits in About dialog * Add documenters to About dialog Fixes since 0.9.96 * Improve copyright holders * Prevent crashes when downloading Expedia Maps. * Fix extend track using magic scissors. * Fix autodownloading while panning * Fix Debian #599048: Segmentation fault when using gpsbabel * Fix dem_gradient_colors allocation. * Fix compiler warnings in preferences.c Viking 0.9.96 (2010-10-11) New features since 0.9.95 * Use ETag to detect fresh tiles on servers * Add new menu entry in GPS Layer to delete the realtime information. * Ensure GPS realtime information deleted when GPS Layer -->Empty All is called. * Prevent zoom factor string displaying unnecessary .0s when it's a whole number. * Improve Track Properties speed profile display for low speed difference (e.g. walking) tracks. * Use speed units in display of Track/Waypoint layer draw by velocity config values, but maintain units as metres per second when read from/saved to files. * Add keyboard accelerators for as many as possible View Menu entries. * Simplify zoom status when xmpp and ympp are equal * Use height units in the altitude readout for the cursor position on the status bar. * Use height units in display of DEM min / max elevation values, but maintain units as metres when read from/saved to files. Fixes since 0.9.95 * Fix many memory leaks * DEM layer properties tidy up. * Prevent getting stuck in a near infinite loop when using Coord layer, UTM mode and zoomed out to see the whole world. * Prevent lock up in attempt to download maps along a track in UTM mode. * Launchpad Bug #445374: Prevent crash when downloading maps along a track, with Terraserver maps when in Mercator mode. * Add explicit linking against libz and libm * Fix SF#3009431: Prevent Crash in Real Time Tracking GPS Mode & Autodownload Maps. * Fix display of rounded speed units scale markers in the speed profile. * Fix cycle map URL * Fix compiler warnings * Fix Track Draw by Velocity mode, so that individual track points are coloured (as was the intention). * Fix bug where older file was removed when network not present * Fix: warning 'draw-mode' message does not display * Fix incorrect limitation on source map id Viking 0.9.95 (2010-09-07) New features since 0.9.94 * Add some function short cut key definitions to control showing of the center mark and scale viewport features. * [DOC] Replace Google with OSM capability in man pages. * When manually creating a track, automatically give it a default name. * [DOC] Add contributors from the Wiki(s) history. * Better dialog name when searching for a waypoint. * Change max cache time to 1 week. Fixes since 0.9.94 * Prevent "Gtk-WARNING **: GtkSpinButton: setting an adjustment with non-zero page size is deprecated" messages. * Invalid number of arguments in call to a_http_download_get_u * Prevent crash when cut of a GPS track/waypoint layer is attempted via the layers buttons. * Prevent DEM layer colour indexing going negative and can crash on gradient view. * Fix DEM layer to show default sea level. * Fix track background thickness being able to set back to zero. * Fix internal tile locking * Fix top layer not drawn after made invisible and then back to being visible. * Fix impaired (drawcentermark setting bodged) vik file if saved with the top layer visibility turned off. * Fix syntax errors in help manual * Fix map drag and drop to show the correct whole map * Fix "Go to UTM" dialog title. * Fix first opening of a file which has spaces (or other interesting characters) via the recent files menu. * Fix unnamed_tracks / unnamed_waypoints misuse. Viking 0.9.94 (2010-06-10) New features since 0.9.93 * Add knots as a speed unit option. * Detect USB Garmin eTrex HCx Legend devices (and maybe others). * Auto use of /dev/ttyUSB type device if available on Unix systems. * Add ability to turn off Garmin GPS after transfer. * Add a 'home' default location preference. * Add ability to changes preferences outside of the preferences.c file. * NLS Maps API: Historic map of Great Britain * Change GUI related command line parameter for Waypoint symbol size into run time preference. * Support All Zoom Levels in Zoom Menu * [DOC] Import User Manual from wiki * Add menu item for help contents Fixes since 0.9.93 * Add Viking's contributors as copyright holders * Remove unecessary '\' from the View Menu * Better Preferences Dialog Title * More Menu Improvements * Replace autogen.sh * On GPS data acquire, only create a layer if it contains something. * Fix POTFILES with new source file * Fix OMF category * Fix Filter->Simplify All Tracks default. * [DOC] Fix Gnome's menu entry category for viking * [DOC] Fix erroneous warning * Fix compiler warning. * Fix #2977752: win-gtk: osm tiles don't show up * Fix Track -> View Google Directions URL * Fix function's return value * Fix compilation warnings * Fix #2988574: Can't save files opened via recent file menu * Fix #2991657: Terraserver downloads fail * Fix geocaching Viking 0.9.93 (2010-04-11) New features since 0.9.92 * Allow overriding map source * Make GPS layer cut/copy available from popup menu. * [DOC] Document new files in viking's manpage * Increase possible smaller zoom * Add negative scales so that we can have bigger zoom on maps * Allow images from bigger and smaller zoom to be selected if current zoom has no image Fixes since 0.9.92 * Fix: set a default filename while exporting * [DOC] Fix: Viking's sources are hosted by Git now * Further variable type corrections. * Fix GPS layer copy. * Fix Track/Waypoint Layer Paste on 64bit systems. * [DOC] Fix FILES section of manpage. * Fix: First Track not Black in Draw All Tracks Black Mode. Viking 0.9.92 (2010-03-15) New features since 0.9.91 * Memorize previously selected go-to service. * Better scale when zoomed close in and in miles distance mode. * Add and use preference for height units. * Add and use preference for speed units. * Add and use preference for distance units. * Use a preference to set the tiles age. * New preference for default maplayer cache. * Improve DEM-Layer. * Remove OpenAerial support. * Translation updates. Fixes since 0.9.91 * Fix: Correctly rotate thumbnail images * Fix #2958601: Support for non ascii characters in "Go-to" search * Fix error handling in go-to feature Viking 0.9.91 (2010-02-06) New features since 0.9.9 * Interpolation for maps: use less precise images when wanted image is not present * GObjectify maps ** Add compatibility facilities * GObjectify go-to/search feature ** Add Name finder search engine ** Add Nominatim search engine ** Add Geonames search engine ** Add generic XML search code * Add configuration file for map sources, goto and external tool (See examples in distribution) * Add option to download only maps that are more recent on server ** Try to download newer tiles when autodownload is set and server supports such check ** Tiles must be older than a specified age before checking server * Add support for recently used files * Add DEM Gradient * Add DOAP file Fixes since 0.9.9 * Fix: add GIO dependency and header for GFile * Fix #2946287: open a recent file * fix some confusing indentation and bracing * Fix #2881916: rename a track with c&p * Fix #2766373: Use a string as device path * Fix "Moving Map Method" cannot be disabled * Fix #2880741: replace gps_open with gps_open_r * Fix #2921899: uses conditional macro to support two versions of libgps * Fix warnings * Fix URL formatting issue * Fix error messages * Fix #2801874: keep second part of a splitted track visible * Fix #2838556: emit warning when gpsbabel is not found in PATH * Fix bashism in test script. * Merge branch 'fix-osm-api-0.6' * Fix magic scissors * Get rid deprecated GtkTooltips API. * Add configure option to track deprecated feature * Use motion hints to make map motion more responsive in slow environment. * Viking compatible with libgps >= 2.90 * finish OSM 0.6 API support * Optimise bandwidth usage * keeping OSM password safe Viking 0.9.9 (2009-09-09) New features since 0.9.8 * Filter out irrelevant key-modifiers. * Upgrade OSM-traces support to 0.6 API * Manage hdop,vdop,pdop,nsat * Remove unused (and buggy) feature * Document previous merge * Improvement of map cache * Add a viking parameter for mapcache memory size * Add menu option to flush mapcache, and reduce viking memory footprint * Use thread-pool to manage download * Show path used for map directory in options even when using default one * Include full libcurl version in user agent Fixes since 0.9.8 * Don't crash when jobs are cancelled via the background jobs dialog. * Fix #2163652: GPX file with byte order mark not parsed * Fix #2766609: Don't use gpsd_units() * Fix #2812856: Change SRTM URL * Fix #2818818: unset langage preset while opening external Google * Fix copyright in --version output * Fix SRTM Server change * Fix memory leaks found with cppcheck * Fix warning in call to MD5Update() in function md5_hash() * Fix previous patch * vdop, hdop, pdop, nsats and fix_mode values were not shown * Fix #570956: change saved_width to 1 * Fix build problem * Fix bug #2481237: Maps directory file chooser should look for directory Viking 0.9.8 (2009-01-31) New features since 0.9.7 * Add GeoNames support (both for search and for POI import from Geonames+Wikipedia) * Remove Google's map tiles. * Add external tools framework. * Add OpenStreetMap and Google web tools. * Clicking on "visible" tick no longer makes the layer selected. * GPX export: sort track by time. * Merging tracks by name. * Tittle waypoint properties dialog as "Waypoint Properties". * Add larger size waypoint symbols (icons). * Waypoint names are now displayed at the top of waypoint symbol. * Waypoint symbols: Use Garmin waypoint. * New server for OSM cycle map. Fixes since 0.9.7 * Fix loading of world map file. * Fix 2249398: Fix some memory leaks. * Fix bugs that caused magic scissors not working. * Fix compatibility problem for windows. * Fix implicit declaration of maps_layer_default_dir(). * Fix missing status return in spawn_command_line_async(). * Fix curl error buffer usage. * GPS realtime tracking: Keep retrying when fail to connect. * Windows port: avoid "\\" in URL. Viking 0.9.7 (2008-10-12) New features since 0.9.6 * Add new moving map method for realtime tracking. * Rename icon: viking_icon.png -> viking.png * src/viking.desktop.in: add GenericName and revise Categories * Change "Zoom To" short cut to avoid conflict with "Zoom Tool". * Update translations * Google search adapting changes from Google. * add osm cycle layer support * add a menu entry to extend an existing track using magic scissors * Patch #2009666: OpenAerialMap * Add preferences to select how degrees are displayed * Color picker button for the Coordlayer properties dialog * Cut/Copy/Paste empty selection is not critical * Layers panel UI improvements * Homogeneous icons management. * Add preferences to store OSM login/password * Add a password entry widget * Ensure that confirmation dialog is over file selector Fixes since 0.9.6 * Fix 2161310: Fix some more compiler warnings * Fix 2134452: Properties of some tracks show as NaN * QA: cleanning old stuff * Fix segfault in realtime tracking. * Fix missing files in po/POTFILES.in * viking.spec.in, src/icons/Makefile.am: Fix icon target dir * fix parallel build (make -j8) on multi-processor machines. * Fix #1947260: correct a corrupted escape * Fixed crashes when creating new layers. * Fix #1952523: mode_button assertion loading old datafile * Fix: update layer after applying properties * Fixed google map download problem. * Replace specific About dialog by GtkAboutDialog * Replace some g_warning by g_debug Viking 0.9.6 (2008-07-31) Fixes since 0.9.5 * Fix Google maps' URL * Fix gcget command line to accomodate negative coords * Fix unecessary viking.desktop Viking 0.9.5 (2008-07-21) New features since 0.9.4 * Add panning tool as default. * Replace GtkFileSelection by GtkFileChooser. * No longer converts waypoint names to uppercase. Waypoint names are now case insensitive. * Windows port updated. * Track properties: Keep markers of the graphs in sync with each other. * Track properties: split track at marker. * New translations: el, it, ja, lt, nb, nl, pl, zh_CN, zh_TW * Added viking.desktop * Added --debug and --verbose command line options. * Updated man pages. Fixes since 0.9.4 * Fix #1839948: Maximize/Restore changes current cursor. * Bug #1915121: add an utility to reproduce (test/gpx2gpx). * Fix #1915121: use GLib functions to handle ISO8601 dates. * Fix pipe leaks. * Remove dependency to wget. * Fix google version number. * Track graph marker now works again. * Fix #1947456: Compiler warning fixes Viking 0.9.4 (2008-02-25) New features since 0.9.3 * Make elev graph show better graph for low altitude tracks. * Printing support * Draw circle for downloading geocaches. * Improve track graphs. Some tracks looked too flat. * Internationalization (I18N) * Localization (L10N): Czech, Danish, German, Spanish, French, Brazilian Portuguese, Swedish * Use a list of possible browsers. * New map source: BlueMarble tiles (http://mike.teczno.com/notes/blue-marble-tiles.html) * New map source: Google Terrain * Use the "next unused" (not really) waypoint number as default. * Sort waypoints in GPX output. * Preferences support in ~/.viking/viking.prefs * Update source for OSM/Osmarender tiles * Full screen mode. * Tuned the v-t diagram drawing Fixes since 0.9.3 * Many fixes around compilation warnings * Fix a bug that caused crashes when displaying elev graph for some track. * Fix bug that caused Old Google maps not being disabled by default. * Fix a bug that can potentially cause segfault. * Fix compilation under HURD (missing MAXPATHLEN macro) * Fix: ensure config.h is included conditionnaly * Fix a crash bug in mapcache * Fix a crash bug in merge-by-time Viking 0.9.3 (2007-10-21) New features since 0.9.2 * Half-drawn redraw for faster refreshing display of viewport (Maps, tracks, waypoints...) * Allow multiple selections when adding DEM files. * (Semi) auto downloading and importing for SRTM 90m DEM file (worldwide). * Indicating areas which have DEM file download but not imported. * "Minimum elevation" is now configurable for DEM layer. It can be used together with the existing "Max Elev" to make DEM display more distinguish colors for a particular area of interest. * Interpolating DEM data. * Add realtime tracking to GPS layer with track recording. * Trackpoints acquired in realtime mode store extra information of speed, course, fix mode and number of satellites. * Track properties dialog no longer blocks user interaction on main window. Using multiple track dialogs (simultaneously for different tracks) is now allowed. * Make use of DEM elevation data and GPS speed data for track graphs (Properties Dialog). * Track Properties: now displays track distance/time instead of "Selected Time". * Marker for selected position on track graphs. * Various enhancement to improve usability of track dialog. * Mouse cursor is now changed accordingly to tool currently in used. * Magic Scissors (Automatically drawing track between points) can now be undone using right click, and extended via Ctrl-click. * Shortcuts for panning: Ctrl-arrow key, and Shift-scroll and Ctrl-scroll. * Extend track. * Ctrl-shift-scroll to zoom like google, scroll to zoom w/o changing center. * Preview adding a trackpoint by drawing a line when moving mouse. * Esc key used to stop track edition. * Backspace key used to remove last added point. * Use $BROWSER environment variable (for viewing geocache pages). * Automatically fetching google version numbers. * Upgrading to API 0.5 of OSM. Fixes since 0.9.2 * Fix: Make viking's default start location somewhere more likely has maps. * Fix: bug that causes crashes when using "Maps Download" tool. * Fix: Adding command line option framework (--help & --version). * Fix #1789550: mkdtemp usage is conditioned. * Fix #1789550: define MAX macro if not defined on ALL systems. * Fix: optional geocaching -- include config.h to compile. * Fix: DEM Layer copy/paste. * Fix: crashes on using wrong tools. * Fix: bugs that caused odd display of date/time on track properties dialog. * Fix: Correctly calculate position when click on speed-time graph. * Fix: Relax dependencies about glib. * Fix: Upgrading to API 0.5 of OSM. * Fix: plotting of DEM data on elevation graph. Viking 0.9.2 (2007-09-04) New features since 0.9.1 * Use $EMAIL to initialise email field for OSM upload. * Preset filename when exporting a TrwLayer. Fixes since 0.9.1 * Fix: crash when "applying" a map layer property dialog. * Fix: Do not warn about drawmode inconsistency while reading file. * Fix: Hide Expedia view mode when expedia is not built in. Viking 0.9.1 (2007-09-02) New features since 0.9 * Upload data (TrackWaypoint layer or single track) to OpenStreetMap. * Group "Export Layer..." entries in a sub-menu. * Added --enable-old-google to configure script. Old google modes are now disabled by default. * Default mode for new maps is Google Maps. * DEM module can now read hgt.zip files directly (no need to unzip them). * DEM module can now process 1 arc sec hgt(.zip) files (mainly for USA regions). * Display on status bar altitude at cursor using data from DEM layer(s). Fixes since 0.9 * Add redirect support. * Some improves to introduce the drawmode notion. * Better checking to detect downloaded text instead of images. * New google version number. * libcurl is a requirement. * Fix bugs that cause crashes on layers copy/paste/delete. * Fix bug in Google search that caused viking jump to wrong location when Google can not find the match. * Clean up and eliminate compiler warning. * Fix bug in creating temporary HOME when HOME is not set. * Disable GeoCache Acquire since it no longer works. Can be enabled again using configure --enable-geocaches. * Disable expedia map layer by default since it no longer works. Can be enabled again using configure --enable-expedia. Viking 0.9 (2007-07-13) New Features since 0.1.3 * DEM data -- DEMLayer & applying data to tracks & waypoints * Make "Save Image" and "Save Image Directory" dialogs reusable * Add viking icon * Download maps along track * Add User-Agent to http request header * Add cookies support (for google requests) * Add center mark which can be turn on/off in View menu * Make the scale more visible on dark maps * Add magic scissors feature * Add Google Maps search feature * Many new waypoint symbols * Add man pages * Improve performance for map autodownload * Google Directions now remembers previous query (from/to entries) * New menu items to remove all tracks and waypoints in GPS folders * Add "Save and Exit" to File menu * Save function for GPS layer * Map tool: Left click can now refresh display of map tiles Fixes since 0.1.3 * View Mode displayed wrong setting on startup * crashes on gps download/upload * SEGFAULT on x86_64 * segfault on trackpoint properties dialog * intermittent problem of map redraw * Stop autodownload from running forever on map downloading errors * Check for non-displayable data after downloading map Viking 0.1.3 (2007-05-17) - New "Refresh onscreen tiles" entry menu - Default .spec file for building RPM packages - Default debian/ subtree for building Debian packages - Usage of the libcurl library - Three new map sources from OpenStreetMap - Better usage of libusb - Google source map improved - GUI improves Viking 0.1.2 (2007-02-13) - direct access to GPS device: GPS layer - position inputs accept DDD/DMM/DMS formats (ex: 3.5, 3\B030.0, 3\B030'0.00) - time position in Track Poperties - tool (menu entries and buttons) are enabled/disabled following context - standard 'Edit' menu (with 'Copy', 'Cut', 'Paste' and 'Delete' actions) - 'Edit' popup menus for waypoint and track - new configure options: * --disable-google * --disable-terraserver * --disable-expedia - visual feedback when moving waypoints - map sections are displayed while downloading - cosmetics changes (window title, viking's URL in files, 'About' dialog...) - some improves in source code - lot of fixes Viking 0.1.1 (2006-06-11) - more map sources such as google - drag and drop of layers and way/trackpoints - copy/paste between vikings - "smart" copy which can parse a lat/lon from web pages like geocaching, emails, etc. - graphs of altitude/velocity - newer gtk with toolbar icons - experimental "acquire" features: from GPS, from Google directions, from Geocaching - gpx support Viking 0.1.0 (2005-02-27) - new map layer which supports Google, Expedia, and Topozone maps in addition to the three types of Terraserver maps, - lots of other fixes, - visualization options, - miscellaneous goodies. viking-1.4.2/INSTALL0000644000175000017500000003660012134470534010767 00000000000000Installation Instructions ************************* Copyright (C) 1994-1996, 1999-2002, 2004-2011 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without warranty of any kind. Basic Installation ================== Briefly, the shell commands `./configure; make; make install' should configure, build, and install this package. The following more-detailed instructions are generic; see the `README' file for instructions specific to this package. Some packages provide this `INSTALL' file but do not implement all of the features documented below. The lack of an optional feature in a given package is not necessarily a bug. More recommendations for GNU packages can be found in *note Makefile Conventions: (standards)Makefile Conventions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves the results of its tests to speed up reconfiguring. Caching is disabled by default to prevent problems with accidental use of stale cache files. If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If you are using the cache, and at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create `configure' by a program called `autoconf'. You need `configure.ac' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. Running `configure' might take a while. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package, generally using the just-built uninstalled binaries. 4. Type `make install' to install the programs and any data files and documentation. When installing into a prefix owned by root, it is recommended that the package be configured and built as a regular user, and only the `make install' phase executed with root privileges. 5. Optionally, type `make installcheck' to repeat any self-tests, but this time using the binaries in their final installed location. This target does not install anything. Running this target as a regular user, particularly if the prior `make install' required root privileges, verifies that the installation completed correctly. 6. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. 7. Often, you can also type `make uninstall' to remove the installed files again. In practice, not all packages have tested that uninstallation works correctly, even though it is required by the GNU Coding Standards. 8. Some packages, particularly those that use Automake, provide `make distcheck', which can by used by developers to test that all other targets like `make install' and `make uninstall' work correctly. This target is generally not run by end users. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. Run `./configure --help' for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c99 CFLAGS=-g LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you can use GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. This is known as a "VPATH" build. With a non-GNU `make', it is safer to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. On MacOS X 10.5 and later systems, you can create libraries and executables that work on multiple system types--known as "fat" or "universal" binaries--by specifying multiple `-arch' options to the compiler but only a single `-arch' option to the preprocessor. Like this: ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CPP="gcc -E" CXXCPP="g++ -E" This is not guaranteed to produce working output in all cases, you may have to build one architecture at a time and combine the results using the `lipo' tool if you have problems. Installation Names ================== By default, `make install' installs the package's commands under `/usr/local/bin', include files under `/usr/local/include', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PREFIX', where PREFIX must be an absolute file name. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you pass the option `--exec-prefix=PREFIX' to `configure', the package uses PREFIX as the prefix for installing programs and libraries. Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=DIR' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. In general, the default for these options is expressed in terms of `${prefix}', so that specifying just `--prefix' will affect all of the other directory specifications that were not explicitly provided. The most portable way to affect installation locations is to pass the correct locations to `configure'; however, many packages provide one or both of the following shortcuts of passing variable assignments to the `make install' command line to change installation locations without having to reconfigure or recompile. The first method involves providing an override variable for each affected directory. For example, `make install prefix=/alternate/directory' will choose an alternate location for all directory configuration variables that were expressed in terms of `${prefix}'. Any directories that were specified during `configure', but not in terms of `${prefix}', must each be overridden at install time for the entire installation to be relocated. The approach of makefile variable overrides for each directory variable is required by the GNU Coding Standards, and ideally causes no recompilation. However, some platforms have known limitations with the semantics of shared libraries that end up requiring recompilation when using this method, particularly noticeable in packages that use GNU Libtool. The second method involves providing the `DESTDIR' variable. For example, `make install DESTDIR=/alternate/directory' will prepend `/alternate/directory' before all installation names. The approach of `DESTDIR' overrides is not required by the GNU Coding Standards, and does not work on platforms that have drive letters. On the other hand, it does better at avoiding recompilation issues, and works well even when some directory options were not specified in terms of `${prefix}' at `configure' time. Optional Features ================= If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Some packages offer the ability to configure how verbose the execution of `make' will be. For these packages, running `./configure --enable-silent-rules' sets the default to minimal output, which can be overridden with `make V=1'; while running `./configure --disable-silent-rules' sets the default to verbose, which can be overridden with `make V=0'. Particular systems ================== On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC is not installed, it is recommended to use the following options in order to use an ANSI C compiler: ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" and if that doesn't work, install pre-built binaries of GCC for HP-UX. HP-UX `make' updates targets which have the same time stamps as their prerequisites, which makes it generally unusable when shipped generated files such as `configure' are involved. Use GNU `make' instead. On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot parse its `' header file. The option `-nodtk' can be used as a workaround. If GNU CC is not installed, it is therefore recommended to try ./configure CC="cc" and if that doesn't work, try ./configure CC="cc -nodtk" On Solaris, don't put `/usr/ucb' early in your `PATH'. This directory contains several dysfunctional programs; working variants of these programs are available in `/usr/bin'. So, if you need `/usr/ucb' in your `PATH', put it _after_ `/usr/bin'. On Haiku, software installed for all users goes in `/boot/common', not `/usr/local'. It is recommended to use the following options: ./configure --prefix=/boot/common Specifying the System Type ========================== There may be some features `configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, `configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the option `--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with `--host=TYPE'. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified `gcc' to be used as the C compiler (unless it is overridden in the site shell script). Unfortunately, this technique does not work for `CONFIG_SHELL' due to an Autoconf bug. Until the bug is fixed you can use this workaround: CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash `configure' Invocation ====================== `configure' recognizes the following options to control how it operates. `--help' `-h' Print a summary of all of the options to `configure', and exit. `--help=short' `--help=recursive' Print a summary of the options unique to this package's `configure', and exit. The `short' variant lists options used only in the top level, while the `recursive' variant lists options also present in any nested packages. `--version' `-V' Print the version of Autoconf used to generate the `configure' script, and exit. `--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. `--config-cache' `-C' Alias for `--cache-file=config.cache'. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `--prefix=DIR' Use DIR as the installation prefix. *note Installation Names:: for more details, including other options available for fine-tuning the installation locations. `--no-create' `-n' Run the configure checks, but stop before creating any output files. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. viking-1.4.2/README0000644000175000017500000000234612175546146010626 00000000000000Viking is a free/open source program to manage GPS data. You can import, plot and create tracks and waypoints, show OSM, Terraserver and other maps, see real-time GPS position, get geocaches, control items, etc. It is written in C & the GTK+2 toolkit. Website: http://viking.sf.net/ Obtaining Viking ================ You can download tarball of latest released version at http://sourceforge.net/projects/viking/files You can also retrieve the latest development version on the official Git repo: $ git clone git://viking.git.sourceforge.net/gitroot/viking/viking Installing Viking ================= If you downloaded Viking from Git, you have to: $ ./autogen.sh Next, or if you downloaded a tarball, you have to: $ ./configure $ make Check output of "./configure --help" for configuration options. In particular, it is possible to disable some features, like --disable-google in order to disable any Google stuff. If you wish to install Viking, you have to (as root): # make install For detailled explaination on install, see INSTALL file. Examples ======== See test/ subdirectory for examples. Documentation ============= See doc/ and help/ subdirectories for documentation. You can also access user manual via Help menu entry.