1
0
mirror of https://github.com/tumic0/GPXSee.git synced 2025-07-05 07:02:51 +02:00

Compare commits

...

153 Commits
7.19 ... 7.22

Author SHA1 Message Date
2002b828dd Version++ 2020-02-12 20:35:59 +01:00
71f0e1d0ac Cleanup the data loading code 2020-02-12 20:33:23 +01:00
eb9767f2dd Cleanup the map loading code 2020-02-12 20:32:57 +01:00
8d06ab6208 Enable loading of GMAP maps when Garmin BaseCamp has associated them 2020-02-12 09:37:03 +01:00
187cb77858 Added missing Hungarian localization copy 2020-02-12 08:36:56 +01:00
8167a995f6 Added GMAP support info 2020-02-11 23:31:51 +01:00
b5aed7314e Merge branch 'origin/master' into Weblate. 2020-02-11 21:16:44 +01:00
464d4c5327 Removed forgotten devel code 2020-02-11 21:16:31 +01:00
11f4dc4b41 Merge branch 'origin/master' into Weblate. 2020-02-11 21:04:43 +01:00
2d3ad41d69 Use the GMAP basemaps rather than discarding them
+ some minor point rendering issues fixes
2020-02-11 21:03:55 +01:00
a7dcc57dd1 Translated using Weblate (Spanish)
Currently translated at 100.0% (351 of 351 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/es/
2020-02-11 18:50:35 +01:00
2d5e11f001 Properly handle basemap entries with './xxx' paths 2020-02-10 19:40:39 +01:00
e86f89308b Decreased GMAP read block size to 4K 2020-02-10 19:40:04 +01:00
378fa8dc0e Make caching work for both IMG and GMAP maps 2020-02-10 19:38:45 +01:00
dde8903013 Merge branch 'origin/master' into Weblate. 2020-02-10 09:33:37 +01:00
37c4fe1eba Cosmetics 2020-02-10 09:33:31 +01:00
f9db0acb03 Merge branch 'origin/master' into Weblate. 2020-02-10 09:26:32 +01:00
1aa07a6a34 Removed duplicit code 2020-02-10 09:26:23 +01:00
c302a67299 Merge branch 'origin/master' into Weblate. 2020-02-10 09:11:05 +01:00
8b6d7acec5 Give the compiler more posibilities for optimization 2020-02-10 09:10:09 +01:00
ba70fd159d Merge branch 'origin/master' into Weblate. 2020-02-10 08:55:45 +01:00
1773a1ae0d Cosmetics 2020-02-10 08:55:34 +01:00
136f08aa76 Merge branch 'origin/master' into Weblate. 2020-02-09 23:27:36 +01:00
f70d92805b Version++ 2020-02-09 23:27:22 +01:00
69e66f1856 Merge branch 'origin/master' into Weblate. 2020-02-09 23:25:25 +01:00
911c63df0c Added support for GMAP maps 2020-02-09 23:24:48 +01:00
d16899530a Merge branch 'origin/master' into Weblate. 2020-02-08 16:17:00 +01:00
e2339c67cd Fixed bitstream4 flush 2020-02-08 16:16:24 +01:00
c809d2f17e Merge branch 'origin/master' into Weblate. 2020-02-08 16:02:00 +01:00
fac0bae006 Fixed crash on GMP tiles without LBL or NET parts 2020-02-08 16:01:22 +01:00
9bd03c1225 Merge branch 'origin/master' into Weblate. 2020-02-08 10:55:07 +01:00
d63c666997 Code cleanup 2020-02-08 10:54:59 +01:00
0cd20a1e57 Unions can not have non-POD members 2020-02-08 10:52:26 +01:00
2f70d46be8 Merge branch 'origin/master' into Weblate. 2020-02-07 22:11:25 +01:00
325e83569c Redesigned IMG caching
(Cache encoded data rather than raw data)
2020-02-07 22:10:06 +01:00
56b374ed30 Merge branch 'origin/master' into Weblate. 2020-02-04 23:04:08 +01:00
df1be4aeb9 Added missing reference 2020-02-04 23:03:50 +01:00
d79bdaef78 Merge branch 'origin/master' into Weblate. 2020-02-04 23:02:01 +01:00
fa0c09b30c Code cleanup 2020-02-04 23:01:47 +01:00
95c82c501a Merge branch 'origin/master' into Weblate. 2020-02-04 21:48:14 +01:00
3b16f37e66 Some micro-optimizatoins and code cleanup 2020-02-04 21:47:31 +01:00
661e26fbdb Merge branch 'origin/master' into Weblate. 2020-02-03 23:18:28 +01:00
25939cfa62 Fixed typo
(I'd rather not investigate how it could work...)
2020-02-03 23:18:00 +01:00
c59ea4e5cd Merge branch 'origin/master' into Weblate. 2020-02-03 22:58:35 +01:00
5de1bc7e7d Update gpxsee.desktop (#271) 2020-02-03 22:58:29 +01:00
7c3399575b Translated using Weblate (Norwegian Bokmål)
Currently translated at 100.0% (351 of 351 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/nb_NO/
2020-02-03 09:37:41 +01:00
7bedd17071 Translated using Weblate (Polish)
Currently translated at 98.3% (345 of 351 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/pl/
2020-02-03 09:37:39 +01:00
06a84dcea2 Code cleanup 2020-02-02 09:03:35 +01:00
ca204626a1 Some hot path inlining 2020-02-01 19:21:41 +01:00
d16ef7b081 Translated using Weblate (Hungarian)
Currently translated at 100.0% (351 of 351 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/hu/
2020-01-30 09:01:52 +01:00
ef013dc036 Translated using Weblate (Hungarian)
Currently translated at 100.0% (351 of 351 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/hu/
2020-01-28 23:51:08 +01:00
633d52daca Added Hungarian localization 2020-01-28 22:02:16 +01:00
adbb5e5684 Translated using Weblate (Hungarian)
Currently translated at 98.0% (344 of 351 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/hu/
2020-01-28 14:34:01 +01:00
bd9b09df3d Merge branch 'origin/master' into Weblate. 2020-01-26 18:24:52 +01:00
ede2b6004f Added SML info 2020-01-26 18:24:48 +01:00
a516055dc2 Merge branch 'origin/master' into Weblate. 2020-01-26 18:06:26 +01:00
1ba3ada96e Added Hungarian localization stub 2020-01-26 18:05:50 +01:00
1667e0ca70 Merge branch 'origin/master' into Weblate. 2020-01-26 15:59:41 +01:00
cb03c8a903 Always run the redistributables installer and let it decide what to do
(instead of an own and broken registry check with magic numbers)
2020-01-26 15:58:20 +01:00
b50d5227a5 Merge branch 'origin/master' into Weblate. 2020-01-26 14:08:23 +01:00
eef6360643 Fixed MSVC redist checks 2020-01-26 14:07:49 +01:00
f38db3227f Merge branch 'origin/master' into Weblate. 2020-01-26 13:24:27 +01:00
ac73c04445 MSVC redistributables names have changed 2020-01-26 13:23:45 +01:00
c3aeb95660 Merge branch 'origin/master' into Weblate. 2020-01-26 13:14:09 +01:00
3299b41ec7 There is no Qt 5.14/VS2017 on appveyor... 2020-01-26 13:13:34 +01:00
6bdd97611d Merge branch 'origin/master' into Weblate. 2020-01-26 13:08:16 +01:00
58fd5022ca paths? 2020-01-26 13:07:55 +01:00
15e09539c7 Merge branch 'origin/master' into Weblate. 2020-01-26 13:02:48 +01:00
ebe1851abb ... 2020-01-26 13:02:29 +01:00
a225c6d308 Merge branch 'origin/master' into Weblate. 2020-01-26 12:57:56 +01:00
b3ddbd7b63 Removed duplicit configuration 2020-01-26 12:57:27 +01:00
a94056ac7e Merge branch 'origin/master' into Weblate. 2020-01-26 12:56:15 +01:00
e5042b11d7 Maybe there is a completely different error... 2020-01-26 12:55:46 +01:00
aea7bbdf09 Merge branch 'origin/master' into Weblate. 2020-01-26 12:51:40 +01:00
2e0eadd0e7 Try another path 2020-01-26 12:51:19 +01:00
1c9b31d7c9 Merge branch 'origin/master' into Weblate. 2020-01-26 12:50:07 +01:00
42e917efab Reduced test 2020-01-26 12:49:47 +01:00
7a9b26756a Merge branch 'origin/master' into Weblate. 2020-01-26 12:40:03 +01:00
07761ea335 Try it using conditions... 2020-01-26 12:39:38 +01:00
eaae965719 Merge branch 'origin/master' into Weblate. 2020-01-26 12:33:41 +01:00
f17e5c2ea1 try it without call 2020-01-26 12:33:15 +01:00
ca6e8638d8 Merge branch 'origin/master' into Weblate. 2020-01-26 12:17:38 +01:00
21bcaf9562 Some more try... 2020-01-26 12:17:15 +01:00
66a22fbfee Merge branch 'origin/master' into Weblate. 2020-01-26 12:08:32 +01:00
a160cb4eb3 Maybe this way... 2020-01-26 12:08:02 +01:00
2d3ca7c5f8 Merge branch 'origin/master' into Weblate. 2020-01-26 12:02:53 +01:00
f5ec18a13a Surrender 2020-01-26 12:02:30 +01:00
8c71d11fa6 Merge branch 'origin/master' into Weblate. 2020-01-26 11:59:36 +01:00
f6b15e1acc Yet another try... 2020-01-26 11:59:12 +01:00
857c5050f4 Merge branch 'origin/master' into Weblate. 2020-01-26 11:52:39 +01:00
652471ac90 ?! 2020-01-26 11:52:16 +01:00
44d1d27c93 Merge branch 'origin/master' into Weblate. 2020-01-26 11:50:38 +01:00
2da1f8bc70 @#$%^! windows shell 2020-01-26 11:49:42 +01:00
68e20cff5b Merge branch 'origin/master' into Weblate. 2020-01-26 11:43:41 +01:00
2d4d2721bf Added missing quotes 2020-01-26 11:43:17 +01:00
1c67f1cac9 Merge branch 'origin/master' into Weblate. 2020-01-26 11:41:12 +01:00
d74816883a AppVeyor build fix 2020-01-26 11:40:38 +01:00
a09d13594d Merge branch 'origin/master' into Weblate. 2020-01-26 11:28:42 +01:00
81b5631de4 Updated Windows build environment
(Qt 5.14, MSVC 2017, OpenSSL 1.1.1)
2020-01-26 11:27:48 +01:00
6916d0e6b4 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (351 of 351 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/uk/
2020-01-25 22:21:36 +01:00
757ec98108 Translated using Weblate (Russian)
Currently translated at 100.0% (351 of 351 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/ru/
2020-01-25 22:21:35 +01:00
2ddb5dc28b Translated using Weblate (Finnish)
Currently translated at 100.0% (351 of 351 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/fi/
2020-01-25 22:21:35 +01:00
2e84901e43 Merge branch 'origin/master' into Weblate. 2020-01-24 19:45:01 +01:00
f61fb5657c Translated using Weblate (Spanish)
Currently translated at 100.0% (351 of 351 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/es/
2020-01-24 19:45:01 +01:00
24e216cdfc Translated using Weblate (French)
Currently translated at 100.0% (351 of 351 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/fr/
2020-01-24 19:45:00 +01:00
09d6de00a6 Some more style/layout fiddeling
+ code cleanup
2020-01-24 19:44:19 +01:00
f7990ee2e6 Merge branch 'origin/master' into Weblate. 2020-01-23 23:22:56 +01:00
cb01c0b590 Cleanup the remaining parser that stores temporary data 2020-01-23 23:22:04 +01:00
21cf5ddaec Merge branch 'origin/master' into Weblate. 2020-01-23 23:21:01 +01:00
48d4686dd4 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (351 of 351 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/pt_BR/
2020-01-23 23:21:01 +01:00
d035a307d8 Variables with underscores followed by a capital letter are prohibited by the C++ standard
Fixes #266
2020-01-23 23:19:32 +01:00
89e04f3678 Translated using Weblate (Swedish)
Currently translated at 100.0% (351 of 351 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/sv/
2020-01-23 08:04:58 +01:00
e664fc188c Translated using Weblate (German)
Currently translated at 100.0% (351 of 351 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/de/
2020-01-23 08:04:58 +01:00
3597a07ed7 Translated using Weblate (Czech)
Currently translated at 100.0% (351 of 351 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/cs/
2020-01-23 08:04:58 +01:00
0472cc03f3 Translated using Weblate (Norwegian Bokmål)
Currently translated at 92.0% (323 of 351 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/nb_NO/
2020-01-23 08:04:57 +01:00
d169a9f710 Translated using Weblate (Turkish)
Currently translated at 100.0% (351 of 351 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/tr/
2020-01-23 08:04:57 +01:00
2ff2195116 Localization update 2020-01-22 22:42:26 +01:00
cdbf2db5fe Version++ 2020-01-22 22:39:14 +01:00
2bb635a120 Log coordinates in a better usable way 2020-01-22 22:36:58 +01:00
465b146001 Do not duplicate the area descriptions where (most) maps have POIs 2020-01-22 22:18:29 +01:00
ce6d6298bb Use the polygons labels for displaying rather than discarding them 2020-01-22 21:01:05 +01:00
ae2ff99be8 Do not fetch polygon labels as they are unused anyway 2020-01-22 07:46:58 +01:00
5b6cd24839 Merge branch 'master' of https://github.com/tumic0/GPXSee 2020-01-21 21:53:07 +01:00
cd22e6207a Added support for Huffman compressed RGN data 2020-01-21 21:50:13 +01:00
b826e497f3 Some more cosmetics 2020-01-19 21:00:11 +01:00
7cc39f25e1 Code cleanup 2020-01-19 18:08:03 +01:00
f61d9fcd55 Fixed crash on error introduced with the latest error handling changes
(+ ignore broken tiles rather than terminate parsing)
2020-01-19 17:40:14 +01:00
67a1f7e108 Includes cleanup 2020-01-19 17:05:26 +01:00
040de56a54 Fixed error handling + code cleanup 2020-01-19 13:23:20 +01:00
a486abb159 Added workaround for broken GPS IFD entries produced by NOKIA phones
Closes #260
2020-01-16 22:54:12 +01:00
37215959b8 Merge branch 'origin/master' into Weblate. 2020-01-16 19:32:17 +01:00
1ccce095a9 Updated appdata info 2020-01-16 19:31:40 +01:00
057180e431 Added OS X SML integration 2020-01-16 19:31:14 +01:00
60e62da6a2 Merge branch 'origin/master' into Weblate. 2020-01-15 23:24:58 +01:00
a3eafea60a Added missing icon file 2020-01-15 23:24:20 +01:00
962f8de160 Merge branch 'origin/master' into Weblate. 2020-01-15 23:11:01 +01:00
6525d34e08 Added SML desktop integration (Windows + Linux) 2020-01-15 23:10:14 +01:00
3c661ddf65 Merge branch 'origin/master' into Weblate. 2020-01-15 21:56:45 +01:00
42b4216d9c Added support for sensors data 2020-01-15 21:56:04 +01:00
4e7418111d Merge branch 'origin/master' into Weblate. 2020-01-14 23:21:58 +01:00
a89ef11d73 Added basic support for Suunto SML files 2020-01-14 23:21:05 +01:00
293046590e Merge branch 'origin/master' into Weblate. 2020-01-12 16:08:19 +01:00
ea2f67fc09 Merge branch 'origin/master' into Weblate. 2020-01-12 16:01:50 +01:00
eb744df9cc Merge branch 'origin/master' into Weblate. 2020-01-11 23:40:49 +01:00
6c6d297a3c Merge branch 'origin/master' into Weblate. 2020-01-05 00:49:34 +01:00
669715aa32 Merge branch 'origin/master' into Weblate. 2019-12-23 17:05:27 +01:00
fdc172ab38 Merge branch 'origin/master' into Weblate. 2019-12-23 16:16:26 +01:00
b9d5fa8772 Merge branch 'origin/master' into Weblate. 2019-12-23 15:48:57 +01:00
d4de0edca6 Merge branch 'origin/master' into Weblate. 2019-12-20 23:39:29 +01:00
7f650f9d6a Merge branch 'origin/master' into Weblate. 2019-12-11 16:02:28 +01:00
52c6bb569e Merge branch 'origin/master' into Weblate. 2019-12-04 22:19:59 +01:00
dba46b09a8 Merge branch 'origin/master' into Weblate. 2019-12-03 08:19:20 +01:00
b8cf3872ce Translated using Weblate (Norwegian Bokmål)
Currently translated at 92.0% (322 of 350 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/nb_NO/
2019-12-02 10:32:40 +01:00
83 changed files with 5476 additions and 2227 deletions

View File

@ -1,22 +1,33 @@
version: 7.19.{build} version: 7.22.{build}
configuration: Release
platform: Any CPU configuration:
- Release
image:
- Visual Studio 2017
environment: environment:
NSISDIR: C:\Program Files (x86)\NSIS NSISDIR: C:\Program Files (x86)\NSIS
matrix: matrix:
- QTDIR: C:\Qt\5.11\msvc2015 - QTDIR: C:\Qt\5.13\msvc2017
PLATFORM: x86
NSI: gpxsee.nsi NSI: gpxsee.nsi
OPENSSLDIR: C:\OpenSSL-Win32\bin VCVARS: vcvars32.bat
- QTDIR: C:\Qt\5.11\msvc2015_64 OPENSSLDIR: C:\OpenSSL-v111-Win32\bin
PLATFORM: x86_amd64 LIBCRYPTO: libssl-1_1.dll
LIBSSL: libcrypto-1_1.dll
- QTDIR: C:\Qt\5.13\msvc2017_64
NSI: gpxsee64.nsi NSI: gpxsee64.nsi
OPENSSLDIR: C:\OpenSSL-Win64\bin VCVARS: vcvars64.bat
OPENSSLDIR: C:\OpenSSL-v111-Win64\bin
LIBCRYPTO: libssl-1_1-x64.dll
LIBSSL: libcrypto-1_1-x64.dll
install: install:
- cmd: >- - cmd: >-
set PATH=%QTDIR%\bin;%NSISDIR%;%PATH% set PATH=%QTDIR%\bin;%NSISDIR%;%PATH%
call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" %PLATFORM% call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\"%VCVARS%
build_script: build_script:
- cmd: >- - cmd: >-
lrelease gpxsee.pro lrelease gpxsee.pro
@ -44,9 +55,9 @@ build_script:
copy licence.txt installer copy licence.txt installer
copy %OPENSSLDIR%\libeay32.dll installer copy %OPENSSLDIR%\%LIBCRYPTO% installer
copy %OPENSSLDIR%\ssleay32.dll installer copy %OPENSSLDIR%\%LIBSSL% installer
makensis.exe installer\%NSI% makensis.exe installer\%NSI%

View File

@ -2,9 +2,9 @@
GPXSee is a Qt-based GPS log file viewer and analyzer that supports all common GPS log file formats. GPXSee is a Qt-based GPS log file viewer and analyzer that supports all common GPS log file formats.
## Features ## Features
* Opens GPX, TCX, FIT, KML, NMEA, IGC, CUP, SLF, LOC, GeoJSON, OziExplorer (PLT, RTE, WPT), Garmin GPI&CSV and geotagged JPEG files. * Opens GPX, TCX, FIT, KML, NMEA, IGC, CUP, SIGMA SLF, Suunto SML, LOC, GeoJSON, OziExplorer (PLT, RTE, WPT), Garmin GPI&CSV and geotagged JPEG files.
* User-definable online maps (OpenStreetMap/Google tiles, WMTS, WMS, TMS, QuadTiles). * User-definable online maps (OpenStreetMap/Google tiles, WMTS, WMS, TMS, QuadTiles).
* Offline maps (MBTiles, OziExplorer maps, TrekBuddy maps/atlases, Garmin IMG & JNX maps, TwoNav RMaps, GeoTIFF images). * Offline maps (MBTiles, OziExplorer maps, TrekBuddy maps/atlases, Garmin IMG/GMAP & JNX maps, TwoNav RMaps, GeoTIFF images).
* Elevation, speed, heart rate, cadence, power, temperature and gear ratio/shifts graphs. * Elevation, speed, heart rate, cadence, power, temperature and gear ratio/shifts graphs.
* Support for DEM files (SRTM HGT). * Support for DEM files (SRTM HGT).
* Support for multiple tracks in one view. * Support for multiple tracks in one view.

View File

@ -3,7 +3,7 @@ unix:!macx {
} else { } else {
TARGET = GPXSee TARGET = GPXSee
} }
VERSION = 7.19 VERSION = 7.22
QT += core \ QT += core \
gui \ gui \
@ -89,6 +89,12 @@ HEADERS += src/common/config.h \
src/GUI/areaitem.h \ src/GUI/areaitem.h \
src/data/link.h \ src/data/link.h \
src/map/IMG/bitmapline.h \ src/map/IMG/bitmapline.h \
src/map/IMG/bitstream.h \
src/map/IMG/deltastream.h \
src/map/IMG/gmap.h \
src/map/IMG/huffmanstream.h \
src/map/IMG/huffmantable.h \
src/map/IMG/mapdata.h \
src/map/IMG/textpathitem.h \ src/map/IMG/textpathitem.h \
src/map/IMG/textpointitem.h \ src/map/IMG/textpointitem.h \
src/map/projection.h \ src/map/projection.h \
@ -188,7 +194,8 @@ HEADERS += src/common/config.h \
src/data/csv.h \ src/data/csv.h \
src/data/cupparser.h \ src/data/cupparser.h \
src/data/gpiparser.h \ src/data/gpiparser.h \
src/data/address.h src/data/address.h \
src/data/smlparser.h
SOURCES += src/main.cpp \ SOURCES += src/main.cpp \
src/GUI/popup.cpp \ src/GUI/popup.cpp \
src/common/coordinates.cpp \ src/common/coordinates.cpp \
@ -242,6 +249,12 @@ SOURCES += src/main.cpp \
src/GUI/mapview.cpp \ src/GUI/mapview.cpp \
src/GUI/areaitem.cpp \ src/GUI/areaitem.cpp \
src/map/IMG/bitmapline.cpp \ src/map/IMG/bitmapline.cpp \
src/map/IMG/bitstream.cpp \
src/map/IMG/deltastream.cpp \
src/map/IMG/gmap.cpp \
src/map/IMG/huffmanstream.cpp \
src/map/IMG/huffmantable.cpp \
src/map/IMG/mapdata.cpp \
src/map/IMG/textpathitem.cpp \ src/map/IMG/textpathitem.cpp \
src/map/IMG/textpointitem.cpp \ src/map/IMG/textpointitem.cpp \
src/map/maplist.cpp \ src/map/maplist.cpp \
@ -324,7 +337,8 @@ SOURCES += src/main.cpp \
src/data/csv.cpp \ src/data/csv.cpp \
src/data/cupparser.cpp \ src/data/cupparser.cpp \
src/GUI/graphicsscene.cpp \ src/GUI/graphicsscene.cpp \
src/data/gpiparser.cpp src/data/gpiparser.cpp \
src/data/smlparser.cpp
greaterThan(QT_MAJOR_VERSION, 4) { greaterThan(QT_MAJOR_VERSION, 4) {
HEADERS += src/data/geojsonparser.h HEADERS += src/data/geojsonparser.h
@ -349,7 +363,8 @@ TRANSLATIONS = lang/gpxsee_en.ts \
lang/gpxsee_tr.ts \ lang/gpxsee_tr.ts \
lang/gpxsee_es.ts \ lang/gpxsee_es.ts \
lang/gpxsee_pt_BR.ts \ lang/gpxsee_pt_BR.ts \
lang/gpxsee_uk.ts lang/gpxsee_uk.ts \
lang/gpxsee_hu.ts
macx { macx {
ICON = icons/gpxsee.icns ICON = icons/gpxsee.icns
@ -368,7 +383,8 @@ macx {
lang/gpxsee_tr.qm \ lang/gpxsee_tr.qm \
lang/gpxsee_es.qm \ lang/gpxsee_es.qm \
lang/gpxsee_pt_BR.qm \ lang/gpxsee_pt_BR.qm \
lang/gpxsee_uk.qm lang/gpxsee_uk.qm \
lang/gpxsee_hu.qm
csv.path = Contents/Resources csv.path = Contents/Resources
csv.files = pkg/csv csv.files = pkg/csv
maps.path = Contents/Resources maps.path = Contents/Resources
@ -387,7 +403,8 @@ macx {
icons/formats/slf.icns \ icons/formats/slf.icns \
icons/formats/json.icns \ icons/formats/json.icns \
icons/formats/cup.icns \ icons/formats/cup.icns \
icons/formats/gpi.icns icons/formats/gpi.icns \
icons/formats/sml.icns
QMAKE_BUNDLE_DATA += locale maps icons csv QMAKE_BUNDLE_DATA += locale maps icons csv
} }
@ -406,7 +423,8 @@ win32 {
icons/formats/slf.ico \ icons/formats/slf.ico \
icons/formats/json.ico \ icons/formats/json.ico \
icons/formats/cup.ico \ icons/formats/cup.ico \
icons/formats/gpi.ico icons/formats/gpi.ico \
icons/formats/sml.ico
DEFINES += _USE_MATH_DEFINES \ DEFINES += _USE_MATH_DEFINES \
NOGDI NOGDI
} }

BIN
icons/formats/sml.icns Normal file

Binary file not shown.

BIN
icons/formats/sml.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 304 KiB

View File

@ -12,3 +12,4 @@ loc:#556677
slf:#881199 slf:#881199
cup:#20a810 cup:#20a810
gpi:#fca314 gpi:#fca314
sml:#6434eb

View File

@ -47,82 +47,87 @@
<context> <context>
<name>Data</name> <name>Data</name>
<message> <message>
<location filename="../src/data/data.cpp" line="176"/> <location filename="../src/data/data.cpp" line="179"/>
<source>Supported files</source> <source>Supported files</source>
<translation>Podporované soubory</translation> <translation>Podporované soubory</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="177"/> <location filename="../src/data/data.cpp" line="180"/>
<source>CSV files</source> <source>CSV files</source>
<translation>Soubory CSV</translation> <translation>Soubory CSV</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="178"/> <location filename="../src/data/data.cpp" line="181"/>
<source>CUP files</source> <source>CUP files</source>
<translation>Soubory CUP</translation> <translation>Soubory CUP</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="179"/> <location filename="../src/data/data.cpp" line="182"/>
<source>FIT files</source> <source>FIT files</source>
<translation>Soubory FIT</translation> <translation>Soubory FIT</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="181"/> <location filename="../src/data/data.cpp" line="184"/>
<source>GeoJSON files</source> <source>GeoJSON files</source>
<translation>Soubory GeoJSON</translation> <translation>Soubory GeoJSON</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="183"/> <location filename="../src/data/data.cpp" line="186"/>
<source>GPI files</source> <source>GPI files</source>
<translation>Soubory GPI</translation> <translation>Soubory GPI</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="184"/> <location filename="../src/data/data.cpp" line="187"/>
<source>GPX files</source> <source>GPX files</source>
<translation>Soubory GPX</translation> <translation>Soubory GPX</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="185"/> <location filename="../src/data/data.cpp" line="188"/>
<source>IGC files</source> <source>IGC files</source>
<translation>Soubory IGC</translation> <translation>Soubory IGC</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="186"/> <location filename="../src/data/data.cpp" line="189"/>
<source>JPEG images</source> <source>JPEG images</source>
<translation>Obrázky JPEG</translation> <translation>Obrázky JPEG</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="187"/> <location filename="../src/data/data.cpp" line="190"/>
<source>KML files</source> <source>KML files</source>
<translation>Soubory KML</translation> <translation>Soubory KML</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="188"/> <location filename="../src/data/data.cpp" line="191"/>
<source>LOC files</source> <source>LOC files</source>
<translation>Soubory LOC</translation> <translation>Soubory LOC</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="189"/> <location filename="../src/data/data.cpp" line="192"/>
<source>NMEA files</source> <source>NMEA files</source>
<translation>Soubory NMEA</translation> <translation>Soubory NMEA</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="190"/> <location filename="../src/data/data.cpp" line="193"/>
<source>OziExplorer files</source> <source>OziExplorer files</source>
<translation>Soubory OziExploreru</translation> <translation>Soubory OziExploreru</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="192"/> <location filename="../src/data/data.cpp" line="195"/>
<source>SML files</source>
<translation>Soubory SML</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="196"/>
<source>TCX files</source> <source>TCX files</source>
<translation>Soubory TCX</translation> <translation>Soubory TCX</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="191"/> <location filename="../src/data/data.cpp" line="194"/>
<source>SLF files</source> <source>SLF files</source>
<translation>Soubory SLF</translation> <translation>Soubory SLF</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="193"/> <location filename="../src/data/data.cpp" line="197"/>
<source>All files</source> <source>All files</source>
<translation>Všechny soubory</translation> <translation>Všechny soubory</translation>
</message> </message>
@ -1131,7 +1136,7 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="295"/> <location filename="../src/GUI/optionsdialog.cpp" line="295"/>
<location filename="../src/GUI/optionsdialog.cpp" line="572"/> <location filename="../src/GUI/optionsdialog.cpp" line="575"/>
<source>Graphs</source> <source>Graphs</source>
<translation>Grafy</translation> <translation>Grafy</translation>
</message> </message>
@ -1233,14 +1238,14 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="322"/> <location filename="../src/GUI/optionsdialog.cpp" line="322"/>
<location filename="../src/GUI/optionsdialog.cpp" line="429"/> <location filename="../src/GUI/optionsdialog.cpp" line="432"/>
<location filename="../src/GUI/optionsdialog.cpp" line="492"/> <location filename="../src/GUI/optionsdialog.cpp" line="495"/>
<source>Elevation:</source> <source>Elevation:</source>
<translation>Výška:</translation> <translation>Výška:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="323"/> <location filename="../src/GUI/optionsdialog.cpp" line="323"/>
<location filename="../src/GUI/optionsdialog.cpp" line="428"/> <location filename="../src/GUI/optionsdialog.cpp" line="431"/>
<source>Speed:</source> <source>Speed:</source>
<translation>Rychlost:</translation> <translation>Rychlost:</translation>
</message> </message>
@ -1296,69 +1301,69 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="376"/> <location filename="../src/GUI/optionsdialog.cpp" line="376"/>
<location filename="../src/GUI/optionsdialog.cpp" line="595"/> <location filename="../src/GUI/optionsdialog.cpp" line="598"/>
<source>s</source> <source>s</source>
<translation>s</translation> <translation>s</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="389"/> <location filename="../src/GUI/optionsdialog.cpp" line="392"/>
<source>Minimal speed:</source> <source>Minimal speed:</source>
<translation>Minimální rychlost:</translation> <translation>Minimální rychlost:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="390"/> <location filename="../src/GUI/optionsdialog.cpp" line="393"/>
<source>Minimal duration:</source> <source>Minimal duration:</source>
<translation>Minimální doba trvání:</translation> <translation>Minimální doba trvání:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="400"/> <location filename="../src/GUI/optionsdialog.cpp" line="403"/>
<source>Computed from distance/time</source> <source>Computed from distance/time</source>
<translation>Vypočítaná ze vzdálenosti/času</translation> <translation>Vypočítaná ze vzdálenosti/času</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="401"/> <location filename="../src/GUI/optionsdialog.cpp" line="404"/>
<source>Recorded by device</source> <source>Recorded by device</source>
<translation>Zaznamenaná zařízením</translation> <translation>Zaznamenaná zařízením</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="407"/> <location filename="../src/GUI/optionsdialog.cpp" line="410"/>
<location filename="../src/GUI/optionsdialog.cpp" line="465"/> <location filename="../src/GUI/optionsdialog.cpp" line="468"/>
<source>GPS data</source> <source>GPS data</source>
<translation>GPS data</translation> <translation>GPS data</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="408"/> <location filename="../src/GUI/optionsdialog.cpp" line="411"/>
<location filename="../src/GUI/optionsdialog.cpp" line="466"/> <location filename="../src/GUI/optionsdialog.cpp" line="469"/>
<source>DEM data</source> <source>DEM data</source>
<translation>DEM data</translation> <translation>DEM data</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="445"/> <location filename="../src/GUI/optionsdialog.cpp" line="448"/>
<source>Elevation</source> <source>Elevation</source>
<translation>Výška</translation> <translation>Výška</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="456"/> <location filename="../src/GUI/optionsdialog.cpp" line="459"/>
<source>Filtering</source> <source>Filtering</source>
<translation>Filtrování</translation> <translation>Filtrování</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="457"/> <location filename="../src/GUI/optionsdialog.cpp" line="460"/>
<source>Sources</source> <source>Sources</source>
<translation>Zdroje</translation> <translation>Zdroje</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="458"/> <location filename="../src/GUI/optionsdialog.cpp" line="461"/>
<source>Pause detection</source> <source>Pause detection</source>
<translation>Detekce přestávek</translation> <translation>Detekce přestávek</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="491"/> <location filename="../src/GUI/optionsdialog.cpp" line="494"/>
<source>Radius:</source> <source>Radius:</source>
<translation>Radius:</translation> <translation>Radius:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="439"/> <location filename="../src/GUI/optionsdialog.cpp" line="442"/>
<source>Speed</source> <source>Speed</source>
<translation>Rychlost</translation> <translation>Rychlost</translation>
</message> </message>
@ -1403,144 +1408,144 @@
<translation>Vlastní</translation> <translation>Vlastní</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="477"/> <location filename="../src/GUI/optionsdialog.cpp" line="480"/>
<source>mi</source> <source>mi</source>
<translation>mi</translation> <translation>mi</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="480"/> <location filename="../src/GUI/optionsdialog.cpp" line="483"/>
<source>nmi</source> <source>nmi</source>
<translation>nmi</translation> <translation>nmi</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="483"/> <location filename="../src/GUI/optionsdialog.cpp" line="486"/>
<source>km</source> <source>km</source>
<translation>km</translation> <translation>km</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="498"/> <location filename="../src/GUI/optionsdialog.cpp" line="501"/>
<location filename="../src/GUI/optionsdialog.cpp" line="638"/> <location filename="../src/GUI/optionsdialog.cpp" line="641"/>
<source>POI</source> <source>POI</source>
<translation>POI</translation> <translation>POI</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="505"/> <location filename="../src/GUI/optionsdialog.cpp" line="508"/>
<source>WYSIWYG</source> <source>WYSIWYG</source>
<translation>WYSIWYG</translation> <translation>WYSIWYG</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="506"/> <location filename="../src/GUI/optionsdialog.cpp" line="509"/>
<source>High-Resolution</source> <source>High-Resolution</source>
<translation>Vysoké rozlišení</translation> <translation>Vysoké rozlišení</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="511"/> <location filename="../src/GUI/optionsdialog.cpp" line="514"/>
<source>The printed area is approximately the display area. The map zoom level does not change.</source> <source>The printed area is approximately the display area. The map zoom level does not change.</source>
<translation>Oblast tisku přibližně odpovídá zobrazované oblasti. Přiblížení mapy se nemění.</translation> <translation>Oblast tisku přibližně odpovídá zobrazované oblasti. Přiblížení mapy se nemění.</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="513"/> <location filename="../src/GUI/optionsdialog.cpp" line="516"/>
<source>The zoom level will be changed so that the whole content (tracks/waypoints) fits to the printed area and the map resolution is as close as possible to the print resolution.</source> <source>The zoom level will be changed so that the whole content (tracks/waypoints) fits to the printed area and the map resolution is as close as possible to the print resolution.</source>
<translation>Přiblížení mapy bude upraveno tak, aby se celý obsah (trasy/body) vešel do oblasti tisku a rozlišení mapy bylo co nejblíže rozlišení tisku.</translation> <translation>Přiblížení mapy bude upraveno tak, aby se celý obsah (trasy/body) vešel do oblasti tisku a rozlišení mapy bylo co nejblíže rozlišení tisku.</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="535"/> <location filename="../src/GUI/optionsdialog.cpp" line="538"/>
<source>Name</source> <source>Name</source>
<translation>Název</translation> <translation>Název</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="537"/> <location filename="../src/GUI/optionsdialog.cpp" line="540"/>
<source>Date</source> <source>Date</source>
<translation>Datum</translation> <translation>Datum</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="539"/> <location filename="../src/GUI/optionsdialog.cpp" line="542"/>
<source>Distance</source> <source>Distance</source>
<translation>Vzdálenost</translation> <translation>Vzdálenost</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="541"/> <location filename="../src/GUI/optionsdialog.cpp" line="544"/>
<source>Time</source> <source>Time</source>
<translation>Čas</translation> <translation>Čas</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="543"/> <location filename="../src/GUI/optionsdialog.cpp" line="546"/>
<source>Moving time</source> <source>Moving time</source>
<translation>Čistý čas</translation> <translation>Čistý čas</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="545"/> <location filename="../src/GUI/optionsdialog.cpp" line="548"/>
<source>Item count (&gt;1)</source> <source>Item count (&gt;1)</source>
<translation>Počet objektů (&gt;1)</translation> <translation>Počet objektů (&gt;1)</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="560"/> <location filename="../src/GUI/optionsdialog.cpp" line="563"/>
<source>Separate graph page</source> <source>Separate graph page</source>
<translation>Samostatná stránka s grafy</translation> <translation>Samostatná stránka s grafy</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="570"/> <location filename="../src/GUI/optionsdialog.cpp" line="573"/>
<source>Print mode</source> <source>Print mode</source>
<translation>Režim tisku</translation> <translation>Režim tisku</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="571"/> <location filename="../src/GUI/optionsdialog.cpp" line="574"/>
<source>Header</source> <source>Header</source>
<translation>Záhlaví</translation> <translation>Záhlaví</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="579"/> <location filename="../src/GUI/optionsdialog.cpp" line="582"/>
<source>Use OpenGL</source> <source>Use OpenGL</source>
<translation>Používat OpenGL</translation> <translation>Používat OpenGL</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="582"/> <location filename="../src/GUI/optionsdialog.cpp" line="585"/>
<source>Enable HTTP/2</source> <source>Enable HTTP/2</source>
<translation>Povolit HTTP/2</translation> <translation>Povolit HTTP/2</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="589"/> <location filename="../src/GUI/optionsdialog.cpp" line="592"/>
<source>MB</source> <source>MB</source>
<translation>MB</translation> <translation>MB</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="599"/> <location filename="../src/GUI/optionsdialog.cpp" line="602"/>
<source>Image cache size:</source> <source>Image cache size:</source>
<translation>Mezipaměť obrázků:</translation> <translation>Mezipaměť obrázků:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="600"/> <location filename="../src/GUI/optionsdialog.cpp" line="603"/>
<source>Connection timeout:</source> <source>Connection timeout:</source>
<translation>Časový limit připojení:</translation> <translation>Časový limit připojení:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="616"/> <location filename="../src/GUI/optionsdialog.cpp" line="619"/>
<location filename="../src/GUI/optionsdialog.cpp" line="641"/> <location filename="../src/GUI/optionsdialog.cpp" line="644"/>
<source>System</source> <source>System</source>
<translation>Systém</translation> <translation>Systém</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="634"/> <location filename="../src/GUI/optionsdialog.cpp" line="637"/>
<source>Appearance</source> <source>Appearance</source>
<translation>Vzhled</translation> <translation>Vzhled</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="636"/> <location filename="../src/GUI/optionsdialog.cpp" line="639"/>
<source>Maps</source> <source>Maps</source>
<translation>Mapy</translation> <translation>Mapy</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="637"/> <location filename="../src/GUI/optionsdialog.cpp" line="640"/>
<source>Data</source> <source>Data</source>
<translation>Data</translation> <translation>Data</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="639"/> <location filename="../src/GUI/optionsdialog.cpp" line="642"/>
<source>Print &amp; Export</source> <source>Print &amp; Export</source>
<translation>Tisk a export</translation> <translation>Tisk a export</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="668"/> <location filename="../src/GUI/optionsdialog.cpp" line="671"/>
<source>Options</source> <source>Options</source>
<translation>Nastavení</translation> <translation>Nastavení</translation>
</message> </message>

View File

@ -47,82 +47,87 @@
<context> <context>
<name>Data</name> <name>Data</name>
<message> <message>
<location filename="../src/data/data.cpp" line="176"/> <location filename="../src/data/data.cpp" line="179"/>
<source>Supported files</source> <source>Supported files</source>
<translation>Understøttede filer</translation> <translation>Understøttede filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="177"/> <location filename="../src/data/data.cpp" line="180"/>
<source>CSV files</source> <source>CSV files</source>
<translation>CSV-filer</translation> <translation>CSV-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="178"/> <location filename="../src/data/data.cpp" line="181"/>
<source>CUP files</source> <source>CUP files</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="179"/> <location filename="../src/data/data.cpp" line="182"/>
<source>FIT files</source> <source>FIT files</source>
<translation>FIT-filer</translation> <translation>FIT-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="181"/> <location filename="../src/data/data.cpp" line="184"/>
<source>GeoJSON files</source> <source>GeoJSON files</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="183"/> <location filename="../src/data/data.cpp" line="186"/>
<source>GPI files</source> <source>GPI files</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="184"/> <location filename="../src/data/data.cpp" line="187"/>
<source>GPX files</source> <source>GPX files</source>
<translation>GPX-filer</translation> <translation>GPX-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="185"/> <location filename="../src/data/data.cpp" line="188"/>
<source>IGC files</source> <source>IGC files</source>
<translation>IGC-filer</translation> <translation>IGC-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="186"/> <location filename="../src/data/data.cpp" line="189"/>
<source>JPEG images</source> <source>JPEG images</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="187"/> <location filename="../src/data/data.cpp" line="190"/>
<source>KML files</source> <source>KML files</source>
<translation>KML-filer</translation> <translation>KML-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="188"/> <location filename="../src/data/data.cpp" line="191"/>
<source>LOC files</source> <source>LOC files</source>
<translation>LOC-filer</translation> <translation>LOC-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="189"/> <location filename="../src/data/data.cpp" line="192"/>
<source>NMEA files</source> <source>NMEA files</source>
<translation>NMEA-filer</translation> <translation>NMEA-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="190"/> <location filename="../src/data/data.cpp" line="193"/>
<source>OziExplorer files</source> <source>OziExplorer files</source>
<translation>OziExplorer-filer</translation> <translation>OziExplorer-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="191"/> <location filename="../src/data/data.cpp" line="194"/>
<source>SLF files</source> <source>SLF files</source>
<translation>SLF-filer</translation> <translation>SLF-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="192"/> <location filename="../src/data/data.cpp" line="195"/>
<source>SML files</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="196"/>
<source>TCX files</source> <source>TCX files</source>
<translation>TCX-filer</translation> <translation>TCX-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="193"/> <location filename="../src/data/data.cpp" line="197"/>
<source>All files</source> <source>All files</source>
<translation>Alle filer</translation> <translation>Alle filer</translation>
</message> </message>
@ -1251,7 +1256,7 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="295"/> <location filename="../src/GUI/optionsdialog.cpp" line="295"/>
<location filename="../src/GUI/optionsdialog.cpp" line="572"/> <location filename="../src/GUI/optionsdialog.cpp" line="575"/>
<source>Graphs</source> <source>Graphs</source>
<translation>Grafer</translation> <translation>Grafer</translation>
</message> </message>
@ -1267,14 +1272,14 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="322"/> <location filename="../src/GUI/optionsdialog.cpp" line="322"/>
<location filename="../src/GUI/optionsdialog.cpp" line="429"/> <location filename="../src/GUI/optionsdialog.cpp" line="432"/>
<location filename="../src/GUI/optionsdialog.cpp" line="492"/> <location filename="../src/GUI/optionsdialog.cpp" line="495"/>
<source>Elevation:</source> <source>Elevation:</source>
<translation>Højde:</translation> <translation>Højde:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="323"/> <location filename="../src/GUI/optionsdialog.cpp" line="323"/>
<location filename="../src/GUI/optionsdialog.cpp" line="428"/> <location filename="../src/GUI/optionsdialog.cpp" line="431"/>
<source>Speed:</source> <source>Speed:</source>
<translation>Hastighed:</translation> <translation>Hastighed:</translation>
</message> </message>
@ -1330,69 +1335,69 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="376"/> <location filename="../src/GUI/optionsdialog.cpp" line="376"/>
<location filename="../src/GUI/optionsdialog.cpp" line="595"/> <location filename="../src/GUI/optionsdialog.cpp" line="598"/>
<source>s</source> <source>s</source>
<translation>s</translation> <translation>s</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="389"/> <location filename="../src/GUI/optionsdialog.cpp" line="392"/>
<source>Minimal speed:</source> <source>Minimal speed:</source>
<translation>Mindste hastighed:</translation> <translation>Mindste hastighed:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="390"/> <location filename="../src/GUI/optionsdialog.cpp" line="393"/>
<source>Minimal duration:</source> <source>Minimal duration:</source>
<translation>Minidste varighed:</translation> <translation>Minidste varighed:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="400"/> <location filename="../src/GUI/optionsdialog.cpp" line="403"/>
<source>Computed from distance/time</source> <source>Computed from distance/time</source>
<translation>Beregnet ud fra afstanden/tiden</translation> <translation>Beregnet ud fra afstanden/tiden</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="401"/> <location filename="../src/GUI/optionsdialog.cpp" line="404"/>
<source>Recorded by device</source> <source>Recorded by device</source>
<translation>Indspillet af enhed</translation> <translation>Indspillet af enhed</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="407"/> <location filename="../src/GUI/optionsdialog.cpp" line="410"/>
<location filename="../src/GUI/optionsdialog.cpp" line="465"/> <location filename="../src/GUI/optionsdialog.cpp" line="468"/>
<source>GPS data</source> <source>GPS data</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="408"/> <location filename="../src/GUI/optionsdialog.cpp" line="411"/>
<location filename="../src/GUI/optionsdialog.cpp" line="466"/> <location filename="../src/GUI/optionsdialog.cpp" line="469"/>
<source>DEM data</source> <source>DEM data</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="445"/> <location filename="../src/GUI/optionsdialog.cpp" line="448"/>
<source>Elevation</source> <source>Elevation</source>
<translation type="unfinished">Højde</translation> <translation type="unfinished">Højde</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="456"/> <location filename="../src/GUI/optionsdialog.cpp" line="459"/>
<source>Filtering</source> <source>Filtering</source>
<translation>Filtrering</translation> <translation>Filtrering</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="457"/> <location filename="../src/GUI/optionsdialog.cpp" line="460"/>
<source>Sources</source> <source>Sources</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="458"/> <location filename="../src/GUI/optionsdialog.cpp" line="461"/>
<source>Pause detection</source> <source>Pause detection</source>
<translation type="unfinished">Pause genkendelse</translation> <translation type="unfinished">Pause genkendelse</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="491"/> <location filename="../src/GUI/optionsdialog.cpp" line="494"/>
<source>Radius:</source> <source>Radius:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="439"/> <location filename="../src/GUI/optionsdialog.cpp" line="442"/>
<source>Speed</source> <source>Speed</source>
<translation>Hastighed</translation> <translation>Hastighed</translation>
</message> </message>
@ -1402,144 +1407,144 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="477"/> <location filename="../src/GUI/optionsdialog.cpp" line="480"/>
<source>mi</source> <source>mi</source>
<translation>mil</translation> <translation>mil</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="480"/> <location filename="../src/GUI/optionsdialog.cpp" line="483"/>
<source>nmi</source> <source>nmi</source>
<translation>sømil</translation> <translation>sømil</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="483"/> <location filename="../src/GUI/optionsdialog.cpp" line="486"/>
<source>km</source> <source>km</source>
<translation>km</translation> <translation>km</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="498"/> <location filename="../src/GUI/optionsdialog.cpp" line="501"/>
<location filename="../src/GUI/optionsdialog.cpp" line="638"/> <location filename="../src/GUI/optionsdialog.cpp" line="641"/>
<source>POI</source> <source>POI</source>
<translation>IP</translation> <translation>IP</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="505"/> <location filename="../src/GUI/optionsdialog.cpp" line="508"/>
<source>WYSIWYG</source> <source>WYSIWYG</source>
<translation type="unfinished">WYSIWYG</translation> <translation type="unfinished">WYSIWYG</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="506"/> <location filename="../src/GUI/optionsdialog.cpp" line="509"/>
<source>High-Resolution</source> <source>High-Resolution</source>
<translation>Højopløsning</translation> <translation>Højopløsning</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="511"/> <location filename="../src/GUI/optionsdialog.cpp" line="514"/>
<source>The printed area is approximately the display area. The map zoom level does not change.</source> <source>The printed area is approximately the display area. The map zoom level does not change.</source>
<translation type="unfinished">Det udskrevne område er ca. det samme som visningsområdet. Kortes zoomniveau ændres ikke.</translation> <translation type="unfinished">Det udskrevne område er ca. det samme som visningsområdet. Kortes zoomniveau ændres ikke.</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="513"/> <location filename="../src/GUI/optionsdialog.cpp" line="516"/>
<source>The zoom level will be changed so that the whole content (tracks/waypoints) fits to the printed area and the map resolution is as close as possible to the print resolution.</source> <source>The zoom level will be changed so that the whole content (tracks/waypoints) fits to the printed area and the map resolution is as close as possible to the print resolution.</source>
<translation type="unfinished">Zoom-niveauet vil blive ændret, således at hele indholdet (spor/rutepunkter) passer til udskriftsområdet og kortopløsning er tæt som muligt udskriftsopløsningen.</translation> <translation type="unfinished">Zoom-niveauet vil blive ændret, således at hele indholdet (spor/rutepunkter) passer til udskriftsområdet og kortopløsning er tæt som muligt udskriftsopløsningen.</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="535"/> <location filename="../src/GUI/optionsdialog.cpp" line="538"/>
<source>Name</source> <source>Name</source>
<translation>Navn</translation> <translation>Navn</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="537"/> <location filename="../src/GUI/optionsdialog.cpp" line="540"/>
<source>Date</source> <source>Date</source>
<translation>Dato</translation> <translation>Dato</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="539"/> <location filename="../src/GUI/optionsdialog.cpp" line="542"/>
<source>Distance</source> <source>Distance</source>
<translation>Afstand</translation> <translation>Afstand</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="541"/> <location filename="../src/GUI/optionsdialog.cpp" line="544"/>
<source>Time</source> <source>Time</source>
<translation>Tid</translation> <translation>Tid</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="543"/> <location filename="../src/GUI/optionsdialog.cpp" line="546"/>
<source>Moving time</source> <source>Moving time</source>
<translation>Tid i bevægelse</translation> <translation>Tid i bevægelse</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="545"/> <location filename="../src/GUI/optionsdialog.cpp" line="548"/>
<source>Item count (&gt;1)</source> <source>Item count (&gt;1)</source>
<translation type="unfinished">Elementantal (&gt;1)</translation> <translation type="unfinished">Elementantal (&gt;1)</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="560"/> <location filename="../src/GUI/optionsdialog.cpp" line="563"/>
<source>Separate graph page</source> <source>Separate graph page</source>
<translation>Separat grafside</translation> <translation>Separat grafside</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="570"/> <location filename="../src/GUI/optionsdialog.cpp" line="573"/>
<source>Print mode</source> <source>Print mode</source>
<translation type="unfinished">Udskrivningstilstand</translation> <translation type="unfinished">Udskrivningstilstand</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="571"/> <location filename="../src/GUI/optionsdialog.cpp" line="574"/>
<source>Header</source> <source>Header</source>
<translation type="unfinished">Toptekst</translation> <translation type="unfinished">Toptekst</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="579"/> <location filename="../src/GUI/optionsdialog.cpp" line="582"/>
<source>Use OpenGL</source> <source>Use OpenGL</source>
<translation>Brug OpenGL</translation> <translation>Brug OpenGL</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="582"/> <location filename="../src/GUI/optionsdialog.cpp" line="585"/>
<source>Enable HTTP/2</source> <source>Enable HTTP/2</source>
<translation>Aktiver HTTP/2</translation> <translation>Aktiver HTTP/2</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="589"/> <location filename="../src/GUI/optionsdialog.cpp" line="592"/>
<source>MB</source> <source>MB</source>
<translation>MB</translation> <translation>MB</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="599"/> <location filename="../src/GUI/optionsdialog.cpp" line="602"/>
<source>Image cache size:</source> <source>Image cache size:</source>
<translation type="unfinished">Billed cachestørrelse:</translation> <translation type="unfinished">Billed cachestørrelse:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="600"/> <location filename="../src/GUI/optionsdialog.cpp" line="603"/>
<source>Connection timeout:</source> <source>Connection timeout:</source>
<translation>Timeout for forbindelse:</translation> <translation>Timeout for forbindelse:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="616"/> <location filename="../src/GUI/optionsdialog.cpp" line="619"/>
<location filename="../src/GUI/optionsdialog.cpp" line="641"/> <location filename="../src/GUI/optionsdialog.cpp" line="644"/>
<source>System</source> <source>System</source>
<translation>System</translation> <translation>System</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="634"/> <location filename="../src/GUI/optionsdialog.cpp" line="637"/>
<source>Appearance</source> <source>Appearance</source>
<translation>Udseende</translation> <translation>Udseende</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="636"/> <location filename="../src/GUI/optionsdialog.cpp" line="639"/>
<source>Maps</source> <source>Maps</source>
<translation>Kort</translation> <translation>Kort</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="637"/> <location filename="../src/GUI/optionsdialog.cpp" line="640"/>
<source>Data</source> <source>Data</source>
<translation>Data</translation> <translation>Data</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="639"/> <location filename="../src/GUI/optionsdialog.cpp" line="642"/>
<source>Print &amp; Export</source> <source>Print &amp; Export</source>
<translation>Udskriv &amp; eksport</translation> <translation>Udskriv &amp; eksport</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="668"/> <location filename="../src/GUI/optionsdialog.cpp" line="671"/>
<source>Options</source> <source>Options</source>
<translation>Indstillinger</translation> <translation>Indstillinger</translation>
</message> </message>

View File

@ -47,82 +47,87 @@
<context> <context>
<name>Data</name> <name>Data</name>
<message> <message>
<location filename="../src/data/data.cpp" line="176"/> <location filename="../src/data/data.cpp" line="179"/>
<source>Supported files</source> <source>Supported files</source>
<translation>Unterstützte Dateien</translation> <translation>Unterstützte Dateien</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="177"/> <location filename="../src/data/data.cpp" line="180"/>
<source>CSV files</source> <source>CSV files</source>
<translation>CSV-Dateien</translation> <translation>CSV-Dateien</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="178"/> <location filename="../src/data/data.cpp" line="181"/>
<source>CUP files</source> <source>CUP files</source>
<translation>CUP-Dateien</translation> <translation>CUP-Dateien</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="179"/> <location filename="../src/data/data.cpp" line="182"/>
<source>FIT files</source> <source>FIT files</source>
<translation>FIT-Dateien</translation> <translation>FIT-Dateien</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="181"/> <location filename="../src/data/data.cpp" line="184"/>
<source>GeoJSON files</source> <source>GeoJSON files</source>
<translation>GeoJSON-Dateien</translation> <translation>GeoJSON-Dateien</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="183"/> <location filename="../src/data/data.cpp" line="186"/>
<source>GPI files</source> <source>GPI files</source>
<translation>GPI-Dateien</translation> <translation>GPI-Dateien</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="184"/> <location filename="../src/data/data.cpp" line="187"/>
<source>GPX files</source> <source>GPX files</source>
<translation>GPX-Dateien</translation> <translation>GPX-Dateien</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="185"/> <location filename="../src/data/data.cpp" line="188"/>
<source>IGC files</source> <source>IGC files</source>
<translation>IGC-Dateien</translation> <translation>IGC-Dateien</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="186"/> <location filename="../src/data/data.cpp" line="189"/>
<source>JPEG images</source> <source>JPEG images</source>
<translation>JPEG-Bilder</translation> <translation>JPEG-Bilder</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="187"/> <location filename="../src/data/data.cpp" line="190"/>
<source>KML files</source> <source>KML files</source>
<translation>KML-Dateien</translation> <translation>KML-Dateien</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="188"/> <location filename="../src/data/data.cpp" line="191"/>
<source>LOC files</source> <source>LOC files</source>
<translation>LOC-Dateien</translation> <translation>LOC-Dateien</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="189"/> <location filename="../src/data/data.cpp" line="192"/>
<source>NMEA files</source> <source>NMEA files</source>
<translation>NMEA-Dateien</translation> <translation>NMEA-Dateien</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="190"/> <location filename="../src/data/data.cpp" line="193"/>
<source>OziExplorer files</source> <source>OziExplorer files</source>
<translation>OziExplorer-Dateien</translation> <translation>OziExplorer-Dateien</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="192"/> <location filename="../src/data/data.cpp" line="195"/>
<source>SML files</source>
<translation>SML-Dateien</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="196"/>
<source>TCX files</source> <source>TCX files</source>
<translation>TCX-Dateien</translation> <translation>TCX-Dateien</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="191"/> <location filename="../src/data/data.cpp" line="194"/>
<source>SLF files</source> <source>SLF files</source>
<translation>SLF-Dateien</translation> <translation>SLF-Dateien</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="193"/> <location filename="../src/data/data.cpp" line="197"/>
<source>All files</source> <source>All files</source>
<translation>Alle Dateien</translation> <translation>Alle Dateien</translation>
</message> </message>
@ -1130,7 +1135,7 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="295"/> <location filename="../src/GUI/optionsdialog.cpp" line="295"/>
<location filename="../src/GUI/optionsdialog.cpp" line="572"/> <location filename="../src/GUI/optionsdialog.cpp" line="575"/>
<source>Graphs</source> <source>Graphs</source>
<translation>Graphen</translation> <translation>Graphen</translation>
</message> </message>
@ -1232,14 +1237,14 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="322"/> <location filename="../src/GUI/optionsdialog.cpp" line="322"/>
<location filename="../src/GUI/optionsdialog.cpp" line="429"/> <location filename="../src/GUI/optionsdialog.cpp" line="432"/>
<location filename="../src/GUI/optionsdialog.cpp" line="492"/> <location filename="../src/GUI/optionsdialog.cpp" line="495"/>
<source>Elevation:</source> <source>Elevation:</source>
<translation>Höhe:</translation> <translation>Höhe:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="323"/> <location filename="../src/GUI/optionsdialog.cpp" line="323"/>
<location filename="../src/GUI/optionsdialog.cpp" line="428"/> <location filename="../src/GUI/optionsdialog.cpp" line="431"/>
<source>Speed:</source> <source>Speed:</source>
<translation>Geschwindigkeit:</translation> <translation>Geschwindigkeit:</translation>
</message> </message>
@ -1295,69 +1300,69 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="376"/> <location filename="../src/GUI/optionsdialog.cpp" line="376"/>
<location filename="../src/GUI/optionsdialog.cpp" line="595"/> <location filename="../src/GUI/optionsdialog.cpp" line="598"/>
<source>s</source> <source>s</source>
<translation>sek</translation> <translation>sek</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="389"/> <location filename="../src/GUI/optionsdialog.cpp" line="392"/>
<source>Minimal speed:</source> <source>Minimal speed:</source>
<translation>Minimale Geschwindigkeit:</translation> <translation>Minimale Geschwindigkeit:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="390"/> <location filename="../src/GUI/optionsdialog.cpp" line="393"/>
<source>Minimal duration:</source> <source>Minimal duration:</source>
<translation>Minimale Dauer:</translation> <translation>Minimale Dauer:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="400"/> <location filename="../src/GUI/optionsdialog.cpp" line="403"/>
<source>Computed from distance/time</source> <source>Computed from distance/time</source>
<translation>Berechnet aus Entfernung/Zeit</translation> <translation>Berechnet aus Entfernung/Zeit</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="401"/> <location filename="../src/GUI/optionsdialog.cpp" line="404"/>
<source>Recorded by device</source> <source>Recorded by device</source>
<translation>Aufgezeichnet von Gerät</translation> <translation>Aufgezeichnet von Gerät</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="407"/> <location filename="../src/GUI/optionsdialog.cpp" line="410"/>
<location filename="../src/GUI/optionsdialog.cpp" line="465"/> <location filename="../src/GUI/optionsdialog.cpp" line="468"/>
<source>GPS data</source> <source>GPS data</source>
<translation>GPS-Daten</translation> <translation>GPS-Daten</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="408"/> <location filename="../src/GUI/optionsdialog.cpp" line="411"/>
<location filename="../src/GUI/optionsdialog.cpp" line="466"/> <location filename="../src/GUI/optionsdialog.cpp" line="469"/>
<source>DEM data</source> <source>DEM data</source>
<translation>DEM-Daten</translation> <translation>DEM-Daten</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="445"/> <location filename="../src/GUI/optionsdialog.cpp" line="448"/>
<source>Elevation</source> <source>Elevation</source>
<translation>Höhe</translation> <translation>Höhe</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="456"/> <location filename="../src/GUI/optionsdialog.cpp" line="459"/>
<source>Filtering</source> <source>Filtering</source>
<translation>Datenfilterung</translation> <translation>Datenfilterung</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="457"/> <location filename="../src/GUI/optionsdialog.cpp" line="460"/>
<source>Sources</source> <source>Sources</source>
<translation>Datenquellen</translation> <translation>Datenquellen</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="458"/> <location filename="../src/GUI/optionsdialog.cpp" line="461"/>
<source>Pause detection</source> <source>Pause detection</source>
<translation>Pausenerkennung</translation> <translation>Pausenerkennung</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="491"/> <location filename="../src/GUI/optionsdialog.cpp" line="494"/>
<source>Radius:</source> <source>Radius:</source>
<translation>Radius:</translation> <translation>Radius:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="439"/> <location filename="../src/GUI/optionsdialog.cpp" line="442"/>
<source>Speed</source> <source>Speed</source>
<translation>Geschwindigkeit</translation> <translation>Geschwindigkeit</translation>
</message> </message>
@ -1402,144 +1407,144 @@
<translation>Benutzerdefiniert</translation> <translation>Benutzerdefiniert</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="477"/> <location filename="../src/GUI/optionsdialog.cpp" line="480"/>
<source>mi</source> <source>mi</source>
<translation>mi</translation> <translation>mi</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="480"/> <location filename="../src/GUI/optionsdialog.cpp" line="483"/>
<source>nmi</source> <source>nmi</source>
<translation>nmi</translation> <translation>nmi</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="483"/> <location filename="../src/GUI/optionsdialog.cpp" line="486"/>
<source>km</source> <source>km</source>
<translation>km</translation> <translation>km</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="498"/> <location filename="../src/GUI/optionsdialog.cpp" line="501"/>
<location filename="../src/GUI/optionsdialog.cpp" line="638"/> <location filename="../src/GUI/optionsdialog.cpp" line="641"/>
<source>POI</source> <source>POI</source>
<translation>POI</translation> <translation>POI</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="505"/> <location filename="../src/GUI/optionsdialog.cpp" line="508"/>
<source>WYSIWYG</source> <source>WYSIWYG</source>
<translation>WYSIWYG</translation> <translation>WYSIWYG</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="506"/> <location filename="../src/GUI/optionsdialog.cpp" line="509"/>
<source>High-Resolution</source> <source>High-Resolution</source>
<translation>Hohe Auflösung</translation> <translation>Hohe Auflösung</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="511"/> <location filename="../src/GUI/optionsdialog.cpp" line="514"/>
<source>The printed area is approximately the display area. The map zoom level does not change.</source> <source>The printed area is approximately the display area. The map zoom level does not change.</source>
<translation>Der Druckbereich entspricht ungefähr dem Anzeigebereich. Das Karten-Zoom ändert sich nicht.</translation> <translation>Der Druckbereich entspricht ungefähr dem Anzeigebereich. Das Karten-Zoom ändert sich nicht.</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="513"/> <location filename="../src/GUI/optionsdialog.cpp" line="516"/>
<source>The zoom level will be changed so that the whole content (tracks/waypoints) fits to the printed area and the map resolution is as close as possible to the print resolution.</source> <source>The zoom level will be changed so that the whole content (tracks/waypoints) fits to the printed area and the map resolution is as close as possible to the print resolution.</source>
<translation>Das Karten-Zoom ändert sich so, dass der ganze Inhalt (Strecken/Wegpunkte) in den Druckbereich passen und die Kartenauflösung so nah wie möglich an der Druckauflösung ist.</translation> <translation>Das Karten-Zoom ändert sich so, dass der ganze Inhalt (Strecken/Wegpunkte) in den Druckbereich passen und die Kartenauflösung so nah wie möglich an der Druckauflösung ist.</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="535"/> <location filename="../src/GUI/optionsdialog.cpp" line="538"/>
<source>Name</source> <source>Name</source>
<translation>Name</translation> <translation>Name</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="537"/> <location filename="../src/GUI/optionsdialog.cpp" line="540"/>
<source>Date</source> <source>Date</source>
<translation>Datum</translation> <translation>Datum</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="539"/> <location filename="../src/GUI/optionsdialog.cpp" line="542"/>
<source>Distance</source> <source>Distance</source>
<translation>Distanz</translation> <translation>Distanz</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="541"/> <location filename="../src/GUI/optionsdialog.cpp" line="544"/>
<source>Time</source> <source>Time</source>
<translation>Zeit</translation> <translation>Zeit</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="543"/> <location filename="../src/GUI/optionsdialog.cpp" line="546"/>
<source>Moving time</source> <source>Moving time</source>
<translation>Bewegungszeit</translation> <translation>Bewegungszeit</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="545"/> <location filename="../src/GUI/optionsdialog.cpp" line="548"/>
<source>Item count (&gt;1)</source> <source>Item count (&gt;1)</source>
<translation>Elementanzahl (&gt;1)</translation> <translation>Elementanzahl (&gt;1)</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="560"/> <location filename="../src/GUI/optionsdialog.cpp" line="563"/>
<source>Separate graph page</source> <source>Separate graph page</source>
<translation>Separate Seite für Graphen</translation> <translation>Separate Seite für Graphen</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="570"/> <location filename="../src/GUI/optionsdialog.cpp" line="573"/>
<source>Print mode</source> <source>Print mode</source>
<translation>Druckmodus</translation> <translation>Druckmodus</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="571"/> <location filename="../src/GUI/optionsdialog.cpp" line="574"/>
<source>Header</source> <source>Header</source>
<translation>Kopfzeile</translation> <translation>Kopfzeile</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="579"/> <location filename="../src/GUI/optionsdialog.cpp" line="582"/>
<source>Use OpenGL</source> <source>Use OpenGL</source>
<translation>OpenGL verwenden</translation> <translation>OpenGL verwenden</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="582"/> <location filename="../src/GUI/optionsdialog.cpp" line="585"/>
<source>Enable HTTP/2</source> <source>Enable HTTP/2</source>
<translation>HTTP/2 verwenden</translation> <translation>HTTP/2 verwenden</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="589"/> <location filename="../src/GUI/optionsdialog.cpp" line="592"/>
<source>MB</source> <source>MB</source>
<translation>MB</translation> <translation>MB</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="599"/> <location filename="../src/GUI/optionsdialog.cpp" line="602"/>
<source>Image cache size:</source> <source>Image cache size:</source>
<translation>Bild-Cachegröße:</translation> <translation>Bild-Cachegröße:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="600"/> <location filename="../src/GUI/optionsdialog.cpp" line="603"/>
<source>Connection timeout:</source> <source>Connection timeout:</source>
<translation>Verbindungs-Timeout:</translation> <translation>Verbindungs-Timeout:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="616"/> <location filename="../src/GUI/optionsdialog.cpp" line="619"/>
<location filename="../src/GUI/optionsdialog.cpp" line="641"/> <location filename="../src/GUI/optionsdialog.cpp" line="644"/>
<source>System</source> <source>System</source>
<translation>System</translation> <translation>System</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="634"/> <location filename="../src/GUI/optionsdialog.cpp" line="637"/>
<source>Appearance</source> <source>Appearance</source>
<translation>Erscheinungsbild</translation> <translation>Erscheinungsbild</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="636"/> <location filename="../src/GUI/optionsdialog.cpp" line="639"/>
<source>Maps</source> <source>Maps</source>
<translation>Karten</translation> <translation>Karten</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="637"/> <location filename="../src/GUI/optionsdialog.cpp" line="640"/>
<source>Data</source> <source>Data</source>
<translation>Daten</translation> <translation>Daten</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="639"/> <location filename="../src/GUI/optionsdialog.cpp" line="642"/>
<source>Print &amp; Export</source> <source>Print &amp; Export</source>
<translation>Druck / Export</translation> <translation>Druck / Export</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="668"/> <location filename="../src/GUI/optionsdialog.cpp" line="671"/>
<source>Options</source> <source>Options</source>
<translation>Einstellungen</translation> <translation>Einstellungen</translation>
</message> </message>

View File

@ -47,82 +47,87 @@
<context> <context>
<name>Data</name> <name>Data</name>
<message> <message>
<location filename="../src/data/data.cpp" line="176"/> <location filename="../src/data/data.cpp" line="179"/>
<source>Supported files</source> <source>Supported files</source>
<translation>Formatos soportados</translation> <translation>Formatos admitidos</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="177"/> <location filename="../src/data/data.cpp" line="180"/>
<source>CSV files</source> <source>CSV files</source>
<translation>Archivos CSV</translation> <translation>Archivos CSV</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="178"/> <location filename="../src/data/data.cpp" line="181"/>
<source>CUP files</source> <source>CUP files</source>
<translation type="unfinished"></translation> <translation>Archivos CUP</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="179"/> <location filename="../src/data/data.cpp" line="182"/>
<source>FIT files</source> <source>FIT files</source>
<translation>Archivos FIT</translation> <translation>Archivos FIT</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="181"/> <location filename="../src/data/data.cpp" line="184"/>
<source>GeoJSON files</source> <source>GeoJSON files</source>
<translation>Archivos GeoJSON</translation> <translation>Archivos GeoJSON</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="183"/> <location filename="../src/data/data.cpp" line="186"/>
<source>GPI files</source> <source>GPI files</source>
<translation type="unfinished"></translation> <translation>Archivos GPI</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="184"/> <location filename="../src/data/data.cpp" line="187"/>
<source>GPX files</source> <source>GPX files</source>
<translation>Archivos GPX</translation> <translation>Archivos GPX</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="185"/> <location filename="../src/data/data.cpp" line="188"/>
<source>IGC files</source> <source>IGC files</source>
<translation>Archivos IGC</translation> <translation>Archivos IGC</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="186"/> <location filename="../src/data/data.cpp" line="189"/>
<source>JPEG images</source> <source>JPEG images</source>
<translation>Imagen JPEG</translation> <translation>Imágenes JPEG</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="187"/> <location filename="../src/data/data.cpp" line="190"/>
<source>KML files</source> <source>KML files</source>
<translation>Archivos KML</translation> <translation>Archivos KML</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="188"/> <location filename="../src/data/data.cpp" line="191"/>
<source>LOC files</source> <source>LOC files</source>
<translation>Archivos LOC</translation> <translation>Archivos LOC</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="189"/> <location filename="../src/data/data.cpp" line="192"/>
<source>NMEA files</source> <source>NMEA files</source>
<translation>Archivos NMEA</translation> <translation>Archivos NMEA</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="190"/> <location filename="../src/data/data.cpp" line="193"/>
<source>OziExplorer files</source> <source>OziExplorer files</source>
<translation>Archivos OziExplorer</translation> <translation>Archivos OziExplorer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="191"/> <location filename="../src/data/data.cpp" line="194"/>
<source>SLF files</source> <source>SLF files</source>
<translation>Archivos SLF</translation> <translation>Archivos SLF</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="192"/> <location filename="../src/data/data.cpp" line="195"/>
<source>SML files</source>
<translation>Archivos SML</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="196"/>
<source>TCX files</source> <source>TCX files</source>
<translation>Archivos TCX</translation> <translation>Archivos TCX</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="193"/> <location filename="../src/data/data.cpp" line="197"/>
<source>All files</source> <source>All files</source>
<translation>Todos los archivos</translation> <translation>Todos los archivos</translation>
</message> </message>
@ -163,7 +168,7 @@
<message> <message>
<location filename="../src/GUI/elevationgraph.cpp" line="144"/> <location filename="../src/GUI/elevationgraph.cpp" line="144"/>
<source>ft</source> <source>ft</source>
<translation>pies</translation> <translation>ft</translation>
</message> </message>
</context> </context>
<context> <context>
@ -176,7 +181,7 @@
<message> <message>
<location filename="../src/GUI/elevationgraphitem.cpp" line="33"/> <location filename="../src/GUI/elevationgraphitem.cpp" line="33"/>
<source>ft</source> <source>ft</source>
<translation></translation> <translation>ft</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/elevationgraphitem.cpp" line="36"/> <location filename="../src/GUI/elevationgraphitem.cpp" line="36"/>
@ -229,7 +234,7 @@
<message> <message>
<location filename="../src/GUI/exportdialog.cpp" line="66"/> <location filename="../src/GUI/exportdialog.cpp" line="66"/>
<source>in</source> <source>in</source>
<translation></translation> <translation>in</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/exportdialog.cpp" line="94"/> <location filename="../src/GUI/exportdialog.cpp" line="94"/>
@ -296,7 +301,7 @@
<message> <message>
<location filename="../src/GUI/exportdialog.cpp" line="157"/> <location filename="../src/GUI/exportdialog.cpp" line="157"/>
<source>%1 is not writable.</source> <source>%1 is not writable.</source>
<translation>%1 es de sólo lectura.</translation> <translation>%1 es de solo lectura.</translation>
</message> </message>
</context> </context>
<context> <context>
@ -314,7 +319,7 @@
<location filename="../src/GUI/format.cpp" line="61"/> <location filename="../src/GUI/format.cpp" line="61"/>
<location filename="../src/GUI/format.cpp" line="84"/> <location filename="../src/GUI/format.cpp" line="84"/>
<source>ft</source> <source>ft</source>
<translation></translation> <translation>ft</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/format.cpp" line="57"/> <location filename="../src/GUI/format.cpp" line="57"/>
@ -398,17 +403,17 @@
<message> <message>
<location filename="../src/GUI/gui.cpp" line="256"/> <location filename="../src/GUI/gui.cpp" line="256"/>
<source>Load POI file...</source> <source>Load POI file...</source>
<translation>Cargar archivo de POI&apos;s...</translation> <translation>Cargar archivo de POI...</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="260"/> <location filename="../src/GUI/gui.cpp" line="260"/>
<source>Close POI files</source> <source>Close POI files</source>
<translation>Cerrar archivo de POI&apos;s</translation> <translation>Cerrar archivos de POI</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="264"/> <location filename="../src/GUI/gui.cpp" line="264"/>
<source>Overlap POIs</source> <source>Overlap POIs</source>
<translation>Sobrescribir POI&apos;s</translation> <translation>Sobreponer POI</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="269"/> <location filename="../src/GUI/gui.cpp" line="269"/>
@ -418,7 +423,7 @@
<message> <message>
<location filename="../src/GUI/gui.cpp" line="274"/> <location filename="../src/GUI/gui.cpp" line="274"/>
<source>Show POIs</source> <source>Show POIs</source>
<translation>Ver POI&apos;s</translation> <translation>Ver POI</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="284"/> <location filename="../src/GUI/gui.cpp" line="284"/>
@ -433,7 +438,7 @@
<message> <message>
<location filename="../src/GUI/gui.cpp" line="296"/> <location filename="../src/GUI/gui.cpp" line="296"/>
<source>Clear tile cache</source> <source>Clear tile cache</source>
<translation>Limpiar cache de teselas</translation> <translation>Limpiar antememoria de teselas</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="301"/> <location filename="../src/GUI/gui.cpp" line="301"/>
@ -450,7 +455,7 @@
<message> <message>
<location filename="../src/GUI/gui.cpp" line="322"/> <location filename="../src/GUI/gui.cpp" line="322"/>
<source>Show tracks</source> <source>Show tracks</source>
<translation>Ver tracks</translation> <translation>Ver pistas</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="327"/> <location filename="../src/GUI/gui.cpp" line="327"/>
@ -460,7 +465,7 @@
<message> <message>
<location filename="../src/GUI/gui.cpp" line="332"/> <location filename="../src/GUI/gui.cpp" line="332"/>
<source>Show waypoints</source> <source>Show waypoints</source>
<translation>Ver waypoints</translation> <translation>Ver puntos de referencia</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="337"/> <location filename="../src/GUI/gui.cpp" line="337"/>
@ -475,12 +480,12 @@
<message> <message>
<location filename="../src/GUI/gui.cpp" line="347"/> <location filename="../src/GUI/gui.cpp" line="347"/>
<source>Route waypoints</source> <source>Route waypoints</source>
<translation>Waypoints de ruta</translation> <translation>Puntos de referencia de ruta</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="352"/> <location filename="../src/GUI/gui.cpp" line="352"/>
<source>km/mi markers</source> <source>km/mi markers</source>
<translation type="unfinished"></translation> <translation>Hitos kilométricos o cada milla</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="359"/> <location filename="../src/GUI/gui.cpp" line="359"/>
@ -617,7 +622,7 @@
<message> <message>
<location filename="../src/GUI/gui.cpp" line="529"/> <location filename="../src/GUI/gui.cpp" line="529"/>
<source>POI files</source> <source>POI files</source>
<translation>Archivos de POI&apos;s</translation> <translation>Archivos de POI</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="540"/> <location filename="../src/GUI/gui.cpp" line="540"/>
@ -722,22 +727,22 @@
<message> <message>
<location filename="../src/GUI/gui.cpp" line="707"/> <location filename="../src/GUI/gui.cpp" line="707"/>
<source>Zoom in</source> <source>Zoom in</source>
<translation>Zoom +</translation> <translation>Acercar</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="709"/> <location filename="../src/GUI/gui.cpp" line="709"/>
<source>Zoom out</source> <source>Zoom out</source>
<translation>Zoom -</translation> <translation>Alejar</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="711"/> <location filename="../src/GUI/gui.cpp" line="711"/>
<source>Digital zoom</source> <source>Digital zoom</source>
<translation>Zoom digital</translation> <translation>Escala digital</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="712"/> <location filename="../src/GUI/gui.cpp" line="712"/>
<source>Zoom</source> <source>Zoom</source>
<translation>Zoom</translation> <translation>Escala</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="725"/> <location filename="../src/GUI/gui.cpp" line="725"/>
@ -747,7 +752,7 @@
<message> <message>
<location filename="../src/GUI/gui.cpp" line="727"/> <location filename="../src/GUI/gui.cpp" line="727"/>
<source>POI directory:</source> <source>POI directory:</source>
<translation>Carpeta de POIs:</translation> <translation>Carpeta de POI:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="729"/> <location filename="../src/GUI/gui.cpp" line="729"/>
@ -762,7 +767,7 @@
<message> <message>
<location filename="../src/GUI/gui.cpp" line="733"/> <location filename="../src/GUI/gui.cpp" line="733"/>
<source>Styles directory:</source> <source>Styles directory:</source>
<translation type="unfinished"></translation> <translation>Directorio de estilos:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="735"/> <location filename="../src/GUI/gui.cpp" line="735"/>
@ -783,17 +788,17 @@
<location filename="../src/GUI/gui.cpp" line="842"/> <location filename="../src/GUI/gui.cpp" line="842"/>
<location filename="../src/GUI/gui.cpp" line="877"/> <location filename="../src/GUI/gui.cpp" line="877"/>
<source>Line: %1</source> <source>Line: %1</source>
<translation>Linea: %1</translation> <translation>Renglón: %1</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="850"/> <location filename="../src/GUI/gui.cpp" line="850"/>
<source>Open POI file</source> <source>Open POI file</source>
<translation>Cargar archivo de POI&apos;s</translation> <translation>Cargar archivo de POI</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="874"/> <location filename="../src/GUI/gui.cpp" line="874"/>
<source>Error loading POI file:</source> <source>Error loading POI file:</source>
<translation>Error cargando archivo de POI&apos;s:</translation> <translation>Error al cargar el archivo de POI:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1028"/> <location filename="../src/GUI/gui.cpp" line="1028"/>
@ -811,7 +816,7 @@
<location filename="../src/GUI/gui.cpp" line="1034"/> <location filename="../src/GUI/gui.cpp" line="1034"/>
<location filename="../src/GUI/gui.cpp" line="1103"/> <location filename="../src/GUI/gui.cpp" line="1103"/>
<source>Waypoints</source> <source>Waypoints</source>
<translation>Waypoints</translation> <translation>Puntos de referencia</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1037"/> <location filename="../src/GUI/gui.cpp" line="1037"/>
@ -846,7 +851,7 @@
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1336"/> <location filename="../src/GUI/gui.cpp" line="1336"/>
<source>Error loading map:</source> <source>Error loading map:</source>
<translation>Error cargando archivo de mapa:</translation> <translation>Error al cargar el archivo de mapa:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1347"/> <location filename="../src/GUI/gui.cpp" line="1347"/>
@ -873,7 +878,7 @@
<message> <message>
<location filename="../src/GUI/gearratiograph.cpp" line="27"/> <location filename="../src/GUI/gearratiograph.cpp" line="27"/>
<source>Most used</source> <source>Most used</source>
<translation>Mas usada</translation> <translation>Más usada</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gearratiograph.cpp" line="29"/> <location filename="../src/GUI/gearratiograph.cpp" line="29"/>
@ -909,7 +914,7 @@
<message> <message>
<location filename="../src/GUI/graphview.cpp" line="46"/> <location filename="../src/GUI/graphview.cpp" line="46"/>
<source>Data not available</source> <source>Data not available</source>
<translation>Sin datos</translation> <translation>Sin datos disponibles</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/graphview.cpp" line="66"/> <location filename="../src/GUI/graphview.cpp" line="66"/>
@ -921,7 +926,7 @@
<location filename="../src/GUI/graphview.cpp" line="110"/> <location filename="../src/GUI/graphview.cpp" line="110"/>
<location filename="../src/GUI/graphview.cpp" line="118"/> <location filename="../src/GUI/graphview.cpp" line="118"/>
<source>ft</source> <source>ft</source>
<translation></translation> <translation>ft</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/graphview.cpp" line="113"/> <location filename="../src/GUI/graphview.cpp" line="113"/>
@ -1012,7 +1017,7 @@
<message> <message>
<location filename="../src/map/maplist.cpp" line="121"/> <location filename="../src/map/maplist.cpp" line="121"/>
<source>Supported files</source> <source>Supported files</source>
<translation>Formatos soportados</translation> <translation>Formatos admitidos</translation>
</message> </message>
<message> <message>
<location filename="../src/map/maplist.cpp" line="126"/> <location filename="../src/map/maplist.cpp" line="126"/>
@ -1027,7 +1032,7 @@
<message> <message>
<location filename="../src/map/maplist.cpp" line="123"/> <location filename="../src/map/maplist.cpp" line="123"/>
<source>Garmin IMG maps</source> <source>Garmin IMG maps</source>
<translation type="unfinished"></translation> <translation>Mapas Garmin IMG</translation>
</message> </message>
<message> <message>
<location filename="../src/map/maplist.cpp" line="125"/> <location filename="../src/map/maplist.cpp" line="125"/>
@ -1042,7 +1047,7 @@
<message> <message>
<location filename="../src/map/maplist.cpp" line="128"/> <location filename="../src/map/maplist.cpp" line="128"/>
<source>GeoTIFF images</source> <source>GeoTIFF images</source>
<translation>Imagenes GeoTIFF</translation> <translation>Imágenes GeoTIFF</translation>
</message> </message>
<message> <message>
<location filename="../src/map/maplist.cpp" line="129"/> <location filename="../src/map/maplist.cpp" line="129"/>
@ -1052,7 +1057,7 @@
<message> <message>
<location filename="../src/map/maplist.cpp" line="130"/> <location filename="../src/map/maplist.cpp" line="130"/>
<source>Online map sources</source> <source>Online map sources</source>
<translation>Mapas Online</translation> <translation>Fuentes de mapas en nea</translation>
</message> </message>
</context> </context>
<context> <context>
@ -1060,12 +1065,12 @@
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="61"/> <location filename="../src/GUI/optionsdialog.cpp" line="61"/>
<source>High-resolution</source> <source>High-resolution</source>
<translation>Alta resolución</translation> <translation>Resolución alta</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="62"/> <location filename="../src/GUI/optionsdialog.cpp" line="62"/>
<source>Standard</source> <source>Standard</source>
<translation>Estandar</translation> <translation>Estándar</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="67"/> <location filename="../src/GUI/optionsdialog.cpp" line="67"/>
@ -1100,12 +1105,12 @@
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="80"/> <location filename="../src/GUI/optionsdialog.cpp" line="80"/>
<source>Projection:</source> <source>Projection:</source>
<translation type="unfinished"></translation> <translation>Proyección:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="102"/> <location filename="../src/GUI/optionsdialog.cpp" line="102"/>
<source>Vector maps</source> <source>Vector maps</source>
<translation type="unfinished"></translation> <translation>Mapas vectoriales</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="121"/> <location filename="../src/GUI/optionsdialog.cpp" line="121"/>
@ -1180,12 +1185,12 @@
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="211"/> <location filename="../src/GUI/optionsdialog.cpp" line="211"/>
<source>Waypoint color:</source> <source>Waypoint color:</source>
<translation>Color de waypoints:</translation> <translation>Color de puntos de referencia:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="212"/> <location filename="../src/GUI/optionsdialog.cpp" line="212"/>
<source>Waypoint size:</source> <source>Waypoint size:</source>
<translation>Tamaño de wapoints:</translation> <translation>Tamaño de puntos de referencia:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="214"/> <location filename="../src/GUI/optionsdialog.cpp" line="214"/>
@ -1202,27 +1207,27 @@
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="216"/> <location filename="../src/GUI/optionsdialog.cpp" line="216"/>
<source>Waypoints</source> <source>Waypoints</source>
<translation>Waypoints</translation> <translation>Puntos de referencia</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="227"/> <location filename="../src/GUI/optionsdialog.cpp" line="227"/>
<source>POI color:</source> <source>POI color:</source>
<translation>Color de POI&apos;s:</translation> <translation>Color de POI:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="228"/> <location filename="../src/GUI/optionsdialog.cpp" line="228"/>
<source>POI size:</source> <source>POI size:</source>
<translation>Tamaño de POI&apos;s:</translation> <translation>Tamaño de POI:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="232"/> <location filename="../src/GUI/optionsdialog.cpp" line="232"/>
<source>POIs</source> <source>POIs</source>
<translation>POI&apos;s</translation> <translation>POI</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="258"/> <location filename="../src/GUI/optionsdialog.cpp" line="258"/>
<source>Line width:</source> <source>Line width:</source>
<translation>Anchura de linea:</translation> <translation>Anchura de línea:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="259"/> <location filename="../src/GUI/optionsdialog.cpp" line="259"/>
@ -1251,7 +1256,7 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="295"/> <location filename="../src/GUI/optionsdialog.cpp" line="295"/>
<location filename="../src/GUI/optionsdialog.cpp" line="572"/> <location filename="../src/GUI/optionsdialog.cpp" line="575"/>
<source>Graphs</source> <source>Graphs</source>
<translation>Gráficas</translation> <translation>Gráficas</translation>
</message> </message>
@ -1267,14 +1272,14 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="322"/> <location filename="../src/GUI/optionsdialog.cpp" line="322"/>
<location filename="../src/GUI/optionsdialog.cpp" line="429"/> <location filename="../src/GUI/optionsdialog.cpp" line="432"/>
<location filename="../src/GUI/optionsdialog.cpp" line="492"/> <location filename="../src/GUI/optionsdialog.cpp" line="495"/>
<source>Elevation:</source> <source>Elevation:</source>
<translation>Altitud:</translation> <translation>Altitud:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="323"/> <location filename="../src/GUI/optionsdialog.cpp" line="323"/>
<location filename="../src/GUI/optionsdialog.cpp" line="428"/> <location filename="../src/GUI/optionsdialog.cpp" line="431"/>
<source>Speed:</source> <source>Speed:</source>
<translation>Velocidad:</translation> <translation>Velocidad:</translation>
</message> </message>
@ -1311,7 +1316,7 @@
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="352"/> <location filename="../src/GUI/optionsdialog.cpp" line="352"/>
<source>Automatic</source> <source>Automatic</source>
<translation type="unfinished"></translation> <translation>Automática</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="366"/> <location filename="../src/GUI/optionsdialog.cpp" line="366"/>
@ -1330,216 +1335,216 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="376"/> <location filename="../src/GUI/optionsdialog.cpp" line="376"/>
<location filename="../src/GUI/optionsdialog.cpp" line="595"/> <location filename="../src/GUI/optionsdialog.cpp" line="598"/>
<source>s</source> <source>s</source>
<translation>s</translation> <translation>s</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="389"/> <location filename="../src/GUI/optionsdialog.cpp" line="392"/>
<source>Minimal speed:</source> <source>Minimal speed:</source>
<translation>Velocidad mínima:</translation> <translation>Velocidad mínima:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="390"/> <location filename="../src/GUI/optionsdialog.cpp" line="393"/>
<source>Minimal duration:</source> <source>Minimal duration:</source>
<translation>Duración mínima:</translation> <translation>Duración mínima:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="400"/> <location filename="../src/GUI/optionsdialog.cpp" line="403"/>
<source>Computed from distance/time</source> <source>Computed from distance/time</source>
<translation>Calculado con distancia/tiempo</translation> <translation>Calculado con distancia/tiempo</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="401"/> <location filename="../src/GUI/optionsdialog.cpp" line="404"/>
<source>Recorded by device</source> <source>Recorded by device</source>
<translation>Grabado por el dispositivo</translation> <translation>Grabado por el dispositivo</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="407"/> <location filename="../src/GUI/optionsdialog.cpp" line="410"/>
<location filename="../src/GUI/optionsdialog.cpp" line="465"/> <location filename="../src/GUI/optionsdialog.cpp" line="468"/>
<source>GPS data</source> <source>GPS data</source>
<translation>Datos GPS</translation> <translation>Datos GPS</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="408"/> <location filename="../src/GUI/optionsdialog.cpp" line="411"/>
<location filename="../src/GUI/optionsdialog.cpp" line="466"/> <location filename="../src/GUI/optionsdialog.cpp" line="469"/>
<source>DEM data</source> <source>DEM data</source>
<translation>Datos del MDT</translation> <translation>Datos del MDT</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="445"/> <location filename="../src/GUI/optionsdialog.cpp" line="448"/>
<source>Elevation</source> <source>Elevation</source>
<translation>Altitud</translation> <translation>Altitud</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="456"/> <location filename="../src/GUI/optionsdialog.cpp" line="459"/>
<source>Filtering</source> <source>Filtering</source>
<translation>Filtrado</translation> <translation>Filtrado</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="457"/> <location filename="../src/GUI/optionsdialog.cpp" line="460"/>
<source>Sources</source> <source>Sources</source>
<translation>Fuentes</translation> <translation>Fuentes</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="458"/> <location filename="../src/GUI/optionsdialog.cpp" line="461"/>
<source>Pause detection</source> <source>Pause detection</source>
<translation>Detectar paradas</translation> <translation>Detectar paradas</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="491"/> <location filename="../src/GUI/optionsdialog.cpp" line="494"/>
<source>Radius:</source> <source>Radius:</source>
<translation>Radio:</translation> <translation>Radio:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="439"/> <location filename="../src/GUI/optionsdialog.cpp" line="442"/>
<source>Speed</source> <source>Speed</source>
<translation>Velocidad</translation> <translation>Velocidad</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="353"/> <location filename="../src/GUI/optionsdialog.cpp" line="353"/>
<source>Custom</source> <source>Custom</source>
<translation type="unfinished"></translation> <translation>Personalizada</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="477"/> <location filename="../src/GUI/optionsdialog.cpp" line="480"/>
<source>mi</source> <source>mi</source>
<translation>mi</translation> <translation>mi</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="480"/> <location filename="../src/GUI/optionsdialog.cpp" line="483"/>
<source>nmi</source> <source>nmi</source>
<translation>nmi</translation> <translation>nmi</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="483"/> <location filename="../src/GUI/optionsdialog.cpp" line="486"/>
<source>km</source> <source>km</source>
<translation>km</translation> <translation>km</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="498"/> <location filename="../src/GUI/optionsdialog.cpp" line="501"/>
<location filename="../src/GUI/optionsdialog.cpp" line="638"/> <location filename="../src/GUI/optionsdialog.cpp" line="641"/>
<source>POI</source> <source>POI</source>
<translation>POI</translation> <translation>POI</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="505"/> <location filename="../src/GUI/optionsdialog.cpp" line="508"/>
<source>WYSIWYG</source> <source>WYSIWYG</source>
<translation>WYSIWYG</translation> <translation>WYSIWYG</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="506"/> <location filename="../src/GUI/optionsdialog.cpp" line="509"/>
<source>High-Resolution</source> <source>High-Resolution</source>
<translation>Alta resolución</translation> <translation>Resolución alta</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="511"/> <location filename="../src/GUI/optionsdialog.cpp" line="514"/>
<source>The printed area is approximately the display area. The map zoom level does not change.</source> <source>The printed area is approximately the display area. The map zoom level does not change.</source>
<translation>El área que se imprime es la que muestra la pantalla. El zoom del mapa no cambiará.</translation> <translation>El área que se imprime es aproximadamente la que muestra la pantalla. La escala del mapa no cambiará.</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="513"/> <location filename="../src/GUI/optionsdialog.cpp" line="516"/>
<source>The zoom level will be changed so that the whole content (tracks/waypoints) fits to the printed area and the map resolution is as close as possible to the print resolution.</source> <source>The zoom level will be changed so that the whole content (tracks/waypoints) fits to the printed area and the map resolution is as close as possible to the print resolution.</source>
<translation>El zoom del mapa se cambia para que el area impresa se ajuste a todos los elementos( tracks, waypoints...) y la resolución sea lo mas próxima posible a la de impresión.</translation> <translation>La escala del mapa se cambia para que el área impresa se ajuste a todos los elementos (pistas, puntos de referencia...) y la resolución sea lo mas próxima posible a la de impresión.</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="535"/> <location filename="../src/GUI/optionsdialog.cpp" line="538"/>
<source>Name</source> <source>Name</source>
<translation>Nombre</translation> <translation>Nombre</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="537"/> <location filename="../src/GUI/optionsdialog.cpp" line="540"/>
<source>Date</source> <source>Date</source>
<translation>Fecha</translation> <translation>Fecha</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="539"/> <location filename="../src/GUI/optionsdialog.cpp" line="542"/>
<source>Distance</source> <source>Distance</source>
<translation>Distancia</translation> <translation>Distancia</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="541"/> <location filename="../src/GUI/optionsdialog.cpp" line="544"/>
<source>Time</source> <source>Time</source>
<translation>Hora</translation> <translation>Hora</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="543"/> <location filename="../src/GUI/optionsdialog.cpp" line="546"/>
<source>Moving time</source> <source>Moving time</source>
<translation>Tiempo en movimiento</translation> <translation>Tiempo en movimiento</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="545"/> <location filename="../src/GUI/optionsdialog.cpp" line="548"/>
<source>Item count (&gt;1)</source> <source>Item count (&gt;1)</source>
<translation>Recuento de elementos (&gt;1)</translation> <translation>Recuento de elementos (&gt;1)</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="560"/> <location filename="../src/GUI/optionsdialog.cpp" line="563"/>
<source>Separate graph page</source> <source>Separate graph page</source>
<translation>Pagina de gráficas separada</translation> <translation>Pagina de gráficas separada</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="570"/> <location filename="../src/GUI/optionsdialog.cpp" line="573"/>
<source>Print mode</source> <source>Print mode</source>
<translation>Modo de impresión</translation> <translation>Modo de impresión</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="571"/> <location filename="../src/GUI/optionsdialog.cpp" line="574"/>
<source>Header</source> <source>Header</source>
<translation>Titulo</translation> <translation>Titulo</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="579"/> <location filename="../src/GUI/optionsdialog.cpp" line="582"/>
<source>Use OpenGL</source> <source>Use OpenGL</source>
<translation>Usar OpenGL</translation> <translation>Usar OpenGL</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="582"/> <location filename="../src/GUI/optionsdialog.cpp" line="585"/>
<source>Enable HTTP/2</source> <source>Enable HTTP/2</source>
<translation>Habilitar HTTP/2</translation> <translation>Activar HTTP/2</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="589"/> <location filename="../src/GUI/optionsdialog.cpp" line="592"/>
<source>MB</source> <source>MB</source>
<translation>Mo</translation> <translation>MB</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="599"/> <location filename="../src/GUI/optionsdialog.cpp" line="602"/>
<source>Image cache size:</source> <source>Image cache size:</source>
<translation>Tamaño del cache de imágenes:</translation> <translation>Tamaño de antememoria de imágenes:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="600"/> <location filename="../src/GUI/optionsdialog.cpp" line="603"/>
<source>Connection timeout:</source> <source>Connection timeout:</source>
<translation>Caducidad de la conexión:</translation> <translation>Caducidad de la conexión:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="616"/> <location filename="../src/GUI/optionsdialog.cpp" line="619"/>
<location filename="../src/GUI/optionsdialog.cpp" line="641"/> <location filename="../src/GUI/optionsdialog.cpp" line="644"/>
<source>System</source> <source>System</source>
<translation>Sistema</translation> <translation>Sistema</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="634"/> <location filename="../src/GUI/optionsdialog.cpp" line="637"/>
<source>Appearance</source> <source>Appearance</source>
<translation>Apariencia</translation> <translation>Apariencia</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="636"/> <location filename="../src/GUI/optionsdialog.cpp" line="639"/>
<source>Maps</source> <source>Maps</source>
<translation>Mapas</translation> <translation>Mapas</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="637"/> <location filename="../src/GUI/optionsdialog.cpp" line="640"/>
<source>Data</source> <source>Data</source>
<translation>Fecha</translation> <translation>Fecha</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="639"/> <location filename="../src/GUI/optionsdialog.cpp" line="642"/>
<source>Print &amp; Export</source> <source>Print &amp; Export</source>
<translation>Imprimir y exportar</translation> <translation>Imprimir y exportar</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="668"/> <location filename="../src/GUI/optionsdialog.cpp" line="671"/>
<source>Options</source> <source>Options</source>
<translation>Opciones</translation> <translation>Opciones</translation>
</message> </message>
@ -1586,7 +1591,7 @@
<message> <message>
<location filename="../src/GUI/powergraphitem.cpp" line="17"/> <location filename="../src/GUI/powergraphitem.cpp" line="17"/>
<source>Maximum</source> <source>Maximum</source>
<translation>Maxima</translation> <translation>Máxima</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/powergraphitem.cpp" line="18"/> <location filename="../src/GUI/powergraphitem.cpp" line="18"/>
@ -1620,7 +1625,7 @@
<message> <message>
<location filename="../src/GUI/routeitem.cpp" line="29"/> <location filename="../src/GUI/routeitem.cpp" line="29"/>
<source>Links</source> <source>Links</source>
<translation type="unfinished"></translation> <translation>Enlaces</translation>
</message> </message>
</context> </context>
<context> <context>
@ -1634,7 +1639,7 @@
<location filename="../src/GUI/scaleitem.cpp" line="109"/> <location filename="../src/GUI/scaleitem.cpp" line="109"/>
<location filename="../src/GUI/scaleitem.cpp" line="112"/> <location filename="../src/GUI/scaleitem.cpp" line="112"/>
<source>ft</source> <source>ft</source>
<translation></translation> <translation>ft</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/scaleitem.cpp" line="111"/> <location filename="../src/GUI/scaleitem.cpp" line="111"/>
@ -1851,7 +1856,7 @@
<message> <message>
<location filename="../src/GUI/trackitem.cpp" line="33"/> <location filename="../src/GUI/trackitem.cpp" line="33"/>
<source>Links</source> <source>Links</source>
<translation type="unfinished"></translation> <translation>Enlaces</translation>
</message> </message>
</context> </context>
<context> <context>
@ -1884,12 +1889,12 @@
<message> <message>
<location filename="../src/GUI/waypointitem.cpp" line="44"/> <location filename="../src/GUI/waypointitem.cpp" line="44"/>
<source>Address</source> <source>Address</source>
<translation type="unfinished"></translation> <translation>Dirección</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/waypointitem.cpp" line="55"/> <location filename="../src/GUI/waypointitem.cpp" line="55"/>
<source>Links</source> <source>Links</source>
<translation type="unfinished"></translation> <translation>Enlaces</translation>
</message> </message>
</context> </context>
</TS> </TS>

View File

@ -47,82 +47,87 @@
<context> <context>
<name>Data</name> <name>Data</name>
<message> <message>
<location filename="../src/data/data.cpp" line="176"/> <location filename="../src/data/data.cpp" line="179"/>
<source>Supported files</source> <source>Supported files</source>
<translation>Tuetut tiedostot</translation> <translation>Tuetut tiedostot</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="177"/> <location filename="../src/data/data.cpp" line="180"/>
<source>CSV files</source> <source>CSV files</source>
<translation>CSV-tiedostot</translation> <translation>CSV-tiedostot</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="178"/> <location filename="../src/data/data.cpp" line="181"/>
<source>CUP files</source> <source>CUP files</source>
<translation>CUP-tiedostot</translation> <translation>CUP-tiedostot</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="179"/> <location filename="../src/data/data.cpp" line="182"/>
<source>FIT files</source> <source>FIT files</source>
<translation>FIT-tiedostot</translation> <translation>FIT-tiedostot</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="181"/> <location filename="../src/data/data.cpp" line="184"/>
<source>GeoJSON files</source> <source>GeoJSON files</source>
<translation>GeoJSON-tiedostot</translation> <translation>GeoJSON-tiedostot</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="183"/> <location filename="../src/data/data.cpp" line="186"/>
<source>GPI files</source> <source>GPI files</source>
<translation>GPI-tiedostot</translation> <translation>GPI-tiedostot</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="184"/> <location filename="../src/data/data.cpp" line="187"/>
<source>GPX files</source> <source>GPX files</source>
<translation>GPX-tiedostot</translation> <translation>GPX-tiedostot</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="185"/> <location filename="../src/data/data.cpp" line="188"/>
<source>IGC files</source> <source>IGC files</source>
<translation>IGC-tiedostot</translation> <translation>IGC-tiedostot</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="186"/> <location filename="../src/data/data.cpp" line="189"/>
<source>JPEG images</source> <source>JPEG images</source>
<translation>JPEG-kuvat</translation> <translation>JPEG-kuvat</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="187"/> <location filename="../src/data/data.cpp" line="190"/>
<source>KML files</source> <source>KML files</source>
<translation>KML-tiedostot</translation> <translation>KML-tiedostot</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="188"/> <location filename="../src/data/data.cpp" line="191"/>
<source>LOC files</source> <source>LOC files</source>
<translation>LOC-tiedostot</translation> <translation>LOC-tiedostot</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="189"/> <location filename="../src/data/data.cpp" line="192"/>
<source>NMEA files</source> <source>NMEA files</source>
<translation>NMEA-tiedostot</translation> <translation>NMEA-tiedostot</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="190"/> <location filename="../src/data/data.cpp" line="193"/>
<source>OziExplorer files</source> <source>OziExplorer files</source>
<translation>OziExplorer-tiedostot</translation> <translation>OziExplorer-tiedostot</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="192"/> <location filename="../src/data/data.cpp" line="195"/>
<source>SML files</source>
<translation>SML-tiedostot</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="196"/>
<source>TCX files</source> <source>TCX files</source>
<translation>TCX-tiedostot</translation> <translation>TCX-tiedostot</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="191"/> <location filename="../src/data/data.cpp" line="194"/>
<source>SLF files</source> <source>SLF files</source>
<translation>SLF-tiedostot</translation> <translation>SLF-tiedostot</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="193"/> <location filename="../src/data/data.cpp" line="197"/>
<source>All files</source> <source>All files</source>
<translation>Kaikki tiedostot</translation> <translation>Kaikki tiedostot</translation>
</message> </message>
@ -1130,7 +1135,7 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="295"/> <location filename="../src/GUI/optionsdialog.cpp" line="295"/>
<location filename="../src/GUI/optionsdialog.cpp" line="572"/> <location filename="../src/GUI/optionsdialog.cpp" line="575"/>
<source>Graphs</source> <source>Graphs</source>
<translation>Kaaviokuvat</translation> <translation>Kaaviokuvat</translation>
</message> </message>
@ -1232,14 +1237,14 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="322"/> <location filename="../src/GUI/optionsdialog.cpp" line="322"/>
<location filename="../src/GUI/optionsdialog.cpp" line="429"/> <location filename="../src/GUI/optionsdialog.cpp" line="432"/>
<location filename="../src/GUI/optionsdialog.cpp" line="492"/> <location filename="../src/GUI/optionsdialog.cpp" line="495"/>
<source>Elevation:</source> <source>Elevation:</source>
<translation>Korkeus:</translation> <translation>Korkeus:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="323"/> <location filename="../src/GUI/optionsdialog.cpp" line="323"/>
<location filename="../src/GUI/optionsdialog.cpp" line="428"/> <location filename="../src/GUI/optionsdialog.cpp" line="431"/>
<source>Speed:</source> <source>Speed:</source>
<translation>Vauhti:</translation> <translation>Vauhti:</translation>
</message> </message>
@ -1295,69 +1300,69 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="376"/> <location filename="../src/GUI/optionsdialog.cpp" line="376"/>
<location filename="../src/GUI/optionsdialog.cpp" line="595"/> <location filename="../src/GUI/optionsdialog.cpp" line="598"/>
<source>s</source> <source>s</source>
<translation>s</translation> <translation>s</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="389"/> <location filename="../src/GUI/optionsdialog.cpp" line="392"/>
<source>Minimal speed:</source> <source>Minimal speed:</source>
<translation>Minimivauhti:</translation> <translation>Minimivauhti:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="390"/> <location filename="../src/GUI/optionsdialog.cpp" line="393"/>
<source>Minimal duration:</source> <source>Minimal duration:</source>
<translation>Minimikesto:</translation> <translation>Minimikesto:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="400"/> <location filename="../src/GUI/optionsdialog.cpp" line="403"/>
<source>Computed from distance/time</source> <source>Computed from distance/time</source>
<translation>Laskettu etäisyydestä/ajasta</translation> <translation>Laskettu etäisyydestä/ajasta</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="401"/> <location filename="../src/GUI/optionsdialog.cpp" line="404"/>
<source>Recorded by device</source> <source>Recorded by device</source>
<translation>Tallennettu laitteella</translation> <translation>Tallennettu laitteella</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="407"/> <location filename="../src/GUI/optionsdialog.cpp" line="410"/>
<location filename="../src/GUI/optionsdialog.cpp" line="465"/> <location filename="../src/GUI/optionsdialog.cpp" line="468"/>
<source>GPS data</source> <source>GPS data</source>
<translation>GPS-tiedot</translation> <translation>GPS-tiedot</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="408"/> <location filename="../src/GUI/optionsdialog.cpp" line="411"/>
<location filename="../src/GUI/optionsdialog.cpp" line="466"/> <location filename="../src/GUI/optionsdialog.cpp" line="469"/>
<source>DEM data</source> <source>DEM data</source>
<translation>DEM-tiedot</translation> <translation>DEM-tiedot</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="445"/> <location filename="../src/GUI/optionsdialog.cpp" line="448"/>
<source>Elevation</source> <source>Elevation</source>
<translation>Korkeus</translation> <translation>Korkeus</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="456"/> <location filename="../src/GUI/optionsdialog.cpp" line="459"/>
<source>Filtering</source> <source>Filtering</source>
<translation>Suodatus</translation> <translation>Suodatus</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="457"/> <location filename="../src/GUI/optionsdialog.cpp" line="460"/>
<source>Sources</source> <source>Sources</source>
<translation>Lähteet</translation> <translation>Lähteet</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="458"/> <location filename="../src/GUI/optionsdialog.cpp" line="461"/>
<source>Pause detection</source> <source>Pause detection</source>
<translation>Pysähdysten havaitseminen</translation> <translation>Pysähdysten havaitseminen</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="491"/> <location filename="../src/GUI/optionsdialog.cpp" line="494"/>
<source>Radius:</source> <source>Radius:</source>
<translation>Säde:</translation> <translation>Säde:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="439"/> <location filename="../src/GUI/optionsdialog.cpp" line="442"/>
<source>Speed</source> <source>Speed</source>
<translation>Vauhti</translation> <translation>Vauhti</translation>
</message> </message>
@ -1402,144 +1407,144 @@
<translation>Käyttäjän määrittämä</translation> <translation>Käyttäjän määrittämä</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="477"/> <location filename="../src/GUI/optionsdialog.cpp" line="480"/>
<source>mi</source> <source>mi</source>
<translation>mi</translation> <translation>mi</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="480"/> <location filename="../src/GUI/optionsdialog.cpp" line="483"/>
<source>nmi</source> <source>nmi</source>
<translation>mpk</translation> <translation>mpk</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="483"/> <location filename="../src/GUI/optionsdialog.cpp" line="486"/>
<source>km</source> <source>km</source>
<translation>km</translation> <translation>km</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="498"/> <location filename="../src/GUI/optionsdialog.cpp" line="501"/>
<location filename="../src/GUI/optionsdialog.cpp" line="638"/> <location filename="../src/GUI/optionsdialog.cpp" line="641"/>
<source>POI</source> <source>POI</source>
<translation>POI</translation> <translation>POI</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="505"/> <location filename="../src/GUI/optionsdialog.cpp" line="508"/>
<source>WYSIWYG</source> <source>WYSIWYG</source>
<translation>WYSIWYG</translation> <translation>WYSIWYG</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="506"/> <location filename="../src/GUI/optionsdialog.cpp" line="509"/>
<source>High-Resolution</source> <source>High-Resolution</source>
<translation>Korkea resoluutio</translation> <translation>Korkea resoluutio</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="511"/> <location filename="../src/GUI/optionsdialog.cpp" line="514"/>
<source>The printed area is approximately the display area. The map zoom level does not change.</source> <source>The printed area is approximately the display area. The map zoom level does not change.</source>
<translation>Painettu alue on suunnilleen näyttöalue. Kartan zoomaustaso ei muutu.</translation> <translation>Painettu alue on suunnilleen näyttöalue. Kartan zoomaustaso ei muutu.</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="513"/> <location filename="../src/GUI/optionsdialog.cpp" line="516"/>
<source>The zoom level will be changed so that the whole content (tracks/waypoints) fits to the printed area and the map resolution is as close as possible to the print resolution.</source> <source>The zoom level will be changed so that the whole content (tracks/waypoints) fits to the printed area and the map resolution is as close as possible to the print resolution.</source>
<translation>Zoomaustasoa muutetaan niin, että koko sisältö (jäljet/reittipisteet) sopii painettuun alueeseen ja kartan resoluutio on mahdollisimman lähellä tulostusresoluutiota.</translation> <translation>Zoomaustasoa muutetaan niin, että koko sisältö (jäljet/reittipisteet) sopii painettuun alueeseen ja kartan resoluutio on mahdollisimman lähellä tulostusresoluutiota.</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="535"/> <location filename="../src/GUI/optionsdialog.cpp" line="538"/>
<source>Name</source> <source>Name</source>
<translation>Nimi</translation> <translation>Nimi</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="537"/> <location filename="../src/GUI/optionsdialog.cpp" line="540"/>
<source>Date</source> <source>Date</source>
<translation>Päivämäärä</translation> <translation>Päivämäärä</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="539"/> <location filename="../src/GUI/optionsdialog.cpp" line="542"/>
<source>Distance</source> <source>Distance</source>
<translation>Etäisyys</translation> <translation>Etäisyys</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="541"/> <location filename="../src/GUI/optionsdialog.cpp" line="544"/>
<source>Time</source> <source>Time</source>
<translation>Aika</translation> <translation>Aika</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="543"/> <location filename="../src/GUI/optionsdialog.cpp" line="546"/>
<source>Moving time</source> <source>Moving time</source>
<translation>Liikkumisaika</translation> <translation>Liikkumisaika</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="545"/> <location filename="../src/GUI/optionsdialog.cpp" line="548"/>
<source>Item count (&gt;1)</source> <source>Item count (&gt;1)</source>
<translation>Kohteiden määrä (&gt;1)</translation> <translation>Kohteiden määrä (&gt;1)</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="560"/> <location filename="../src/GUI/optionsdialog.cpp" line="563"/>
<source>Separate graph page</source> <source>Separate graph page</source>
<translation>Erillinen sivu kaaviokuvalle</translation> <translation>Erillinen sivu kaaviokuvalle</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="570"/> <location filename="../src/GUI/optionsdialog.cpp" line="573"/>
<source>Print mode</source> <source>Print mode</source>
<translation>Tulostustila</translation> <translation>Tulostustila</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="571"/> <location filename="../src/GUI/optionsdialog.cpp" line="574"/>
<source>Header</source> <source>Header</source>
<translation>Otsikko</translation> <translation>Otsikko</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="579"/> <location filename="../src/GUI/optionsdialog.cpp" line="582"/>
<source>Use OpenGL</source> <source>Use OpenGL</source>
<translation>Käytä OpenGL:ää</translation> <translation>Käytä OpenGL:ää</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="582"/> <location filename="../src/GUI/optionsdialog.cpp" line="585"/>
<source>Enable HTTP/2</source> <source>Enable HTTP/2</source>
<translation>Ota HTTP/2 käyttöön</translation> <translation>Ota HTTP/2 käyttöön</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="589"/> <location filename="../src/GUI/optionsdialog.cpp" line="592"/>
<source>MB</source> <source>MB</source>
<translation>Mt</translation> <translation>Mt</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="599"/> <location filename="../src/GUI/optionsdialog.cpp" line="602"/>
<source>Image cache size:</source> <source>Image cache size:</source>
<translation>Kuvavälimuistin koko:</translation> <translation>Kuvavälimuistin koko:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="600"/> <location filename="../src/GUI/optionsdialog.cpp" line="603"/>
<source>Connection timeout:</source> <source>Connection timeout:</source>
<translation>Yhteyden aikakatkaisu:</translation> <translation>Yhteyden aikakatkaisu:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="616"/> <location filename="../src/GUI/optionsdialog.cpp" line="619"/>
<location filename="../src/GUI/optionsdialog.cpp" line="641"/> <location filename="../src/GUI/optionsdialog.cpp" line="644"/>
<source>System</source> <source>System</source>
<translation>Järjestelmä</translation> <translation>Järjestelmä</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="634"/> <location filename="../src/GUI/optionsdialog.cpp" line="637"/>
<source>Appearance</source> <source>Appearance</source>
<translation>Ulkoasu</translation> <translation>Ulkoasu</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="636"/> <location filename="../src/GUI/optionsdialog.cpp" line="639"/>
<source>Maps</source> <source>Maps</source>
<translation>Kartat</translation> <translation>Kartat</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="637"/> <location filename="../src/GUI/optionsdialog.cpp" line="640"/>
<source>Data</source> <source>Data</source>
<translation>Tiedot</translation> <translation>Tiedot</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="639"/> <location filename="../src/GUI/optionsdialog.cpp" line="642"/>
<source>Print &amp; Export</source> <source>Print &amp; Export</source>
<translation>Tulostus &amp; vienti</translation> <translation>Tulostus &amp; vienti</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="668"/> <location filename="../src/GUI/optionsdialog.cpp" line="671"/>
<source>Options</source> <source>Options</source>
<translation>Valinnat</translation> <translation>Valinnat</translation>
</message> </message>

View File

@ -47,82 +47,87 @@
<context> <context>
<name>Data</name> <name>Data</name>
<message> <message>
<location filename="../src/data/data.cpp" line="176"/> <location filename="../src/data/data.cpp" line="179"/>
<source>Supported files</source> <source>Supported files</source>
<translation>Formats pris en charge</translation> <translation>Formats pris en charge</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="177"/> <location filename="../src/data/data.cpp" line="180"/>
<source>CSV files</source> <source>CSV files</source>
<translation>Données CSV</translation> <translation>Données CSV</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="178"/> <location filename="../src/data/data.cpp" line="181"/>
<source>CUP files</source> <source>CUP files</source>
<translation>Données CUP</translation> <translation>Données CUP</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="179"/> <location filename="../src/data/data.cpp" line="182"/>
<source>FIT files</source> <source>FIT files</source>
<translation>Données FIT</translation> <translation>Données FIT</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="181"/> <location filename="../src/data/data.cpp" line="184"/>
<source>GeoJSON files</source> <source>GeoJSON files</source>
<translation>Données GeoJSON</translation> <translation>Données GeoJSON</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="183"/> <location filename="../src/data/data.cpp" line="186"/>
<source>GPI files</source> <source>GPI files</source>
<translation>Données GPI</translation> <translation>Données GPI</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="184"/> <location filename="../src/data/data.cpp" line="187"/>
<source>GPX files</source> <source>GPX files</source>
<translation>Données GPX</translation> <translation>Données GPX</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="185"/> <location filename="../src/data/data.cpp" line="188"/>
<source>IGC files</source> <source>IGC files</source>
<translation>Données IGC</translation> <translation>Données IGC</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="186"/> <location filename="../src/data/data.cpp" line="189"/>
<source>JPEG images</source> <source>JPEG images</source>
<translation>Images JPEG</translation> <translation>Images JPEG</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="187"/> <location filename="../src/data/data.cpp" line="190"/>
<source>KML files</source> <source>KML files</source>
<translation>Données KML</translation> <translation>Données KML</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="188"/> <location filename="../src/data/data.cpp" line="191"/>
<source>LOC files</source> <source>LOC files</source>
<translation>Données LOC</translation> <translation>Données LOC</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="189"/> <location filename="../src/data/data.cpp" line="192"/>
<source>NMEA files</source> <source>NMEA files</source>
<translation>Données NMEA</translation> <translation>Données NMEA</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="190"/> <location filename="../src/data/data.cpp" line="193"/>
<source>OziExplorer files</source> <source>OziExplorer files</source>
<translation>Données OziExplorer</translation> <translation>Données OziExplorer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="192"/> <location filename="../src/data/data.cpp" line="195"/>
<source>SML files</source>
<translation>Données SML</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="196"/>
<source>TCX files</source> <source>TCX files</source>
<translation>Données TCX</translation> <translation>Données TCX</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="191"/> <location filename="../src/data/data.cpp" line="194"/>
<source>SLF files</source> <source>SLF files</source>
<translation>Données SLF</translation> <translation>Données SLF</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="193"/> <location filename="../src/data/data.cpp" line="197"/>
<source>All files</source> <source>All files</source>
<translation>Tous les fichiers</translation> <translation>Tous les fichiers</translation>
</message> </message>
@ -1130,7 +1135,7 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="295"/> <location filename="../src/GUI/optionsdialog.cpp" line="295"/>
<location filename="../src/GUI/optionsdialog.cpp" line="572"/> <location filename="../src/GUI/optionsdialog.cpp" line="575"/>
<source>Graphs</source> <source>Graphs</source>
<translation>Graphe</translation> <translation>Graphe</translation>
</message> </message>
@ -1232,14 +1237,14 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="322"/> <location filename="../src/GUI/optionsdialog.cpp" line="322"/>
<location filename="../src/GUI/optionsdialog.cpp" line="429"/> <location filename="../src/GUI/optionsdialog.cpp" line="432"/>
<location filename="../src/GUI/optionsdialog.cpp" line="492"/> <location filename="../src/GUI/optionsdialog.cpp" line="495"/>
<source>Elevation:</source> <source>Elevation:</source>
<translation>Altitude :</translation> <translation>Altitude :</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="323"/> <location filename="../src/GUI/optionsdialog.cpp" line="323"/>
<location filename="../src/GUI/optionsdialog.cpp" line="428"/> <location filename="../src/GUI/optionsdialog.cpp" line="431"/>
<source>Speed:</source> <source>Speed:</source>
<translation>Vitesse :</translation> <translation>Vitesse :</translation>
</message> </message>
@ -1295,69 +1300,69 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="376"/> <location filename="../src/GUI/optionsdialog.cpp" line="376"/>
<location filename="../src/GUI/optionsdialog.cpp" line="595"/> <location filename="../src/GUI/optionsdialog.cpp" line="598"/>
<source>s</source> <source>s</source>
<translation>s</translation> <translation>s</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="389"/> <location filename="../src/GUI/optionsdialog.cpp" line="392"/>
<source>Minimal speed:</source> <source>Minimal speed:</source>
<translation>Vitesse minimale :</translation> <translation>Vitesse minimale :</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="390"/> <location filename="../src/GUI/optionsdialog.cpp" line="393"/>
<source>Minimal duration:</source> <source>Minimal duration:</source>
<translation>Durée minimale :</translation> <translation>Durée minimale :</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="400"/> <location filename="../src/GUI/optionsdialog.cpp" line="403"/>
<source>Computed from distance/time</source> <source>Computed from distance/time</source>
<translation>Calculée comme distance/temps</translation> <translation>Calculée comme distance/temps</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="401"/> <location filename="../src/GUI/optionsdialog.cpp" line="404"/>
<source>Recorded by device</source> <source>Recorded by device</source>
<translation>Enregistrée par l&apos;appareil</translation> <translation>Enregistrée par l&apos;appareil</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="407"/> <location filename="../src/GUI/optionsdialog.cpp" line="410"/>
<location filename="../src/GUI/optionsdialog.cpp" line="465"/> <location filename="../src/GUI/optionsdialog.cpp" line="468"/>
<source>GPS data</source> <source>GPS data</source>
<translation>Données GPS</translation> <translation>Données GPS</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="408"/> <location filename="../src/GUI/optionsdialog.cpp" line="411"/>
<location filename="../src/GUI/optionsdialog.cpp" line="466"/> <location filename="../src/GUI/optionsdialog.cpp" line="469"/>
<source>DEM data</source> <source>DEM data</source>
<translation>Données MNT</translation> <translation>Données MNT</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="445"/> <location filename="../src/GUI/optionsdialog.cpp" line="448"/>
<source>Elevation</source> <source>Elevation</source>
<translation>Altitude</translation> <translation>Altitude</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="456"/> <location filename="../src/GUI/optionsdialog.cpp" line="459"/>
<source>Filtering</source> <source>Filtering</source>
<translation>Filtrage</translation> <translation>Filtrage</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="457"/> <location filename="../src/GUI/optionsdialog.cpp" line="460"/>
<source>Sources</source> <source>Sources</source>
<translation>Sources</translation> <translation>Sources</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="458"/> <location filename="../src/GUI/optionsdialog.cpp" line="461"/>
<source>Pause detection</source> <source>Pause detection</source>
<translation>Détection des arrêts</translation> <translation>Détection des arrêts</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="491"/> <location filename="../src/GUI/optionsdialog.cpp" line="494"/>
<source>Radius:</source> <source>Radius:</source>
<translation>Rayon :</translation> <translation>Rayon :</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="439"/> <location filename="../src/GUI/optionsdialog.cpp" line="442"/>
<source>Speed</source> <source>Speed</source>
<translation>Vitesse</translation> <translation>Vitesse</translation>
</message> </message>
@ -1402,144 +1407,144 @@
<translation>Personnalisé</translation> <translation>Personnalisé</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="477"/> <location filename="../src/GUI/optionsdialog.cpp" line="480"/>
<source>mi</source> <source>mi</source>
<translation>mi</translation> <translation>mi</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="480"/> <location filename="../src/GUI/optionsdialog.cpp" line="483"/>
<source>nmi</source> <source>nmi</source>
<translation>nmi</translation> <translation>nmi</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="483"/> <location filename="../src/GUI/optionsdialog.cpp" line="486"/>
<source>km</source> <source>km</source>
<translation>km</translation> <translation>km</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="498"/> <location filename="../src/GUI/optionsdialog.cpp" line="501"/>
<location filename="../src/GUI/optionsdialog.cpp" line="638"/> <location filename="../src/GUI/optionsdialog.cpp" line="641"/>
<source>POI</source> <source>POI</source>
<translation>POI</translation> <translation>POI</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="505"/> <location filename="../src/GUI/optionsdialog.cpp" line="508"/>
<source>WYSIWYG</source> <source>WYSIWYG</source>
<translation>WYSIWYG</translation> <translation>WYSIWYG</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="506"/> <location filename="../src/GUI/optionsdialog.cpp" line="509"/>
<source>High-Resolution</source> <source>High-Resolution</source>
<translation>Résolution élevée</translation> <translation>Résolution élevée</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="511"/> <location filename="../src/GUI/optionsdialog.cpp" line="514"/>
<source>The printed area is approximately the display area. The map zoom level does not change.</source> <source>The printed area is approximately the display area. The map zoom level does not change.</source>
<translation>La zone d&apos;impression est presque celle affichée. L&apos;échelle reste la même.</translation> <translation>La zone d&apos;impression est presque celle affichée. L&apos;échelle reste la même.</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="513"/> <location filename="../src/GUI/optionsdialog.cpp" line="516"/>
<source>The zoom level will be changed so that the whole content (tracks/waypoints) fits to the printed area and the map resolution is as close as possible to the print resolution.</source> <source>The zoom level will be changed so that the whole content (tracks/waypoints) fits to the printed area and the map resolution is as close as possible to the print resolution.</source>
<translation>L&apos;échelle est ajustée pour que tout le contenu (traces et points de jalonnement) rentre dans la zone d&apos;impression tout en gardant proches les résolutions d&apos;impression et de carte.</translation> <translation>L&apos;échelle est ajustée pour que tout le contenu (traces et points de jalonnement) rentre dans la zone d&apos;impression tout en gardant proches les résolutions d&apos;impression et de carte.</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="535"/> <location filename="../src/GUI/optionsdialog.cpp" line="538"/>
<source>Name</source> <source>Name</source>
<translation>Nom</translation> <translation>Nom</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="537"/> <location filename="../src/GUI/optionsdialog.cpp" line="540"/>
<source>Date</source> <source>Date</source>
<translation>Date</translation> <translation>Date</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="539"/> <location filename="../src/GUI/optionsdialog.cpp" line="542"/>
<source>Distance</source> <source>Distance</source>
<translation>Distance</translation> <translation>Distance</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="541"/> <location filename="../src/GUI/optionsdialog.cpp" line="544"/>
<source>Time</source> <source>Time</source>
<translation>Durée</translation> <translation>Durée</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="543"/> <location filename="../src/GUI/optionsdialog.cpp" line="546"/>
<source>Moving time</source> <source>Moving time</source>
<translation>Durée en déplacement</translation> <translation>Durée en déplacement</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="545"/> <location filename="../src/GUI/optionsdialog.cpp" line="548"/>
<source>Item count (&gt;1)</source> <source>Item count (&gt;1)</source>
<translation>Nombre d&apos;éléments (&gt;1)</translation> <translation>Nombre d&apos;éléments (&gt;1)</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="560"/> <location filename="../src/GUI/optionsdialog.cpp" line="563"/>
<source>Separate graph page</source> <source>Separate graph page</source>
<translation>Sauter une page pour les graphes</translation> <translation>Sauter une page pour les graphes</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="570"/> <location filename="../src/GUI/optionsdialog.cpp" line="573"/>
<source>Print mode</source> <source>Print mode</source>
<translation>Mode d&apos;impression</translation> <translation>Mode d&apos;impression</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="571"/> <location filename="../src/GUI/optionsdialog.cpp" line="574"/>
<source>Header</source> <source>Header</source>
<translation>Entête</translation> <translation>Entête</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="579"/> <location filename="../src/GUI/optionsdialog.cpp" line="582"/>
<source>Use OpenGL</source> <source>Use OpenGL</source>
<translation>Utiliser OpenGL</translation> <translation>Utiliser OpenGL</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="582"/> <location filename="../src/GUI/optionsdialog.cpp" line="585"/>
<source>Enable HTTP/2</source> <source>Enable HTTP/2</source>
<translation>Activer l&apos;HTTP/2</translation> <translation>Activer l&apos;HTTP/2</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="589"/> <location filename="../src/GUI/optionsdialog.cpp" line="592"/>
<source>MB</source> <source>MB</source>
<translation>Mo</translation> <translation>Mo</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="599"/> <location filename="../src/GUI/optionsdialog.cpp" line="602"/>
<source>Image cache size:</source> <source>Image cache size:</source>
<translation>Volume du cache à images :</translation> <translation>Volume du cache à images :</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="600"/> <location filename="../src/GUI/optionsdialog.cpp" line="603"/>
<source>Connection timeout:</source> <source>Connection timeout:</source>
<translation>Délai d&apos;attente de connexion :</translation> <translation>Délai d&apos;attente de connexion :</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="616"/> <location filename="../src/GUI/optionsdialog.cpp" line="619"/>
<location filename="../src/GUI/optionsdialog.cpp" line="641"/> <location filename="../src/GUI/optionsdialog.cpp" line="644"/>
<source>System</source> <source>System</source>
<translation>Système</translation> <translation>Système</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="634"/> <location filename="../src/GUI/optionsdialog.cpp" line="637"/>
<source>Appearance</source> <source>Appearance</source>
<translation>Apparence</translation> <translation>Apparence</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="636"/> <location filename="../src/GUI/optionsdialog.cpp" line="639"/>
<source>Maps</source> <source>Maps</source>
<translation>Cartes</translation> <translation>Cartes</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="637"/> <location filename="../src/GUI/optionsdialog.cpp" line="640"/>
<source>Data</source> <source>Data</source>
<translation>Données</translation> <translation>Données</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="639"/> <location filename="../src/GUI/optionsdialog.cpp" line="642"/>
<source>Print &amp; Export</source> <source>Print &amp; Export</source>
<translation>Imprimer et exporter</translation> <translation>Imprimer et exporter</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="668"/> <location filename="../src/GUI/optionsdialog.cpp" line="671"/>
<source>Options</source> <source>Options</source>
<translation>Options</translation> <translation>Options</translation>
</message> </message>

1900
lang/gpxsee_hu.ts Normal file

File diff suppressed because it is too large Load Diff

View File

@ -12,7 +12,7 @@
<location filename="../src/GUI/cadencegraph.cpp" line="12"/> <location filename="../src/GUI/cadencegraph.cpp" line="12"/>
<location filename="../src/GUI/cadencegraph.h" line="16"/> <location filename="../src/GUI/cadencegraph.h" line="16"/>
<source>Cadence</source> <source>Cadence</source>
<translation type="unfinished">Stegfrekvens</translation> <translation>Stegfrekvens</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/cadencegraph.cpp" line="27"/> <location filename="../src/GUI/cadencegraph.cpp" line="27"/>
@ -47,82 +47,87 @@
<context> <context>
<name>Data</name> <name>Data</name>
<message> <message>
<location filename="../src/data/data.cpp" line="176"/> <location filename="../src/data/data.cpp" line="179"/>
<source>Supported files</source> <source>Supported files</source>
<translation>Støttede filer</translation> <translation>Støttede filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="177"/> <location filename="../src/data/data.cpp" line="180"/>
<source>CSV files</source> <source>CSV files</source>
<translation>CSV-filer</translation> <translation>CSV-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="178"/> <location filename="../src/data/data.cpp" line="181"/>
<source>CUP files</source> <source>CUP files</source>
<translation>CUP-filer</translation> <translation>CUP-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="179"/> <location filename="../src/data/data.cpp" line="182"/>
<source>FIT files</source> <source>FIT files</source>
<translation>FIT-filer</translation> <translation>FIT-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="181"/> <location filename="../src/data/data.cpp" line="184"/>
<source>GeoJSON files</source> <source>GeoJSON files</source>
<translation>GeoJSON-filer</translation> <translation>GeoJSON-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="183"/> <location filename="../src/data/data.cpp" line="186"/>
<source>GPI files</source> <source>GPI files</source>
<translation>GPI-filer</translation> <translation>GPI-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="184"/> <location filename="../src/data/data.cpp" line="187"/>
<source>GPX files</source> <source>GPX files</source>
<translation>GPX-filer</translation> <translation>GPX-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="185"/> <location filename="../src/data/data.cpp" line="188"/>
<source>IGC files</source> <source>IGC files</source>
<translation>IGC-filer</translation> <translation>IGC-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="186"/> <location filename="../src/data/data.cpp" line="189"/>
<source>JPEG images</source> <source>JPEG images</source>
<translation>JPEG-bilder</translation> <translation>JPEG-bilder</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="187"/> <location filename="../src/data/data.cpp" line="190"/>
<source>KML files</source> <source>KML files</source>
<translation>KML-filer</translation> <translation>KML-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="188"/> <location filename="../src/data/data.cpp" line="191"/>
<source>LOC files</source> <source>LOC files</source>
<translation>LOC-filer</translation> <translation>LOC-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="189"/> <location filename="../src/data/data.cpp" line="192"/>
<source>NMEA files</source> <source>NMEA files</source>
<translation>NMEA-filer</translation> <translation>NMEA-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="190"/> <location filename="../src/data/data.cpp" line="193"/>
<source>OziExplorer files</source> <source>OziExplorer files</source>
<translation>OziExplorer-filer</translation> <translation>OziExplorer-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="191"/> <location filename="../src/data/data.cpp" line="194"/>
<source>SLF files</source> <source>SLF files</source>
<translation>SLF-filer</translation> <translation>SLF-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="192"/> <location filename="../src/data/data.cpp" line="195"/>
<source>SML files</source>
<translation>SML-filer</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="196"/>
<source>TCX files</source> <source>TCX files</source>
<translation>TCX-filer</translation> <translation>TCX-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="193"/> <location filename="../src/data/data.cpp" line="197"/>
<source>All files</source> <source>All files</source>
<translation>Alle filer</translation> <translation>Alle filer</translation>
</message> </message>
@ -209,7 +214,7 @@
<message> <message>
<location filename="../src/GUI/exportdialog.cpp" line="25"/> <location filename="../src/GUI/exportdialog.cpp" line="25"/>
<source>All files</source> <source>All files</source>
<translation type="unfinished">Alle filer</translation> <translation>Alle filer</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/exportdialog.cpp" line="52"/> <location filename="../src/GUI/exportdialog.cpp" line="52"/>
@ -234,7 +239,7 @@
<message> <message>
<location filename="../src/GUI/exportdialog.cpp" line="94"/> <location filename="../src/GUI/exportdialog.cpp" line="94"/>
<source>Page Setup</source> <source>Page Setup</source>
<translation>Sideinnstilling</translation> <translation>Sideoppsett</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/exportdialog.cpp" line="97"/> <location filename="../src/GUI/exportdialog.cpp" line="97"/>
@ -368,17 +373,17 @@
<message> <message>
<location filename="../src/GUI/gui.cpp" line="217"/> <location filename="../src/GUI/gui.cpp" line="217"/>
<source>Open...</source> <source>Open...</source>
<translation type="unfinished">Åpne</translation> <translation>Åpne</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="222"/> <location filename="../src/GUI/gui.cpp" line="222"/>
<source>Print...</source> <source>Print...</source>
<translation type="unfinished">Skriv ut</translation> <translation>Skriv ut</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="229"/> <location filename="../src/GUI/gui.cpp" line="229"/>
<source>Export to PDF...</source> <source>Export to PDF...</source>
<translation type="unfinished">Eksporter til PDF</translation> <translation>Eksporter til PDF</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="235"/> <location filename="../src/GUI/gui.cpp" line="235"/>
@ -393,12 +398,12 @@
<message> <message>
<location filename="../src/GUI/gui.cpp" line="248"/> <location filename="../src/GUI/gui.cpp" line="248"/>
<source>Statistics...</source> <source>Statistics...</source>
<translation type="unfinished">Statistikk</translation> <translation>Statistikk</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="256"/> <location filename="../src/GUI/gui.cpp" line="256"/>
<source>Load POI file...</source> <source>Load POI file...</source>
<translation type="unfinished">Last inn POI-fil</translation> <translation>Last inn POI-fil</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="260"/> <location filename="../src/GUI/gui.cpp" line="260"/>
@ -428,7 +433,7 @@
<message> <message>
<location filename="../src/GUI/gui.cpp" line="292"/> <location filename="../src/GUI/gui.cpp" line="292"/>
<source>Load map...</source> <source>Load map...</source>
<translation type="unfinished">Last inn kart</translation> <translation>Last inn kart</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="296"/> <location filename="../src/GUI/gui.cpp" line="296"/>
@ -480,7 +485,7 @@
<message> <message>
<location filename="../src/GUI/gui.cpp" line="352"/> <location filename="../src/GUI/gui.cpp" line="352"/>
<source>km/mi markers</source> <source>km/mi markers</source>
<translation type="unfinished">km/mi-markører</translation> <translation>km/mi-markører</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="359"/> <location filename="../src/GUI/gui.cpp" line="359"/>
@ -515,7 +520,7 @@
<message> <message>
<location filename="../src/GUI/gui.cpp" line="393"/> <location filename="../src/GUI/gui.cpp" line="393"/>
<source>Show path markers</source> <source>Show path markers</source>
<translation type="unfinished">Vis veimarkører</translation> <translation>Vis veimarkører</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="400"/> <location filename="../src/GUI/gui.cpp" line="400"/>
@ -552,17 +557,17 @@
<message> <message>
<location filename="../src/GUI/gui.cpp" line="441"/> <location filename="../src/GUI/gui.cpp" line="441"/>
<source>Decimal degrees (DD)</source> <source>Decimal degrees (DD)</source>
<translation type="unfinished">Desimalgrader (DD)</translation> <translation>Desimalgrader (DD)</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="447"/> <location filename="../src/GUI/gui.cpp" line="447"/>
<source>Degrees and decimal minutes (DMM)</source> <source>Degrees and decimal minutes (DMM)</source>
<translation type="unfinished">Desimalgrader og desimalminutter (DMM)</translation> <translation>Desimalgrader og desimalminutter (DMM)</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="454"/> <location filename="../src/GUI/gui.cpp" line="454"/>
<source>Degrees, minutes, seconds (DMS)</source> <source>Degrees, minutes, seconds (DMS)</source>
<translation type="unfinished">Grader, minutter, sekunder (DMS)</translation> <translation>Grader, minutter, sekunder (DMS)</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="460"/> <location filename="../src/GUI/gui.cpp" line="460"/>
@ -572,7 +577,7 @@
<message> <message>
<location filename="../src/GUI/gui.cpp" line="467"/> <location filename="../src/GUI/gui.cpp" line="467"/>
<source>Options...</source> <source>Options...</source>
<translation type="unfinished">Valg</translation> <translation>Valg</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="473"/> <location filename="../src/GUI/gui.cpp" line="473"/>
@ -642,7 +647,7 @@
<message> <message>
<location filename="../src/GUI/gui.cpp" line="559"/> <location filename="../src/GUI/gui.cpp" line="559"/>
<source>Coordinates format</source> <source>Coordinates format</source>
<translation type="unfinished">Koordinatformat</translation> <translation>Koordinatformat</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="569"/> <location filename="../src/GUI/gui.cpp" line="569"/>
@ -856,7 +861,7 @@
<message numerus="yes"> <message numerus="yes">
<location filename="../src/GUI/gui.cpp" line="1351"/> <location filename="../src/GUI/gui.cpp" line="1351"/>
<source>%n files</source> <source>%n files</source>
<translation type="unfinished"> <translation>
<numerusform>%n fil</numerusform> <numerusform>%n fil</numerusform>
<numerusform>%n filer</numerusform> <numerusform>%n filer</numerusform>
</translation> </translation>
@ -969,7 +974,7 @@
<message> <message>
<location filename="../src/GUI/heartrategraph.cpp" line="11"/> <location filename="../src/GUI/heartrategraph.cpp" line="11"/>
<source>bpm</source> <source>bpm</source>
<translation type="unfinished">s/m</translation> <translation>bpm</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/heartrategraph.cpp" line="12"/> <location filename="../src/GUI/heartrategraph.cpp" line="12"/>
@ -1090,12 +1095,12 @@
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="176"/> <location filename="../src/GUI/optionsdialog.cpp" line="176"/>
<source>Palette shift:</source> <source>Palette shift:</source>
<translation type="unfinished">Palettforskyvning:</translation> <translation>Palettforskyvning:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="120"/> <location filename="../src/GUI/optionsdialog.cpp" line="120"/>
<source>Track width:</source> <source>Track width:</source>
<translation type="unfinished">Sporbredde:</translation> <translation>Sporbredde:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="80"/> <location filename="../src/GUI/optionsdialog.cpp" line="80"/>
@ -1110,7 +1115,7 @@
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="121"/> <location filename="../src/GUI/optionsdialog.cpp" line="121"/>
<source>Track style:</source> <source>Track style:</source>
<translation type="unfinished">Sporstil:</translation> <translation>Sporstil:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="123"/> <location filename="../src/GUI/optionsdialog.cpp" line="123"/>
@ -1154,12 +1159,12 @@
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="156"/> <location filename="../src/GUI/optionsdialog.cpp" line="156"/>
<source>Area border style:</source> <source>Area border style:</source>
<translation type="unfinished">Kantstil for område:</translation> <translation>Kantstil for område:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="157"/> <location filename="../src/GUI/optionsdialog.cpp" line="157"/>
<source>Area fill opacity:</source> <source>Area fill opacity:</source>
<translation type="unfinished">Fylldekkevne for område:</translation> <translation>Ugjennomsiktighet for område:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="161"/> <location filename="../src/GUI/optionsdialog.cpp" line="161"/>
@ -1227,7 +1232,7 @@
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="259"/> <location filename="../src/GUI/optionsdialog.cpp" line="259"/>
<source>Slider color:</source> <source>Slider color:</source>
<translation type="unfinished">Linjalfarge:</translation> <translation>Farge skyveregulering:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="282"/> <location filename="../src/GUI/optionsdialog.cpp" line="282"/>
@ -1251,7 +1256,7 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="295"/> <location filename="../src/GUI/optionsdialog.cpp" line="295"/>
<location filename="../src/GUI/optionsdialog.cpp" line="572"/> <location filename="../src/GUI/optionsdialog.cpp" line="575"/>
<source>Graphs</source> <source>Graphs</source>
<translation>Diagrammer</translation> <translation>Diagrammer</translation>
</message> </message>
@ -1267,14 +1272,14 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="322"/> <location filename="../src/GUI/optionsdialog.cpp" line="322"/>
<location filename="../src/GUI/optionsdialog.cpp" line="429"/> <location filename="../src/GUI/optionsdialog.cpp" line="432"/>
<location filename="../src/GUI/optionsdialog.cpp" line="492"/> <location filename="../src/GUI/optionsdialog.cpp" line="495"/>
<source>Elevation:</source> <source>Elevation:</source>
<translation>Høyde:</translation> <translation>Høyde:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="323"/> <location filename="../src/GUI/optionsdialog.cpp" line="323"/>
<location filename="../src/GUI/optionsdialog.cpp" line="428"/> <location filename="../src/GUI/optionsdialog.cpp" line="431"/>
<source>Speed:</source> <source>Speed:</source>
<translation>Hastighet:</translation> <translation>Hastighet:</translation>
</message> </message>
@ -1311,7 +1316,7 @@
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="352"/> <location filename="../src/GUI/optionsdialog.cpp" line="352"/>
<source>Automatic</source> <source>Automatic</source>
<translation type="unfinished"></translation> <translation>Automatisk</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="366"/> <location filename="../src/GUI/optionsdialog.cpp" line="366"/>
@ -1330,216 +1335,216 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="376"/> <location filename="../src/GUI/optionsdialog.cpp" line="376"/>
<location filename="../src/GUI/optionsdialog.cpp" line="595"/> <location filename="../src/GUI/optionsdialog.cpp" line="598"/>
<source>s</source> <source>s</source>
<translation>s</translation> <translation>s</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="389"/> <location filename="../src/GUI/optionsdialog.cpp" line="392"/>
<source>Minimal speed:</source> <source>Minimal speed:</source>
<translation>Minimumshastighet:</translation> <translation>Minimumshastighet:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="390"/> <location filename="../src/GUI/optionsdialog.cpp" line="393"/>
<source>Minimal duration:</source> <source>Minimal duration:</source>
<translation>Minimumsvarighet:</translation> <translation>Minimumsvarighet:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="400"/> <location filename="../src/GUI/optionsdialog.cpp" line="403"/>
<source>Computed from distance/time</source> <source>Computed from distance/time</source>
<translation>Utregnet fra avstand/tid</translation> <translation>Utregnet fra avstand/tid</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="401"/> <location filename="../src/GUI/optionsdialog.cpp" line="404"/>
<source>Recorded by device</source> <source>Recorded by device</source>
<translation>Tatt opp av enhet</translation> <translation>Tatt opp av enhet</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="407"/> <location filename="../src/GUI/optionsdialog.cpp" line="410"/>
<location filename="../src/GUI/optionsdialog.cpp" line="465"/> <location filename="../src/GUI/optionsdialog.cpp" line="468"/>
<source>GPS data</source> <source>GPS data</source>
<translation>GPS-data</translation> <translation>GPS-data</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="408"/> <location filename="../src/GUI/optionsdialog.cpp" line="411"/>
<location filename="../src/GUI/optionsdialog.cpp" line="466"/> <location filename="../src/GUI/optionsdialog.cpp" line="469"/>
<source>DEM data</source> <source>DEM data</source>
<translation>DEM-data</translation> <translation>DEM-data</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="445"/> <location filename="../src/GUI/optionsdialog.cpp" line="448"/>
<source>Elevation</source> <source>Elevation</source>
<translation type="unfinished">Høyde</translation> <translation>Høyde</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="456"/> <location filename="../src/GUI/optionsdialog.cpp" line="459"/>
<source>Filtering</source> <source>Filtering</source>
<translation>Filtrering</translation> <translation>Filtrering</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="457"/> <location filename="../src/GUI/optionsdialog.cpp" line="460"/>
<source>Sources</source> <source>Sources</source>
<translation>Kilder</translation> <translation>Kilder</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="458"/> <location filename="../src/GUI/optionsdialog.cpp" line="461"/>
<source>Pause detection</source> <source>Pause detection</source>
<translation>Sett oppdagelse pause</translation> <translation>Sett oppdagelse pause</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="491"/> <location filename="../src/GUI/optionsdialog.cpp" line="494"/>
<source>Radius:</source> <source>Radius:</source>
<translation>Radius:</translation> <translation>Radius:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="439"/> <location filename="../src/GUI/optionsdialog.cpp" line="442"/>
<source>Speed</source> <source>Speed</source>
<translation>Hastighet</translation> <translation>Hastighet</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="353"/> <location filename="../src/GUI/optionsdialog.cpp" line="353"/>
<source>Custom</source> <source>Custom</source>
<translation type="unfinished"></translation> <translation>Egendefinert</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="477"/> <location filename="../src/GUI/optionsdialog.cpp" line="480"/>
<source>mi</source> <source>mi</source>
<translation>mi</translation> <translation>mi</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="480"/> <location filename="../src/GUI/optionsdialog.cpp" line="483"/>
<source>nmi</source> <source>nmi</source>
<translation>nmi</translation> <translation>nmi</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="483"/> <location filename="../src/GUI/optionsdialog.cpp" line="486"/>
<source>km</source> <source>km</source>
<translation>km</translation> <translation>km</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="498"/> <location filename="../src/GUI/optionsdialog.cpp" line="501"/>
<location filename="../src/GUI/optionsdialog.cpp" line="638"/> <location filename="../src/GUI/optionsdialog.cpp" line="641"/>
<source>POI</source> <source>POI</source>
<translation>POI</translation> <translation>POI</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="505"/> <location filename="../src/GUI/optionsdialog.cpp" line="508"/>
<source>WYSIWYG</source> <source>WYSIWYG</source>
<translation>WYSIWYG</translation> <translation>WYSIWYG</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="506"/> <location filename="../src/GUI/optionsdialog.cpp" line="509"/>
<source>High-Resolution</source> <source>High-Resolution</source>
<translation>Høyoppløsning</translation> <translation>Høyoppløsning</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="511"/> <location filename="../src/GUI/optionsdialog.cpp" line="514"/>
<source>The printed area is approximately the display area. The map zoom level does not change.</source> <source>The printed area is approximately the display area. The map zoom level does not change.</source>
<translation>Det utskrevne området er omentrent det samme som visningsområdet. Kartforstørrelsesnivået endrer seg ikke.</translation> <translation>Det utskrevne området er omentrent det samme som visningsområdet. Kartforstørrelsesnivået endrer seg ikke.</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="513"/> <location filename="../src/GUI/optionsdialog.cpp" line="516"/>
<source>The zoom level will be changed so that the whole content (tracks/waypoints) fits to the printed area and the map resolution is as close as possible to the print resolution.</source> <source>The zoom level will be changed so that the whole content (tracks/waypoints) fits to the printed area and the map resolution is as close as possible to the print resolution.</source>
<translation>Forstørrelsesnivået vil endres slik at hele innholdet (spor/veipunkter) passer med utskrevet område, og kartoppløsningen er lik utskriftsoppløsningen som mulig.</translation> <translation>Forstørrelsesnivået vil endres slik at hele innholdet (spor/veipunkter) passer med utskrevet område, og kartoppløsningen er lik utskriftsoppløsningen som mulig.</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="535"/> <location filename="../src/GUI/optionsdialog.cpp" line="538"/>
<source>Name</source> <source>Name</source>
<translation>Navn</translation> <translation>Navn</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="537"/> <location filename="../src/GUI/optionsdialog.cpp" line="540"/>
<source>Date</source> <source>Date</source>
<translation>Dato</translation> <translation>Dato</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="539"/> <location filename="../src/GUI/optionsdialog.cpp" line="542"/>
<source>Distance</source> <source>Distance</source>
<translation>Avstand</translation> <translation>Avstand</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="541"/> <location filename="../src/GUI/optionsdialog.cpp" line="544"/>
<source>Time</source> <source>Time</source>
<translation>Tid</translation> <translation>Tid</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="543"/> <location filename="../src/GUI/optionsdialog.cpp" line="546"/>
<source>Moving time</source> <source>Moving time</source>
<translation>Tid i bevegelse</translation> <translation>Tid i bevegelse</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="545"/> <location filename="../src/GUI/optionsdialog.cpp" line="548"/>
<source>Item count (&gt;1)</source> <source>Item count (&gt;1)</source>
<translation>Elementantall (&gt;1)</translation> <translation>Elementantall (&gt;1)</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="560"/> <location filename="../src/GUI/optionsdialog.cpp" line="563"/>
<source>Separate graph page</source> <source>Separate graph page</source>
<translation>Separat diagramside</translation> <translation>Separat diagramside</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="570"/> <location filename="../src/GUI/optionsdialog.cpp" line="573"/>
<source>Print mode</source> <source>Print mode</source>
<translation>Utskriftsmodus</translation> <translation>Utskriftsmodus</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="571"/> <location filename="../src/GUI/optionsdialog.cpp" line="574"/>
<source>Header</source> <source>Header</source>
<translation>Topptekst</translation> <translation>Topptekst</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="579"/> <location filename="../src/GUI/optionsdialog.cpp" line="582"/>
<source>Use OpenGL</source> <source>Use OpenGL</source>
<translation>Bruk OpenGL</translation> <translation>Bruk OpenGL</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="582"/> <location filename="../src/GUI/optionsdialog.cpp" line="585"/>
<source>Enable HTTP/2</source> <source>Enable HTTP/2</source>
<translation>Skru HTTP/2</translation> <translation>Skru HTTP/2</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="589"/> <location filename="../src/GUI/optionsdialog.cpp" line="592"/>
<source>MB</source> <source>MB</source>
<translation>MB</translation> <translation>MB</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="599"/> <location filename="../src/GUI/optionsdialog.cpp" line="602"/>
<source>Image cache size:</source> <source>Image cache size:</source>
<translation>Bildehurtiglagringstørrelse:</translation> <translation>Bildehurtiglagringstørrelse:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="600"/> <location filename="../src/GUI/optionsdialog.cpp" line="603"/>
<source>Connection timeout:</source> <source>Connection timeout:</source>
<translation>Tilkoblingstidsavbrudd:</translation> <translation>Tilkoblingstidsavbrudd:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="616"/> <location filename="../src/GUI/optionsdialog.cpp" line="619"/>
<location filename="../src/GUI/optionsdialog.cpp" line="641"/> <location filename="../src/GUI/optionsdialog.cpp" line="644"/>
<source>System</source> <source>System</source>
<translation>System</translation> <translation>System</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="634"/> <location filename="../src/GUI/optionsdialog.cpp" line="637"/>
<source>Appearance</source> <source>Appearance</source>
<translation>Utseende</translation> <translation>Utseende</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="636"/> <location filename="../src/GUI/optionsdialog.cpp" line="639"/>
<source>Maps</source> <source>Maps</source>
<translation>Kart</translation> <translation>Kart</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="637"/> <location filename="../src/GUI/optionsdialog.cpp" line="640"/>
<source>Data</source> <source>Data</source>
<translation>Data</translation> <translation>Data</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="639"/> <location filename="../src/GUI/optionsdialog.cpp" line="642"/>
<source>Print &amp; Export</source> <source>Print &amp; Export</source>
<translation>Utskrift og ekport</translation> <translation>Utskrift og ekport</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="668"/> <location filename="../src/GUI/optionsdialog.cpp" line="671"/>
<source>Options</source> <source>Options</source>
<translation>Valg</translation> <translation>Valg</translation>
</message> </message>
@ -1663,17 +1668,17 @@
<message> <message>
<location filename="../src/GUI/speedgraph.cpp" line="31"/> <location filename="../src/GUI/speedgraph.cpp" line="31"/>
<source>min/km</source> <source>min/km</source>
<translation type="unfinished">min/km</translation> <translation>min/km</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/speedgraph.cpp" line="32"/> <location filename="../src/GUI/speedgraph.cpp" line="32"/>
<source>min/mi</source> <source>min/mi</source>
<translation type="unfinished">min/mi</translation> <translation>min/mi</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/speedgraph.cpp" line="32"/> <location filename="../src/GUI/speedgraph.cpp" line="32"/>
<source>min/nmi</source> <source>min/nmi</source>
<translation type="unfinished">min/nmi</translation> <translation>min/nmi</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/speedgraph.cpp" line="34"/> <location filename="../src/GUI/speedgraph.cpp" line="34"/>
@ -1736,7 +1741,7 @@
<message> <message>
<location filename="../src/GUI/speedgraphitem.cpp" line="28"/> <location filename="../src/GUI/speedgraphitem.cpp" line="28"/>
<source>min/nmi</source> <source>min/nmi</source>
<translation type="unfinished">min/nmi</translation> <translation>min/nmi</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/speedgraphitem.cpp" line="31"/> <location filename="../src/GUI/speedgraphitem.cpp" line="31"/>

View File

@ -47,82 +47,87 @@
<context> <context>
<name>Data</name> <name>Data</name>
<message> <message>
<location filename="../src/data/data.cpp" line="176"/> <location filename="../src/data/data.cpp" line="179"/>
<source>Supported files</source> <source>Supported files</source>
<translation>Obsługiwane pliki</translation> <translation>Obsługiwane pliki</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="177"/> <location filename="../src/data/data.cpp" line="180"/>
<source>CSV files</source> <source>CSV files</source>
<translation>Pliki CSV</translation> <translation>Pliki CSV</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="178"/> <location filename="../src/data/data.cpp" line="181"/>
<source>CUP files</source> <source>CUP files</source>
<translation type="unfinished"></translation> <translation>Pliki CUP</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="179"/> <location filename="../src/data/data.cpp" line="182"/>
<source>FIT files</source> <source>FIT files</source>
<translation>Pliki FIT</translation> <translation>Pliki FIT</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="181"/> <location filename="../src/data/data.cpp" line="184"/>
<source>GeoJSON files</source> <source>GeoJSON files</source>
<translation>Pliki GeoJSON</translation> <translation>Pliki GeoJSON</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="183"/> <location filename="../src/data/data.cpp" line="186"/>
<source>GPI files</source> <source>GPI files</source>
<translation type="unfinished"></translation> <translation>Pliki GPI</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="184"/> <location filename="../src/data/data.cpp" line="187"/>
<source>GPX files</source> <source>GPX files</source>
<translation>Pliki GPX</translation> <translation>Pliki GPX</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="185"/> <location filename="../src/data/data.cpp" line="188"/>
<source>IGC files</source> <source>IGC files</source>
<translation>Pliki IGC</translation> <translation>Pliki IGC</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="186"/> <location filename="../src/data/data.cpp" line="189"/>
<source>JPEG images</source> <source>JPEG images</source>
<translation>Pliki JPEG</translation> <translation>Pliki JPEG</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="187"/> <location filename="../src/data/data.cpp" line="190"/>
<source>KML files</source> <source>KML files</source>
<translation>Pliki KML</translation> <translation>Pliki KML</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="188"/> <location filename="../src/data/data.cpp" line="191"/>
<source>LOC files</source> <source>LOC files</source>
<translation>Pliki LOC</translation> <translation>Pliki LOC</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="189"/> <location filename="../src/data/data.cpp" line="192"/>
<source>NMEA files</source> <source>NMEA files</source>
<translation>Pliki NMEA</translation> <translation>Pliki NMEA</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="190"/> <location filename="../src/data/data.cpp" line="193"/>
<source>OziExplorer files</source> <source>OziExplorer files</source>
<translation>Pliki OziExplorer</translation> <translation>Pliki OziExplorer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="192"/> <location filename="../src/data/data.cpp" line="195"/>
<source>SML files</source>
<translation>Pliki SML</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="196"/>
<source>TCX files</source> <source>TCX files</source>
<translation>Pliki TCX</translation> <translation>Pliki TCX</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="191"/> <location filename="../src/data/data.cpp" line="194"/>
<source>SLF files</source> <source>SLF files</source>
<translation>Pliki SLF</translation> <translation>Pliki SLF</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="193"/> <location filename="../src/data/data.cpp" line="197"/>
<source>All files</source> <source>All files</source>
<translation>Wszystkie pliki</translation> <translation>Wszystkie pliki</translation>
</message> </message>
@ -1131,7 +1136,7 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="295"/> <location filename="../src/GUI/optionsdialog.cpp" line="295"/>
<location filename="../src/GUI/optionsdialog.cpp" line="572"/> <location filename="../src/GUI/optionsdialog.cpp" line="575"/>
<source>Graphs</source> <source>Graphs</source>
<translation>Wykresy</translation> <translation>Wykresy</translation>
</message> </message>
@ -1233,14 +1238,14 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="322"/> <location filename="../src/GUI/optionsdialog.cpp" line="322"/>
<location filename="../src/GUI/optionsdialog.cpp" line="429"/> <location filename="../src/GUI/optionsdialog.cpp" line="432"/>
<location filename="../src/GUI/optionsdialog.cpp" line="492"/> <location filename="../src/GUI/optionsdialog.cpp" line="495"/>
<source>Elevation:</source> <source>Elevation:</source>
<translation>Wysokość:</translation> <translation>Wysokość:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="323"/> <location filename="../src/GUI/optionsdialog.cpp" line="323"/>
<location filename="../src/GUI/optionsdialog.cpp" line="428"/> <location filename="../src/GUI/optionsdialog.cpp" line="431"/>
<source>Speed:</source> <source>Speed:</source>
<translation>Prędkość:</translation> <translation>Prędkość:</translation>
</message> </message>
@ -1296,69 +1301,69 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="376"/> <location filename="../src/GUI/optionsdialog.cpp" line="376"/>
<location filename="../src/GUI/optionsdialog.cpp" line="595"/> <location filename="../src/GUI/optionsdialog.cpp" line="598"/>
<source>s</source> <source>s</source>
<translation>s</translation> <translation>s</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="389"/> <location filename="../src/GUI/optionsdialog.cpp" line="392"/>
<source>Minimal speed:</source> <source>Minimal speed:</source>
<translation>Minimalna prędkość:</translation> <translation>Minimalna prędkość:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="390"/> <location filename="../src/GUI/optionsdialog.cpp" line="393"/>
<source>Minimal duration:</source> <source>Minimal duration:</source>
<translation>Minimalny czas trwania:</translation> <translation>Minimalny czas trwania:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="400"/> <location filename="../src/GUI/optionsdialog.cpp" line="403"/>
<source>Computed from distance/time</source> <source>Computed from distance/time</source>
<translation>Obliczona na postawie odległości/czasu</translation> <translation>Obliczona na postawie odległości/czasu</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="401"/> <location filename="../src/GUI/optionsdialog.cpp" line="404"/>
<source>Recorded by device</source> <source>Recorded by device</source>
<translation>Zapisana przez urządzenie</translation> <translation>Zapisana przez urządzenie</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="407"/> <location filename="../src/GUI/optionsdialog.cpp" line="410"/>
<location filename="../src/GUI/optionsdialog.cpp" line="465"/> <location filename="../src/GUI/optionsdialog.cpp" line="468"/>
<source>GPS data</source> <source>GPS data</source>
<translation>Dane GPS</translation> <translation>Dane GPS</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="408"/> <location filename="../src/GUI/optionsdialog.cpp" line="411"/>
<location filename="../src/GUI/optionsdialog.cpp" line="466"/> <location filename="../src/GUI/optionsdialog.cpp" line="469"/>
<source>DEM data</source> <source>DEM data</source>
<translation>Dane DEM</translation> <translation>Dane DEM</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="445"/> <location filename="../src/GUI/optionsdialog.cpp" line="448"/>
<source>Elevation</source> <source>Elevation</source>
<translation>Wysokość</translation> <translation>Wysokość</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="456"/> <location filename="../src/GUI/optionsdialog.cpp" line="459"/>
<source>Filtering</source> <source>Filtering</source>
<translation>Filtrowanie</translation> <translation>Filtrowanie</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="457"/> <location filename="../src/GUI/optionsdialog.cpp" line="460"/>
<source>Sources</source> <source>Sources</source>
<translation>Źródła</translation> <translation>Źródła</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="458"/> <location filename="../src/GUI/optionsdialog.cpp" line="461"/>
<source>Pause detection</source> <source>Pause detection</source>
<translation>Wykrywanie postoju</translation> <translation>Wykrywanie postoju</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="491"/> <location filename="../src/GUI/optionsdialog.cpp" line="494"/>
<source>Radius:</source> <source>Radius:</source>
<translation>Promień:</translation> <translation>Promień:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="439"/> <location filename="../src/GUI/optionsdialog.cpp" line="442"/>
<source>Speed</source> <source>Speed</source>
<translation>Prędkość</translation> <translation>Prędkość</translation>
</message> </message>
@ -1403,144 +1408,144 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="477"/> <location filename="../src/GUI/optionsdialog.cpp" line="480"/>
<source>mi</source> <source>mi</source>
<translation>mi</translation> <translation>mi</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="480"/> <location filename="../src/GUI/optionsdialog.cpp" line="483"/>
<source>nmi</source> <source>nmi</source>
<translation>nmi</translation> <translation>nmi</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="483"/> <location filename="../src/GUI/optionsdialog.cpp" line="486"/>
<source>km</source> <source>km</source>
<translation>km</translation> <translation>km</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="498"/> <location filename="../src/GUI/optionsdialog.cpp" line="501"/>
<location filename="../src/GUI/optionsdialog.cpp" line="638"/> <location filename="../src/GUI/optionsdialog.cpp" line="641"/>
<source>POI</source> <source>POI</source>
<translation>POI</translation> <translation>POI</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="505"/> <location filename="../src/GUI/optionsdialog.cpp" line="508"/>
<source>WYSIWYG</source> <source>WYSIWYG</source>
<translation>WYSIWYG</translation> <translation>WYSIWYG</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="506"/> <location filename="../src/GUI/optionsdialog.cpp" line="509"/>
<source>High-Resolution</source> <source>High-Resolution</source>
<translation>Wysoka rozdzielczość</translation> <translation>Wysoka rozdzielczość</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="511"/> <location filename="../src/GUI/optionsdialog.cpp" line="514"/>
<source>The printed area is approximately the display area. The map zoom level does not change.</source> <source>The printed area is approximately the display area. The map zoom level does not change.</source>
<translation>Wydrukowany obszar jest w przybliżeniu obszarem wyświetlania. Poziom powiększenia mapy nie zmienia się.</translation> <translation>Wydrukowany obszar jest w przybliżeniu obszarem wyświetlania. Poziom powiększenia mapy nie zmienia się.</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="513"/> <location filename="../src/GUI/optionsdialog.cpp" line="516"/>
<source>The zoom level will be changed so that the whole content (tracks/waypoints) fits to the printed area and the map resolution is as close as possible to the print resolution.</source> <source>The zoom level will be changed so that the whole content (tracks/waypoints) fits to the printed area and the map resolution is as close as possible to the print resolution.</source>
<translation>Poziom powiększenia mapy zostanie dostosowany w taki sposób, aby cała zawartość (ścieżki/punkty) wchodziła do drukowanego obszaru, a rozdzielczość mapy była jak najbliższa rozdzielczości wydruku.</translation> <translation>Poziom powiększenia mapy zostanie dostosowany w taki sposób, aby cała zawartość (ścieżki/punkty) wchodziła do drukowanego obszaru, a rozdzielczość mapy była jak najbliższa rozdzielczości wydruku.</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="535"/> <location filename="../src/GUI/optionsdialog.cpp" line="538"/>
<source>Name</source> <source>Name</source>
<translation>Nazwa</translation> <translation>Nazwa</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="537"/> <location filename="../src/GUI/optionsdialog.cpp" line="540"/>
<source>Date</source> <source>Date</source>
<translation>Data</translation> <translation>Data</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="539"/> <location filename="../src/GUI/optionsdialog.cpp" line="542"/>
<source>Distance</source> <source>Distance</source>
<translation>Dystans</translation> <translation>Dystans</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="541"/> <location filename="../src/GUI/optionsdialog.cpp" line="544"/>
<source>Time</source> <source>Time</source>
<translation>Czas</translation> <translation>Czas</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="543"/> <location filename="../src/GUI/optionsdialog.cpp" line="546"/>
<source>Moving time</source> <source>Moving time</source>
<translation>Czas ruchu</translation> <translation>Czas ruchu</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="545"/> <location filename="../src/GUI/optionsdialog.cpp" line="548"/>
<source>Item count (&gt;1)</source> <source>Item count (&gt;1)</source>
<translation>Liczba elementów (&gt;1)</translation> <translation>Liczba elementów (&gt;1)</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="560"/> <location filename="../src/GUI/optionsdialog.cpp" line="563"/>
<source>Separate graph page</source> <source>Separate graph page</source>
<translation>Oddzielna strona wykresu</translation> <translation>Oddzielna strona wykresu</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="570"/> <location filename="../src/GUI/optionsdialog.cpp" line="573"/>
<source>Print mode</source> <source>Print mode</source>
<translation>Tryb wydruku</translation> <translation>Tryb wydruku</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="571"/> <location filename="../src/GUI/optionsdialog.cpp" line="574"/>
<source>Header</source> <source>Header</source>
<translation>Nagłówek</translation> <translation>Nagłówek</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="579"/> <location filename="../src/GUI/optionsdialog.cpp" line="582"/>
<source>Use OpenGL</source> <source>Use OpenGL</source>
<translation>Używaj OpenGL</translation> <translation>Używaj OpenGL</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="582"/> <location filename="../src/GUI/optionsdialog.cpp" line="585"/>
<source>Enable HTTP/2</source> <source>Enable HTTP/2</source>
<translation>Włącz HTTP/2</translation> <translation>Włącz HTTP/2</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="589"/> <location filename="../src/GUI/optionsdialog.cpp" line="592"/>
<source>MB</source> <source>MB</source>
<translation>MB</translation> <translation>MB</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="599"/> <location filename="../src/GUI/optionsdialog.cpp" line="602"/>
<source>Image cache size:</source> <source>Image cache size:</source>
<translation>Rozmiar pamięci podręcznej obrazu:</translation> <translation>Rozmiar pamięci podręcznej obrazu:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="600"/> <location filename="../src/GUI/optionsdialog.cpp" line="603"/>
<source>Connection timeout:</source> <source>Connection timeout:</source>
<translation>Limit czasu połączenia:</translation> <translation>Limit czasu połączenia:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="616"/> <location filename="../src/GUI/optionsdialog.cpp" line="619"/>
<location filename="../src/GUI/optionsdialog.cpp" line="641"/> <location filename="../src/GUI/optionsdialog.cpp" line="644"/>
<source>System</source> <source>System</source>
<translation>System</translation> <translation>System</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="634"/> <location filename="../src/GUI/optionsdialog.cpp" line="637"/>
<source>Appearance</source> <source>Appearance</source>
<translation>Wygląd</translation> <translation>Wygląd</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="636"/> <location filename="../src/GUI/optionsdialog.cpp" line="639"/>
<source>Maps</source> <source>Maps</source>
<translation>Mapy</translation> <translation>Mapy</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="637"/> <location filename="../src/GUI/optionsdialog.cpp" line="640"/>
<source>Data</source> <source>Data</source>
<translation>Dane</translation> <translation>Dane</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="639"/> <location filename="../src/GUI/optionsdialog.cpp" line="642"/>
<source>Print &amp; Export</source> <source>Print &amp; Export</source>
<translation>Drukowanie i eksport</translation> <translation>Drukowanie i eksport</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="668"/> <location filename="../src/GUI/optionsdialog.cpp" line="671"/>
<source>Options</source> <source>Options</source>
<translation>Opcje</translation> <translation>Opcje</translation>
</message> </message>

View File

@ -47,82 +47,87 @@
<context> <context>
<name>Data</name> <name>Data</name>
<message> <message>
<location filename="../src/data/data.cpp" line="176"/> <location filename="../src/data/data.cpp" line="179"/>
<source>Supported files</source> <source>Supported files</source>
<translation>Formatos suportados</translation> <translation>Formatos suportados</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="177"/> <location filename="../src/data/data.cpp" line="180"/>
<source>CSV files</source> <source>CSV files</source>
<translation>Arquivos CSV</translation> <translation>Arquivos CSV</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="178"/> <location filename="../src/data/data.cpp" line="181"/>
<source>CUP files</source> <source>CUP files</source>
<translation>Arquivos CUP</translation> <translation>Arquivos CUP</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="179"/> <location filename="../src/data/data.cpp" line="182"/>
<source>FIT files</source> <source>FIT files</source>
<translation>Arquivos FIT</translation> <translation>Arquivos FIT</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="181"/> <location filename="../src/data/data.cpp" line="184"/>
<source>GeoJSON files</source> <source>GeoJSON files</source>
<translation>Arquivos GeoJSON</translation> <translation>Arquivos GeoJSON</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="183"/> <location filename="../src/data/data.cpp" line="186"/>
<source>GPI files</source> <source>GPI files</source>
<translation>Arquivos GPI</translation> <translation>Arquivos GPI</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="184"/> <location filename="../src/data/data.cpp" line="187"/>
<source>GPX files</source> <source>GPX files</source>
<translation>Arquivos GPX</translation> <translation>Arquivos GPX</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="185"/> <location filename="../src/data/data.cpp" line="188"/>
<source>IGC files</source> <source>IGC files</source>
<translation>Arquivos IGC</translation> <translation>Arquivos IGC</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="186"/> <location filename="../src/data/data.cpp" line="189"/>
<source>JPEG images</source> <source>JPEG images</source>
<translation>Imagens JPEG</translation> <translation>Imagens JPEG</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="187"/> <location filename="../src/data/data.cpp" line="190"/>
<source>KML files</source> <source>KML files</source>
<translation>Arquivos KML</translation> <translation>Arquivos KML</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="188"/> <location filename="../src/data/data.cpp" line="191"/>
<source>LOC files</source> <source>LOC files</source>
<translation>Arquivos LOC</translation> <translation>Arquivos LOC</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="189"/> <location filename="../src/data/data.cpp" line="192"/>
<source>NMEA files</source> <source>NMEA files</source>
<translation>Arquivos NMEA</translation> <translation>Arquivos NMEA</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="190"/> <location filename="../src/data/data.cpp" line="193"/>
<source>OziExplorer files</source> <source>OziExplorer files</source>
<translation>Arquivos OziExplorer</translation> <translation>Arquivos OziExplorer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="191"/> <location filename="../src/data/data.cpp" line="194"/>
<source>SLF files</source> <source>SLF files</source>
<translation>Arquivos SLF</translation> <translation>Arquivos SLF</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="192"/> <location filename="../src/data/data.cpp" line="195"/>
<source>SML files</source>
<translation>Arquivos SML</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="196"/>
<source>TCX files</source> <source>TCX files</source>
<translation>Arquivos TCX</translation> <translation>Arquivos TCX</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="193"/> <location filename="../src/data/data.cpp" line="197"/>
<source>All files</source> <source>All files</source>
<translation>Todos os arquivos</translation> <translation>Todos os arquivos</translation>
</message> </message>
@ -1251,7 +1256,7 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="295"/> <location filename="../src/GUI/optionsdialog.cpp" line="295"/>
<location filename="../src/GUI/optionsdialog.cpp" line="572"/> <location filename="../src/GUI/optionsdialog.cpp" line="575"/>
<source>Graphs</source> <source>Graphs</source>
<translation>Gráficos</translation> <translation>Gráficos</translation>
</message> </message>
@ -1267,14 +1272,14 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="322"/> <location filename="../src/GUI/optionsdialog.cpp" line="322"/>
<location filename="../src/GUI/optionsdialog.cpp" line="429"/> <location filename="../src/GUI/optionsdialog.cpp" line="432"/>
<location filename="../src/GUI/optionsdialog.cpp" line="492"/> <location filename="../src/GUI/optionsdialog.cpp" line="495"/>
<source>Elevation:</source> <source>Elevation:</source>
<translation>Altitude:</translation> <translation>Altitude:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="323"/> <location filename="../src/GUI/optionsdialog.cpp" line="323"/>
<location filename="../src/GUI/optionsdialog.cpp" line="428"/> <location filename="../src/GUI/optionsdialog.cpp" line="431"/>
<source>Speed:</source> <source>Speed:</source>
<translation>Velocidade:</translation> <translation>Velocidade:</translation>
</message> </message>
@ -1335,211 +1340,211 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="376"/> <location filename="../src/GUI/optionsdialog.cpp" line="376"/>
<location filename="../src/GUI/optionsdialog.cpp" line="595"/> <location filename="../src/GUI/optionsdialog.cpp" line="598"/>
<source>s</source> <source>s</source>
<translation>s</translation> <translation>s</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="389"/> <location filename="../src/GUI/optionsdialog.cpp" line="392"/>
<source>Minimal speed:</source> <source>Minimal speed:</source>
<translation>Velocidade Mínima:</translation> <translation>Velocidade Mínima:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="390"/> <location filename="../src/GUI/optionsdialog.cpp" line="393"/>
<source>Minimal duration:</source> <source>Minimal duration:</source>
<translation>Duração mínima:</translation> <translation>Duração mínima:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="400"/> <location filename="../src/GUI/optionsdialog.cpp" line="403"/>
<source>Computed from distance/time</source> <source>Computed from distance/time</source>
<translation>Calculada a partir da distância/tempo</translation> <translation>Calculada a partir da distância/tempo</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="401"/> <location filename="../src/GUI/optionsdialog.cpp" line="404"/>
<source>Recorded by device</source> <source>Recorded by device</source>
<translation>Gravada através de dispositivo</translation> <translation>Gravada através de dispositivo</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="407"/> <location filename="../src/GUI/optionsdialog.cpp" line="410"/>
<location filename="../src/GUI/optionsdialog.cpp" line="465"/> <location filename="../src/GUI/optionsdialog.cpp" line="468"/>
<source>GPS data</source> <source>GPS data</source>
<translation>Dados de GPS</translation> <translation>Dados de GPS</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="408"/> <location filename="../src/GUI/optionsdialog.cpp" line="411"/>
<location filename="../src/GUI/optionsdialog.cpp" line="466"/> <location filename="../src/GUI/optionsdialog.cpp" line="469"/>
<source>DEM data</source> <source>DEM data</source>
<translation>Dados de DEM</translation> <translation>Dados de DEM</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="439"/> <location filename="../src/GUI/optionsdialog.cpp" line="442"/>
<source>Speed</source> <source>Speed</source>
<translation>Velocidade</translation> <translation>Velocidade</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="445"/> <location filename="../src/GUI/optionsdialog.cpp" line="448"/>
<source>Elevation</source> <source>Elevation</source>
<translation>Altitude</translation> <translation>Altitude</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="456"/> <location filename="../src/GUI/optionsdialog.cpp" line="459"/>
<source>Filtering</source> <source>Filtering</source>
<translation>Filtragem</translation> <translation>Filtragem</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="457"/> <location filename="../src/GUI/optionsdialog.cpp" line="460"/>
<source>Sources</source> <source>Sources</source>
<translation>Fontes</translation> <translation>Fontes</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="458"/> <location filename="../src/GUI/optionsdialog.cpp" line="461"/>
<source>Pause detection</source> <source>Pause detection</source>
<translation>Detecção de pausa</translation> <translation>Detecção de pausa</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="477"/> <location filename="../src/GUI/optionsdialog.cpp" line="480"/>
<source>mi</source> <source>mi</source>
<translation>mi</translation> <translation>mi</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="480"/> <location filename="../src/GUI/optionsdialog.cpp" line="483"/>
<source>nmi</source> <source>nmi</source>
<translation>nmi</translation> <translation>nmi</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="483"/> <location filename="../src/GUI/optionsdialog.cpp" line="486"/>
<source>km</source> <source>km</source>
<translation>km</translation> <translation>km</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="491"/> <location filename="../src/GUI/optionsdialog.cpp" line="494"/>
<source>Radius:</source> <source>Radius:</source>
<translation>Raio:</translation> <translation>Raio:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="498"/> <location filename="../src/GUI/optionsdialog.cpp" line="501"/>
<location filename="../src/GUI/optionsdialog.cpp" line="638"/> <location filename="../src/GUI/optionsdialog.cpp" line="641"/>
<source>POI</source> <source>POI</source>
<translation>POI</translation> <translation>POI</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="505"/> <location filename="../src/GUI/optionsdialog.cpp" line="508"/>
<source>WYSIWYG</source> <source>WYSIWYG</source>
<translation>WYSIWYG</translation> <translation>WYSIWYG</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="506"/> <location filename="../src/GUI/optionsdialog.cpp" line="509"/>
<source>High-Resolution</source> <source>High-Resolution</source>
<translation>Alta resolução</translation> <translation>Alta resolução</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="511"/> <location filename="../src/GUI/optionsdialog.cpp" line="514"/>
<source>The printed area is approximately the display area. The map zoom level does not change.</source> <source>The printed area is approximately the display area. The map zoom level does not change.</source>
<translation>A área de impressão é aproximadamente a área de tela. O nível de zoom do mapa não é alterado.</translation> <translation>A área de impressão é aproximadamente a área de tela. O nível de zoom do mapa não é alterado.</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="513"/> <location filename="../src/GUI/optionsdialog.cpp" line="516"/>
<source>The zoom level will be changed so that the whole content (tracks/waypoints) fits to the printed area and the map resolution is as close as possible to the print resolution.</source> <source>The zoom level will be changed so that the whole content (tracks/waypoints) fits to the printed area and the map resolution is as close as possible to the print resolution.</source>
<translation>O nível de zoom será alterado de modo que todo o conteúdo (trilhas/waypoints) caiba na área de impressão e a resolução seja tão próxima quanto possível da resolução de impressão.</translation> <translation>O nível de zoom será alterado de modo que todo o conteúdo (trilhas/waypoints) caiba na área de impressão e a resolução seja tão próxima quanto possível da resolução de impressão.</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="535"/> <location filename="../src/GUI/optionsdialog.cpp" line="538"/>
<source>Name</source> <source>Name</source>
<translation>Nome</translation> <translation>Nome</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="537"/> <location filename="../src/GUI/optionsdialog.cpp" line="540"/>
<source>Date</source> <source>Date</source>
<translation>Data</translation> <translation>Data</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="539"/> <location filename="../src/GUI/optionsdialog.cpp" line="542"/>
<source>Distance</source> <source>Distance</source>
<translation>Distância</translation> <translation>Distância</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="541"/> <location filename="../src/GUI/optionsdialog.cpp" line="544"/>
<source>Time</source> <source>Time</source>
<translation>Tempo</translation> <translation>Tempo</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="543"/> <location filename="../src/GUI/optionsdialog.cpp" line="546"/>
<source>Moving time</source> <source>Moving time</source>
<translation>Tempo em movimento</translation> <translation>Tempo em movimento</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="545"/> <location filename="../src/GUI/optionsdialog.cpp" line="548"/>
<source>Item count (&gt;1)</source> <source>Item count (&gt;1)</source>
<translation>Número de itens (&gt;1)</translation> <translation>Número de itens (&gt;1)</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="560"/> <location filename="../src/GUI/optionsdialog.cpp" line="563"/>
<source>Separate graph page</source> <source>Separate graph page</source>
<translation>Separar página de gráficos</translation> <translation>Separar página de gráficos</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="570"/> <location filename="../src/GUI/optionsdialog.cpp" line="573"/>
<source>Print mode</source> <source>Print mode</source>
<translation>Modo de impressão</translation> <translation>Modo de impressão</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="571"/> <location filename="../src/GUI/optionsdialog.cpp" line="574"/>
<source>Header</source> <source>Header</source>
<translation>Cabeçalho</translation> <translation>Cabeçalho</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="579"/> <location filename="../src/GUI/optionsdialog.cpp" line="582"/>
<source>Use OpenGL</source> <source>Use OpenGL</source>
<translation>Usar OpenGL</translation> <translation>Usar OpenGL</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="582"/> <location filename="../src/GUI/optionsdialog.cpp" line="585"/>
<source>Enable HTTP/2</source> <source>Enable HTTP/2</source>
<translation>Habilitar HTTP/2</translation> <translation>Habilitar HTTP/2</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="589"/> <location filename="../src/GUI/optionsdialog.cpp" line="592"/>
<source>MB</source> <source>MB</source>
<translation>MB</translation> <translation>MB</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="599"/> <location filename="../src/GUI/optionsdialog.cpp" line="602"/>
<source>Image cache size:</source> <source>Image cache size:</source>
<translation>Tamanho do cache de imagens:</translation> <translation>Tamanho do cache de imagens:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="600"/> <location filename="../src/GUI/optionsdialog.cpp" line="603"/>
<source>Connection timeout:</source> <source>Connection timeout:</source>
<translation>Tempo de espera de conexão:</translation> <translation>Tempo de espera de conexão:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="616"/> <location filename="../src/GUI/optionsdialog.cpp" line="619"/>
<location filename="../src/GUI/optionsdialog.cpp" line="641"/> <location filename="../src/GUI/optionsdialog.cpp" line="644"/>
<source>System</source> <source>System</source>
<translation>Sistema</translation> <translation>Sistema</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="634"/> <location filename="../src/GUI/optionsdialog.cpp" line="637"/>
<source>Appearance</source> <source>Appearance</source>
<translation>Aparência</translation> <translation>Aparência</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="636"/> <location filename="../src/GUI/optionsdialog.cpp" line="639"/>
<source>Maps</source> <source>Maps</source>
<translation>Mapas</translation> <translation>Mapas</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="637"/> <location filename="../src/GUI/optionsdialog.cpp" line="640"/>
<source>Data</source> <source>Data</source>
<translation>Dados</translation> <translation>Dados</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="639"/> <location filename="../src/GUI/optionsdialog.cpp" line="642"/>
<source>Print &amp; Export</source> <source>Print &amp; Export</source>
<translation>Imprimir e Exportar</translation> <translation>Imprimir e Exportar</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="668"/> <location filename="../src/GUI/optionsdialog.cpp" line="671"/>
<source>Options</source> <source>Options</source>
<translation>Preferências</translation> <translation>Preferências</translation>
</message> </message>

View File

@ -47,82 +47,87 @@
<context> <context>
<name>Data</name> <name>Data</name>
<message> <message>
<location filename="../src/data/data.cpp" line="176"/> <location filename="../src/data/data.cpp" line="179"/>
<source>Supported files</source> <source>Supported files</source>
<translation>Все поддерживаемые файлы</translation> <translation>Все поддерживаемые файлы</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="177"/> <location filename="../src/data/data.cpp" line="180"/>
<source>CSV files</source> <source>CSV files</source>
<translation>CSV файлы</translation> <translation>CSV файлы</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="178"/> <location filename="../src/data/data.cpp" line="181"/>
<source>CUP files</source> <source>CUP files</source>
<translation>CUP файлы</translation> <translation>CUP файлы</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="179"/> <location filename="../src/data/data.cpp" line="182"/>
<source>FIT files</source> <source>FIT files</source>
<translation>FIT файлы</translation> <translation>FIT файлы</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="181"/> <location filename="../src/data/data.cpp" line="184"/>
<source>GeoJSON files</source> <source>GeoJSON files</source>
<translation>GeoJSON файлы</translation> <translation>GeoJSON файлы</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="183"/> <location filename="../src/data/data.cpp" line="186"/>
<source>GPI files</source> <source>GPI files</source>
<translation>GPI файлы</translation> <translation>GPI файлы</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="184"/> <location filename="../src/data/data.cpp" line="187"/>
<source>GPX files</source> <source>GPX files</source>
<translation>GPX файлы</translation> <translation>GPX файлы</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="185"/> <location filename="../src/data/data.cpp" line="188"/>
<source>IGC files</source> <source>IGC files</source>
<translation>IGC файлы</translation> <translation>IGC файлы</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="186"/> <location filename="../src/data/data.cpp" line="189"/>
<source>JPEG images</source> <source>JPEG images</source>
<translation>JPEG изображения</translation> <translation>JPEG изображения</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="187"/> <location filename="../src/data/data.cpp" line="190"/>
<source>KML files</source> <source>KML files</source>
<translation>KML файлы</translation> <translation>KML файлы</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="188"/> <location filename="../src/data/data.cpp" line="191"/>
<source>LOC files</source> <source>LOC files</source>
<translation>LOC файлы</translation> <translation>LOC файлы</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="189"/> <location filename="../src/data/data.cpp" line="192"/>
<source>NMEA files</source> <source>NMEA files</source>
<translation>NMEA файлы</translation> <translation>NMEA файлы</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="190"/> <location filename="../src/data/data.cpp" line="193"/>
<source>OziExplorer files</source> <source>OziExplorer files</source>
<translation>OziExplorer файлы</translation> <translation>OziExplorer файлы</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="192"/> <location filename="../src/data/data.cpp" line="195"/>
<source>SML files</source>
<translation>SML файлы</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="196"/>
<source>TCX files</source> <source>TCX files</source>
<translation>TCX файлы</translation> <translation>TCX файлы</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="191"/> <location filename="../src/data/data.cpp" line="194"/>
<source>SLF files</source> <source>SLF files</source>
<translation>SLF файлы</translation> <translation>SLF файлы</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="193"/> <location filename="../src/data/data.cpp" line="197"/>
<source>All files</source> <source>All files</source>
<translation>Все файлы</translation> <translation>Все файлы</translation>
</message> </message>
@ -1131,7 +1136,7 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="295"/> <location filename="../src/GUI/optionsdialog.cpp" line="295"/>
<location filename="../src/GUI/optionsdialog.cpp" line="572"/> <location filename="../src/GUI/optionsdialog.cpp" line="575"/>
<source>Graphs</source> <source>Graphs</source>
<translation>Графики</translation> <translation>Графики</translation>
</message> </message>
@ -1233,14 +1238,14 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="322"/> <location filename="../src/GUI/optionsdialog.cpp" line="322"/>
<location filename="../src/GUI/optionsdialog.cpp" line="429"/> <location filename="../src/GUI/optionsdialog.cpp" line="432"/>
<location filename="../src/GUI/optionsdialog.cpp" line="492"/> <location filename="../src/GUI/optionsdialog.cpp" line="495"/>
<source>Elevation:</source> <source>Elevation:</source>
<translation>Высота:</translation> <translation>Высота:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="323"/> <location filename="../src/GUI/optionsdialog.cpp" line="323"/>
<location filename="../src/GUI/optionsdialog.cpp" line="428"/> <location filename="../src/GUI/optionsdialog.cpp" line="431"/>
<source>Speed:</source> <source>Speed:</source>
<translation>Скорость:</translation> <translation>Скорость:</translation>
</message> </message>
@ -1296,69 +1301,69 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="376"/> <location filename="../src/GUI/optionsdialog.cpp" line="376"/>
<location filename="../src/GUI/optionsdialog.cpp" line="595"/> <location filename="../src/GUI/optionsdialog.cpp" line="598"/>
<source>s</source> <source>s</source>
<translation>с</translation> <translation>с</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="389"/> <location filename="../src/GUI/optionsdialog.cpp" line="392"/>
<source>Minimal speed:</source> <source>Minimal speed:</source>
<translation>Минимальная скорость:</translation> <translation>Минимальная скорость:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="390"/> <location filename="../src/GUI/optionsdialog.cpp" line="393"/>
<source>Minimal duration:</source> <source>Minimal duration:</source>
<translation>Минимальная продолжительность:</translation> <translation>Минимальная продолжительность:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="400"/> <location filename="../src/GUI/optionsdialog.cpp" line="403"/>
<source>Computed from distance/time</source> <source>Computed from distance/time</source>
<translation>Вычисленная из расстояния/времени</translation> <translation>Вычисленная из расстояния/времени</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="401"/> <location filename="../src/GUI/optionsdialog.cpp" line="404"/>
<source>Recorded by device</source> <source>Recorded by device</source>
<translation>Записанная устройством</translation> <translation>Записанная устройством</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="407"/> <location filename="../src/GUI/optionsdialog.cpp" line="410"/>
<location filename="../src/GUI/optionsdialog.cpp" line="465"/> <location filename="../src/GUI/optionsdialog.cpp" line="468"/>
<source>GPS data</source> <source>GPS data</source>
<translation>GPS данные</translation> <translation>GPS данные</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="408"/> <location filename="../src/GUI/optionsdialog.cpp" line="411"/>
<location filename="../src/GUI/optionsdialog.cpp" line="466"/> <location filename="../src/GUI/optionsdialog.cpp" line="469"/>
<source>DEM data</source> <source>DEM data</source>
<translation>DEM данные</translation> <translation>DEM данные</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="445"/> <location filename="../src/GUI/optionsdialog.cpp" line="448"/>
<source>Elevation</source> <source>Elevation</source>
<translation>Высота</translation> <translation>Высота</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="456"/> <location filename="../src/GUI/optionsdialog.cpp" line="459"/>
<source>Filtering</source> <source>Filtering</source>
<translation>Фильтрация</translation> <translation>Фильтрация</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="457"/> <location filename="../src/GUI/optionsdialog.cpp" line="460"/>
<source>Sources</source> <source>Sources</source>
<translation>Источники</translation> <translation>Источники</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="458"/> <location filename="../src/GUI/optionsdialog.cpp" line="461"/>
<source>Pause detection</source> <source>Pause detection</source>
<translation>Обнаружение остановок</translation> <translation>Обнаружение остановок</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="491"/> <location filename="../src/GUI/optionsdialog.cpp" line="494"/>
<source>Radius:</source> <source>Radius:</source>
<translation>Радиус:</translation> <translation>Радиус:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="439"/> <location filename="../src/GUI/optionsdialog.cpp" line="442"/>
<source>Speed</source> <source>Speed</source>
<translation>Скорость</translation> <translation>Скорость</translation>
</message> </message>
@ -1403,144 +1408,144 @@
<translation>Пользовательскoe</translation> <translation>Пользовательскoe</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="477"/> <location filename="../src/GUI/optionsdialog.cpp" line="480"/>
<source>mi</source> <source>mi</source>
<translation>мл</translation> <translation>мл</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="480"/> <location filename="../src/GUI/optionsdialog.cpp" line="483"/>
<source>nmi</source> <source>nmi</source>
<translation>мор. мл</translation> <translation>мор. мл</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="483"/> <location filename="../src/GUI/optionsdialog.cpp" line="486"/>
<source>km</source> <source>km</source>
<translation>км</translation> <translation>км</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="498"/> <location filename="../src/GUI/optionsdialog.cpp" line="501"/>
<location filename="../src/GUI/optionsdialog.cpp" line="638"/> <location filename="../src/GUI/optionsdialog.cpp" line="641"/>
<source>POI</source> <source>POI</source>
<translation>Точки POI</translation> <translation>Точки POI</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="505"/> <location filename="../src/GUI/optionsdialog.cpp" line="508"/>
<source>WYSIWYG</source> <source>WYSIWYG</source>
<translation>WYSIWYG</translation> <translation>WYSIWYG</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="506"/> <location filename="../src/GUI/optionsdialog.cpp" line="509"/>
<source>High-Resolution</source> <source>High-Resolution</source>
<translation>Высокое разрешение</translation> <translation>Высокое разрешение</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="511"/> <location filename="../src/GUI/optionsdialog.cpp" line="514"/>
<source>The printed area is approximately the display area. The map zoom level does not change.</source> <source>The printed area is approximately the display area. The map zoom level does not change.</source>
<translation>Печатная область примерно совпадает с областью отображения. Уровень приближения карты не изменяется.</translation> <translation>Печатная область примерно совпадает с областью отображения. Уровень приближения карты не изменяется.</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="513"/> <location filename="../src/GUI/optionsdialog.cpp" line="516"/>
<source>The zoom level will be changed so that the whole content (tracks/waypoints) fits to the printed area and the map resolution is as close as possible to the print resolution.</source> <source>The zoom level will be changed so that the whole content (tracks/waypoints) fits to the printed area and the map resolution is as close as possible to the print resolution.</source>
<translation>Уровень приближения будет изменен так, чтобы всё содержимое (треки/точки) уместились в печатную область и разрешение карты было бы как можно ближе к разрешению печати.</translation> <translation>Уровень приближения будет изменен так, чтобы всё содержимое (треки/точки) уместились в печатную область и разрешение карты было бы как можно ближе к разрешению печати.</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="535"/> <location filename="../src/GUI/optionsdialog.cpp" line="538"/>
<source>Name</source> <source>Name</source>
<translation>Имя</translation> <translation>Имя</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="537"/> <location filename="../src/GUI/optionsdialog.cpp" line="540"/>
<source>Date</source> <source>Date</source>
<translation>Дата</translation> <translation>Дата</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="539"/> <location filename="../src/GUI/optionsdialog.cpp" line="542"/>
<source>Distance</source> <source>Distance</source>
<translation>Расстояние</translation> <translation>Расстояние</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="541"/> <location filename="../src/GUI/optionsdialog.cpp" line="544"/>
<source>Time</source> <source>Time</source>
<translation>Время</translation> <translation>Время</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="543"/> <location filename="../src/GUI/optionsdialog.cpp" line="546"/>
<source>Moving time</source> <source>Moving time</source>
<translation>Время движения</translation> <translation>Время движения</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="545"/> <location filename="../src/GUI/optionsdialog.cpp" line="548"/>
<source>Item count (&gt;1)</source> <source>Item count (&gt;1)</source>
<translation>Количество объектов (&gt;1)</translation> <translation>Количество объектов (&gt;1)</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="560"/> <location filename="../src/GUI/optionsdialog.cpp" line="563"/>
<source>Separate graph page</source> <source>Separate graph page</source>
<translation>Отдельная страница с графиком</translation> <translation>Отдельная страница с графиком</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="570"/> <location filename="../src/GUI/optionsdialog.cpp" line="573"/>
<source>Print mode</source> <source>Print mode</source>
<translation>Режим печати</translation> <translation>Режим печати</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="571"/> <location filename="../src/GUI/optionsdialog.cpp" line="574"/>
<source>Header</source> <source>Header</source>
<translation>Заголовок</translation> <translation>Заголовок</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="579"/> <location filename="../src/GUI/optionsdialog.cpp" line="582"/>
<source>Use OpenGL</source> <source>Use OpenGL</source>
<translation>Использовать OpenGL</translation> <translation>Использовать OpenGL</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="582"/> <location filename="../src/GUI/optionsdialog.cpp" line="585"/>
<source>Enable HTTP/2</source> <source>Enable HTTP/2</source>
<translation>Включить HTTP/2</translation> <translation>Включить HTTP/2</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="589"/> <location filename="../src/GUI/optionsdialog.cpp" line="592"/>
<source>MB</source> <source>MB</source>
<translation>МБ</translation> <translation>МБ</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="599"/> <location filename="../src/GUI/optionsdialog.cpp" line="602"/>
<source>Image cache size:</source> <source>Image cache size:</source>
<translation>Размер кэша изображений:</translation> <translation>Размер кэша изображений:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="600"/> <location filename="../src/GUI/optionsdialog.cpp" line="603"/>
<source>Connection timeout:</source> <source>Connection timeout:</source>
<translation>Таймаут соединения:</translation> <translation>Таймаут соединения:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="616"/> <location filename="../src/GUI/optionsdialog.cpp" line="619"/>
<location filename="../src/GUI/optionsdialog.cpp" line="641"/> <location filename="../src/GUI/optionsdialog.cpp" line="644"/>
<source>System</source> <source>System</source>
<translation>Система</translation> <translation>Система</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="634"/> <location filename="../src/GUI/optionsdialog.cpp" line="637"/>
<source>Appearance</source> <source>Appearance</source>
<translation>Внешний вид</translation> <translation>Внешний вид</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="636"/> <location filename="../src/GUI/optionsdialog.cpp" line="639"/>
<source>Maps</source> <source>Maps</source>
<translation>Карты</translation> <translation>Карты</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="637"/> <location filename="../src/GUI/optionsdialog.cpp" line="640"/>
<source>Data</source> <source>Data</source>
<translation>Данные</translation> <translation>Данные</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="639"/> <location filename="../src/GUI/optionsdialog.cpp" line="642"/>
<source>Print &amp; Export</source> <source>Print &amp; Export</source>
<translation>Печать и экспорт</translation> <translation>Печать и экспорт</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="668"/> <location filename="../src/GUI/optionsdialog.cpp" line="671"/>
<source>Options</source> <source>Options</source>
<translation>Параметры</translation> <translation>Параметры</translation>
</message> </message>

View File

@ -47,82 +47,87 @@
<context> <context>
<name>Data</name> <name>Data</name>
<message> <message>
<location filename="../src/data/data.cpp" line="176"/> <location filename="../src/data/data.cpp" line="179"/>
<source>Supported files</source> <source>Supported files</source>
<translation>Filer som stöds</translation> <translation>Filer som stöds</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="177"/> <location filename="../src/data/data.cpp" line="180"/>
<source>CSV files</source> <source>CSV files</source>
<translation>CSV-filer</translation> <translation>CSV-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="178"/> <location filename="../src/data/data.cpp" line="181"/>
<source>CUP files</source> <source>CUP files</source>
<translation>CUP-filer</translation> <translation>CUP-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="179"/> <location filename="../src/data/data.cpp" line="182"/>
<source>FIT files</source> <source>FIT files</source>
<translation>FIT-filer</translation> <translation>FIT-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="181"/> <location filename="../src/data/data.cpp" line="184"/>
<source>GeoJSON files</source> <source>GeoJSON files</source>
<translation>GeoJSON-filer</translation> <translation>GeoJSON-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="183"/> <location filename="../src/data/data.cpp" line="186"/>
<source>GPI files</source> <source>GPI files</source>
<translation>GPI-filer</translation> <translation>GPI-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="184"/> <location filename="../src/data/data.cpp" line="187"/>
<source>GPX files</source> <source>GPX files</source>
<translation>GPX-filer</translation> <translation>GPX-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="185"/> <location filename="../src/data/data.cpp" line="188"/>
<source>IGC files</source> <source>IGC files</source>
<translation>IGC-filer</translation> <translation>IGC-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="186"/> <location filename="../src/data/data.cpp" line="189"/>
<source>JPEG images</source> <source>JPEG images</source>
<translation>JPEG-bilder</translation> <translation>JPEG-bilder</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="187"/> <location filename="../src/data/data.cpp" line="190"/>
<source>KML files</source> <source>KML files</source>
<translation>KML-filer</translation> <translation>KML-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="188"/> <location filename="../src/data/data.cpp" line="191"/>
<source>LOC files</source> <source>LOC files</source>
<translation>LOC-filer</translation> <translation>LOC-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="189"/> <location filename="../src/data/data.cpp" line="192"/>
<source>NMEA files</source> <source>NMEA files</source>
<translation>NMEA-filer</translation> <translation>NMEA-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="190"/> <location filename="../src/data/data.cpp" line="193"/>
<source>OziExplorer files</source> <source>OziExplorer files</source>
<translation>OziExplorer-filer</translation> <translation>OziExplorer-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="192"/> <location filename="../src/data/data.cpp" line="195"/>
<source>SML files</source>
<translation>SML-filer</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="196"/>
<source>TCX files</source> <source>TCX files</source>
<translation>TCX-filer</translation> <translation>TCX-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="191"/> <location filename="../src/data/data.cpp" line="194"/>
<source>SLF files</source> <source>SLF files</source>
<translation>SLF-filer</translation> <translation>SLF-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="193"/> <location filename="../src/data/data.cpp" line="197"/>
<source>All files</source> <source>All files</source>
<translation>Alla filer</translation> <translation>Alla filer</translation>
</message> </message>
@ -1130,7 +1135,7 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="295"/> <location filename="../src/GUI/optionsdialog.cpp" line="295"/>
<location filename="../src/GUI/optionsdialog.cpp" line="572"/> <location filename="../src/GUI/optionsdialog.cpp" line="575"/>
<source>Graphs</source> <source>Graphs</source>
<translation>Diagram</translation> <translation>Diagram</translation>
</message> </message>
@ -1232,14 +1237,14 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="322"/> <location filename="../src/GUI/optionsdialog.cpp" line="322"/>
<location filename="../src/GUI/optionsdialog.cpp" line="429"/> <location filename="../src/GUI/optionsdialog.cpp" line="432"/>
<location filename="../src/GUI/optionsdialog.cpp" line="492"/> <location filename="../src/GUI/optionsdialog.cpp" line="495"/>
<source>Elevation:</source> <source>Elevation:</source>
<translation>Höjd:</translation> <translation>Höjd:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="323"/> <location filename="../src/GUI/optionsdialog.cpp" line="323"/>
<location filename="../src/GUI/optionsdialog.cpp" line="428"/> <location filename="../src/GUI/optionsdialog.cpp" line="431"/>
<source>Speed:</source> <source>Speed:</source>
<translation>Hastighet:</translation> <translation>Hastighet:</translation>
</message> </message>
@ -1295,69 +1300,69 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="376"/> <location filename="../src/GUI/optionsdialog.cpp" line="376"/>
<location filename="../src/GUI/optionsdialog.cpp" line="595"/> <location filename="../src/GUI/optionsdialog.cpp" line="598"/>
<source>s</source> <source>s</source>
<translation>sek</translation> <translation>sek</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="389"/> <location filename="../src/GUI/optionsdialog.cpp" line="392"/>
<source>Minimal speed:</source> <source>Minimal speed:</source>
<translation>Minsta hastighet:</translation> <translation>Minsta hastighet:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="390"/> <location filename="../src/GUI/optionsdialog.cpp" line="393"/>
<source>Minimal duration:</source> <source>Minimal duration:</source>
<translation>Kortast varaktighet:</translation> <translation>Kortast varaktighet:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="400"/> <location filename="../src/GUI/optionsdialog.cpp" line="403"/>
<source>Computed from distance/time</source> <source>Computed from distance/time</source>
<translation>Beräknad från distans/tid</translation> <translation>Beräknad från distans/tid</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="401"/> <location filename="../src/GUI/optionsdialog.cpp" line="404"/>
<source>Recorded by device</source> <source>Recorded by device</source>
<translation>Inspelad av enhet</translation> <translation>Inspelad av enhet</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="407"/> <location filename="../src/GUI/optionsdialog.cpp" line="410"/>
<location filename="../src/GUI/optionsdialog.cpp" line="465"/> <location filename="../src/GUI/optionsdialog.cpp" line="468"/>
<source>GPS data</source> <source>GPS data</source>
<translation>GPS-data</translation> <translation>GPS-data</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="408"/> <location filename="../src/GUI/optionsdialog.cpp" line="411"/>
<location filename="../src/GUI/optionsdialog.cpp" line="466"/> <location filename="../src/GUI/optionsdialog.cpp" line="469"/>
<source>DEM data</source> <source>DEM data</source>
<translation>DEM-data</translation> <translation>DEM-data</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="445"/> <location filename="../src/GUI/optionsdialog.cpp" line="448"/>
<source>Elevation</source> <source>Elevation</source>
<translation>Stigning</translation> <translation>Stigning</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="456"/> <location filename="../src/GUI/optionsdialog.cpp" line="459"/>
<source>Filtering</source> <source>Filtering</source>
<translation>Filtrering</translation> <translation>Filtrering</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="457"/> <location filename="../src/GUI/optionsdialog.cpp" line="460"/>
<source>Sources</source> <source>Sources</source>
<translation>Källor</translation> <translation>Källor</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="458"/> <location filename="../src/GUI/optionsdialog.cpp" line="461"/>
<source>Pause detection</source> <source>Pause detection</source>
<translation>Pausa identifiering</translation> <translation>Pausa identifiering</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="491"/> <location filename="../src/GUI/optionsdialog.cpp" line="494"/>
<source>Radius:</source> <source>Radius:</source>
<translation>Radie:</translation> <translation>Radie:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="439"/> <location filename="../src/GUI/optionsdialog.cpp" line="442"/>
<source>Speed</source> <source>Speed</source>
<translation>Hastighet</translation> <translation>Hastighet</translation>
</message> </message>
@ -1402,144 +1407,144 @@
<translation>Anpassat</translation> <translation>Anpassat</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="477"/> <location filename="../src/GUI/optionsdialog.cpp" line="480"/>
<source>mi</source> <source>mi</source>
<translation>mi</translation> <translation>mi</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="480"/> <location filename="../src/GUI/optionsdialog.cpp" line="483"/>
<source>nmi</source> <source>nmi</source>
<translation>nmi</translation> <translation>nmi</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="483"/> <location filename="../src/GUI/optionsdialog.cpp" line="486"/>
<source>km</source> <source>km</source>
<translation>km</translation> <translation>km</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="498"/> <location filename="../src/GUI/optionsdialog.cpp" line="501"/>
<location filename="../src/GUI/optionsdialog.cpp" line="638"/> <location filename="../src/GUI/optionsdialog.cpp" line="641"/>
<source>POI</source> <source>POI</source>
<translation>POI</translation> <translation>POI</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="505"/> <location filename="../src/GUI/optionsdialog.cpp" line="508"/>
<source>WYSIWYG</source> <source>WYSIWYG</source>
<translation>WYSIWYG</translation> <translation>WYSIWYG</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="506"/> <location filename="../src/GUI/optionsdialog.cpp" line="509"/>
<source>High-Resolution</source> <source>High-Resolution</source>
<translation>Högupplösning</translation> <translation>Högupplösning</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="511"/> <location filename="../src/GUI/optionsdialog.cpp" line="514"/>
<source>The printed area is approximately the display area. The map zoom level does not change.</source> <source>The printed area is approximately the display area. The map zoom level does not change.</source>
<translation>Det utskrivna området är ungefär detsamma som synligt område skärmen. Kartans zoomnivå ändras inte.</translation> <translation>Det utskrivna området är ungefär detsamma som synligt område skärmen. Kartans zoomnivå ändras inte.</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="513"/> <location filename="../src/GUI/optionsdialog.cpp" line="516"/>
<source>The zoom level will be changed so that the whole content (tracks/waypoints) fits to the printed area and the map resolution is as close as possible to the print resolution.</source> <source>The zoom level will be changed so that the whole content (tracks/waypoints) fits to the printed area and the map resolution is as close as possible to the print resolution.</source>
<translation>Zoomnivån kommer att ändras att hela innehållet (spår/vägpunkter) passar utskriftsområdet och kartresolutionen är nära som möjligt till utskriftsupplösningen.</translation> <translation>Zoomnivån kommer att ändras att hela innehållet (spår/vägpunkter) passar utskriftsområdet och kartresolutionen är nära som möjligt till utskriftsupplösningen.</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="535"/> <location filename="../src/GUI/optionsdialog.cpp" line="538"/>
<source>Name</source> <source>Name</source>
<translation>Namn</translation> <translation>Namn</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="537"/> <location filename="../src/GUI/optionsdialog.cpp" line="540"/>
<source>Date</source> <source>Date</source>
<translation>Datum</translation> <translation>Datum</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="539"/> <location filename="../src/GUI/optionsdialog.cpp" line="542"/>
<source>Distance</source> <source>Distance</source>
<translation>Avstånd</translation> <translation>Avstånd</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="541"/> <location filename="../src/GUI/optionsdialog.cpp" line="544"/>
<source>Time</source> <source>Time</source>
<translation>Tid</translation> <translation>Tid</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="543"/> <location filename="../src/GUI/optionsdialog.cpp" line="546"/>
<source>Moving time</source> <source>Moving time</source>
<translation>Förflyttningstid</translation> <translation>Förflyttningstid</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="545"/> <location filename="../src/GUI/optionsdialog.cpp" line="548"/>
<source>Item count (&gt;1)</source> <source>Item count (&gt;1)</source>
<translation>Objektantal (&gt;1)</translation> <translation>Objektantal (&gt;1)</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="560"/> <location filename="../src/GUI/optionsdialog.cpp" line="563"/>
<source>Separate graph page</source> <source>Separate graph page</source>
<translation>Separat diagramsida</translation> <translation>Separat diagramsida</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="570"/> <location filename="../src/GUI/optionsdialog.cpp" line="573"/>
<source>Print mode</source> <source>Print mode</source>
<translation>Utskriftsläge</translation> <translation>Utskriftsläge</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="571"/> <location filename="../src/GUI/optionsdialog.cpp" line="574"/>
<source>Header</source> <source>Header</source>
<translation>Rubrik</translation> <translation>Rubrik</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="579"/> <location filename="../src/GUI/optionsdialog.cpp" line="582"/>
<source>Use OpenGL</source> <source>Use OpenGL</source>
<translation>Använd OpenGL</translation> <translation>Använd OpenGL</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="582"/> <location filename="../src/GUI/optionsdialog.cpp" line="585"/>
<source>Enable HTTP/2</source> <source>Enable HTTP/2</source>
<translation>Aktivera HTTP/2</translation> <translation>Aktivera HTTP/2</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="589"/> <location filename="../src/GUI/optionsdialog.cpp" line="592"/>
<source>MB</source> <source>MB</source>
<translation>MB</translation> <translation>MB</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="599"/> <location filename="../src/GUI/optionsdialog.cpp" line="602"/>
<source>Image cache size:</source> <source>Image cache size:</source>
<translation>Cashe-storlek för bilder:</translation> <translation>Cashe-storlek för bilder:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="600"/> <location filename="../src/GUI/optionsdialog.cpp" line="603"/>
<source>Connection timeout:</source> <source>Connection timeout:</source>
<translation>Anslutningens tidsgräns:</translation> <translation>Anslutningens tidsgräns:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="616"/> <location filename="../src/GUI/optionsdialog.cpp" line="619"/>
<location filename="../src/GUI/optionsdialog.cpp" line="641"/> <location filename="../src/GUI/optionsdialog.cpp" line="644"/>
<source>System</source> <source>System</source>
<translation>System</translation> <translation>System</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="634"/> <location filename="../src/GUI/optionsdialog.cpp" line="637"/>
<source>Appearance</source> <source>Appearance</source>
<translation>Utseende</translation> <translation>Utseende</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="636"/> <location filename="../src/GUI/optionsdialog.cpp" line="639"/>
<source>Maps</source> <source>Maps</source>
<translation>Kartor</translation> <translation>Kartor</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="637"/> <location filename="../src/GUI/optionsdialog.cpp" line="640"/>
<source>Data</source> <source>Data</source>
<translation>Data</translation> <translation>Data</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="639"/> <location filename="../src/GUI/optionsdialog.cpp" line="642"/>
<source>Print &amp; Export</source> <source>Print &amp; Export</source>
<translation>Utskrift &amp; Export</translation> <translation>Utskrift &amp; Export</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="668"/> <location filename="../src/GUI/optionsdialog.cpp" line="671"/>
<source>Options</source> <source>Options</source>
<translation>Alternativ</translation> <translation>Alternativ</translation>
</message> </message>

View File

@ -47,82 +47,87 @@
<context> <context>
<name>Data</name> <name>Data</name>
<message> <message>
<location filename="../src/data/data.cpp" line="176"/> <location filename="../src/data/data.cpp" line="179"/>
<source>Supported files</source> <source>Supported files</source>
<translation>Desteklenen dosyalar</translation> <translation>Desteklenen dosyalar</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="177"/> <location filename="../src/data/data.cpp" line="180"/>
<source>CSV files</source> <source>CSV files</source>
<translation>CSV dosyalar</translation> <translation>CSV dosyalar</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="178"/> <location filename="../src/data/data.cpp" line="181"/>
<source>CUP files</source> <source>CUP files</source>
<translation>CUP dosyaları</translation> <translation>CUP dosyaları</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="179"/> <location filename="../src/data/data.cpp" line="182"/>
<source>FIT files</source> <source>FIT files</source>
<translation>FIT dosyalar</translation> <translation>FIT dosyalar</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="181"/> <location filename="../src/data/data.cpp" line="184"/>
<source>GeoJSON files</source> <source>GeoJSON files</source>
<translation>GeoJSON dosyalar</translation> <translation>GeoJSON dosyalar</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="183"/> <location filename="../src/data/data.cpp" line="186"/>
<source>GPI files</source> <source>GPI files</source>
<translation>GPI dosyaları</translation> <translation>GPI dosyaları</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="184"/> <location filename="../src/data/data.cpp" line="187"/>
<source>GPX files</source> <source>GPX files</source>
<translation>GPX dosyalar</translation> <translation>GPX dosyalar</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="185"/> <location filename="../src/data/data.cpp" line="188"/>
<source>IGC files</source> <source>IGC files</source>
<translation>IGC dosyalar</translation> <translation>IGC dosyalar</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="186"/> <location filename="../src/data/data.cpp" line="189"/>
<source>JPEG images</source> <source>JPEG images</source>
<translation>JPEG resimler</translation> <translation>JPEG resimler</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="187"/> <location filename="../src/data/data.cpp" line="190"/>
<source>KML files</source> <source>KML files</source>
<translation>KML dosyalar</translation> <translation>KML dosyalar</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="188"/> <location filename="../src/data/data.cpp" line="191"/>
<source>LOC files</source> <source>LOC files</source>
<translation>LOC dosyalar</translation> <translation>LOC dosyalar</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="189"/> <location filename="../src/data/data.cpp" line="192"/>
<source>NMEA files</source> <source>NMEA files</source>
<translation>NMEA dosyalar</translation> <translation>NMEA dosyalar</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="190"/> <location filename="../src/data/data.cpp" line="193"/>
<source>OziExplorer files</source> <source>OziExplorer files</source>
<translation>OziExplorer dosyalar</translation> <translation>OziExplorer dosyalar</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="191"/> <location filename="../src/data/data.cpp" line="194"/>
<source>SLF files</source> <source>SLF files</source>
<translation>SLF dosyalar</translation> <translation>SLF dosyalar</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="192"/> <location filename="../src/data/data.cpp" line="195"/>
<source>SML files</source>
<translation>SML dosyalar</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="196"/>
<source>TCX files</source> <source>TCX files</source>
<translation>TCX dosyalar</translation> <translation>TCX dosyalar</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="193"/> <location filename="../src/data/data.cpp" line="197"/>
<source>All files</source> <source>All files</source>
<translation>Tüm dosyalar</translation> <translation>Tüm dosyalar</translation>
</message> </message>
@ -858,7 +863,6 @@
<source>%n files</source> <source>%n files</source>
<translation> <translation>
<numerusform>%n dosya</numerusform> <numerusform>%n dosya</numerusform>
<numerusform>%n dosya</numerusform>
</translation> </translation>
</message> </message>
</context> </context>
@ -1251,7 +1255,7 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="295"/> <location filename="../src/GUI/optionsdialog.cpp" line="295"/>
<location filename="../src/GUI/optionsdialog.cpp" line="572"/> <location filename="../src/GUI/optionsdialog.cpp" line="575"/>
<source>Graphs</source> <source>Graphs</source>
<translation>Grafikler</translation> <translation>Grafikler</translation>
</message> </message>
@ -1267,14 +1271,14 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="322"/> <location filename="../src/GUI/optionsdialog.cpp" line="322"/>
<location filename="../src/GUI/optionsdialog.cpp" line="429"/> <location filename="../src/GUI/optionsdialog.cpp" line="432"/>
<location filename="../src/GUI/optionsdialog.cpp" line="492"/> <location filename="../src/GUI/optionsdialog.cpp" line="495"/>
<source>Elevation:</source> <source>Elevation:</source>
<translation>Rakım:</translation> <translation>Rakım:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="323"/> <location filename="../src/GUI/optionsdialog.cpp" line="323"/>
<location filename="../src/GUI/optionsdialog.cpp" line="428"/> <location filename="../src/GUI/optionsdialog.cpp" line="431"/>
<source>Speed:</source> <source>Speed:</source>
<translation>Hız:</translation> <translation>Hız:</translation>
</message> </message>
@ -1330,69 +1334,69 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="376"/> <location filename="../src/GUI/optionsdialog.cpp" line="376"/>
<location filename="../src/GUI/optionsdialog.cpp" line="595"/> <location filename="../src/GUI/optionsdialog.cpp" line="598"/>
<source>s</source> <source>s</source>
<translation>s</translation> <translation>s</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="389"/> <location filename="../src/GUI/optionsdialog.cpp" line="392"/>
<source>Minimal speed:</source> <source>Minimal speed:</source>
<translation>Asgari hız:</translation> <translation>Asgari hız:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="390"/> <location filename="../src/GUI/optionsdialog.cpp" line="393"/>
<source>Minimal duration:</source> <source>Minimal duration:</source>
<translation>Minimum süre:</translation> <translation>Minimum süre:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="400"/> <location filename="../src/GUI/optionsdialog.cpp" line="403"/>
<source>Computed from distance/time</source> <source>Computed from distance/time</source>
<translation>Mesafe/zamandan hesaplandı</translation> <translation>Mesafe/zamandan hesaplandı</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="401"/> <location filename="../src/GUI/optionsdialog.cpp" line="404"/>
<source>Recorded by device</source> <source>Recorded by device</source>
<translation>Cihazdan kaydedilen</translation> <translation>Cihazdan kaydedilen</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="407"/> <location filename="../src/GUI/optionsdialog.cpp" line="410"/>
<location filename="../src/GUI/optionsdialog.cpp" line="465"/> <location filename="../src/GUI/optionsdialog.cpp" line="468"/>
<source>GPS data</source> <source>GPS data</source>
<translation>GPS verisi</translation> <translation>GPS verisi</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="408"/> <location filename="../src/GUI/optionsdialog.cpp" line="411"/>
<location filename="../src/GUI/optionsdialog.cpp" line="466"/> <location filename="../src/GUI/optionsdialog.cpp" line="469"/>
<source>DEM data</source> <source>DEM data</source>
<translation>DEM verisi</translation> <translation>DEM verisi</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="445"/> <location filename="../src/GUI/optionsdialog.cpp" line="448"/>
<source>Elevation</source> <source>Elevation</source>
<translation>Rakım</translation> <translation>Rakım</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="456"/> <location filename="../src/GUI/optionsdialog.cpp" line="459"/>
<source>Filtering</source> <source>Filtering</source>
<translation>Filtreleme</translation> <translation>Filtreleme</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="457"/> <location filename="../src/GUI/optionsdialog.cpp" line="460"/>
<source>Sources</source> <source>Sources</source>
<translation>Kaynaklar</translation> <translation>Kaynaklar</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="458"/> <location filename="../src/GUI/optionsdialog.cpp" line="461"/>
<source>Pause detection</source> <source>Pause detection</source>
<translation>Duraklama algılama</translation> <translation>Duraklama algılama</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="491"/> <location filename="../src/GUI/optionsdialog.cpp" line="494"/>
<source>Radius:</source> <source>Radius:</source>
<translation>Yarıçap:</translation> <translation>Yarıçap:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="439"/> <location filename="../src/GUI/optionsdialog.cpp" line="442"/>
<source>Speed</source> <source>Speed</source>
<translation>Hız</translation> <translation>Hız</translation>
</message> </message>
@ -1402,144 +1406,144 @@
<translation>Özel</translation> <translation>Özel</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="477"/> <location filename="../src/GUI/optionsdialog.cpp" line="480"/>
<source>mi</source> <source>mi</source>
<translation>mi</translation> <translation>mi</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="480"/> <location filename="../src/GUI/optionsdialog.cpp" line="483"/>
<source>nmi</source> <source>nmi</source>
<translation>nmi</translation> <translation>nmi</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="483"/> <location filename="../src/GUI/optionsdialog.cpp" line="486"/>
<source>km</source> <source>km</source>
<translation>Km</translation> <translation>Km</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="498"/> <location filename="../src/GUI/optionsdialog.cpp" line="501"/>
<location filename="../src/GUI/optionsdialog.cpp" line="638"/> <location filename="../src/GUI/optionsdialog.cpp" line="641"/>
<source>POI</source> <source>POI</source>
<translation>POI</translation> <translation>POI</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="505"/> <location filename="../src/GUI/optionsdialog.cpp" line="508"/>
<source>WYSIWYG</source> <source>WYSIWYG</source>
<translation>WYSIWYG</translation> <translation>WYSIWYG</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="506"/> <location filename="../src/GUI/optionsdialog.cpp" line="509"/>
<source>High-Resolution</source> <source>High-Resolution</source>
<translation>Yüksek çözünürlük</translation> <translation>Yüksek çözünürlük</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="511"/> <location filename="../src/GUI/optionsdialog.cpp" line="514"/>
<source>The printed area is approximately the display area. The map zoom level does not change.</source> <source>The printed area is approximately the display area. The map zoom level does not change.</source>
<translation>Yazdırılan alan yaklaşık olarak görüntü alanıdır. Harita zum seviyesi değişmez.</translation> <translation>Yazdırılan alan yaklaşık olarak görüntü alanıdır. Harita zum seviyesi değişmez.</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="513"/> <location filename="../src/GUI/optionsdialog.cpp" line="516"/>
<source>The zoom level will be changed so that the whole content (tracks/waypoints) fits to the printed area and the map resolution is as close as possible to the print resolution.</source> <source>The zoom level will be changed so that the whole content (tracks/waypoints) fits to the printed area and the map resolution is as close as possible to the print resolution.</source>
<translation>Yakınlaştırma seviyesi, tüm içeriğin (izler/yer işaretleri) yazdırılan alana sığması ve harita çözünürlüğünün baskı çözünürlüğüne olabildiğince yakın olacak şekilde değiştirilecektir.</translation> <translation>Yakınlaştırma seviyesi, tüm içeriğin (izler/yer işaretleri) yazdırılan alana sığması ve harita çözünürlüğünün baskı çözünürlüğüne olabildiğince yakın olacak şekilde değiştirilecektir.</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="535"/> <location filename="../src/GUI/optionsdialog.cpp" line="538"/>
<source>Name</source> <source>Name</source>
<translation>Adı</translation> <translation>Adı</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="537"/> <location filename="../src/GUI/optionsdialog.cpp" line="540"/>
<source>Date</source> <source>Date</source>
<translation>Tarih</translation> <translation>Tarih</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="539"/> <location filename="../src/GUI/optionsdialog.cpp" line="542"/>
<source>Distance</source> <source>Distance</source>
<translation>Mesafe</translation> <translation>Mesafe</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="541"/> <location filename="../src/GUI/optionsdialog.cpp" line="544"/>
<source>Time</source> <source>Time</source>
<translation>Zaman</translation> <translation>Zaman</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="543"/> <location filename="../src/GUI/optionsdialog.cpp" line="546"/>
<source>Moving time</source> <source>Moving time</source>
<translation>Hareket süresi</translation> <translation>Hareket süresi</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="545"/> <location filename="../src/GUI/optionsdialog.cpp" line="548"/>
<source>Item count (&gt;1)</source> <source>Item count (&gt;1)</source>
<translation>Öğe sayısı (&gt;1)</translation> <translation>Öğe sayısı (&gt;1)</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="560"/> <location filename="../src/GUI/optionsdialog.cpp" line="563"/>
<source>Separate graph page</source> <source>Separate graph page</source>
<translation>Ayrı grafik sayfası</translation> <translation>Ayrı grafik sayfası</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="570"/> <location filename="../src/GUI/optionsdialog.cpp" line="573"/>
<source>Print mode</source> <source>Print mode</source>
<translation>Yazdırma modu</translation> <translation>Yazdırma modu</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="571"/> <location filename="../src/GUI/optionsdialog.cpp" line="574"/>
<source>Header</source> <source>Header</source>
<translation>Başlık</translation> <translation>Başlık</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="579"/> <location filename="../src/GUI/optionsdialog.cpp" line="582"/>
<source>Use OpenGL</source> <source>Use OpenGL</source>
<translation>OpenGL Kullan</translation> <translation>OpenGL Kullan</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="582"/> <location filename="../src/GUI/optionsdialog.cpp" line="585"/>
<source>Enable HTTP/2</source> <source>Enable HTTP/2</source>
<translation>HTTP/2 etkinleştir</translation> <translation>HTTP/2 etkinleştir</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="589"/> <location filename="../src/GUI/optionsdialog.cpp" line="592"/>
<source>MB</source> <source>MB</source>
<translation>MB</translation> <translation>MB</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="599"/> <location filename="../src/GUI/optionsdialog.cpp" line="602"/>
<source>Image cache size:</source> <source>Image cache size:</source>
<translation>Görüntü önbellek boyutu:</translation> <translation>Görüntü önbellek boyutu:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="600"/> <location filename="../src/GUI/optionsdialog.cpp" line="603"/>
<source>Connection timeout:</source> <source>Connection timeout:</source>
<translation>Bağlantı zaman ımı:</translation> <translation>Bağlantı zaman ımı:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="616"/> <location filename="../src/GUI/optionsdialog.cpp" line="619"/>
<location filename="../src/GUI/optionsdialog.cpp" line="641"/> <location filename="../src/GUI/optionsdialog.cpp" line="644"/>
<source>System</source> <source>System</source>
<translation>Sistem</translation> <translation>Sistem</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="634"/> <location filename="../src/GUI/optionsdialog.cpp" line="637"/>
<source>Appearance</source> <source>Appearance</source>
<translation>Görünüm</translation> <translation>Görünüm</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="636"/> <location filename="../src/GUI/optionsdialog.cpp" line="639"/>
<source>Maps</source> <source>Maps</source>
<translation>Haritalar</translation> <translation>Haritalar</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="637"/> <location filename="../src/GUI/optionsdialog.cpp" line="640"/>
<source>Data</source> <source>Data</source>
<translation>Veri</translation> <translation>Veri</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="639"/> <location filename="../src/GUI/optionsdialog.cpp" line="642"/>
<source>Print &amp; Export</source> <source>Print &amp; Export</source>
<translation>Yazdır &amp; Dışa ver</translation> <translation>Yazdır &amp; Dışa ver</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="668"/> <location filename="../src/GUI/optionsdialog.cpp" line="671"/>
<source>Options</source> <source>Options</source>
<translation>Seçenekler</translation> <translation>Seçenekler</translation>
</message> </message>

View File

@ -47,82 +47,87 @@
<context> <context>
<name>Data</name> <name>Data</name>
<message> <message>
<location filename="../src/data/data.cpp" line="176"/> <location filename="../src/data/data.cpp" line="179"/>
<source>Supported files</source> <source>Supported files</source>
<translation>Всі підтримувані формати</translation> <translation>Всі підтримувані формати</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="177"/> <location filename="../src/data/data.cpp" line="180"/>
<source>CSV files</source> <source>CSV files</source>
<translation>CSV файли</translation> <translation>CSV файли</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="178"/> <location filename="../src/data/data.cpp" line="181"/>
<source>CUP files</source> <source>CUP files</source>
<translation>CUP файли</translation> <translation>CUP файли</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="179"/> <location filename="../src/data/data.cpp" line="182"/>
<source>FIT files</source> <source>FIT files</source>
<translation>FIT файли</translation> <translation>FIT файли</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="181"/> <location filename="../src/data/data.cpp" line="184"/>
<source>GeoJSON files</source> <source>GeoJSON files</source>
<translation>GeoJSON файли</translation> <translation>GeoJSON файли</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="183"/> <location filename="../src/data/data.cpp" line="186"/>
<source>GPI files</source> <source>GPI files</source>
<translation>GPI файли</translation> <translation>GPI файли</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="184"/> <location filename="../src/data/data.cpp" line="187"/>
<source>GPX files</source> <source>GPX files</source>
<translation>GPX файли</translation> <translation>GPX файли</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="185"/> <location filename="../src/data/data.cpp" line="188"/>
<source>IGC files</source> <source>IGC files</source>
<translation>IGC файли</translation> <translation>IGC файли</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="186"/> <location filename="../src/data/data.cpp" line="189"/>
<source>JPEG images</source> <source>JPEG images</source>
<translation>JPEG зображення</translation> <translation>JPEG зображення</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="187"/> <location filename="../src/data/data.cpp" line="190"/>
<source>KML files</source> <source>KML files</source>
<translation>KML файли</translation> <translation>KML файли</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="188"/> <location filename="../src/data/data.cpp" line="191"/>
<source>LOC files</source> <source>LOC files</source>
<translation>LOC файли</translation> <translation>LOC файли</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="189"/> <location filename="../src/data/data.cpp" line="192"/>
<source>NMEA files</source> <source>NMEA files</source>
<translation>NMEA файли</translation> <translation>NMEA файли</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="190"/> <location filename="../src/data/data.cpp" line="193"/>
<source>OziExplorer files</source> <source>OziExplorer files</source>
<translation>OziExplorer файли</translation> <translation>OziExplorer файли</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="191"/> <location filename="../src/data/data.cpp" line="194"/>
<source>SLF files</source> <source>SLF files</source>
<translation>SLF файли</translation> <translation>SLF файли</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="192"/> <location filename="../src/data/data.cpp" line="195"/>
<source>SML files</source>
<translation>SML файли</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="196"/>
<source>TCX files</source> <source>TCX files</source>
<translation>TCX файли</translation> <translation>TCX файли</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="193"/> <location filename="../src/data/data.cpp" line="197"/>
<source>All files</source> <source>All files</source>
<translation>Всі файли</translation> <translation>Всі файли</translation>
</message> </message>
@ -1252,7 +1257,7 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="295"/> <location filename="../src/GUI/optionsdialog.cpp" line="295"/>
<location filename="../src/GUI/optionsdialog.cpp" line="572"/> <location filename="../src/GUI/optionsdialog.cpp" line="575"/>
<source>Graphs</source> <source>Graphs</source>
<translation>Графіки</translation> <translation>Графіки</translation>
</message> </message>
@ -1268,14 +1273,14 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="322"/> <location filename="../src/GUI/optionsdialog.cpp" line="322"/>
<location filename="../src/GUI/optionsdialog.cpp" line="429"/> <location filename="../src/GUI/optionsdialog.cpp" line="432"/>
<location filename="../src/GUI/optionsdialog.cpp" line="492"/> <location filename="../src/GUI/optionsdialog.cpp" line="495"/>
<source>Elevation:</source> <source>Elevation:</source>
<translation>Висота:</translation> <translation>Висота:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="323"/> <location filename="../src/GUI/optionsdialog.cpp" line="323"/>
<location filename="../src/GUI/optionsdialog.cpp" line="428"/> <location filename="../src/GUI/optionsdialog.cpp" line="431"/>
<source>Speed:</source> <source>Speed:</source>
<translation>Швидкість:</translation> <translation>Швидкість:</translation>
</message> </message>
@ -1336,211 +1341,211 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="376"/> <location filename="../src/GUI/optionsdialog.cpp" line="376"/>
<location filename="../src/GUI/optionsdialog.cpp" line="595"/> <location filename="../src/GUI/optionsdialog.cpp" line="598"/>
<source>s</source> <source>s</source>
<translation>с</translation> <translation>с</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="389"/> <location filename="../src/GUI/optionsdialog.cpp" line="392"/>
<source>Minimal speed:</source> <source>Minimal speed:</source>
<translation>Мінімальна швидкість:</translation> <translation>Мінімальна швидкість:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="390"/> <location filename="../src/GUI/optionsdialog.cpp" line="393"/>
<source>Minimal duration:</source> <source>Minimal duration:</source>
<translation>Мінімальна тривалість:</translation> <translation>Мінімальна тривалість:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="400"/> <location filename="../src/GUI/optionsdialog.cpp" line="403"/>
<source>Computed from distance/time</source> <source>Computed from distance/time</source>
<translation>Обчислено з відстань/час</translation> <translation>Обчислено з відстань/час</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="401"/> <location filename="../src/GUI/optionsdialog.cpp" line="404"/>
<source>Recorded by device</source> <source>Recorded by device</source>
<translation>Записано пристроєм</translation> <translation>Записано пристроєм</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="407"/> <location filename="../src/GUI/optionsdialog.cpp" line="410"/>
<location filename="../src/GUI/optionsdialog.cpp" line="465"/> <location filename="../src/GUI/optionsdialog.cpp" line="468"/>
<source>GPS data</source> <source>GPS data</source>
<translation>GPS дані</translation> <translation>GPS дані</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="408"/> <location filename="../src/GUI/optionsdialog.cpp" line="411"/>
<location filename="../src/GUI/optionsdialog.cpp" line="466"/> <location filename="../src/GUI/optionsdialog.cpp" line="469"/>
<source>DEM data</source> <source>DEM data</source>
<translation>DEM дані</translation> <translation>DEM дані</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="439"/> <location filename="../src/GUI/optionsdialog.cpp" line="442"/>
<source>Speed</source> <source>Speed</source>
<translation>Швидкість</translation> <translation>Швидкість</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="445"/> <location filename="../src/GUI/optionsdialog.cpp" line="448"/>
<source>Elevation</source> <source>Elevation</source>
<translation>Висота</translation> <translation>Висота</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="456"/> <location filename="../src/GUI/optionsdialog.cpp" line="459"/>
<source>Filtering</source> <source>Filtering</source>
<translation>Фільтрування</translation> <translation>Фільтрування</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="457"/> <location filename="../src/GUI/optionsdialog.cpp" line="460"/>
<source>Sources</source> <source>Sources</source>
<translation>Джерела</translation> <translation>Джерела</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="458"/> <location filename="../src/GUI/optionsdialog.cpp" line="461"/>
<source>Pause detection</source> <source>Pause detection</source>
<translation>Виявлення пауз</translation> <translation>Виявлення пауз</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="477"/> <location filename="../src/GUI/optionsdialog.cpp" line="480"/>
<source>mi</source> <source>mi</source>
<translation>миля</translation> <translation>миля</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="480"/> <location filename="../src/GUI/optionsdialog.cpp" line="483"/>
<source>nmi</source> <source>nmi</source>
<translation>мор.миля</translation> <translation>мор.миля</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="483"/> <location filename="../src/GUI/optionsdialog.cpp" line="486"/>
<source>km</source> <source>km</source>
<translation>км</translation> <translation>км</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="491"/> <location filename="../src/GUI/optionsdialog.cpp" line="494"/>
<source>Radius:</source> <source>Radius:</source>
<translation>Радіус:</translation> <translation>Радіус:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="498"/> <location filename="../src/GUI/optionsdialog.cpp" line="501"/>
<location filename="../src/GUI/optionsdialog.cpp" line="638"/> <location filename="../src/GUI/optionsdialog.cpp" line="641"/>
<source>POI</source> <source>POI</source>
<translation>Точки POI</translation> <translation>Точки POI</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="505"/> <location filename="../src/GUI/optionsdialog.cpp" line="508"/>
<source>WYSIWYG</source> <source>WYSIWYG</source>
<translation>WYSIWYG (Візуальний редактор)</translation> <translation>WYSIWYG (Візуальний редактор)</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="506"/> <location filename="../src/GUI/optionsdialog.cpp" line="509"/>
<source>High-Resolution</source> <source>High-Resolution</source>
<translation>Висока роздільна здатність</translation> <translation>Висока роздільна здатність</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="511"/> <location filename="../src/GUI/optionsdialog.cpp" line="514"/>
<source>The printed area is approximately the display area. The map zoom level does not change.</source> <source>The printed area is approximately the display area. The map zoom level does not change.</source>
<translation>Область друку є приблизною областю відображення. Рівень масштабування мапи не змінюється.</translation> <translation>Область друку є приблизною областю відображення. Рівень масштабування мапи не змінюється.</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="513"/> <location filename="../src/GUI/optionsdialog.cpp" line="516"/>
<source>The zoom level will be changed so that the whole content (tracks/waypoints) fits to the printed area and the map resolution is as close as possible to the print resolution.</source> <source>The zoom level will be changed so that the whole content (tracks/waypoints) fits to the printed area and the map resolution is as close as possible to the print resolution.</source>
<translation>Масштаб буде змінено так, щоби весь зміст (треки/маршрутні точки) вмістився на друковану область, а роздільна здатність мапи була якомога наближеною до роздільної здатності друку.</translation> <translation>Масштаб буде змінено так, щоби весь зміст (треки/маршрутні точки) вмістився на друковану область, а роздільна здатність мапи була якомога наближеною до роздільної здатності друку.</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="535"/> <location filename="../src/GUI/optionsdialog.cpp" line="538"/>
<source>Name</source> <source>Name</source>
<translation>Імя</translation> <translation>Імя</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="537"/> <location filename="../src/GUI/optionsdialog.cpp" line="540"/>
<source>Date</source> <source>Date</source>
<translation>Дата</translation> <translation>Дата</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="539"/> <location filename="../src/GUI/optionsdialog.cpp" line="542"/>
<source>Distance</source> <source>Distance</source>
<translation>Відстань</translation> <translation>Відстань</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="541"/> <location filename="../src/GUI/optionsdialog.cpp" line="544"/>
<source>Time</source> <source>Time</source>
<translation>Час</translation> <translation>Час</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="543"/> <location filename="../src/GUI/optionsdialog.cpp" line="546"/>
<source>Moving time</source> <source>Moving time</source>
<translation>Час руху</translation> <translation>Час руху</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="545"/> <location filename="../src/GUI/optionsdialog.cpp" line="548"/>
<source>Item count (&gt;1)</source> <source>Item count (&gt;1)</source>
<translation>Кількість обєктів (&gt;1)</translation> <translation>Кількість обєктів (&gt;1)</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="560"/> <location filename="../src/GUI/optionsdialog.cpp" line="563"/>
<source>Separate graph page</source> <source>Separate graph page</source>
<translation>Окрема сторінка із графіком</translation> <translation>Окрема сторінка із графіком</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="570"/> <location filename="../src/GUI/optionsdialog.cpp" line="573"/>
<source>Print mode</source> <source>Print mode</source>
<translation>Режим друку</translation> <translation>Режим друку</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="571"/> <location filename="../src/GUI/optionsdialog.cpp" line="574"/>
<source>Header</source> <source>Header</source>
<translation>Заголовок</translation> <translation>Заголовок</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="579"/> <location filename="../src/GUI/optionsdialog.cpp" line="582"/>
<source>Use OpenGL</source> <source>Use OpenGL</source>
<translation>Використовувати OpenGL</translation> <translation>Використовувати OpenGL</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="582"/> <location filename="../src/GUI/optionsdialog.cpp" line="585"/>
<source>Enable HTTP/2</source> <source>Enable HTTP/2</source>
<translation>Дозволити HTTP/2</translation> <translation>Дозволити HTTP/2</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="589"/> <location filename="../src/GUI/optionsdialog.cpp" line="592"/>
<source>MB</source> <source>MB</source>
<translation>МБ</translation> <translation>МБ</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="599"/> <location filename="../src/GUI/optionsdialog.cpp" line="602"/>
<source>Image cache size:</source> <source>Image cache size:</source>
<translation>Розмір кешу зображень:</translation> <translation>Розмір кешу зображень:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="600"/> <location filename="../src/GUI/optionsdialog.cpp" line="603"/>
<source>Connection timeout:</source> <source>Connection timeout:</source>
<translation>Час зєднання вичерпаний:</translation> <translation>Час зєднання вичерпаний:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="616"/> <location filename="../src/GUI/optionsdialog.cpp" line="619"/>
<location filename="../src/GUI/optionsdialog.cpp" line="641"/> <location filename="../src/GUI/optionsdialog.cpp" line="644"/>
<source>System</source> <source>System</source>
<translation>Система</translation> <translation>Система</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="634"/> <location filename="../src/GUI/optionsdialog.cpp" line="637"/>
<source>Appearance</source> <source>Appearance</source>
<translation>Зовнішній вигляд</translation> <translation>Зовнішній вигляд</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="636"/> <location filename="../src/GUI/optionsdialog.cpp" line="639"/>
<source>Maps</source> <source>Maps</source>
<translation>Мапи</translation> <translation>Мапи</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="637"/> <location filename="../src/GUI/optionsdialog.cpp" line="640"/>
<source>Data</source> <source>Data</source>
<translation>Дані</translation> <translation>Дані</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="639"/> <location filename="../src/GUI/optionsdialog.cpp" line="642"/>
<source>Print &amp; Export</source> <source>Print &amp; Export</source>
<translation>Друк та експорт</translation> <translation>Друк та експорт</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="668"/> <location filename="../src/GUI/optionsdialog.cpp" line="671"/>
<source>Options</source> <source>Options</source>
<translation>Налаштування</translation> <translation>Налаштування</translation>
</message> </message>

View File

@ -243,6 +243,22 @@
<key>CFBundleTypeRole</key> <key>CFBundleTypeRole</key>
<string>Viewer</string> <string>Viewer</string>
</dict> </dict>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>sml</string>
</array>
<key>CFBundleTypeMIMETypes</key>
<array>
<string>application/sml+xml</string>
</array>
<key>CFBundleTypeIconFile</key>
<string>icons/sml.icns</string>
<key>CFBundleTypeName</key>
<string>Suunto Markup Language</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
</dict>
</array> </array>
<key>UTImportedTypeDeclarations</key> <key>UTImportedTypeDeclarations</key>
@ -541,6 +557,27 @@
<string>application/vnd.garmin.gpi</string> <string>application/vnd.garmin.gpi</string>
</dict> </dict>
</dict> </dict>
<dict>
<key>UTTypeIdentifier</key>
<string>com.suunto.sml</string>
<key>UTTypeReferenceURL</key>
<string>https://www.suunto.com</string>
<key>UTTypeDescription</key>
<string>Suunto Markup Language</string>
<key>UTTypeConformsTo</key>
<array>
<string>public.xml</string>
</array>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<array>
<string>sml</string>
</array>
<key>public.mime-type</key>
<string>application/sml+xml</string>
</dict>
</dict>
</array> </array>
</dict> </dict>
</plist> </plist>

View File

@ -12,17 +12,18 @@
<p>Features:</p> <p>Features:</p>
<ul> <ul>
<li>Opens GPX, TCX, FIT, KML, IGC, NMEA, SLF, LOC, OziExplorer (PLT, <li>Opens GPX, TCX, FIT, KML, IGC, NMEA, SIGMA SLF, Suunto SML, LOC,
WPT, RTE), GeoJSON, SeeYou CUP, Garmin GPI &amp; CSV and OziExplorer (PLT, WPT, RTE), GeoJSON, SeeYou CUP,
geotagged JPEG files.</li> Garmin GPI &amp; CSV and geotagged JPEG files.</li>
<li>User-definable online maps (OpenStreetMap/Google tiles, WMTS, <li>User-definable online maps (OpenStreetMap/Google tiles, WMTS,
WMS, TMS).</li> WMS, TMS, QuadTiles).</li>
<li>Offline maps (MBTiles, OziExplorer maps, TrekBuddy maps/atlases, <li>Offline maps (MBTiles, OziExplorer maps, TrekBuddy maps/atlases,
TwoNav RMaps, Garmin IMG &amp; JNX, GeoTIFF images).</li> TwoNav RMaps, Garmin IMG &amp; JNX, GeoTIFF images).</li>
<li>Elevation, speed, heart rate, cadence, power, temperature and <li>Elevation, speed, heart rate, cadence, power, temperature and
gear ratio graphs.</li> gear ratio graphs.</li>
<li>Support for multiple tracks in one view.</li> <li>Support for multiple tracks in one view.</li>
<li>Support for POI files.</li> <li>Support for POI files.</li>
<li>Support for DEM files (SRTM HGT).</li>
<li>Print/export to PDF.</li> <li>Print/export to PDF.</li>
<li>Full-screen mode.</li> <li>Full-screen mode.</li>
<li>HiDPI/Retina displays &amp; maps support.</li> <li>HiDPI/Retina displays &amp; maps support.</li>
@ -70,5 +71,6 @@
<mimetype>application/geo+json</mimetype> <mimetype>application/geo+json</mimetype>
<mimetype>application/vnd.naviter.seeyou.cup</mimetype> <mimetype>application/vnd.naviter.seeyou.cup</mimetype>
<mimetype>application/vnd.garmin.gpi</mimetype> <mimetype>application/vnd.garmin.gpi</mimetype>
<mimetype>application/sml+xml</mimetype>
</mimetypes> </mimetypes>
</component> </component>

View File

@ -4,6 +4,7 @@ Comment=GPS log file viewer and analyzer
Comment[cz]=Prohlížeč a analyzátor GPS logů Comment[cz]=Prohlížeč a analyzátor GPS logů
Comment[fi]=Ohjelma GPS-lokien katseluun ja analysointiin Comment[fi]=Ohjelma GPS-lokien katseluun ja analysointiin
Comment[fr]=Visualisation et analyse de fichier GPS Comment[fr]=Visualisation et analyse de fichier GPS
Comment[nb]=GPS-loggfilleser og analysator
Comment[pl]=Przeglądarka i analizator plików dziennika GPS Comment[pl]=Przeglądarka i analizator plików dziennika GPS
Comment[ru]=Программа для просмотра и анализа GPS логов Comment[ru]=Программа для просмотра и анализа GPS логов
Comment[sv]=GPS-loggfilsläsare och analysator Comment[sv]=GPS-loggfilsläsare och analysator
@ -14,4 +15,4 @@ Icon=gpxsee
Terminal=false Terminal=false
Type=Application Type=Application
Categories=Graphics;Viewer;Education;Geography;Maps;Sports;Qt; Categories=Graphics;Viewer;Education;Geography;Maps;Sports;Qt;
MimeType=application/gpx+xml;application/tcx+xml;application/vnd.ant.fit;application/vnd.google-earth.kml+xml;application/vnd.fai.igc;application/vnd.nmea.nmea;application/vnd.oziexplorer.plt;application/vnd.oziexplorer.rte;application/vnd.oziexplorer.wpt;application/loc+xml;application/slf+xml;application/geo+json;application/vnd.naviter.seeyou.cup;application/vnd.garmin.gpi; MimeType=application/gpx+xml;application/tcx+xml;application/vnd.ant.fit;application/vnd.google-earth.kml+xml;application/vnd.fai.igc;application/vnd.nmea.nmea;application/vnd.oziexplorer.plt;application/vnd.oziexplorer.rte;application/vnd.oziexplorer.wpt;application/loc+xml;application/slf+xml;application/geo+json;application/vnd.naviter.seeyou.cup;application/vnd.garmin.gpi;application/sml+xml;

View File

@ -7,7 +7,7 @@
; The name of the installer ; The name of the installer
Name "GPXSee" Name "GPXSee"
; Program version ; Program version
!define VERSION "7.19" !define VERSION "7.22"
; The file to write ; The file to write
OutFile "GPXSee-${VERSION}.exe" OutFile "GPXSee-${VERSION}.exe"
@ -106,20 +106,21 @@ Section "GPXSee" SEC_APP
; Associate file formats ; Associate file formats
DetailPrint "Associating file types..." DetailPrint "Associating file types..."
!insertmacro FILE_ASSOCIATION_ADD "gpx" "GPS Exchange Format" 7 !insertmacro FILE_ASSOCIATION_ADD "gpx" "GPS Exchange Format" 8
!insertmacro FILE_ASSOCIATION_ADD "tcx" "Training Center XML" 8 !insertmacro FILE_ASSOCIATION_ADD "tcx" "Training Center XML" 9
!insertmacro FILE_ASSOCIATION_ADD "kml" "Keyhole Markup Language" 9 !insertmacro FILE_ASSOCIATION_ADD "kml" "Keyhole Markup Language" 10
!insertmacro FILE_ASSOCIATION_ADD "fit" "Flexible and Interoperable Data Transfer" 10 !insertmacro FILE_ASSOCIATION_ADD "fit" "Flexible and Interoperable Data Transfer" 11
!insertmacro FILE_ASSOCIATION_ADD "igc" "Flight Recorder Data Format" 11 !insertmacro FILE_ASSOCIATION_ADD "igc" "Flight Recorder Data Format" 12
!insertmacro FILE_ASSOCIATION_ADD "nmea" "NMEA 0183 Data" 12 !insertmacro FILE_ASSOCIATION_ADD "nmea" "NMEA 0183 Data" 13
!insertmacro FILE_ASSOCIATION_ADD "plt" "OziExplorer Track Point File" 13 !insertmacro FILE_ASSOCIATION_ADD "plt" "OziExplorer Track Point File" 14
!insertmacro FILE_ASSOCIATION_ADD "rte" "OziExplorer Route File" 14 !insertmacro FILE_ASSOCIATION_ADD "rte" "OziExplorer Route File" 15
!insertmacro FILE_ASSOCIATION_ADD "wpt" "OziExplorer Waypoint File" 1 !insertmacro FILE_ASSOCIATION_ADD "wpt" "OziExplorer Waypoint File" 1
!insertmacro FILE_ASSOCIATION_ADD "loc" "Geocaching.com Waypoint File" 2 !insertmacro FILE_ASSOCIATION_ADD "loc" "Geocaching.com Waypoint File" 2
!insertmacro FILE_ASSOCIATION_ADD "slf" "Sigma Log File" 3 !insertmacro FILE_ASSOCIATION_ADD "slf" "Sigma Log File" 3
!insertmacro FILE_ASSOCIATION_ADD "geojson" "GeoJSON" 4 !insertmacro FILE_ASSOCIATION_ADD "geojson" "GeoJSON" 4
!insertmacro FILE_ASSOCIATION_ADD "cup" "SeeYou CUP File" 5 !insertmacro FILE_ASSOCIATION_ADD "cup" "SeeYou CUP File" 5
!insertmacro FILE_ASSOCIATION_ADD "gpi" "Garmin POI File" 6 !insertmacro FILE_ASSOCIATION_ADD "gpi" "Garmin POI File" 6
!insertmacro FILE_ASSOCIATION_ADD "sml" "Suunto Markup Language" 7
System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) v (0x08000000, 0, 0, 0)' System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) v (0x08000000, 0, 0, 0)'
SectionEnd SectionEnd
@ -147,30 +148,17 @@ Section "MSVC runtime" SEC_MSVC
SectionIn RO SectionIn RO
DetailPrint "Checking whether Visual C++ 2015 Redistributable is already installed..."
${If} ${RunningX64}
ReadRegDword $R0 HKLM "SOFTWARE\Wow6432Node\Microsoft\VisualStudio\14.0\VC\Runtimes\x86" "Installed"
${Else}
ReadRegDword $R0 HKLM "SOFTWARE\Microsoft\VisualStudio\14.0\VC\Runtimes\x86" "Installed"
${EndIf}
StrCmp $R0 "1" 0 +3
DetailPrint "Visual C++ 2015 Redistributable is already installed, skipping install."
Goto done
DetailPrint "Installing Visual C++ 2015 Redistributable..."
SetOutPath $TEMP SetOutPath $TEMP
File "vcredist_x86.exe" File "vc_redist.x86.exe"
ExecWait '"$TEMP\vcredist_x86.exe" /install /quiet /norestart' ExecWait '"$TEMP\vc_redist.x86.exe" /install /quiet /norestart'
SetOutPath $INSTDIR SetOutPath $INSTDIR
done:
SectionEnd SectionEnd
Section "OpenSSL" SEC_OPENSSL Section "OpenSSL" SEC_OPENSSL
File "libeay32.dll" File "libcrypto-1_1.dll"
File "ssleay32.dll" File "libssl-1_1.dll"
SectionEnd SectionEnd
@ -188,6 +176,7 @@ SectionGroup "Localization" SEC_LOCALIZATION
!insertmacro LOCALIZATION "Finnish" "fi" !insertmacro LOCALIZATION "Finnish" "fi"
!insertmacro LOCALIZATION "French" "fr" !insertmacro LOCALIZATION "French" "fr"
!insertmacro LOCALIZATION "German" "de" !insertmacro LOCALIZATION "German" "de"
!insertmacro LOCALIZATION "Hungarian" "hu"
!insertmacro LOCALIZATION "Norwegian" "nb" !insertmacro LOCALIZATION "Norwegian" "nb"
!insertmacro LOCALIZATION "Polish" "pl" !insertmacro LOCALIZATION "Polish" "pl"
!insertmacro LOCALIZATION "Portuguese (Brazil)" "pt_BR" !insertmacro LOCALIZATION "Portuguese (Brazil)" "pt_BR"
@ -232,6 +221,7 @@ Section "Uninstall"
!insertmacro FILE_ASSOCIATION_REMOVE "geojson" !insertmacro FILE_ASSOCIATION_REMOVE "geojson"
!insertmacro FILE_ASSOCIATION_REMOVE "cup" !insertmacro FILE_ASSOCIATION_REMOVE "cup"
!insertmacro FILE_ASSOCIATION_REMOVE "gpi" !insertmacro FILE_ASSOCIATION_REMOVE "gpi"
!insertmacro FILE_ASSOCIATION_REMOVE "sml"
System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) v (0x08000000, 0, 0, 0)' System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) v (0x08000000, 0, 0, 0)'
SectionEnd SectionEnd
@ -244,7 +234,7 @@ SectionEnd
LangString DESC_QT ${LANG_ENGLISH} \ LangString DESC_QT ${LANG_ENGLISH} \
"QT cross-platform application framework." "QT cross-platform application framework."
LangString DESC_MSVC ${LANG_ENGLISH} \ LangString DESC_MSVC ${LANG_ENGLISH} \
"Visual C++ 2015 runtime components. If already installed, will be skipped." "Microsoft Visual C++ 2017 runtime. If already installed, will be skipped."
LangString DESC_OPENSSL ${LANG_ENGLISH} \ LangString DESC_OPENSSL ${LANG_ENGLISH} \
"OpenSSL library. Required for HTTPS to work." "OpenSSL library. Required for HTTPS to work."
LangString DESC_ANGLE ${LANG_ENGLISH} \ LangString DESC_ANGLE ${LANG_ENGLISH} \

View File

@ -98,4 +98,11 @@
<generic-icon name="application/octet-stream"/> <generic-icon name="application/octet-stream"/>
<glob pattern="*.gpi"/> <glob pattern="*.gpi"/>
</mime-type> </mime-type>
<mime-type type="application/sml+xml">
<comment>Suunto Markup Language</comment>
<sub-class-of type="application/xml"/>
<generic-icon name="application-xml"/>
<glob pattern="*.sml"/>
</mime-type>
</mime-info> </mime-info>

View File

@ -7,7 +7,7 @@
; The name of the installer ; The name of the installer
Name "GPXSee" Name "GPXSee"
; Program version ; Program version
!define VERSION "7.19" !define VERSION "7.22"
; The file to write ; The file to write
OutFile "GPXSee-${VERSION}_x64.exe" OutFile "GPXSee-${VERSION}_x64.exe"
@ -113,20 +113,21 @@ Section "GPXSee" SEC_APP
; Associate file formats ; Associate file formats
DetailPrint "Associating file types..." DetailPrint "Associating file types..."
!insertmacro FILE_ASSOCIATION_ADD "gpx" "GPS Exchange Format" 7 !insertmacro FILE_ASSOCIATION_ADD "gpx" "GPS Exchange Format" 8
!insertmacro FILE_ASSOCIATION_ADD "tcx" "Training Center XML" 8 !insertmacro FILE_ASSOCIATION_ADD "tcx" "Training Center XML" 9
!insertmacro FILE_ASSOCIATION_ADD "kml" "Keyhole Markup Language" 9 !insertmacro FILE_ASSOCIATION_ADD "kml" "Keyhole Markup Language" 10
!insertmacro FILE_ASSOCIATION_ADD "fit" "Flexible and Interoperable Data Transfer" 10 !insertmacro FILE_ASSOCIATION_ADD "fit" "Flexible and Interoperable Data Transfer" 11
!insertmacro FILE_ASSOCIATION_ADD "igc" "Flight Recorder Data Format" 11 !insertmacro FILE_ASSOCIATION_ADD "igc" "Flight Recorder Data Format" 12
!insertmacro FILE_ASSOCIATION_ADD "nmea" "NMEA 0183 Data" 12 !insertmacro FILE_ASSOCIATION_ADD "nmea" "NMEA 0183 Data" 13
!insertmacro FILE_ASSOCIATION_ADD "plt" "OziExplorer Track Point File" 13 !insertmacro FILE_ASSOCIATION_ADD "plt" "OziExplorer Track Point File" 14
!insertmacro FILE_ASSOCIATION_ADD "rte" "OziExplorer Route File" 14 !insertmacro FILE_ASSOCIATION_ADD "rte" "OziExplorer Route File" 15
!insertmacro FILE_ASSOCIATION_ADD "wpt" "OziExplorer Waypoint File" 1 !insertmacro FILE_ASSOCIATION_ADD "wpt" "OziExplorer Waypoint File" 1
!insertmacro FILE_ASSOCIATION_ADD "loc" "Geocaching.com Waypoint File" 2 !insertmacro FILE_ASSOCIATION_ADD "loc" "Geocaching.com Waypoint File" 2
!insertmacro FILE_ASSOCIATION_ADD "slf" "Sigma Log File" 3 !insertmacro FILE_ASSOCIATION_ADD "slf" "Sigma Log File" 3
!insertmacro FILE_ASSOCIATION_ADD "geojson" "GeoJSON" 4 !insertmacro FILE_ASSOCIATION_ADD "geojson" "GeoJSON" 4
!insertmacro FILE_ASSOCIATION_ADD "cup" "SeeYou CUP File" 5 !insertmacro FILE_ASSOCIATION_ADD "cup" "SeeYou CUP File" 5
!insertmacro FILE_ASSOCIATION_ADD "gpi" "Garmin POI File" 6 !insertmacro FILE_ASSOCIATION_ADD "gpi" "Garmin POI File" 6
!insertmacro FILE_ASSOCIATION_ADD "sml" "Suunto Markup Language" 7
System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) v (0x08000000, 0, 0, 0)' System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) v (0x08000000, 0, 0, 0)'
SectionEnd SectionEnd
@ -154,25 +155,17 @@ Section "MSVC runtime" SEC_MSVC
SectionIn RO SectionIn RO
DetailPrint "Checking whether Visual C++ 2015 Redistributable is already installed..."
ReadRegDword $R0 HKLM "SOFTWARE\Wow6432Node\Microsoft\VisualStudio\14.0\VC\Runtimes\x64" "Installed"
StrCmp $R0 "1" 0 +3
DetailPrint "Visual C++ 2015 Redistributable is already installed, skipping install."
Goto done
DetailPrint "Installing Visual C++ 2015 Redistributable..."
SetOutPath $TEMP SetOutPath $TEMP
File "vcredist_x64.exe" File "vc_redist.x64.exe"
ExecWait '"$TEMP\vcredist_x64.exe" /install /quiet /norestart' ExecWait '"$TEMP\vc_redist.x64.exe" /install /quiet /norestart'
SetOutPath $INSTDIR SetOutPath $INSTDIR
done:
SectionEnd SectionEnd
Section "OpenSSL" SEC_OPENSSL Section "OpenSSL" SEC_OPENSSL
File "libeay32.dll" File "libcrypto-1_1-x64.dll"
File "ssleay32.dll" File "libssl-1_1-x64.dll"
SectionEnd SectionEnd
@ -190,6 +183,7 @@ SectionGroup "Localization" SEC_LOCALIZATION
!insertmacro LOCALIZATION "Finnish" "fi" !insertmacro LOCALIZATION "Finnish" "fi"
!insertmacro LOCALIZATION "French" "fr" !insertmacro LOCALIZATION "French" "fr"
!insertmacro LOCALIZATION "German" "de" !insertmacro LOCALIZATION "German" "de"
!insertmacro LOCALIZATION "Hungarian" "hu"
!insertmacro LOCALIZATION "Norwegian" "nb" !insertmacro LOCALIZATION "Norwegian" "nb"
!insertmacro LOCALIZATION "Polish" "pl" !insertmacro LOCALIZATION "Polish" "pl"
!insertmacro LOCALIZATION "Portuguese (Brazil)" "pt_BR" !insertmacro LOCALIZATION "Portuguese (Brazil)" "pt_BR"
@ -235,6 +229,7 @@ Section "Uninstall"
!insertmacro FILE_ASSOCIATION_REMOVE "geojson" !insertmacro FILE_ASSOCIATION_REMOVE "geojson"
!insertmacro FILE_ASSOCIATION_REMOVE "cup" !insertmacro FILE_ASSOCIATION_REMOVE "cup"
!insertmacro FILE_ASSOCIATION_REMOVE "gpi" !insertmacro FILE_ASSOCIATION_REMOVE "gpi"
!insertmacro FILE_ASSOCIATION_REMOVE "sml"
System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) v (0x08000000, 0, 0, 0)' System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) v (0x08000000, 0, 0, 0)'
SectionEnd SectionEnd
@ -247,7 +242,7 @@ SectionEnd
LangString DESC_QT ${LANG_ENGLISH} \ LangString DESC_QT ${LANG_ENGLISH} \
"QT cross-platform application framework." "QT cross-platform application framework."
LangString DESC_MSVC ${LANG_ENGLISH} \ LangString DESC_MSVC ${LANG_ENGLISH} \
"Visual C++ 2015 runtime components. If already installed, will be skipped." "Microsoft Visual C++ 2017 runtime. If already installed, will be skipped."
LangString DESC_OPENSSL ${LANG_ENGLISH} \ LangString DESC_OPENSSL ${LANG_ENGLISH} \
"OpenSSL library. Required for HTTPS to work." "OpenSSL library. Required for HTTPS to work."
LangString DESC_ANGLE ${LANG_ENGLISH} \ LangString DESC_ANGLE ${LANG_ENGLISH} \

View File

@ -112,7 +112,7 @@ void GUI::loadMaps()
QString mapDir(ProgramPaths::mapDir()); QString mapDir(ProgramPaths::mapDir());
if (!mapDir.isNull() && !_ml->loadDir(mapDir)) if (!mapDir.isNull() && !_ml->loadDir(mapDir))
qWarning("%s", qPrintable(_ml->errorString())); qWarning("%s", qPrintable(_ml->errorPath() + ": " + _ml->errorString()));
_map = new EmptyMap(this); _map = new EmptyMap(this);
} }
@ -451,11 +451,11 @@ void GUI::createActions()
_degreesMinutesAction->setActionGroup(ag); _degreesMinutesAction->setActionGroup(ag);
connect(_degreesMinutesAction, SIGNAL(triggered()), this, connect(_degreesMinutesAction, SIGNAL(triggered()), this,
SLOT(setDegreesMinutes())); SLOT(setDegreesMinutes()));
_DMSAction = new QAction(tr("Degrees, minutes, seconds (DMS)"), this); _dmsAction = new QAction(tr("Degrees, minutes, seconds (DMS)"), this);
_DMSAction->setMenuRole(QAction::NoRole); _dmsAction->setMenuRole(QAction::NoRole);
_DMSAction->setCheckable(true); _dmsAction->setCheckable(true);
_DMSAction->setActionGroup(ag); _dmsAction->setActionGroup(ag);
connect(_DMSAction, SIGNAL(triggered()), this, SLOT(setDMS())); connect(_dmsAction, SIGNAL(triggered()), this, SLOT(setDMS()));
_fullscreenAction = new QAction(QIcon(FULLSCREEN_ICON), _fullscreenAction = new QAction(QIcon(FULLSCREEN_ICON),
tr("Fullscreen mode"), this); tr("Fullscreen mode"), this);
_fullscreenAction->setMenuRole(QAction::NoRole); _fullscreenAction->setMenuRole(QAction::NoRole);
@ -559,7 +559,7 @@ void GUI::createMenus()
QMenu *coordinatesMenu = settingsMenu->addMenu(tr("Coordinates format")); QMenu *coordinatesMenu = settingsMenu->addMenu(tr("Coordinates format"));
coordinatesMenu->addAction(_decimalDegreesAction); coordinatesMenu->addAction(_decimalDegreesAction);
coordinatesMenu->addAction(_degreesMinutesAction); coordinatesMenu->addAction(_degreesMinutesAction);
coordinatesMenu->addAction(_DMSAction); coordinatesMenu->addAction(_dmsAction);
settingsMenu->addSeparator(); settingsMenu->addSeparator();
settingsMenu->addAction(_showToolbarsAction); settingsMenu->addAction(_showToolbarsAction);
settingsMenu->addAction(_fullscreenAction); settingsMenu->addAction(_fullscreenAction);
@ -1325,7 +1325,10 @@ bool GUI::loadMap(const QString &fileName)
if (fileName.isEmpty()) if (fileName.isEmpty())
return false; return false;
if (_ml->loadFile(fileName)) { QFileInfo fi(fileName);
bool res = fi.isDir() ? _ml->loadDir(fileName) : _ml->loadFile(fileName);
if (res) {
QAction *a = createMapAction(_ml->maps().last()); QAction *a = createMapAction(_ml->maps().last());
_mapMenu->insertAction(_mapsEnd, a); _mapMenu->insertAction(_mapsEnd, a);
_showMapAction->setEnabled(true); _showMapAction->setEnabled(true);
@ -1655,7 +1658,7 @@ void GUI::writeSettings()
: _nauticalUnitsAction->isChecked() ? Nautical : Metric; : _nauticalUnitsAction->isChecked() ? Nautical : Metric;
if (units != UNITS_DEFAULT) if (units != UNITS_DEFAULT)
settings.setValue(UNITS_SETTING, units); settings.setValue(UNITS_SETTING, units);
CoordinatesFormat format = _DMSAction->isChecked() ? DMS CoordinatesFormat format = _dmsAction->isChecked() ? DMS
: _degreesMinutesAction->isChecked() ? DegreesMinutes : DecimalDegrees; : _degreesMinutesAction->isChecked() ? DegreesMinutes : DecimalDegrees;
if (format != COORDINATES_DEFAULT) if (format != COORDINATES_DEFAULT)
settings.setValue(COORDINATES_SETTING, format); settings.setValue(COORDINATES_SETTING, format);
@ -1879,7 +1882,7 @@ void GUI::readSettings()
value = settings.value(COORDINATES_SETTING, COORDINATES_DEFAULT).toInt(); value = settings.value(COORDINATES_SETTING, COORDINATES_DEFAULT).toInt();
if (value == DMS) if (value == DMS)
_DMSAction->trigger(); _dmsAction->trigger();
else if (value == DegreesMinutes) else if (value == DegreesMinutes)
_degreesMinutesAction->trigger(); _degreesMinutesAction->trigger();
else else

View File

@ -180,7 +180,7 @@ private:
QAction *_nauticalUnitsAction; QAction *_nauticalUnitsAction;
QAction *_decimalDegreesAction; QAction *_decimalDegreesAction;
QAction *_degreesMinutesAction; QAction *_degreesMinutesAction;
QAction *_DMSAction; QAction *_dmsAction;
QAction *_totalTimeAction; QAction *_totalTimeAction;
QAction *_movingTimeAction; QAction *_movingTimeAction;
QAction *_nextMapAction; QAction *_nextMapAction;

View File

@ -14,7 +14,8 @@ double Coordinates::distanceTo(const Coordinates &c) const
#ifndef QT_NO_DEBUG #ifndef QT_NO_DEBUG
QDebug operator<<(QDebug dbg, const Coordinates &c) QDebug operator<<(QDebug dbg, const Coordinates &c)
{ {
dbg.nospace() << "Coordinates(" << c.lon() << ", " << c.lat() << ")"; dbg.nospace() << qSetRealNumberPrecision(10) << "Coordinates(" << c.lat()
<< ", " << c.lon() << ")";
return dbg.space(); return dbg.space();
} }
#endif // QT_NO_DEBUG #endif // QT_NO_DEBUG

View File

@ -9,6 +9,7 @@
#define TIFF_SHORT 3 #define TIFF_SHORT 3
#define TIFF_LONG 4 #define TIFF_LONG 4
#define TIFF_RATIONAL 5 #define TIFF_RATIONAL 5
#define TIFF_SRATIONAL 10
#define TIFF_DOUBLE 12 #define TIFF_DOUBLE 12
class TIFFFile class TIFFFile

View File

@ -19,6 +19,7 @@
#include "exifparser.h" #include "exifparser.h"
#include "cupparser.h" #include "cupparser.h"
#include "gpiparser.h" #include "gpiparser.h"
#include "smlparser.h"
#include "dem.h" #include "dem.h"
#include "data.h" #include "data.h"
@ -41,37 +42,39 @@ static GeoJSONParser geojson;
static EXIFParser exif; static EXIFParser exif;
static CUPParser cup; static CUPParser cup;
static GPIParser gpi; static GPIParser gpi;
static SMLParser sml;
static QHash<QString, Parser*> parsers() static QMap<QString, Parser*> parsers()
{ {
QHash<QString, Parser*> hash; QMap<QString, Parser*> map;
hash.insert("gpx", &gpx); map.insert("gpx", &gpx);
hash.insert("tcx", &tcx); map.insert("tcx", &tcx);
hash.insert("kml", &kml); map.insert("kml", &kml);
hash.insert("fit", &fit); map.insert("fit", &fit);
hash.insert("csv", &csv); map.insert("csv", &csv);
hash.insert("igc", &igc); map.insert("igc", &igc);
hash.insert("nmea", &nmea); map.insert("nmea", &nmea);
hash.insert("plt", &plt); map.insert("plt", &plt);
hash.insert("wpt", &wpt); map.insert("wpt", &wpt);
hash.insert("rte", &rte); map.insert("rte", &rte);
hash.insert("loc", &loc); map.insert("loc", &loc);
hash.insert("slf", &slf); map.insert("slf", &slf);
#ifdef ENABLE_GEOJSON #ifdef ENABLE_GEOJSON
hash.insert("json", &geojson); map.insert("json", &geojson);
hash.insert("geojson", &geojson); map.insert("geojson", &geojson);
#endif // ENABLE_GEOJSON #endif // ENABLE_GEOJSON
hash.insert("jpeg", &exif); map.insert("jpeg", &exif);
hash.insert("jpg", &exif); map.insert("jpg", &exif);
hash.insert("cup", &cup); map.insert("cup", &cup);
hash.insert("gpi", &gpi); map.insert("gpi", &gpi);
map.insert("sml", &sml);
return hash; return map;
} }
QHash<QString, Parser*> Data::_parsers = parsers(); QMap<QString, Parser*> Data::_parsers = parsers();
bool Data::_useDEM = false; bool Data::_useDEM = false;
void Data::processData(QList<TrackData> &trackData, QList<RouteData> &routeData) void Data::processData(QList<TrackData> &trackData, QList<RouteData> &routeData)
@ -127,7 +130,7 @@ Data::Data(const QString &fileName, bool poi)
return; return;
} }
QHash<QString, Parser*>::iterator it; QMap<QString, Parser*>::iterator it;
if ((it = _parsers.find(fi.suffix().toLower())) != _parsers.end()) { if ((it = _parsers.find(fi.suffix().toLower())) != _parsers.end()) {
if (it.value()->parse(&file, trackData, routeData, _polygons, if (it.value()->parse(&file, trackData, routeData, _polygons,
_waypoints)) { _waypoints)) {
@ -163,17 +166,8 @@ Data::Data(const QString &fileName, bool poi)
QString Data::formats() QString Data::formats()
{ {
QStringList l(filter());
qSort(l);
QString supported;
for (int i = 0; i < l.size(); i++) {
supported += l.at(i);
if (i != l.size() - 1)
supported += " ";
}
return return
qApp->translate("Data", "Supported files") + " (" + supported + ");;" qApp->translate("Data", "Supported files") + " (" + filter().join(" ") + ");;"
+ qApp->translate("Data", "CSV files") + " (*.csv);;" + qApp->translate("Data", "CSV files") + " (*.csv);;"
+ qApp->translate("Data", "CUP files") + " (*.cup);;" + qApp->translate("Data", "CUP files") + " (*.cup);;"
+ qApp->translate("Data", "FIT files") + " (*.fit);;" + qApp->translate("Data", "FIT files") + " (*.fit);;"
@ -189,6 +183,7 @@ QString Data::formats()
+ qApp->translate("Data", "NMEA files") + " (*.nmea);;" + qApp->translate("Data", "NMEA files") + " (*.nmea);;"
+ qApp->translate("Data", "OziExplorer files") + " (*.plt *.rte *.wpt);;" + qApp->translate("Data", "OziExplorer files") + " (*.plt *.rte *.wpt);;"
+ qApp->translate("Data", "SLF files") + " (*.slf);;" + qApp->translate("Data", "SLF files") + " (*.slf);;"
+ qApp->translate("Data", "SML files") + " (*.sml);;"
+ qApp->translate("Data", "TCX files") + " (*.tcx);;" + qApp->translate("Data", "TCX files") + " (*.tcx);;"
+ qApp->translate("Data", "All files") + " (*)"; + qApp->translate("Data", "All files") + " (*)";
} }
@ -196,10 +191,10 @@ QString Data::formats()
QStringList Data::filter() QStringList Data::filter()
{ {
QStringList filter; QStringList filter;
QHash<QString, Parser*>::iterator it;
for (it = _parsers.begin(); it != _parsers.end(); it++) for (QMap<QString, Parser*>::iterator it = _parsers.begin();
filter << QString("*.%1").arg(it.key()); it != _parsers.end(); it++)
filter << "*." + it.key();
return filter; return filter;
} }

View File

@ -2,7 +2,7 @@
#define DATA_H #define DATA_H
#include <QList> #include <QList>
#include <QHash> #include <QMap>
#include <QString> #include <QString>
#include <QStringList> #include <QStringList>
#include "waypoint.h" #include "waypoint.h"
@ -42,7 +42,7 @@ private:
QList<Area> _polygons; QList<Area> _polygons;
QVector<Waypoint> _waypoints; QVector<Waypoint> _waypoints;
static QHash<QString, Parser*> _parsers; static QMap<QString, Parser*> _parsers;
static bool _useDEM; static bool _useDEM;
}; };

View File

@ -82,7 +82,10 @@ double EXIFParser::altitude(TIFFFile &file, const IFDEntry &alt,
double EXIFParser::coordinate(TIFFFile &file, const IFDEntry &ll) const double EXIFParser::coordinate(TIFFFile &file, const IFDEntry &ll) const
{ {
if (!(ll.type == TIFF_RATIONAL && ll.count == 3)) // Some broken image creators like NOKIA phones use a wrong (SRATIONAL)
// data type
if (!((ll.type == TIFF_RATIONAL || ll.type == TIFF_SRATIONAL)
&& ll.count == 3))
return NAN; return NAN;
if (!file.seek(ll.offset)) if (!file.seek(ll.offset))

View File

@ -96,7 +96,7 @@ static bool readARecord(const char *line, qint64 len)
return true; return true;
} }
bool IGCParser::readHRecord(const char *line, int len) bool IGCParser::readHRecord(CTX &ctx, const char *line, int len)
{ {
if (len < 11 || ::strncmp(line, "HFDTE", 5)) if (len < 11 || ::strncmp(line, "HFDTE", 5))
return true; return true;
@ -112,9 +112,9 @@ bool IGCParser::readHRecord(const char *line, int len)
return false; return false;
} }
_date = QDate(y + 2000 <= QDate::currentDate().year() ? 2000 + y : 1900 + y, ctx.date = QDate(y + 2000 <= QDate::currentDate().year()
m, d); ? 2000 + y : 1900 + y, m, d);
if (!_date.isValid()) { if (!ctx.date.isValid()) {
_errorString = "Invalid date"; _errorString = "Invalid date";
return false; return false;
} }
@ -122,8 +122,8 @@ bool IGCParser::readHRecord(const char *line, int len)
return true; return true;
} }
bool IGCParser::readBRecord(SegmentData &segment, const char *line, bool IGCParser::readBRecord(CTX &ctx, const char *line, int len,
int len) SegmentData &segment)
{ {
qreal lat, lon, ele; qreal lat, lon, ele;
QTime time; QTime time;
@ -152,20 +152,20 @@ bool IGCParser::readBRecord(SegmentData &segment, const char *line,
return false; return false;
} }
if (time < _time && !segment.isEmpty() if (time < ctx.time && !segment.isEmpty()
&& _date == segment.last().timestamp().date()) && ctx.date == segment.last().timestamp().date())
_date = _date.addDays(1); ctx.date = ctx.date.addDays(1);
_time = time; ctx.time = time;
Trackpoint t(Coordinates(lon, lat)); Trackpoint t(Coordinates(lon, lat));
t.setTimestamp(QDateTime(_date, _time, Qt::UTC)); t.setTimestamp(QDateTime(ctx.date, ctx.time, Qt::UTC));
t.setElevation(ele); t.setElevation(ele);
segment.append(t); segment.append(t);
return true; return true;
} }
bool IGCParser::readCRecord(RouteData &route, const char *line, int len) bool IGCParser::readCRecord(const char *line, int len, RouteData &route)
{ {
qreal lat, lon; qreal lat, lon;
@ -202,6 +202,7 @@ bool IGCParser::parse(QFile *file, QList<TrackData> &tracks,
qint64 len; qint64 len;
char line[76 + 2 + 1 + 1]; char line[76 + 2 + 1 + 1];
bool route = false, track = false; bool route = false, track = false;
CTX ctx;
_errorLine = 1; _errorLine = 1;
@ -225,28 +226,28 @@ bool IGCParser::parse(QFile *file, QList<TrackData> &tracks,
} }
} else { } else {
if (line[0] == 'H') { if (line[0] == 'H') {
if (!readHRecord(line, len)) if (!readHRecord(ctx, line, len))
return false; return false;
} else if (line[0] == 'C') { } else if (line[0] == 'C') {
if (route) { if (route) {
if (!readCRecord(routes.last() ,line, len)) if (!readCRecord(line, len, routes.last()))
return false; return false;
} else { } else {
route = true; route = true;
routes.append(RouteData()); routes.append(RouteData());
} }
} else if (line[0] == 'B') { } else if (line[0] == 'B') {
if (_date.isNull()) { if (ctx.date.isNull()) {
_errorString = "Missing date header"; _errorString = "Missing date header";
return false; return false;
} }
if (!track) { if (!track) {
tracks.append(TrackData()); tracks.append(TrackData());
tracks.last().append(SegmentData()); tracks.last().append(SegmentData());
_time = QTime(0, 0); ctx.time = QTime(0, 0);
track = true; track = true;
} }
if (!readBRecord(tracks.last().last(), line, len)) if (!readBRecord(ctx, line, len, tracks.last().last()))
return false; return false;
} }
} }

View File

@ -17,15 +17,17 @@ public:
int errorLine() const {return _errorLine;} int errorLine() const {return _errorLine;}
private: private:
bool readHRecord(const char *line, int len); struct CTX {
bool readBRecord(SegmentData &segment, const char *line, int len); QDate date;
bool readCRecord(RouteData &route, const char *line, int len); QTime time;
};
bool readHRecord(CTX &ctx, const char *line, int len);
bool readBRecord(CTX &ctx, const char *line, int len, SegmentData &segment);
bool readCRecord(const char *line, int len, RouteData &route);
int _errorLine; int _errorLine;
QString _errorString; QString _errorString;
QDate _date;
QTime _time;
}; };
#endif // IGCPARSER_H #endif // IGCPARSER_H

View File

@ -7,15 +7,15 @@ class Link {
public: public:
Link() {} Link() {}
Link(const QString &URL, const QString &text = QString()) Link(const QString &URL, const QString &text = QString())
: _URL(URL), _text(text) {} : _url(URL), _text(text) {}
void setURL(const QString &URL) {_URL = URL;} void setURL(const QString &URL) {_url = URL;}
void setText(const QString &text) {_text = text;} void setText(const QString &text) {_text = text;}
const QString &URL() const {return _URL;} const QString &URL() const {return _url;}
const QString &text() const {return _text;} const QString &text() const {return _text;}
private: private:
QString _URL; QString _url;
QString _text; QString _text;
}; };

View File

@ -227,7 +227,8 @@ bool NMEAParser::readEW(const char *data, int len, qreal &lon)
return true; return true;
} }
bool NMEAParser::readRMC(SegmentData &segment, const char *line, int len) bool NMEAParser::readRMC(CTX &ctx, const char *line, int len,
SegmentData &segment)
{ {
int col = 1; int col = 1;
const char *vp = line; const char *vp = line;
@ -280,23 +281,24 @@ bool NMEAParser::readRMC(SegmentData &segment, const char *line, int len)
} }
if (!date.isNull()) { if (!date.isNull()) {
if (_date.isNull() && !_time.isNull() && !segment.isEmpty()) if (ctx.date.isNull() && !ctx.time.isNull() && !segment.isEmpty())
segment.last().setTimestamp(QDateTime(date, _time, Qt::UTC)); segment.last().setTimestamp(QDateTime(date, ctx.time, Qt::UTC));
_date = date; ctx.date = date;
} }
Coordinates c(lon, lat); Coordinates c(lon, lat);
if (valid && !_GGA && c.isValid()) { if (valid && !ctx.GGA && c.isValid()) {
Trackpoint t(c); Trackpoint t(c);
if (!_date.isNull() && !time.isNull()) if (!ctx.date.isNull() && !time.isNull())
t.setTimestamp(QDateTime(_date, time, Qt::UTC)); t.setTimestamp(QDateTime(ctx.date, time, Qt::UTC));
segment.append(t); segment.append(t);
} }
return true; return true;
} }
bool NMEAParser::readGGA(SegmentData &segment, const char *line, int len) bool NMEAParser::readGGA(CTX &ctx, const char *line, int len,
SegmentData &segment)
{ {
int col = 1; int col = 1;
const char *vp = line; const char *vp = line;
@ -306,7 +308,7 @@ bool NMEAParser::readGGA(SegmentData &segment, const char *line, int len)
if (*lp == ',' || *lp == '*') { if (*lp == ',' || *lp == '*') {
switch (col) { switch (col) {
case 1: case 1:
if (!readTime(vp, lp - vp, _time)) if (!readTime(vp, lp - vp, ctx.time))
return false; return false;
break; break;
case 2: case 2:
@ -360,19 +362,19 @@ bool NMEAParser::readGGA(SegmentData &segment, const char *line, int len)
Coordinates c(lon, lat); Coordinates c(lon, lat);
if (c.isValid()) { if (c.isValid()) {
Trackpoint t(c); Trackpoint t(c);
if (!(_time.isNull() || _date.isNull())) if (!(ctx.time.isNull() || ctx.date.isNull()))
t.setTimestamp(QDateTime(_date, _time, Qt::UTC)); t.setTimestamp(QDateTime(ctx.date, ctx.time, Qt::UTC));
if (!std::isnan(ele)) if (!std::isnan(ele))
t.setElevation(ele - gh); t.setElevation(ele - gh);
segment.append(t); segment.append(t);
_GGA = true; ctx.GGA = true;
} }
return true; return true;
} }
bool NMEAParser::readWPL(QVector<Waypoint> &waypoints, const char *line, int len) bool NMEAParser::readWPL(const char *line, int len, QVector<Waypoint> &waypoints)
{ {
int col = 1; int col = 1;
const char *vp = line; const char *vp = line;
@ -423,7 +425,7 @@ bool NMEAParser::readWPL(QVector<Waypoint> &waypoints, const char *line, int len
return true; return true;
} }
bool NMEAParser::readZDA(const char *line, int len) bool NMEAParser::readZDA(CTX &ctx, const char *line, int len)
{ {
int col = 1; int col = 1;
const char *vp = line; const char *vp = line;
@ -468,8 +470,8 @@ bool NMEAParser::readZDA(const char *line, int len)
return false; return false;
} }
_date = QDate(y, m, d); ctx.date = QDate(y, m, d);
if (!_date.isValid()) { if (!ctx.date.isValid()) {
_errorString = "Invalid date"; _errorString = "Invalid date";
return false; return false;
} }
@ -486,13 +488,11 @@ bool NMEAParser::parse(QFile *file, QList<TrackData> &tracks,
qint64 len; qint64 len;
char line[80 + 2 + 1 + 1]; char line[80 + 2 + 1 + 1];
SegmentData segment; SegmentData segment;
CTX ctx;
_errorLine = 1; _errorLine = 1;
_errorString.clear(); _errorString.clear();
_date = QDate();
_time = QTime();
_GGA = false;
while (!file->atEnd()) { while (!file->atEnd()) {
len = file->readLine(line, sizeof(line)); len = file->readLine(line, sizeof(line));
@ -507,16 +507,16 @@ bool NMEAParser::parse(QFile *file, QList<TrackData> &tracks,
if (validSentence(line, len)) { if (validSentence(line, len)) {
if (!memcmp(line + 3, "RMC,", 4)) { if (!memcmp(line + 3, "RMC,", 4)) {
if (!readRMC(segment, line + 7, len - 7)) if (!readRMC(ctx, line + 7, len - 7, segment))
return false; return false;
} else if (!memcmp(line + 3, "GGA,", 4)) { } else if (!memcmp(line + 3, "GGA,", 4)) {
if (!readGGA(segment, line + 7, len - 7)) if (!readGGA(ctx, line + 7, len - 7, segment))
return false; return false;
} else if (!memcmp(line + 3, "WPL,", 4)) { } else if (!memcmp(line + 3, "WPL,", 4)) {
if (!readWPL(waypoints, line + 7, len - 7)) if (!readWPL(line + 7, len - 7, waypoints))
return false; return false;
} else if (!memcmp(line + 3, "ZDA,", 4)) { } else if (!memcmp(line + 3, "ZDA,", 4)) {
if (!readZDA(line + 7, len - 7)) if (!readZDA(ctx, line + 7, len - 7))
return false; return false;
} }
} }

View File

@ -8,7 +8,7 @@
class NMEAParser : public Parser class NMEAParser : public Parser
{ {
public: public:
NMEAParser() : _errorLine(0), _GGA(false) {} NMEAParser() : _errorLine(0) {}
bool parse(QFile *file, QList<TrackData> &tracks, QList<RouteData> &routes, bool parse(QFile *file, QList<TrackData> &tracks, QList<RouteData> &routes,
QList<Area> &polygons, QVector<Waypoint> &waypoints); QList<Area> &polygons, QVector<Waypoint> &waypoints);
@ -16,6 +16,14 @@ public:
int errorLine() const {return _errorLine;} int errorLine() const {return _errorLine;}
private: private:
struct CTX {
CTX() : GGA(false) {}
QDate date;
QTime time;
bool GGA;
};
bool readEW(const char *data, int len, qreal &lon); bool readEW(const char *data, int len, qreal &lon);
bool readLon(const char *data, int len, qreal &lon); bool readLon(const char *data, int len, qreal &lon);
bool readNS(const char *data, int len, qreal &lat); bool readNS(const char *data, int len, qreal &lat);
@ -25,17 +33,13 @@ private:
bool readAltitude(const char *data, int len, qreal &ele); bool readAltitude(const char *data, int len, qreal &ele);
bool readGeoidHeight(const char *data, int len, qreal &gh); bool readGeoidHeight(const char *data, int len, qreal &gh);
bool readRMC(SegmentData &segment, const char *line, int len); bool readRMC(CTX &ctx, const char *line, int len, SegmentData &segment);
bool readGGA(SegmentData &segment, const char *line, int len); bool readGGA(CTX &ctx, const char *line, int len, SegmentData &segment);
bool readWPL(QVector<Waypoint> &waypoints, const char *line, int len); bool readWPL(const char *line, int len, QVector<Waypoint> &waypoints);
bool readZDA(const char *line, int len); bool readZDA(CTX &ctx, const char *line, int len);
int _errorLine; int _errorLine;
QString _errorString; QString _errorString;
QDate _date;
QTime _time;
bool _GGA;
}; };
#endif // NMEAPARSER_H #endif // NMEAPARSER_H

163
src/data/smlparser.cpp Normal file
View File

@ -0,0 +1,163 @@
#include "smlparser.h"
#ifndef QT_NO_DEBUG
QDebug operator<<(QDebug dbg, const SMLParser::Sensors &sensors)
{
dbg.nospace() << "Sensors(" << sensors.cadence << ", "
<< sensors.temperature << ", " << sensors.hr << "," << sensors.power
<< ", " << sensors.speed << ")";
return dbg.space();
}
#endif // QT_NO_DEBUG
void SMLParser::sample(SegmentData &segment, QMap<QDateTime, Sensors> &map)
{
QDateTime timestamp;
Sensors sensors;
qreal lat = NAN, lon = NAN, altitude = NAN;
bool ok, periodic = false;
while (_reader.readNextStartElement()) {
if (_reader.name() == QLatin1String("Latitude")) {
lat = _reader.readElementText().toDouble(&ok);
if (!ok || lat < -90 || lon > 90) {
_reader.raiseError("Invalid Latitude");
return;
}
} else if (_reader.name() == QLatin1String("Longitude")) {
lon = _reader.readElementText().toDouble(&ok);
if (!ok || lat < -180 || lon > 180) {
_reader.raiseError("Invalid Longitude");
return;
}
} else if (_reader.name() == QLatin1String("UTC")) {
timestamp = QDateTime::fromString(_reader.readElementText(),
Qt::ISODate);
if (!timestamp.isValid()) {
_reader.raiseError("Invalid timestamp");
return;
}
} else if (_reader.name() == QLatin1String("GPSAltitude")) {
altitude = _reader.readElementText().toDouble(&ok);
if (!ok) {
_reader.raiseError("Invalid GPS altitude");
return;
}
} else if (_reader.name() == QLatin1String("SampleType")) {
if (_reader.readElementText() == "periodic")
periodic = true;
} else if (_reader.name() == QLatin1String("Cadence")) {
sensors.cadence = _reader.readElementText().toDouble(&ok);
if (!ok || sensors.cadence < 0) {
_reader.raiseError("Invalid Cadence");
return;
}
} else if (_reader.name() == QLatin1String("Temperature")) {
sensors.temperature = _reader.readElementText().toDouble(&ok);
// Temperature is in Kelvin units
if (!ok || sensors.temperature < 0) {
_reader.raiseError("Invalid Temperature");
return;
}
} else if (_reader.name() == QLatin1String("HR")) {
sensors.hr = _reader.readElementText().toDouble(&ok);
if (!ok || sensors.hr < 0) {
_reader.raiseError("Invalid HR");
return;
}
} else if (_reader.name() == QLatin1String("BikePower")) {
sensors.power = _reader.readElementText().toDouble(&ok);
if (!ok || sensors.power < 0) {
_reader.raiseError("Invalid BikePower");
return;
}
} else if (_reader.name() == QLatin1String("Speed")) {
sensors.speed = _reader.readElementText().toDouble(&ok);
if (!ok || sensors.speed < 0) {
_reader.raiseError("Invalid Speed");
return;
}
} else
_reader.skipCurrentElement();
}
if (periodic && timestamp.isValid())
map.insert(timestamp, sensors);
else if (!(std::isnan(lon) || std::isnan(lat))) {
Trackpoint t(Coordinates(rad2deg(lon), rad2deg(lat)));
t.setTimestamp(timestamp);
t.setElevation(altitude);
segment.append(t);
}
}
void SMLParser::samples(SegmentData &segment)
{
QMap<QDateTime, Sensors> sensors;
QMap<QDateTime, Sensors>::const_iterator it;
while (_reader.readNextStartElement()) {
if (_reader.name() == QLatin1String("Sample")) {
sample(segment, sensors);
} else
_reader.skipCurrentElement();
}
for (int i = 0; i < segment.size(); i++) {
Trackpoint &t = segment[i];
if ((it = sensors.lowerBound(t.timestamp())) != sensors.constEnd()) {
t.setCadence(it->cadence * 60);
t.setTemperature(it->temperature - 273.15);
t.setHeartRate(it->hr * 60);
t.setPower(it->power);
t.setSpeed(it->speed);
}
}
}
void SMLParser::deviceLog(TrackData &track)
{
while (_reader.readNextStartElement()) {
if (_reader.name() == QLatin1String("Samples")) {
track.append(SegmentData());
samples(track.last());
} else
_reader.skipCurrentElement();
}
}
void SMLParser::sml(QList<TrackData> &tracks)
{
while (_reader.readNextStartElement()) {
if (_reader.name() == QLatin1String("DeviceLog")) {
tracks.append(TrackData());
deviceLog(tracks.last());
} else
_reader.skipCurrentElement();
}
}
bool SMLParser::parse(QFile *file, QList<TrackData> &tracks,
QList<RouteData> &routes, QList<Area> &polygons,
QVector<Waypoint> &waypoints)
{
Q_UNUSED(routes);
Q_UNUSED(polygons);
Q_UNUSED(waypoints);
_reader.clear();
_reader.setDevice(file);
if (_reader.readNextStartElement()) {
if (_reader.name() == QLatin1String("sml"))
sml(tracks);
else
_reader.raiseError("Not a SML file");
}
return !_reader.error();
}

38
src/data/smlparser.h Normal file
View File

@ -0,0 +1,38 @@
#ifndef SMLPARSER_H
#define SMLPARSER_H
#include <QXmlStreamReader>
#include <QMap>
#include <QDebug>
#include "parser.h"
class SMLParser : public Parser
{
public:
bool parse(QFile *file, QList<TrackData> &tracks, QList<RouteData> &routes,
QList<Area> &polygons, QVector<Waypoint> &waypoints);
QString errorString() const {return _reader.errorString();}
int errorLine() const {return _reader.lineNumber();}
private:
struct Sensors
{
Sensors()
: cadence(NAN), temperature(NAN), hr(NAN), power(NAN), speed(NAN) {}
qreal cadence, temperature, hr, power, speed;
};
void sml(QList<TrackData> &tracks);
void deviceLog(TrackData &track);
void samples(SegmentData &segment);
void sample(SegmentData &segment, QMap<QDateTime, Sensors> &map);
#ifndef QT_NO_DEBUG
friend QDebug operator<<(QDebug dbg, const Sensors &sensors);
#endif // QT_NO_DEBUG
QXmlStreamReader _reader;
};
#endif // SMLPARSER_H

79
src/map/IMG/bitstream.cpp Normal file
View File

@ -0,0 +1,79 @@
#include "bitstream.h"
bool BitStream1::read(int bits, quint32 &val)
{
val = 0;
for (int pos = 0; pos < bits; ) {
if (!_remaining) {
if (!_length || !_file.readUInt8(_hdl, _data))
return false;
_remaining = 8;
_length--;
}
quint32 get = bits - pos;
if (get >= _remaining) {
val |= _data << pos;
pos += _remaining;
_remaining = 0;
} else {
quint32 mask = (1<<get) - 1;
val |= (_data & mask)<<pos;
_data >>= get;
_remaining -= get;
break;
}
}
return true;
}
bool BitStream1::flush()
{
if (_length && !_file.seek(_hdl, _hdl.pos() + _length))
return false;
_length = 0;
_remaining = 0;
return true;
}
bool BitStream4::read(int bits, quint32 &val)
{
if (bits <= 32 - (int)(_used + _unused)) {
val = bits ? (_data << _used) >> (32 - bits) : 0;
_used += bits;
return true;
}
quint32 old = (_used < 32) ? (_data << _used) >> (32 - bits) : 0;
quint32 bytes = qMin(_length, 4U);
if (!_file.readVUInt32SW(_hdl, bytes, _data))
return false;
_used -= 32 - bits;
_length -= bytes;
_unused = (4 - bytes) * 8;
_data <<= _unused;
val = _data >> (32 - _used) | old;
return true;
}
bool BitStream4::flush()
{
if (_length && !_file.seek(_hdl, _hdl.pos() + _length))
return false;
_length = 0;
_used = 32;
_unused = 0;
return true;
}

39
src/map/IMG/bitstream.h Normal file
View File

@ -0,0 +1,39 @@
#ifndef BITSTREAM_H
#define BITSTREAM_H
#include "subfile.h"
class BitStream1 {
public:
BitStream1(const SubFile &file, SubFile::Handle &hdl, quint32 length)
: _file(file), _hdl(hdl), _length(length), _remaining(0) {}
bool read(int bits, quint32 &val);
bool flush();
quint32 bitsAvailable() const {return _length * 8 + _remaining;}
private:
const SubFile &_file;
SubFile::Handle &_hdl;
quint32 _length, _remaining;
quint8 _data;
};
class BitStream4 {
public:
BitStream4(const SubFile &file, SubFile::Handle &hdl, quint32 length)
: _file(file), _hdl(hdl), _length(length), _used(32), _unused(0),
_data(0) {}
bool read(int bits, quint32 &val);
bool flush();
quint32 bitsAvailable() const {return _length * 8 + (32 - _used) - _unused;}
private:
const SubFile &_file;
SubFile::Handle &_hdl;
quint32 _length, _used, _unused;
quint32 _data;
};
#endif // BITSTREAM_H

View File

@ -0,0 +1,86 @@
#include "deltastream.h"
static int bitSize(quint8 baseSize, bool variableSign, bool extraBit)
{
int bits = 2;
if (baseSize <= 9)
bits += baseSize;
else
bits += 2 * baseSize - 9;
if (variableSign)
bits++;
if (extraBit)
bits++;
return bits;
}
DeltaStream::DeltaStream(const SubFile &file, SubFile::Handle &hdl,
quint32 length, quint8 info, bool extraBit, bool extended)
: BitStream1(file, hdl, length), _readBits(0xFFFFFFFF)
{
_extraBit = extraBit ? 1 : 0;
if (!(sign(_lonSign) && sign(_latSign)))
return;
if (extended) {
quint32 b;
if (!read(1, b))
return;
}
_lonBits = bitSize(info & 0x0F, !_lonSign, extraBit);
_latBits = bitSize(info >> 4, !_latSign, false);
_readBits = _lonBits + _latBits;
}
bool DeltaStream::readDelta(int bits, int sign, int extraBit,
qint32 &delta)
{
quint32 value;
if (!read(bits, value))
return false;
value >>= extraBit;
if (!sign) {
qint32 signMask = 1 << (bits - extraBit - 1);
if (value & signMask) {
qint32 comp = value ^ signMask;
if (comp)
delta = comp - signMask;
else {
qint32 other;
if (!readDelta(bits - extraBit, sign, false, other))
return false;
if (other < 0)
delta = 1 - signMask + other;
else
delta = signMask - 1 + other;
}
} else {
delta = value;
}
} else {
delta = value * sign;
}
return true;
}
bool DeltaStream::sign(int &val)
{
quint32 bit;
val = 0;
if (!read(1, bit))
return false;
if (bit) {
if (!read(1, bit))
return false;
val = bit ? -1 : 1;
}
return true;
}

28
src/map/IMG/deltastream.h Normal file
View File

@ -0,0 +1,28 @@
#ifndef DELTASTREAM_H
#define DELTASTREAM_H
#include "bitstream.h"
class DeltaStream : public BitStream1 {
public:
DeltaStream(const SubFile &file, SubFile::Handle &hdl, quint32 length,
quint8 info, bool extraBit, bool extended);
bool readNext(qint32 &lonDelta, qint32 &latDelta)
{
return hasNext()
? (readDelta(_lonBits, _lonSign, _extraBit, lonDelta)
&& readDelta(_latBits, _latSign, false, latDelta)) : false;
}
bool atEnd() const {return (_readBits != 0xFFFFFFFF && !hasNext());}
private:
bool hasNext() const {return bitsAvailable() >= _readBits;}
bool sign(int &val);
bool readDelta(int bits, int sign, int extraBit, qint32 &delta);
int _lonSign, _latSign, _extraBit;
quint32 _lonBits, _latBits, _readBits;
};
#endif // DELTASTREAM_H

151
src/map/IMG/gmap.cpp Normal file
View File

@ -0,0 +1,151 @@
#include <QXmlStreamReader>
#include <QDir>
#include "vectortile.h"
#include "gmap.h"
static SubFile::Type tileType(const QString &suffix)
{
if (!suffix.compare("TRE"))
return SubFile::TRE;
else if (!suffix.compare("RGN"))
return SubFile::RGN;
else if (!suffix.compare("LBL"))
return SubFile::LBL;
else if (!suffix.compare("TYP"))
return SubFile::TYP;
else if (!suffix.compare("GMP"))
return SubFile::GMP;
else if (!suffix.compare("NET"))
return SubFile::NET;
else
return SubFile::Unknown;
}
void GMAP::subProduct(QXmlStreamReader &reader, QString &dataDir,
QString &baseMap)
{
while (reader.readNextStartElement()) {
if (reader.name() == "Directory")
dataDir = reader.readElementText();
else if (reader.name() == "BaseMap")
baseMap = reader.readElementText();
else
reader.skipCurrentElement();
}
}
void GMAP::mapProduct(QXmlStreamReader &reader, QString &dataDir,
QString &typFile, QString &baseMap)
{
while (reader.readNextStartElement()) {
if (reader.name() == "Name")
_name = reader.readElementText();
else if (reader.name() == "TYP")
typFile = reader.readElementText();
else if (reader.name() == "SubProduct")
subProduct(reader, dataDir, baseMap);
else
reader.skipCurrentElement();
}
}
bool GMAP::readXML(const QString &path, QString &dataDir, QString &typFile,
QString &baseMap)
{
QFile file(path);
if (!file.open(QFile::ReadOnly | QFile::Text))
return false;
QXmlStreamReader reader(&file);
if (reader.readNextStartElement()) {
if (reader.name() == "MapProduct")
mapProduct(reader, dataDir, typFile, baseMap);
else
reader.raiseError("Not a GMAP XML file");
}
if (reader.error()) {
_errorString = QString("%1: %2").arg(reader.lineNumber())
.arg(reader.errorString());
return false;
}
return true;
}
bool GMAP::loadTile(const QDir &dir, bool baseMap)
{
VectorTile *tile = new VectorTile();
QFileInfoList ml = dir.entryInfoList(QDir::Files);
for (int i = 0; i < ml.size(); i++) {
const QFileInfo &fi = ml.at(i);
tile->addFile(fi.absoluteFilePath(), tileType(fi.suffix()));
}
if (!tile->init(baseMap)) {
qWarning("%s: Invalid map tile", qPrintable(dir.path()));
delete tile;
return false;
}
double min[2], max[2];
min[0] = tile->bounds().left();
min[1] = tile->bounds().bottom();
max[0] = tile->bounds().right();
max[1] = tile->bounds().top();
_tileTree.Insert(min, max, tile);
_bounds |= tile->bounds();
return true;
}
GMAP::GMAP(const QString &fileName) : _fileName(fileName)
{
QString dataDirPath, typFilePath, baseMapPath;
if (!readXML(fileName, dataDirPath, typFilePath, baseMapPath))
return;
QDir baseDir(QFileInfo(fileName).absoluteDir());
if (!baseDir.exists(dataDirPath)) {
_errorString = "Missing/invalid map data directory";
return;
}
QDir dataDir(baseDir.filePath(dataDirPath));
QFileInfoList ml = dataDir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot);
QFileInfo baseMap(dataDir.filePath(baseMapPath));
_baseMap = !baseMapPath.isEmpty() && baseMap.exists();
for (int i = 0; i < ml.size(); i++) {
const QFileInfo &fi = ml.at(i);
if (fi.isDir())
loadTile(QDir(fi.absoluteFilePath()),
fi.absoluteFilePath() == baseMap.absoluteFilePath());
}
if (baseDir.exists(typFilePath))
_typ = new SubFile(baseDir.filePath(typFilePath));
if (!_tileTree.Count())
_errorString = "No usable map tile found";
else
_valid = true;
}
bool GMAP::isGMAP(const QString &path)
{
QFile file(path);
if (!file.open(QFile::ReadOnly | QFile::Text))
return false;
QXmlStreamReader reader(&file);
if (reader.readNextStartElement() && reader.name() == "MapProduct")
return true;
return false;
}

30
src/map/IMG/gmap.h Normal file
View File

@ -0,0 +1,30 @@
#ifndef GMAP_H
#define GMAP_H
#include "mapdata.h"
class QXmlStreamReader;
class QDir;
class GMAP : public MapData
{
public:
GMAP(const QString &fileName);
QString fileName() const {return _fileName;}
static bool isGMAP(const QString &path);
private:
bool readXML(const QString &path, QString &dataDir, QString &typFile,
QString &baseMap);
void mapProduct(QXmlStreamReader &reader, QString &dataDir,
QString &typFile, QString &baseMap);
void subProduct(QXmlStreamReader &reader, QString &dataDir,
QString &baseMap);
bool loadTile(const QDir &dir, bool baseMap);
QString _fileName;
};
#endif // GMAP_H

View File

@ -0,0 +1,74 @@
#include "huffmanstream.h"
HuffmanStream::HuffmanStream(const SubFile &file, SubFile::Handle &hdl,
quint32 length, const HuffmanTable &table, bool line)
: BitStream4(file, hdl, length), _table(table), _symbolDataSize(0),
_symbolData(0)
{
if (line) {
if (!(sign(_lonSign) && sign(_latSign)))
return;
} else {
_lonSign = 0;
_latSign = 0;
}
quint32 eb;
if (!read(1, eb))
return;
if (eb) {
qWarning("Extended polygon/lines not supported");
flush();
}
}
bool HuffmanStream::sign(int &val)
{
quint32 bit;
val = 0;
if (!read(1, bit))
return false;
if (bit) {
if (!read(1, bit))
return false;
val = bit ? -1 : 1;
}
return true;
}
bool HuffmanStream::readDelta(int sign, qint32 &symbol)
{
quint8 size;
quint32 next;
quint8 nextSize = qMin((quint32)(32 - _symbolDataSize), bitsAvailable());
if (!read(nextSize, next))
return false;
_symbolData = (_symbolData << nextSize) | next;
_symbolDataSize += nextSize;
symbol = _table.symbol(_symbolData << (32 - _symbolDataSize), size);
if (size <= _symbolDataSize)
_symbolDataSize -= size;
else
return false;
if (symbol && !sign) {
if (!_symbolDataSize)
return false;
else {
sign = ((1U << (_symbolDataSize - 1)) & _symbolData) ? -1 : 1;
_symbolDataSize--;
}
}
symbol = sign * symbol;
return true;
}

View File

@ -0,0 +1,35 @@
#ifndef HUFFMANSTREAM_H
#define HUFFMANSTREAM_H
#include "bitstream.h"
#include "huffmantable.h"
class HuffmanStream : public BitStream4 {
public:
HuffmanStream(const SubFile &file, SubFile::Handle &hdl, quint32 length,
const HuffmanTable &table, bool line);
bool readNext(qint32 &lonDelta, qint32 &latDelta)
{
if (!(readDelta(_lonSign, lonDelta) && readDelta(_latSign, latDelta)))
return false;
return (lonDelta || latDelta);
}
bool readOffset(qint32 &lonDelta, qint32 &latDelta)
{return (readDelta(1, lonDelta) && readDelta(1, latDelta));}
bool atEnd() const
{return _symbolDataSize + bitsAvailable() < _table.maxSymbolSize();}
private:
bool sign(int &val);
bool readDelta(int sign, qint32 &delta);
const HuffmanTable &_table;
quint32 _symbolDataSize;
quint32 _symbolData;
int _lonSign, _latSign;
};
#endif // HUFFMANSTREAM_H

View File

@ -0,0 +1,139 @@
#include "huffmantable.h"
static quint8 vs(const quint8 b0)
{
static const quint8 sizes[] = {4, 1, 2, 1, 3, 1, 2, 1};
return sizes[b0 & 0x07];
}
static inline quint8 bs(const quint8 val)
{
return (val + 7) >> 3;
}
static inline quint32 readVUint32(const quint8 *buffer, quint32 bytes)
{
quint32 val = 0;
for (quint32 i = bytes; i; i--)
val |= ((quint32)*(buffer + i)) << ((i-1) * 8);
return val;
}
bool HuffmanTable::load(const SubFile &file, SubFile::Handle &hdl,
quint32 offset, quint32 size, quint32 id)
{
if (!getBuffer(file, hdl, offset, size, id))
return false;
_s0 = (quint8)_buffer.at(0) & 0x0F;
_s1e = (quint8)_buffer.at(0) & 0x10 ? 1 : 8;
_s2 = (quint8)_buffer.at(1);
_s3 = bs(_s2);
_s1d = (quint8)_buffer.at(2);
_s1f = (quint8)_buffer.at(3);
_s20 = bs(_s1f);
_s1 = _s20 + 1;
_s22 = vs(_buffer.at(4));
_s1c = _s3 + 1 + _s22;
_s14 = (quint8*)(_buffer.data()) + 4 + _s22;
_s10 = _s14 + _s1c * _s1d;
_s18 = _s10 + (_s1 << _s0);
return true;
}
bool HuffmanTable::getBuffer(const SubFile &file, SubFile::Handle &hdl,
quint32 offset, quint32 size, quint8 id)
{
quint32 recordSize, recordOffset = offset;
for (int i = 0; i <= id; i++) {
if (!file.seek(hdl, recordOffset))
return false;
if (!file.readVUInt32(hdl, recordSize))
return false;
recordOffset = hdl.pos() + recordSize;
if (recordOffset > offset + size)
return false;
};
_buffer.resize(recordSize);
for (int i = 0; i < _buffer.size(); i++)
if (!file.readUInt8(hdl, *((quint8*)(_buffer.data() + i))))
return false;
return true;
}
quint32 HuffmanTable::symbol(quint32 data, quint8 &size) const
{
quint32 ss, sym;
quint8 *tp;
if (_s0 == 0) {
sym = _s1d - 1;
ss = 0;
} else {
quint32 offset = _s1 * (data >> (0x20U - _s0));
tp = _s10 + offset;
if ((*tp & 1) != 0) {
sym = readVUint32(tp, _s20);
size = *tp >> 1;
return sym;
}
ss = *tp >> 1;
sym = tp[1];
}
tp = ss * _s1c + _s14;
data = data >> (0x20U - _s2);
quint8 *prev = tp;
while (ss < sym) {
quint32 cnt = (ss + 1 + sym) >> 1;
tp = _s14 + (cnt * _s1c);
quint32 nd = readVUint32(tp - 1, _s3);
if (data <= nd) {
if (data == nd)
ss = cnt;
else
tp = prev;
sym = cnt - (data < nd);
cnt = ss;
}
ss = cnt;
prev = tp;
}
sym = readVUint32(tp - 1, _s3);
tp = tp + _s3;
ss = readVUint32(tp, _s22);
size = *tp;
sym = (data - sym) >> (_s2 - *tp);
if (_s1e == 8)
sym = readVUint32(tp, _s20);
else {
sym = (sym + ss) * _s1f;
ss = sym >> 3;
sym = sym & 7;
quint32 shift = 8 - sym;
sym = *(_s18 + ss) >> sym;
if (shift < _s1f) {
tp = _s18 + ss;
ss = readVUint32(tp, ((_s1f + 7) - shift) >> 3);
sym = (ss << shift) | sym;
}
}
return sym;
}

View File

@ -0,0 +1,27 @@
#ifndef HUFFMANTABLE_H
#define HUFFMANTABLE_H
#include "subfile.h"
class HuffmanTable {
public:
HuffmanTable() : _s2(0) {}
bool load(const SubFile &file, SubFile::Handle &hdl, quint32 offset,
quint32 size, quint32 id);
bool isNull() const {return _s2 == 0;}
quint8 maxSymbolSize() const {return _s2;}
quint32 symbol(quint32 data, quint8 &size) const;
private:
bool getBuffer(const SubFile &file, SubFile::Handle &hdl, quint32 offset,
quint32 size, quint8 id);
QByteArray _buffer;
quint8 _s0, _s1, _s2, _s3;
quint8 *_s10, *_s14, *_s18;
quint8 _s1c, _s1d, _s1e, _s1f, _s20;
quint16 _s22;
};
#endif // HUFFMANTABLE_H

View File

@ -1,35 +1,41 @@
#include <QSet> #include <QMap>
#include <QtEndian> #include <QtEndian>
#include "common/programpaths.h"
#include "vectortile.h" #include "vectortile.h"
#include "img.h" #include "img.h"
#define CACHE_SIZE 8388608 /* 8MB */ typedef QMap<QByteArray, VectorTile*> TileMap;
static SubFile::Type tileType(const char str[3])
{
if (!memcmp(str, "TRE", 3))
return SubFile::TRE;
else if (!memcmp(str, "RGN", 3))
return SubFile::RGN;
else if (!memcmp(str, "LBL", 3))
return SubFile::LBL;
else if (!memcmp(str, "TYP", 3))
return SubFile::TYP;
else if (!memcmp(str, "GMP", 3))
return SubFile::GMP;
else if (!memcmp(str, "NET", 3))
return SubFile::NET;
else
return SubFile::Unknown;
}
IMG::IMG(const QString &fileName) : _file(fileName)
{
#define CHECK(condition) \ #define CHECK(condition) \
if (!(condition)) { \ if (!(condition)) { \
_errorString = "Unsupported or invalid IMG file"; \ _errorString = "Unsupported or invalid IMG file"; \
qDeleteAll(tileMap); \
return; \ return; \
} }
struct CTX TileMap tileMap;
{ QByteArray typFile;
CTX(const RectC &rect, int bits, QList<IMG::Poly> *polygons,
QList<IMG::Poly> *lines, QList<IMG::Point> *points)
: rect(rect), bits(bits), polygons(polygons), lines(lines),
points(points) {}
const RectC &rect;
int bits;
QList<IMG::Poly> *polygons;
QList<IMG::Poly> *lines;
QList<IMG::Point> *points;
};
IMG::IMG(const QString &fileName)
: _file(fileName), _typ(0), _style(0), _valid(false)
{
if (!_file.open(QFile::ReadOnly)) { if (!_file.open(QFile::ReadOnly)) {
_errorString = _file.errorString(); _errorString = _file.errorString();
return; return;
@ -54,7 +60,6 @@ IMG::IMG(const QString &fileName)
QByteArray nba(QByteArray(d1, sizeof(d1)) + QByteArray(d2, sizeof(d2))); QByteArray nba(QByteArray(d1, sizeof(d1)) + QByteArray(d2, sizeof(d2)));
_name = QString::fromLatin1(nba.constData(), nba.size()-1).trimmed(); _name = QString::fromLatin1(nba.constData(), nba.size()-1).trimmed();
_blockSize = 1 << (e1 + e2); _blockSize = 1 << (e1 + e2);
_blockCache.setMaxCost(CACHE_SIZE / _blockSize);
// Read the FAT table // Read the FAT table
quint8 flag; quint8 flag;
@ -75,22 +80,18 @@ IMG::IMG(const QString &fileName)
offset += 512; offset += 512;
int cnt = (size - offset) / 512; int cnt = (size - offset) / 512;
QMap<QString, VectorTile*> tileMap;
QString typFile;
// Read FAT blocks describing the IMG sub-files // Read FAT blocks describing the IMG sub-files
for (int i = 0; i < cnt; i++) { for (int i = 0; i < cnt; i++) {
quint16 block; quint16 block;
CHECK(_file.seek(offset) && readValue(flag) && read(name, sizeof(name)) CHECK(_file.seek(offset) && readValue(flag) && read(name, sizeof(name))
&& read(type, sizeof(type)) && readValue(size) && readValue(part)); && read(type, sizeof(type)) && readValue(size) && readValue(part));
SubFile::Type tt = SubFile::type(type); SubFile::Type tt = tileType(type);
QString fn(QByteArray(name, sizeof(name))); QByteArray fn(name, sizeof(name));
if (SubFile::isTileFile(tt)) { if (VectorTile::isTileFile(tt)) {
VectorTile *tile; VectorTile *tile;
QMap<QString, VectorTile*>::iterator it = tileMap.find(fn); TileMap::const_iterator it = tileMap.find(fn);
if (it == tileMap.end()) { if (it == tileMap.constEnd()) {
tile = new VectorTile(); tile = new VectorTile();
tileMap.insert(fn, tile); tileMap.insert(fn, tile);
} else } else
@ -131,80 +132,31 @@ IMG::IMG(const QString &fileName)
} }
// Create tile tree // Create tile tree
for (QMap<QString, VectorTile*>::iterator it = tileMap.begin(); for (TileMap::const_iterator it = tileMap.constBegin();
it != tileMap.end(); ++it) { it != tileMap.constEnd(); ++it) {
CHECK((*it)->init()); VectorTile *tile = it.value();
if (!tile->init(false)) {
qWarning("%s: %s: Invalid map tile", qPrintable(_file.fileName()),
qPrintable(it.key()));
delete tile;
continue;
}
double min[2], max[2]; double min[2], max[2];
min[0] = (*it)->bounds().left(); min[0] = tile->bounds().left();
min[1] = (*it)->bounds().bottom(); min[1] = tile->bounds().bottom();
max[0] = (*it)->bounds().right(); max[0] = tile->bounds().right();
max[1] = (*it)->bounds().top(); max[1] = tile->bounds().top();
_tileTree.Insert(min, max, *it); _tileTree.Insert(min, max, tile);
_bounds |= (*it)->bounds(); _bounds |= tile->bounds();
} }
_valid = true; if (!_tileTree.Count())
} _errorString = "No usable map tile found";
else
IMG::~IMG() _valid = true;
{
TileTree::Iterator it;
for (_tileTree.GetFirst(it); !_tileTree.IsNull(it); _tileTree.GetNext(it))
delete _tileTree.GetAt(it);
delete _typ;
delete _style;
}
void IMG::load()
{
Q_ASSERT(!_style);
if (_typ)
_style = new Style(_typ);
else {
QFile typFile(ProgramPaths::typFile());
if (typFile.exists()) {
SubFile typ(&typFile);
_style = new Style(&typ);
} else
_style = new Style();
}
}
void IMG::clear()
{
TileTree::Iterator it;
for (_tileTree.GetFirst(it); !_tileTree.IsNull(it); _tileTree.GetNext(it))
_tileTree.GetAt(it)->clear();
delete _style;
_style = 0;
_blockCache.clear();
}
static bool cb(VectorTile *tile, void *context)
{
CTX *ctx = (CTX*)context;
tile->objects(ctx->rect, ctx->bits, ctx->polygons, ctx->lines, ctx->points);
return true;
}
void IMG::objects(const RectC &rect, int bits, QList<Poly> *polygons,
QList<Poly> *lines, QList<Point> *points)
{
CTX ctx(rect, bits, polygons, lines, points);
double min[2], max[2];
min[0] = rect.left();
min[1] = rect.bottom();
max[0] = rect.right();
max[1] = rect.top();
_tileTree.Search(min, max, cb, &ctx);
} }
qint64 IMG::read(char *data, qint64 maxSize) qint64 IMG::read(char *data, qint64 maxSize)
@ -228,33 +180,12 @@ template<class T> bool IMG::readValue(T &val)
return true; return true;
} }
bool IMG::readBlock(int blockNum, QByteArray &data) bool IMG::readBlock(int blockNum, char *data)
{ {
QByteArray *block = _blockCache[blockNum]; if (!_file.seek((qint64)blockNum * (qint64)_blockSize))
if (!block) { return false;
if (!_file.seek((qint64)blockNum * (qint64)_blockSize)) if (read(data, _blockSize) < _blockSize)
return false; return false;
data.resize(_blockSize);
if (read(data.data(), _blockSize) < _blockSize)
return false;
_blockCache.insert(blockNum, new QByteArray(data));
} else
data = *block;
return true; return true;
} }
#ifndef QT_NO_DEBUG
QDebug operator<<(QDebug dbg, const IMG::Point &point)
{
dbg.nospace() << "Point(" << hex << point.type << ", " << point.label
<< ", " << point.poi << ")";
return dbg.space();
}
QDebug operator<<(QDebug dbg, const IMG::Poly &poly)
{
dbg.nospace() << "Poly(" << hex << poly.type << ", " << poly.label << ")";
return dbg.space();
}
#endif // QT_NO_DEBUG

View File

@ -1,96 +1,27 @@
#ifndef IMG_H #ifndef IMG_H
#define IMG_H #define IMG_H
#include <QRect>
#include <QFile> #include <QFile>
#include <QByteArray> #include "mapdata.h"
#include <QCache>
#include <QDebug>
#include "common/rtree.h"
#include "common/rectc.h"
#include "common/range.h"
#include "style.h"
#include "label.h"
class VectorTile; class IMG : public MapData
class SubFile;
class IMG
{ {
public: public:
struct Poly {
/* QPointF insted of Coordinates for performance reasons (no need to
duplicate all the vectors for drawing). Note, that we do not want to
ll2xy() the points in the IMG class as this can not be done in
parallel. */
QVector<QPointF> points;
Label label;
quint32 type;
bool operator<(const Poly &other) const
{return type > other.type;}
};
struct Point {
Point() : id(0) {}
Coordinates coordinates;
Label label;
quint32 type;
bool poi;
quint64 id;
bool operator<(const Point &other) const
{return id < other.id;}
};
IMG(const QString &fileName); IMG(const QString &fileName);
~IMG();
void load();
void clear();
QString fileName() const {return _file.fileName();} QString fileName() const {return _file.fileName();}
const QString &name() const {return _name;}
const RectC &bounds() const {return _bounds;}
void objects(const RectC &rect, int bits, QList<Poly> *polygons,
QList<Poly> *lines, QList<Point> *points);
const Style *style() const {return _style;}
bool isValid() const {return _valid;}
const QString &errorString() const {return _errorString;}
private: private:
friend class SubFile; friend class SubFile;
typedef RTree<VectorTile*, double, 2> TileTree;
int blockSize() const {return _blockSize;} int blockSize() const {return _blockSize;}
bool readBlock(int blockNum, QByteArray &data); bool readBlock(int blockNum, char *data);
qint64 read(char *data, qint64 maxSize); qint64 read(char *data, qint64 maxSize);
template<class T> bool readValue(T &val); template<class T> bool readValue(T &val);
bool init();
QFile _file; QFile _file;
quint8 _key; quint8 _key;
int _blockSize; int _blockSize;
QCache<int, QByteArray> _blockCache;
QString _name;
RectC _bounds;
TileTree _tileTree;
SubFile *_typ;
Style *_style;
bool _valid;
QString _errorString;
}; };
#ifndef QT_NO_DEBUG
QDebug operator<<(QDebug dbg, const IMG::Point &point);
QDebug operator<<(QDebug dbg, const IMG::Poly &poly);
#endif // QT_NO_DEBUG
#endif // IMG_H #endif // IMG_H

View File

@ -56,10 +56,10 @@ bool LBLFile::init(Handle &hdl)
quint8 multiplier, poiMultiplier; quint8 multiplier, poiMultiplier;
if (!(seek(hdl, _gmpOffset + 0x15) && readUInt32(hdl, _offset) if (!(seek(hdl, _gmpOffset + 0x15) && readUInt32(hdl, _offset)
&& readUInt32(hdl, _size) && readByte(hdl, multiplier) && readUInt32(hdl, _size) && readUInt8(hdl, multiplier)
&& readByte(hdl, _encoding) && seek(hdl, _gmpOffset + 0x57) && readUInt8(hdl, _encoding) && seek(hdl, _gmpOffset + 0x57)
&& readUInt32(hdl, _poiOffset) && readUInt32(hdl, _poiSize) && readUInt32(hdl, _poiOffset) && readUInt32(hdl, _poiSize)
&& readByte(hdl, poiMultiplier) && seek(hdl, _gmpOffset + 0xAA) && readUInt8(hdl, poiMultiplier) && seek(hdl, _gmpOffset + 0xAA)
&& readUInt16(hdl, codepage))) && readUInt16(hdl, codepage)))
return false; return false;
@ -89,7 +89,7 @@ Label LBLFile::label6b(Handle &hdl, quint32 offset) const
return Label(); return Label();
while (true) { while (true) {
if (!(readByte(hdl, b1) && readByte(hdl, b2) && readByte(hdl, b3))) if (!(readUInt8(hdl, b1) && readUInt8(hdl, b2) && readUInt8(hdl, b3)))
return Label(); return Label();
int c[]= {b1>>2, (b1&0x3)<<4|b2>>4, (b2&0xF)<<2|b3>>6, b3&0x3F}; int c[]= {b1>>2, (b1&0x3)<<4|b2>>4, (b2&0xF)<<2|b3>>6, b3&0x3F};
@ -138,7 +138,7 @@ Label LBLFile::label8b(Handle &hdl, quint32 offset) const
return Label(); return Label();
while (true) { while (true) {
if (!readByte(hdl, c)) if (!readUInt8(hdl, c))
return Label(); return Label();
if (!c || c == 0x1d) if (!c || c == 0x1d)
break; break;

View File

@ -12,6 +12,9 @@ public:
LBLFile(IMG *img) LBLFile(IMG *img)
: SubFile(img), _codec(0), _offset(0), _size(0), _poiOffset(0), : SubFile(img), _codec(0), _offset(0), _size(0), _poiOffset(0),
_poiSize(0), _poiMultiplier(0), _multiplier(0), _encoding(0) {} _poiSize(0), _poiMultiplier(0), _multiplier(0), _encoding(0) {}
LBLFile(const QString &path)
: SubFile(path), _codec(0), _offset(0), _size(0), _poiOffset(0),
_poiSize(0), _poiMultiplier(0), _multiplier(0), _encoding(0) {}
LBLFile(SubFile *gmp, quint32 offset) : SubFile(gmp, offset), LBLFile(SubFile *gmp, quint32 offset) : SubFile(gmp, offset),
_codec(0), _offset(0), _size(0), _poiOffset(0), _poiSize(0), _codec(0), _offset(0), _size(0), _poiOffset(0), _poiSize(0),
_poiMultiplier(0), _multiplier(0), _encoding(0) {} _poiMultiplier(0), _multiplier(0), _encoding(0) {}

123
src/map/IMG/mapdata.cpp Normal file
View File

@ -0,0 +1,123 @@
#include "common/programpaths.h"
#include "vectortile.h"
#include "style.h"
#include "mapdata.h"
#define CACHED_SUBDIVS_COUNT 2048 // ~32MB for both caches together
struct PolyCTX
{
PolyCTX(const RectC &rect, int bits, bool baseMap,
QList<MapData::Poly> *polygons, QList<MapData::Poly> *lines,
QCache<const SubDiv*, MapData::Polys> *polyCache)
: rect(rect), bits(bits), baseMap(baseMap), polygons(polygons),
lines(lines), polyCache(polyCache) {}
const RectC &rect;
int bits;
bool baseMap;
QList<MapData::Poly> *polygons;
QList<MapData::Poly> *lines;
QCache<const SubDiv*, MapData::Polys> *polyCache;
};
struct PointCTX
{
PointCTX(const RectC &rect, int bits, bool baseMap,
QList<MapData::Point> *points,
QCache<const SubDiv*, QList<MapData::Point> > *pointCache)
: rect(rect), bits(bits), baseMap(baseMap), points(points),
pointCache(pointCache) {}
const RectC &rect;
int bits;
bool baseMap;
QList<MapData::Point> *points;
QCache<const SubDiv*, QList<MapData::Point> > *pointCache;
};
inline bool polyCb(VectorTile *tile, void *context)
{
PolyCTX *ctx = (PolyCTX*)context;
tile->polys(ctx->rect, ctx->bits, ctx->baseMap, ctx->polygons, ctx->lines,
ctx->polyCache);
return true;
}
inline bool pointCb(VectorTile *tile, void *context)
{
PointCTX *ctx = (PointCTX*)context;
tile->points(ctx->rect, ctx->bits, ctx->baseMap, ctx->points,
ctx->pointCache);
return true;
}
MapData::MapData() : _typ(0), _style(0), _baseMap(false), _valid(false)
{
_polyCache.setMaxCost(CACHED_SUBDIVS_COUNT);
_pointCache.setMaxCost(CACHED_SUBDIVS_COUNT);
}
MapData::~MapData()
{
TileTree::Iterator it;
for (_tileTree.GetFirst(it); !_tileTree.IsNull(it); _tileTree.GetNext(it))
delete _tileTree.GetAt(it);
delete _typ;
delete _style;
}
void MapData::polys(const RectC &rect, int bits, QList<Poly> *polygons,
QList<Poly> *lines)
{
PolyCTX ctx(rect, bits, _baseMap, polygons, lines, &_polyCache);
double min[2], max[2];
min[0] = rect.left();
min[1] = rect.bottom();
max[0] = rect.right();
max[1] = rect.top();
_tileTree.Search(min, max, polyCb, &ctx);
}
void MapData::points(const RectC &rect, int bits, QList<Point> *points)
{
PointCTX ctx(rect, bits, _baseMap, points, &_pointCache);
double min[2], max[2];
min[0] = rect.left();
min[1] = rect.bottom();
max[0] = rect.right();
max[1] = rect.top();
_tileTree.Search(min, max, pointCb, &ctx);
}
void MapData::load()
{
Q_ASSERT(!_style);
if (_typ)
_style = new Style(_typ);
else {
SubFile typ(ProgramPaths::typFile());
_style = new Style(&typ);
}
}
void MapData::clear()
{
TileTree::Iterator it;
for (_tileTree.GetFirst(it); !_tileTree.IsNull(it); _tileTree.GetNext(it))
_tileTree.GetAt(it)->clear();
delete _style;
_style = 0;
_polyCache.clear();
_pointCache.clear();
}

107
src/map/IMG/mapdata.h Normal file
View File

@ -0,0 +1,107 @@
#ifndef MAPDATA_H
#define MAPDATA_H
#include <QList>
#include <QPointF>
#include <QCache>
#include <QDebug>
#include "common/rectc.h"
#include "common/rtree.h"
#include "label.h"
class Style;
class SubDiv;
class SubFile;
class VectorTile;
class MapData
{
public:
struct Poly {
/* QPointF insted of Coordinates for performance reasons (no need to
duplicate all the vectors for drawing). Note, that we do not want to
ll2xy() the points in the IMG class as this can not be done in
parallel. */
QVector<QPointF> points;
Label label;
quint32 type;
RectC boundingRect;
bool operator<(const Poly &other) const
{return type > other.type;}
};
struct Point {
Point() : id(0) {}
Coordinates coordinates;
Label label;
quint32 type;
bool poi;
quint64 id;
bool operator<(const Point &other) const
{return id < other.id;}
};
struct Polys {
Polys() {}
Polys(const QList<Poly> &polygons, const QList<Poly> &lines)
: polygons(polygons), lines(lines) {}
QList<Poly> polygons;
QList<Poly> lines;
};
MapData();
virtual ~MapData();
const QString &name() const {return _name;}
const RectC &bounds() const {return _bounds;}
const Style *style() const {return _style;}
void polys(const RectC &rect, int bits, QList<Poly> *polygons,
QList<Poly> *lines);
void points(const RectC &rect, int bits, QList<Point> *points);
void load();
void clear();
virtual QString fileName() const = 0;
bool isValid() const {return _valid;}
QString errorString() const {return _errorString;}
protected:
typedef RTree<VectorTile*, double, 2> TileTree;
QString _name;
RectC _bounds;
SubFile *_typ;
Style *_style;
TileTree _tileTree;
bool _baseMap;
bool _valid;
QString _errorString;
private:
QCache<const SubDiv*, Polys> _polyCache;
QCache<const SubDiv*, QList<Point> > _pointCache;
};
#ifndef QT_NO_DEBUG
inline QDebug operator<<(QDebug dbg, const MapData::Point &point)
{
dbg.nospace() << "Point(" << hex << point.type << ", " << point.label
<< ", " << point.poi << ")";
return dbg.space();
}
inline QDebug operator<<(QDebug dbg, const MapData::Poly &poly)
{
dbg.nospace() << "Poly(" << hex << poly.type << ", " << poly.label << ")";
return dbg.space();
}
#endif // QT_NO_DEBUG
#endif // MAPDATA_H

View File

@ -3,9 +3,11 @@
bool NETFile::init(Handle &hdl) bool NETFile::init(Handle &hdl)
{ {
quint8 multiplier; quint8 multiplier;
quint16 hdrLen;
if (!(seek(hdl, _gmpOffset + 0x15) && readUInt32(hdl, _offset) if (!(seek(hdl, _gmpOffset) && readUInt16(hdl, hdrLen)
&& readUInt32(hdl, _size) && readByte(hdl, multiplier))) && seek(hdl, _gmpOffset + 0x15) && readUInt32(hdl, _offset)
&& readUInt32(hdl, _size) && readUInt8(hdl, multiplier)))
return false; return false;
_multiplier = 1<<multiplier; _multiplier = 1<<multiplier;

View File

@ -6,17 +6,19 @@
class NETFile : public SubFile class NETFile : public SubFile
{ {
public: public:
NETFile(IMG *img) : SubFile(img), _offset(0), _size(0), _multiplier(0) {} NETFile(IMG *img)
NETFile(SubFile *gmp, quint32 offset) : SubFile(gmp, offset), : SubFile(img), _offset(0), _size(0), _multiplier(0) {}
_offset(0), _size(0), _multiplier(0) {} NETFile(const QString &path)
: SubFile(path), _offset(0), _size(0), _multiplier(0) {}
NETFile(SubFile *gmp, quint32 offset)
: SubFile(gmp, offset), _offset(0), _size(0), _multiplier(0) {}
bool lblOffset(Handle &hdl, quint32 netOffset, quint32 &lblOffset); bool lblOffset(Handle &hdl, quint32 netOffset, quint32 &lblOffset);
private: private:
bool init(Handle &hdl); bool init(Handle &hdl);
quint32 _offset; quint32 _offset, _size;
quint32 _size;
quint8 _multiplier; quint8 _multiplier;
}; };

View File

@ -1,123 +1,81 @@
#include <cstring>
#include "common/rectc.h" #include "common/rectc.h"
#include "common/garmin.h" #include "common/garmin.h"
#include "deltastream.h"
#include "huffmanstream.h"
#include "lblfile.h" #include "lblfile.h"
#include "netfile.h" #include "netfile.h"
#include "rgnfile.h" #include "rgnfile.h"
static int bitSize(quint8 baseSize, bool variableSign, bool extraBit) bool RGNFile::skipClassFields(Handle &hdl) const
{ {
int bits = 2; quint8 flags;
if (baseSize <= 9) quint32 rs;
bits += baseSize;
else
bits += 2 * baseSize - 9;
if (variableSign) if (!readUInt8(hdl, flags))
bits++; return false;
if (extraBit)
bits++;
return bits; switch (flags >> 5) {
} case 4:
rs = 1;
bool RGNFile::BitStream::read(int bits, quint32 &val) break;
{ case 5:
val = 0; rs = 2;
break;
for (int pos = 0; pos < bits; ) { case 6:
if (!_remaining) { rs = 3;
if (!_length || !_file.readByte(_hdl, _data)) break;
return false; case 7:
_remaining = 8; if (!readVUInt32(hdl, rs))
_length--; return false;
} break;
default:
quint32 get = bits - pos; rs = 0;
if (get >= _remaining) {
val |= _data << pos;
pos += _remaining;
_remaining = 0;
} else {
quint32 mask = (1<<get) - 1;
val |= (_data & mask)<<pos;
_data >>= get;
_remaining -= get;
break; break;
}
} }
return true; return seek(hdl, hdl.pos() + rs);
} }
RGNFile::DeltaStream::DeltaStream(const SubFile &file, Handle &hdl, bool RGNFile::skipLclFields(Handle &hdl, const quint32 flags[3],
quint32 length, quint8 info, bool extraBit, bool extended) SegmentType type) const
: BitStream(file, hdl, length), _readBits(0xFFFFFFFF)
{ {
_extraBit = extraBit ? 1 : 0; quint32 bitfield = 0xFFFFFFFF;
if (!(sign(_lonSign) && sign(_latSign)))
return;
if (extended) {
quint32 b;
if (!read(1, b))
return;
}
_lonBits = bitSize(info & 0x0F, !_lonSign, extraBit);
_latBits = bitSize(info >> 4, !_latSign, false);
_readBits = _lonBits + _latBits;
}
bool RGNFile::DeltaStream::readDelta(int bits, int sign, int extraBit, if (flags[0] & 0x20000000)
qint32 &delta) if (!readVBitfield32(hdl, bitfield))
{
quint32 value;
if (!read(bits, value))
return false;
value >>= extraBit;
if (!sign) {
qint32 signMask = 1 << (bits - extraBit - 1);
if (value & signMask) {
qint32 comp = value ^ signMask;
if (comp)
delta = comp - signMask;
else {
qint32 other;
if (!readDelta(bits - extraBit, sign, false, other))
return false;
if (other < 0)
delta = 1 - signMask + other;
else
delta = signMask - 1 + other;
}
} else {
delta = value;
}
} else {
delta = value * sign;
}
return true;
}
bool RGNFile::DeltaStream::sign(int &val)
{
quint32 bit;
val = 0;
if (!read(1, bit))
return false;
if (bit) {
if (!read(1, bit))
return false; return false;
val = bit ? -1 : 1;
for (int i = 0; i < 29; i++) {
if ((flags[0] >> i) & 1) {
if (bitfield & 1) {
quint32 m = flags[(i >> 4) + 1] >> ((i * 2) & 0x1e) & 3;
switch (i) {
case 5:
if (m == 1 && type == Point) {
quint16 u16;
if (!readUInt16(hdl, u16))
return false;
}
break;
default:
break;
}
}
bitfield >>= 1;
}
} }
return true; return true;
} }
void RGNFile::clearFlags()
{
memset(_polygonsFlags, 0, sizeof(_polygonsFlags));
memset(_linesFlags, 0, sizeof(_linesFlags));
memset(_pointsFlags, 0, sizeof(_pointsFlags));
}
bool RGNFile::init(Handle &hdl) bool RGNFile::init(Handle &hdl)
{ {
@ -128,25 +86,29 @@ bool RGNFile::init(Handle &hdl)
&& readUInt32(hdl, _size))) && readUInt32(hdl, _size)))
return false; return false;
if (hdrLen >= 0x5D) { if (hdrLen >= 0x68) {
if (!(readUInt32(hdl, _polygonsOffset) && readUInt32(hdl, _polygonsSize) if (!(readUInt32(hdl, _polygonsOffset) && readUInt32(hdl, _polygonsSize)
&& seek(hdl, _gmpOffset + 0x39) && readUInt32(hdl, _linesOffset) && seek(hdl, _gmpOffset + 0x2D) && readUInt32(hdl, _polygonsFlags[0])
&& readUInt32(hdl, _linesSize) && seek(hdl, _gmpOffset + 0x55) && readUInt32(hdl, _polygonsFlags[1]) && readUInt32(hdl, _polygonsFlags[2])
&& readUInt32(hdl, _pointsOffset) && readUInt32(hdl, _pointsSize))) && readUInt32(hdl, _linesOffset) && readUInt32(hdl, _linesSize)
&& seek(hdl, _gmpOffset + 0x49) && readUInt32(hdl, _linesFlags[0])
&& readUInt32(hdl, _linesFlags[1]) && readUInt32(hdl, _linesFlags[2])
&& readUInt32(hdl, _pointsOffset) && readUInt32(hdl, _pointsSize)
&& seek(hdl, _gmpOffset + 0x65) && readUInt32(hdl, _pointsFlags[0])
&& readUInt32(hdl, _pointsFlags[1]) && readUInt32(hdl, _pointsFlags[2])))
return false; return false;
} }
if (hdrLen >= 0x7D) { if (hdrLen >= 0x7D) {
quint32 dictOffset, dictSize; quint32 dictOffset, dictSize, info;
if (!(seek(hdl, _gmpOffset + 0x71) && readUInt32(hdl, dictOffset) if (!(seek(hdl, _gmpOffset + 0x71) && readUInt32(hdl, dictOffset)
&& readUInt32(hdl, dictSize))) && readUInt32(hdl, dictSize) && readUInt32(hdl, info)))
return false; return false;
// NT maps if (dictSize && dictOffset && (info & 0x1E))
if (dictSize || dictOffset) { if (!_huffmanTable.load(*this, hdl, dictOffset, dictSize,
qWarning("NT compression not supported"); ((info >> 1) & 0xF) - 1))
return false; return false;
}
} }
_init = true; _init = true;
@ -154,14 +116,16 @@ bool RGNFile::init(Handle &hdl)
return true; return true;
} }
bool RGNFile::polyObjects(const RectC &rect, Handle &hdl, const SubDiv *subdiv, bool RGNFile::polyObjects(Handle &hdl, const SubDiv *subdiv,
const Segment &segment, LBLFile *lbl, Handle &lblHdl, NETFile *net, SegmentType segmentType, LBLFile *lbl, Handle &lblHdl, NETFile *net,
Handle &netHdl, QList<IMG::Poly> *polys) const Handle &netHdl, QList<IMG::Poly> *polys) const
{ {
if (segment.start() == segment.end()) const SubDiv::Segment &segment = (segmentType == Line)
return true; ? subdiv->lines() : subdiv->polygons();
if (!seek(hdl, segment.start())) if (!segment.isValid())
return true;
if (!seek(hdl, segment.offset()))
return false; return false;
quint32 labelPtr; quint32 labelPtr;
@ -169,31 +133,31 @@ bool RGNFile::polyObjects(const RectC &rect, Handle &hdl, const SubDiv *subdiv,
qint16 lon, lat; qint16 lon, lat;
quint16 len; quint16 len;
while (hdl.pos < (int)segment.end()) { while (hdl.pos() < (int)segment.end()) {
IMG::Poly poly; IMG::Poly poly;
if (!(readByte(hdl, type) && readUInt24(hdl, labelPtr) if (!(readUInt8(hdl, type) && readUInt24(hdl, labelPtr)
&& readInt16(hdl, lon) && readInt16(hdl, lat))) && readInt16(hdl, lon) && readInt16(hdl, lat)))
return false; return false;
if (type & 0x80) { if (type & 0x80) {
if (!readUInt16(hdl, len)) if (!readUInt16(hdl, len))
return false; return false;
} else { } else {
if (!readByte(hdl, len8)) if (!readUInt8(hdl, len8))
return false; return false;
len = len8; len = len8;
} }
if (!readByte(hdl, bitstreamInfo)) if (!readUInt8(hdl, bitstreamInfo))
return false; return false;
poly.type = (segment.type() == Segment::Polygon) poly.type = (segmentType == Polygon)
? ((quint32)(type & 0x7F)) << 8 : ((quint32)(type & 0x3F)) << 8; ? ((quint32)(type & 0x7F)) << 8 : ((quint32)(type & 0x3F)) << 8;
QPoint pos(subdiv->lon() + ((qint32)lon<<(24-subdiv->bits())), QPoint pos(subdiv->lon() + ((qint32)lon<<(24-subdiv->bits())),
subdiv->lat() + ((qint32)lat<<(24-subdiv->bits()))); subdiv->lat() + ((qint32)lat<<(24-subdiv->bits())));
Coordinates c(toWGS24(pos.x()), toWGS24(pos.y())); Coordinates c(toWGS24(pos.x()), toWGS24(pos.y()));
RectC br(c, c); poly.boundingRect = RectC(c, c);
poly.points.append(QPointF(c.lon(), c.lat())); poly.points.append(QPointF(c.lon(), c.lat()));
qint32 lonDelta, latDelta; qint32 lonDelta, latDelta;
@ -205,14 +169,11 @@ bool RGNFile::polyObjects(const RectC &rect, Handle &hdl, const SubDiv *subdiv,
Coordinates c(toWGS24(pos.x()), toWGS24(pos.y())); Coordinates c(toWGS24(pos.x()), toWGS24(pos.y()));
poly.points.append(QPointF(c.lon(), c.lat())); poly.points.append(QPointF(c.lon(), c.lat()));
br = br.united(c); poly.boundingRect = poly.boundingRect.united(c);
} }
if (!(stream.atEnd() && stream.flush())) if (!(stream.atEnd() && stream.flush()))
return false; return false;
if (!rect.intersects(br))
continue;
if (lbl && (labelPtr & 0x3FFFFF)) { if (lbl && (labelPtr & 0x3FFFFF)) {
if (labelPtr & 0x800000) { if (labelPtr & 0x800000) {
quint32 lblOff; quint32 lblOff;
@ -229,60 +190,96 @@ bool RGNFile::polyObjects(const RectC &rect, Handle &hdl, const SubDiv *subdiv,
return true; return true;
} }
bool RGNFile::extPolyObjects(const RectC &rect, Handle &hdl, bool RGNFile::extPolyObjects(Handle &hdl, const SubDiv *subdiv, quint32 shift,
const SubDiv *subdiv, const Segment &segment, LBLFile *lbl, Handle &lblHdl, SegmentType segmentType, LBLFile *lbl, Handle &lblHdl,
QList<IMG::Poly> *polys) const QList<IMG::Poly> *polys) const
{ {
quint32 len, labelPtr = 0; quint32 labelPtr, len;
quint8 type, subtype, bitstreamInfo; quint8 type, subtype;
qint16 lon, lat; qint16 lon, lat;
const SubDiv::Segment &segment = (segmentType == Line)
? subdiv->extLines() : subdiv->extPolygons();
if (!seek(hdl, segment.start())) if (!segment.isValid())
return true;
if (!seek(hdl, segment.offset()))
return false; return false;
while (hdl.pos < (int)segment.end()) { while (hdl.pos() < (int)segment.end()) {
IMG::Poly poly; IMG::Poly poly;
QPoint pos;
if (!(readByte(hdl, type) && readByte(hdl, subtype) if (!(readUInt8(hdl, type) && readUInt8(hdl, subtype)
&& readInt16(hdl, lon) && readInt16(hdl, lat) && readInt16(hdl, lon) && readInt16(hdl, lat)
&& readVUInt32(hdl, len) && readByte(hdl, bitstreamInfo))) && readVUInt32(hdl, len)))
return false; return false;
if (subtype & 0x80) { poly.type = 0x10000 | (quint16(type)<<8) | (subtype & 0x1F);
qWarning("Polygons/lines with extra bytes not supported"); labelPtr = 0;
return false;
}
poly.type = 0x10000 + (quint16(type) << 8) + (subtype & 0x1F); if (!_huffmanTable.isNull()) {
pos = QPoint((subdiv->lon()<<8) + ((qint32)lon<<(32-subdiv->bits())),
(subdiv->lat()<<8) + ((qint32)lat<<(32-subdiv->bits())));
QPoint pos(subdiv->lon() + ((qint32)lon<<(24-subdiv->bits())), qint32 lonDelta, latDelta;
subdiv->lat() + ((qint32)lat<<(24-subdiv->bits()))); HuffmanStream stream(*this, hdl, len, _huffmanTable,
Coordinates c(toWGS24(pos.x()), toWGS24(pos.y())); segmentType == Line);
RectC br(c, c);
poly.points.append(QPointF(c.lon(), c.lat()));
qint32 lonDelta, latDelta; if (shift) {
DeltaStream stream(*this, hdl, len - 1, bitstreamInfo, false, true); if (!stream.readOffset(lonDelta, latDelta))
while (stream.readNext(lonDelta, latDelta)) { return false;
pos.rx() += lonDelta<<(24-subdiv->bits()); pos = QPoint(pos.x() | lonDelta<<(32-subdiv->bits()-shift),
pos.ry() += latDelta<<(24-subdiv->bits()); pos.y() | latDelta<<(32-subdiv->bits()-shift));
}
Coordinates c(toWGS24(pos.x()), toWGS24(pos.y())); Coordinates c(toWGS32(pos.x()), toWGS32(pos.y()));
poly.boundingRect = RectC(c, c);
poly.points.append(QPointF(c.lon(), c.lat())); poly.points.append(QPointF(c.lon(), c.lat()));
br = br.united(c);
}
if (!(stream.atEnd() && stream.flush()))
return false;
if ((subtype & 0x20)) { while (stream.readNext(lonDelta, latDelta)) {
if (!readUInt24(hdl, labelPtr)) pos.rx() += lonDelta<<(32-subdiv->bits()-shift);
pos.ry() += latDelta<<(32-subdiv->bits()-shift);
Coordinates c(toWGS32(pos.x()), toWGS32(pos.y()));
poly.points.append(QPointF(c.lon(), c.lat()));
poly.boundingRect = poly.boundingRect.united(c);
}
if (!(stream.atEnd() && stream.flush()))
return false; return false;
} else } else {
labelPtr = 0; pos = QPoint(subdiv->lon() + ((qint32)lon<<(24-subdiv->bits())),
subdiv->lat() + ((qint32)lat<<(24-subdiv->bits())));
Coordinates c(toWGS24(pos.x()), toWGS24(pos.y()));
poly.boundingRect = RectC(c, c);
poly.points.append(QPointF(c.lon(), c.lat()));
if (!rect.intersects(br)) quint8 bitstreamInfo;
continue; if (!readUInt8(hdl, bitstreamInfo))
return false;
qint32 lonDelta, latDelta;
DeltaStream stream(*this, hdl, len - 1, bitstreamInfo, false, true);
while (stream.readNext(lonDelta, latDelta)) {
pos.rx() += lonDelta<<(24-subdiv->bits());
pos.ry() += latDelta<<(24-subdiv->bits());
Coordinates c(toWGS24(pos.x()), toWGS24(pos.y()));
poly.points.append(QPointF(c.lon(), c.lat()));
poly.boundingRect = poly.boundingRect.united(c);
}
if (!(stream.atEnd() && stream.flush()))
return false;
}
if (subtype & 0x20 && !readUInt24(hdl, labelPtr))
return false;
if (subtype & 0x80 && !skipClassFields(hdl))
return false;
if (subtype & 0x40 && !skipLclFields(hdl, segmentType == Line
? _linesFlags : _polygonsFlags, segmentType))
return false;
if (lbl && (labelPtr & 0x3FFFFF)) if (lbl && (labelPtr & 0x3FFFFF))
poly.label = lbl->label(lblHdl, labelPtr & 0x3FFFFF); poly.label = lbl->label(lblHdl, labelPtr & 0x3FFFFF);
@ -293,45 +290,47 @@ bool RGNFile::extPolyObjects(const RectC &rect, Handle &hdl,
return true; return true;
} }
bool RGNFile::pointObjects(const RectC &rect, Handle &hdl, const SubDiv *subdiv, bool RGNFile::pointObjects(Handle &hdl, const SubDiv *subdiv,
const Segment &segment, LBLFile *lbl, Handle &lblHdl, SegmentType segmentType, LBLFile *lbl, Handle &lblHdl,
QList<IMG::Point> *points) const QList<IMG::Point> *points) const
{ {
quint8 type, subtype; quint8 type, subtype;
qint16 lon, lat; qint16 lon, lat;
quint32 labelPtr; quint32 labelPtr;
const SubDiv::Segment &segment = (segmentType == IndexedPoint)
? subdiv->idxPoints() : subdiv->points();
if (!seek(hdl, segment.start())) if (!segment.isValid())
return true;
if (!seek(hdl, segment.offset()))
return false; return false;
while (hdl.pos < (int)segment.end()) { while (hdl.pos() < (int)segment.end()) {
IMG::Point point; IMG::Point point;
if (!(readByte(hdl, type) && readUInt24(hdl, labelPtr) if (!(readUInt8(hdl, type) && readUInt24(hdl, labelPtr)
&& readInt16(hdl, lon) && readInt16(hdl, lat))) && readInt16(hdl, lon) && readInt16(hdl, lat)))
return false; return false;
if (labelPtr & 0x800000) { if (labelPtr & 0x800000) {
if (!readByte(hdl, subtype)) if (!readUInt8(hdl, subtype))
return false; return false;
} else } else
subtype = 0; subtype = 0;
point.type = (quint16)type<<8 | subtype; point.type = (quint16)type<<8 | subtype;
qint16 lonOffset = lon<<(24-subdiv->bits()); qint32 lonOffset = lon<<(24-subdiv->bits());
qint16 latOffset = lat<<(24-subdiv->bits()); qint32 latOffset = lat<<(24-subdiv->bits());
point.coordinates = Coordinates(toWGS24(subdiv->lon() + lonOffset), point.coordinates = Coordinates(toWGS24(subdiv->lon() + lonOffset),
toWGS24(subdiv->lat() + latOffset)); toWGS24(subdiv->lat() + latOffset));
if (!rect.contains(point.coordinates)) uint hash = qHash(QPair<uint,uint>(qHash(QPair<qint32, qint32>
continue; (subdiv->lon() + lonOffset, subdiv->lat() + latOffset)),
labelPtr & 0x3FFFFF));
point.id = ((quint64)point.type)<<32 | hash;
point.poi = labelPtr & 0x400000; point.poi = labelPtr & 0x400000;
if (lbl && (labelPtr & 0x3FFFFF)) { if (lbl && (labelPtr & 0x3FFFFF))
point.label = lbl->label(lblHdl, labelPtr & 0x3FFFFF, point.poi); point.label = lbl->label(lblHdl, labelPtr & 0x3FFFFF, point.poi);
point.id = ((quint64)point.type)<<40 | ((quint64)lbl->offset())<<24
| (labelPtr & 0x3FFFFF);
}
points->append(point); points->append(point);
} }
@ -339,167 +338,134 @@ bool RGNFile::pointObjects(const RectC &rect, Handle &hdl, const SubDiv *subdiv,
return true; return true;
} }
bool RGNFile::extPointObjects(const RectC &rect, Handle &hdl, bool RGNFile::extPointObjects(Handle &hdl, const SubDiv *subdiv, LBLFile *lbl,
const SubDiv *subdiv, const Segment &segment, LBLFile *lbl, Handle &lblHdl, Handle &lblHdl, QList<IMG::Point> *points) const
QList<IMG::Point> *points) const
{ {
quint8 type, subtype; quint8 type, subtype;
qint16 lon, lat; qint16 lon, lat;
quint32 labelPtr; quint32 labelPtr;
const SubDiv::Segment &segment = subdiv->extPoints();
if (!seek(hdl, segment.start()))
if (!segment.isValid())
return true;
if (!seek(hdl, segment.offset()))
return false; return false;
while (hdl.pos < (int)segment.end()) { while (hdl.pos() < (int)segment.end()) {
IMG::Point point; IMG::Point point;
if (!(readByte(hdl, type) && readByte(hdl, subtype) if (!(readUInt8(hdl, type) && readUInt8(hdl, subtype)
&& readInt16(hdl, lon) && readInt16(hdl, lat))) && readInt16(hdl, lon) && readInt16(hdl, lat)))
return false; return false;
if (subtype & 0x80) {
qWarning("Points with extra bytes not supported");
return false;
}
point.type = 0x10000 | (((quint32)type)<<8) | (subtype & 0x1F); point.type = 0x10000 | (((quint32)type)<<8) | (subtype & 0x1F);
qint16 lonOffset = lon<<(24-subdiv->bits()); qint32 lonOffset = lon<<(24-subdiv->bits());
qint16 latOffset = lat<<(24-subdiv->bits()); qint32 latOffset = lat<<(24-subdiv->bits());
point.coordinates = Coordinates(toWGS24(subdiv->lon() + lonOffset), point.coordinates = Coordinates(toWGS24(subdiv->lon() + lonOffset),
toWGS24(subdiv->lat() + latOffset)); toWGS24(subdiv->lat() + latOffset));
labelPtr = 0;
if (subtype & 0x20) { if (subtype & 0x20 && !readUInt24(hdl, labelPtr))
if (!readUInt24(hdl, labelPtr)) return false;
return false; if (subtype & 0x80 && !skipClassFields(hdl))
point.poi = labelPtr & 0x400000; return false;
if (lbl && (labelPtr & 0x3FFFFF)) { if (subtype & 0x40 && !skipLclFields(hdl, _pointsFlags, Point))
point.label = lbl->label(lblHdl, labelPtr & 0x3FFFFF, point.poi); return false;
point.id = ((quint64)point.type)<<40
| ((quint64)lbl->offset())<<24 | (labelPtr & 0x3FFFFF);
}
}
if (rect.contains(point.coordinates)) // Discard NT points breaking style draw order logic (and causing huge
points->append(point); // performance drawback)
if (point.type == 0x11400)
continue;
uint hash = qHash(QPair<uint,uint>(qHash(QPair<qint32, qint32>
(subdiv->lon() + lonOffset, subdiv->lat() + latOffset)),
labelPtr & 0x3FFFFF));
point.id = ((quint64)point.type)<<32 | hash;
point.poi = labelPtr & 0x400000;
if (lbl && (labelPtr & 0x3FFFFF))
point.label = lbl->label(lblHdl, labelPtr & 0x3FFFFF, point.poi);
points->append(point);
} }
return true; return true;
} }
QMap<RGNFile::SegmentType, SubDiv::Segment> RGNFile::segments(Handle &hdl,
void RGNFile::objects(const RectC &rect, const SubDiv *subdiv, LBLFile *lbl, SubDiv *subdiv) const
NETFile *net, QList<IMG::Poly> *polygons, QList<IMG::Poly> *lines,
QList<IMG::Point> *points)
{ {
Handle rgnHdl, lblHdl, netHdl; QMap<SegmentType, SubDiv::Segment> ret;
if (!_init && !init(rgnHdl)) if (subdiv->offset() == subdiv->end() || !(subdiv->objects() & 0x1F))
return; return ret;
QVector<RGNFile::Segment> seg(segments(rgnHdl, subdiv));
for (int i = 0; i < seg.size(); i++) {
switch (seg.at(i).type()) {
case Segment::Point:
case Segment::IndexedPoint:
if (points)
pointObjects(rect, rgnHdl, subdiv, seg.at(i), lbl, lblHdl,
points);
break;
case Segment::Line:
if (lines)
polyObjects(rect, rgnHdl, subdiv, seg.at(i), lbl, lblHdl,
net, netHdl, lines);
break;
case Segment::Polygon:
if (polygons)
polyObjects(rect, rgnHdl, subdiv, seg.at(i), lbl, lblHdl,
net, netHdl, polygons);
break;
}
}
}
void RGNFile::extObjects(const RectC &rect, const SubDiv *subdiv, LBLFile *lbl,
QList<IMG::Poly> *polygons, QList<IMG::Poly> *lines,
QList<IMG::Point> *points)
{
Handle rgnHdl, lblHdl;
if (!_init && !init(rgnHdl))
return;
if (polygons && subdiv->polygonsOffset() != subdiv->polygonsEnd()) {
quint32 start = _polygonsOffset + subdiv->polygonsOffset();
quint32 end = subdiv->polygonsEnd()
? _polygonsOffset + subdiv->polygonsEnd()
: _polygonsOffset + _polygonsSize;
extPolyObjects(rect, rgnHdl, subdiv, Segment(start, end,
Segment::Polygon), lbl, lblHdl, polygons);
}
if (lines && subdiv->linesOffset() != subdiv->linesEnd()) {
quint32 start = _linesOffset + subdiv->linesOffset();
quint32 end = subdiv->linesEnd()
? _linesOffset + subdiv->linesEnd()
: _linesOffset + _linesSize;
extPolyObjects(rect, rgnHdl, subdiv, Segment(start, end, Segment::Line),
lbl, lblHdl, lines);
}
if (points && subdiv->pointsOffset() != subdiv->pointsEnd()) {
quint32 start = _pointsOffset + subdiv->pointsOffset();
quint32 end = subdiv->pointsEnd()
? _pointsOffset + subdiv->pointsEnd()
: _pointsOffset + _pointsSize;
extPointObjects(rect, rgnHdl, subdiv, Segment(start, end,
Segment::Point), lbl, lblHdl, points);
}
}
QVector<RGNFile::Segment> RGNFile::segments(Handle &hdl, const SubDiv *subdiv)
const
{
if (subdiv->offset() == subdiv->end() || !(subdiv->objects() & 0xF0))
return QVector<Segment>();
quint32 offset = _offset + subdiv->offset(); quint32 offset = _offset + subdiv->offset();
int no = 0; int no = 0;
for (quint8 mask = 0x10; mask; mask <<= 1) for (quint8 mask = 0x1; mask <= 0x10; mask <<= 1)
if (subdiv->objects() & mask) if (subdiv->objects() & mask)
no++; no++;
if (!seek(hdl, offset)) if (!seek(hdl, offset))
return QVector<Segment>(); return ret;
QVector<Segment> ret;
quint32 start = offset + 2 * (no - 1); quint32 start = offset + 2 * (no - 1);
quint16 po; quint32 ls = 0;
int cnt = 0; SegmentType lt = (SegmentType)0;
for (quint8 mask = 0x10; mask; mask <<= 1) { for (quint16 mask = 0x1; mask <= 0x10; mask <<= 1) {
if (subdiv->objects() & mask) { if (subdiv->objects() & mask) {
if (cnt) { if (ls) {
if (!readUInt16(hdl, po)) quint16 po;
return QVector<Segment>(); if (!readUInt16(hdl, po) || !po)
return QMap<RGNFile::SegmentType, SubDiv::Segment>();
start = offset + po; start = offset + po;
ret.insert(lt, SubDiv::Segment(ls, start));
} }
if (!ret.isEmpty())
ret.last().setEnd(start); lt = (SegmentType)mask;
ret.append(Segment(start, (Segment::Type)mask)); ls = start;
cnt++;
} }
} }
ret.last().setEnd(subdiv->end() ? _offset + subdiv->end() : _offset + _size); ret.insert(lt, SubDiv::Segment(ls, subdiv->end()
? _offset + subdiv->end() : _offset + _size));
return ret; return ret;
} }
#ifndef QT_NO_DEBUG bool RGNFile::subdivInit(Handle &hdl, SubDiv *subdiv) const
QDebug operator<<(QDebug dbg, const RGNFile::Segment &segment)
{ {
dbg.nospace() << "Segment(" << segment.start() << ", " << segment.end() QMap<RGNFile::SegmentType, SubDiv::Segment> seg(segments(hdl, subdiv));
<< ", " << segment.type() << ")"; SubDiv::Segment extPoints, extLines, extPolygons;
return dbg.space();
if (subdiv->extPointsOffset() != subdiv->extPointsEnd()) {
quint32 start = _pointsOffset + subdiv->extPointsOffset();
quint32 end = subdiv->extPointsEnd()
? _pointsOffset + subdiv->extPointsEnd()
: _pointsOffset + _pointsSize;
extPoints = SubDiv::Segment(start, end);
}
if (subdiv->extPolygonsOffset() != subdiv->extPolygonsEnd()) {
quint32 start = _polygonsOffset + subdiv->extPolygonsOffset();
quint32 end = subdiv->extPolygonsEnd()
? _polygonsOffset + subdiv->extPolygonsEnd()
: _polygonsOffset + _polygonsSize;
extPolygons = SubDiv::Segment(start, end);
}
if (subdiv->extLinesOffset() != subdiv->extLinesEnd()) {
quint32 start = _linesOffset + subdiv->extLinesOffset();
quint32 end = subdiv->extLinesEnd()
? _linesOffset + subdiv->extLinesEnd()
: _linesOffset + _linesSize;
extLines = SubDiv::Segment(start, end);
}
subdiv->init(seg.value(Point), seg.value(IndexedPoint), seg.value(Line),
seg.value(Polygon), seg.value(RoadReference), extPoints, extLines,
extPolygons);
return true;
} }
#endif // QT_NO_DEBUG

View File

@ -4,6 +4,7 @@
#include "img.h" #include "img.h"
#include "subfile.h" #include "subfile.h"
#include "subdiv.h" #include "subdiv.h"
#include "huffmantable.h"
class LBLFile; class LBLFile;
class NETFile; class NETFile;
@ -11,121 +12,67 @@ class NETFile;
class RGNFile : public SubFile class RGNFile : public SubFile
{ {
public: public:
enum SegmentType {
Point = 0x1,
IndexedPoint = 0x2,
Line = 0x4,
Polygon = 0x8,
RoadReference = 0x10
};
RGNFile(IMG *img) RGNFile(IMG *img)
: SubFile(img), _offset(0), _size(0), _polygonsOffset(0), : SubFile(img), _offset(0), _size(0), _polygonsOffset(0),
_polygonsSize(0), _linesOffset(0), _linesSize(0), _pointsOffset(0), _polygonsSize(0), _linesOffset(0), _linesSize(0), _pointsOffset(0),
_pointsSize(0), _init(false) {} _pointsSize(0), _init(false) {clearFlags();}
RGNFile(const QString &path)
: SubFile(path), _offset(0), _size(0), _polygonsOffset(0),
_polygonsSize(0), _linesOffset(0), _linesSize(0), _pointsOffset(0),
_pointsSize(0), _init(false) {clearFlags();}
RGNFile(SubFile *gmp, quint32 offset) : SubFile(gmp, offset), _offset(0), RGNFile(SubFile *gmp, quint32 offset) : SubFile(gmp, offset), _offset(0),
_size(0), _polygonsOffset(0), _polygonsSize(0), _linesOffset(0), _size(0), _polygonsOffset(0), _polygonsSize(0), _linesOffset(0),
_linesSize(0), _pointsOffset(0), _pointsSize(0), _init(false) {} _linesSize(0), _pointsOffset(0), _pointsSize(0), _init(false)
{clearFlags();}
void objects(const RectC &rect, const SubDiv *subdiv, LBLFile *lbl,
NETFile *net, QList<IMG::Poly> *polygons, QList<IMG::Poly> *lines,
QList<IMG::Point> *points);
void extObjects(const RectC &rect, const SubDiv *subdiv, LBLFile *lbl,
QList<IMG::Poly> *polygons, QList<IMG::Poly> *lines,
QList<IMG::Point> *points);
private:
class Segment {
public:
enum Type {
Point = 0x10,
IndexedPoint = 0x20,
Line = 0x40,
Polygon = 0x80
};
Segment() : _start(0), _end(0), _type(Point) {}
Segment(quint32 start, Type type)
: _start(start), _end(0), _type(type) {}
Segment(quint32 start, quint32 end, Type type)
: _start(start), _end(end), _type(type) {}
void setEnd(quint32 end) {_end = end;}
quint32 start() const {return _start;}
quint32 end() const {return _end;}
Type type() const {return _type;}
private:
quint32 _start;
quint32 _end;
Type _type;
};
class BitStream {
public:
BitStream(const SubFile &file, Handle &hdl, quint32 length)
: _file(file), _hdl(hdl), _length(length), _remaining(0) {}
bool read(int bits, quint32 &val);
bool flush() {return _file.seek(_hdl, _hdl.pos + _length);}
quint32 bitsAvailable() const {return _length * 8 + _remaining;}
private:
const SubFile &_file;
Handle &_hdl;
quint32 _length, _remaining;
quint8 _data;
};
class DeltaStream : public BitStream {
public:
DeltaStream(const SubFile &file, Handle &hdl, quint32 length,
quint8 info, bool extraBit, bool extended);
bool readNext(qint32 &lonDelta, qint32 &latDelta)
{
return hasNext()
? (readDelta(_lonBits, _lonSign, _extraBit, lonDelta)
&& readDelta(_latBits, _latSign, false, latDelta))
: false;
}
bool atEnd() const {return (_readBits != 0xFFFFFFFF && !hasNext());}
private:
bool hasNext() const {return bitsAvailable() >= _readBits;}
bool sign(int &val);
bool readDelta(int bits, int sign, int extraBit, qint32 &delta);
int _lonSign, _latSign, _extraBit;
quint32 _lonBits, _latBits, _readBits;
};
bool initialized() const {return _init;}
bool init(Handle &hdl); bool init(Handle &hdl);
QVector<Segment> segments(Handle &hdl, const SubDiv *subdiv) const; bool polyObjects(Handle &hdl, const SubDiv *subdiv, SegmentType segmentType,
bool polyObjects(const RectC &rect, Handle &hdl, const SubDiv *subdiv, LBLFile *lbl, Handle &lblHdl, NETFile *net, Handle &netHdl,
const Segment &segment, LBLFile *lbl, Handle &lblHdl, NETFile *net,
Handle &netHdl, QList<IMG::Poly> *polys) const;
bool pointObjects(const RectC &rect, Handle &hdl, const SubDiv *subdiv,
const Segment &segment, LBLFile *lbl, Handle &lblHdl,
QList<IMG::Point> *points) const;
bool extPolyObjects(const RectC &rect, Handle &hdl, const SubDiv *subdiv,
const Segment &segment, LBLFile *lbl, Handle &lblHdl,
QList<IMG::Poly> *polys) const; QList<IMG::Poly> *polys) const;
bool extPointObjects(const RectC &rect, Handle &hdl, const SubDiv *subdiv, bool pointObjects(Handle &hdl, const SubDiv *subdiv, SegmentType segmentType,
const Segment &segment, LBLFile *lbl, Handle &lblHdl, LBLFile *lbl, Handle &lblHdl, QList<IMG::Point> *points) const;
QList<IMG::Point> *points) const; bool extPolyObjects(Handle &hdl, const SubDiv *subdiv, quint32 shift,
SegmentType segmentType, LBLFile *lbl, Handle &lblHdl,
QList<IMG::Poly> *polys) const;
bool extPointObjects(Handle &hdl, const SubDiv *subdiv, LBLFile *lbl,
Handle &lblHdl, QList<IMG::Point> *points) const;
friend QDebug operator<<(QDebug dbg, const RGNFile::Segment &segment); bool subdivInit(Handle &hdl, SubDiv *subdiv) const;
private:
QMap<SegmentType, SubDiv::Segment> segments(Handle &hdl, SubDiv *subdiv)
const;
void clearFlags();
bool skipClassFields(Handle &hdl) const;
bool skipLclFields(Handle &hdl, const quint32 flags[3], SegmentType type)
const;
quint32 _offset; quint32 _offset;
quint32 _size; quint32 _size;
quint32 _polygonsOffset; quint32 _polygonsOffset;
quint32 _polygonsSize; quint32 _polygonsSize;
quint32 _polygonsFlags[3];
quint32 _linesOffset; quint32 _linesOffset;
quint32 _linesSize; quint32 _linesSize;
quint32 _linesFlags[3];
quint32 _pointsOffset; quint32 _pointsOffset;
quint32 _pointsSize; quint32 _pointsSize;
quint32 _pointsFlags[3];
HuffmanTable _huffmanTable;
bool _init; bool _init;
}; };
#ifndef QT_NO_DEBUG
QDebug operator<<(QDebug dbg, const RGNFile::Segment &segment);
#endif // QT_NO_DEBUG
#endif // RGNFILE_H #endif // RGNFILE_H

View File

@ -1,72 +1,69 @@
#include <QImage> #include <QImage>
#include "style.h" #include "style.h"
#define TYPE(t) ((t)<<8)
void Style::defaultPolygonStyle() void Style::defaultPolygonStyle()
{ {
_polygons[TYPE(0x01)] = Style::Polygon(QBrush("#dfd3b5")); _polygons[TYPE(0x01)] = Polygon(QBrush("#dfd3b5"));
_polygons[TYPE(0x02)] = Style::Polygon(QBrush("#dfd3b5")); _polygons[TYPE(0x02)] = Polygon(QBrush("#dfd3b5"));
_polygons[TYPE(0x03)] = Style::Polygon(QBrush("#dfd3b5")); _polygons[TYPE(0x03)] = Polygon(QBrush("#dfd3b5"));
_polygons[TYPE(0x04)] = Style::Polygon(QBrush("#ff4040", Qt::BDiagPattern)); _polygons[TYPE(0x04)] = Polygon(QBrush("#ff4040", Qt::BDiagPattern));
_polygons[TYPE(0x05)] = Style::Polygon(QBrush("#d6d4ce")); _polygons[TYPE(0x05)] = Polygon(QBrush("#d6d4ce"));
_polygons[TYPE(0x06)] = Style::Polygon(QBrush("#d6d4ce")); _polygons[TYPE(0x06)] = Polygon(QBrush("#d6d4ce"));
_polygons[TYPE(0x07)] = Style::Polygon(QBrush("#d6d4ce")); _polygons[TYPE(0x07)] = Polygon(QBrush("#d6d4ce"));
_polygons[TYPE(0x08)] = Style::Polygon(QBrush("#d6d4ce")); _polygons[TYPE(0x08)] = Polygon(QBrush("#d6d4ce"));
_polygons[TYPE(0x09)] = Style::Polygon(QBrush("#d6d4ce")); _polygons[TYPE(0x09)] = Polygon(QBrush("#d6d4ce"));
_polygons[TYPE(0x0a)] = Style::Polygon(QBrush("#d6d4ce")); _polygons[TYPE(0x0a)] = Polygon(QBrush("#d6d4ce"));
_polygons[TYPE(0x0b)] = Style::Polygon(QBrush("#d6d4ce")); _polygons[TYPE(0x0b)] = Polygon(QBrush("#d6d4ce"));
_polygons[TYPE(0x0c)] = Style::Polygon(QBrush("#d6d4ce")); _polygons[TYPE(0x0c)] = Polygon(QBrush("#d6d4ce"));
_polygons[TYPE(0x0d)] = Style::Polygon(QBrush("#f8e3be")); _polygons[TYPE(0x0d)] = Polygon(QBrush("#f8e3be"));
_polygons[TYPE(0x0e)] = Style::Polygon(QBrush("#ffffff")); _polygons[TYPE(0x0e)] = Polygon(QBrush("#ffffff"));
_polygons[TYPE(0x0f)] = Style::Polygon(QBrush("#e6e2d9")); _polygons[TYPE(0x0f)] = Polygon(QBrush("#e6e2d9"));
_polygons[TYPE(0x10)] = Style::Polygon(QBrush("#e6e2d9")); _polygons[TYPE(0x10)] = Polygon(QBrush("#e6e2d9"));
_polygons[TYPE(0x11)] = Style::Polygon(QBrush("#e6e2d9")); _polygons[TYPE(0x11)] = Polygon(QBrush("#e6e2d9"));
_polygons[TYPE(0x12)] = Style::Polygon(QBrush("#e6e2d9")); _polygons[TYPE(0x12)] = Polygon(QBrush("#e6e2d9"));
_polygons[TYPE(0x13)] = Style::Polygon(QBrush("#dbd0b6"), _polygons[TYPE(0x13)] = Polygon(QBrush("#dbd0b6"),
QPen(QColor("#cdccc4"), 1)); QPen(QColor("#cdccc4"), 1));
_polygons[TYPE(0x14)] = Style::Polygon(QBrush(QColor("#9ac269"), _polygons[TYPE(0x14)] = Polygon(QBrush("#d4ebb8"));
_polygons[TYPE(0x15)] = Polygon(QBrush("#d4ebb8"));
_polygons[TYPE(0x16)] = Polygon(QBrush(QColor("#9ac269"),
Qt::BDiagPattern)); Qt::BDiagPattern));
_polygons[TYPE(0x15)] = Style::Polygon(QBrush(QColor("#9ac269"), _polygons[TYPE(0x17)] = Polygon(QBrush("#d4ebb8"));
Qt::BDiagPattern)); _polygons[TYPE(0x18)] = Polygon(QBrush("#d4ebb8"));
_polygons[TYPE(0x16)] = Style::Polygon(QBrush(QColor("#9ac269"), _polygons[TYPE(0x19)] = Polygon(QBrush("#e3edc6"), QPen("#c9d3a5"));
Qt::BDiagPattern)); _polygons[TYPE(0x1a)] = Polygon(QBrush("#000000", Qt::Dense6Pattern),
_polygons[TYPE(0x17)] = Style::Polygon(QBrush("#d4ebb8"));
_polygons[TYPE(0x18)] = Style::Polygon(QBrush("#d4ebb8"));
_polygons[TYPE(0x19)] = Style::Polygon(QBrush("#d6d4ce"));
_polygons[TYPE(0x1a)] = Style::Polygon(QBrush("#000000", Qt::Dense6Pattern),
QPen(QColor("#cdccc4"), 1)); QPen(QColor("#cdccc4"), 1));
_polygons[TYPE(0x1e)] = Style::Polygon(QBrush(QColor("#9ac269"), _polygons[TYPE(0x1e)] = Polygon(QBrush(QColor("#9ac269"),
Qt::BDiagPattern)); Qt::BDiagPattern));
_polygons[TYPE(0x1f)] = Style::Polygon(QBrush(QColor("#9ac269"), _polygons[TYPE(0x1f)] = Polygon(QBrush(QColor("#9ac269"),
Qt::BDiagPattern)); Qt::BDiagPattern));
_polygons[TYPE(0x28)] = Style::Polygon(QBrush("#9fc4e1")); _polygons[TYPE(0x28)] = Polygon(QBrush("#9fc4e1"));
_polygons[TYPE(0x29)] = Style::Polygon(QBrush("#9fc4e1")); _polygons[TYPE(0x29)] = Polygon(QBrush("#9fc4e1"));
_polygons[TYPE(0x32)] = Style::Polygon(QBrush("#9fc4e1")); _polygons[TYPE(0x32)] = Polygon(QBrush("#9fc4e1"));
_polygons[TYPE(0x3b)] = Style::Polygon(QBrush("#9fc4e1")); _polygons[TYPE(0x3b)] = Polygon(QBrush("#9fc4e1"));
_polygons[TYPE(0x3c)] = Style::Polygon(QBrush("#9fc4e1")); _polygons[TYPE(0x3c)] = Polygon(QBrush("#9fc4e1"));
_polygons[TYPE(0x3d)] = Style::Polygon(QBrush("#9fc4e1")); _polygons[TYPE(0x3d)] = Polygon(QBrush("#9fc4e1"));
_polygons[TYPE(0x3e)] = Style::Polygon(QBrush("#9fc4e1")); _polygons[TYPE(0x3e)] = Polygon(QBrush("#9fc4e1"));
_polygons[TYPE(0x3f)] = Style::Polygon(QBrush("#9fc4e1")); _polygons[TYPE(0x3f)] = Polygon(QBrush("#9fc4e1"));
_polygons[TYPE(0x40)] = Style::Polygon(QBrush("#9fc4e1")); _polygons[TYPE(0x40)] = Polygon(QBrush("#9fc4e1"));
_polygons[TYPE(0x41)] = Style::Polygon(QBrush("#9fc4e1")); _polygons[TYPE(0x41)] = Polygon(QBrush("#9fc4e1"));
_polygons[TYPE(0x42)] = Style::Polygon(QBrush("#9fc4e1")); _polygons[TYPE(0x42)] = Polygon(QBrush("#9fc4e1"));
_polygons[TYPE(0x43)] = Style::Polygon(QBrush("#9fc4e1")); _polygons[TYPE(0x43)] = Polygon(QBrush("#9fc4e1"));
_polygons[TYPE(0x44)] = Style::Polygon(QBrush("#9fc4e1")); _polygons[TYPE(0x44)] = Polygon(QBrush("#9fc4e1"));
_polygons[TYPE(0x45)] = Style::Polygon(QBrush("#9fc4e1")); _polygons[TYPE(0x45)] = Polygon(QBrush("#9fc4e1"));
_polygons[TYPE(0x46)] = Style::Polygon(QBrush("#9fc4e1")); _polygons[TYPE(0x46)] = Polygon(QBrush("#9fc4e1"));
_polygons[TYPE(0x47)] = Style::Polygon(QBrush("#9fc4e1")); _polygons[TYPE(0x47)] = Polygon(QBrush("#9fc4e1"));
_polygons[TYPE(0x48)] = Style::Polygon(QBrush("#9fc4e1")); _polygons[TYPE(0x48)] = Polygon(QBrush("#9fc4e1"));
_polygons[TYPE(0x49)] = Style::Polygon(QBrush("#9fc4e1")); _polygons[TYPE(0x49)] = Polygon(QBrush("#9fc4e1"));
_polygons[TYPE(0x4b)] = Style::Polygon(QBrush("#f1f0e5"), QPen("#f1f0e5")); _polygons[TYPE(0x4b)] = Polygon(QBrush("#f1f0e5"), QPen("#f1f0e5"));
_polygons[TYPE(0x4a)] = Style::Polygon(QBrush("#f1f0e5"), QPen("#f1f0e5")); _polygons[TYPE(0x4a)] = Polygon(QBrush("#f1f0e5"), QPen("#f1f0e5"));
_polygons[TYPE(0x4c)] = Style::Polygon(QBrush("#9fc4e1", Qt::Dense6Pattern)); _polygons[TYPE(0x4c)] = Polygon(QBrush("#9fc4e1", Qt::Dense6Pattern));
_polygons[TYPE(0x4d)] = Style::Polygon(QBrush("#ddf1fd")); _polygons[TYPE(0x4d)] = Polygon(QBrush("#ddf1fd"));
_polygons[TYPE(0x4e)] = Style::Polygon(QBrush("#e3edc1")); _polygons[TYPE(0x4e)] = Polygon(QBrush("#e3edc1"));
_polygons[TYPE(0x4f)] = Style::Polygon(QBrush("#d4ebb8")); _polygons[TYPE(0x4f)] = Polygon(QBrush("#d4ebb8"));
_polygons[TYPE(0x50)] = Style::Polygon(QBrush("#d4ebb8")); _polygons[TYPE(0x50)] = Polygon(QBrush("#d4ebb8"));
_polygons[TYPE(0x51)] = Style::Polygon(QBrush("#9fc4e1", Qt::Dense4Pattern)); _polygons[TYPE(0x51)] = Polygon(QBrush("#9fc4e1", Qt::Dense4Pattern));
_polygons[TYPE(0x52)] = Style::Polygon(QBrush("#d4ebb8")); _polygons[TYPE(0x52)] = Polygon(QBrush("#d4ebb8"));
_drawOrder << TYPE(0x4b) << TYPE(0x4a) << TYPE(0x01) << TYPE(0x02) _drawOrder << TYPE(0x4b) << TYPE(0x4a) << TYPE(0x01) << TYPE(0x02)
<< TYPE(0x03) << TYPE(0x17) << TYPE(0x18) << TYPE(0x19) << TYPE(0x1a) << TYPE(0x03) << TYPE(0x17) << TYPE(0x18) << TYPE(0x19) << TYPE(0x1a)
@ -89,71 +86,69 @@ void Style::defaultLineStyle()
QPen rr(QColor("#717171"), 3, Qt::CustomDashLine); QPen rr(QColor("#717171"), 3, Qt::CustomDashLine);
rr.setDashPattern(pattern); rr.setDashPattern(pattern);
_lines[TYPE(0x01)] = Style::Line(QPen(QColor("#9bd772"), 2, Qt::SolidLine), _lines[TYPE(0x01)] = Line(QPen(QColor("#9bd772"), 2, Qt::SolidLine),
QPen(QColor("#72a35a"), 6, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)); QPen(QColor("#72a35a"), 6, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
_lines[TYPE(0x02)] = Style::Line(QPen(QColor("#ffcc78"), 2, Qt::SolidLine), _lines[TYPE(0x02)] = Line(QPen(QColor("#ffcc78"), 2, Qt::SolidLine),
QPen(QColor("#e8a541"), 6, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)); QPen(QColor("#e8a541"), 6, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
_lines[TYPE(0x03)] = Style::Line(QPen(QColor("#ffcc78"), 2, Qt::SolidLine), _lines[TYPE(0x03)] = Line(QPen(QColor("#ffcc78"), 2, Qt::SolidLine),
QPen(QColor("#e8a541"), 6, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)); QPen(QColor("#e8a541"), 6, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
_lines[TYPE(0x04)] = Style::Line(QPen(QColor("#faef75"), 3, Qt::SolidLine), _lines[TYPE(0x04)] = Line(QPen(QColor("#faef75"), 3, Qt::SolidLine),
QPen(QColor("#dbd27b"), 5, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)); QPen(QColor("#dbd27b"), 5, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
_lines[TYPE(0x05)] = Style::Line(QPen(QColor("#ffffff"), 3, Qt::SolidLine), _lines[TYPE(0x05)] = Line(QPen(QColor("#ffffff"), 3, Qt::SolidLine),
QPen(QColor("#d5cdc0"), 5, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)); QPen(QColor("#d5cdc0"), 5, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
_lines[TYPE(0x06)] = Style::Line(QPen(QColor("#ffffff"), 3, Qt::SolidLine), _lines[TYPE(0x06)] = Line(QPen(QColor("#ffffff"), 3, Qt::SolidLine),
QPen(QColor("#d5cdc0"), 5, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)); QPen(QColor("#d5cdc0"), 5, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
_lines[TYPE(0x07)] = Style::Line(QPen(QColor("#ffffff"), 2, Qt::SolidLine), _lines[TYPE(0x07)] = Line(QPen(QColor("#ffffff"), 2, Qt::SolidLine),
QPen(QColor("#d5cdc0"), 4, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)); QPen(QColor("#d5cdc0"), 4, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
_lines[TYPE(0x08)] = Style::Line(QPen(QColor("#ffcc78"), 2, Qt::SolidLine), _lines[TYPE(0x08)] = Line(QPen(QColor("#ffcc78"), 2, Qt::SolidLine),
QPen(QColor("#e8a541"), 6, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)); QPen(QColor("#e8a541"), 6, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
_lines[TYPE(0x09)] = Style::Line(QPen(QColor("#9bd772"), 2, Qt::SolidLine), _lines[TYPE(0x09)] = Line(QPen(QColor("#9bd772"), 2, Qt::SolidLine),
QPen(QColor("#72a35a"), 6, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)); QPen(QColor("#72a35a"), 6, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
_lines[TYPE(0x0a)] = Style::Line(QPen(QColor("#aba083"), 1, Qt::DashLine)); _lines[TYPE(0x0a)] = Line(QPen(QColor("#aba083"), 1, Qt::DashLine));
_lines[TYPE(0x0b)] = Style::Line(QPen(QColor("#ffcc78"), 2, Qt::SolidLine), _lines[TYPE(0x0b)] = Line(QPen(QColor("#ffcc78"), 2, Qt::SolidLine),
QPen(QColor("#e8a541"), 6, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)); QPen(QColor("#e8a541"), 6, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
_lines[TYPE(0x0c)] = Style::Line(QPen(QColor("#ffffff"), 3, Qt::SolidLine), _lines[TYPE(0x0c)] = Line(QPen(QColor("#ffffff"), 3, Qt::SolidLine),
QPen(QColor("#d5cdc0"), 5, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)); QPen(QColor("#d5cdc0"), 5, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
_lines[TYPE(0x14)] = Style::Line(rr, QPen(Qt::white, 3, Qt::SolidLine, _lines[TYPE(0x14)] = Line(rr, QPen(Qt::white, 3, Qt::SolidLine,
Qt::RoundCap, Qt::RoundJoin)); Qt::RoundCap, Qt::RoundJoin));
_lines[TYPE(0x16)] = Style::Line(QPen(QColor("#aba083"), 1, Qt::DotLine)); _lines[TYPE(0x16)] = Line(QPen(QColor("#aba083"), 1, Qt::DotLine));
_lines[TYPE(0x18)] = Style::Line(QPen(QColor("#9fc4e1"), 2, Qt::SolidLine)); _lines[TYPE(0x18)] = Line(QPen(QColor("#9fc4e1"), 2, Qt::SolidLine));
_lines[TYPE(0x18)].setTextColor(QColor("#9fc4e1")); _lines[TYPE(0x18)].setTextColor(QColor("#9fc4e1"));
//_lines[TYPE(0x1a)] = Style::Line(QPen(QColor("#7697b7"), 1, Qt::DashLine)); //_lines[TYPE(0x1a)] = Line(QPen(QColor("#7697b7"), 1, Qt::DashLine));
_lines[TYPE(0x1b)] = Style::Line(QPen(QColor("#7697b7"), 1, Qt::DashLine)); _lines[TYPE(0x1b)] = Line(QPen(QColor("#7697b7"), 1, Qt::DashLine));
_lines[TYPE(0x1e)] = Style::Line(QPen(QColor("#505145"), 2, Qt::DashDotLine)); _lines[TYPE(0x1e)] = Line(QPen(QColor("#505145"), 2, Qt::DashDotLine));
_lines[TYPE(0x1f)] = Style::Line(QPen(QColor("#9fc4e1"), 3, Qt::SolidLine)); _lines[TYPE(0x1f)] = Line(QPen(QColor("#9fc4e1"), 3, Qt::SolidLine));
_lines[TYPE(0x1f)].setTextColor(QColor("#9fc4e1")); _lines[TYPE(0x1f)].setTextColor(QColor("#9fc4e1"));
_lines[TYPE(0x20)] = Style::Line(QPen(QColor("#cacfc0"), 1, Qt::SolidLine)); _lines[TYPE(0x20)] = Line(QPen(QColor("#cfcfcf"), 1, Qt::SolidLine));
_lines[TYPE(0x20)].setTextColor(QColor("#62695a")); _lines[TYPE(0x20)].setTextFontSize(None);
_lines[TYPE(0x20)].setTextFontSize(Style::Small); _lines[TYPE(0x21)] = Line(QPen(QColor("#bfbfbf"), 1, Qt::SolidLine));
_lines[TYPE(0x21)] = Style::Line(QPen(QColor("#cacfc0"), 1.5, Qt::SolidLine)); _lines[TYPE(0x21)].setTextColor(QColor("#666666"));
_lines[TYPE(0x21)].setTextColor(QColor("#62695a")); _lines[TYPE(0x21)].setTextFontSize(Small);
_lines[TYPE(0x21)].setTextFontSize(Style::Small); _lines[TYPE(0x22)] = Line(QPen(QColor("#afafaf"), 1, Qt::SolidLine));
_lines[TYPE(0x22)] = Style::Line(QPen(QColor("#cacfc0"), 2, Qt::SolidLine)); _lines[TYPE(0x22)].setTextColor(QColor("#666666"));
_lines[TYPE(0x22)].setTextColor(QColor("#62695a")); _lines[TYPE(0x22)].setTextFontSize(Small);
_lines[TYPE(0x22)].setTextFontSize(Style::Small); _lines[TYPE(0x23)] = Line(QPen(QColor("#55aaff"), 1, Qt::SolidLine));
_lines[TYPE(0x23)] = Style::Line(QPen(QColor("#55aaff"), 1, Qt::SolidLine)); _lines[TYPE(0x23)].setTextFontSize(None);
_lines[TYPE(0x23)].setTextColor(QColor("#55aaff")); _lines[TYPE(0x24)] = Line(QPen(QColor("#659aef"), 1, Qt::SolidLine));
_lines[TYPE(0x23)].setTextFontSize(Style::Small); _lines[TYPE(0x24)].setTextColor(QColor("#558adf"));
_lines[TYPE(0x24)] = Style::Line(QPen(QColor("#55aaff"), 1.5, Qt::SolidLine)); _lines[TYPE(0x24)].setTextFontSize(Small);
_lines[TYPE(0x24)].setTextColor(QColor("#55aaff")); _lines[TYPE(0x25)] = Line(QPen(QColor("#558adf"), 1, Qt::SolidLine));
_lines[TYPE(0x24)].setTextFontSize(Style::Small); _lines[TYPE(0x25)].setTextColor(QColor("#558adf"));
_lines[TYPE(0x25)] = Style::Line(QPen(QColor("#55aaff"), 2, Qt::SolidLine)); _lines[TYPE(0x25)].setTextFontSize(Small);
_lines[TYPE(0x25)].setTextColor(QColor("#55aaff")); _lines[TYPE(0x26)] = Line(QPen(QColor("#9fc4e1"), 2, Qt::DotLine));
_lines[TYPE(0x25)].setTextFontSize(Style::Small); _lines[TYPE(0x27)] = Line(QPen(QColor("#ffffff"), 4, Qt::SolidLine),
_lines[TYPE(0x26)] = Style::Line(QPen(QColor("#9fc4e1"), 2, Qt::DotLine));
_lines[TYPE(0x27)] = Style::Line(QPen(QColor("#ffffff"), 4, Qt::SolidLine),
QPen(QColor("#d5cdc0"), 5, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)); QPen(QColor("#d5cdc0"), 5, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
//_lines[TYPE(0x28)] = Style::Line(QPen(QColor("#5a5a5a"), 1, Qt::SolidLine)); //_lines[TYPE(0x28)] = Line(QPen(QColor("#5a5a5a"), 1, Qt::SolidLine));
_lines[TYPE(0x29)] = Style::Line(QPen(QColor("#5a5a5a"), 1, Qt::SolidLine)); _lines[TYPE(0x29)] = Line(QPen(QColor("#5a5a5a"), 1, Qt::SolidLine));
_lines[TYPE(0x29)].setTextFontSize(Style::None); _lines[TYPE(0x29)].setTextFontSize(None);
} }
void Style::defaultPointStyle() void Style::defaultPointStyle()
{ {
// Cities // Cities
_points[TYPE(0x01)].setTextFontSize(Style::Large); _points[TYPE(0x01)].setTextFontSize(Large);
_points[TYPE(0x02)].setTextFontSize(Style::Large); _points[TYPE(0x02)].setTextFontSize(Large);
_points[TYPE(0x03)].setTextFontSize(Style::Large); _points[TYPE(0x03)].setTextFontSize(Large);
// POI // POI
_points[0x2a00] = Point(QImage(":/restaurant-11.png")); _points[0x2a00] = Point(QImage(":/restaurant-11.png"));
@ -294,7 +289,7 @@ static bool readBitmap(SubFile *file, SubFile::Handle &hdl, QImage &img,
for (int y = 0; y < img.height(); y++) { for (int y = 0; y < img.height(); y++) {
for (int x = 0; x < img.width(); x += 8/bpp) { for (int x = 0; x < img.width(); x += 8/bpp) {
quint8 color; quint8 color;
if (!file->readByte(hdl, color)) if (!file->readUInt8(hdl, color))
return false; return false;
for (int i = 0; i < 8/bpp && x + i < img.width(); i++) { for (int i = 0; i < 8/bpp && x + i < img.width(); i++) {
@ -319,8 +314,8 @@ static bool readColor(SubFile *file, SubFile::Handle &hdl, QColor &color)
{ {
quint8 b, g, r; quint8 b, g, r;
if (!(file->readByte(hdl, b) && file->readByte(hdl, g) if (!(file->readUInt8(hdl, b) && file->readUInt8(hdl, g)
&& file->readByte(hdl, r))) && file->readUInt8(hdl, r)))
return false; return false;
color = qRgb(r, g, b); color = qRgb(r, g, b);
@ -333,20 +328,20 @@ static bool skipLocalization(SubFile *file, SubFile::Handle &hdl)
quint8 t8; quint8 t8;
quint16 len; quint16 len;
if (!file->readByte(hdl, t8)) if (!file->readUInt8(hdl, t8))
return false; return false;
len = t8; len = t8;
if (len & 0x01) if (len & 0x01)
len = len >> 1; len = len >> 1;
else { else {
if (!file->readByte(hdl, t8)) if (!file->readUInt8(hdl, t8))
return false; return false;
len = (((quint16)t8) << 8) | len; len = (((quint16)t8) << 8) | len;
len = len >> 2; len = len >> 2;
} }
if (!file->seek(hdl, hdl.pos + len)) if (!file->seek(hdl, hdl.pos() + len))
return false; return false;
return true; return true;
@ -361,7 +356,7 @@ bool Style::itemInfo(SubFile *file, SubFile::Handle &hdl,
if (section.arrayItemSize == 5) { if (section.arrayItemSize == 5) {
if (!(file->readUInt16(hdl, t16_1) && file->readUInt16(hdl, t16_2) if (!(file->readUInt16(hdl, t16_1) && file->readUInt16(hdl, t16_2)
&& file->readByte(hdl, t8))) && file->readUInt8(hdl, t8)))
return false; return false;
info.offset = t16_2 | (t8<<16); info.offset = t16_2 | (t8<<16);
} else if (section.arrayItemSize == 4) { } else if (section.arrayItemSize == 4) {
@ -369,7 +364,7 @@ bool Style::itemInfo(SubFile *file, SubFile::Handle &hdl,
return false; return false;
info.offset = t16_2; info.offset = t16_2;
} else if (section.arrayItemSize == 3) { } else if (section.arrayItemSize == 3) {
if (!(file->readUInt16(hdl, t16_1) && file->readByte(hdl, t8))) if (!(file->readUInt16(hdl, t16_1) && file->readUInt8(hdl, t8)))
return false; return false;
info.offset = t8; info.offset = t8;
} else } else
@ -400,7 +395,7 @@ bool Style::parsePolygons(SubFile *file, SubFile::Handle &hdl,
quint8 t8, flags; quint8 t8, flags;
if (!(file->seek(hdl, section.offset + info.offset) if (!(file->seek(hdl, section.offset + info.offset)
&& file->readByte(hdl, t8))) && file->readUInt8(hdl, t8)))
return false; return false;
flags = t8 & 0x0F; flags = t8 & 0x0F;
@ -412,14 +407,14 @@ bool Style::parsePolygons(SubFile *file, SubFile::Handle &hdl,
if (!(readColor(file, hdl, c1) && readColor(file, hdl, c2) if (!(readColor(file, hdl, c1) && readColor(file, hdl, c2)
&& readColor(file, hdl, c3) && readColor(file, hdl, c4))) && readColor(file, hdl, c3) && readColor(file, hdl, c4)))
return false; return false;
_polygons[type] = Style::Polygon(QBrush(c1), QPen(c3, 2)); _polygons[type] = Polygon(QBrush(c1), QPen(c3, 2));
break; break;
case 0x06: case 0x06:
case 0x07: case 0x07:
if (!readColor(file, hdl, c1)) if (!readColor(file, hdl, c1))
return false; return false;
_polygons[type] = Style::Polygon(QBrush(c1)); _polygons[type] = Polygon(QBrush(c1));
break; break;
case 0x08: case 0x08:
@ -432,7 +427,7 @@ bool Style::parsePolygons(SubFile *file, SubFile::Handle &hdl,
if (!readBitmap(file, hdl, img, 1)) if (!readBitmap(file, hdl, img, 1))
return false; return false;
_polygons[type] = Style::Polygon(QBrush(img)); _polygons[type] = Polygon(QBrush(img));
break; break;
case 0x09: case 0x09:
@ -446,7 +441,7 @@ bool Style::parsePolygons(SubFile *file, SubFile::Handle &hdl,
if (!readBitmap(file, hdl, img, 1)) if (!readBitmap(file, hdl, img, 1))
return false; return false;
_polygons[type] = Style::Polygon(QBrush(img)); _polygons[type] = Polygon(QBrush(img));
break; break;
case 0x0B: case 0x0B:
@ -462,7 +457,7 @@ bool Style::parsePolygons(SubFile *file, SubFile::Handle &hdl,
if (!readBitmap(file, hdl, img, 1)) if (!readBitmap(file, hdl, img, 1))
return false; return false;
_polygons[type] = Style::Polygon(QBrush(img)); _polygons[type] = Polygon(QBrush(img));
break; break;
case 0x0E: case 0x0E:
@ -475,7 +470,7 @@ bool Style::parsePolygons(SubFile *file, SubFile::Handle &hdl,
if (!readBitmap(file, hdl, img, 1)) if (!readBitmap(file, hdl, img, 1))
return false; return false;
_polygons[type] = Style::Polygon(QBrush(img)); _polygons[type] = Polygon(QBrush(img));
break; break;
case 0x0F: case 0x0F:
@ -488,7 +483,7 @@ bool Style::parsePolygons(SubFile *file, SubFile::Handle &hdl,
if (!readBitmap(file, hdl, img, 1)) if (!readBitmap(file, hdl, img, 1))
return false; return false;
_polygons[type] = Style::Polygon(QBrush(img)); _polygons[type] = Polygon(QBrush(img));
break; break;
default: default:
@ -516,7 +511,7 @@ bool Style::parseLines(SubFile *file, SubFile::Handle &hdl,
quint8 t8_1, t8_2, flags, rows; quint8 t8_1, t8_2, flags, rows;
if (!(file->seek(hdl, section.offset + info.offset) if (!(file->seek(hdl, section.offset + info.offset)
&& file->readByte(hdl, t8_1) && file->readByte(hdl, t8_2))) && file->readUInt8(hdl, t8_1) && file->readUInt8(hdl, t8_2)))
return false; return false;
flags = t8_1 & 0x07; flags = t8_1 & 0x07;
rows = t8_1 >> 3; rows = t8_1 >> 3;
@ -539,16 +534,16 @@ bool Style::parseLines(SubFile *file, SubFile::Handle &hdl,
if (!readBitmap(file, hdl, img, 1)) if (!readBitmap(file, hdl, img, 1))
return false; return false;
_lines[type] = Style::Line(img); _lines[type] = Line(img);
} else { } else {
if (!(file->readByte(hdl, w1) && file->readByte(hdl, w2))) if (!(file->readUInt8(hdl, w1) && file->readUInt8(hdl, w2)))
return false; return false;
_lines[type] = (w2 > w1) _lines[type] = (w2 > w1)
? Style::Line(QPen(c1, w1, Qt::SolidLine, Qt::RoundCap, ? Line(QPen(c1, w1, Qt::SolidLine, Qt::RoundCap,
Qt::RoundJoin), QPen(c2, w2, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin), QPen(c2, w2, Qt::SolidLine, Qt::RoundCap,
Qt::RoundJoin)) Qt::RoundJoin))
: Style::Line(QPen(c1, w1, Qt::SolidLine, Qt::RoundCap, : Line(QPen(c1, w1, Qt::SolidLine, Qt::RoundCap,
Qt::RoundJoin)); Qt::RoundJoin));
} }
break; break;
@ -566,16 +561,16 @@ bool Style::parseLines(SubFile *file, SubFile::Handle &hdl,
if (!readBitmap(file, hdl, img, 1)) if (!readBitmap(file, hdl, img, 1))
return false; return false;
_lines[type] = Style::Line(img); _lines[type] = Line(img);
} else { } else {
if (!(file->readByte(hdl, w1) && file->readByte(hdl, w2))) if (!(file->readUInt8(hdl, w1) && file->readUInt8(hdl, w2)))
return false; return false;
_lines[type] = (w2 > w1) _lines[type] = (w2 > w1)
? Style::Line(QPen(c1, w1, Qt::SolidLine, Qt::RoundCap, ? Line(QPen(c1, w1, Qt::SolidLine, Qt::RoundCap,
Qt::RoundJoin), QPen(c2, w2, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin), QPen(c2, w2, Qt::SolidLine, Qt::RoundCap,
Qt::RoundJoin)) Qt::RoundJoin))
: Style::Line(QPen(c1, w1, Qt::SolidLine, Qt::RoundCap, : Line(QPen(c1, w1, Qt::SolidLine, Qt::RoundCap,
Qt::RoundJoin)); Qt::RoundJoin));
} }
break; break;
@ -593,12 +588,12 @@ bool Style::parseLines(SubFile *file, SubFile::Handle &hdl,
if (!readBitmap(file, hdl, img, 1)) if (!readBitmap(file, hdl, img, 1))
return false; return false;
_lines[type] = Style::Line(img); _lines[type] = Line(img);
} else { } else {
if (!(file->readByte(hdl, w1) && file->readByte(hdl, w2))) if (!(file->readUInt8(hdl, w1) && file->readUInt8(hdl, w2)))
return false; return false;
_lines[type] = Style::Line(QPen(c1, w1, Qt::SolidLine, _lines[type] = Line(QPen(c1, w1, Qt::SolidLine,
Qt::RoundCap, Qt::RoundJoin)); Qt::RoundCap, Qt::RoundJoin));
} }
break; break;
@ -616,16 +611,16 @@ bool Style::parseLines(SubFile *file, SubFile::Handle &hdl,
if (!readBitmap(file, hdl, img, 1)) if (!readBitmap(file, hdl, img, 1))
return false; return false;
_lines[type] = Style::Line(img); _lines[type] = Line(img);
} else { } else {
if (!(file->readByte(hdl, w1) && file->readByte(hdl, w2))) if (!(file->readUInt8(hdl, w1) && file->readUInt8(hdl, w2)))
return false; return false;
_lines[type] = (w2 > w1) _lines[type] = (w2 > w1)
? Style::Line(QPen(c1, w1, Qt::SolidLine, Qt::RoundCap, ? Line(QPen(c1, w1, Qt::SolidLine, Qt::RoundCap,
Qt::RoundJoin), QPen(c2, w2, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin), QPen(c2, w2, Qt::SolidLine, Qt::RoundCap,
Qt::RoundJoin)) Qt::RoundJoin))
: Style::Line(QPen(c1, w1, Qt::SolidLine, Qt::RoundCap, : Line(QPen(c1, w1, Qt::SolidLine, Qt::RoundCap,
Qt::RoundJoin)); Qt::RoundJoin));
} }
break; break;
@ -642,12 +637,12 @@ bool Style::parseLines(SubFile *file, SubFile::Handle &hdl,
if (!readBitmap(file, hdl, img, 1)) if (!readBitmap(file, hdl, img, 1))
return false; return false;
_lines[type] = Style::Line(img); _lines[type] = Line(img);
} else { } else {
if (!file->readByte(hdl, w1)) if (!file->readUInt8(hdl, w1))
return false; return false;
_lines[type] = Style::Line(QPen(c1, w1, Qt::SolidLine, _lines[type] = Line(QPen(c1, w1, Qt::SolidLine,
Qt::RoundCap, Qt::RoundJoin)); Qt::RoundCap, Qt::RoundJoin));
} }
break; break;
@ -664,12 +659,12 @@ bool Style::parseLines(SubFile *file, SubFile::Handle &hdl,
if (!readBitmap(file, hdl, img, 1)) if (!readBitmap(file, hdl, img, 1))
return false; return false;
_lines[type] = Style::Line(img); _lines[type] = Line(img);
} else { } else {
if (!file->readByte(hdl, w1)) if (!file->readUInt8(hdl, w1))
return false; return false;
_lines[type] = Style::Line(QPen(c1, w1, Qt::SolidLine, _lines[type] = Line(QPen(c1, w1, Qt::SolidLine,
Qt::RoundCap, Qt::RoundJoin)); Qt::RoundCap, Qt::RoundJoin));
} }
break; break;
@ -689,7 +684,7 @@ bool Style::parseLines(SubFile *file, SubFile::Handle &hdl,
if (textColor) { if (textColor) {
quint8 labelFlags; quint8 labelFlags;
if (!file->readByte(hdl, labelFlags)) if (!file->readUInt8(hdl, labelFlags))
return false; return false;
if (labelFlags & 0x08) { if (labelFlags & 0x08) {
if (!readColor(file, hdl, c1)) if (!readColor(file, hdl, c1))
@ -751,7 +746,7 @@ static bool readColorTable(SubFile *file, SubFile::Handle &hdl, QImage& img,
for (int i = 0; i < colors; i++) { for (int i = 0; i < colors; i++) {
while (bits < 28) { while (bits < 28) {
if (!file->readByte(hdl, byte)) if (!file->readUInt8(hdl, byte))
return false; return false;
mask = 0x000000FF << bits; mask = 0x000000FF << bits;
@ -801,9 +796,9 @@ bool Style::parsePoints(SubFile *file, SubFile::Handle &hdl,
quint8 t8_1, width, height, numColors, imgType; quint8 t8_1, width, height, numColors, imgType;
if (!(file->seek(hdl, section.offset + info.offset) if (!(file->seek(hdl, section.offset + info.offset)
&& file->readByte(hdl, t8_1) && file->readByte(hdl, width) && file->readUInt8(hdl, t8_1) && file->readUInt8(hdl, width)
&& file->readByte(hdl, height) && file->readByte(hdl, numColors) && file->readUInt8(hdl, height) && file->readUInt8(hdl, numColors)
&& file->readByte(hdl, imgType))) && file->readUInt8(hdl, imgType)))
return false; return false;
bool localization = t8_1 & 0x04; bool localization = t8_1 & 0x04;
@ -820,8 +815,8 @@ bool Style::parsePoints(SubFile *file, SubFile::Handle &hdl,
_points[type] = Point(img); _points[type] = Point(img);
if (t8_1 == 0x03) { if (t8_1 == 0x03) {
if (!(file->readByte(hdl, numColors) if (!(file->readUInt8(hdl, numColors)
&& file->readByte(hdl, imgType))) && file->readUInt8(hdl, imgType)))
return false; return false;
if ((bpp = colors2bpp(numColors, imgType)) < 0) if ((bpp = colors2bpp(numColors, imgType)) < 0)
continue; continue;
@ -830,8 +825,8 @@ bool Style::parsePoints(SubFile *file, SubFile::Handle &hdl,
if (!readBitmap(file, hdl, img, bpp)) if (!readBitmap(file, hdl, img, bpp))
return false; return false;
} else if (t8_1 == 0x02) { } else if (t8_1 == 0x02) {
if (!(file->readByte(hdl, numColors) if (!(file->readUInt8(hdl, numColors)
&& file->readByte(hdl, imgType))) && file->readUInt8(hdl, imgType)))
return false; return false;
if ((bpp = colors2bpp(numColors, imgType)) < 0) if ((bpp = colors2bpp(numColors, imgType)) < 0)
continue; continue;
@ -845,7 +840,7 @@ bool Style::parsePoints(SubFile *file, SubFile::Handle &hdl,
if (textColor) { if (textColor) {
quint8 labelFlags; quint8 labelFlags;
QColor color; QColor color;
if (!file->readByte(hdl, labelFlags)) if (!file->readUInt8(hdl, labelFlags))
return false; return false;
if (labelFlags & 0x08) { if (labelFlags & 0x08) {
if (!readColor(file, hdl, color)) if (!readColor(file, hdl, color))
@ -874,7 +869,7 @@ bool Style::parseDrawOrder(SubFile *file, SubFile::Handle &hdl,
quint8 type; quint8 type;
quint32 subtype; quint32 subtype;
if (!(file->readByte(hdl, type) && file->readUInt32(hdl, subtype))) if (!(file->readUInt8(hdl, type) && file->readUInt32(hdl, subtype)))
return false; return false;
if (!subtype) if (!subtype)
@ -895,7 +890,7 @@ bool Style::parseDrawOrder(SubFile *file, SubFile::Handle &hdl,
bool Style::parseTYPFile(SubFile *file) bool Style::parseTYPFile(SubFile *file)
{ {
SubFile::Handle hdl; SubFile::Handle hdl(file);
Section points, lines, polygons, order; Section points, lines, polygons, order;
quint16 tmp16, codepage; quint16 tmp16, codepage;
@ -970,27 +965,6 @@ const Style::Point &Style::point(quint32 type) const
return (it == _points.constEnd()) ? null : *it; return (it == _points.constEnd()) ? null : *it;
} }
bool Style::isContourLine(quint32 type)
{
return (type == TYPE(0x20) || type == TYPE(0x21) || type == TYPE(0x22)
|| type == TYPE(0x23) || type == TYPE(0x24) || type == TYPE(0x25));
}
bool Style::isSpot(quint32 type)
{
return (type == TYPE(0x62) || type == TYPE(0x63));
}
bool Style::isSummit(quint32 type)
{
return (type == 0x6616);
}
bool Style::isMajorRoad(quint32 type)
{
return (type <= TYPE(0x04));
}
Style::POIClass Style::poiClass(quint32 type) Style::POIClass Style::poiClass(quint32 type)
{ {
if ((type >= 0x2a00 && type < 0x2b00) || type == 0x2c0a || type == 0x2d02) if ((type >= 0x2a00 && type < 0x2b00) || type == 0x2c0a || type == 0x2d02)
@ -1041,4 +1015,11 @@ QDebug operator<<(QDebug dbg, const Style::Line &line)
<< penColor(line.background()) << ", " << !line.img().isNull() << ")"; << penColor(line.background()) << ", " << !line.img().isNull() << ")";
return dbg.space(); return dbg.space();
} }
QDebug operator<<(QDebug dbg, const Style::Point &point)
{
dbg.nospace() << "Point(" << point.textFontSize() << ", "
<< point.textColor() << ", " << !point.img().isNull() << ")";
return dbg.space();
}
#endif // QT_NO_DEBUG #endif // QT_NO_DEBUG

View File

@ -6,6 +6,7 @@
#include <QDebug> #include <QDebug>
#include "subfile.h" #include "subfile.h"
#define TYPE(t) ((t)<<8)
class Style class Style
{ {
@ -47,6 +48,7 @@ public:
private: private:
QBrush _brush; QBrush _brush;
QPen _pen; QPen _pen;
QColor _textColor;
}; };
class Line { class Line {
@ -80,6 +82,8 @@ public:
class Point { class Point {
public: public:
Point() : _textFontSize(NotSet) {} Point() : _textFontSize(NotSet) {}
Point(FontSize fontSize, const QColor &textColor = QColor())
: _textColor(textColor), _textFontSize(fontSize) {}
Point(const QImage &img) : _textFontSize(NotSet), _img(img) {} Point(const QImage &img) : _textFontSize(NotSet), _img(img) {}
void setTextColor(const QColor &color) {_textColor = color;} void setTextColor(const QColor &color) {_textColor = color;}
@ -103,10 +107,22 @@ public:
const Point &point(quint32 type) const; const Point &point(quint32 type) const;
const QList<quint32> &drawOrder() const {return _drawOrder;} const QList<quint32> &drawOrder() const {return _drawOrder;}
static bool isContourLine(quint32 type); static bool isContourLine(quint32 type)
static bool isSpot(quint32 type); {return ((type >= TYPE(0x20) && type <= TYPE(0x25))
static bool isSummit(quint32 type); || (type & 0xffff00) == TYPE(0x109));}
static bool isMajorRoad(quint32 type); static bool isWaterArea(quint32 type)
{return (type >= TYPE(0x3c) && type <= TYPE(0x44));}
static bool isMilitaryArea(quint32 type)
{return (type == TYPE(0x04));}
static bool isNatureReserve(quint32 type)
{return (type == TYPE(0x16));}
static bool isSpot(quint32 type)
{return (type == TYPE(0x62) || type == TYPE(0x63));}
static bool isSummit(quint32 type)
{return (type == 0x6616);}
static bool isMajorRoad(quint32 type)
{return (type <= TYPE(0x04));}
static POIClass poiClass(quint32 type); static POIClass poiClass(quint32 type);
private: private:
@ -149,6 +165,7 @@ private:
#ifndef QT_NO_DEBUG #ifndef QT_NO_DEBUG
QDebug operator<<(QDebug dbg, const Style::Polygon &polygon); QDebug operator<<(QDebug dbg, const Style::Polygon &polygon);
QDebug operator<<(QDebug dbg, const Style::Line &line); QDebug operator<<(QDebug dbg, const Style::Line &line);
QDebug operator<<(QDebug dbg, const Style::Point &point);
#endif // QT_NO_DEBUG #endif // QT_NO_DEBUG
#endif // STYLE_H #endif // STYLE_H

View File

@ -7,55 +7,147 @@
class SubDiv { class SubDiv {
public: public:
SubDiv(quint32 offset, qint32 lon, qint32 lat, int bits, quint8 objects) class Segment {
: _offset(offset), _end(0), _lon(lon), _lat(lat), _bits(bits), public:
_objects(objects), _polygonsOffset(0), _polygonsEnd(0), _linesOffset(0), Segment() : _offset(0), _end(0) {}
_linesEnd(0), _pointsOffset(0), _pointsEnd(0) {} Segment(quint32 ofset, quint32 end) : _offset(ofset), _end(end) {}
void setEnd(quint32 end) {_end = end;}
bool isValid() const {return (_end > _offset);}
quint32 offset() const {return _offset;}
quint32 end() const {return _end;}
private:
quint32 _offset, _end;
};
SubDiv(quint32 offset, qint32 lon, qint32 lat, int bits, quint8 objects)
: _lon(lon), _lat(lat), _bits(bits), _init(false)
{
_tre.objects = objects;
_tre.offset = offset;
_tre.end = 0;
_tre.extPolygonsOffset = 0;
_tre.extPolygonsEnd = 0;
_tre.extLinesOffset = 0;
_tre.extLinesEnd = 0;
_tre.extPointsOffset = 0;
_tre.extPointsEnd = 0;
}
void setEnd(quint32 end) {_tre.end = end;}
void setExtOffsets(quint32 polygon, quint32 line, quint32 point)
{
_tre.extPolygonsOffset = polygon;
_tre.extLinesOffset = line;
_tre.extPointsOffset = point;
}
void setExtEnds(quint32 polygon, quint32 line, quint32 point)
{
_tre.extPolygonsEnd = polygon;
_tre.extLinesEnd = line;
_tre.extPointsEnd = point;
}
void init(const Segment &points, const Segment &idxPoints,
const Segment &lines, const Segment &polygons,
const Segment &roadReferences, const Segment &extPoints,
const Segment &extLines, const Segment &extPolygons)
{
_rgn.pointsOffset = points.offset();
_rgn.pointsEnd = points.end();
_rgn.idxPointsOffset = idxPoints.offset();
_rgn.idxPointsEnd = idxPoints.end();
_rgn.linesOffset = lines.offset();
_rgn.linesEnd = lines.end();
_rgn.polygonsOffset = polygons.offset();
_rgn.polygonsEnd = polygons.end();
_rgn.roadReferencesOffset = roadReferences.offset();
_rgn.roadReferencesEnd = roadReferences.end();
_rgn.extPointsOffset = extPoints.offset();
_rgn.extPointsEnd = extPoints.end();
_rgn.extLinesOffset = extLines.offset();
_rgn.extLinesEnd = extLines.end();
_rgn.extPolygonsOffset = extPolygons.offset();
_rgn.extPolygonsEnd = extPolygons.end();
_init = true;
}
bool initialized() const {return _init;}
quint32 offset() const {return _offset;}
quint32 end() const {return _end;}
qint32 lon() const {return _lon;} qint32 lon() const {return _lon;}
qint32 lat() const {return _lat;} qint32 lat() const {return _lat;}
quint8 bits() const {return _bits;} quint8 bits() const {return _bits;}
quint8 objects() const {return _objects;}
// Extended types objects (TRE7) // Valid only after initialization
void setExtOffsets(quint32 polygon, quint32 line, quint32 point) Segment points() const
{_polygonsOffset = polygon; _linesOffset = line; _pointsOffset = point;} {return Segment(_rgn.pointsOffset, _rgn.pointsEnd);}
void setExtEnds(quint32 polygon, quint32 line, quint32 point) Segment idxPoints() const
{_polygonsEnd = polygon; _linesEnd = line; _pointsEnd = point;} {return Segment(_rgn.idxPointsOffset, _rgn.idxPointsEnd);}
Segment lines() const
{return Segment(_rgn.linesOffset, _rgn.linesEnd);}
Segment polygons() const
{return Segment(_rgn.polygonsOffset, _rgn.polygonsEnd);}
Segment extPoints() const
{return Segment(_rgn.extPointsOffset, _rgn.extPointsEnd);}
Segment extLines() const
{return Segment(_rgn.extLinesOffset, _rgn.extLinesEnd);}
Segment extPolygons() const
{return Segment(_rgn.extPolygonsOffset, _rgn.extPolygonsEnd);}
quint32 polygonsOffset() const {return _polygonsOffset;} // Valid only until initialization
quint32 polygonsEnd() const {return _polygonsEnd;} quint8 objects() const {return _tre.objects;}
quint32 linesOffset() const {return _linesOffset;} quint32 offset() const {return _tre.offset;}
quint32 linesEnd() const {return _linesEnd;} quint32 end() const {return _tre.end;}
quint32 pointsOffset() const {return _pointsOffset;} quint32 extPolygonsOffset() const {return _tre.extPolygonsOffset;}
quint32 pointsEnd() const {return _pointsEnd;} quint32 extPolygonsEnd() const {return _tre.extPolygonsEnd;}
quint32 extLinesOffset() const {return _tre.extLinesOffset;}
quint32 extLinesEnd() const {return _tre.extLinesEnd;}
quint32 extPointsOffset() const {return _tre.extPointsOffset;}
quint32 extPointsEnd() const {return _tre.extPointsEnd;}
private: private:
quint32 _offset; struct TRE
quint32 _end; {
quint8 objects;
quint32 offset;
quint32 end;
quint32 extPolygonsOffset;
quint32 extPolygonsEnd;
quint32 extLinesOffset;
quint32 extLinesEnd;
quint32 extPointsOffset;
quint32 extPointsEnd;
};
struct RGN
{
quint32 pointsOffset;
quint32 pointsEnd;
quint32 idxPointsOffset;
quint32 idxPointsEnd;
quint32 linesOffset;
quint32 linesEnd;
quint32 polygonsOffset;
quint32 polygonsEnd;
quint32 roadReferencesOffset;
quint32 roadReferencesEnd;
quint32 extPointsOffset;
quint32 extPointsEnd;
quint32 extLinesOffset;
quint32 extLinesEnd;
quint32 extPolygonsOffset;
quint32 extPolygonsEnd;
};
qint32 _lon, _lat; qint32 _lon, _lat;
quint8 _bits; quint8 _bits;
quint8 _objects; bool _init;
union {
quint32 _polygonsOffset; TRE _tre;
quint32 _polygonsEnd; RGN _rgn;
quint32 _linesOffset; };
quint32 _linesEnd;
quint32 _pointsOffset;
quint32 _pointsEnd;
}; };
#ifndef QT_NO_DEBUG
inline QDebug operator<<(QDebug dbg, const SubDiv &subdiv)
{
Coordinates c(toWGS24(subdiv.lon()), toWGS24(subdiv.lat()));
dbg.nospace() << "SubDiv(" << c << ", " << subdiv.offset()
<< ", " << subdiv.end() << ", " << subdiv.objects() << ")";
return dbg.space();
}
#endif // QT_NO_DEBUG
#endif // SUBDIV_H #endif // SUBDIV_H

View File

@ -2,70 +2,43 @@
#include "img.h" #include "img.h"
#include "subfile.h" #include "subfile.h"
SubFile::Type SubFile::type(const char str[3])
{
if (!memcmp(str, "TRE", 3))
return TRE;
else if (!memcmp(str, "RGN", 3))
return RGN;
else if (!memcmp(str, "LBL", 3))
return LBL;
else if (!memcmp(str, "TYP", 3))
return TYP;
else if (!memcmp(str, "GMP", 3))
return GMP;
else if (!memcmp(str, "NET", 3))
return NET;
else
return Unknown;
}
SubFile::SubFile(QFile *file) :_gmpOffset(0), _img(0), _file(file), _blocks(0)
{
if (!_file->open(QIODevice::ReadOnly))
qWarning("Error opening %s: %s", qPrintable(_file->fileName()),
qPrintable(_file->errorString()));
}
bool SubFile::seek(Handle &handle, quint32 pos) const bool SubFile::seek(Handle &handle, quint32 pos) const
{ {
Q_ASSERT(_img || _file); if (handle._file) {
int blockNum = pos / BLOCK_SIZE;
if (_file) if (handle._blockNum != blockNum) {
return _file->seek(pos); if (!handle._file->seek((qint64)blockNum * BLOCK_SIZE))
else { return false;
if (handle._file->read(handle._data.data(), BLOCK_SIZE) < 0)
return false;
handle._blockNum = blockNum;
}
handle._blockPos = pos % BLOCK_SIZE;
handle._pos = pos;
return true;
} else {
quint32 blockSize = _img->blockSize(); quint32 blockSize = _img->blockSize();
int blockNum = pos / blockSize; int blockNum = pos / blockSize;
if (handle.blockNum != blockNum) { if (handle._blockNum != blockNum) {
if (blockNum >= _blocks->size()) if (blockNum >= _blocks->size())
return false; return false;
if (!_img->readBlock(_blocks->at(blockNum), handle.data)) if (!_img->readBlock(_blocks->at(blockNum), handle._data.data()))
return false; return false;
handle.blockNum = blockNum; handle._blockNum = blockNum;
} }
handle.blockPos = pos % blockSize; handle._blockPos = pos % blockSize;
handle.pos = pos; handle._pos = pos;
return true; return true;
} }
} }
bool SubFile::readByte(Handle &handle, quint8 &val) const
{
Q_ASSERT(_img || _file);
if (_file)
return _file->getChar((char*)&val);
else {
val = handle.data.at(handle.blockPos++);
handle.pos++;
return (handle.blockPos >= _img->blockSize())
? seek(handle, handle.pos) : true;
}
}
bool SubFile::readVUInt32(Handle &hdl, quint32 &val) const bool SubFile::readVUInt32(Handle &hdl, quint32 &val) const
{ {
quint8 bytes, shift, b; quint8 bytes, shift, b;
@ -97,24 +70,31 @@ bool SubFile::readVUInt32(Handle &hdl, quint32 &val) const
return true; return true;
} }
QString SubFile::fileName() const bool SubFile::readVBitfield32(Handle &hdl, quint32 &bitfield) const
{ {
return _file ? _file->fileName() : _img->fileName(); quint8 bits;
}
#ifndef QT_NO_DEBUG if (!readUInt8(hdl, bits))
QDebug operator<<(QDebug dbg, const SubFile &file) return false;
{
bool continuous = true; if (!(bits & 1)) {
for (int i = 1; i < file._blocks->size(); i++) { seek(hdl, hdl._pos - 1);
if (file._blocks->at(i) != file._blocks->at(i-1) + 1) { if (!((bits>>1) & 1)) {
continuous = false; if (!((bits>>2) & 1)) {
break; if (!readUInt32(hdl, bitfield))
return false;
} else {
if (!readUInt24(hdl, bitfield))
return false;
}
bitfield >>= 3;
} else {
if (!readUInt16(hdl, bitfield))
return false;
bitfield >>= 2;
} }
} } else
bitfield = bits>>1;
dbg.nospace() << "SubFile(" << file._blocks->size() << ", " return true;
<< continuous << ")";
return dbg.space();
} }
#endif // QT_NO_DEBUG

View File

@ -3,37 +3,74 @@
#include <QVector> #include <QVector>
#include <QDebug> #include <QDebug>
#include <QFile>
#include "img.h"
class IMG;
class QFile; #define BLOCK_SIZE 4096
class SubFile class SubFile
{ {
public: public:
enum Type {Unknown, TRE, RGN, LBL, NET, TYP, GMP}; enum Type {Unknown, TRE, RGN, LBL, NET, TYP, GMP};
struct Handle class Handle
{ {
Handle() : blockNum(-1), blockPos(-1), pos(-1) {} public:
Handle(const SubFile *subFile)
: _file(0), _blockNum(-1), _blockPos(-1), _pos(-1)
{
if (subFile && subFile->_path) {
_file = new QFile(*(subFile->_path));
_file->open(QIODevice::ReadOnly);
_data.resize(BLOCK_SIZE);
} else if (subFile)
_data.resize(subFile->_img->blockSize());
}
~Handle() {delete _file;}
QByteArray data; int pos() const {return _pos;}
int blockNum;
int blockPos; private:
int pos; friend class SubFile;
QFile *_file;
QByteArray _data;
int _blockNum;
int _blockPos;
int _pos;
}; };
SubFile(IMG *img) : _gmpOffset(0), _img(img), _file(0), SubFile(IMG *img)
_blocks(&_blockData) {} : _gmpOffset(0), _img(img), _blocks(new QVector<quint16>()), _path(0) {}
SubFile(SubFile *gmp, quint32 offset) : _gmpOffset(offset), _img(gmp->_img), SubFile(SubFile *gmp, quint32 offset) : _gmpOffset(offset), _img(gmp->_img),
_file(0), _blocks(&(gmp->_blockData)) {} _blocks(gmp->_blocks), _path(gmp->_path) {}
SubFile(QFile *file); SubFile(const QString &path)
: _gmpOffset(0), _img(0), _blocks(0), _path(new QString(path)) {}
~SubFile()
{
if (!_gmpOffset) {
delete _blocks;
delete _path;
}
}
void addBlock(quint16 block) {_blocks->append(block);} void addBlock(quint16 block) {_blocks->append(block);}
bool seek(Handle &handle, quint32 pos) const; bool seek(Handle &handle, quint32 pos) const;
bool readByte(Handle &handle, quint8 &val) const;
bool readUInt16(Handle &handle, quint16 &val) const template<typename T>
bool readUInt8(Handle &handle, T &val) const
{
quint8 b;
if (!readByte(handle, b))
return false;
val = b;
return true;
}
template<typename T>
bool readUInt16(Handle &handle, T &val) const
{ {
quint8 b0, b1; quint8 b0, b1;
if (!(readByte(handle, b0) && readByte(handle, b1))) if (!(readByte(handle, b0) && readByte(handle, b1)))
@ -81,32 +118,41 @@ public:
return true; return true;
} }
bool readVUInt32(Handle &hdl, quint32 &val) const; bool readVUInt32SW(Handle &hdl, quint32 bytes, quint32 &val) const
quint16 offset() const {return _blocks->first();}
QString fileName() const;
static Type type(const char str[3]);
static bool isTileFile(Type type)
{ {
return (type == TRE || type == LBL || type == RGN || type == NET quint8 b;
|| type == GMP);
val = 0;
for (quint32 i = bytes; i; i--) {
if (!readByte(hdl, b))
return false;
val |= ((quint32)b) << ((i-1) * 8);
}
return true;
} }
friend QDebug operator<<(QDebug dbg, const SubFile &file); bool readVUInt32(Handle &hdl, quint32 &val) const;
bool readVBitfield32(Handle &hdl, quint32 &bitfield) const;
QString fileName() const {return _path ? *_path : _img->fileName();}
protected: protected:
quint32 _gmpOffset; quint32 _gmpOffset;
private: private:
bool readByte(Handle &handle, quint8 &val) const
{
int blockSize = _img ? _img->blockSize() : BLOCK_SIZE;
val = handle._data.at(handle._blockPos++);
handle._pos++;
return (handle._blockPos >= blockSize)
? seek(handle, handle._pos) : true;
}
IMG *_img; IMG *_img;
QFile *_file;
QVector<quint16> *_blocks; QVector<quint16> *_blocks;
QVector<quint16> _blockData; QString *_path;
}; };
#ifndef QT_NO_DEBUG
QDebug operator<<(QDebug dbg, const SubFile &file);
#endif // QT_NO_DEBUG
#endif // SUBFILE_H #endif // SUBFILE_H

View File

@ -37,14 +37,14 @@ TREFile::~TREFile()
clear(); clear();
} }
bool TREFile::init() bool TREFile::init(bool baseMap)
{ {
Handle hdl; Handle hdl(this);
quint8 locked; quint8 locked;
quint16 hdrLen; quint16 hdrLen;
if (!(seek(hdl, _gmpOffset) && readUInt16(hdl, hdrLen) if (!(seek(hdl, _gmpOffset) && readUInt16(hdl, hdrLen)
&& seek(hdl, _gmpOffset + 0x0D) && readByte(hdl, locked))) && seek(hdl, _gmpOffset + 0x0D) && readUInt8(hdl, locked)))
return false; return false;
// Tile bounds // Tile bounds
@ -62,12 +62,15 @@ bool TREFile::init()
&& readUInt32(hdl, subdivSize))) && readUInt32(hdl, subdivSize)))
return false; return false;
// TRE7 info
if (hdrLen > 0x9A) { if (hdrLen > 0x9A) {
// TRE7 info
if (!(seek(hdl, _gmpOffset + 0x7C) && readUInt32(hdl, _extended.offset) if (!(seek(hdl, _gmpOffset + 0x7C) && readUInt32(hdl, _extended.offset)
&& readUInt32(hdl, _extended.size) && readUInt32(hdl, _extended.size)
&& readUInt16(hdl, _extended.itemSize))) && readUInt16(hdl, _extended.itemSize)))
return false; return false;
// flags
if (!(seek(hdl, _gmpOffset + 0x86) && readUInt32(hdl, _flags)))
return false;
} }
// Tile levels // Tile levels
@ -75,7 +78,7 @@ bool TREFile::init()
return false; return false;
quint8 levels[64]; quint8 levels[64];
for (quint32 i = 0; i < levelsSize; i++) for (quint32 i = 0; i < levelsSize; i++)
if (!readByte(hdl, levels[i])) if (!readUInt8(hdl, levels[i]))
return false; return false;
if (locked) { if (locked) {
quint32 key; quint32 key;
@ -105,12 +108,14 @@ bool TREFile::init()
} }
} }
_isBaseMap = baseMap;
return (_firstLevel >= 0); return (_firstLevel >= 0);
} }
bool TREFile::load(int idx) bool TREFile::load(int idx)
{ {
Handle hdl; Handle hdl(this);
QList<SubDiv*> sl; QList<SubDiv*> sl;
SubDiv *s = 0; SubDiv *s = 0;
SubDivTree *tree = new SubDivTree(); SubDivTree *tree = new SubDivTree();
@ -126,15 +131,16 @@ bool TREFile::load(int idx)
return false; return false;
for (int j = 0; j < _levels.at(idx).subdivs; j++) { for (int j = 0; j < _levels.at(idx).subdivs; j++) {
quint32 offset; quint32 oo;
qint32 lon, lat; qint32 lon, lat;
quint8 objects;
quint16 width, height, nextLevel; quint16 width, height, nextLevel;
if (!(readUInt24(hdl, offset) && readByte(hdl, objects) if (!(readUInt32(hdl, oo) && readInt24(hdl, lon) && readInt24(hdl, lat)
&& readInt24(hdl, lon) && readInt24(hdl, lat)
&& readUInt16(hdl, width) && readUInt16(hdl, height))) && readUInt16(hdl, width) && readUInt16(hdl, height)))
goto error; goto error;
quint32 offset = oo & 0xfffffff;
quint8 objects = (((qint16)height < 0) << 4) | (oo >> 0x1c);
if (idx != _levels.size() - 1) if (idx != _levels.size() - 1)
if (!readUInt16(hdl, nextLevel)) if (!readUInt16(hdl, nextLevel))
goto error; goto error;
@ -146,6 +152,7 @@ bool TREFile::load(int idx)
width <<= (24 - _levels.at(idx).bits); width <<= (24 - _levels.at(idx).bits);
height <<= (24 - _levels.at(idx).bits); height <<= (24 - _levels.at(idx).bits);
s = new SubDiv(offset, lon, lat, _levels.at(idx).bits, objects); s = new SubDiv(offset, lon, lat, _levels.at(idx).bits, objects);
sl.append(s); sl.append(s);
@ -194,7 +201,7 @@ bool TREFile::load(int idx)
if (i) if (i)
sl.at(i-1)->setExtEnds(polygons, lines, points); sl.at(i-1)->setExtEnds(polygons, lines, points);
if (!seek(hdl, hdl.pos + _extended.itemSize - 12)) if (!seek(hdl, hdl.pos() + _extended.itemSize - 12))
goto error; goto error;
} }
@ -231,10 +238,17 @@ void TREFile::clear()
_subdivs.clear(); _subdivs.clear();
} }
int TREFile::level(int bits) int TREFile::level(int bits, bool baseMap)
{ {
int idx = _firstLevel; int idx = _firstLevel;
if (baseMap) {
if (!_isBaseMap && _levels.at(idx).bits > bits)
return -1;
if (_isBaseMap && bits > _levels.last().bits)
return -1;
}
for (int i = idx + 1; i < _levels.size(); i++) { for (int i = idx + 1; i < _levels.size(); i++) {
if (_levels.at(i).bits > bits) if (_levels.at(i).bits > bits)
break; break;
@ -254,10 +268,10 @@ static bool cb(SubDiv *subdiv, void *context)
return true; return true;
} }
QList<SubDiv*> TREFile::subdivs(const RectC &rect, int bits) QList<SubDiv*> TREFile::subdivs(const RectC &rect, int bits, bool baseMap)
{ {
QList<SubDiv*> list; QList<SubDiv*> list;
SubDivTree *tree = _subdivs.value(level(bits)); SubDivTree *tree = _subdivs.value(level(bits, baseMap));
double min[2], max[2]; double min[2], max[2];
min[0] = rect.left(); min[0] = rect.left();

View File

@ -14,14 +14,17 @@ class TREFile : public SubFile
{ {
public: public:
TREFile(IMG *img) : SubFile(img) {} TREFile(IMG *img) : SubFile(img) {}
TREFile(const QString &path) : SubFile(path) {}
TREFile(SubFile *gmp, quint32 offset) : SubFile(gmp, offset) {} TREFile(SubFile *gmp, quint32 offset) : SubFile(gmp, offset) {}
~TREFile(); ~TREFile();
bool init(); bool init(bool baseMap);
void clear(); void clear();
const RectC &bounds() const {return _bounds;} const RectC &bounds() const {return _bounds;}
QList<SubDiv*> subdivs(const RectC &rect, int bits); QList<SubDiv*> subdivs(const RectC &rect, int bits, bool baseMap);
quint32 shift(quint8 bits) const
{return (bits == _levels.last().bits) ? (_flags >> 0xb) & 7 : 0;}
private: private:
struct MapLevel { struct MapLevel {
@ -39,7 +42,7 @@ private:
typedef RTree<SubDiv*, double, 2> SubDivTree; typedef RTree<SubDiv*, double, 2> SubDivTree;
bool load(int idx); bool load(int idx);
int level(int bits); int level(int bits, bool baseMap);
bool parsePoly(Handle hdl, quint32 pos, const QMap<int, int> &level2bits, bool parsePoly(Handle hdl, quint32 pos, const QMap<int, int> &level2bits,
QMap<quint32, int> &map); QMap<quint32, int> &map);
bool parsePoints(Handle hdl, quint32 pos, const QMap<int, int> &level2bits); bool parsePoints(Handle hdl, quint32 pos, const QMap<int, int> &level2bits);
@ -51,6 +54,8 @@ private:
quint32 _subdivOffset; quint32 _subdivOffset;
Extended _extended; Extended _extended;
int _firstLevel; int _firstLevel;
quint32 _flags;
bool _isBaseMap;
QMap<int, SubDivTree*> _subdivs; QMap<int, SubDivTree*> _subdivs;
}; };

View File

@ -1,5 +1,23 @@
#include "vectortile.h" #include "vectortile.h"
static void copyPolys(const RectC &rect, QList<IMG::Poly> *src,
QList<IMG::Poly> *dst)
{
for (int i = 0; i < src->size(); i++)
if (rect.intersects(src->at(i).boundingRect))
dst->append(src->at(i));
}
static void copyPoints(const RectC &rect, QList<IMG::Point> *src,
QList<IMG::Point> *dst)
{
for (int j = 0; j < src->size(); j++)
if (rect.contains(src->at(j).coordinates))
dst->append(src->at(j));
}
SubFile *VectorTile::file(SubFile::Type type) SubFile *VectorTile::file(SubFile::Type type)
{ {
switch (type) { switch (type) {
@ -41,12 +59,35 @@ SubFile *VectorTile::addFile(IMG *img, SubFile::Type type)
} }
} }
bool VectorTile::init() SubFile *VectorTile::addFile(const QString &path, SubFile::Type type)
{
switch (type) {
case SubFile::TRE:
_tre = new TREFile(path);
return _tre;
case SubFile::RGN:
_rgn = new RGNFile(path);
return _rgn;
case SubFile::LBL:
_lbl = new LBLFile(path);
return _lbl;
case SubFile::NET:
_net = new NETFile(path);
return _net;
case SubFile::GMP:
_gmp = new SubFile(path);
return _gmp;
default:
return 0;
}
}
bool VectorTile::init(bool baseMap)
{ {
if (_gmp && !initGMP()) if (_gmp && !initGMP())
return false; return false;
if (!(_tre && _tre->init() && _rgn)) if (!(_tre && _tre->init(baseMap) && _rgn))
return false; return false;
return true; return true;
@ -54,7 +95,7 @@ bool VectorTile::init()
bool VectorTile::initGMP() bool VectorTile::initGMP()
{ {
SubFile::Handle hdl; SubFile::Handle hdl(_gmp);
quint32 tre, rgn, lbl, net; quint32 tre, rgn, lbl, net;
if (!(_gmp->seek(hdl, 0x19) && _gmp->readUInt32(hdl, tre) if (!(_gmp->seek(hdl, 0x19) && _gmp->readUInt32(hdl, tre)
@ -62,39 +103,91 @@ bool VectorTile::initGMP()
&& _gmp->readUInt32(hdl, net))) && _gmp->readUInt32(hdl, net)))
return false; return false;
_tre = new TREFile(_gmp, tre); _tre = tre ? new TREFile(_gmp, tre) : 0;
_rgn = new RGNFile(_gmp, rgn); _rgn = rgn ? new RGNFile(_gmp, rgn) : 0;
_lbl = new LBLFile(_gmp, lbl); _lbl = lbl ? new LBLFile(_gmp, lbl) : 0;
_net = new NETFile(_gmp, net); _net = net ? new NETFile(_gmp, net) : 0;
return true; return true;
} }
void VectorTile::objects(const RectC &rect, int bits, void VectorTile::polys(const RectC &rect, int bits, bool baseMap,
QList<IMG::Poly> *polygons, QList<IMG::Poly> *lines, QList<IMG::Poly> *polygons, QList<IMG::Poly> *lines,
QList<IMG::Point> *points) const QCache<const SubDiv *, IMG::Polys> *polyCache) const
{ {
QList<SubDiv*> subdivs = _tre->subdivs(rect, bits); SubFile::Handle rgnHdl(_rgn), lblHdl(_lbl), netHdl(_net);
if (!_rgn->initialized() && !_rgn->init(rgnHdl))
return;
QList<SubDiv*> subdivs = _tre->subdivs(rect, bits, baseMap);
for (int i = 0; i < subdivs.size(); i++) { for (int i = 0; i < subdivs.size(); i++) {
_rgn->objects(rect, subdivs.at(i), _lbl, _net, polygons, lines, points); SubDiv *subdiv = subdivs.at(i);
_rgn->extObjects(rect, subdivs.at(i), _lbl, polygons, lines,
points); IMG::Polys *polys = polyCache->object(subdiv);
if (!polys) {
quint32 shift = _tre->shift(subdiv->bits());
QList<IMG::Poly> p, l;
if (!subdiv->initialized() && !_rgn->subdivInit(rgnHdl, subdiv))
continue;
_rgn->polyObjects(rgnHdl, subdiv, RGNFile::Polygon, _lbl, lblHdl,
_net, netHdl, &p);
_rgn->polyObjects(rgnHdl, subdiv, RGNFile::Line, _lbl, lblHdl,
_net, netHdl, &l);
_rgn->extPolyObjects(rgnHdl, subdiv, shift, RGNFile::Polygon, _lbl,
lblHdl, &p);
_rgn->extPolyObjects(rgnHdl, subdiv, shift, RGNFile::Line, _lbl,
lblHdl, &l);
copyPolys(rect, &p, polygons);
copyPolys(rect, &l, lines);
polyCache->insert(subdiv, new IMG::Polys(p, l));
} else {
copyPolys(rect, &(polys->polygons), polygons);
copyPolys(rect, &(polys->lines), lines);
}
}
}
void VectorTile::points(const RectC &rect, int bits, bool baseMap,
QList<IMG::Point> *points, QCache<const SubDiv *,
QList<IMG::Point> > *pointCache) const
{
SubFile::Handle rgnHdl(_rgn), lblHdl(_lbl);
if (!_rgn->initialized() && !_rgn->init(rgnHdl))
return;
QList<SubDiv*> subdivs = _tre->subdivs(rect, bits, baseMap);
for (int i = 0; i < subdivs.size(); i++) {
SubDiv *subdiv = subdivs.at(i);
QList<IMG::Point> *pl = pointCache->object(subdiv);
if (!pl) {
QList<IMG::Point> p;
if (!subdiv->initialized() && !_rgn->subdivInit(rgnHdl, subdiv))
continue;
_rgn->pointObjects(rgnHdl, subdiv, RGNFile::Point, _lbl, lblHdl,
&p);
_rgn->pointObjects(rgnHdl, subdiv, RGNFile::IndexedPoint, _lbl,
lblHdl, &p);
_rgn->extPointObjects(rgnHdl, subdiv, _lbl, lblHdl, &p);
copyPoints(rect, &p, points);
pointCache->insert(subdiv, new QList<IMG::Point>(p));
} else
copyPoints(rect, pl, points);
} }
} }
#ifndef QT_NO_DEBUG #ifndef QT_NO_DEBUG
QDebug operator<<(QDebug dbg, const VectorTile &tile) QDebug operator<<(QDebug dbg, const VectorTile &tile)
{ {
dbg.nospace() << "VectorTile("; dbg.nospace() << "VectorTile(" << tile.bounds() <<")";
if (tile._tre)
dbg << "TRE: " << *(tile._tre);
if (tile._rgn)
dbg << ", RGN: " << *(tile._rgn);
if (tile._lbl)
dbg << ", LBL: " << *(tile._lbl);
if (tile._net)
dbg << ", NET: " << *(tile._net);
dbg << ")";
return dbg.space(); return dbg.space();
} }

View File

@ -1,7 +1,6 @@
#ifndef VECTORTILE_H #ifndef VECTORTILE_H
#define VECTORTILE_H #define VECTORTILE_H
#include "img.h"
#include "trefile.h" #include "trefile.h"
#include "trefile.h" #include "trefile.h"
#include "rgnfile.h" #include "rgnfile.h"
@ -12,20 +11,32 @@ class VectorTile {
public: public:
VectorTile() : _tre(0), _rgn(0), _lbl(0), _net(0), _gmp(0) {} VectorTile() : _tre(0), _rgn(0), _lbl(0), _net(0), _gmp(0) {}
~VectorTile() ~VectorTile()
{delete _tre; delete _rgn; delete _lbl; delete _net; delete _gmp;} {
delete _tre; delete _rgn; delete _lbl; delete _net; delete _gmp;
}
bool init(); bool init(bool baseMap);
void clear() {_tre->clear();} void clear() {_tre->clear();}
const RectC &bounds() const {return _tre->bounds();} const RectC &bounds() const {return _tre->bounds();}
SubFile *file(SubFile::Type type); SubFile *file(SubFile::Type type);
SubFile *addFile(IMG *img, SubFile::Type type); SubFile *addFile(IMG *img, SubFile::Type type);
SubFile *addFile(const QString &path, SubFile::Type type);
void objects(const RectC &rect, int bits, QList<IMG::Poly> *polygons, void polys(const RectC &rect, int bits, bool baseMap,
QList<IMG::Poly> *lines, QList<IMG::Point> *points) const; QList<IMG::Poly> *polygons, QList<IMG::Poly> *lines,
QCache<const SubDiv *, IMG::Polys> *polyCache) const;
void points(const RectC &rect, int bits, bool baseMap,
QList<IMG::Point> *points, QCache<const SubDiv*,
QList<IMG::Point> > *pointCache) const;
friend QDebug operator<<(QDebug dbg, const VectorTile &tile); static bool isTileFile(SubFile::Type type)
{
return (type == SubFile::TRE || type == SubFile::LBL
|| type == SubFile::RGN || type == SubFile::NET
|| type == SubFile::GMP);
}
private: private:
bool initGMP(); bool initGMP();

View File

@ -104,10 +104,10 @@ AlbersEqual::AlbersEqual(const Ellipsoid *ellipsoid, double standardParallel1,
} else } else
_n = sin_lat1; _n = sin_lat1;
_C = sqr_m1 + _n * q1; _c = sqr_m1 + _n * q1;
_a_over_n = ellipsoid->radius() / _n; _a_over_n = ellipsoid->radius() / _n;
nq0 = _n * q0; nq0 = _n * q0;
_rho0 = (_C < nq0) ? 0 : _a_over_n * sqrt(_C - nq0); _rho0 = (_c < nq0) ? 0 : _a_over_n * sqrt(_c - nq0);
} }
PointD AlbersEqual::ll2xy(const Coordinates &c) const PointD AlbersEqual::ll2xy(const Coordinates &c) const
@ -131,7 +131,7 @@ PointD AlbersEqual::ll2xy(const Coordinates &c) const
e_sin = _e * sin_lat; e_sin = _e * sin_lat;
q = ALBERS_Q(sin_lat, ONE_MINUS_SQR(e_sin), e_sin); q = ALBERS_Q(sin_lat, ONE_MINUS_SQR(e_sin), e_sin);
nq = _n * q; nq = _n * q;
rho = (_C < nq) ? 0 : _a_over_n * sqrt(_C - nq); rho = (_c < nq) ? 0 : _a_over_n * sqrt(_c - nq);
theta = _n * dlam; theta = _n * dlam;
return PointD(rho * sin(theta) + _falseEasting, return PointD(rho * sin(theta) + _falseEasting,
@ -168,7 +168,7 @@ Coordinates AlbersEqual::xy2ll(const PointD &p) const
if (rho != 0.0) if (rho != 0.0)
theta = atan2(dx, rho0_minus_dy); theta = atan2(dx, rho0_minus_dy);
rho_n = rho * _n; rho_n = rho * _n;
q = (_C - (rho_n * rho_n) / _a2) / _n; q = (_c - (rho_n * rho_n) / _a2) / _n;
qc = 1 - ((_one_minus_es) / (_two_e)) * log((1.0 - _e) / (1.0 + _e)); qc = 1 - ((_one_minus_es) / (_two_e)) * log((1.0 - _e) / (1.0 + _e));
if (fabs(fabs(qc) - fabs(q)) > 1.0e-6) { if (fabs(fabs(qc) - fabs(q)) > 1.0e-6) {
q_over_2 = q / 2.0; q_over_2 = q / 2.0;

View File

@ -25,7 +25,7 @@ private:
double _a2; double _a2;
double _rho0; double _rho0;
double _C; double _c;
double _n; double _n;
double _e; double _e;
double _es; double _es;

View File

@ -1,5 +1,6 @@
#include <QFile> #include <QFile>
#include <QPainter> #include <QPainter>
#include <QFont>
#include <QPixmapCache> #include <QPixmapCache>
#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) #if QT_VERSION < QT_VERSION_CHECK(5, 0, 0)
#include <QtCore> #include <QtCore>
@ -8,9 +9,13 @@
#endif // QT_VERSION < 5 #endif // QT_VERSION < 5
#include "common/rectc.h" #include "common/rectc.h"
#include "common/wgs84.h" #include "common/wgs84.h"
#include "common/range.h"
#include "IMG/textpathitem.h" #include "IMG/textpathitem.h"
#include "IMG/textpointitem.h" #include "IMG/textpointitem.h"
#include "IMG/bitmapline.h" #include "IMG/bitmapline.h"
#include "IMG/style.h"
#include "IMG/img.h"
#include "IMG/gmap.h"
#include "pcs.h" #include "pcs.h"
#include "rectd.h" #include "rectd.h"
#include "imgmap.h" #include "imgmap.h"
@ -33,18 +38,19 @@ public:
const QString &key() const {return _key;} const QString &key() const {return _key;}
const QPoint &xy() const {return _xy;} const QPoint &xy() const {return _xy;}
QImage &img() {return _img;} QImage &img() {return _img;}
QList<IMG::Poly> &polygons() {return _polygons;} QList<MapData::Poly> &polygons() {return _polygons;}
QList<IMG::Poly> &lines() {return _lines;} QList<MapData::Poly> &lines() {return _lines;}
QList<IMG::Point> &points() {return _points;} QList<MapData::Point> &points() {return _points;}
void render() void render()
{ {
QList<TextItem*> textItems; QList<TextItem*> textItems;
_map->processPolygons(_polygons); QRect tileRect(_xy, QSize(TILE_SIZE, TILE_SIZE));
_map->processPoints(_points, textItems); _map->processPoints(_points, textItems);
_map->processLines(_lines, QRect(_xy, QSize(TILE_SIZE, TILE_SIZE)), _map->processPolygons(_polygons, textItems);
textItems); _map->processLines(_lines, tileRect, textItems);
_img.fill(Qt::transparent); _img.fill(Qt::transparent);
@ -67,9 +73,9 @@ private:
QPoint _xy; QPoint _xy;
QString _key; QString _key;
QImage _img; QImage _img;
QList<IMG::Poly> _polygons; QList<MapData::Poly> _polygons;
QList<IMG::Poly> _lines; QList<MapData::Poly> _lines;
QList<IMG::Point> _points; QList<MapData::Point> _points;
}; };
@ -172,7 +178,7 @@ static int minShieldZoom(Label::Shield::Type type)
switch (type) { switch (type) {
case Label::Shield::USInterstate: case Label::Shield::USInterstate:
case Label::Shield::Hbox: case Label::Shield::Hbox:
return 18; return 17;
case Label::Shield::USShield: case Label::Shield::USShield:
case Label::Shield::Box: case Label::Shield::Box:
return 19; return 19;
@ -184,12 +190,56 @@ static int minShieldZoom(Label::Shield::Type type)
} }
} }
static qreal area(const QVector<QPointF> &polygon)
{
qreal area = 0;
for (int i = 0; i < polygon.size(); i++) {
int j = (i + 1) % polygon.size();
area += polygon.at(i).x() * polygon.at(j).y();
area -= polygon.at(i).y() * polygon.at(j).x();
}
area /= 2.0;
return area;
}
static QPointF centroid(const QVector<QPointF> &polygon)
{
qreal cx = 0, cy = 0;
qreal factor = 1.0 / (6.0 * area(polygon));
for (int i = 0; i < polygon.size(); i++) {
int j = (i + 1) % polygon.size();
qreal f = (polygon.at(i).x() * polygon.at(j).y() - polygon.at(j).x()
* polygon.at(i).y());
cx += (polygon.at(i).x() + polygon.at(j).x()) * f;
cy += (polygon.at(i).y() + polygon.at(j).y()) * f;
}
return QPointF(cx * factor, cy * factor);
}
static bool rectNearPolygon(const QPolygonF &polygon, const QRectF &rect)
{
return (polygon.boundingRect().contains(rect)
&& (polygon.containsPoint(rect.topLeft(), Qt::OddEvenFill)
|| polygon.containsPoint(rect.topRight(), Qt::OddEvenFill)
|| polygon.containsPoint(rect.bottomLeft(), Qt::OddEvenFill)
|| polygon.containsPoint(rect.bottomRight(), Qt::OddEvenFill)));
}
IMGMap::IMGMap(const QString &fileName, QObject *parent) IMGMap::IMGMap(const QString &fileName, QObject *parent)
: Map(parent), _img(fileName), _projection(PCS::pcs(3857)), _valid(false) : Map(parent), _projection(PCS::pcs(3857)), _valid(false)
{ {
if (!_img.isValid()) { if (GMAP::isGMAP(fileName))
_errorString = _img.errorString(); _data = new GMAP(fileName);
else
_data = new IMG(fileName);
if (!_data->isValid()) {
_errorString = _data->errorString();
return; return;
} }
@ -201,17 +251,17 @@ IMGMap::IMGMap(const QString &fileName, QObject *parent)
void IMGMap::load() void IMGMap::load()
{ {
_img.load(); _data->load();
} }
void IMGMap::unload() void IMGMap::unload()
{ {
_img.clear(); _data->clear();
} }
QRectF IMGMap::bounds() QRectF IMGMap::bounds()
{ {
RectD prect(_img.bounds(), _projection); RectD prect(_data->bounds(), _projection);
return QRectF(_transform.proj2img(prect.topLeft()), return QRectF(_transform.proj2img(prect.topLeft()),
_transform.proj2img(prect.bottomRight())); _transform.proj2img(prect.bottomRight()));
} }
@ -261,7 +311,7 @@ Transform IMGMap::transform(int zoom) const
{ {
double scale = _projection.isGeographic() double scale = _projection.isGeographic()
? 360.0 / (1<<zoom) : (2.0 * M_PI * WGS84_RADIUS) / (1<<zoom); ? 360.0 / (1<<zoom) : (2.0 * M_PI * WGS84_RADIUS) / (1<<zoom);
PointD topLeft(_projection.ll2xy(_img.bounds().topLeft())); PointD topLeft(_projection.ll2xy(_data->bounds().topLeft()));
return Transform(ReferencePoint(PointD(0, 0), topLeft), return Transform(ReferencePoint(PointD(0, 0), topLeft),
PointD(scale, scale)); PointD(scale, scale));
} }
@ -281,15 +331,14 @@ Coordinates IMGMap::xy2ll(const QPointF &p)
return _projection.xy2ll(_transform.img2proj(p)); return _projection.xy2ll(_transform.img2proj(p));
} }
void IMGMap::drawPolygons(QPainter *painter, const QList<MapData::Poly> &polygons)
void IMGMap::drawPolygons(QPainter *painter, const QList<IMG::Poly> &polygons)
{ {
for (int n = 0; n < _img.style()->drawOrder().size(); n++) { for (int n = 0; n < _data->style()->drawOrder().size(); n++) {
for (int i = 0; i < polygons.size(); i++) { for (int i = 0; i < polygons.size(); i++) {
const IMG::Poly &poly = polygons.at(i); const MapData::Poly &poly = polygons.at(i);
if (poly.type != _img.style()->drawOrder().at(n)) if (poly.type != _data->style()->drawOrder().at(n))
continue; continue;
const Style::Polygon &style = _img.style()->polygon(poly.type); const Style::Polygon &style = _data->style()->polygon(poly.type);
painter->setPen(style.pen()); painter->setPen(style.pen());
painter->setBrush(style.brush()); painter->setBrush(style.brush());
@ -298,13 +347,13 @@ void IMGMap::drawPolygons(QPainter *painter, const QList<IMG::Poly> &polygons)
} }
} }
void IMGMap::drawLines(QPainter *painter, const QList<IMG::Poly> &lines) void IMGMap::drawLines(QPainter *painter, const QList<MapData::Poly> &lines)
{ {
painter->setBrush(Qt::NoBrush); painter->setBrush(Qt::NoBrush);
for (int i = 0; i < lines.size(); i++) { for (int i = 0; i < lines.size(); i++) {
const IMG::Poly &poly = lines.at(i); const MapData::Poly &poly = lines.at(i);
const Style::Line &style = _img.style()->line(poly.type); const Style::Line &style = _data->style()->line(poly.type);
if (style.background() == Qt::NoPen) if (style.background() == Qt::NoPen)
continue; continue;
@ -314,8 +363,8 @@ void IMGMap::drawLines(QPainter *painter, const QList<IMG::Poly> &lines)
} }
for (int i = 0; i < lines.size(); i++) { for (int i = 0; i < lines.size(); i++) {
const IMG::Poly &poly = lines.at(i); const MapData::Poly &poly = lines.at(i);
const Style::Line &style = _img.style()->line(poly.type); const Style::Line &style = _data->style()->line(poly.type);
if (!style.img().isNull()) if (!style.img().isNull())
BitmapLine::draw(painter, poly.points, style.img()); BitmapLine::draw(painter, poly.points, style.img());
@ -332,25 +381,42 @@ void IMGMap::drawTextItems(QPainter *painter, const QList<TextItem*> &textItems)
textItems.at(i)->paint(painter); textItems.at(i)->paint(painter);
} }
void IMGMap::processPolygons(QList<MapData::Poly> &polygons,
void IMGMap::processPolygons(QList<IMG::Poly> &polygons) QList<TextItem*> &textItems)
{ {
for (int i = 0; i < polygons.size(); i++) { for (int i = 0; i < polygons.size(); i++) {
IMG::Poly &poly = polygons[i]; MapData::Poly &poly = polygons[i];
for (int j = 0; j < poly.points.size(); j++) { for (int j = 0; j < poly.points.size(); j++) {
QPointF &p = poly.points[j]; QPointF &p = poly.points[j];
p = ll2xy(Coordinates(p.x(), p.y())); p = ll2xy(Coordinates(p.x(), p.y()));
} }
if (poly.label.text().isEmpty())
continue;
if (_zoom <= 23 && (Style::isWaterArea(poly.type)
|| Style::isMilitaryArea(poly.type)
|| Style::isNatureReserve(poly.type))) {
const Style::Polygon &style = _data->style()->polygon(poly.type);
TextPointItem *item = new TextPointItem(
centroid(poly.points).toPoint(), &poly.label.text(),
poiFont(), 0, &style.brush().color());
if (item->isValid() && !item->collides(textItems)
&& rectNearPolygon(poly.points, item->boundingRect()))
textItems.append(item);
else
delete item;
}
} }
} }
void IMGMap::processLines(QList<IMG::Poly> &lines, const QRect &tileRect, void IMGMap::processLines(QList<MapData::Poly> &lines, const QRect &tileRect,
QList<TextItem*> &textItems) QList<TextItem*> &textItems)
{ {
qStableSort(lines); qStableSort(lines);
for (int i = 0; i < lines.size(); i++) { for (int i = 0; i < lines.size(); i++) {
IMG::Poly &poly = lines[i]; MapData::Poly &poly = lines[i];
for (int j = 0; j < poly.points.size(); j++) { for (int j = 0; j < poly.points.size(); j++) {
QPointF &p = poly.points[j]; QPointF &p = poly.points[j];
p = ll2xy(Coordinates(p.x(), p.y())); p = ll2xy(Coordinates(p.x(), p.y()));
@ -362,12 +428,12 @@ void IMGMap::processLines(QList<IMG::Poly> &lines, const QRect &tileRect,
processShields(lines, tileRect, textItems); processShields(lines, tileRect, textItems);
} }
void IMGMap::processStreetNames(QList<IMG::Poly> &lines, const QRect &tileRect, void IMGMap::processStreetNames(QList<MapData::Poly> &lines,
QList<TextItem*> &textItems) const QRect &tileRect, QList<TextItem*> &textItems)
{ {
for (int i = 0; i < lines.size(); i++) { for (int i = 0; i < lines.size(); i++) {
IMG::Poly &poly = lines[i]; MapData::Poly &poly = lines[i];
const Style::Line &style = _img.style()->line(poly.type); const Style::Line &style = _data->style()->line(poly.type);
if (style.img().isNull() && style.foreground() == Qt::NoPen) if (style.img().isNull() && style.foreground() == Qt::NoPen)
continue; continue;
@ -391,7 +457,7 @@ void IMGMap::processStreetNames(QList<IMG::Poly> &lines, const QRect &tileRect,
} }
} }
void IMGMap::processShields(QList<IMG::Poly> &lines, const QRect &tileRect, void IMGMap::processShields(QList<MapData::Poly> &lines, const QRect &tileRect,
QList<TextItem*> &textItems) QList<TextItem*> &textItems)
{ {
for (int type = FIRST_SHIELD; type <= LAST_SHIELD; type++) { for (int type = FIRST_SHIELD; type <= LAST_SHIELD; type++) {
@ -402,7 +468,7 @@ void IMGMap::processShields(QList<IMG::Poly> &lines, const QRect &tileRect,
QHash<Label::Shield, const Label::Shield*> sp; QHash<Label::Shield, const Label::Shield*> sp;
for (int i = 0; i < lines.size(); i++) { for (int i = 0; i < lines.size(); i++) {
const IMG::Poly &poly = lines.at(i); const MapData::Poly &poly = lines.at(i);
const Label::Shield &shield = poly.label.shield(); const Label::Shield &shield = poly.label.shield();
if (!shield.isValid() || shield.type() != type if (!shield.isValid() || shield.type() != type
|| !Style::isMajorRoad(poly.type)) || !Style::isMajorRoad(poly.type))
@ -455,14 +521,14 @@ void IMGMap::processShields(QList<IMG::Poly> &lines, const QRect &tileRect,
} }
} }
void IMGMap::processPoints(QList<IMG::Point> &points, void IMGMap::processPoints(QList<MapData::Point> &points,
QList<TextItem*> &textItems) QList<TextItem*> &textItems)
{ {
qSort(points); qSort(points);
for (int i = 0; i < points.size(); i++) { for (int i = 0; i < points.size(); i++) {
IMG::Point &point = points[i]; MapData::Point &point = points[i];
const Style::Point &style = _img.style()->point(point.type); const Style::Point &style = _data->style()->point(point.type);
if (point.poi && _zoom < minPOIZoom(Style::poiClass(point.type))) if (point.poi && _zoom < minPOIZoom(Style::poiClass(point.type)))
continue; continue;
@ -516,7 +582,7 @@ void IMGMap::draw(QPainter *painter, const QRectF &rect, Flags flags)
for (int j = 0; j < height; j++) { for (int j = 0; j < height; j++) {
QPixmap pm; QPixmap pm;
QPoint ttl(tl.x() + i * TILE_SIZE, tl.y() + j * TILE_SIZE); QPoint ttl(tl.x() + i * TILE_SIZE, tl.y() + j * TILE_SIZE);
QString key = _img.fileName() + "-" + QString::number(_zoom) + "_" QString key = _data->fileName() + "-" + QString::number(_zoom) + "_"
+ QString::number(ttl.x()) + "_" + QString::number(ttl.y()); + QString::number(ttl.x()) + "_" + QString::number(ttl.y());
if (QPixmapCache::find(key, pm)) if (QPixmapCache::find(key, pm))
painter->drawPixmap(ttl, pm); painter->drawPixmap(ttl, pm);
@ -526,13 +592,14 @@ void IMGMap::draw(QPainter *painter, const QRectF &rect, Flags flags)
RectD polyRect(_transform.img2proj(ttl), _transform.img2proj( RectD polyRect(_transform.img2proj(ttl), _transform.img2proj(
QPointF(ttl.x() + TILE_SIZE, ttl.y() + TILE_SIZE))); QPointF(ttl.x() + TILE_SIZE, ttl.y() + TILE_SIZE)));
_img.objects(polyRect.toRectC(_projection, 4), _zoom, _data->polys(polyRect.toRectC(_projection, 4), _zoom,
&(tile.polygons()), &(tile.lines()), 0); &(tile.polygons()), &(tile.lines()));
RectD pointRect(_transform.img2proj(QPointF(ttl.x() - TEXT_EXTENT, RectD pointRect(_transform.img2proj(QPointF(ttl.x() - TEXT_EXTENT,
ttl.y() - TEXT_EXTENT)), _transform.img2proj(QPointF(ttl.x() ttl.y() - TEXT_EXTENT)), _transform.img2proj(QPointF(ttl.x()
+ TILE_SIZE + TEXT_EXTENT, ttl.y() + TILE_SIZE + TEXT_EXTENT))); + TILE_SIZE + TEXT_EXTENT, ttl.y() + TILE_SIZE + TEXT_EXTENT)));
_img.objects(pointRect.toRectC(_projection, 4), _zoom, _data->points(pointRect.toRectC(_projection, 4), _zoom,
0, 0, &(tile.points())); &(tile.points()));
} }
} }
} }

View File

@ -1,12 +1,10 @@
#ifndef IMGMAP_H #ifndef IMGMAP_H
#define IMGMAP_H #define IMGMAP_H
#include <QFont>
#include "map.h" #include "map.h"
#include "projection.h" #include "projection.h"
#include "transform.h" #include "transform.h"
#include "common/range.h" #include "IMG/mapdata.h"
#include "IMG/img.h"
class TextItem; class TextItem;
@ -16,8 +14,9 @@ class IMGMap : public Map
public: public:
IMGMap(const QString &fileName, QObject *parent = 0); IMGMap(const QString &fileName, QObject *parent = 0);
~IMGMap() {delete _data;}
QString name() const {return _img.name();} QString name() const {return _data->name();}
QRectF bounds(); QRectF bounds();
@ -45,20 +44,21 @@ private:
Transform transform(int zoom) const; Transform transform(int zoom) const;
void updateTransform(); void updateTransform();
void drawPolygons(QPainter *painter, const QList<IMG::Poly> &polygons); void drawPolygons(QPainter *painter, const QList<MapData::Poly> &polygons);
void drawLines(QPainter *painter, const QList<IMG::Poly> &lines); void drawLines(QPainter *painter, const QList<MapData::Poly> &lines);
void drawTextItems(QPainter *painter, const QList<TextItem*> &textItems); void drawTextItems(QPainter *painter, const QList<TextItem*> &textItems);
void processPolygons(QList<IMG::Poly> &polygons); void processPolygons(QList<MapData::Poly> &polygons,
void processLines(QList<IMG::Poly> &lines, const QRect &tileRect, QList<TextItem *> &textItems);
void processLines(QList<MapData::Poly> &lines, const QRect &tileRect,
QList<TextItem*> &textItems); QList<TextItem*> &textItems);
void processPoints(QList<IMG::Point> &points, QList<TextItem*> &textItems); void processPoints(QList<MapData::Point> &points, QList<TextItem*> &textItems);
void processShields(QList<IMG::Poly> &lines, const QRect &tileRect, void processShields(QList<MapData::Poly> &lines, const QRect &tileRect,
QList<TextItem*> &textItems); QList<TextItem*> &textItems);
void processStreetNames(QList<IMG::Poly> &lines, const QRect &tileRect, void processStreetNames(QList<MapData::Poly> &lines, const QRect &tileRect,
QList<TextItem*> &textItems); QList<TextItem*> &textItems);
IMG _img; MapData *_data;
int _zoom; int _zoom;
Projection _projection; Projection _projection;
Transform _transform; Transform _transform;

View File

@ -15,16 +15,16 @@ Krovak::Krovak(const Ellipsoid *ellipsoid, double standardParallel,
_phiP = deg2rad(standardParallel); _phiP = deg2rad(standardParallel);
_e = sqrt(ellipsoid->es()); _e = sqrt(ellipsoid->es());
_A = ellipsoid->radius() * sqrt(1.0 - ellipsoid->es()) _a = ellipsoid->radius() * sqrt(1.0 - ellipsoid->es())
/ (1.0 - ellipsoid->es() * sinPhiC2); / (1.0 - ellipsoid->es() * sinPhiC2);
_B = sqrt(1.0 + (ellipsoid->es() * cosPhiC4 / (1.0 - ellipsoid->es()))); _b = sqrt(1.0 + (ellipsoid->es() * cosPhiC4 / (1.0 - ellipsoid->es())));
double gamma0 = asin(sinPhiC / _B); double gamma0 = asin(sinPhiC / _b);
_t0 = tan(M_PI_4 + gamma0 / 2.0) * pow((1.0 + _e * sinPhiC) / _t0 = tan(M_PI_4 + gamma0 / 2.0) * pow((1.0 + _e * sinPhiC) /
(1.0 - _e * sinPhiC), _e*_B / 2.0) / pow(tan(M_PI_4 + phiC/2.0), _B); (1.0 - _e * sinPhiC), _e*_b / 2.0) / pow(tan(M_PI_4 + phiC/2.0), _b);
_n = sin(_phiP); _n = sin(_phiP);
_r0 = scale * _A / tan(_phiP); _r0 = scale * _a / tan(_phiP);
_FE = falseEasting; _fe = falseEasting;
_FN = falseNorthing; _fn = falseNorthing;
_cosAlphaC = cos(alphaC); _cosAlphaC = cos(alphaC);
_sinAlphaC = sin(alphaC); _sinAlphaC = sin(alphaC);
_lambda0 = deg2rad(longitudeOrigin); _lambda0 = deg2rad(longitudeOrigin);
@ -35,23 +35,23 @@ PointD Krovak::ll2xy(const Coordinates &c) const
double phi = deg2rad(c.lat()); double phi = deg2rad(c.lat());
double lambda = deg2rad(c.lon()); double lambda = deg2rad(c.lon());
double eSinPhi = _e * sin(phi); double eSinPhi = _e * sin(phi);
double U = 2.0 * (atan(_t0 * pow(tan(phi/2.0 + M_PI_4), _B) double U = 2.0 * (atan(_t0 * pow(tan(phi/2.0 + M_PI_4), _b)
/ pow((1.0 + eSinPhi) / (1.0 - eSinPhi), _e * _B/2.0)) - M_PI_4); / pow((1.0 + eSinPhi) / (1.0 - eSinPhi), _e * _b/2.0)) - M_PI_4);
double cosU = cos(U); double cosU = cos(U);
double V = _B * (_lambda0 - lambda); double V = _b * (_lambda0 - lambda);
double T = asin(_cosAlphaC * sin(U) + _sinAlphaC * cosU * cos(V)); double T = asin(_cosAlphaC * sin(U) + _sinAlphaC * cosU * cos(V));
double D = asin(cosU * sin(V) / cos(T)); double D = asin(cosU * sin(V) / cos(T));
double theta = _n * D; double theta = _n * D;
double r = _r0 * pow(tan(M_PI_4 + _phiP/2.0), _n) double r = _r0 * pow(tan(M_PI_4 + _phiP/2.0), _n)
/ pow(tan(T/2.0 + M_PI_4), _n); / pow(tan(T/2.0 + M_PI_4), _n);
return PointD(r * sin(theta) + _FE, r * cos(theta) + _FN); return PointD(r * sin(theta) + _fe, r * cos(theta) + _fn);
} }
Coordinates Krovak::xy2ll(const PointD &p) const Coordinates Krovak::xy2ll(const PointD &p) const
{ {
double Xp = p.y() - _FN; double Xp = p.y() - _fn;
double Yp = p.x() - _FE; double Yp = p.x() - _fe;
double Xp2 = Xp * Xp; double Xp2 = Xp * Xp;
double Yp2 = Yp * Yp; double Yp2 = Yp * Yp;
double r = sqrt(Xp2 + Yp2); double r = sqrt(Xp2 + Yp2);
@ -63,8 +63,8 @@ Coordinates Krovak::xy2ll(const PointD &p) const
double V = asin(cos(T) * sin(D) / cos(U)); double V = asin(cos(T) * sin(D) / cos(U));
double phi = U; double phi = U;
for (int i = 0; i < 3; i++) for (int i = 0; i < 3; i++)
phi = 2.0 * (atan(pow(_t0, -1.0/_B) * pow(tan(U/2.0 + M_PI_4), 1.0/_B) phi = 2.0 * (atan(pow(_t0, -1.0/_b) * pow(tan(U/2.0 + M_PI_4), 1.0/_b)
* pow((1.0 + _e * sin(phi))/(1.0 - _e * sin(phi)), _e/2.0)) - M_PI_4); * pow((1.0 + _e * sin(phi))/(1.0 - _e * sin(phi)), _e/2.0)) - M_PI_4);
return Coordinates(rad2deg(_lambda0 - V/_B), rad2deg(phi)); return Coordinates(rad2deg(_lambda0 - V/_b), rad2deg(phi));
} }

View File

@ -18,8 +18,8 @@ public:
virtual Coordinates xy2ll(const PointD &p) const; virtual Coordinates xy2ll(const PointD &p) const;
private: private:
double _e, _A, _B, _t0, _n, _r0, _phiP; double _e, _a, _b, _t0, _n, _r0, _phiP;
double _cosAlphaC, _sinAlphaC, _lambda0, _FE, _FN; double _cosAlphaC, _sinAlphaC, _lambda0, _fe, _fn;
}; };
class KrovakNE : public CT class KrovakNE : public CT

View File

@ -11,8 +11,8 @@ LambertAzimuthal::LambertAzimuthal(const Ellipsoid *ellipsoid,
{ {
double lat0 = deg2rad(latitudeOrigin); double lat0 = deg2rad(latitudeOrigin);
_falseEasting = falseEasting; _fe = falseEasting;
_falseNorthing = falseNorthing; _fn = falseNorthing;
_lon0 = deg2rad(longitudeOrigin); _lon0 = deg2rad(longitudeOrigin);
_a = ellipsoid->radius(); _a = ellipsoid->radius();
@ -25,8 +25,8 @@ LambertAzimuthal::LambertAzimuthal(const Ellipsoid *ellipsoid,
_qP = (1.0 - _es) * ((1.0 / (1.0 - _es)) - ((1.0/(2.0*_e)) _qP = (1.0 - _es) * ((1.0 / (1.0 - _es)) - ((1.0/(2.0*_e))
* log((1.0 - _e) / (1.0 + _e)))); * log((1.0 - _e) / (1.0 + _e))));
_beta0 = asin(q0 / _qP); _beta0 = asin(q0 / _qP);
_Rq = _a * sqrt(_qP / 2.0); _rq = _a * sqrt(_qP / 2.0);
_D = _a * (cos(lat0) / sqrt(1.0 - _es * sin2(lat0))) / (_Rq * cos(_beta0)); _d = _a * (cos(lat0) / sqrt(1.0 - _es * sin2(lat0))) / (_rq * cos(_beta0));
} }
PointD LambertAzimuthal::ll2xy(const Coordinates &c) const PointD LambertAzimuthal::ll2xy(const Coordinates &c) const
@ -38,11 +38,11 @@ PointD LambertAzimuthal::ll2xy(const Coordinates &c) const
- ((1.0/(2.0*_e)) * log((1.0 - _e * sin(lat)) / (1.0 + _e - ((1.0/(2.0*_e)) * log((1.0 - _e * sin(lat)) / (1.0 + _e
* sin(lat))))); * sin(lat)))));
double beta = asin(q / _qP); double beta = asin(q / _qP);
double B = _Rq * sqrt(2.0 / (1.0 + sin(_beta0) * sin(beta) + (cos(_beta0) double B = _rq * sqrt(2.0 / (1.0 + sin(_beta0) * sin(beta) + (cos(_beta0)
* cos(beta) * cos(lon - _lon0)))); * cos(beta) * cos(lon - _lon0))));
double x = _falseEasting + ((B * _D) * (cos(beta) * sin(lon - _lon0))); double x = _fe + ((B * _d) * (cos(beta) * sin(lon - _lon0)));
double y = _falseNorthing + (B / _D) * ((cos(_beta0) * sin(beta)) double y = _fn + (B / _d) * ((cos(_beta0) * sin(beta))
- (sin(_beta0) * cos(beta) * cos(lon - _lon0))); - (sin(_beta0) * cos(beta) * cos(lon - _lon0)));
return PointD(x, y); return PointD(x, y);
@ -53,14 +53,14 @@ Coordinates LambertAzimuthal::xy2ll(const PointD &p) const
double es4 = _es * _es; double es4 = _es * _es;
double es6 = _es * es4; double es6 = _es * es4;
double rho = sqrt(sqr((p.x() - _falseEasting) / _D) + sqr(_D * (p.y() double rho = sqrt(sqr((p.x() - _fe) / _d) + sqr(_d * (p.y()
- _falseNorthing))); - _fn)));
double C = 2.0 * asin(rho / (2.0*_Rq)); double C = 2.0 * asin(rho / (2.0*_rq));
double betaS = asin((cos(C) * sin(_beta0)) + ((_D * (p.y() -_falseNorthing) double betaS = asin((cos(C) * sin(_beta0)) + ((_d * (p.y() -_fn)
* sin(C) * cos(_beta0)) / rho)); * sin(C) * cos(_beta0)) / rho));
double lon = _lon0 + atan((p.x() - _falseEasting) * sin(C) / (_D * rho double lon = _lon0 + atan((p.x() - _fe) * sin(C) / (_d * rho
* cos(_beta0) * cos(C) - sqr(_D) * (p.y() - _falseNorthing) * sin(_beta0) * cos(_beta0) * cos(C) - sqr(_d) * (p.y() - _fn) * sin(_beta0)
* sin(C))); * sin(C)));
double lat = betaS + ((_es/3.0 + 31.0*es4/180.0 + 517.0*es6/5040.0) double lat = betaS + ((_es/3.0 + 31.0*es4/180.0 + 517.0*es6/5040.0)
* sin(2.0*betaS)) + ((23.0*es4/360.0 + 251.0*es6/3780.0) * sin(4.0*betaS)) * sin(2.0*betaS)) + ((23.0*es4/360.0 + 251.0*es6/3780.0) * sin(4.0*betaS))

View File

@ -18,9 +18,8 @@ public:
private: private:
double _lon0; double _lon0;
double _falseNorthing; double _fn, _fe;
double _falseEasting; double _a, _e, _es, _qP, _beta0, _rq, _d;
double _a, _e, _es, _qP, _beta0, _Rq, _D;
}; };
#endif // LAMBERTAZIMUTHAL_H #endif // LAMBERTAZIMUTHAL_H

View File

@ -8,51 +8,56 @@
#include "mbtilesmap.h" #include "mbtilesmap.h"
#include "rmap.h" #include "rmap.h"
#include "imgmap.h" #include "imgmap.h"
#include "IMG/gmap.h"
#include "maplist.h" #include "maplist.h"
bool MapList::loadMap(Map* map, const QString &path, bool dir) bool MapList::loadMap(Map *map, const QString &path)
{ {
if (map->isValid()) { if (map && map->isValid()) {
_maps.append(map); _maps.append(map);
return true; return true;
} else if (map) {
_errorPath = path;
_errorString = map->errorString();
return false;
} else { } else {
if (dir) _errorString = path;
_errorString += path + ": " + map->errorString() + "\n"; _errorString = "Unknown file format";
else
_errorString = map->errorString();
return false; return false;
} }
} }
Map *MapList::loadSource(const QString &path, bool dir) Map *MapList::loadSource(const QString &path)
{ {
QString err; Map *map = MapSource::loadMap(path, _errorString);
Map *map = MapSource::loadMap(path, err);
if (!map) { if (!map)
if (dir) _errorPath = path;
_errorString += path + ": " + err + "\n"; else
else
_errorString = err;
} else
map->setParent(this); map->setParent(this);
return map; return map;
} }
bool MapList::loadFile(const QString &path, bool *atlas, bool dir) bool MapList::loadFile(const QString &path, bool *terminate)
{ {
QFileInfo fi(path); QFileInfo fi(path);
QString suffix = fi.suffix().toLower(); QString suffix = fi.suffix().toLower();
Map *map; Map *map = 0;
if (Atlas::isAtlas(path)) { if (Atlas::isAtlas(path)) {
*atlas = true; if (terminate)
*terminate = true;
map = new Atlas(path, this); map = new Atlas(path, this);
} else if (suffix == "xml") { } else if (suffix == "xml") {
if (!(map = loadSource(path, dir))) if (MapSource::isMap(path) && !(map = loadSource(path)))
return false; return false;
else if (GMAP::isGMAP(path)) {
if (terminate)
*terminate = true;
map = new IMGMap(path);
}
} else if (suffix == "jnx") } else if (suffix == "jnx")
map = new JNXMap(path, this); map = new JNXMap(path, this);
else if (suffix == "tif" || suffix == "tiff") else if (suffix == "tif" || suffix == "tiff")
@ -63,10 +68,10 @@ bool MapList::loadFile(const QString &path, bool *atlas, bool dir)
map = new RMap(path, this); map = new RMap(path, this);
else if (suffix == "img") else if (suffix == "img")
map = new IMGMap(path, this); map = new IMGMap(path, this);
else else if (suffix == "map" || suffix == "tar")
map = new OziMap(path, this); map = new OziMap(path, this);
if (!loadMap(map, path, dir)) { if (!loadMap(map, path)) {
delete map; delete map;
return false; return false;
} }
@ -74,7 +79,7 @@ bool MapList::loadFile(const QString &path, bool *atlas, bool dir)
return true; return true;
} }
bool MapList::loadDirR(const QString &path) bool MapList::loadDir(const QString &path)
{ {
QDir md(path); QDir md(path);
md.setFilter(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot); md.setFilter(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot);
@ -85,15 +90,15 @@ bool MapList::loadDirR(const QString &path)
for (int i = 0; i < ml.size(); i++) { for (int i = 0; i < ml.size(); i++) {
const QFileInfo &fi = ml.at(i); const QFileInfo &fi = ml.at(i);
QString suffix = fi.suffix().toLower(); QString suffix = fi.suffix().toLower();
bool atlas = false; bool terminate = false;
if (fi.isDir() && fi.fileName() != "set") { if (fi.isDir() && fi.fileName() != "set") {
if (!loadDirR(fi.absoluteFilePath())) if (!loadDir(fi.absoluteFilePath()))
ret = false; ret = false;
} else if (filter().contains("*." + suffix)) { } else if (filter().contains("*." + suffix)) {
if (!loadFile(fi.absoluteFilePath(), &atlas, true)) if (!loadFile(fi.absoluteFilePath(), &terminate))
ret = false; ret = false;
if (atlas) if (terminate)
break; break;
} }
} }
@ -101,26 +106,11 @@ bool MapList::loadDirR(const QString &path)
return ret; return ret;
} }
bool MapList::loadFile(const QString &path)
{
bool atlas;
_errorString.clear();
return loadFile(path, &atlas, false);
}
bool MapList::loadDir(const QString &path)
{
_errorString.clear();
return loadDirR(path);
}
QString MapList::formats() QString MapList::formats()
{ {
return return
tr("Supported files") tr("Supported files") + " (" + filter().join(" ") + ");;"
+ " (*.img *.jnx *.map *.mbtiles *.rmap *.rtmap *.tar *.tba *.tif *.tiff *.xml);;" + tr("Garmin IMG maps") + " (*.gmap *.gmapi *.img *.xml);;"
+ tr("Garmin IMG maps") + " (*.img);;"
+ tr("Garmin JNX maps") + " (*.jnx);;" + tr("Garmin JNX maps") + " (*.jnx);;"
+ tr("OziExplorer maps") + " (*.map);;" + tr("OziExplorer maps") + " (*.map);;"
+ tr("MBTiles maps") + " (*.mbtiles);;" + tr("MBTiles maps") + " (*.mbtiles);;"
@ -133,7 +123,8 @@ QString MapList::formats()
QStringList MapList::filter() QStringList MapList::filter()
{ {
QStringList filter; QStringList filter;
filter << "*.img" << "*.jnx" << "*.map" << "*.tba" << "*.tar" << "*.xml" filter << "*.gmap" << "*.gmapi" << "*.img" << "*.jnx" << "*.map"
<< "*.tif" << "*.tiff" << "*.mbtiles" << "*.rmap" << "*.rtmap" << "*.img"; << "*.mbtiles" << "*.rmap" << "*.rtmap" << "*.tar" << "*.tba" << "*.tif"
<< "*.tiff" << "*.xml";
return filter; return filter;
} }

View File

@ -13,23 +13,24 @@ class MapList : public QObject
public: public:
MapList(QObject *parent = 0) : QObject(parent) {} MapList(QObject *parent = 0) : QObject(parent) {}
bool loadFile(const QString &path); bool loadFile(const QString &path, bool *terminate = 0);
bool loadDir(const QString &path); bool loadDir(const QString &path);
const QList<Map*> &maps() const {return _maps;} const QList<Map*> &maps() const {return _maps;}
const QString &errorString() const {return _errorString;} const QString &errorString() const {return _errorString;}
const QString &errorPath() const {return _errorPath;}
static QString formats(); static QString formats();
static QStringList filter(); static QStringList filter();
private: private:
bool loadFile(const QString &path, bool *atlas, bool dir); Map *loadSource(const QString &path);
bool loadDirR(const QString &path); bool loadMap(Map *map, const QString &path);
Map *loadSource(const QString &path, bool dir);
bool loadMap(Map *map, const QString &path, bool dir);
QList<Map*> _maps; QList<Map*> _maps;
QString _errorString; QString _errorString;
QString _errorPath;
}; };
#endif // MAPLIST_H #endif // MAPLIST_H

View File

@ -222,6 +222,20 @@ void MapSource::map(QXmlStreamReader &reader, Config &config)
} }
} }
bool MapSource::isMap(const QString &path)
{
QFile file(path);
if (!file.open(QFile::ReadOnly | QFile::Text))
return false;
QXmlStreamReader reader(&file);
if (reader.readNextStartElement() && reader.name() == "map")
return true;
return false;
}
Map *MapSource::loadMap(const QString &path, QString &errorString) Map *MapSource::loadMap(const QString &path, QString &errorString)
{ {
Config config; Config config;

View File

@ -15,6 +15,7 @@ class MapSource
{ {
public: public:
static Map *loadMap(const QString &path, QString &errorString); static Map *loadMap(const QString &path, QString &errorString);
static bool isMap(const QString &path);
private: private:
enum Type { enum Type {

View File

@ -8,7 +8,7 @@
ObliqueStereographic::ObliqueStereographic(const Ellipsoid *ellipsoid, ObliqueStereographic::ObliqueStereographic(const Ellipsoid *ellipsoid,
double latitudeOrigin, double longitudeOrigin, double scale, double latitudeOrigin, double longitudeOrigin, double scale,
double falseEasting, double falseNorthing) double falseEasting, double falseNorthing)
: _FE(falseEasting), _FN(falseNorthing) : _fe(falseEasting), _fn(falseNorthing)
{ {
double lat0 = deg2rad(latitudeOrigin); double lat0 = deg2rad(latitudeOrigin);
double sinPhi0 = sin(lat0); double sinPhi0 = sin(lat0);
@ -48,17 +48,17 @@ PointD ObliqueStereographic::ll2xy(const Coordinates &c) const
double B = (1.0 + sin(chi) * _sinChi0 + cos(chi) * _cosChi0 double B = (1.0 + sin(chi) * _sinChi0 + cos(chi) * _cosChi0
* cos(lambda - _lambda0)); * cos(lambda - _lambda0));
return PointD(_FE + _twoRk0 * cos(chi) * sin(lambda - _lambda0) / B, return PointD(_fe + _twoRk0 * cos(chi) * sin(lambda - _lambda0) / B,
_FN + _twoRk0 * (sin(chi) * _cosChi0 - cos(chi) * _sinChi0 _fn + _twoRk0 * (sin(chi) * _cosChi0 - cos(chi) * _sinChi0
* cos(lambda - _lambda0)) / B); * cos(lambda - _lambda0)) / B);
} }
Coordinates ObliqueStereographic::xy2ll(const PointD &p) const Coordinates ObliqueStereographic::xy2ll(const PointD &p) const
{ {
double i = atan((p.x() - _FE) / (_h + (p.y() - _FN))); double i = atan((p.x() - _fe) / (_h + (p.y() - _fn)));
double j = atan((p.x() - _FE) / (_g - (p.y() - _FN))) - i; double j = atan((p.x() - _fe) / (_g - (p.y() - _fn))) - i;
double chi = _chi0 + 2.0 * atan(((p.y() - _FN) - (p.x() - _FE) * tan(j/2.0)) double chi = _chi0 + 2.0 * atan(((p.y() - _fn) - (p.x() - _fe) * tan(j/2.0))
/ _twoRk0); / _twoRk0);
double lambda = j + 2.0 * i + _lambda0; double lambda = j + 2.0 * i + _lambda0;

View File

@ -22,7 +22,7 @@ private:
double _lambda0; double _lambda0;
double _n; double _n;
double _c; double _c;
double _FE, _FN; double _fe, _fn;
double _twoRk0, _g, _h; double _twoRk0, _g, _h;
}; };