1
0
mirror of https://github.com/tumic0/GPXSee.git synced 2025-07-04 22:59:29 +02:00

Compare commits

...

147 Commits
7.19 ... 7.21

Author SHA1 Message Date
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
82 changed files with 5420 additions and 2147 deletions

View File

@ -1,22 +1,33 @@
version: 7.19.{build}
configuration: Release
platform: Any CPU
version: 7.21.{build}
configuration:
- Release
image:
- Visual Studio 2017
environment:
NSISDIR: C:\Program Files (x86)\NSIS
matrix:
- QTDIR: C:\Qt\5.11\msvc2015
PLATFORM: x86
- QTDIR: C:\Qt\5.13\msvc2017
NSI: gpxsee.nsi
OPENSSLDIR: C:\OpenSSL-Win32\bin
- QTDIR: C:\Qt\5.11\msvc2015_64
PLATFORM: x86_amd64
VCVARS: vcvars32.bat
OPENSSLDIR: C:\OpenSSL-v111-Win32\bin
LIBCRYPTO: libssl-1_1.dll
LIBSSL: libcrypto-1_1.dll
- QTDIR: C:\Qt\5.13\msvc2017_64
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:
- cmd: >-
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:
- cmd: >-
lrelease gpxsee.pro
@ -44,9 +55,9 @@ build_script:
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%

View File

@ -2,7 +2,7 @@
GPXSee is a Qt-based GPS log file viewer and analyzer that supports all common GPS log file formats.
## 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).
* Offline maps (MBTiles, OziExplorer maps, TrekBuddy maps/atlases, Garmin IMG & JNX maps, TwoNav RMaps, GeoTIFF images).
* Elevation, speed, heart rate, cadence, power, temperature and gear ratio/shifts graphs.

View File

@ -3,7 +3,7 @@ unix:!macx {
} else {
TARGET = GPXSee
}
VERSION = 7.19
VERSION = 7.21
QT += core \
gui \
@ -89,6 +89,12 @@ HEADERS += src/common/config.h \
src/GUI/areaitem.h \
src/data/link.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/textpointitem.h \
src/map/projection.h \
@ -188,7 +194,8 @@ HEADERS += src/common/config.h \
src/data/csv.h \
src/data/cupparser.h \
src/data/gpiparser.h \
src/data/address.h
src/data/address.h \
src/data/smlparser.h
SOURCES += src/main.cpp \
src/GUI/popup.cpp \
src/common/coordinates.cpp \
@ -242,6 +249,12 @@ SOURCES += src/main.cpp \
src/GUI/mapview.cpp \
src/GUI/areaitem.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/textpointitem.cpp \
src/map/maplist.cpp \
@ -324,7 +337,8 @@ SOURCES += src/main.cpp \
src/data/csv.cpp \
src/data/cupparser.cpp \
src/GUI/graphicsscene.cpp \
src/data/gpiparser.cpp
src/data/gpiparser.cpp \
src/data/smlparser.cpp
greaterThan(QT_MAJOR_VERSION, 4) {
HEADERS += src/data/geojsonparser.h
@ -349,7 +363,8 @@ TRANSLATIONS = lang/gpxsee_en.ts \
lang/gpxsee_tr.ts \
lang/gpxsee_es.ts \
lang/gpxsee_pt_BR.ts \
lang/gpxsee_uk.ts
lang/gpxsee_uk.ts \
lang/gpxsee_hu.ts
macx {
ICON = icons/gpxsee.icns
@ -387,7 +402,8 @@ macx {
icons/formats/slf.icns \
icons/formats/json.icns \
icons/formats/cup.icns \
icons/formats/gpi.icns
icons/formats/gpi.icns \
icons/formats/sml.icns
QMAKE_BUNDLE_DATA += locale maps icons csv
}
@ -406,7 +422,8 @@ win32 {
icons/formats/slf.ico \
icons/formats/json.ico \
icons/formats/cup.ico \
icons/formats/gpi.ico
icons/formats/gpi.ico \
icons/formats/sml.ico
DEFINES += _USE_MATH_DEFINES \
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
cup:#20a810
gpi:#fca314
sml:#6434eb

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -47,82 +47,87 @@
<context>
<name>Data</name>
<message>
<location filename="../src/data/data.cpp" line="176"/>
<location filename="../src/data/data.cpp" line="179"/>
<source>Supported files</source>
<translation>Formats pris en charge</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="177"/>
<location filename="../src/data/data.cpp" line="180"/>
<source>CSV files</source>
<translation>Données CSV</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="178"/>
<location filename="../src/data/data.cpp" line="181"/>
<source>CUP files</source>
<translation>Données CUP</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="179"/>
<location filename="../src/data/data.cpp" line="182"/>
<source>FIT files</source>
<translation>Données FIT</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="181"/>
<location filename="../src/data/data.cpp" line="184"/>
<source>GeoJSON files</source>
<translation>Données GeoJSON</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="183"/>
<location filename="../src/data/data.cpp" line="186"/>
<source>GPI files</source>
<translation>Données GPI</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="184"/>
<location filename="../src/data/data.cpp" line="187"/>
<source>GPX files</source>
<translation>Données GPX</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="185"/>
<location filename="../src/data/data.cpp" line="188"/>
<source>IGC files</source>
<translation>Données IGC</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="186"/>
<location filename="../src/data/data.cpp" line="189"/>
<source>JPEG images</source>
<translation>Images JPEG</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="187"/>
<location filename="../src/data/data.cpp" line="190"/>
<source>KML files</source>
<translation>Données KML</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="188"/>
<location filename="../src/data/data.cpp" line="191"/>
<source>LOC files</source>
<translation>Données LOC</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="189"/>
<location filename="../src/data/data.cpp" line="192"/>
<source>NMEA files</source>
<translation>Données NMEA</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="190"/>
<location filename="../src/data/data.cpp" line="193"/>
<source>OziExplorer files</source>
<translation>Données OziExplorer</translation>
</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>
<translation>Données TCX</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="191"/>
<location filename="../src/data/data.cpp" line="194"/>
<source>SLF files</source>
<translation>Données SLF</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="193"/>
<location filename="../src/data/data.cpp" line="197"/>
<source>All files</source>
<translation>Tous les fichiers</translation>
</message>
@ -1130,7 +1135,7 @@
</message>
<message>
<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>
<translation>Graphe</translation>
</message>
@ -1232,14 +1237,14 @@
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="322"/>
<location filename="../src/GUI/optionsdialog.cpp" line="429"/>
<location filename="../src/GUI/optionsdialog.cpp" line="492"/>
<location filename="../src/GUI/optionsdialog.cpp" line="432"/>
<location filename="../src/GUI/optionsdialog.cpp" line="495"/>
<source>Elevation:</source>
<translation>Altitude :</translation>
</message>
<message>
<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>
<translation>Vitesse :</translation>
</message>
@ -1295,69 +1300,69 @@
</message>
<message>
<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>
<translation>s</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="389"/>
<location filename="../src/GUI/optionsdialog.cpp" line="392"/>
<source>Minimal speed:</source>
<translation>Vitesse minimale :</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="390"/>
<location filename="../src/GUI/optionsdialog.cpp" line="393"/>
<source>Minimal duration:</source>
<translation>Durée minimale :</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="400"/>
<location filename="../src/GUI/optionsdialog.cpp" line="403"/>
<source>Computed from distance/time</source>
<translation>Calculée comme distance/temps</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="401"/>
<location filename="../src/GUI/optionsdialog.cpp" line="404"/>
<source>Recorded by device</source>
<translation>Enregistrée par l&apos;appareil</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="407"/>
<location filename="../src/GUI/optionsdialog.cpp" line="465"/>
<location filename="../src/GUI/optionsdialog.cpp" line="410"/>
<location filename="../src/GUI/optionsdialog.cpp" line="468"/>
<source>GPS data</source>
<translation>Données GPS</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="408"/>
<location filename="../src/GUI/optionsdialog.cpp" line="466"/>
<location filename="../src/GUI/optionsdialog.cpp" line="411"/>
<location filename="../src/GUI/optionsdialog.cpp" line="469"/>
<source>DEM data</source>
<translation>Données MNT</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="445"/>
<location filename="../src/GUI/optionsdialog.cpp" line="448"/>
<source>Elevation</source>
<translation>Altitude</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="456"/>
<location filename="../src/GUI/optionsdialog.cpp" line="459"/>
<source>Filtering</source>
<translation>Filtrage</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="457"/>
<location filename="../src/GUI/optionsdialog.cpp" line="460"/>
<source>Sources</source>
<translation>Sources</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="458"/>
<location filename="../src/GUI/optionsdialog.cpp" line="461"/>
<source>Pause detection</source>
<translation>Détection des arrêts</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="491"/>
<location filename="../src/GUI/optionsdialog.cpp" line="494"/>
<source>Radius:</source>
<translation>Rayon :</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="439"/>
<location filename="../src/GUI/optionsdialog.cpp" line="442"/>
<source>Speed</source>
<translation>Vitesse</translation>
</message>
@ -1402,144 +1407,144 @@
<translation>Personnalisé</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="477"/>
<location filename="../src/GUI/optionsdialog.cpp" line="480"/>
<source>mi</source>
<translation>mi</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="480"/>
<location filename="../src/GUI/optionsdialog.cpp" line="483"/>
<source>nmi</source>
<translation>nmi</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="483"/>
<location filename="../src/GUI/optionsdialog.cpp" line="486"/>
<source>km</source>
<translation>km</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="498"/>
<location filename="../src/GUI/optionsdialog.cpp" line="638"/>
<location filename="../src/GUI/optionsdialog.cpp" line="501"/>
<location filename="../src/GUI/optionsdialog.cpp" line="641"/>
<source>POI</source>
<translation>POI</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="505"/>
<location filename="../src/GUI/optionsdialog.cpp" line="508"/>
<source>WYSIWYG</source>
<translation>WYSIWYG</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="506"/>
<location filename="../src/GUI/optionsdialog.cpp" line="509"/>
<source>High-Resolution</source>
<translation>Résolution élevée</translation>
</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>
<translation>La zone d&apos;impression est presque celle affichée. L&apos;échelle reste la même.</translation>
</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>
<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>
<location filename="../src/GUI/optionsdialog.cpp" line="535"/>
<location filename="../src/GUI/optionsdialog.cpp" line="538"/>
<source>Name</source>
<translation>Nom</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="537"/>
<location filename="../src/GUI/optionsdialog.cpp" line="540"/>
<source>Date</source>
<translation>Date</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="539"/>
<location filename="../src/GUI/optionsdialog.cpp" line="542"/>
<source>Distance</source>
<translation>Distance</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="541"/>
<location filename="../src/GUI/optionsdialog.cpp" line="544"/>
<source>Time</source>
<translation>Durée</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="543"/>
<location filename="../src/GUI/optionsdialog.cpp" line="546"/>
<source>Moving time</source>
<translation>Durée en déplacement</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="545"/>
<location filename="../src/GUI/optionsdialog.cpp" line="548"/>
<source>Item count (&gt;1)</source>
<translation>Nombre d&apos;éléments (&gt;1)</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="560"/>
<location filename="../src/GUI/optionsdialog.cpp" line="563"/>
<source>Separate graph page</source>
<translation>Sauter une page pour les graphes</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="570"/>
<location filename="../src/GUI/optionsdialog.cpp" line="573"/>
<source>Print mode</source>
<translation>Mode d&apos;impression</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="571"/>
<location filename="../src/GUI/optionsdialog.cpp" line="574"/>
<source>Header</source>
<translation>Entête</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="579"/>
<location filename="../src/GUI/optionsdialog.cpp" line="582"/>
<source>Use OpenGL</source>
<translation>Utiliser OpenGL</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="582"/>
<location filename="../src/GUI/optionsdialog.cpp" line="585"/>
<source>Enable HTTP/2</source>
<translation>Activer l&apos;HTTP/2</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="589"/>
<location filename="../src/GUI/optionsdialog.cpp" line="592"/>
<source>MB</source>
<translation>Mo</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="599"/>
<location filename="../src/GUI/optionsdialog.cpp" line="602"/>
<source>Image cache size:</source>
<translation>Volume du cache à images :</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="600"/>
<location filename="../src/GUI/optionsdialog.cpp" line="603"/>
<source>Connection timeout:</source>
<translation>Délai d&apos;attente de connexion :</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="616"/>
<location filename="../src/GUI/optionsdialog.cpp" line="641"/>
<location filename="../src/GUI/optionsdialog.cpp" line="619"/>
<location filename="../src/GUI/optionsdialog.cpp" line="644"/>
<source>System</source>
<translation>Système</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="634"/>
<location filename="../src/GUI/optionsdialog.cpp" line="637"/>
<source>Appearance</source>
<translation>Apparence</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="636"/>
<location filename="../src/GUI/optionsdialog.cpp" line="639"/>
<source>Maps</source>
<translation>Cartes</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="637"/>
<location filename="../src/GUI/optionsdialog.cpp" line="640"/>
<source>Data</source>
<translation>Données</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="639"/>
<location filename="../src/GUI/optionsdialog.cpp" line="642"/>
<source>Print &amp; Export</source>
<translation>Imprimer et exporter</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="668"/>
<location filename="../src/GUI/optionsdialog.cpp" line="671"/>
<source>Options</source>
<translation>Options</translation>
</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.h" line="16"/>
<source>Cadence</source>
<translation type="unfinished">Stegfrekvens</translation>
<translation>Stegfrekvens</translation>
</message>
<message>
<location filename="../src/GUI/cadencegraph.cpp" line="27"/>
@ -47,82 +47,87 @@
<context>
<name>Data</name>
<message>
<location filename="../src/data/data.cpp" line="176"/>
<location filename="../src/data/data.cpp" line="179"/>
<source>Supported files</source>
<translation>Støttede filer</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="177"/>
<location filename="../src/data/data.cpp" line="180"/>
<source>CSV files</source>
<translation>CSV-filer</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="178"/>
<location filename="../src/data/data.cpp" line="181"/>
<source>CUP files</source>
<translation>CUP-filer</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="179"/>
<location filename="../src/data/data.cpp" line="182"/>
<source>FIT files</source>
<translation>FIT-filer</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="181"/>
<location filename="../src/data/data.cpp" line="184"/>
<source>GeoJSON files</source>
<translation>GeoJSON-filer</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="183"/>
<location filename="../src/data/data.cpp" line="186"/>
<source>GPI files</source>
<translation>GPI-filer</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="184"/>
<location filename="../src/data/data.cpp" line="187"/>
<source>GPX files</source>
<translation>GPX-filer</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="185"/>
<location filename="../src/data/data.cpp" line="188"/>
<source>IGC files</source>
<translation>IGC-filer</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="186"/>
<location filename="../src/data/data.cpp" line="189"/>
<source>JPEG images</source>
<translation>JPEG-bilder</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="187"/>
<location filename="../src/data/data.cpp" line="190"/>
<source>KML files</source>
<translation>KML-filer</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="188"/>
<location filename="../src/data/data.cpp" line="191"/>
<source>LOC files</source>
<translation>LOC-filer</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="189"/>
<location filename="../src/data/data.cpp" line="192"/>
<source>NMEA files</source>
<translation>NMEA-filer</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="190"/>
<location filename="../src/data/data.cpp" line="193"/>
<source>OziExplorer files</source>
<translation>OziExplorer-filer</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="191"/>
<location filename="../src/data/data.cpp" line="194"/>
<source>SLF files</source>
<translation>SLF-filer</translation>
</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>
<translation>TCX-filer</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="193"/>
<location filename="../src/data/data.cpp" line="197"/>
<source>All files</source>
<translation>Alle filer</translation>
</message>
@ -209,7 +214,7 @@
<message>
<location filename="../src/GUI/exportdialog.cpp" line="25"/>
<source>All files</source>
<translation type="unfinished">Alle filer</translation>
<translation>Alle filer</translation>
</message>
<message>
<location filename="../src/GUI/exportdialog.cpp" line="52"/>
@ -234,7 +239,7 @@
<message>
<location filename="../src/GUI/exportdialog.cpp" line="94"/>
<source>Page Setup</source>
<translation>Sideinnstilling</translation>
<translation>Sideoppsett</translation>
</message>
<message>
<location filename="../src/GUI/exportdialog.cpp" line="97"/>
@ -368,17 +373,17 @@
<message>
<location filename="../src/GUI/gui.cpp" line="217"/>
<source>Open...</source>
<translation type="unfinished">Åpne</translation>
<translation>Åpne</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="222"/>
<source>Print...</source>
<translation type="unfinished">Skriv ut</translation>
<translation>Skriv ut</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="229"/>
<source>Export to PDF...</source>
<translation type="unfinished">Eksporter til PDF</translation>
<translation>Eksporter til PDF</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="235"/>
@ -393,12 +398,12 @@
<message>
<location filename="../src/GUI/gui.cpp" line="248"/>
<source>Statistics...</source>
<translation type="unfinished">Statistikk</translation>
<translation>Statistikk</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="256"/>
<source>Load POI file...</source>
<translation type="unfinished">Last inn POI-fil</translation>
<translation>Last inn POI-fil</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="260"/>
@ -428,7 +433,7 @@
<message>
<location filename="../src/GUI/gui.cpp" line="292"/>
<source>Load map...</source>
<translation type="unfinished">Last inn kart</translation>
<translation>Last inn kart</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="296"/>
@ -480,7 +485,7 @@
<message>
<location filename="../src/GUI/gui.cpp" line="352"/>
<source>km/mi markers</source>
<translation type="unfinished">km/mi-markører</translation>
<translation>km/mi-markører</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="359"/>
@ -515,7 +520,7 @@
<message>
<location filename="../src/GUI/gui.cpp" line="393"/>
<source>Show path markers</source>
<translation type="unfinished">Vis veimarkører</translation>
<translation>Vis veimarkører</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="400"/>
@ -552,17 +557,17 @@
<message>
<location filename="../src/GUI/gui.cpp" line="441"/>
<source>Decimal degrees (DD)</source>
<translation type="unfinished">Desimalgrader (DD)</translation>
<translation>Desimalgrader (DD)</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="447"/>
<source>Degrees and decimal minutes (DMM)</source>
<translation type="unfinished">Desimalgrader og desimalminutter (DMM)</translation>
<translation>Desimalgrader og desimalminutter (DMM)</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="454"/>
<source>Degrees, minutes, seconds (DMS)</source>
<translation type="unfinished">Grader, minutter, sekunder (DMS)</translation>
<translation>Grader, minutter, sekunder (DMS)</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="460"/>
@ -572,7 +577,7 @@
<message>
<location filename="../src/GUI/gui.cpp" line="467"/>
<source>Options...</source>
<translation type="unfinished">Valg</translation>
<translation>Valg</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="473"/>
@ -642,7 +647,7 @@
<message>
<location filename="../src/GUI/gui.cpp" line="559"/>
<source>Coordinates format</source>
<translation type="unfinished">Koordinatformat</translation>
<translation>Koordinatformat</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="569"/>
@ -856,7 +861,7 @@
<message numerus="yes">
<location filename="../src/GUI/gui.cpp" line="1351"/>
<source>%n files</source>
<translation type="unfinished">
<translation>
<numerusform>%n fil</numerusform>
<numerusform>%n filer</numerusform>
</translation>
@ -969,7 +974,7 @@
<message>
<location filename="../src/GUI/heartrategraph.cpp" line="11"/>
<source>bpm</source>
<translation type="unfinished">s/m</translation>
<translation>bpm</translation>
</message>
<message>
<location filename="../src/GUI/heartrategraph.cpp" line="12"/>
@ -1090,12 +1095,12 @@
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="176"/>
<source>Palette shift:</source>
<translation type="unfinished">Palettforskyvning:</translation>
<translation>Palettforskyvning:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="120"/>
<source>Track width:</source>
<translation type="unfinished">Sporbredde:</translation>
<translation>Sporbredde:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="80"/>
@ -1110,7 +1115,7 @@
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="121"/>
<source>Track style:</source>
<translation type="unfinished">Sporstil:</translation>
<translation>Sporstil:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="123"/>
@ -1154,12 +1159,12 @@
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="156"/>
<source>Area border style:</source>
<translation type="unfinished">Kantstil for område:</translation>
<translation>Kantstil for område:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="157"/>
<source>Area fill opacity:</source>
<translation type="unfinished">Fylldekkevne for område:</translation>
<translation>Ugjennomsiktighet for område:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="161"/>
@ -1227,7 +1232,7 @@
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="259"/>
<source>Slider color:</source>
<translation type="unfinished">Linjalfarge:</translation>
<translation>Farge skyveregulering:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="282"/>
@ -1251,7 +1256,7 @@
</message>
<message>
<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>
<translation>Diagrammer</translation>
</message>
@ -1267,14 +1272,14 @@
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="322"/>
<location filename="../src/GUI/optionsdialog.cpp" line="429"/>
<location filename="../src/GUI/optionsdialog.cpp" line="492"/>
<location filename="../src/GUI/optionsdialog.cpp" line="432"/>
<location filename="../src/GUI/optionsdialog.cpp" line="495"/>
<source>Elevation:</source>
<translation>Høyde:</translation>
</message>
<message>
<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>
<translation>Hastighet:</translation>
</message>
@ -1311,7 +1316,7 @@
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="352"/>
<source>Automatic</source>
<translation type="unfinished"></translation>
<translation>Automatisk</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="366"/>
@ -1330,216 +1335,216 @@
</message>
<message>
<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>
<translation>s</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="389"/>
<location filename="../src/GUI/optionsdialog.cpp" line="392"/>
<source>Minimal speed:</source>
<translation>Minimumshastighet:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="390"/>
<location filename="../src/GUI/optionsdialog.cpp" line="393"/>
<source>Minimal duration:</source>
<translation>Minimumsvarighet:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="400"/>
<location filename="../src/GUI/optionsdialog.cpp" line="403"/>
<source>Computed from distance/time</source>
<translation>Utregnet fra avstand/tid</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="401"/>
<location filename="../src/GUI/optionsdialog.cpp" line="404"/>
<source>Recorded by device</source>
<translation>Tatt opp av enhet</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="407"/>
<location filename="../src/GUI/optionsdialog.cpp" line="465"/>
<location filename="../src/GUI/optionsdialog.cpp" line="410"/>
<location filename="../src/GUI/optionsdialog.cpp" line="468"/>
<source>GPS data</source>
<translation>GPS-data</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="408"/>
<location filename="../src/GUI/optionsdialog.cpp" line="466"/>
<location filename="../src/GUI/optionsdialog.cpp" line="411"/>
<location filename="../src/GUI/optionsdialog.cpp" line="469"/>
<source>DEM data</source>
<translation>DEM-data</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="445"/>
<location filename="../src/GUI/optionsdialog.cpp" line="448"/>
<source>Elevation</source>
<translation type="unfinished">Høyde</translation>
<translation>Høyde</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="456"/>
<location filename="../src/GUI/optionsdialog.cpp" line="459"/>
<source>Filtering</source>
<translation>Filtrering</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="457"/>
<location filename="../src/GUI/optionsdialog.cpp" line="460"/>
<source>Sources</source>
<translation>Kilder</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="458"/>
<location filename="../src/GUI/optionsdialog.cpp" line="461"/>
<source>Pause detection</source>
<translation>Sett oppdagelse pause</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="491"/>
<location filename="../src/GUI/optionsdialog.cpp" line="494"/>
<source>Radius:</source>
<translation>Radius:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="439"/>
<location filename="../src/GUI/optionsdialog.cpp" line="442"/>
<source>Speed</source>
<translation>Hastighet</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="353"/>
<source>Custom</source>
<translation type="unfinished"></translation>
<translation>Egendefinert</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="477"/>
<location filename="../src/GUI/optionsdialog.cpp" line="480"/>
<source>mi</source>
<translation>mi</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="480"/>
<location filename="../src/GUI/optionsdialog.cpp" line="483"/>
<source>nmi</source>
<translation>nmi</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="483"/>
<location filename="../src/GUI/optionsdialog.cpp" line="486"/>
<source>km</source>
<translation>km</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="498"/>
<location filename="../src/GUI/optionsdialog.cpp" line="638"/>
<location filename="../src/GUI/optionsdialog.cpp" line="501"/>
<location filename="../src/GUI/optionsdialog.cpp" line="641"/>
<source>POI</source>
<translation>POI</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="505"/>
<location filename="../src/GUI/optionsdialog.cpp" line="508"/>
<source>WYSIWYG</source>
<translation>WYSIWYG</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="506"/>
<location filename="../src/GUI/optionsdialog.cpp" line="509"/>
<source>High-Resolution</source>
<translation>Høyoppløsning</translation>
</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>
<translation>Det utskrevne området er omentrent det samme som visningsområdet. Kartforstørrelsesnivået endrer seg ikke.</translation>
</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>
<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>
<location filename="../src/GUI/optionsdialog.cpp" line="535"/>
<location filename="../src/GUI/optionsdialog.cpp" line="538"/>
<source>Name</source>
<translation>Navn</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="537"/>
<location filename="../src/GUI/optionsdialog.cpp" line="540"/>
<source>Date</source>
<translation>Dato</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="539"/>
<location filename="../src/GUI/optionsdialog.cpp" line="542"/>
<source>Distance</source>
<translation>Avstand</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="541"/>
<location filename="../src/GUI/optionsdialog.cpp" line="544"/>
<source>Time</source>
<translation>Tid</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="543"/>
<location filename="../src/GUI/optionsdialog.cpp" line="546"/>
<source>Moving time</source>
<translation>Tid i bevegelse</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="545"/>
<location filename="../src/GUI/optionsdialog.cpp" line="548"/>
<source>Item count (&gt;1)</source>
<translation>Elementantall (&gt;1)</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="560"/>
<location filename="../src/GUI/optionsdialog.cpp" line="563"/>
<source>Separate graph page</source>
<translation>Separat diagramside</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="570"/>
<location filename="../src/GUI/optionsdialog.cpp" line="573"/>
<source>Print mode</source>
<translation>Utskriftsmodus</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="571"/>
<location filename="../src/GUI/optionsdialog.cpp" line="574"/>
<source>Header</source>
<translation>Topptekst</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="579"/>
<location filename="../src/GUI/optionsdialog.cpp" line="582"/>
<source>Use OpenGL</source>
<translation>Bruk OpenGL</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="582"/>
<location filename="../src/GUI/optionsdialog.cpp" line="585"/>
<source>Enable HTTP/2</source>
<translation>Skru HTTP/2</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="589"/>
<location filename="../src/GUI/optionsdialog.cpp" line="592"/>
<source>MB</source>
<translation>MB</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="599"/>
<location filename="../src/GUI/optionsdialog.cpp" line="602"/>
<source>Image cache size:</source>
<translation>Bildehurtiglagringstørrelse:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="600"/>
<location filename="../src/GUI/optionsdialog.cpp" line="603"/>
<source>Connection timeout:</source>
<translation>Tilkoblingstidsavbrudd:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="616"/>
<location filename="../src/GUI/optionsdialog.cpp" line="641"/>
<location filename="../src/GUI/optionsdialog.cpp" line="619"/>
<location filename="../src/GUI/optionsdialog.cpp" line="644"/>
<source>System</source>
<translation>System</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="634"/>
<location filename="../src/GUI/optionsdialog.cpp" line="637"/>
<source>Appearance</source>
<translation>Utseende</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="636"/>
<location filename="../src/GUI/optionsdialog.cpp" line="639"/>
<source>Maps</source>
<translation>Kart</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="637"/>
<location filename="../src/GUI/optionsdialog.cpp" line="640"/>
<source>Data</source>
<translation>Data</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="639"/>
<location filename="../src/GUI/optionsdialog.cpp" line="642"/>
<source>Print &amp; Export</source>
<translation>Utskrift og ekport</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="668"/>
<location filename="../src/GUI/optionsdialog.cpp" line="671"/>
<source>Options</source>
<translation>Valg</translation>
</message>
@ -1663,17 +1668,17 @@
<message>
<location filename="../src/GUI/speedgraph.cpp" line="31"/>
<source>min/km</source>
<translation type="unfinished">min/km</translation>
<translation>min/km</translation>
</message>
<message>
<location filename="../src/GUI/speedgraph.cpp" line="32"/>
<source>min/mi</source>
<translation type="unfinished">min/mi</translation>
<translation>min/mi</translation>
</message>
<message>
<location filename="../src/GUI/speedgraph.cpp" line="32"/>
<source>min/nmi</source>
<translation type="unfinished">min/nmi</translation>
<translation>min/nmi</translation>
</message>
<message>
<location filename="../src/GUI/speedgraph.cpp" line="34"/>
@ -1736,7 +1741,7 @@
<message>
<location filename="../src/GUI/speedgraphitem.cpp" line="28"/>
<source>min/nmi</source>
<translation type="unfinished">min/nmi</translation>
<translation>min/nmi</translation>
</message>
<message>
<location filename="../src/GUI/speedgraphitem.cpp" line="31"/>

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -243,6 +243,22 @@
<key>CFBundleTypeRole</key>
<string>Viewer</string>
</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>
<key>UTImportedTypeDeclarations</key>
@ -541,6 +557,27 @@
<string>application/vnd.garmin.gpi</string>
</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>
</dict>
</plist>

View File

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

View File

@ -4,6 +4,7 @@ Comment=GPS log file viewer and analyzer
Comment[cz]=Prohlížeč a analyzátor GPS logů
Comment[fi]=Ohjelma GPS-lokien katseluun ja analysointiin
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[ru]=Программа для просмотра и анализа GPS логов
Comment[sv]=GPS-loggfilsläsare och analysator
@ -14,4 +15,4 @@ Icon=gpxsee
Terminal=false
Type=Application
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
Name "GPXSee"
; Program version
!define VERSION "7.19"
!define VERSION "7.21"
; The file to write
OutFile "GPXSee-${VERSION}.exe"
@ -106,20 +106,21 @@ Section "GPXSee" SEC_APP
; Associate file formats
DetailPrint "Associating file types..."
!insertmacro FILE_ASSOCIATION_ADD "gpx" "GPS Exchange Format" 7
!insertmacro FILE_ASSOCIATION_ADD "tcx" "Training Center XML" 8
!insertmacro FILE_ASSOCIATION_ADD "kml" "Keyhole Markup Language" 9
!insertmacro FILE_ASSOCIATION_ADD "fit" "Flexible and Interoperable Data Transfer" 10
!insertmacro FILE_ASSOCIATION_ADD "igc" "Flight Recorder Data Format" 11
!insertmacro FILE_ASSOCIATION_ADD "nmea" "NMEA 0183 Data" 12
!insertmacro FILE_ASSOCIATION_ADD "plt" "OziExplorer Track Point File" 13
!insertmacro FILE_ASSOCIATION_ADD "rte" "OziExplorer Route File" 14
!insertmacro FILE_ASSOCIATION_ADD "gpx" "GPS Exchange Format" 8
!insertmacro FILE_ASSOCIATION_ADD "tcx" "Training Center XML" 9
!insertmacro FILE_ASSOCIATION_ADD "kml" "Keyhole Markup Language" 10
!insertmacro FILE_ASSOCIATION_ADD "fit" "Flexible and Interoperable Data Transfer" 11
!insertmacro FILE_ASSOCIATION_ADD "igc" "Flight Recorder Data Format" 12
!insertmacro FILE_ASSOCIATION_ADD "nmea" "NMEA 0183 Data" 13
!insertmacro FILE_ASSOCIATION_ADD "plt" "OziExplorer Track Point File" 14
!insertmacro FILE_ASSOCIATION_ADD "rte" "OziExplorer Route File" 15
!insertmacro FILE_ASSOCIATION_ADD "wpt" "OziExplorer Waypoint File" 1
!insertmacro FILE_ASSOCIATION_ADD "loc" "Geocaching.com Waypoint File" 2
!insertmacro FILE_ASSOCIATION_ADD "slf" "Sigma Log File" 3
!insertmacro FILE_ASSOCIATION_ADD "geojson" "GeoJSON" 4
!insertmacro FILE_ASSOCIATION_ADD "cup" "SeeYou CUP File" 5
!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)'
SectionEnd
@ -147,30 +148,17 @@ Section "MSVC runtime" SEC_MSVC
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
File "vcredist_x86.exe"
ExecWait '"$TEMP\vcredist_x86.exe" /install /quiet /norestart'
SetOutPath $INSTDIR
File "vc_redist.x86.exe"
ExecWait '"$TEMP\vc_redist.x86.exe" /install /quiet /norestart'
SetOutPath $INSTDIR
done:
SectionEnd
Section "OpenSSL" SEC_OPENSSL
File "libeay32.dll"
File "ssleay32.dll"
File "libcrypto-1_1.dll"
File "libssl-1_1.dll"
SectionEnd
@ -188,6 +176,7 @@ SectionGroup "Localization" SEC_LOCALIZATION
!insertmacro LOCALIZATION "Finnish" "fi"
!insertmacro LOCALIZATION "French" "fr"
!insertmacro LOCALIZATION "German" "de"
!insertmacro LOCALIZATION "Hungarian" "hu"
!insertmacro LOCALIZATION "Norwegian" "nb"
!insertmacro LOCALIZATION "Polish" "pl"
!insertmacro LOCALIZATION "Portuguese (Brazil)" "pt_BR"
@ -232,6 +221,7 @@ Section "Uninstall"
!insertmacro FILE_ASSOCIATION_REMOVE "geojson"
!insertmacro FILE_ASSOCIATION_REMOVE "cup"
!insertmacro FILE_ASSOCIATION_REMOVE "gpi"
!insertmacro FILE_ASSOCIATION_REMOVE "sml"
System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) v (0x08000000, 0, 0, 0)'
SectionEnd
@ -244,7 +234,7 @@ SectionEnd
LangString DESC_QT ${LANG_ENGLISH} \
"QT cross-platform application framework."
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} \
"OpenSSL library. Required for HTTPS to work."
LangString DESC_ANGLE ${LANG_ENGLISH} \

View File

@ -98,4 +98,11 @@
<generic-icon name="application/octet-stream"/>
<glob pattern="*.gpi"/>
</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>

View File

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

View File

@ -451,11 +451,11 @@ void GUI::createActions()
_degreesMinutesAction->setActionGroup(ag);
connect(_degreesMinutesAction, SIGNAL(triggered()), this,
SLOT(setDegreesMinutes()));
_DMSAction = new QAction(tr("Degrees, minutes, seconds (DMS)"), this);
_DMSAction->setMenuRole(QAction::NoRole);
_DMSAction->setCheckable(true);
_DMSAction->setActionGroup(ag);
connect(_DMSAction, SIGNAL(triggered()), this, SLOT(setDMS()));
_dmsAction = new QAction(tr("Degrees, minutes, seconds (DMS)"), this);
_dmsAction->setMenuRole(QAction::NoRole);
_dmsAction->setCheckable(true);
_dmsAction->setActionGroup(ag);
connect(_dmsAction, SIGNAL(triggered()), this, SLOT(setDMS()));
_fullscreenAction = new QAction(QIcon(FULLSCREEN_ICON),
tr("Fullscreen mode"), this);
_fullscreenAction->setMenuRole(QAction::NoRole);
@ -559,7 +559,7 @@ void GUI::createMenus()
QMenu *coordinatesMenu = settingsMenu->addMenu(tr("Coordinates format"));
coordinatesMenu->addAction(_decimalDegreesAction);
coordinatesMenu->addAction(_degreesMinutesAction);
coordinatesMenu->addAction(_DMSAction);
coordinatesMenu->addAction(_dmsAction);
settingsMenu->addSeparator();
settingsMenu->addAction(_showToolbarsAction);
settingsMenu->addAction(_fullscreenAction);
@ -1655,7 +1655,7 @@ void GUI::writeSettings()
: _nauticalUnitsAction->isChecked() ? Nautical : Metric;
if (units != UNITS_DEFAULT)
settings.setValue(UNITS_SETTING, units);
CoordinatesFormat format = _DMSAction->isChecked() ? DMS
CoordinatesFormat format = _dmsAction->isChecked() ? DMS
: _degreesMinutesAction->isChecked() ? DegreesMinutes : DecimalDegrees;
if (format != COORDINATES_DEFAULT)
settings.setValue(COORDINATES_SETTING, format);
@ -1879,7 +1879,7 @@ void GUI::readSettings()
value = settings.value(COORDINATES_SETTING, COORDINATES_DEFAULT).toInt();
if (value == DMS)
_DMSAction->trigger();
_dmsAction->trigger();
else if (value == DegreesMinutes)
_degreesMinutesAction->trigger();
else

View File

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

View File

@ -14,7 +14,8 @@ double Coordinates::distanceTo(const Coordinates &c) const
#ifndef QT_NO_DEBUG
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();
}
#endif // QT_NO_DEBUG

View File

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

View File

@ -19,6 +19,7 @@
#include "exifparser.h"
#include "cupparser.h"
#include "gpiparser.h"
#include "smlparser.h"
#include "dem.h"
#include "data.h"
@ -41,6 +42,7 @@ static GeoJSONParser geojson;
static EXIFParser exif;
static CUPParser cup;
static GPIParser gpi;
static SMLParser sml;
static QHash<QString, Parser*> parsers()
{
@ -66,6 +68,7 @@ static QHash<QString, Parser*> parsers()
hash.insert("jpg", &exif);
hash.insert("cup", &cup);
hash.insert("gpi", &gpi);
hash.insert("sml", &sml);
return hash;
}
@ -189,6 +192,7 @@ QString Data::formats()
+ qApp->translate("Data", "NMEA files") + " (*.nmea);;"
+ qApp->translate("Data", "OziExplorer files") + " (*.plt *.rte *.wpt);;"
+ qApp->translate("Data", "SLF files") + " (*.slf);;"
+ qApp->translate("Data", "SML files") + " (*.sml);;"
+ qApp->translate("Data", "TCX files") + " (*.tcx);;"
+ qApp->translate("Data", "All files") + " (*)";
}

View File

@ -82,7 +82,10 @@ double EXIFParser::altitude(TIFFFile &file, const IFDEntry &alt,
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;
if (!file.seek(ll.offset))

View File

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

View File

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

View File

@ -7,15 +7,15 @@ class Link {
public:
Link() {}
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;}
const QString &URL() const {return _URL;}
const QString &URL() const {return _url;}
const QString &text() const {return _text;}
private:
QString _URL;
QString _url;
QString _text;
};

View File

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

View File

@ -8,7 +8,7 @@
class NMEAParser : public Parser
{
public:
NMEAParser() : _errorLine(0), _GGA(false) {}
NMEAParser() : _errorLine(0) {}
bool parse(QFile *file, QList<TrackData> &tracks, QList<RouteData> &routes,
QList<Area> &polygons, QVector<Waypoint> &waypoints);
@ -16,6 +16,14 @@ public:
int errorLine() const {return _errorLine;}
private:
struct CTX {
CTX() : GGA(false) {}
QDate date;
QTime time;
bool GGA;
};
bool readEW(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);
@ -25,17 +33,13 @@ private:
bool readAltitude(const char *data, int len, qreal &ele);
bool readGeoidHeight(const char *data, int len, qreal &gh);
bool readRMC(SegmentData &segment, const char *line, int len);
bool readGGA(SegmentData &segment, const char *line, int len);
bool readWPL(QVector<Waypoint> &waypoints, const char *line, int len);
bool readZDA(const char *line, int len);
bool readRMC(CTX &ctx, const char *line, int len, SegmentData &segment);
bool readGGA(CTX &ctx, const char *line, int len, SegmentData &segment);
bool readWPL(const char *line, int len, QVector<Waypoint> &waypoints);
bool readZDA(CTX &ctx, const char *line, int len);
int _errorLine;
QString _errorString;
QDate _date;
QTime _time;
bool _GGA;
};
#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 "common/programpaths.h"
#include "vectortile.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) \
if (!(condition)) { \
_errorString = "Unsupported or invalid IMG file"; \
qDeleteAll(tileMap); \
return; \
}
struct CTX
{
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) {}
TileMap tileMap;
QByteArray typFile;
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)) {
_errorString = _file.errorString();
return;
@ -54,7 +60,6 @@ IMG::IMG(const QString &fileName)
QByteArray nba(QByteArray(d1, sizeof(d1)) + QByteArray(d2, sizeof(d2)));
_name = QString::fromLatin1(nba.constData(), nba.size()-1).trimmed();
_blockSize = 1 << (e1 + e2);
_blockCache.setMaxCost(CACHE_SIZE / _blockSize);
// Read the FAT table
quint8 flag;
@ -75,22 +80,18 @@ IMG::IMG(const QString &fileName)
offset += 512;
int cnt = (size - offset) / 512;
QMap<QString, VectorTile*> tileMap;
QString typFile;
// Read FAT blocks describing the IMG sub-files
for (int i = 0; i < cnt; i++) {
quint16 block;
CHECK(_file.seek(offset) && readValue(flag) && read(name, sizeof(name))
&& 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)));
if (SubFile::isTileFile(tt)) {
QByteArray fn(name, sizeof(name));
if (VectorTile::isTileFile(tt)) {
VectorTile *tile;
QMap<QString, VectorTile*>::iterator it = tileMap.find(fn);
if (it == tileMap.end()) {
TileMap::const_iterator it = tileMap.find(fn);
if (it == tileMap.constEnd()) {
tile = new VectorTile();
tileMap.insert(fn, tile);
} else
@ -131,80 +132,31 @@ IMG::IMG(const QString &fileName)
}
// Create tile tree
for (QMap<QString, VectorTile*>::iterator it = tileMap.begin();
it != tileMap.end(); ++it) {
CHECK((*it)->init());
for (TileMap::const_iterator it = tileMap.constBegin();
it != tileMap.constEnd(); ++it) {
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];
min[0] = (*it)->bounds().left();
min[1] = (*it)->bounds().bottom();
max[0] = (*it)->bounds().right();
max[1] = (*it)->bounds().top();
_tileTree.Insert(min, max, *it);
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 |= (*it)->bounds();
_bounds |= tile->bounds();
}
_valid = true;
}
IMG::~IMG()
{
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);
if (!_tileTree.Count())
_errorString = "No usable map tile found";
else
_valid = true;
}
qint64 IMG::read(char *data, qint64 maxSize)
@ -228,33 +180,12 @@ template<class T> bool IMG::readValue(T &val)
return true;
}
bool IMG::readBlock(int blockNum, QByteArray &data)
bool IMG::readBlock(int blockNum, char *data)
{
QByteArray *block = _blockCache[blockNum];
if (!block) {
if (!_file.seek((qint64)blockNum * (qint64)_blockSize))
return false;
data.resize(_blockSize);
if (read(data.data(), _blockSize) < _blockSize)
return false;
_blockCache.insert(blockNum, new QByteArray(data));
} else
data = *block;
if (!_file.seek((qint64)blockNum * (qint64)_blockSize))
return false;
if (read(data, _blockSize) < _blockSize)
return false;
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
#define IMG_H
#include <QRect>
#include <QFile>
#include <QByteArray>
#include <QCache>
#include <QDebug>
#include "common/rtree.h"
#include "common/rectc.h"
#include "common/range.h"
#include "style.h"
#include "label.h"
#include "mapdata.h"
class VectorTile;
class SubFile;
class IMG
class IMG : public 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;
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();
void load();
void clear();
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:
friend class SubFile;
typedef RTree<VectorTile*, double, 2> TileTree;
int blockSize() const {return _blockSize;}
bool readBlock(int blockNum, QByteArray &data);
bool readBlock(int blockNum, char *data);
qint64 read(char *data, qint64 maxSize);
template<class T> bool readValue(T &val);
bool init();
QFile _file;
quint8 _key;
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

View File

@ -56,10 +56,10 @@ bool LBLFile::init(Handle &hdl)
quint8 multiplier, poiMultiplier;
if (!(seek(hdl, _gmpOffset + 0x15) && readUInt32(hdl, _offset)
&& readUInt32(hdl, _size) && readByte(hdl, multiplier)
&& readByte(hdl, _encoding) && seek(hdl, _gmpOffset + 0x57)
&& readUInt32(hdl, _size) && readUInt8(hdl, multiplier)
&& readUInt8(hdl, _encoding) && seek(hdl, _gmpOffset + 0x57)
&& readUInt32(hdl, _poiOffset) && readUInt32(hdl, _poiSize)
&& readByte(hdl, poiMultiplier) && seek(hdl, _gmpOffset + 0xAA)
&& readUInt8(hdl, poiMultiplier) && seek(hdl, _gmpOffset + 0xAA)
&& readUInt16(hdl, codepage)))
return false;
@ -89,7 +89,7 @@ Label LBLFile::label6b(Handle &hdl, quint32 offset) const
return Label();
while (true) {
if (!(readByte(hdl, b1) && readByte(hdl, b2) && readByte(hdl, b3)))
if (!(readUInt8(hdl, b1) && readUInt8(hdl, b2) && readUInt8(hdl, b3)))
return Label();
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();
while (true) {
if (!readByte(hdl, c))
if (!readUInt8(hdl, c))
return Label();
if (!c || c == 0x1d)
break;

View File

@ -12,6 +12,9 @@ public:
LBLFile(IMG *img)
: SubFile(img), _codec(0), _offset(0), _size(0), _poiOffset(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),
_codec(0), _offset(0), _size(0), _poiOffset(0), _poiSize(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)
{
quint8 multiplier;
quint16 hdrLen;
if (!(seek(hdl, _gmpOffset + 0x15) && readUInt32(hdl, _offset)
&& readUInt32(hdl, _size) && readByte(hdl, multiplier)))
if (!(seek(hdl, _gmpOffset) && readUInt16(hdl, hdrLen)
&& seek(hdl, _gmpOffset + 0x15) && readUInt32(hdl, _offset)
&& readUInt32(hdl, _size) && readUInt8(hdl, multiplier)))
return false;
_multiplier = 1<<multiplier;

View File

@ -6,17 +6,19 @@
class NETFile : public SubFile
{
public:
NETFile(IMG *img) : SubFile(img), _offset(0), _size(0), _multiplier(0) {}
NETFile(SubFile *gmp, quint32 offset) : SubFile(gmp, offset),
_offset(0), _size(0), _multiplier(0) {}
NETFile(IMG *img)
: SubFile(img), _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);
private:
bool init(Handle &hdl);
quint32 _offset;
quint32 _size;
quint32 _offset, _size;
quint8 _multiplier;
};

View File

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

View File

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

View File

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

View File

@ -7,55 +7,147 @@
class SubDiv {
public:
SubDiv(quint32 offset, qint32 lon, qint32 lat, int bits, quint8 objects)
: _offset(offset), _end(0), _lon(lon), _lat(lat), _bits(bits),
_objects(objects), _polygonsOffset(0), _polygonsEnd(0), _linesOffset(0),
_linesEnd(0), _pointsOffset(0), _pointsEnd(0) {}
void setEnd(quint32 end) {_end = end;}
class Segment {
public:
Segment() : _offset(0), _end(0) {}
Segment(quint32 ofset, quint32 end) : _offset(ofset), _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 lat() const {return _lat;}
quint8 bits() const {return _bits;}
quint8 objects() const {return _objects;}
// Extended types objects (TRE7)
void setExtOffsets(quint32 polygon, quint32 line, quint32 point)
{_polygonsOffset = polygon; _linesOffset = line; _pointsOffset = point;}
void setExtEnds(quint32 polygon, quint32 line, quint32 point)
{_polygonsEnd = polygon; _linesEnd = line; _pointsEnd = point;}
// Valid only after initialization
Segment points() const
{return Segment(_rgn.pointsOffset, _rgn.pointsEnd);}
Segment idxPoints() const
{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;}
quint32 polygonsEnd() const {return _polygonsEnd;}
quint32 linesOffset() const {return _linesOffset;}
quint32 linesEnd() const {return _linesEnd;}
quint32 pointsOffset() const {return _pointsOffset;}
quint32 pointsEnd() const {return _pointsEnd;}
// Valid only until initialization
quint8 objects() const {return _tre.objects;}
quint32 offset() const {return _tre.offset;}
quint32 end() const {return _tre.end;}
quint32 extPolygonsOffset() const {return _tre.extPolygonsOffset;}
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:
quint32 _offset;
quint32 _end;
struct TRE
{
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;
quint8 _bits;
quint8 _objects;
quint32 _polygonsOffset;
quint32 _polygonsEnd;
quint32 _linesOffset;
quint32 _linesEnd;
quint32 _pointsOffset;
quint32 _pointsEnd;
bool _init;
union {
TRE _tre;
RGN _rgn;
};
};
#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

View File

@ -2,70 +2,43 @@
#include "img.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
{
Q_ASSERT(_img || _file);
if (handle._file) {
int blockNum = pos / BLOCK_SIZE;
if (_file)
return _file->seek(pos);
else {
if (handle._blockNum != blockNum) {
if (!handle._file->seek((qint64)blockNum * BLOCK_SIZE))
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();
int blockNum = pos / blockSize;
if (handle.blockNum != blockNum) {
if (handle._blockNum != blockNum) {
if (blockNum >= _blocks->size())
return false;
if (!_img->readBlock(_blocks->at(blockNum), handle.data))
if (!_img->readBlock(_blocks->at(blockNum), handle._data.data()))
return false;
handle.blockNum = blockNum;
handle._blockNum = blockNum;
}
handle.blockPos = pos % blockSize;
handle.pos = pos;
handle._blockPos = pos % blockSize;
handle._pos = pos;
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
{
quint8 bytes, shift, b;
@ -97,24 +70,31 @@ bool SubFile::readVUInt32(Handle &hdl, quint32 &val) const
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
QDebug operator<<(QDebug dbg, const SubFile &file)
{
bool continuous = true;
for (int i = 1; i < file._blocks->size(); i++) {
if (file._blocks->at(i) != file._blocks->at(i-1) + 1) {
continuous = false;
break;
if (!readUInt8(hdl, bits))
return false;
if (!(bits & 1)) {
seek(hdl, hdl._pos - 1);
if (!((bits>>1) & 1)) {
if (!((bits>>2) & 1)) {
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() << ", "
<< continuous << ")";
return dbg.space();
return true;
}
#endif // QT_NO_DEBUG

View File

@ -3,37 +3,74 @@
#include <QVector>
#include <QDebug>
#include <QFile>
#include "img.h"
class IMG;
class QFile;
#define BLOCK_SIZE 4096
class SubFile
{
public:
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 blockNum;
int blockPos;
int pos;
int pos() const {return _pos;}
private:
friend class SubFile;
QFile *_file;
QByteArray _data;
int _blockNum;
int _blockPos;
int _pos;
};
SubFile(IMG *img) : _gmpOffset(0), _img(img), _file(0),
_blocks(&_blockData) {}
SubFile(IMG *img)
: _gmpOffset(0), _img(img), _blocks(new QVector<quint16>()), _path(0) {}
SubFile(SubFile *gmp, quint32 offset) : _gmpOffset(offset), _img(gmp->_img),
_file(0), _blocks(&(gmp->_blockData)) {}
SubFile(QFile *file);
_blocks(gmp->_blocks), _path(gmp->_path) {}
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);}
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;
if (!(readByte(handle, b0) && readByte(handle, b1)))
@ -81,32 +118,41 @@ public:
return true;
}
bool readVUInt32(Handle &hdl, quint32 &val) const;
quint16 offset() const {return _blocks->first();}
QString fileName() const;
static Type type(const char str[3]);
static bool isTileFile(Type type)
bool readVUInt32SW(Handle &hdl, quint32 bytes, quint32 &val) const
{
return (type == TRE || type == LBL || type == RGN || type == NET
|| type == GMP);
quint8 b;
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:
quint32 _gmpOffset;
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;
QFile *_file;
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

View File

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

View File

@ -14,14 +14,17 @@ class TREFile : public SubFile
{
public:
TREFile(IMG *img) : SubFile(img) {}
TREFile(const QString &path) : SubFile(path) {}
TREFile(SubFile *gmp, quint32 offset) : SubFile(gmp, offset) {}
~TREFile();
bool init();
bool init(bool baseMap);
void clear();
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:
struct MapLevel {
@ -39,7 +42,7 @@ private:
typedef RTree<SubDiv*, double, 2> SubDivTree;
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,
QMap<quint32, int> &map);
bool parsePoints(Handle hdl, quint32 pos, const QMap<int, int> &level2bits);
@ -51,6 +54,8 @@ private:
quint32 _subdivOffset;
Extended _extended;
int _firstLevel;
quint32 _flags;
bool _isBaseMap;
QMap<int, SubDivTree*> _subdivs;
};

View File

@ -1,5 +1,23 @@
#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)
{
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())
return false;
if (!(_tre && _tre->init() && _rgn))
if (!(_tre && _tre->init(baseMap) && _rgn))
return false;
return true;
@ -54,7 +95,7 @@ bool VectorTile::init()
bool VectorTile::initGMP()
{
SubFile::Handle hdl;
SubFile::Handle hdl(_gmp);
quint32 tre, rgn, lbl, net;
if (!(_gmp->seek(hdl, 0x19) && _gmp->readUInt32(hdl, tre)
@ -62,39 +103,91 @@ bool VectorTile::initGMP()
&& _gmp->readUInt32(hdl, net)))
return false;
_tre = new TREFile(_gmp, tre);
_rgn = new RGNFile(_gmp, rgn);
_lbl = new LBLFile(_gmp, lbl);
_net = new NETFile(_gmp, net);
_tre = tre ? new TREFile(_gmp, tre) : 0;
_rgn = rgn ? new RGNFile(_gmp, rgn) : 0;
_lbl = lbl ? new LBLFile(_gmp, lbl) : 0;
_net = net ? new NETFile(_gmp, net) : 0;
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::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++) {
_rgn->objects(rect, subdivs.at(i), _lbl, _net, polygons, lines, points);
_rgn->extObjects(rect, subdivs.at(i), _lbl, polygons, lines,
points);
SubDiv *subdiv = subdivs.at(i);
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
QDebug operator<<(QDebug dbg, const VectorTile &tile)
{
dbg.nospace() << "VectorTile(";
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 << ")";
dbg.nospace() << "VectorTile(" << tile.bounds() <<")";
return dbg.space();
}

View File

@ -1,7 +1,6 @@
#ifndef VECTORTILE_H
#define VECTORTILE_H
#include "img.h"
#include "trefile.h"
#include "trefile.h"
#include "rgnfile.h"
@ -12,20 +11,32 @@ class VectorTile {
public:
VectorTile() : _tre(0), _rgn(0), _lbl(0), _net(0), _gmp(0) {}
~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();}
const RectC &bounds() const {return _tre->bounds();}
SubFile *file(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,
QList<IMG::Poly> *lines, QList<IMG::Point> *points) const;
void polys(const RectC &rect, int bits, bool baseMap,
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:
bool initGMP();

View File

@ -104,10 +104,10 @@ AlbersEqual::AlbersEqual(const Ellipsoid *ellipsoid, double standardParallel1,
} else
_n = sin_lat1;
_C = sqr_m1 + _n * q1;
_c = sqr_m1 + _n * q1;
_a_over_n = ellipsoid->radius() / _n;
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
@ -131,7 +131,7 @@ PointD AlbersEqual::ll2xy(const Coordinates &c) const
e_sin = _e * sin_lat;
q = ALBERS_Q(sin_lat, ONE_MINUS_SQR(e_sin), e_sin);
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;
return PointD(rho * sin(theta) + _falseEasting,
@ -168,7 +168,7 @@ Coordinates AlbersEqual::xy2ll(const PointD &p) const
if (rho != 0.0)
theta = atan2(dx, rho0_minus_dy);
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));
if (fabs(fabs(qc) - fabs(q)) > 1.0e-6) {
q_over_2 = q / 2.0;

View File

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

View File

@ -1,5 +1,6 @@
#include <QFile>
#include <QPainter>
#include <QFont>
#include <QPixmapCache>
#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0)
#include <QtCore>
@ -8,9 +9,13 @@
#endif // QT_VERSION < 5
#include "common/rectc.h"
#include "common/wgs84.h"
#include "common/range.h"
#include "IMG/textpathitem.h"
#include "IMG/textpointitem.h"
#include "IMG/bitmapline.h"
#include "IMG/style.h"
#include "IMG/img.h"
#include "IMG/gmap.h"
#include "pcs.h"
#include "rectd.h"
#include "imgmap.h"
@ -33,18 +38,19 @@ public:
const QString &key() const {return _key;}
const QPoint &xy() const {return _xy;}
QImage &img() {return _img;}
QList<IMG::Poly> &polygons() {return _polygons;}
QList<IMG::Poly> &lines() {return _lines;}
QList<IMG::Point> &points() {return _points;}
QList<MapData::Poly> &polygons() {return _polygons;}
QList<MapData::Poly> &lines() {return _lines;}
QList<MapData::Point> &points() {return _points;}
void render()
{
QList<TextItem*> textItems;
_map->processPolygons(_polygons);
QRect tileRect(_xy, QSize(TILE_SIZE, TILE_SIZE));
_map->processPoints(_points, textItems);
_map->processLines(_lines, QRect(_xy, QSize(TILE_SIZE, TILE_SIZE)),
textItems);
_map->processPolygons(_polygons, textItems);
_map->processLines(_lines, tileRect, textItems);
_img.fill(Qt::transparent);
@ -67,9 +73,9 @@ private:
QPoint _xy;
QString _key;
QImage _img;
QList<IMG::Poly> _polygons;
QList<IMG::Poly> _lines;
QList<IMG::Point> _points;
QList<MapData::Poly> _polygons;
QList<MapData::Poly> _lines;
QList<MapData::Point> _points;
};
@ -172,7 +178,7 @@ static int minShieldZoom(Label::Shield::Type type)
switch (type) {
case Label::Shield::USInterstate:
case Label::Shield::Hbox:
return 18;
return 17;
case Label::Shield::USShield:
case Label::Shield::Box:
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)
: Map(parent), _img(fileName), _projection(PCS::pcs(3857)), _valid(false)
: Map(parent), _projection(PCS::pcs(3857)), _valid(false)
{
if (!_img.isValid()) {
_errorString = _img.errorString();
if (GMAP::isGMAP(fileName))
_data = new GMAP(fileName);
else
_data = new IMG(fileName);
if (!_data->isValid()) {
_errorString = _data->errorString();
return;
}
@ -201,17 +251,17 @@ IMGMap::IMGMap(const QString &fileName, QObject *parent)
void IMGMap::load()
{
_img.load();
_data->load();
}
void IMGMap::unload()
{
_img.clear();
_data->clear();
}
QRectF IMGMap::bounds()
{
RectD prect(_img.bounds(), _projection);
RectD prect(_data->bounds(), _projection);
return QRectF(_transform.proj2img(prect.topLeft()),
_transform.proj2img(prect.bottomRight()));
}
@ -261,7 +311,7 @@ Transform IMGMap::transform(int zoom) const
{
double scale = _projection.isGeographic()
? 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),
PointD(scale, scale));
}
@ -281,15 +331,14 @@ Coordinates IMGMap::xy2ll(const QPointF &p)
return _projection.xy2ll(_transform.img2proj(p));
}
void IMGMap::drawPolygons(QPainter *painter, const QList<IMG::Poly> &polygons)
void IMGMap::drawPolygons(QPainter *painter, const QList<MapData::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++) {
const IMG::Poly &poly = polygons.at(i);
if (poly.type != _img.style()->drawOrder().at(n))
const MapData::Poly &poly = polygons.at(i);
if (poly.type != _data->style()->drawOrder().at(n))
continue;
const Style::Polygon &style = _img.style()->polygon(poly.type);
const Style::Polygon &style = _data->style()->polygon(poly.type);
painter->setPen(style.pen());
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);
for (int i = 0; i < lines.size(); i++) {
const IMG::Poly &poly = lines.at(i);
const Style::Line &style = _img.style()->line(poly.type);
const MapData::Poly &poly = lines.at(i);
const Style::Line &style = _data->style()->line(poly.type);
if (style.background() == Qt::NoPen)
continue;
@ -314,8 +363,8 @@ void IMGMap::drawLines(QPainter *painter, const QList<IMG::Poly> &lines)
}
for (int i = 0; i < lines.size(); i++) {
const IMG::Poly &poly = lines.at(i);
const Style::Line &style = _img.style()->line(poly.type);
const MapData::Poly &poly = lines.at(i);
const Style::Line &style = _data->style()->line(poly.type);
if (!style.img().isNull())
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);
}
void IMGMap::processPolygons(QList<IMG::Poly> &polygons)
void IMGMap::processPolygons(QList<MapData::Poly> &polygons,
QList<TextItem*> &textItems)
{
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++) {
QPointF &p = poly.points[j];
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)
{
qStableSort(lines);
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++) {
QPointF &p = poly.points[j];
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);
}
void IMGMap::processStreetNames(QList<IMG::Poly> &lines, const QRect &tileRect,
QList<TextItem*> &textItems)
void IMGMap::processStreetNames(QList<MapData::Poly> &lines,
const QRect &tileRect, QList<TextItem*> &textItems)
{
for (int i = 0; i < lines.size(); i++) {
IMG::Poly &poly = lines[i];
const Style::Line &style = _img.style()->line(poly.type);
MapData::Poly &poly = lines[i];
const Style::Line &style = _data->style()->line(poly.type);
if (style.img().isNull() && style.foreground() == Qt::NoPen)
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)
{
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;
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();
if (!shield.isValid() || shield.type() != 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)
{
qSort(points);
for (int i = 0; i < points.size(); i++) {
IMG::Point &point = points[i];
const Style::Point &style = _img.style()->point(point.type);
MapData::Point &point = points[i];
const Style::Point &style = _data->style()->point(point.type);
if (point.poi && _zoom < minPOIZoom(Style::poiClass(point.type)))
continue;
@ -516,7 +582,7 @@ void IMGMap::draw(QPainter *painter, const QRectF &rect, Flags flags)
for (int j = 0; j < height; j++) {
QPixmap pm;
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());
if (QPixmapCache::find(key, 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(
QPointF(ttl.x() + TILE_SIZE, ttl.y() + TILE_SIZE)));
_img.objects(polyRect.toRectC(_projection, 4), _zoom,
&(tile.polygons()), &(tile.lines()), 0);
_data->polys(polyRect.toRectC(_projection, 4), _zoom,
&(tile.polygons()), &(tile.lines()));
RectD pointRect(_transform.img2proj(QPointF(ttl.x() - TEXT_EXTENT,
ttl.y() - TEXT_EXTENT)), _transform.img2proj(QPointF(ttl.x()
+ TILE_SIZE + TEXT_EXTENT, ttl.y() + TILE_SIZE + TEXT_EXTENT)));
_img.objects(pointRect.toRectC(_projection, 4), _zoom,
0, 0, &(tile.points()));
_data->points(pointRect.toRectC(_projection, 4), _zoom,
&(tile.points()));
}
}
}

View File

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

View File

@ -15,16 +15,16 @@ Krovak::Krovak(const Ellipsoid *ellipsoid, double standardParallel,
_phiP = deg2rad(standardParallel);
_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);
_B = sqrt(1.0 + (ellipsoid->es() * cosPhiC4 / (1.0 - ellipsoid->es())));
double gamma0 = asin(sinPhiC / _B);
_b = sqrt(1.0 + (ellipsoid->es() * cosPhiC4 / (1.0 - ellipsoid->es())));
double gamma0 = asin(sinPhiC / _b);
_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);
_r0 = scale * _A / tan(_phiP);
_FE = falseEasting;
_FN = falseNorthing;
_r0 = scale * _a / tan(_phiP);
_fe = falseEasting;
_fn = falseNorthing;
_cosAlphaC = cos(alphaC);
_sinAlphaC = sin(alphaC);
_lambda0 = deg2rad(longitudeOrigin);
@ -35,23 +35,23 @@ PointD Krovak::ll2xy(const Coordinates &c) const
double phi = deg2rad(c.lat());
double lambda = deg2rad(c.lon());
double eSinPhi = _e * sin(phi);
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);
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);
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 D = asin(cosU * sin(V) / cos(T));
double theta = _n * D;
double r = _r0 * pow(tan(M_PI_4 + _phiP/2.0), _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
{
double Xp = p.y() - _FN;
double Yp = p.x() - _FE;
double Xp = p.y() - _fn;
double Yp = p.x() - _fe;
double Xp2 = Xp * Xp;
double Yp2 = Yp * Yp;
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 phi = U;
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);
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;
private:
double _e, _A, _B, _t0, _n, _r0, _phiP;
double _cosAlphaC, _sinAlphaC, _lambda0, _FE, _FN;
double _e, _a, _b, _t0, _n, _r0, _phiP;
double _cosAlphaC, _sinAlphaC, _lambda0, _fe, _fn;
};
class KrovakNE : public CT

View File

@ -11,8 +11,8 @@ LambertAzimuthal::LambertAzimuthal(const Ellipsoid *ellipsoid,
{
double lat0 = deg2rad(latitudeOrigin);
_falseEasting = falseEasting;
_falseNorthing = falseNorthing;
_fe = falseEasting;
_fn = falseNorthing;
_lon0 = deg2rad(longitudeOrigin);
_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))
* log((1.0 - _e) / (1.0 + _e))));
_beta0 = asin(q0 / _qP);
_Rq = _a * sqrt(_qP / 2.0);
_D = _a * (cos(lat0) / sqrt(1.0 - _es * sin2(lat0))) / (_Rq * cos(_beta0));
_rq = _a * sqrt(_qP / 2.0);
_d = _a * (cos(lat0) / sqrt(1.0 - _es * sin2(lat0))) / (_rq * cos(_beta0));
}
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
* sin(lat)))));
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))));
double x = _falseEasting + ((B * _D) * (cos(beta) * sin(lon - _lon0)));
double y = _falseNorthing + (B / _D) * ((cos(_beta0) * sin(beta))
double x = _fe + ((B * _d) * (cos(beta) * sin(lon - _lon0)));
double y = _fn + (B / _d) * ((cos(_beta0) * sin(beta))
- (sin(_beta0) * cos(beta) * cos(lon - _lon0)));
return PointD(x, y);
@ -53,14 +53,14 @@ Coordinates LambertAzimuthal::xy2ll(const PointD &p) const
double es4 = _es * _es;
double es6 = _es * es4;
double rho = sqrt(sqr((p.x() - _falseEasting) / _D) + sqr(_D * (p.y()
- _falseNorthing)));
double C = 2.0 * asin(rho / (2.0*_Rq));
double betaS = asin((cos(C) * sin(_beta0)) + ((_D * (p.y() -_falseNorthing)
double rho = sqrt(sqr((p.x() - _fe) / _d) + sqr(_d * (p.y()
- _fn)));
double C = 2.0 * asin(rho / (2.0*_rq));
double betaS = asin((cos(C) * sin(_beta0)) + ((_d * (p.y() -_fn)
* sin(C) * cos(_beta0)) / rho));
double lon = _lon0 + atan((p.x() - _falseEasting) * sin(C) / (_D * rho
* cos(_beta0) * cos(C) - sqr(_D) * (p.y() - _falseNorthing) * sin(_beta0)
double lon = _lon0 + atan((p.x() - _fe) * sin(C) / (_d * rho
* cos(_beta0) * cos(C) - sqr(_d) * (p.y() - _fn) * sin(_beta0)
* sin(C)));
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))

View File

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

View File

@ -8,20 +8,27 @@
#include "mbtilesmap.h"
#include "rmap.h"
#include "imgmap.h"
#include "IMG/gmap.h"
#include "maplist.h"
bool MapList::loadMap(Map* map, const QString &path, bool dir)
bool MapList::loadMap(Map *map, const QString &path, bool dir)
{
if (map->isValid()) {
if (map && map->isValid()) {
_maps.append(map);
return true;
} else {
} else if (map) {
if (dir)
_errorString += path + ": " + map->errorString() + "\n";
else
_errorString = map->errorString();
return false;
} else {
if (dir)
_errorString += path + ": " + "Unknown map format\n";
else
_errorString = "Unknown map format";
return false;
}
}
@ -41,18 +48,22 @@ Map *MapList::loadSource(const QString &path, bool dir)
return map;
}
bool MapList::loadFile(const QString &path, bool *atlas, bool dir)
bool MapList::loadFile(const QString &path, bool *terminate, bool dir)
{
QFileInfo fi(path);
QString suffix = fi.suffix().toLower();
Map *map;
Map *map = 0;
if (Atlas::isAtlas(path)) {
*atlas = true;
*terminate = true;
map = new Atlas(path, this);
} else if (suffix == "xml") {
if (!(map = loadSource(path, dir)))
if (MapSource::isMap(path) && !(map = loadSource(path, dir)))
return false;
else if (GMAP::isGMAP(path)) {
*terminate = true;
map = new IMGMap(path);
}
} else if (suffix == "jnx")
map = new JNXMap(path, this);
else if (suffix == "tif" || suffix == "tiff")
@ -85,15 +96,15 @@ bool MapList::loadDirR(const QString &path)
for (int i = 0; i < ml.size(); i++) {
const QFileInfo &fi = ml.at(i);
QString suffix = fi.suffix().toLower();
bool atlas = false;
bool terminate = false;
if (fi.isDir() && fi.fileName() != "set") {
if (!loadDirR(fi.absoluteFilePath()))
ret = false;
} else if (filter().contains("*." + suffix)) {
if (!loadFile(fi.absoluteFilePath(), &atlas, true))
if (!loadFile(fi.absoluteFilePath(), &terminate, true))
ret = false;
if (atlas)
if (terminate)
break;
}
}
@ -120,7 +131,7 @@ QString MapList::formats()
return
tr("Supported files")
+ " (*.img *.jnx *.map *.mbtiles *.rmap *.rtmap *.tar *.tba *.tif *.tiff *.xml);;"
+ tr("Garmin IMG maps") + " (*.img);;"
+ tr("Garmin IMG maps") + " (*.img *.xml);;"
+ tr("Garmin JNX maps") + " (*.jnx);;"
+ tr("OziExplorer maps") + " (*.map);;"
+ tr("MBTiles maps") + " (*.mbtiles);;"

View File

@ -23,7 +23,7 @@ public:
static QStringList filter();
private:
bool loadFile(const QString &path, bool *atlas, bool dir);
bool loadFile(const QString &path, bool *terminate, bool dir);
bool loadDirR(const QString &path);
Map *loadSource(const QString &path, bool dir);
bool loadMap(Map *map, const QString &path, bool dir);

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)
{
Config config;

View File

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

View File

@ -8,7 +8,7 @@
ObliqueStereographic::ObliqueStereographic(const Ellipsoid *ellipsoid,
double latitudeOrigin, double longitudeOrigin, double scale,
double falseEasting, double falseNorthing)
: _FE(falseEasting), _FN(falseNorthing)
: _fe(falseEasting), _fn(falseNorthing)
{
double lat0 = deg2rad(latitudeOrigin);
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
* cos(lambda - _lambda0));
return PointD(_FE + _twoRk0 * cos(chi) * sin(lambda - _lambda0) / B,
_FN + _twoRk0 * (sin(chi) * _cosChi0 - cos(chi) * _sinChi0
return PointD(_fe + _twoRk0 * cos(chi) * sin(lambda - _lambda0) / B,
_fn + _twoRk0 * (sin(chi) * _cosChi0 - cos(chi) * _sinChi0
* cos(lambda - _lambda0)) / B);
}
Coordinates ObliqueStereographic::xy2ll(const PointD &p) const
{
double i = atan((p.x() - _FE) / (_h + (p.y() - _FN)));
double j = atan((p.x() - _FE) / (_g - (p.y() - _FN))) - i;
double i = atan((p.x() - _fe) / (_h + (p.y() - _fn)));
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);
double lambda = j + 2.0 * i + _lambda0;

View File

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