1
0
mirror of https://github.com/tumic0/GPXSee.git synced 2025-07-04 06:49:16 +02:00

Compare commits

...

260 Commits
7.16 ... 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
d8b54ac342 Version++ 2020-01-12 16:09:06 +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
60b33064a7 Delete the popup immediately to prevent it "blocking" an error message 2020-01-12 16:01:38 +01:00
2efc6fb6d3 Optimization 2020-01-11 23:41:04 +01:00
eb744df9cc Merge branch 'origin/master' into Weblate. 2020-01-11 23:40:49 +01:00
8c9180190a Fixed buffer overflow 2020-01-05 00:50:02 +01:00
6c6d297a3c Merge branch 'origin/master' into Weblate. 2020-01-05 00:49:34 +01:00
6839119794 Updated 4Umaps URL 2019-12-23 17:05:38 +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
05f23de1ed Clear the popup on scene clear
Fixes #257
2019-12-23 16:16:15 +01:00
9a0344adac Switched OpenStreetMap to HTTPS 2019-12-23 15:48:58 +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
fdeb24a196 Properly load non-ASCII map names 2019-12-20 23:39:20 +01:00
7f650f9d6a Merge branch 'origin/master' into Weblate. 2019-12-11 16:02:28 +01:00
a986293f20 Properly handle points with extended style IDs 2019-12-09 22:50:19 +01:00
ec0b0adba0 Merge branch 'master' of https://github.com/tumic0/GPXSee 2019-12-04 22:20:01 +01:00
52c6bb569e Merge branch 'origin/master' into Weblate. 2019-12-04 22:19:59 +01:00
0f670f9ddd A much nicer (and faster) 24b conversion 2019-12-04 22:19:00 +01:00
dba46b09a8 Merge branch 'origin/master' into Weblate. 2019-12-03 08:19:20 +01:00
ce59f13de7 Ukrainian localized comment for gpxsee.desktop entry (#259) 2019-12-03 08:19:14 +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
b59112f74e Added missing error handling 2019-12-01 13:33:00 +01:00
17b3602fda Fixed/improved pause detection
Fixes #250
2019-11-26 23:15:06 +01:00
c0928097cc Merge branch 'origin/master' into Weblate. 2019-11-26 20:17:22 +01:00
e709fad764 French description in desktop (#253) 2019-11-26 20:17:18 +01:00
fb566ae163 Merge branch 'origin/master' into Weblate. 2019-11-26 20:16:51 +01:00
3d8a4cc6b7 append Comment[tr] (#254) 2019-11-26 20:16:47 +01:00
4eb44a53f7 Merge branch 'origin/master' into Weblate. 2019-11-26 08:15:11 +01:00
b61c39ea46 Code cleanup 2019-11-26 08:15:01 +01:00
4767be1972 Translated using Weblate (French)
Currently translated at 100.0% (350 of 350 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/fr/
2019-11-23 10:04:57 +01:00
ee9e17e31c Translated using Weblate (Ukrainian)
Currently translated at 100.0% (350 of 350 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/uk/
2019-11-20 13:24:45 +01:00
3721084d21 Made the code compile on QT5 < 5.9
+ propper error handling
2019-11-15 23:41:30 +01:00
6076c9d82e Added missing includes 2019-11-15 23:05:22 +01:00
2ef499001d Merge branch 'origin/master' into Weblate. 2019-11-15 22:11:18 +01:00
e4d8ab1feb Added support for multiple images 2019-11-15 22:10:55 +01:00
2fc82aceab Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (350 of 350 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/pt_BR/
2019-11-15 14:04:32 +01:00
475eb6185a Added missing red light camera entry points 2019-11-14 22:55:06 +01:00
cdf3a48516 Improved layout on OS X 2019-11-13 20:03:19 +01:00
dcc3c0086a Merge branch 'origin/master' into Weblate. 2019-11-13 19:21:48 +01:00
0d6aeecebb Added missing speed 2019-11-13 19:21:41 +01:00
704c68443a Translated using Weblate (Finnish)
Currently translated at 100.0% (350 of 350 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/fi/
2019-11-13 19:13:01 +01:00
183b02a5e7 Translated using Weblate (Russian)
Currently translated at 100.0% (350 of 350 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/ru/
2019-11-13 19:13:01 +01:00
e91815150d Translated using Weblate (Turkish)
Currently translated at 100.0% (350 of 350 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/tr/
2019-11-13 19:13:00 +01:00
73c33450ee Translated using Weblate (Swedish)
Currently translated at 100.0% (350 of 350 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/sv/
2019-11-13 10:40:31 +01:00
e06d07c176 Translated using Weblate (German)
Currently translated at 100.0% (350 of 350 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/de/
2019-11-13 09:52:37 +01:00
c73f30e21f Translated using Weblate (Czech)
Currently translated at 100.0% (350 of 350 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/cs/
2019-11-13 09:48:52 +01:00
bbf2044729 Fixed typo 2019-11-13 09:43:54 +01:00
4a86ab9d1e Merge remote-tracking branch 'weblate/master' 2019-11-13 09:41:25 +01:00
16c3fea8a8 Fixed weblate merge conflict 2019-11-13 09:26:42 +01:00
f4ec9b6ac4 A better option name 2019-11-13 09:13:05 +01:00
44155f9ef0 Translated using Weblate (Russian)
Currently translated at 100.0% (350 of 350 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/ru/
2019-11-13 08:54:30 +01:00
a5e809a0f3 Translated using Weblate (Finnish)
Currently translated at 100.0% (350 of 350 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/fi/
2019-11-13 08:54:29 +01:00
3e70f9262b Translated using Weblate (Russian)
Currently translated at 99.7% (349 of 350 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/ru/
2019-11-13 08:42:08 +01:00
3573a2edbe Localization update 2019-11-13 08:33:51 +01:00
82d9623c6d Merge branch 'origin/master' into Weblate. 2019-11-13 08:28:07 +01:00
258a9b0201 Added automatic pause detection 2019-11-13 08:27:54 +01:00
36d84f6c98 Merge branch 'origin/master' into Weblate. 2019-11-11 20:21:58 +01:00
15c79a7a13 Translated using Weblate (Norwegian Bokmål)
Currently translated at 92.0% (320 of 348 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/nb_NO/
2019-11-11 20:21:58 +01:00
34e0294815 Translated using Weblate (Finnish)
Currently translated at 100.0% (348 of 348 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/fi/
2019-11-11 20:21:58 +01:00
ad6a04b975 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (348 of 348 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/uk/
2019-11-11 20:21:57 +01:00
e0f682fcd8 Translated using Weblate (Russian)
Currently translated at 100.0% (348 of 348 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/ru/
2019-11-11 20:21:57 +01:00
a801359eed Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (348 of 348 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/pt_BR/
2019-11-11 20:21:57 +01:00
bb238f4c7e Missing GPI integration stuff 2019-11-11 20:21:14 +01:00
c1ebc8e74b Merge branch 'origin/master' into Weblate. 2019-11-10 19:48:36 +01:00
110c8c6bed Fixed broken coordinates decoding 2019-11-10 19:48:17 +01:00
e8fffe65bf Merge branch 'origin/master' into Weblate. 2019-11-10 19:20:38 +01:00
1731aa1890 Added propper error handling 2019-11-10 19:20:25 +01:00
c389889662 Merge branch 'origin/master' into Weblate. 2019-11-10 18:39:49 +01:00
e38e12f89b Allow arbitrary zoom levels
Closes #244
2019-11-10 18:38:47 +01:00
26f71f5d00 Merge branch 'origin/master' into Weblate. 2019-11-10 18:00:16 +01:00
65e04ce08b Fixed areas tooltip handling 2019-11-10 17:59:58 +01:00
d84d8e03e0 Merge branch 'origin/master' into Weblate. 2019-11-10 16:47:01 +01:00
475ad358ae Translated using Weblate (Turkish)
Currently translated at 100.0% (348 of 348 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/tr/
2019-11-10 16:47:01 +01:00
db7e60bdfb Added support for GPI speed/red light cameras 2019-11-10 16:46:31 +01:00
444791fb4c Translated using Weblate (Swedish)
Currently translated at 100.0% (348 of 348 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/sv/
2019-11-10 07:00:23 +01:00
be3a882baa Merge branch 'origin/master' into Weblate. 2019-11-09 23:06:59 +01:00
6d6dc9f316 Code cleanup 2019-11-09 23:06:52 +01:00
d86e825c60 Merge branch 'origin/master' into Weblate. 2019-11-09 21:43:45 +01:00
6bb2af3da8 Translated using Weblate (Czech)
Currently translated at 100.0% (348 of 348 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/cs/
2019-11-09 21:43:45 +01:00
d195526afb Translated using Weblate (German)
Currently translated at 100.0% (348 of 348 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/de/
2019-11-09 21:43:45 +01:00
9ec3956672 Code cleanup 2019-11-09 21:43:07 +01:00
3098d2ab95 Merge branch 'origin/master' into Weblate. 2019-11-09 21:27:06 +01:00
dccf9f7e1a Localization update 2019-11-09 21:26:52 +01:00
e55c29c33c Merge branch 'origin/master' into Weblate. 2019-11-09 21:25:57 +01:00
bd5728ffa0 Version++ 2019-11-09 21:25:45 +01:00
af525d4e3d Merge branch 'origin/master' into Weblate. 2019-11-08 21:01:37 +01:00
96e0b584a0 Added support for waypoint addresses 2019-11-08 21:00:59 +01:00
0d6e3bac17 Merge branch 'origin/master' into Weblate. 2019-11-08 01:04:43 +01:00
d292b5f533 Fixed Qt4 build 2019-11-08 01:04:17 +01:00
ec2cb21a8a Merge branch 'origin/master' into Weblate. 2019-11-07 23:24:25 +01:00
3632ed8816 Do not duplicate temporary images + improved error handling 2019-11-07 23:23:25 +01:00
58acea1a2d Translated using Weblate (French)
Currently translated at 100.0% (347 of 347 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/fr/
2019-11-07 05:35:59 +01:00
9e63e3f47e Added support for GPI images
+ GPI parser fixes/improvements
2019-11-06 23:23:05 +01:00
7581c8a32a Trying to fix the OS X build 2019-11-06 08:50:46 +01:00
8715e0e37b Enabled Ukrainian localization 2019-11-05 21:59:01 +01:00
36b9813e1b Merge branch 'origin/master' into Weblate. 2019-11-05 19:41:53 +01:00
1a59e1cb24 Code cleanup 2019-11-05 19:31:52 +01:00
7f7d25a6fa Translated using Weblate (Finnish)
Currently translated at 100.0% (347 of 347 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/fi/
2019-11-05 00:39:45 +01:00
87755952b6 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (347 of 347 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/uk/
2019-11-04 10:19:52 +01:00
3821eb4d84 Merge branch 'origin/master' into Weblate. 2019-11-03 17:27:43 +01:00
15af82ee49 Improved pause detection 2019-11-03 17:27:15 +01:00
1f8a66108b Merge branch 'origin/master' into Weblate. 2019-11-02 23:26:16 +01:00
9309dd945b Added Ukrainian translations file stub 2019-11-02 23:25:41 +01:00
858741c9a5 Translated using Weblate (Russian)
Currently translated at 100.0% (347 of 347 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/ru/
2019-11-02 19:23:59 +01:00
26c922d9a2 Merge branch 'origin/master' into Weblate. 2019-11-02 09:54:50 +01:00
2ba78545ef Fixed broken GPI files encoding handling 2019-11-02 09:54:11 +01:00
d2a47d1a51 Merge branch 'origin/master' into Weblate. 2019-11-01 19:11:10 +01:00
b2ca97b836 Version++ 2019-11-01 19:10:47 +01:00
979981ffb8 Merge branch 'origin/master' into Weblate. 2019-11-01 19:07:57 +01:00
9a57ca69a0 Added support for mangled POI files 2019-11-01 19:07:21 +01:00
7b9bdf1f08 Merge branch 'origin/master' into Weblate. 2019-10-31 19:16:04 +01:00
034647b461 Added Garmin GPI info 2019-10-31 19:16:00 +01:00
f1d8497851 Merge branch 'origin/master' into Weblate. 2019-10-31 17:49:39 +01:00
2f2f155707 Fixed broken DEM value reading on southern and western coordinates
Fixes #240
2019-10-31 17:47:58 +01:00
6d87587544 Translated using Weblate (Norwegian Bokmål)
Currently translated at 91.9% (319 of 347 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/nb_NO/
2019-10-31 06:46:09 +01:00
dad2d79361 Translated using Weblate (Swedish)
Currently translated at 100.0% (347 of 347 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/sv/
2019-10-30 22:56:49 +01:00
9f2d7eb4bb Translated using Weblate (Turkish)
Currently translated at 100.0% (347 of 347 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/tr/
2019-10-30 22:56:48 +01:00
b57809b3b3 Translated using Weblate (German)
Currently translated at 100.0% (347 of 347 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/de/
2019-10-30 22:56:48 +01:00
6cb6c1b4fd Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (347 of 347 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/pt_BR/
2019-10-30 22:56:47 +01:00
14a01b7126 Translated using Weblate (Czech)
Currently translated at 100.0% (347 of 347 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/cs/
2019-10-30 22:56:47 +01:00
315c095af9 Localization files update 2019-10-30 19:48:06 +01:00
10d2fe4431 Fixed crash on empty segment
Fixes #239
2019-10-29 09:10:32 +01:00
109 changed files with 9317 additions and 3390 deletions

View File

@ -1,22 +1,33 @@
version: 7.16.{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

@ -6,6 +6,7 @@ os:
before_install:
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get -qq update; fi
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update; fi
install:
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install qt; fi

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 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.16
VERSION = 7.21
QT += core \
gui \
@ -21,6 +21,7 @@ INCLUDEPATH += ./src
HEADERS += src/common/config.h \
src/GUI/graphicsscene.h \
src/GUI/popup.h \
src/common/garmin.h \
src/common/staticassert.h \
src/common/coordinates.h \
src/common/range.h \
@ -88,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 \
@ -178,7 +185,6 @@ HEADERS += src/common/config.h \
src/map/IMG/lblfile.h \
src/map/IMG/vectortile.h \
src/map/IMG/subdiv.h \
src/map/IMG/units.h \
src/map/IMG/style.h \
src/map/IMG/netfile.h \
src/GUI/limitedcombobox.h \
@ -187,7 +193,9 @@ HEADERS += src/common/config.h \
src/map/IMG/label.h \
src/data/csv.h \
src/data/cupparser.h \
src/data/gpiparser.h
src/data/gpiparser.h \
src/data/address.h \
src/data/smlparser.h
SOURCES += src/main.cpp \
src/GUI/popup.cpp \
src/common/coordinates.cpp \
@ -241,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 \
@ -323,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
@ -347,7 +362,9 @@ TRANSLATIONS = lang/gpxsee_en.ts \
lang/gpxsee_da.ts \
lang/gpxsee_tr.ts \
lang/gpxsee_es.ts \
lang/gpxsee_pt_BR.ts
lang/gpxsee_pt_BR.ts \
lang/gpxsee_uk.ts \
lang/gpxsee_hu.ts
macx {
ICON = icons/gpxsee.icns
@ -365,7 +382,8 @@ macx {
lang/gpxsee_da.qm \
lang/gpxsee_tr.qm \
lang/gpxsee_es.qm \
lang/gpxsee_pt_BR.qm
lang/gpxsee_pt_BR.qm \
lang/gpxsee_uk.qm
csv.path = Contents/Resources
csv.files = pkg/csv
maps.path = Contents/Resources
@ -384,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
}
@ -403,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,77 +47,87 @@
<context>
<name>Data</name>
<message>
<location filename="../src/data/data.cpp" line="173"/>
<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="174"/>
<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="175"/>
<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="176"/>
<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="178"/>
<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="180"/>
<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="187"/>
<source>GPX files</source>
<translation>Soubory GPX</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="181"/>
<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="182"/>
<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="183"/>
<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="184"/>
<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="185"/>
<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="186"/>
<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="188"/>
<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="187"/>
<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="189"/>
<location filename="../src/data/data.cpp" line="197"/>
<source>All files</source>
<translation>Všechny soubory</translation>
</message>
@ -508,8 +518,8 @@
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="413"/>
<location filename="../src/GUI/gui.cpp" line="1058"/>
<location filename="../src/GUI/gui.cpp" line="1124"/>
<location filename="../src/GUI/gui.cpp" line="1059"/>
<location filename="../src/GUI/gui.cpp" line="1125"/>
<source>Moving time</source>
<translation>Čistý čas</translation>
</message>
@ -664,32 +674,32 @@
<translation>Adresář se styly:</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1036"/>
<location filename="../src/GUI/gui.cpp" line="1104"/>
<location filename="../src/GUI/gui.cpp" line="1037"/>
<location filename="../src/GUI/gui.cpp" line="1105"/>
<source>Areas</source>
<translation>Plochy</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1079"/>
<location filename="../src/GUI/gui.cpp" line="1080"/>
<location filename="../src/GUI/gui.cpp" line="1081"/>
<source>Statistics</source>
<translation>Statistika</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1312"/>
<location filename="../src/GUI/gui.cpp" line="1313"/>
<source>Open map file</source>
<translation>Otevřít mapový soubor</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1346"/>
<location filename="../src/GUI/gui.cpp" line="1347"/>
<source>No files loaded</source>
<translation>Nejsou načteny žádné soubory</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1042"/>
<location filename="../src/GUI/gui.cpp" line="1046"/>
<location filename="../src/GUI/gui.cpp" line="1110"/>
<location filename="../src/GUI/gui.cpp" line="1113"/>
<location filename="../src/GUI/gui.cpp" line="1043"/>
<location filename="../src/GUI/gui.cpp" line="1047"/>
<location filename="../src/GUI/gui.cpp" line="1111"/>
<location filename="../src/GUI/gui.cpp" line="1114"/>
<source>Date</source>
<translation>Datum</translation>
</message>
@ -744,18 +754,18 @@
<translation>Adresář mezipaměti dlaždic:</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1030"/>
<location filename="../src/GUI/gui.cpp" line="1100"/>
<location filename="../src/GUI/gui.cpp" line="1031"/>
<location filename="../src/GUI/gui.cpp" line="1101"/>
<source>Routes</source>
<translation>Trasy</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1335"/>
<location filename="../src/GUI/gui.cpp" line="1336"/>
<source>Error loading map:</source>
<translation>Mapu nelze načíst:</translation>
</message>
<message numerus="yes">
<location filename="../src/GUI/gui.cpp" line="1350"/>
<location filename="../src/GUI/gui.cpp" line="1351"/>
<source>%n files</source>
<translation>
<numerusform>%n soubor</numerusform>
@ -779,8 +789,8 @@
<translation>Exportovat do PDF...</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1033"/>
<location filename="../src/GUI/gui.cpp" line="1102"/>
<location filename="../src/GUI/gui.cpp" line="1034"/>
<location filename="../src/GUI/gui.cpp" line="1103"/>
<source>Waypoints</source>
<translation>Navigační body</translation>
</message>
@ -821,13 +831,13 @@
<translation>Soubor POI nelze načíst:</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1094"/>
<location filename="../src/GUI/gui.cpp" line="1095"/>
<source>Name</source>
<translation>Název</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1027"/>
<location filename="../src/GUI/gui.cpp" line="1098"/>
<location filename="../src/GUI/gui.cpp" line="1028"/>
<location filename="../src/GUI/gui.cpp" line="1099"/>
<source>Tracks</source>
<translation>Cesty</translation>
</message>
@ -844,16 +854,16 @@
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="369"/>
<location filename="../src/GUI/gui.cpp" line="1053"/>
<location filename="../src/GUI/gui.cpp" line="1120"/>
<location filename="../src/GUI/gui.cpp" line="1054"/>
<location filename="../src/GUI/gui.cpp" line="1121"/>
<source>Distance</source>
<translation>Vzdálenost</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="376"/>
<location filename="../src/GUI/gui.cpp" line="552"/>
<location filename="../src/GUI/gui.cpp" line="1056"/>
<location filename="../src/GUI/gui.cpp" line="1122"/>
<location filename="../src/GUI/gui.cpp" line="1057"/>
<location filename="../src/GUI/gui.cpp" line="1123"/>
<source>Time</source>
<translation>Čas</translation>
</message>
@ -950,12 +960,12 @@
</message>
<message>
<location filename="../src/GUI/graphview.cpp" line="66"/>
<location filename="../src/GUI/graphview.cpp" line="173"/>
<location filename="../src/GUI/graphview.cpp" line="177"/>
<source>Distance</source>
<translation>Vzdálenost</translation>
</message>
<message>
<location filename="../src/GUI/graphview.cpp" line="175"/>
<location filename="../src/GUI/graphview.cpp" line="179"/>
<source>Time</source>
<translation>Čas</translation>
</message>
@ -1054,478 +1064,488 @@
<context>
<name>OptionsDialog</name>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="169"/>
<location filename="../src/GUI/optionsdialog.cpp" line="175"/>
<source>Base color:</source>
<translation>Základní barva:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="170"/>
<location filename="../src/GUI/optionsdialog.cpp" line="176"/>
<source>Palette shift:</source>
<translation>Posun palety:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="114"/>
<location filename="../src/GUI/optionsdialog.cpp" line="120"/>
<source>Track width:</source>
<translation>Šířka cest:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="115"/>
<location filename="../src/GUI/optionsdialog.cpp" line="121"/>
<source>Track style:</source>
<translation>Styl cest:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="119"/>
<location filename="../src/GUI/optionsdialog.cpp" line="125"/>
<source>Tracks</source>
<translation>Cesty</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="131"/>
<location filename="../src/GUI/optionsdialog.cpp" line="137"/>
<source>Route width:</source>
<translation>Šířka tras:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="132"/>
<location filename="../src/GUI/optionsdialog.cpp" line="138"/>
<source>Route style:</source>
<translation>Styl tras:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="136"/>
<location filename="../src/GUI/optionsdialog.cpp" line="142"/>
<source>Routes</source>
<translation>Trasy</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="172"/>
<location filename="../src/GUI/optionsdialog.cpp" line="255"/>
<location filename="../src/GUI/optionsdialog.cpp" line="178"/>
<location filename="../src/GUI/optionsdialog.cpp" line="261"/>
<source>Use anti-aliasing</source>
<translation>Vyhlazovat hrany</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="252"/>
<location filename="../src/GUI/optionsdialog.cpp" line="258"/>
<source>Line width:</source>
<translation>Šířka čar:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="276"/>
<location filename="../src/GUI/optionsdialog.cpp" line="282"/>
<source>Background color:</source>
<translation>Barva pozadí:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="287"/>
<location filename="../src/GUI/optionsdialog.cpp" line="293"/>
<source>Paths</source>
<translation>Trasy</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="277"/>
<location filename="../src/GUI/optionsdialog.cpp" line="283"/>
<source>Map opacity:</source>
<translation>Neprůhlednost mapy:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="290"/>
<location filename="../src/GUI/optionsdialog.cpp" line="296"/>
<source>Map</source>
<translation>Mapa</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="289"/>
<location filename="../src/GUI/optionsdialog.cpp" line="545"/>
<location filename="../src/GUI/optionsdialog.cpp" line="295"/>
<location filename="../src/GUI/optionsdialog.cpp" line="575"/>
<source>Graphs</source>
<translation>Grafy</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="55"/>
<location filename="../src/GUI/optionsdialog.cpp" line="61"/>
<source>High-resolution</source>
<translation>Vysoké rozlišení</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="56"/>
<location filename="../src/GUI/optionsdialog.cpp" line="62"/>
<source>Standard</source>
<translation>Standardní</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="61"/>
<location filename="../src/GUI/optionsdialog.cpp" line="67"/>
<source>Non-HiDPI maps are loaded as HiDPI maps. The map is sharp but map objects are small/hard to read.</source>
<translation>Ne-HiDPI mapy jsou načteny jako HiDPI mapy. Mapa je ostrá, ale objekty na mapě jsou malé/těžko čitelné.</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="63"/>
<location filename="../src/GUI/optionsdialog.cpp" line="69"/>
<source>Non-HiDPI maps are loaded such as they are. Map objects have the expected size but the map is blurry.</source>
<translation>Ne-HiDPI mapy jsou načteny tak jak jsou. Objekty na mapě mají očekávanou velikost, ale mapa je rozmazaná.</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="98"/>
<location filename="../src/GUI/optionsdialog.cpp" line="104"/>
<source>HiDPI display mode</source>
<translation>HiDPI režim zobrazení</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="117"/>
<location filename="../src/GUI/optionsdialog.cpp" line="134"/>
<location filename="../src/GUI/optionsdialog.cpp" line="153"/>
<location filename="../src/GUI/optionsdialog.cpp" line="123"/>
<location filename="../src/GUI/optionsdialog.cpp" line="140"/>
<location filename="../src/GUI/optionsdialog.cpp" line="159"/>
<source>Width:</source>
<translation>Šířka:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="118"/>
<location filename="../src/GUI/optionsdialog.cpp" line="135"/>
<location filename="../src/GUI/optionsdialog.cpp" line="154"/>
<location filename="../src/GUI/optionsdialog.cpp" line="124"/>
<location filename="../src/GUI/optionsdialog.cpp" line="141"/>
<location filename="../src/GUI/optionsdialog.cpp" line="160"/>
<source>Style:</source>
<translation>Styl:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="205"/>
<location filename="../src/GUI/optionsdialog.cpp" line="211"/>
<source>Waypoint color:</source>
<translation>Barva navigačních bodů:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="206"/>
<location filename="../src/GUI/optionsdialog.cpp" line="212"/>
<source>Waypoint size:</source>
<translation>Velikost navigačních bodů:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="208"/>
<location filename="../src/GUI/optionsdialog.cpp" line="224"/>
<location filename="../src/GUI/optionsdialog.cpp" line="214"/>
<location filename="../src/GUI/optionsdialog.cpp" line="230"/>
<source>Color:</source>
<translation>Barva:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="209"/>
<location filename="../src/GUI/optionsdialog.cpp" line="225"/>
<location filename="../src/GUI/optionsdialog.cpp" line="215"/>
<location filename="../src/GUI/optionsdialog.cpp" line="231"/>
<source>Size:</source>
<translation>Velikost:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="210"/>
<location filename="../src/GUI/optionsdialog.cpp" line="216"/>
<source>Waypoints</source>
<translation>Navigační body</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="221"/>
<location filename="../src/GUI/optionsdialog.cpp" line="227"/>
<source>POI color:</source>
<translation>Barva POI:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="222"/>
<location filename="../src/GUI/optionsdialog.cpp" line="228"/>
<source>POI size:</source>
<translation>Velikost POI:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="226"/>
<location filename="../src/GUI/optionsdialog.cpp" line="232"/>
<source>POIs</source>
<translation>POI body</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="253"/>
<location filename="../src/GUI/optionsdialog.cpp" line="259"/>
<source>Slider color:</source>
<translation>Barva posuvníku:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="288"/>
<location filename="../src/GUI/optionsdialog.cpp" line="294"/>
<source>Points</source>
<translation>Body</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="297"/>
<location filename="../src/GUI/optionsdialog.cpp" line="303"/>
<source>Moving average window size</source>
<translation>Velikost okna klouzavého průměru</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="316"/>
<location filename="../src/GUI/optionsdialog.cpp" line="402"/>
<location filename="../src/GUI/optionsdialog.cpp" line="465"/>
<location filename="../src/GUI/optionsdialog.cpp" line="322"/>
<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="317"/>
<location filename="../src/GUI/optionsdialog.cpp" line="401"/>
<location filename="../src/GUI/optionsdialog.cpp" line="323"/>
<location filename="../src/GUI/optionsdialog.cpp" line="431"/>
<source>Speed:</source>
<translation>Rychlost:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="318"/>
<location filename="../src/GUI/optionsdialog.cpp" line="324"/>
<source>Heart rate:</source>
<translation>Tep:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="319"/>
<location filename="../src/GUI/optionsdialog.cpp" line="325"/>
<source>Cadence:</source>
<translation>Kadence:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="320"/>
<location filename="../src/GUI/optionsdialog.cpp" line="326"/>
<source>Power:</source>
<translation>Výkon:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="322"/>
<location filename="../src/GUI/optionsdialog.cpp" line="328"/>
<source>Smoothing</source>
<translation>Vyhlazování</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="326"/>
<location filename="../src/GUI/optionsdialog.cpp" line="332"/>
<source>Eliminate GPS outliers</source>
<translation>Odstarnit odlehlé GPS záznamy</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="335"/>
<location filename="../src/GUI/optionsdialog.cpp" line="341"/>
<source>Smoothing:</source>
<translation>Vyhlazování:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="352"/>
<source>Automatic</source>
<translation>Automatická</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="366"/>
<source>mi/h</source>
<translation>mi/h</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="355"/>
<location filename="../src/GUI/optionsdialog.cpp" line="369"/>
<source>kn</source>
<translation>kn</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="358"/>
<location filename="../src/GUI/optionsdialog.cpp" line="372"/>
<source>km/h</source>
<translation>km/h</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="362"/>
<location filename="../src/GUI/optionsdialog.cpp" line="568"/>
<location filename="../src/GUI/optionsdialog.cpp" line="376"/>
<location filename="../src/GUI/optionsdialog.cpp" line="598"/>
<source>s</source>
<translation>s</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="366"/>
<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="367"/>
<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="373"/>
<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="374"/>
<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="380"/>
<location filename="../src/GUI/optionsdialog.cpp" line="438"/>
<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="381"/>
<location filename="../src/GUI/optionsdialog.cpp" line="439"/>
<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="418"/>
<location filename="../src/GUI/optionsdialog.cpp" line="448"/>
<source>Elevation</source>
<translation>Výška</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="429"/>
<location filename="../src/GUI/optionsdialog.cpp" line="459"/>
<source>Filtering</source>
<translation>Filtrování</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="430"/>
<location filename="../src/GUI/optionsdialog.cpp" line="460"/>
<source>Sources</source>
<translation>Zdroje</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="431"/>
<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="464"/>
<location filename="../src/GUI/optionsdialog.cpp" line="494"/>
<source>Radius:</source>
<translation>Radius:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="412"/>
<location filename="../src/GUI/optionsdialog.cpp" line="442"/>
<source>Speed</source>
<translation>Rychlost</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="74"/>
<location filename="../src/GUI/optionsdialog.cpp" line="80"/>
<source>Projection:</source>
<translation>Projekce:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="96"/>
<location filename="../src/GUI/optionsdialog.cpp" line="102"/>
<source>Vector maps</source>
<translation>Vektorové mapy</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="149"/>
<location filename="../src/GUI/optionsdialog.cpp" line="155"/>
<source>Area border width:</source>
<translation>Šířka okrajů ploch:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="150"/>
<location filename="../src/GUI/optionsdialog.cpp" line="156"/>
<source>Area border style:</source>
<translation>Styl okrajů ploch:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="151"/>
<location filename="../src/GUI/optionsdialog.cpp" line="157"/>
<source>Area fill opacity:</source>
<translation>Neprůhlednost výplně ploch:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="155"/>
<location filename="../src/GUI/optionsdialog.cpp" line="161"/>
<source>Fill opacity:</source>
<translation>Neprůhlednost výplně:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="156"/>
<location filename="../src/GUI/optionsdialog.cpp" line="162"/>
<source>Areas</source>
<translation>Plochy</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="450"/>
<location filename="../src/GUI/optionsdialog.cpp" line="353"/>
<source>Custom</source>
<translation>Vlastní</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="480"/>
<source>mi</source>
<translation>mi</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="453"/>
<location filename="../src/GUI/optionsdialog.cpp" line="483"/>
<source>nmi</source>
<translation>nmi</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="456"/>
<location filename="../src/GUI/optionsdialog.cpp" line="486"/>
<source>km</source>
<translation>km</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="471"/>
<location filename="../src/GUI/optionsdialog.cpp" line="611"/>
<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="478"/>
<location filename="../src/GUI/optionsdialog.cpp" line="508"/>
<source>WYSIWYG</source>
<translation>WYSIWYG</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="479"/>
<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="484"/>
<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="486"/>
<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="508"/>
<location filename="../src/GUI/optionsdialog.cpp" line="538"/>
<source>Name</source>
<translation>Název</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="510"/>
<location filename="../src/GUI/optionsdialog.cpp" line="540"/>
<source>Date</source>
<translation>Datum</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="512"/>
<location filename="../src/GUI/optionsdialog.cpp" line="542"/>
<source>Distance</source>
<translation>Vzdálenost</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="514"/>
<location filename="../src/GUI/optionsdialog.cpp" line="544"/>
<source>Time</source>
<translation>Čas</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="516"/>
<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="518"/>
<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="533"/>
<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="543"/>
<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="544"/>
<location filename="../src/GUI/optionsdialog.cpp" line="574"/>
<source>Header</source>
<translation>Záhlaví</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="552"/>
<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="555"/>
<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="562"/>
<location filename="../src/GUI/optionsdialog.cpp" line="592"/>
<source>MB</source>
<translation>MB</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="572"/>
<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="573"/>
<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="589"/>
<location filename="../src/GUI/optionsdialog.cpp" line="614"/>
<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="607"/>
<location filename="../src/GUI/optionsdialog.cpp" line="637"/>
<source>Appearance</source>
<translation>Vzhled</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="609"/>
<location filename="../src/GUI/optionsdialog.cpp" line="639"/>
<source>Maps</source>
<translation>Mapy</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="610"/>
<location filename="../src/GUI/optionsdialog.cpp" line="640"/>
<source>Data</source>
<translation>Data</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="612"/>
<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="641"/>
<location filename="../src/GUI/optionsdialog.cpp" line="671"/>
<source>Options</source>
<translation>Nastavení</translation>
</message>
@ -1868,7 +1888,12 @@
<translation>Popis</translation>
</message>
<message>
<location filename="../src/GUI/waypointitem.cpp" line="42"/>
<location filename="../src/GUI/waypointitem.cpp" line="44"/>
<source>Address</source>
<translation>Adresa</translation>
</message>
<message>
<location filename="../src/GUI/waypointitem.cpp" line="55"/>
<source>Links</source>
<translation>Odkazy</translation>
</message>

View File

@ -47,77 +47,87 @@
<context>
<name>Data</name>
<message>
<location filename="../src/data/data.cpp" line="173"/>
<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="174"/>
<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="175"/>
<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="176"/>
<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="178"/>
<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="180"/>
<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="187"/>
<source>GPX files</source>
<translation>GPX-filer</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="181"/>
<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="182"/>
<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="183"/>
<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="184"/>
<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="185"/>
<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="186"/>
<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="187"/>
<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="188"/>
<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="189"/>
<location filename="../src/data/data.cpp" line="197"/>
<source>All files</source>
<translation>Alle filer</translation>
</message>
@ -484,16 +494,16 @@
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="369"/>
<location filename="../src/GUI/gui.cpp" line="1053"/>
<location filename="../src/GUI/gui.cpp" line="1120"/>
<location filename="../src/GUI/gui.cpp" line="1054"/>
<location filename="../src/GUI/gui.cpp" line="1121"/>
<source>Distance</source>
<translation>Afstand</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="376"/>
<location filename="../src/GUI/gui.cpp" line="552"/>
<location filename="../src/GUI/gui.cpp" line="1056"/>
<location filename="../src/GUI/gui.cpp" line="1122"/>
<location filename="../src/GUI/gui.cpp" line="1057"/>
<location filename="../src/GUI/gui.cpp" line="1123"/>
<source>Time</source>
<translation>Tid</translation>
</message>
@ -524,8 +534,8 @@
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="413"/>
<location filename="../src/GUI/gui.cpp" line="1058"/>
<location filename="../src/GUI/gui.cpp" line="1124"/>
<location filename="../src/GUI/gui.cpp" line="1059"/>
<location filename="../src/GUI/gui.cpp" line="1125"/>
<source>Moving time</source>
<translation>Tid i bevægelse</translation>
</message>
@ -791,65 +801,65 @@
<translation>Fejl ved indlæsning af IP-fil:</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1027"/>
<location filename="../src/GUI/gui.cpp" line="1098"/>
<location filename="../src/GUI/gui.cpp" line="1028"/>
<location filename="../src/GUI/gui.cpp" line="1099"/>
<source>Tracks</source>
<translation>Spor</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1030"/>
<location filename="../src/GUI/gui.cpp" line="1100"/>
<location filename="../src/GUI/gui.cpp" line="1031"/>
<location filename="../src/GUI/gui.cpp" line="1101"/>
<source>Routes</source>
<translation>Ruter</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1033"/>
<location filename="../src/GUI/gui.cpp" line="1102"/>
<location filename="../src/GUI/gui.cpp" line="1034"/>
<location filename="../src/GUI/gui.cpp" line="1103"/>
<source>Waypoints</source>
<translation>Rutepunkter</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1036"/>
<location filename="../src/GUI/gui.cpp" line="1104"/>
<location filename="../src/GUI/gui.cpp" line="1037"/>
<location filename="../src/GUI/gui.cpp" line="1105"/>
<source>Areas</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1042"/>
<location filename="../src/GUI/gui.cpp" line="1046"/>
<location filename="../src/GUI/gui.cpp" line="1110"/>
<location filename="../src/GUI/gui.cpp" line="1113"/>
<location filename="../src/GUI/gui.cpp" line="1043"/>
<location filename="../src/GUI/gui.cpp" line="1047"/>
<location filename="../src/GUI/gui.cpp" line="1111"/>
<location filename="../src/GUI/gui.cpp" line="1114"/>
<source>Date</source>
<translation>Dato</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1079"/>
<location filename="../src/GUI/gui.cpp" line="1080"/>
<location filename="../src/GUI/gui.cpp" line="1081"/>
<source>Statistics</source>
<translation>Statistikker</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1094"/>
<location filename="../src/GUI/gui.cpp" line="1095"/>
<source>Name</source>
<translation>Navn</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1312"/>
<location filename="../src/GUI/gui.cpp" line="1313"/>
<source>Open map file</source>
<translation>Åbn kort-fil</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1335"/>
<location filename="../src/GUI/gui.cpp" line="1336"/>
<source>Error loading map:</source>
<translation>Fejl ved indlæsning af kort:</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1346"/>
<location filename="../src/GUI/gui.cpp" line="1347"/>
<source>No files loaded</source>
<translation>Ingen filer indlæst</translation>
</message>
<message numerus="yes">
<location filename="../src/GUI/gui.cpp" line="1350"/>
<location filename="../src/GUI/gui.cpp" line="1351"/>
<source>%n files</source>
<translation>
<numerusform>%n fil</numerusform>
@ -908,7 +918,7 @@
</message>
<message>
<location filename="../src/GUI/graphview.cpp" line="66"/>
<location filename="../src/GUI/graphview.cpp" line="173"/>
<location filename="../src/GUI/graphview.cpp" line="177"/>
<source>Distance</source>
<translation>Afstand</translation>
</message>
@ -954,7 +964,7 @@
<translation>t</translation>
</message>
<message>
<location filename="../src/GUI/graphview.cpp" line="175"/>
<location filename="../src/GUI/graphview.cpp" line="179"/>
<source>Time</source>
<translation>Tid</translation>
</message>
@ -1053,478 +1063,488 @@
<context>
<name>OptionsDialog</name>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="55"/>
<location filename="../src/GUI/optionsdialog.cpp" line="61"/>
<source>High-resolution</source>
<translation>Højopløsning</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="56"/>
<location filename="../src/GUI/optionsdialog.cpp" line="62"/>
<source>Standard</source>
<translation>Standard</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="61"/>
<location filename="../src/GUI/optionsdialog.cpp" line="67"/>
<source>Non-HiDPI maps are loaded as HiDPI maps. The map is sharp but map objects are small/hard to read.</source>
<translation>Ikke HiDPI kort er indlæst som HiDPI kort. Kortet er skarpt, men kortobjekter er små/svære at læse.</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="63"/>
<location filename="../src/GUI/optionsdialog.cpp" line="69"/>
<source>Non-HiDPI maps are loaded such as they are. Map objects have the expected size but the map is blurry.</source>
<translation>Ikke HiDPI kort er indlæst som de er. Kortobjekter har den forventede størrelse, men kortet er sløret.</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="98"/>
<location filename="../src/GUI/optionsdialog.cpp" line="104"/>
<source>HiDPI display mode</source>
<translation>HiDPI skærmtilstand</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="169"/>
<location filename="../src/GUI/optionsdialog.cpp" line="175"/>
<source>Base color:</source>
<translation>Grundfarve:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="170"/>
<location filename="../src/GUI/optionsdialog.cpp" line="176"/>
<source>Palette shift:</source>
<translation>Paletteskift:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="114"/>
<location filename="../src/GUI/optionsdialog.cpp" line="120"/>
<source>Track width:</source>
<translation>Sporvidde:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="74"/>
<location filename="../src/GUI/optionsdialog.cpp" line="80"/>
<source>Projection:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="96"/>
<location filename="../src/GUI/optionsdialog.cpp" line="102"/>
<source>Vector maps</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="115"/>
<location filename="../src/GUI/optionsdialog.cpp" line="121"/>
<source>Track style:</source>
<translation>Sporstil:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="117"/>
<location filename="../src/GUI/optionsdialog.cpp" line="134"/>
<location filename="../src/GUI/optionsdialog.cpp" line="153"/>
<location filename="../src/GUI/optionsdialog.cpp" line="123"/>
<location filename="../src/GUI/optionsdialog.cpp" line="140"/>
<location filename="../src/GUI/optionsdialog.cpp" line="159"/>
<source>Width:</source>
<translation>Bredde:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="118"/>
<location filename="../src/GUI/optionsdialog.cpp" line="135"/>
<location filename="../src/GUI/optionsdialog.cpp" line="154"/>
<location filename="../src/GUI/optionsdialog.cpp" line="124"/>
<location filename="../src/GUI/optionsdialog.cpp" line="141"/>
<location filename="../src/GUI/optionsdialog.cpp" line="160"/>
<source>Style:</source>
<translation>Stil:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="119"/>
<location filename="../src/GUI/optionsdialog.cpp" line="125"/>
<source>Tracks</source>
<translation>Spor</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="131"/>
<location filename="../src/GUI/optionsdialog.cpp" line="137"/>
<source>Route width:</source>
<translation>Rutebredde:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="132"/>
<location filename="../src/GUI/optionsdialog.cpp" line="138"/>
<source>Route style:</source>
<translation>Rutestil:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="136"/>
<location filename="../src/GUI/optionsdialog.cpp" line="142"/>
<source>Routes</source>
<translation>Ruter</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="149"/>
<location filename="../src/GUI/optionsdialog.cpp" line="155"/>
<source>Area border width:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="150"/>
<location filename="../src/GUI/optionsdialog.cpp" line="156"/>
<source>Area border style:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="151"/>
<location filename="../src/GUI/optionsdialog.cpp" line="157"/>
<source>Area fill opacity:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="155"/>
<location filename="../src/GUI/optionsdialog.cpp" line="161"/>
<source>Fill opacity:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="156"/>
<location filename="../src/GUI/optionsdialog.cpp" line="162"/>
<source>Areas</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="172"/>
<location filename="../src/GUI/optionsdialog.cpp" line="255"/>
<location filename="../src/GUI/optionsdialog.cpp" line="178"/>
<location filename="../src/GUI/optionsdialog.cpp" line="261"/>
<source>Use anti-aliasing</source>
<translation>Brug anti-aliasing</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="205"/>
<location filename="../src/GUI/optionsdialog.cpp" line="211"/>
<source>Waypoint color:</source>
<translation>Rutepunktfarve:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="206"/>
<location filename="../src/GUI/optionsdialog.cpp" line="212"/>
<source>Waypoint size:</source>
<translation>Rutepunktstørrelse:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="208"/>
<location filename="../src/GUI/optionsdialog.cpp" line="224"/>
<location filename="../src/GUI/optionsdialog.cpp" line="214"/>
<location filename="../src/GUI/optionsdialog.cpp" line="230"/>
<source>Color:</source>
<translation>Farve:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="209"/>
<location filename="../src/GUI/optionsdialog.cpp" line="225"/>
<location filename="../src/GUI/optionsdialog.cpp" line="215"/>
<location filename="../src/GUI/optionsdialog.cpp" line="231"/>
<source>Size:</source>
<translation>Størrelse:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="210"/>
<location filename="../src/GUI/optionsdialog.cpp" line="216"/>
<source>Waypoints</source>
<translation>Rutepunkter</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="221"/>
<location filename="../src/GUI/optionsdialog.cpp" line="227"/>
<source>POI color:</source>
<translation>IP farve:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="222"/>
<location filename="../src/GUI/optionsdialog.cpp" line="228"/>
<source>POI size:</source>
<translation>IP størrelse:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="226"/>
<location filename="../src/GUI/optionsdialog.cpp" line="232"/>
<source>POIs</source>
<translation type="unfinished">Interessepunkter</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="252"/>
<location filename="../src/GUI/optionsdialog.cpp" line="258"/>
<source>Line width:</source>
<translation>Linjebredde:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="253"/>
<location filename="../src/GUI/optionsdialog.cpp" line="259"/>
<source>Slider color:</source>
<translation type="unfinished">Skyderfarve:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="276"/>
<location filename="../src/GUI/optionsdialog.cpp" line="282"/>
<source>Background color:</source>
<translation>Baggrundsfarve:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="277"/>
<location filename="../src/GUI/optionsdialog.cpp" line="283"/>
<source>Map opacity:</source>
<translation type="unfinished">Gennemsigtighed for kort:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="287"/>
<location filename="../src/GUI/optionsdialog.cpp" line="293"/>
<source>Paths</source>
<translation>Stier</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="288"/>
<location filename="../src/GUI/optionsdialog.cpp" line="294"/>
<source>Points</source>
<translation>Punkter</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="289"/>
<location filename="../src/GUI/optionsdialog.cpp" line="545"/>
<location filename="../src/GUI/optionsdialog.cpp" line="295"/>
<location filename="../src/GUI/optionsdialog.cpp" line="575"/>
<source>Graphs</source>
<translation>Grafer</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="290"/>
<location filename="../src/GUI/optionsdialog.cpp" line="296"/>
<source>Map</source>
<translation>Kort</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="297"/>
<location filename="../src/GUI/optionsdialog.cpp" line="303"/>
<source>Moving average window size</source>
<translation type="unfinished">Glidende gennemsnitlig vinduesstørrelse</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="316"/>
<location filename="../src/GUI/optionsdialog.cpp" line="402"/>
<location filename="../src/GUI/optionsdialog.cpp" line="465"/>
<location filename="../src/GUI/optionsdialog.cpp" line="322"/>
<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="317"/>
<location filename="../src/GUI/optionsdialog.cpp" line="401"/>
<location filename="../src/GUI/optionsdialog.cpp" line="323"/>
<location filename="../src/GUI/optionsdialog.cpp" line="431"/>
<source>Speed:</source>
<translation>Hastighed:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="318"/>
<location filename="../src/GUI/optionsdialog.cpp" line="324"/>
<source>Heart rate:</source>
<translation>Puls:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="319"/>
<location filename="../src/GUI/optionsdialog.cpp" line="325"/>
<source>Cadence:</source>
<translation>Kadence:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="320"/>
<location filename="../src/GUI/optionsdialog.cpp" line="326"/>
<source>Power:</source>
<translation>Effekt:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="322"/>
<location filename="../src/GUI/optionsdialog.cpp" line="328"/>
<source>Smoothing</source>
<translation>Udjævning</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="326"/>
<location filename="../src/GUI/optionsdialog.cpp" line="332"/>
<source>Eliminate GPS outliers</source>
<translation>Eliminer GPS-ekstremværdier</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="335"/>
<location filename="../src/GUI/optionsdialog.cpp" line="341"/>
<source>Smoothing:</source>
<translation>Udjævning:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="352"/>
<source>Automatic</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="366"/>
<source>mi/h</source>
<translation>mil/t</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="355"/>
<location filename="../src/GUI/optionsdialog.cpp" line="369"/>
<source>kn</source>
<translation type="unfinished">knob</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="358"/>
<location filename="../src/GUI/optionsdialog.cpp" line="372"/>
<source>km/h</source>
<translation>km/t</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="362"/>
<location filename="../src/GUI/optionsdialog.cpp" line="568"/>
<location filename="../src/GUI/optionsdialog.cpp" line="376"/>
<location filename="../src/GUI/optionsdialog.cpp" line="598"/>
<source>s</source>
<translation>s</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="366"/>
<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="367"/>
<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="373"/>
<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="374"/>
<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="380"/>
<location filename="../src/GUI/optionsdialog.cpp" line="438"/>
<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="381"/>
<location filename="../src/GUI/optionsdialog.cpp" line="439"/>
<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="418"/>
<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="429"/>
<location filename="../src/GUI/optionsdialog.cpp" line="459"/>
<source>Filtering</source>
<translation>Filtrering</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="430"/>
<location filename="../src/GUI/optionsdialog.cpp" line="460"/>
<source>Sources</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="431"/>
<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="464"/>
<location filename="../src/GUI/optionsdialog.cpp" line="494"/>
<source>Radius:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="412"/>
<location filename="../src/GUI/optionsdialog.cpp" line="442"/>
<source>Speed</source>
<translation>Hastighed</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="450"/>
<location filename="../src/GUI/optionsdialog.cpp" line="353"/>
<source>Custom</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="480"/>
<source>mi</source>
<translation>mil</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="453"/>
<location filename="../src/GUI/optionsdialog.cpp" line="483"/>
<source>nmi</source>
<translation>sømil</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="456"/>
<location filename="../src/GUI/optionsdialog.cpp" line="486"/>
<source>km</source>
<translation>km</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="471"/>
<location filename="../src/GUI/optionsdialog.cpp" line="611"/>
<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="478"/>
<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="479"/>
<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="484"/>
<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="486"/>
<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="508"/>
<location filename="../src/GUI/optionsdialog.cpp" line="538"/>
<source>Name</source>
<translation>Navn</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="510"/>
<location filename="../src/GUI/optionsdialog.cpp" line="540"/>
<source>Date</source>
<translation>Dato</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="512"/>
<location filename="../src/GUI/optionsdialog.cpp" line="542"/>
<source>Distance</source>
<translation>Afstand</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="514"/>
<location filename="../src/GUI/optionsdialog.cpp" line="544"/>
<source>Time</source>
<translation>Tid</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="516"/>
<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="518"/>
<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="533"/>
<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="543"/>
<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="544"/>
<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="552"/>
<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="555"/>
<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="562"/>
<location filename="../src/GUI/optionsdialog.cpp" line="592"/>
<source>MB</source>
<translation>MB</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="572"/>
<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="573"/>
<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="589"/>
<location filename="../src/GUI/optionsdialog.cpp" line="614"/>
<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="607"/>
<location filename="../src/GUI/optionsdialog.cpp" line="637"/>
<source>Appearance</source>
<translation>Udseende</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="609"/>
<location filename="../src/GUI/optionsdialog.cpp" line="639"/>
<source>Maps</source>
<translation>Kort</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="610"/>
<location filename="../src/GUI/optionsdialog.cpp" line="640"/>
<source>Data</source>
<translation>Data</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="612"/>
<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="641"/>
<location filename="../src/GUI/optionsdialog.cpp" line="671"/>
<source>Options</source>
<translation>Indstillinger</translation>
</message>
@ -1867,7 +1887,12 @@
<translation>Beskrivelse</translation>
</message>
<message>
<location filename="../src/GUI/waypointitem.cpp" line="42"/>
<location filename="../src/GUI/waypointitem.cpp" line="44"/>
<source>Address</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/GUI/waypointitem.cpp" line="55"/>
<source>Links</source>
<translation type="unfinished"></translation>
</message>

View File

@ -47,77 +47,87 @@
<context>
<name>Data</name>
<message>
<location filename="../src/data/data.cpp" line="173"/>
<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="174"/>
<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="175"/>
<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="176"/>
<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="178"/>
<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="180"/>
<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="187"/>
<source>GPX files</source>
<translation>GPX-Dateien</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="181"/>
<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="182"/>
<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="183"/>
<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="184"/>
<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="185"/>
<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="186"/>
<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="188"/>
<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="187"/>
<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="189"/>
<location filename="../src/data/data.cpp" line="197"/>
<source>All files</source>
<translation>Alle Dateien</translation>
</message>
@ -518,8 +528,8 @@
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="413"/>
<location filename="../src/GUI/gui.cpp" line="1058"/>
<location filename="../src/GUI/gui.cpp" line="1124"/>
<location filename="../src/GUI/gui.cpp" line="1059"/>
<location filename="../src/GUI/gui.cpp" line="1125"/>
<source>Moving time</source>
<translation>Bewegungszeit</translation>
</message>
@ -674,34 +684,34 @@
<translation>Formatvorlagen-Verzeichnis:</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1036"/>
<location filename="../src/GUI/gui.cpp" line="1104"/>
<location filename="../src/GUI/gui.cpp" line="1037"/>
<location filename="../src/GUI/gui.cpp" line="1105"/>
<source>Areas</source>
<translation>Flächen</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1079"/>
<location filename="../src/GUI/gui.cpp" line="1080"/>
<location filename="../src/GUI/gui.cpp" line="1081"/>
<source>Statistics</source>
<translation>Statistiken</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1312"/>
<location filename="../src/GUI/gui.cpp" line="1313"/>
<source>Open map file</source>
<translation>Kartendatei öffnen</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1335"/>
<location filename="../src/GUI/gui.cpp" line="1336"/>
<source>Error loading map:</source>
<translation>Fehler beim Laden der Kartendatei:</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1346"/>
<location filename="../src/GUI/gui.cpp" line="1347"/>
<source>No files loaded</source>
<translation>Keine Dateien geladen</translation>
</message>
<message numerus="yes">
<location filename="../src/GUI/gui.cpp" line="1350"/>
<location filename="../src/GUI/gui.cpp" line="1351"/>
<source>%n files</source>
<translation>
<numerusform>%n Datei</numerusform>
@ -709,16 +719,16 @@
</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1042"/>
<location filename="../src/GUI/gui.cpp" line="1046"/>
<location filename="../src/GUI/gui.cpp" line="1110"/>
<location filename="../src/GUI/gui.cpp" line="1113"/>
<location filename="../src/GUI/gui.cpp" line="1043"/>
<location filename="../src/GUI/gui.cpp" line="1047"/>
<location filename="../src/GUI/gui.cpp" line="1111"/>
<location filename="../src/GUI/gui.cpp" line="1114"/>
<source>Date</source>
<translation>Datum</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1030"/>
<location filename="../src/GUI/gui.cpp" line="1100"/>
<location filename="../src/GUI/gui.cpp" line="1031"/>
<location filename="../src/GUI/gui.cpp" line="1101"/>
<source>Routes</source>
<translation>Routen</translation>
</message>
@ -738,8 +748,8 @@
<translation>Als PDF exportieren </translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1033"/>
<location filename="../src/GUI/gui.cpp" line="1102"/>
<location filename="../src/GUI/gui.cpp" line="1034"/>
<location filename="../src/GUI/gui.cpp" line="1103"/>
<source>Waypoints</source>
<translation>Wegpunkte</translation>
</message>
@ -820,13 +830,13 @@
<translation>Fehler beim Laden der POI-Datei:</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1094"/>
<location filename="../src/GUI/gui.cpp" line="1095"/>
<source>Name</source>
<translation>Name</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1027"/>
<location filename="../src/GUI/gui.cpp" line="1098"/>
<location filename="../src/GUI/gui.cpp" line="1028"/>
<location filename="../src/GUI/gui.cpp" line="1099"/>
<source>Tracks</source>
<translation>Strecken</translation>
</message>
@ -843,16 +853,16 @@
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="369"/>
<location filename="../src/GUI/gui.cpp" line="1053"/>
<location filename="../src/GUI/gui.cpp" line="1120"/>
<location filename="../src/GUI/gui.cpp" line="1054"/>
<location filename="../src/GUI/gui.cpp" line="1121"/>
<source>Distance</source>
<translation>Distanz</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="376"/>
<location filename="../src/GUI/gui.cpp" line="552"/>
<location filename="../src/GUI/gui.cpp" line="1056"/>
<location filename="../src/GUI/gui.cpp" line="1122"/>
<location filename="../src/GUI/gui.cpp" line="1057"/>
<location filename="../src/GUI/gui.cpp" line="1123"/>
<source>Time</source>
<translation>Zeit</translation>
</message>
@ -949,12 +959,12 @@
</message>
<message>
<location filename="../src/GUI/graphview.cpp" line="66"/>
<location filename="../src/GUI/graphview.cpp" line="173"/>
<location filename="../src/GUI/graphview.cpp" line="177"/>
<source>Distance</source>
<translation>Distanz</translation>
</message>
<message>
<location filename="../src/GUI/graphview.cpp" line="175"/>
<location filename="../src/GUI/graphview.cpp" line="179"/>
<source>Time</source>
<translation>Zeit</translation>
</message>
@ -1053,478 +1063,488 @@
<context>
<name>OptionsDialog</name>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="169"/>
<location filename="../src/GUI/optionsdialog.cpp" line="175"/>
<source>Base color:</source>
<translation>Grundfarbe:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="170"/>
<location filename="../src/GUI/optionsdialog.cpp" line="176"/>
<source>Palette shift:</source>
<translation>Palettenverschiebung:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="114"/>
<location filename="../src/GUI/optionsdialog.cpp" line="120"/>
<source>Track width:</source>
<translation>Streckenbreite:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="115"/>
<location filename="../src/GUI/optionsdialog.cpp" line="121"/>
<source>Track style:</source>
<translation>Streckenstil:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="119"/>
<location filename="../src/GUI/optionsdialog.cpp" line="125"/>
<source>Tracks</source>
<translation>Strecken</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="131"/>
<location filename="../src/GUI/optionsdialog.cpp" line="137"/>
<source>Route width:</source>
<translation>Routenbreite:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="132"/>
<location filename="../src/GUI/optionsdialog.cpp" line="138"/>
<source>Route style:</source>
<translation>Routenstil:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="136"/>
<location filename="../src/GUI/optionsdialog.cpp" line="142"/>
<source>Routes</source>
<translation>Routen</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="172"/>
<location filename="../src/GUI/optionsdialog.cpp" line="255"/>
<location filename="../src/GUI/optionsdialog.cpp" line="178"/>
<location filename="../src/GUI/optionsdialog.cpp" line="261"/>
<source>Use anti-aliasing</source>
<translation>Anti-Aliasing verwenden</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="252"/>
<location filename="../src/GUI/optionsdialog.cpp" line="258"/>
<source>Line width:</source>
<translation>Linienbreite:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="276"/>
<location filename="../src/GUI/optionsdialog.cpp" line="282"/>
<source>Background color:</source>
<translation>Hintergrundfarbe:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="287"/>
<location filename="../src/GUI/optionsdialog.cpp" line="293"/>
<source>Paths</source>
<translation>Pfade</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="277"/>
<location filename="../src/GUI/optionsdialog.cpp" line="283"/>
<source>Map opacity:</source>
<translation>Kartendeckkraft:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="290"/>
<location filename="../src/GUI/optionsdialog.cpp" line="296"/>
<source>Map</source>
<translation>Karte</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="289"/>
<location filename="../src/GUI/optionsdialog.cpp" line="545"/>
<location filename="../src/GUI/optionsdialog.cpp" line="295"/>
<location filename="../src/GUI/optionsdialog.cpp" line="575"/>
<source>Graphs</source>
<translation>Graphen</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="55"/>
<location filename="../src/GUI/optionsdialog.cpp" line="61"/>
<source>High-resolution</source>
<translation>Hohe Auflösung</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="56"/>
<location filename="../src/GUI/optionsdialog.cpp" line="62"/>
<source>Standard</source>
<translation>Standardmäßig</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="61"/>
<location filename="../src/GUI/optionsdialog.cpp" line="67"/>
<source>Non-HiDPI maps are loaded as HiDPI maps. The map is sharp but map objects are small/hard to read.</source>
<translation>Nicht-HiDPI-Karten werden als HiDPI-Karten geladen. Die Karte ist scharf, aber die Kartenobjekte sind klein / schwer zu lesen.</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="63"/>
<location filename="../src/GUI/optionsdialog.cpp" line="69"/>
<source>Non-HiDPI maps are loaded such as they are. Map objects have the expected size but the map is blurry.</source>
<translation>Nicht-HiDPI-Karten werden so geladen, wie sie sind. Kartenobjekte haben die erwartete Größe, aber die Karte ist verschwommen.</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="98"/>
<location filename="../src/GUI/optionsdialog.cpp" line="104"/>
<source>HiDPI display mode</source>
<translation>HiDPI-Anzeigemodus</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="117"/>
<location filename="../src/GUI/optionsdialog.cpp" line="134"/>
<location filename="../src/GUI/optionsdialog.cpp" line="153"/>
<location filename="../src/GUI/optionsdialog.cpp" line="123"/>
<location filename="../src/GUI/optionsdialog.cpp" line="140"/>
<location filename="../src/GUI/optionsdialog.cpp" line="159"/>
<source>Width:</source>
<translation>Breite:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="118"/>
<location filename="../src/GUI/optionsdialog.cpp" line="135"/>
<location filename="../src/GUI/optionsdialog.cpp" line="154"/>
<location filename="../src/GUI/optionsdialog.cpp" line="124"/>
<location filename="../src/GUI/optionsdialog.cpp" line="141"/>
<location filename="../src/GUI/optionsdialog.cpp" line="160"/>
<source>Style:</source>
<translation>Stil:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="205"/>
<location filename="../src/GUI/optionsdialog.cpp" line="211"/>
<source>Waypoint color:</source>
<translation>Wegpunkt-Farbe:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="206"/>
<location filename="../src/GUI/optionsdialog.cpp" line="212"/>
<source>Waypoint size:</source>
<translation>Wegpunkt-Größe:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="208"/>
<location filename="../src/GUI/optionsdialog.cpp" line="224"/>
<location filename="../src/GUI/optionsdialog.cpp" line="214"/>
<location filename="../src/GUI/optionsdialog.cpp" line="230"/>
<source>Color:</source>
<translation>Farbe:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="209"/>
<location filename="../src/GUI/optionsdialog.cpp" line="225"/>
<location filename="../src/GUI/optionsdialog.cpp" line="215"/>
<location filename="../src/GUI/optionsdialog.cpp" line="231"/>
<source>Size:</source>
<translation>Größe:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="210"/>
<location filename="../src/GUI/optionsdialog.cpp" line="216"/>
<source>Waypoints</source>
<translation>Wegpunkte</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="221"/>
<location filename="../src/GUI/optionsdialog.cpp" line="227"/>
<source>POI color:</source>
<translation>POI-Farbe:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="222"/>
<location filename="../src/GUI/optionsdialog.cpp" line="228"/>
<source>POI size:</source>
<translation>POI-Größe:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="226"/>
<location filename="../src/GUI/optionsdialog.cpp" line="232"/>
<source>POIs</source>
<translation>POIs</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="253"/>
<location filename="../src/GUI/optionsdialog.cpp" line="259"/>
<source>Slider color:</source>
<translation>Schieber-Farbe:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="288"/>
<location filename="../src/GUI/optionsdialog.cpp" line="294"/>
<source>Points</source>
<translation>Punkte</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="297"/>
<location filename="../src/GUI/optionsdialog.cpp" line="303"/>
<source>Moving average window size</source>
<translation>Fensterbreite des gleitenden Mittelwerts</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="316"/>
<location filename="../src/GUI/optionsdialog.cpp" line="402"/>
<location filename="../src/GUI/optionsdialog.cpp" line="465"/>
<location filename="../src/GUI/optionsdialog.cpp" line="322"/>
<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="317"/>
<location filename="../src/GUI/optionsdialog.cpp" line="401"/>
<location filename="../src/GUI/optionsdialog.cpp" line="323"/>
<location filename="../src/GUI/optionsdialog.cpp" line="431"/>
<source>Speed:</source>
<translation>Geschwindigkeit:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="318"/>
<location filename="../src/GUI/optionsdialog.cpp" line="324"/>
<source>Heart rate:</source>
<translation>Herzfrequenz:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="319"/>
<location filename="../src/GUI/optionsdialog.cpp" line="325"/>
<source>Cadence:</source>
<translation>Frequenz:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="320"/>
<location filename="../src/GUI/optionsdialog.cpp" line="326"/>
<source>Power:</source>
<translation>Leistung:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="322"/>
<location filename="../src/GUI/optionsdialog.cpp" line="328"/>
<source>Smoothing</source>
<translation>Glätten</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="326"/>
<location filename="../src/GUI/optionsdialog.cpp" line="332"/>
<source>Eliminate GPS outliers</source>
<translation>GPS-Ausreißer entfernen</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="335"/>
<location filename="../src/GUI/optionsdialog.cpp" line="341"/>
<source>Smoothing:</source>
<translation>Glätten:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="352"/>
<source>Automatic</source>
<translation>Automatisch</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="366"/>
<source>mi/h</source>
<translation>mi/h</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="355"/>
<location filename="../src/GUI/optionsdialog.cpp" line="369"/>
<source>kn</source>
<translation>kn</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="358"/>
<location filename="../src/GUI/optionsdialog.cpp" line="372"/>
<source>km/h</source>
<translation>km/h</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="362"/>
<location filename="../src/GUI/optionsdialog.cpp" line="568"/>
<location filename="../src/GUI/optionsdialog.cpp" line="376"/>
<location filename="../src/GUI/optionsdialog.cpp" line="598"/>
<source>s</source>
<translation>sek</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="366"/>
<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="367"/>
<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="373"/>
<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="374"/>
<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="380"/>
<location filename="../src/GUI/optionsdialog.cpp" line="438"/>
<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="381"/>
<location filename="../src/GUI/optionsdialog.cpp" line="439"/>
<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="418"/>
<location filename="../src/GUI/optionsdialog.cpp" line="448"/>
<source>Elevation</source>
<translation>Höhe</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="429"/>
<location filename="../src/GUI/optionsdialog.cpp" line="459"/>
<source>Filtering</source>
<translation>Datenfilterung</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="430"/>
<location filename="../src/GUI/optionsdialog.cpp" line="460"/>
<source>Sources</source>
<translation>Datenquellen</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="431"/>
<location filename="../src/GUI/optionsdialog.cpp" line="461"/>
<source>Pause detection</source>
<translation>Pausenerkennung</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="464"/>
<location filename="../src/GUI/optionsdialog.cpp" line="494"/>
<source>Radius:</source>
<translation>Radius:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="412"/>
<location filename="../src/GUI/optionsdialog.cpp" line="442"/>
<source>Speed</source>
<translation>Geschwindigkeit</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="74"/>
<location filename="../src/GUI/optionsdialog.cpp" line="80"/>
<source>Projection:</source>
<translation>Projektion:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="96"/>
<location filename="../src/GUI/optionsdialog.cpp" line="102"/>
<source>Vector maps</source>
<translation>Vektorkarten</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="149"/>
<location filename="../src/GUI/optionsdialog.cpp" line="155"/>
<source>Area border width:</source>
<translation>Flächen-Randbreite:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="150"/>
<location filename="../src/GUI/optionsdialog.cpp" line="156"/>
<source>Area border style:</source>
<translation>Flächen-Randstil:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="151"/>
<location filename="../src/GUI/optionsdialog.cpp" line="157"/>
<source>Area fill opacity:</source>
<translation>Flächendeckkraft:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="155"/>
<location filename="../src/GUI/optionsdialog.cpp" line="161"/>
<source>Fill opacity:</source>
<translation>Deckkraft:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="156"/>
<location filename="../src/GUI/optionsdialog.cpp" line="162"/>
<source>Areas</source>
<translation>Flächen</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="450"/>
<location filename="../src/GUI/optionsdialog.cpp" line="353"/>
<source>Custom</source>
<translation>Benutzerdefiniert</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="480"/>
<source>mi</source>
<translation>mi</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="453"/>
<location filename="../src/GUI/optionsdialog.cpp" line="483"/>
<source>nmi</source>
<translation>nmi</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="456"/>
<location filename="../src/GUI/optionsdialog.cpp" line="486"/>
<source>km</source>
<translation>km</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="471"/>
<location filename="../src/GUI/optionsdialog.cpp" line="611"/>
<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="478"/>
<location filename="../src/GUI/optionsdialog.cpp" line="508"/>
<source>WYSIWYG</source>
<translation>WYSIWYG</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="479"/>
<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="484"/>
<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="486"/>
<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="508"/>
<location filename="../src/GUI/optionsdialog.cpp" line="538"/>
<source>Name</source>
<translation>Name</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="510"/>
<location filename="../src/GUI/optionsdialog.cpp" line="540"/>
<source>Date</source>
<translation>Datum</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="512"/>
<location filename="../src/GUI/optionsdialog.cpp" line="542"/>
<source>Distance</source>
<translation>Distanz</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="514"/>
<location filename="../src/GUI/optionsdialog.cpp" line="544"/>
<source>Time</source>
<translation>Zeit</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="516"/>
<location filename="../src/GUI/optionsdialog.cpp" line="546"/>
<source>Moving time</source>
<translation>Bewegungszeit</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="518"/>
<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="533"/>
<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="543"/>
<location filename="../src/GUI/optionsdialog.cpp" line="573"/>
<source>Print mode</source>
<translation>Druckmodus</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="544"/>
<location filename="../src/GUI/optionsdialog.cpp" line="574"/>
<source>Header</source>
<translation>Kopfzeile</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="552"/>
<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="555"/>
<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="562"/>
<location filename="../src/GUI/optionsdialog.cpp" line="592"/>
<source>MB</source>
<translation>MB</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="572"/>
<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="573"/>
<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="589"/>
<location filename="../src/GUI/optionsdialog.cpp" line="614"/>
<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="607"/>
<location filename="../src/GUI/optionsdialog.cpp" line="637"/>
<source>Appearance</source>
<translation>Erscheinungsbild</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="609"/>
<location filename="../src/GUI/optionsdialog.cpp" line="639"/>
<source>Maps</source>
<translation>Karten</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="610"/>
<location filename="../src/GUI/optionsdialog.cpp" line="640"/>
<source>Data</source>
<translation>Daten</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="612"/>
<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="641"/>
<location filename="../src/GUI/optionsdialog.cpp" line="671"/>
<source>Options</source>
<translation>Einstellungen</translation>
</message>
@ -1867,7 +1887,12 @@
<translation>Beschreibung</translation>
</message>
<message>
<location filename="../src/GUI/waypointitem.cpp" line="42"/>
<location filename="../src/GUI/waypointitem.cpp" line="44"/>
<source>Address</source>
<translation>Adresse</translation>
</message>
<message>
<location filename="../src/GUI/waypointitem.cpp" line="55"/>
<source>Links</source>
<translation>Links</translation>
</message>

File diff suppressed because it is too large Load Diff

View File

@ -47,77 +47,87 @@
<context>
<name>Data</name>
<message>
<location filename="../src/data/data.cpp" line="173"/>
<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="174"/>
<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="175"/>
<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="176"/>
<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="178"/>
<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="180"/>
<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="187"/>
<source>GPX files</source>
<translation>GPX-tiedostot</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="181"/>
<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="182"/>
<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="183"/>
<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="184"/>
<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="185"/>
<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="186"/>
<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="188"/>
<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="187"/>
<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="189"/>
<location filename="../src/data/data.cpp" line="197"/>
<source>All files</source>
<translation>Kaikki tiedostot</translation>
</message>
@ -508,8 +518,8 @@
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="413"/>
<location filename="../src/GUI/gui.cpp" line="1058"/>
<location filename="../src/GUI/gui.cpp" line="1124"/>
<location filename="../src/GUI/gui.cpp" line="1059"/>
<location filename="../src/GUI/gui.cpp" line="1125"/>
<source>Moving time</source>
<translation>Liikkumisaika</translation>
</message>
@ -664,32 +674,32 @@
<translation>Tyylitiedostoiden hakemisto:</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1036"/>
<location filename="../src/GUI/gui.cpp" line="1104"/>
<location filename="../src/GUI/gui.cpp" line="1037"/>
<location filename="../src/GUI/gui.cpp" line="1105"/>
<source>Areas</source>
<translation>Alueet</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1079"/>
<location filename="../src/GUI/gui.cpp" line="1080"/>
<location filename="../src/GUI/gui.cpp" line="1081"/>
<source>Statistics</source>
<translation>Tilasto</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1312"/>
<location filename="../src/GUI/gui.cpp" line="1313"/>
<source>Open map file</source>
<translation>Avaa karttatiedosto</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1346"/>
<location filename="../src/GUI/gui.cpp" line="1347"/>
<source>No files loaded</source>
<translation>Yhtään tiedostoa ei ladattu</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1042"/>
<location filename="../src/GUI/gui.cpp" line="1046"/>
<location filename="../src/GUI/gui.cpp" line="1110"/>
<location filename="../src/GUI/gui.cpp" line="1113"/>
<location filename="../src/GUI/gui.cpp" line="1043"/>
<location filename="../src/GUI/gui.cpp" line="1047"/>
<location filename="../src/GUI/gui.cpp" line="1111"/>
<location filename="../src/GUI/gui.cpp" line="1114"/>
<source>Date</source>
<translation>Päivämäärä</translation>
</message>
@ -744,18 +754,18 @@
<translation>Välimuistin hakemisto:</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1030"/>
<location filename="../src/GUI/gui.cpp" line="1100"/>
<location filename="../src/GUI/gui.cpp" line="1031"/>
<location filename="../src/GUI/gui.cpp" line="1101"/>
<source>Routes</source>
<translation>Reitit</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1335"/>
<location filename="../src/GUI/gui.cpp" line="1336"/>
<source>Error loading map:</source>
<translation>Virhe ladattaessa karttaa:</translation>
</message>
<message numerus="yes">
<location filename="../src/GUI/gui.cpp" line="1350"/>
<location filename="../src/GUI/gui.cpp" line="1351"/>
<source>%n files</source>
<translation>
<numerusform>%n tiedosto</numerusform>
@ -778,8 +788,8 @@
<translation>Vie PDF:ksi...</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1033"/>
<location filename="../src/GUI/gui.cpp" line="1102"/>
<location filename="../src/GUI/gui.cpp" line="1034"/>
<location filename="../src/GUI/gui.cpp" line="1103"/>
<source>Waypoints</source>
<translation>Reittipisteet</translation>
</message>
@ -820,13 +830,13 @@
<translation>Virhe ladattaessa POI-tiedostoa:</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1094"/>
<location filename="../src/GUI/gui.cpp" line="1095"/>
<source>Name</source>
<translation>Nimi</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1027"/>
<location filename="../src/GUI/gui.cpp" line="1098"/>
<location filename="../src/GUI/gui.cpp" line="1028"/>
<location filename="../src/GUI/gui.cpp" line="1099"/>
<source>Tracks</source>
<translation>Jäljet</translation>
</message>
@ -843,16 +853,16 @@
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="369"/>
<location filename="../src/GUI/gui.cpp" line="1053"/>
<location filename="../src/GUI/gui.cpp" line="1120"/>
<location filename="../src/GUI/gui.cpp" line="1054"/>
<location filename="../src/GUI/gui.cpp" line="1121"/>
<source>Distance</source>
<translation>Etäisyys</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="376"/>
<location filename="../src/GUI/gui.cpp" line="552"/>
<location filename="../src/GUI/gui.cpp" line="1056"/>
<location filename="../src/GUI/gui.cpp" line="1122"/>
<location filename="../src/GUI/gui.cpp" line="1057"/>
<location filename="../src/GUI/gui.cpp" line="1123"/>
<source>Time</source>
<translation>Aika</translation>
</message>
@ -949,12 +959,12 @@
</message>
<message>
<location filename="../src/GUI/graphview.cpp" line="66"/>
<location filename="../src/GUI/graphview.cpp" line="173"/>
<location filename="../src/GUI/graphview.cpp" line="177"/>
<source>Distance</source>
<translation>Etäisyys</translation>
</message>
<message>
<location filename="../src/GUI/graphview.cpp" line="175"/>
<location filename="../src/GUI/graphview.cpp" line="179"/>
<source>Time</source>
<translation>Aika</translation>
</message>
@ -1053,478 +1063,488 @@
<context>
<name>OptionsDialog</name>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="169"/>
<location filename="../src/GUI/optionsdialog.cpp" line="175"/>
<source>Base color:</source>
<translation>Pohjaväri:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="170"/>
<location filename="../src/GUI/optionsdialog.cpp" line="176"/>
<source>Palette shift:</source>
<translation>Paletin muutos:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="114"/>
<location filename="../src/GUI/optionsdialog.cpp" line="120"/>
<source>Track width:</source>
<translation>Jäljen leveys:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="115"/>
<location filename="../src/GUI/optionsdialog.cpp" line="121"/>
<source>Track style:</source>
<translation>Jäljen tyyli:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="119"/>
<location filename="../src/GUI/optionsdialog.cpp" line="125"/>
<source>Tracks</source>
<translation>Jäljet</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="131"/>
<location filename="../src/GUI/optionsdialog.cpp" line="137"/>
<source>Route width:</source>
<translation>Reitin leveys:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="132"/>
<location filename="../src/GUI/optionsdialog.cpp" line="138"/>
<source>Route style:</source>
<translation>Reitin tyyli:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="136"/>
<location filename="../src/GUI/optionsdialog.cpp" line="142"/>
<source>Routes</source>
<translation>Reitit</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="172"/>
<location filename="../src/GUI/optionsdialog.cpp" line="255"/>
<location filename="../src/GUI/optionsdialog.cpp" line="178"/>
<location filename="../src/GUI/optionsdialog.cpp" line="261"/>
<source>Use anti-aliasing</source>
<translation>Käytä reunanpehmennystä</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="252"/>
<location filename="../src/GUI/optionsdialog.cpp" line="258"/>
<source>Line width:</source>
<translation>Viivan leveys:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="276"/>
<location filename="../src/GUI/optionsdialog.cpp" line="282"/>
<source>Background color:</source>
<translation>Taustan väri:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="287"/>
<location filename="../src/GUI/optionsdialog.cpp" line="293"/>
<source>Paths</source>
<translation>Jäljet</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="277"/>
<location filename="../src/GUI/optionsdialog.cpp" line="283"/>
<source>Map opacity:</source>
<translation>Kartan läpinäkymättömyys:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="290"/>
<location filename="../src/GUI/optionsdialog.cpp" line="296"/>
<source>Map</source>
<translation>Kartat</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="289"/>
<location filename="../src/GUI/optionsdialog.cpp" line="545"/>
<location filename="../src/GUI/optionsdialog.cpp" line="295"/>
<location filename="../src/GUI/optionsdialog.cpp" line="575"/>
<source>Graphs</source>
<translation>Kaaviokuvat</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="55"/>
<location filename="../src/GUI/optionsdialog.cpp" line="61"/>
<source>High-resolution</source>
<translation>Korkea resoluutio</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="56"/>
<location filename="../src/GUI/optionsdialog.cpp" line="62"/>
<source>Standard</source>
<translation>Vakioresoluutio</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="61"/>
<location filename="../src/GUI/optionsdialog.cpp" line="67"/>
<source>Non-HiDPI maps are loaded as HiDPI maps. The map is sharp but map objects are small/hard to read.</source>
<translation>Ei-HiDPI-kartat ladataan HiDPI-karttoina. Kartta on terävä, mutta karttakohteet ovat pieniä/vaikeasti luettavia.</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="63"/>
<location filename="../src/GUI/optionsdialog.cpp" line="69"/>
<source>Non-HiDPI maps are loaded such as they are. Map objects have the expected size but the map is blurry.</source>
<translation>Ei-HiDPI-kartat ladataan kuten ne ovat. Karttakohteilla on odotettu koko, mutta kartta on epäselvä.</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="98"/>
<location filename="../src/GUI/optionsdialog.cpp" line="104"/>
<source>HiDPI display mode</source>
<translation>HiDPI-näyttötila</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="117"/>
<location filename="../src/GUI/optionsdialog.cpp" line="134"/>
<location filename="../src/GUI/optionsdialog.cpp" line="153"/>
<location filename="../src/GUI/optionsdialog.cpp" line="123"/>
<location filename="../src/GUI/optionsdialog.cpp" line="140"/>
<location filename="../src/GUI/optionsdialog.cpp" line="159"/>
<source>Width:</source>
<translation>Leveys:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="118"/>
<location filename="../src/GUI/optionsdialog.cpp" line="135"/>
<location filename="../src/GUI/optionsdialog.cpp" line="154"/>
<location filename="../src/GUI/optionsdialog.cpp" line="124"/>
<location filename="../src/GUI/optionsdialog.cpp" line="141"/>
<location filename="../src/GUI/optionsdialog.cpp" line="160"/>
<source>Style:</source>
<translation>Tyyli:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="205"/>
<location filename="../src/GUI/optionsdialog.cpp" line="211"/>
<source>Waypoint color:</source>
<translation>Reittipisteen väri:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="206"/>
<location filename="../src/GUI/optionsdialog.cpp" line="212"/>
<source>Waypoint size:</source>
<translation>Reittipisteen koko:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="208"/>
<location filename="../src/GUI/optionsdialog.cpp" line="224"/>
<location filename="../src/GUI/optionsdialog.cpp" line="214"/>
<location filename="../src/GUI/optionsdialog.cpp" line="230"/>
<source>Color:</source>
<translation>Väri:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="209"/>
<location filename="../src/GUI/optionsdialog.cpp" line="225"/>
<location filename="../src/GUI/optionsdialog.cpp" line="215"/>
<location filename="../src/GUI/optionsdialog.cpp" line="231"/>
<source>Size:</source>
<translation>Koko:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="210"/>
<location filename="../src/GUI/optionsdialog.cpp" line="216"/>
<source>Waypoints</source>
<translation>Reittipisteet</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="221"/>
<location filename="../src/GUI/optionsdialog.cpp" line="227"/>
<source>POI color:</source>
<translation>POI:n väri:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="222"/>
<location filename="../src/GUI/optionsdialog.cpp" line="228"/>
<source>POI size:</source>
<translation>POI:n koko:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="226"/>
<location filename="../src/GUI/optionsdialog.cpp" line="232"/>
<source>POIs</source>
<translation>POI:t</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="253"/>
<location filename="../src/GUI/optionsdialog.cpp" line="259"/>
<source>Slider color:</source>
<translation>Liukusäätimen väri:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="288"/>
<location filename="../src/GUI/optionsdialog.cpp" line="294"/>
<source>Points</source>
<translation>Pisteet</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="297"/>
<location filename="../src/GUI/optionsdialog.cpp" line="303"/>
<source>Moving average window size</source>
<translation>Liukuvan keskiarvon ikkunan koko</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="316"/>
<location filename="../src/GUI/optionsdialog.cpp" line="402"/>
<location filename="../src/GUI/optionsdialog.cpp" line="465"/>
<location filename="../src/GUI/optionsdialog.cpp" line="322"/>
<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="317"/>
<location filename="../src/GUI/optionsdialog.cpp" line="401"/>
<location filename="../src/GUI/optionsdialog.cpp" line="323"/>
<location filename="../src/GUI/optionsdialog.cpp" line="431"/>
<source>Speed:</source>
<translation>Vauhti:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="318"/>
<location filename="../src/GUI/optionsdialog.cpp" line="324"/>
<source>Heart rate:</source>
<translation>Sydämen syke:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="319"/>
<location filename="../src/GUI/optionsdialog.cpp" line="325"/>
<source>Cadence:</source>
<translation>Kadenssi:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="320"/>
<location filename="../src/GUI/optionsdialog.cpp" line="326"/>
<source>Power:</source>
<translation>Teho:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="322"/>
<location filename="../src/GUI/optionsdialog.cpp" line="328"/>
<source>Smoothing</source>
<translation>Silotus</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="326"/>
<location filename="../src/GUI/optionsdialog.cpp" line="332"/>
<source>Eliminate GPS outliers</source>
<translation>Poista poikkeavat GPS-havainnot</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="335"/>
<location filename="../src/GUI/optionsdialog.cpp" line="341"/>
<source>Smoothing:</source>
<translation>Silotus:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="352"/>
<source>Automatic</source>
<translation>Automaattinen</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="366"/>
<source>mi/h</source>
<translation>mph</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="355"/>
<location filename="../src/GUI/optionsdialog.cpp" line="369"/>
<source>kn</source>
<translation>kn</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="358"/>
<location filename="../src/GUI/optionsdialog.cpp" line="372"/>
<source>km/h</source>
<translation>km/t</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="362"/>
<location filename="../src/GUI/optionsdialog.cpp" line="568"/>
<location filename="../src/GUI/optionsdialog.cpp" line="376"/>
<location filename="../src/GUI/optionsdialog.cpp" line="598"/>
<source>s</source>
<translation>s</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="366"/>
<location filename="../src/GUI/optionsdialog.cpp" line="392"/>
<source>Minimal speed:</source>
<translation>Minimivauhti:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="367"/>
<location filename="../src/GUI/optionsdialog.cpp" line="393"/>
<source>Minimal duration:</source>
<translation>Minimikesto:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="373"/>
<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="374"/>
<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="380"/>
<location filename="../src/GUI/optionsdialog.cpp" line="438"/>
<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="381"/>
<location filename="../src/GUI/optionsdialog.cpp" line="439"/>
<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="418"/>
<location filename="../src/GUI/optionsdialog.cpp" line="448"/>
<source>Elevation</source>
<translation>Korkeus</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="429"/>
<location filename="../src/GUI/optionsdialog.cpp" line="459"/>
<source>Filtering</source>
<translation>Suodatus</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="430"/>
<location filename="../src/GUI/optionsdialog.cpp" line="460"/>
<source>Sources</source>
<translation>Lähteet</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="431"/>
<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="464"/>
<location filename="../src/GUI/optionsdialog.cpp" line="494"/>
<source>Radius:</source>
<translation>Säde:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="412"/>
<location filename="../src/GUI/optionsdialog.cpp" line="442"/>
<source>Speed</source>
<translation>Vauhti</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="74"/>
<location filename="../src/GUI/optionsdialog.cpp" line="80"/>
<source>Projection:</source>
<translation>Projektio:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="96"/>
<location filename="../src/GUI/optionsdialog.cpp" line="102"/>
<source>Vector maps</source>
<translation>Vektorikartat</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="149"/>
<location filename="../src/GUI/optionsdialog.cpp" line="155"/>
<source>Area border width:</source>
<translation>Alueen rajan leveys:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="150"/>
<location filename="../src/GUI/optionsdialog.cpp" line="156"/>
<source>Area border style:</source>
<translation>Alueen rajan tyyli:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="151"/>
<location filename="../src/GUI/optionsdialog.cpp" line="157"/>
<source>Area fill opacity:</source>
<translation>Alueen täytön läpinäkymättömyys:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="155"/>
<location filename="../src/GUI/optionsdialog.cpp" line="161"/>
<source>Fill opacity:</source>
<translation>Täytön läpinäkymättömyys:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="156"/>
<location filename="../src/GUI/optionsdialog.cpp" line="162"/>
<source>Areas</source>
<translation>Alueet</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="450"/>
<location filename="../src/GUI/optionsdialog.cpp" line="353"/>
<source>Custom</source>
<translation>Käyttäjän määrittämä</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="480"/>
<source>mi</source>
<translation>mi</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="453"/>
<location filename="../src/GUI/optionsdialog.cpp" line="483"/>
<source>nmi</source>
<translation>mpk</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="456"/>
<location filename="../src/GUI/optionsdialog.cpp" line="486"/>
<source>km</source>
<translation>km</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="471"/>
<location filename="../src/GUI/optionsdialog.cpp" line="611"/>
<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="478"/>
<location filename="../src/GUI/optionsdialog.cpp" line="508"/>
<source>WYSIWYG</source>
<translation>WYSIWYG</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="479"/>
<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="484"/>
<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="486"/>
<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="508"/>
<location filename="../src/GUI/optionsdialog.cpp" line="538"/>
<source>Name</source>
<translation>Nimi</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="510"/>
<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="512"/>
<location filename="../src/GUI/optionsdialog.cpp" line="542"/>
<source>Distance</source>
<translation>Etäisyys</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="514"/>
<location filename="../src/GUI/optionsdialog.cpp" line="544"/>
<source>Time</source>
<translation>Aika</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="516"/>
<location filename="../src/GUI/optionsdialog.cpp" line="546"/>
<source>Moving time</source>
<translation>Liikkumisaika</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="518"/>
<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="533"/>
<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="543"/>
<location filename="../src/GUI/optionsdialog.cpp" line="573"/>
<source>Print mode</source>
<translation>Tulostustila</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="544"/>
<location filename="../src/GUI/optionsdialog.cpp" line="574"/>
<source>Header</source>
<translation>Otsikko</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="552"/>
<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="555"/>
<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="562"/>
<location filename="../src/GUI/optionsdialog.cpp" line="592"/>
<source>MB</source>
<translation>Mt</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="572"/>
<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="573"/>
<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="589"/>
<location filename="../src/GUI/optionsdialog.cpp" line="614"/>
<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="607"/>
<location filename="../src/GUI/optionsdialog.cpp" line="637"/>
<source>Appearance</source>
<translation>Ulkoasu</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="609"/>
<location filename="../src/GUI/optionsdialog.cpp" line="639"/>
<source>Maps</source>
<translation>Kartat</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="610"/>
<location filename="../src/GUI/optionsdialog.cpp" line="640"/>
<source>Data</source>
<translation>Tiedot</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="612"/>
<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="641"/>
<location filename="../src/GUI/optionsdialog.cpp" line="671"/>
<source>Options</source>
<translation>Valinnat</translation>
</message>
@ -1867,7 +1887,12 @@
<translation>Kuvaus</translation>
</message>
<message>
<location filename="../src/GUI/waypointitem.cpp" line="42"/>
<location filename="../src/GUI/waypointitem.cpp" line="44"/>
<source>Address</source>
<translation>Osoite</translation>
</message>
<message>
<location filename="../src/GUI/waypointitem.cpp" line="55"/>
<source>Links</source>
<translation>Linkit</translation>
</message>

View File

@ -47,77 +47,87 @@
<context>
<name>Data</name>
<message>
<location filename="../src/data/data.cpp" line="173"/>
<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="174"/>
<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="175"/>
<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="176"/>
<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="178"/>
<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="180"/>
<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="187"/>
<source>GPX files</source>
<translation>Données GPX</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="181"/>
<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="182"/>
<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="183"/>
<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="184"/>
<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="185"/>
<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="186"/>
<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="188"/>
<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="187"/>
<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="189"/>
<location filename="../src/data/data.cpp" line="197"/>
<source>All files</source>
<translation>Tous les fichiers</translation>
</message>
@ -518,8 +528,8 @@
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="413"/>
<location filename="../src/GUI/gui.cpp" line="1058"/>
<location filename="../src/GUI/gui.cpp" line="1124"/>
<location filename="../src/GUI/gui.cpp" line="1059"/>
<location filename="../src/GUI/gui.cpp" line="1125"/>
<source>Moving time</source>
<translation>Durée en déplacement</translation>
</message>
@ -674,34 +684,34 @@
<translation>Dossier de styles :</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1036"/>
<location filename="../src/GUI/gui.cpp" line="1104"/>
<location filename="../src/GUI/gui.cpp" line="1037"/>
<location filename="../src/GUI/gui.cpp" line="1105"/>
<source>Areas</source>
<translation>Zones</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1079"/>
<location filename="../src/GUI/gui.cpp" line="1080"/>
<location filename="../src/GUI/gui.cpp" line="1081"/>
<source>Statistics</source>
<translation>Statistiques</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1312"/>
<location filename="../src/GUI/gui.cpp" line="1313"/>
<source>Open map file</source>
<translation>Ouvrir un fichier de carte</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1335"/>
<location filename="../src/GUI/gui.cpp" line="1336"/>
<source>Error loading map:</source>
<translation>Erreur lors du chargement de la carte :</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1346"/>
<location filename="../src/GUI/gui.cpp" line="1347"/>
<source>No files loaded</source>
<translation>Aucun fichier chargé</translation>
</message>
<message numerus="yes">
<location filename="../src/GUI/gui.cpp" line="1350"/>
<location filename="../src/GUI/gui.cpp" line="1351"/>
<source>%n files</source>
<translation>
<numerusform>%n fichier</numerusform>
@ -709,16 +719,16 @@
</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1042"/>
<location filename="../src/GUI/gui.cpp" line="1046"/>
<location filename="../src/GUI/gui.cpp" line="1110"/>
<location filename="../src/GUI/gui.cpp" line="1113"/>
<location filename="../src/GUI/gui.cpp" line="1043"/>
<location filename="../src/GUI/gui.cpp" line="1047"/>
<location filename="../src/GUI/gui.cpp" line="1111"/>
<location filename="../src/GUI/gui.cpp" line="1114"/>
<source>Date</source>
<translation>Date</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1030"/>
<location filename="../src/GUI/gui.cpp" line="1100"/>
<location filename="../src/GUI/gui.cpp" line="1031"/>
<location filename="../src/GUI/gui.cpp" line="1101"/>
<source>Routes</source>
<translation>Routes</translation>
</message>
@ -738,8 +748,8 @@
<translation>Exporter au format PDF...</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1033"/>
<location filename="../src/GUI/gui.cpp" line="1102"/>
<location filename="../src/GUI/gui.cpp" line="1034"/>
<location filename="../src/GUI/gui.cpp" line="1103"/>
<source>Waypoints</source>
<translation>Points de jalonnement</translation>
</message>
@ -820,13 +830,13 @@
<translation>Erreur lors du chargement du fichier POI :</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1094"/>
<location filename="../src/GUI/gui.cpp" line="1095"/>
<source>Name</source>
<translation>Nom</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1027"/>
<location filename="../src/GUI/gui.cpp" line="1098"/>
<location filename="../src/GUI/gui.cpp" line="1028"/>
<location filename="../src/GUI/gui.cpp" line="1099"/>
<source>Tracks</source>
<translation>Traces</translation>
</message>
@ -843,16 +853,16 @@
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="369"/>
<location filename="../src/GUI/gui.cpp" line="1053"/>
<location filename="../src/GUI/gui.cpp" line="1120"/>
<location filename="../src/GUI/gui.cpp" line="1054"/>
<location filename="../src/GUI/gui.cpp" line="1121"/>
<source>Distance</source>
<translation>Distance</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="376"/>
<location filename="../src/GUI/gui.cpp" line="552"/>
<location filename="../src/GUI/gui.cpp" line="1056"/>
<location filename="../src/GUI/gui.cpp" line="1122"/>
<location filename="../src/GUI/gui.cpp" line="1057"/>
<location filename="../src/GUI/gui.cpp" line="1123"/>
<source>Time</source>
<translation>Temps</translation>
</message>
@ -949,12 +959,12 @@
</message>
<message>
<location filename="../src/GUI/graphview.cpp" line="66"/>
<location filename="../src/GUI/graphview.cpp" line="173"/>
<location filename="../src/GUI/graphview.cpp" line="177"/>
<source>Distance</source>
<translation>Distance</translation>
</message>
<message>
<location filename="../src/GUI/graphview.cpp" line="175"/>
<location filename="../src/GUI/graphview.cpp" line="179"/>
<source>Time</source>
<translation>Temps</translation>
</message>
@ -1053,478 +1063,488 @@
<context>
<name>OptionsDialog</name>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="169"/>
<location filename="../src/GUI/optionsdialog.cpp" line="175"/>
<source>Base color:</source>
<translation>Couleur de base :</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="170"/>
<location filename="../src/GUI/optionsdialog.cpp" line="176"/>
<source>Palette shift:</source>
<translation>Incrément de palette :</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="114"/>
<location filename="../src/GUI/optionsdialog.cpp" line="120"/>
<source>Track width:</source>
<translation>Épaisseur des traces :</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="115"/>
<location filename="../src/GUI/optionsdialog.cpp" line="121"/>
<source>Track style:</source>
<translation>Style des traces :</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="119"/>
<location filename="../src/GUI/optionsdialog.cpp" line="125"/>
<source>Tracks</source>
<translation>Traces</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="131"/>
<location filename="../src/GUI/optionsdialog.cpp" line="137"/>
<source>Route width:</source>
<translation>Épaisseur des routes :</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="132"/>
<location filename="../src/GUI/optionsdialog.cpp" line="138"/>
<source>Route style:</source>
<translation>Style des routes :</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="136"/>
<location filename="../src/GUI/optionsdialog.cpp" line="142"/>
<source>Routes</source>
<translation>Routes</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="172"/>
<location filename="../src/GUI/optionsdialog.cpp" line="255"/>
<location filename="../src/GUI/optionsdialog.cpp" line="178"/>
<location filename="../src/GUI/optionsdialog.cpp" line="261"/>
<source>Use anti-aliasing</source>
<translation>Utiliser l&apos;anticrénelage</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="252"/>
<location filename="../src/GUI/optionsdialog.cpp" line="258"/>
<source>Line width:</source>
<translation>Épaisseur de ligne :</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="276"/>
<location filename="../src/GUI/optionsdialog.cpp" line="282"/>
<source>Background color:</source>
<translation>Couleur d&apos;arrière plan :</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="287"/>
<location filename="../src/GUI/optionsdialog.cpp" line="293"/>
<source>Paths</source>
<translation>Chemins</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="277"/>
<location filename="../src/GUI/optionsdialog.cpp" line="283"/>
<source>Map opacity:</source>
<translation>Opacité de la carte :</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="290"/>
<location filename="../src/GUI/optionsdialog.cpp" line="296"/>
<source>Map</source>
<translation>Carte</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="289"/>
<location filename="../src/GUI/optionsdialog.cpp" line="545"/>
<location filename="../src/GUI/optionsdialog.cpp" line="295"/>
<location filename="../src/GUI/optionsdialog.cpp" line="575"/>
<source>Graphs</source>
<translation>Graphe</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="55"/>
<location filename="../src/GUI/optionsdialog.cpp" line="61"/>
<source>High-resolution</source>
<translation>Résolution élevée</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="56"/>
<location filename="../src/GUI/optionsdialog.cpp" line="62"/>
<source>Standard</source>
<translation>Standard</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="61"/>
<location filename="../src/GUI/optionsdialog.cpp" line="67"/>
<source>Non-HiDPI maps are loaded as HiDPI maps. The map is sharp but map objects are small/hard to read.</source>
<translation>Les cartes qui n&apos;ont pas de résolution élevée sont chargées comme une carte à résolution élevée. La carte est nette mais ses symboles sont petits ou difficiles à lire.</translation>
<translation>Les cartes qui n&apos;ont pas de résolution élevée sont chargées comme une carte à résolution élevée. La carte est nette mais ses symboles sont petits et moins lisible.</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="63"/>
<location filename="../src/GUI/optionsdialog.cpp" line="69"/>
<source>Non-HiDPI maps are loaded such as they are. Map objects have the expected size but the map is blurry.</source>
<translation>Les cartes qui n&apos;ont pas de résolution élevée sont chargées telles quelles. Les symboles de la carte ont leurs tailles attendues mais la carte est floue.</translation>
<translation>Les cartes qui n&apos;ont pas de résolution élevée sont chargées telles quelles. Les symboles de la carte ont une taille adaptée mais la carte est floue.</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="98"/>
<location filename="../src/GUI/optionsdialog.cpp" line="104"/>
<source>HiDPI display mode</source>
<translation>Affichage à haute résolution</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="117"/>
<location filename="../src/GUI/optionsdialog.cpp" line="134"/>
<location filename="../src/GUI/optionsdialog.cpp" line="153"/>
<location filename="../src/GUI/optionsdialog.cpp" line="123"/>
<location filename="../src/GUI/optionsdialog.cpp" line="140"/>
<location filename="../src/GUI/optionsdialog.cpp" line="159"/>
<source>Width:</source>
<translation>Épaisseur :</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="118"/>
<location filename="../src/GUI/optionsdialog.cpp" line="135"/>
<location filename="../src/GUI/optionsdialog.cpp" line="154"/>
<location filename="../src/GUI/optionsdialog.cpp" line="124"/>
<location filename="../src/GUI/optionsdialog.cpp" line="141"/>
<location filename="../src/GUI/optionsdialog.cpp" line="160"/>
<source>Style:</source>
<translation>Style :</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="205"/>
<location filename="../src/GUI/optionsdialog.cpp" line="211"/>
<source>Waypoint color:</source>
<translation>Couleur des points de jalonnement :</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="206"/>
<location filename="../src/GUI/optionsdialog.cpp" line="212"/>
<source>Waypoint size:</source>
<translation>Tailles des points de jalonnement :</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="208"/>
<location filename="../src/GUI/optionsdialog.cpp" line="224"/>
<location filename="../src/GUI/optionsdialog.cpp" line="214"/>
<location filename="../src/GUI/optionsdialog.cpp" line="230"/>
<source>Color:</source>
<translation>Couleur :</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="209"/>
<location filename="../src/GUI/optionsdialog.cpp" line="225"/>
<location filename="../src/GUI/optionsdialog.cpp" line="215"/>
<location filename="../src/GUI/optionsdialog.cpp" line="231"/>
<source>Size:</source>
<translation>Taille :</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="210"/>
<location filename="../src/GUI/optionsdialog.cpp" line="216"/>
<source>Waypoints</source>
<translation>Points de jalonnement</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="221"/>
<location filename="../src/GUI/optionsdialog.cpp" line="227"/>
<source>POI color:</source>
<translation>Couleur des POI :</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="222"/>
<location filename="../src/GUI/optionsdialog.cpp" line="228"/>
<source>POI size:</source>
<translation>Taille des POI :</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="226"/>
<location filename="../src/GUI/optionsdialog.cpp" line="232"/>
<source>POIs</source>
<translation>POI</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="253"/>
<location filename="../src/GUI/optionsdialog.cpp" line="259"/>
<source>Slider color:</source>
<translation>Couleur du curseur :</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="288"/>
<location filename="../src/GUI/optionsdialog.cpp" line="294"/>
<source>Points</source>
<translation>Points</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="297"/>
<location filename="../src/GUI/optionsdialog.cpp" line="303"/>
<source>Moving average window size</source>
<translation>Largeur de fenêtre de la moyenne glissante</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="316"/>
<location filename="../src/GUI/optionsdialog.cpp" line="402"/>
<location filename="../src/GUI/optionsdialog.cpp" line="465"/>
<location filename="../src/GUI/optionsdialog.cpp" line="322"/>
<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="317"/>
<location filename="../src/GUI/optionsdialog.cpp" line="401"/>
<location filename="../src/GUI/optionsdialog.cpp" line="323"/>
<location filename="../src/GUI/optionsdialog.cpp" line="431"/>
<source>Speed:</source>
<translation>Vitesse :</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="318"/>
<location filename="../src/GUI/optionsdialog.cpp" line="324"/>
<source>Heart rate:</source>
<translation>Fréquence cardiaque :</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="319"/>
<location filename="../src/GUI/optionsdialog.cpp" line="325"/>
<source>Cadence:</source>
<translation>Cadence :</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="320"/>
<location filename="../src/GUI/optionsdialog.cpp" line="326"/>
<source>Power:</source>
<translation>Puissance :</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="322"/>
<location filename="../src/GUI/optionsdialog.cpp" line="328"/>
<source>Smoothing</source>
<translation>Lissage</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="326"/>
<location filename="../src/GUI/optionsdialog.cpp" line="332"/>
<source>Eliminate GPS outliers</source>
<translation>Supprimer les données GPS aberrantes</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="335"/>
<location filename="../src/GUI/optionsdialog.cpp" line="341"/>
<source>Smoothing:</source>
<translation>Lissage :</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="352"/>
<source>Automatic</source>
<translation>Automatique</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="366"/>
<source>mi/h</source>
<translation>mi/h</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="355"/>
<location filename="../src/GUI/optionsdialog.cpp" line="369"/>
<source>kn</source>
<translation>nd</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="358"/>
<location filename="../src/GUI/optionsdialog.cpp" line="372"/>
<source>km/h</source>
<translation>km/h</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="362"/>
<location filename="../src/GUI/optionsdialog.cpp" line="568"/>
<location filename="../src/GUI/optionsdialog.cpp" line="376"/>
<location filename="../src/GUI/optionsdialog.cpp" line="598"/>
<source>s</source>
<translation>s</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="366"/>
<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="367"/>
<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="373"/>
<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="374"/>
<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="380"/>
<location filename="../src/GUI/optionsdialog.cpp" line="438"/>
<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="381"/>
<location filename="../src/GUI/optionsdialog.cpp" line="439"/>
<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="418"/>
<location filename="../src/GUI/optionsdialog.cpp" line="448"/>
<source>Elevation</source>
<translation>Altitude</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="429"/>
<location filename="../src/GUI/optionsdialog.cpp" line="459"/>
<source>Filtering</source>
<translation>Filtrage</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="430"/>
<location filename="../src/GUI/optionsdialog.cpp" line="460"/>
<source>Sources</source>
<translation>Sources</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="431"/>
<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="464"/>
<location filename="../src/GUI/optionsdialog.cpp" line="494"/>
<source>Radius:</source>
<translation>Rayon :</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="412"/>
<location filename="../src/GUI/optionsdialog.cpp" line="442"/>
<source>Speed</source>
<translation>Vitesse</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="74"/>
<location filename="../src/GUI/optionsdialog.cpp" line="80"/>
<source>Projection:</source>
<translation>Projection :</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="96"/>
<location filename="../src/GUI/optionsdialog.cpp" line="102"/>
<source>Vector maps</source>
<translation>Cartes vectorielles</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="149"/>
<location filename="../src/GUI/optionsdialog.cpp" line="155"/>
<source>Area border width:</source>
<translation>Épaisseur de bord de zone :</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="150"/>
<location filename="../src/GUI/optionsdialog.cpp" line="156"/>
<source>Area border style:</source>
<translation>Style de bord de zone :</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="151"/>
<location filename="../src/GUI/optionsdialog.cpp" line="157"/>
<source>Area fill opacity:</source>
<translation>Opacité du remplissage des zones :</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="155"/>
<location filename="../src/GUI/optionsdialog.cpp" line="161"/>
<source>Fill opacity:</source>
<translation>Opacité de remplissage :</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="156"/>
<location filename="../src/GUI/optionsdialog.cpp" line="162"/>
<source>Areas</source>
<translation>Zones</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="450"/>
<location filename="../src/GUI/optionsdialog.cpp" line="353"/>
<source>Custom</source>
<translation>Personnalisé</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="480"/>
<source>mi</source>
<translation>mi</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="453"/>
<location filename="../src/GUI/optionsdialog.cpp" line="483"/>
<source>nmi</source>
<translation>nmi</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="456"/>
<location filename="../src/GUI/optionsdialog.cpp" line="486"/>
<source>km</source>
<translation>km</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="471"/>
<location filename="../src/GUI/optionsdialog.cpp" line="611"/>
<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="478"/>
<location filename="../src/GUI/optionsdialog.cpp" line="508"/>
<source>WYSIWYG</source>
<translation>WYSIWYG</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="479"/>
<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="484"/>
<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="486"/>
<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="508"/>
<location filename="../src/GUI/optionsdialog.cpp" line="538"/>
<source>Name</source>
<translation>Nom</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="510"/>
<location filename="../src/GUI/optionsdialog.cpp" line="540"/>
<source>Date</source>
<translation>Date</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="512"/>
<location filename="../src/GUI/optionsdialog.cpp" line="542"/>
<source>Distance</source>
<translation>Distance</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="514"/>
<location filename="../src/GUI/optionsdialog.cpp" line="544"/>
<source>Time</source>
<translation>Durée</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="516"/>
<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="518"/>
<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="533"/>
<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="543"/>
<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="544"/>
<location filename="../src/GUI/optionsdialog.cpp" line="574"/>
<source>Header</source>
<translation>Entête</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="552"/>
<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="555"/>
<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="562"/>
<location filename="../src/GUI/optionsdialog.cpp" line="592"/>
<source>MB</source>
<translation>Mo</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="572"/>
<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="573"/>
<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="589"/>
<location filename="../src/GUI/optionsdialog.cpp" line="614"/>
<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="607"/>
<location filename="../src/GUI/optionsdialog.cpp" line="637"/>
<source>Appearance</source>
<translation>Apparence</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="609"/>
<location filename="../src/GUI/optionsdialog.cpp" line="639"/>
<source>Maps</source>
<translation>Cartes</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="610"/>
<location filename="../src/GUI/optionsdialog.cpp" line="640"/>
<source>Data</source>
<translation>Données</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="612"/>
<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="641"/>
<location filename="../src/GUI/optionsdialog.cpp" line="671"/>
<source>Options</source>
<translation>Options</translation>
</message>
@ -1605,7 +1625,7 @@
<message>
<location filename="../src/GUI/routeitem.cpp" line="29"/>
<source>Links</source>
<translation type="unfinished"></translation>
<translation>Liens</translation>
</message>
</context>
<context>
@ -1836,7 +1856,7 @@
<message>
<location filename="../src/GUI/trackitem.cpp" line="33"/>
<source>Links</source>
<translation type="unfinished"></translation>
<translation>Liens</translation>
</message>
</context>
<context>
@ -1867,9 +1887,14 @@
<translation>Description</translation>
</message>
<message>
<location filename="../src/GUI/waypointitem.cpp" line="42"/>
<location filename="../src/GUI/waypointitem.cpp" line="44"/>
<source>Address</source>
<translation>Adresse</translation>
</message>
<message>
<location filename="../src/GUI/waypointitem.cpp" line="55"/>
<source>Links</source>
<translation type="unfinished"></translation>
<translation>Liens</translation>
</message>
</context>
</TS>

1900
lang/gpxsee_hu.ts Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -47,77 +47,87 @@
<context>
<name>Data</name>
<message>
<location filename="../src/data/data.cpp" line="173"/>
<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="174"/>
<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="175"/>
<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="176"/>
<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="178"/>
<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="180"/>
<location filename="../src/data/data.cpp" line="186"/>
<source>GPI files</source>
<translation>Pliki GPI</translation>
</message>
<message>
<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="181"/>
<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="182"/>
<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="183"/>
<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="184"/>
<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="185"/>
<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="186"/>
<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="188"/>
<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="187"/>
<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="189"/>
<location filename="../src/data/data.cpp" line="197"/>
<source>All files</source>
<translation>Wszystkie pliki</translation>
</message>
@ -508,8 +518,8 @@
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="413"/>
<location filename="../src/GUI/gui.cpp" line="1058"/>
<location filename="../src/GUI/gui.cpp" line="1124"/>
<location filename="../src/GUI/gui.cpp" line="1059"/>
<location filename="../src/GUI/gui.cpp" line="1125"/>
<source>Moving time</source>
<translation>Czas ruchu</translation>
</message>
@ -664,32 +674,32 @@
<translation>Katalog ze stylami:</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1036"/>
<location filename="../src/GUI/gui.cpp" line="1104"/>
<location filename="../src/GUI/gui.cpp" line="1037"/>
<location filename="../src/GUI/gui.cpp" line="1105"/>
<source>Areas</source>
<translation>Obszary</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1079"/>
<location filename="../src/GUI/gui.cpp" line="1080"/>
<location filename="../src/GUI/gui.cpp" line="1081"/>
<source>Statistics</source>
<translation>Statystyka</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1312"/>
<location filename="../src/GUI/gui.cpp" line="1313"/>
<source>Open map file</source>
<translation>Otwórz plik mapy</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1346"/>
<location filename="../src/GUI/gui.cpp" line="1347"/>
<source>No files loaded</source>
<translation>Nie załadowano żadnych plików</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1042"/>
<location filename="../src/GUI/gui.cpp" line="1046"/>
<location filename="../src/GUI/gui.cpp" line="1110"/>
<location filename="../src/GUI/gui.cpp" line="1113"/>
<location filename="../src/GUI/gui.cpp" line="1043"/>
<location filename="../src/GUI/gui.cpp" line="1047"/>
<location filename="../src/GUI/gui.cpp" line="1111"/>
<location filename="../src/GUI/gui.cpp" line="1114"/>
<source>Date</source>
<translation>Data</translation>
</message>
@ -744,18 +754,18 @@
<translation>Katalog pamięci podręcznej kafelków:</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1030"/>
<location filename="../src/GUI/gui.cpp" line="1100"/>
<location filename="../src/GUI/gui.cpp" line="1031"/>
<location filename="../src/GUI/gui.cpp" line="1101"/>
<source>Routes</source>
<translation>Trasy</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1335"/>
<location filename="../src/GUI/gui.cpp" line="1336"/>
<source>Error loading map:</source>
<translation>Wystąpił błąd podczas ładowania mapy:</translation>
</message>
<message numerus="yes">
<location filename="../src/GUI/gui.cpp" line="1350"/>
<location filename="../src/GUI/gui.cpp" line="1351"/>
<source>%n files</source>
<translation>
<numerusform>%n plik</numerusform>
@ -779,8 +789,8 @@
<translation>Eksportuj do PDF...</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1033"/>
<location filename="../src/GUI/gui.cpp" line="1102"/>
<location filename="../src/GUI/gui.cpp" line="1034"/>
<location filename="../src/GUI/gui.cpp" line="1103"/>
<source>Waypoints</source>
<translation>Punkty nawigacyjne</translation>
</message>
@ -821,13 +831,13 @@
<translation>Błąd podczas ładowania pliku POI:</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1094"/>
<location filename="../src/GUI/gui.cpp" line="1095"/>
<source>Name</source>
<translation>Nazwa</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1027"/>
<location filename="../src/GUI/gui.cpp" line="1098"/>
<location filename="../src/GUI/gui.cpp" line="1028"/>
<location filename="../src/GUI/gui.cpp" line="1099"/>
<source>Tracks</source>
<translation>Ślady</translation>
</message>
@ -844,16 +854,16 @@
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="369"/>
<location filename="../src/GUI/gui.cpp" line="1053"/>
<location filename="../src/GUI/gui.cpp" line="1120"/>
<location filename="../src/GUI/gui.cpp" line="1054"/>
<location filename="../src/GUI/gui.cpp" line="1121"/>
<source>Distance</source>
<translation>Dystans</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="376"/>
<location filename="../src/GUI/gui.cpp" line="552"/>
<location filename="../src/GUI/gui.cpp" line="1056"/>
<location filename="../src/GUI/gui.cpp" line="1122"/>
<location filename="../src/GUI/gui.cpp" line="1057"/>
<location filename="../src/GUI/gui.cpp" line="1123"/>
<source>Time</source>
<translation>Czas</translation>
</message>
@ -950,12 +960,12 @@
</message>
<message>
<location filename="../src/GUI/graphview.cpp" line="66"/>
<location filename="../src/GUI/graphview.cpp" line="173"/>
<location filename="../src/GUI/graphview.cpp" line="177"/>
<source>Distance</source>
<translation>Dystans</translation>
</message>
<message>
<location filename="../src/GUI/graphview.cpp" line="175"/>
<location filename="../src/GUI/graphview.cpp" line="179"/>
<source>Time</source>
<translation>Czas</translation>
</message>
@ -1054,478 +1064,488 @@
<context>
<name>OptionsDialog</name>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="169"/>
<location filename="../src/GUI/optionsdialog.cpp" line="175"/>
<source>Base color:</source>
<translation>Kolor podstawowy:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="170"/>
<location filename="../src/GUI/optionsdialog.cpp" line="176"/>
<source>Palette shift:</source>
<translation>Przesunięcie palety:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="114"/>
<location filename="../src/GUI/optionsdialog.cpp" line="120"/>
<source>Track width:</source>
<translation>Szerokość śladu:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="115"/>
<location filename="../src/GUI/optionsdialog.cpp" line="121"/>
<source>Track style:</source>
<translation>Styl śladu:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="119"/>
<location filename="../src/GUI/optionsdialog.cpp" line="125"/>
<source>Tracks</source>
<translation>Ślady</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="131"/>
<location filename="../src/GUI/optionsdialog.cpp" line="137"/>
<source>Route width:</source>
<translation>Szerokość trasy:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="132"/>
<location filename="../src/GUI/optionsdialog.cpp" line="138"/>
<source>Route style:</source>
<translation>Styl trasy:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="136"/>
<location filename="../src/GUI/optionsdialog.cpp" line="142"/>
<source>Routes</source>
<translation>Trasy</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="172"/>
<location filename="../src/GUI/optionsdialog.cpp" line="255"/>
<location filename="../src/GUI/optionsdialog.cpp" line="178"/>
<location filename="../src/GUI/optionsdialog.cpp" line="261"/>
<source>Use anti-aliasing</source>
<translation>Użyj wygładzania</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="252"/>
<location filename="../src/GUI/optionsdialog.cpp" line="258"/>
<source>Line width:</source>
<translation>Szerokość lini:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="276"/>
<location filename="../src/GUI/optionsdialog.cpp" line="282"/>
<source>Background color:</source>
<translation>Kolor tła:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="287"/>
<location filename="../src/GUI/optionsdialog.cpp" line="293"/>
<source>Paths</source>
<translation>Ścieżki</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="277"/>
<location filename="../src/GUI/optionsdialog.cpp" line="283"/>
<source>Map opacity:</source>
<translation>Nieprzezroczystość mapy:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="290"/>
<location filename="../src/GUI/optionsdialog.cpp" line="296"/>
<source>Map</source>
<translation>Mapa</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="289"/>
<location filename="../src/GUI/optionsdialog.cpp" line="545"/>
<location filename="../src/GUI/optionsdialog.cpp" line="295"/>
<location filename="../src/GUI/optionsdialog.cpp" line="575"/>
<source>Graphs</source>
<translation>Wykresy</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="55"/>
<location filename="../src/GUI/optionsdialog.cpp" line="61"/>
<source>High-resolution</source>
<translation>Wysoka rozdzielczość</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="56"/>
<location filename="../src/GUI/optionsdialog.cpp" line="62"/>
<source>Standard</source>
<translation>Standardowy</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="61"/>
<location filename="../src/GUI/optionsdialog.cpp" line="67"/>
<source>Non-HiDPI maps are loaded as HiDPI maps. The map is sharp but map objects are small/hard to read.</source>
<translation>Mapy inne niż HiDPI ładowane jako mapy HiDPI. Mapa jest ostra, ale obiekty mapy małe / trudne do odczytania.</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="63"/>
<location filename="../src/GUI/optionsdialog.cpp" line="69"/>
<source>Non-HiDPI maps are loaded such as they are. Map objects have the expected size but the map is blurry.</source>
<translation>Mapy inne niż HiDPI ładowane w takiej postaci, w jakiej . Obiekty mapy mają oczekiwany rozmiar, ale mapa jest rozmyta / nieostra.</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="98"/>
<location filename="../src/GUI/optionsdialog.cpp" line="104"/>
<source>HiDPI display mode</source>
<translation>Tryb wyświetlania HiDPI</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="117"/>
<location filename="../src/GUI/optionsdialog.cpp" line="134"/>
<location filename="../src/GUI/optionsdialog.cpp" line="153"/>
<location filename="../src/GUI/optionsdialog.cpp" line="123"/>
<location filename="../src/GUI/optionsdialog.cpp" line="140"/>
<location filename="../src/GUI/optionsdialog.cpp" line="159"/>
<source>Width:</source>
<translation>Szerokość:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="118"/>
<location filename="../src/GUI/optionsdialog.cpp" line="135"/>
<location filename="../src/GUI/optionsdialog.cpp" line="154"/>
<location filename="../src/GUI/optionsdialog.cpp" line="124"/>
<location filename="../src/GUI/optionsdialog.cpp" line="141"/>
<location filename="../src/GUI/optionsdialog.cpp" line="160"/>
<source>Style:</source>
<translation>Styl:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="205"/>
<location filename="../src/GUI/optionsdialog.cpp" line="211"/>
<source>Waypoint color:</source>
<translation>Kolor punktów nawigacyjnych:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="206"/>
<location filename="../src/GUI/optionsdialog.cpp" line="212"/>
<source>Waypoint size:</source>
<translation>Rozmiar punktów nawigacyjnych:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="208"/>
<location filename="../src/GUI/optionsdialog.cpp" line="224"/>
<location filename="../src/GUI/optionsdialog.cpp" line="214"/>
<location filename="../src/GUI/optionsdialog.cpp" line="230"/>
<source>Color:</source>
<translation>Kolor:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="209"/>
<location filename="../src/GUI/optionsdialog.cpp" line="225"/>
<location filename="../src/GUI/optionsdialog.cpp" line="215"/>
<location filename="../src/GUI/optionsdialog.cpp" line="231"/>
<source>Size:</source>
<translation>Rozmiar:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="210"/>
<location filename="../src/GUI/optionsdialog.cpp" line="216"/>
<source>Waypoints</source>
<translation>Punkty nawigacyjne</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="221"/>
<location filename="../src/GUI/optionsdialog.cpp" line="227"/>
<source>POI color:</source>
<translation>Kolor POI:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="222"/>
<location filename="../src/GUI/optionsdialog.cpp" line="228"/>
<source>POI size:</source>
<translation>Rozmiar POI:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="226"/>
<location filename="../src/GUI/optionsdialog.cpp" line="232"/>
<source>POIs</source>
<translation>Punkty POI</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="253"/>
<location filename="../src/GUI/optionsdialog.cpp" line="259"/>
<source>Slider color:</source>
<translation>Kolor suwaka:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="288"/>
<location filename="../src/GUI/optionsdialog.cpp" line="294"/>
<source>Points</source>
<translation>Punkty</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="297"/>
<location filename="../src/GUI/optionsdialog.cpp" line="303"/>
<source>Moving average window size</source>
<translation>Rozmiar okna średniej ruchomej</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="316"/>
<location filename="../src/GUI/optionsdialog.cpp" line="402"/>
<location filename="../src/GUI/optionsdialog.cpp" line="465"/>
<location filename="../src/GUI/optionsdialog.cpp" line="322"/>
<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="317"/>
<location filename="../src/GUI/optionsdialog.cpp" line="401"/>
<location filename="../src/GUI/optionsdialog.cpp" line="323"/>
<location filename="../src/GUI/optionsdialog.cpp" line="431"/>
<source>Speed:</source>
<translation>Prędkość:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="318"/>
<location filename="../src/GUI/optionsdialog.cpp" line="324"/>
<source>Heart rate:</source>
<translation>Tętno:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="319"/>
<location filename="../src/GUI/optionsdialog.cpp" line="325"/>
<source>Cadence:</source>
<translation>Kadencja:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="320"/>
<location filename="../src/GUI/optionsdialog.cpp" line="326"/>
<source>Power:</source>
<translation>Moc:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="322"/>
<location filename="../src/GUI/optionsdialog.cpp" line="328"/>
<source>Smoothing</source>
<translation>Wygładzanie</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="326"/>
<location filename="../src/GUI/optionsdialog.cpp" line="332"/>
<source>Eliminate GPS outliers</source>
<translation>Wyeliminuj odstające dane GPS</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="335"/>
<location filename="../src/GUI/optionsdialog.cpp" line="341"/>
<source>Smoothing:</source>
<translation>Wygładzanie:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="352"/>
<source>Automatic</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="366"/>
<source>mi/h</source>
<translation>mi/h</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="355"/>
<location filename="../src/GUI/optionsdialog.cpp" line="369"/>
<source>kn</source>
<translation>kn</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="358"/>
<location filename="../src/GUI/optionsdialog.cpp" line="372"/>
<source>km/h</source>
<translation>km/h</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="362"/>
<location filename="../src/GUI/optionsdialog.cpp" line="568"/>
<location filename="../src/GUI/optionsdialog.cpp" line="376"/>
<location filename="../src/GUI/optionsdialog.cpp" line="598"/>
<source>s</source>
<translation>s</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="366"/>
<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="367"/>
<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="373"/>
<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="374"/>
<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="380"/>
<location filename="../src/GUI/optionsdialog.cpp" line="438"/>
<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="381"/>
<location filename="../src/GUI/optionsdialog.cpp" line="439"/>
<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="418"/>
<location filename="../src/GUI/optionsdialog.cpp" line="448"/>
<source>Elevation</source>
<translation>Wysokość</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="429"/>
<location filename="../src/GUI/optionsdialog.cpp" line="459"/>
<source>Filtering</source>
<translation>Filtrowanie</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="430"/>
<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="431"/>
<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="464"/>
<location filename="../src/GUI/optionsdialog.cpp" line="494"/>
<source>Radius:</source>
<translation>Promień:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="412"/>
<location filename="../src/GUI/optionsdialog.cpp" line="442"/>
<source>Speed</source>
<translation>Prędkość</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="74"/>
<location filename="../src/GUI/optionsdialog.cpp" line="80"/>
<source>Projection:</source>
<translation>Odwzorowanie:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="96"/>
<location filename="../src/GUI/optionsdialog.cpp" line="102"/>
<source>Vector maps</source>
<translation>Mapy wektorowe</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="149"/>
<location filename="../src/GUI/optionsdialog.cpp" line="155"/>
<source>Area border width:</source>
<translation>Szerokość granicy obszaru:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="150"/>
<location filename="../src/GUI/optionsdialog.cpp" line="156"/>
<source>Area border style:</source>
<translation>Styl obramowania obszaru:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="151"/>
<location filename="../src/GUI/optionsdialog.cpp" line="157"/>
<source>Area fill opacity:</source>
<translation>Nieprzezroczystość wypełnienia obszaru:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="155"/>
<location filename="../src/GUI/optionsdialog.cpp" line="161"/>
<source>Fill opacity:</source>
<translation>Nieprzezroczystość wypełnienia:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="156"/>
<location filename="../src/GUI/optionsdialog.cpp" line="162"/>
<source>Areas</source>
<translation>Obszary</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="450"/>
<location filename="../src/GUI/optionsdialog.cpp" line="353"/>
<source>Custom</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="480"/>
<source>mi</source>
<translation>mi</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="453"/>
<location filename="../src/GUI/optionsdialog.cpp" line="483"/>
<source>nmi</source>
<translation>nmi</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="456"/>
<location filename="../src/GUI/optionsdialog.cpp" line="486"/>
<source>km</source>
<translation>km</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="471"/>
<location filename="../src/GUI/optionsdialog.cpp" line="611"/>
<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="478"/>
<location filename="../src/GUI/optionsdialog.cpp" line="508"/>
<source>WYSIWYG</source>
<translation>WYSIWYG</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="479"/>
<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="484"/>
<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="486"/>
<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="508"/>
<location filename="../src/GUI/optionsdialog.cpp" line="538"/>
<source>Name</source>
<translation>Nazwa</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="510"/>
<location filename="../src/GUI/optionsdialog.cpp" line="540"/>
<source>Date</source>
<translation>Data</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="512"/>
<location filename="../src/GUI/optionsdialog.cpp" line="542"/>
<source>Distance</source>
<translation>Dystans</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="514"/>
<location filename="../src/GUI/optionsdialog.cpp" line="544"/>
<source>Time</source>
<translation>Czas</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="516"/>
<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="518"/>
<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="533"/>
<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="543"/>
<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="544"/>
<location filename="../src/GUI/optionsdialog.cpp" line="574"/>
<source>Header</source>
<translation>Nagłówek</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="552"/>
<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="555"/>
<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="562"/>
<location filename="../src/GUI/optionsdialog.cpp" line="592"/>
<source>MB</source>
<translation>MB</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="572"/>
<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="573"/>
<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="589"/>
<location filename="../src/GUI/optionsdialog.cpp" line="614"/>
<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="607"/>
<location filename="../src/GUI/optionsdialog.cpp" line="637"/>
<source>Appearance</source>
<translation>Wygląd</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="609"/>
<location filename="../src/GUI/optionsdialog.cpp" line="639"/>
<source>Maps</source>
<translation>Mapy</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="610"/>
<location filename="../src/GUI/optionsdialog.cpp" line="640"/>
<source>Data</source>
<translation>Dane</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="612"/>
<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="641"/>
<location filename="../src/GUI/optionsdialog.cpp" line="671"/>
<source>Options</source>
<translation>Opcje</translation>
</message>
@ -1868,7 +1888,12 @@
<translation>Opis</translation>
</message>
<message>
<location filename="../src/GUI/waypointitem.cpp" line="42"/>
<location filename="../src/GUI/waypointitem.cpp" line="44"/>
<source>Address</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/GUI/waypointitem.cpp" line="55"/>
<source>Links</source>
<translation type="unfinished"></translation>
</message>

View File

@ -47,77 +47,87 @@
<context>
<name>Data</name>
<message>
<location filename="../src/data/data.cpp" line="173"/>
<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="174"/>
<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="175"/>
<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="176"/>
<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="178"/>
<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="180"/>
<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="187"/>
<source>GPX files</source>
<translation>Arquivos GPX</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="181"/>
<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="182"/>
<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="183"/>
<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="184"/>
<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="185"/>
<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="186"/>
<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="187"/>
<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="188"/>
<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="189"/>
<location filename="../src/data/data.cpp" line="197"/>
<source>All files</source>
<translation>Todos os arquivos</translation>
</message>
@ -484,16 +494,16 @@
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="369"/>
<location filename="../src/GUI/gui.cpp" line="1053"/>
<location filename="../src/GUI/gui.cpp" line="1120"/>
<location filename="../src/GUI/gui.cpp" line="1054"/>
<location filename="../src/GUI/gui.cpp" line="1121"/>
<source>Distance</source>
<translation>Distância</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="376"/>
<location filename="../src/GUI/gui.cpp" line="552"/>
<location filename="../src/GUI/gui.cpp" line="1056"/>
<location filename="../src/GUI/gui.cpp" line="1122"/>
<location filename="../src/GUI/gui.cpp" line="1057"/>
<location filename="../src/GUI/gui.cpp" line="1123"/>
<source>Time</source>
<translation>Tempo</translation>
</message>
@ -524,8 +534,8 @@
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="413"/>
<location filename="../src/GUI/gui.cpp" line="1058"/>
<location filename="../src/GUI/gui.cpp" line="1124"/>
<location filename="../src/GUI/gui.cpp" line="1059"/>
<location filename="../src/GUI/gui.cpp" line="1125"/>
<source>Moving time</source>
<translation>Tempo em movimento</translation>
</message>
@ -791,65 +801,65 @@
<translation>Erro ao carregar arquivo POI:</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1027"/>
<location filename="../src/GUI/gui.cpp" line="1098"/>
<location filename="../src/GUI/gui.cpp" line="1028"/>
<location filename="../src/GUI/gui.cpp" line="1099"/>
<source>Tracks</source>
<translation>Trilhas</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1030"/>
<location filename="../src/GUI/gui.cpp" line="1100"/>
<location filename="../src/GUI/gui.cpp" line="1031"/>
<location filename="../src/GUI/gui.cpp" line="1101"/>
<source>Routes</source>
<translation>Rotas</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1033"/>
<location filename="../src/GUI/gui.cpp" line="1102"/>
<location filename="../src/GUI/gui.cpp" line="1034"/>
<location filename="../src/GUI/gui.cpp" line="1103"/>
<source>Waypoints</source>
<translation>Waypoints</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1036"/>
<location filename="../src/GUI/gui.cpp" line="1104"/>
<location filename="../src/GUI/gui.cpp" line="1037"/>
<location filename="../src/GUI/gui.cpp" line="1105"/>
<source>Areas</source>
<translation>Áreas</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1042"/>
<location filename="../src/GUI/gui.cpp" line="1046"/>
<location filename="../src/GUI/gui.cpp" line="1110"/>
<location filename="../src/GUI/gui.cpp" line="1113"/>
<location filename="../src/GUI/gui.cpp" line="1043"/>
<location filename="../src/GUI/gui.cpp" line="1047"/>
<location filename="../src/GUI/gui.cpp" line="1111"/>
<location filename="../src/GUI/gui.cpp" line="1114"/>
<source>Date</source>
<translation>Data</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1079"/>
<location filename="../src/GUI/gui.cpp" line="1080"/>
<location filename="../src/GUI/gui.cpp" line="1081"/>
<source>Statistics</source>
<translation>Estatísticas</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1094"/>
<location filename="../src/GUI/gui.cpp" line="1095"/>
<source>Name</source>
<translation>Nome</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1312"/>
<location filename="../src/GUI/gui.cpp" line="1313"/>
<source>Open map file</source>
<translation>Abrir arquivo de mapa</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1335"/>
<location filename="../src/GUI/gui.cpp" line="1336"/>
<source>Error loading map:</source>
<translation>Erro ao carregar o mapa:</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1346"/>
<location filename="../src/GUI/gui.cpp" line="1347"/>
<source>No files loaded</source>
<translation>Nenhum arquivo carregado</translation>
</message>
<message numerus="yes">
<location filename="../src/GUI/gui.cpp" line="1350"/>
<location filename="../src/GUI/gui.cpp" line="1351"/>
<source>%n files</source>
<translation>
<numerusform>%n arquivo</numerusform>
@ -908,7 +918,7 @@
</message>
<message>
<location filename="../src/GUI/graphview.cpp" line="66"/>
<location filename="../src/GUI/graphview.cpp" line="173"/>
<location filename="../src/GUI/graphview.cpp" line="177"/>
<source>Distance</source>
<translation>Distância</translation>
</message>
@ -954,7 +964,7 @@
<translation>h</translation>
</message>
<message>
<location filename="../src/GUI/graphview.cpp" line="175"/>
<location filename="../src/GUI/graphview.cpp" line="179"/>
<source>Time</source>
<translation>Tempo</translation>
</message>
@ -1053,478 +1063,488 @@
<context>
<name>OptionsDialog</name>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="55"/>
<location filename="../src/GUI/optionsdialog.cpp" line="61"/>
<source>High-resolution</source>
<translation>Alta resolução</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="56"/>
<location filename="../src/GUI/optionsdialog.cpp" line="62"/>
<source>Standard</source>
<translation>Padrão</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="61"/>
<location filename="../src/GUI/optionsdialog.cpp" line="67"/>
<source>Non-HiDPI maps are loaded as HiDPI maps. The map is sharp but map objects are small/hard to read.</source>
<translation>Mapas que não são HiDPI são carregados como se o fossem. O Mapa é nítido, mas os objetos são pequenos/difíceis de ler.</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="63"/>
<location filename="../src/GUI/optionsdialog.cpp" line="69"/>
<source>Non-HiDPI maps are loaded such as they are. Map objects have the expected size but the map is blurry.</source>
<translation>Mapas que não são HiDPI são carregados do modo que são. Objetos de mapa têm o tamanho esperado, mas o mapa é desfocado.</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="74"/>
<location filename="../src/GUI/optionsdialog.cpp" line="80"/>
<source>Projection:</source>
<translation>Projeção:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="96"/>
<location filename="../src/GUI/optionsdialog.cpp" line="102"/>
<source>Vector maps</source>
<translation>Mapas vetoriais</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="98"/>
<location filename="../src/GUI/optionsdialog.cpp" line="104"/>
<source>HiDPI display mode</source>
<translation>Modo de exibição HiDPI</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="114"/>
<location filename="../src/GUI/optionsdialog.cpp" line="120"/>
<source>Track width:</source>
<translation>Largura da trilha:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="115"/>
<location filename="../src/GUI/optionsdialog.cpp" line="121"/>
<source>Track style:</source>
<translation>Estilo da trilha:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="117"/>
<location filename="../src/GUI/optionsdialog.cpp" line="134"/>
<location filename="../src/GUI/optionsdialog.cpp" line="153"/>
<location filename="../src/GUI/optionsdialog.cpp" line="123"/>
<location filename="../src/GUI/optionsdialog.cpp" line="140"/>
<location filename="../src/GUI/optionsdialog.cpp" line="159"/>
<source>Width:</source>
<translation>Largura:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="118"/>
<location filename="../src/GUI/optionsdialog.cpp" line="135"/>
<location filename="../src/GUI/optionsdialog.cpp" line="154"/>
<location filename="../src/GUI/optionsdialog.cpp" line="124"/>
<location filename="../src/GUI/optionsdialog.cpp" line="141"/>
<location filename="../src/GUI/optionsdialog.cpp" line="160"/>
<source>Style:</source>
<translation>Estilo:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="119"/>
<location filename="../src/GUI/optionsdialog.cpp" line="125"/>
<source>Tracks</source>
<translation>Trilhas</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="131"/>
<location filename="../src/GUI/optionsdialog.cpp" line="137"/>
<source>Route width:</source>
<translation>Largura da rota:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="132"/>
<location filename="../src/GUI/optionsdialog.cpp" line="138"/>
<source>Route style:</source>
<translation>Estilo da rota:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="136"/>
<location filename="../src/GUI/optionsdialog.cpp" line="142"/>
<source>Routes</source>
<translation>Rotas</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="149"/>
<location filename="../src/GUI/optionsdialog.cpp" line="155"/>
<source>Area border width:</source>
<translation>Largura de borda de área:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="150"/>
<location filename="../src/GUI/optionsdialog.cpp" line="156"/>
<source>Area border style:</source>
<translation>Estilo de borda de área:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="151"/>
<location filename="../src/GUI/optionsdialog.cpp" line="157"/>
<source>Area fill opacity:</source>
<translation>Opacidade de preenchimento de área:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="155"/>
<location filename="../src/GUI/optionsdialog.cpp" line="161"/>
<source>Fill opacity:</source>
<translation>Opacidade de preenchimento:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="156"/>
<location filename="../src/GUI/optionsdialog.cpp" line="162"/>
<source>Areas</source>
<translation>Áreas</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="169"/>
<location filename="../src/GUI/optionsdialog.cpp" line="175"/>
<source>Base color:</source>
<translation>Cor de base:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="170"/>
<location filename="../src/GUI/optionsdialog.cpp" line="176"/>
<source>Palette shift:</source>
<translation>Deslocamento de paleta:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="172"/>
<location filename="../src/GUI/optionsdialog.cpp" line="255"/>
<location filename="../src/GUI/optionsdialog.cpp" line="178"/>
<location filename="../src/GUI/optionsdialog.cpp" line="261"/>
<source>Use anti-aliasing</source>
<translation>Usar anti-aliasing</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="205"/>
<location filename="../src/GUI/optionsdialog.cpp" line="211"/>
<source>Waypoint color:</source>
<translation>Cor de waypoint:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="206"/>
<location filename="../src/GUI/optionsdialog.cpp" line="212"/>
<source>Waypoint size:</source>
<translation>Tamanho de waypoint:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="208"/>
<location filename="../src/GUI/optionsdialog.cpp" line="224"/>
<location filename="../src/GUI/optionsdialog.cpp" line="214"/>
<location filename="../src/GUI/optionsdialog.cpp" line="230"/>
<source>Color:</source>
<translation>Cor:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="209"/>
<location filename="../src/GUI/optionsdialog.cpp" line="225"/>
<location filename="../src/GUI/optionsdialog.cpp" line="215"/>
<location filename="../src/GUI/optionsdialog.cpp" line="231"/>
<source>Size:</source>
<translation>Tamanho:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="210"/>
<location filename="../src/GUI/optionsdialog.cpp" line="216"/>
<source>Waypoints</source>
<translation>Waypoints</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="221"/>
<location filename="../src/GUI/optionsdialog.cpp" line="227"/>
<source>POI color:</source>
<translation>Cor do POI:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="222"/>
<location filename="../src/GUI/optionsdialog.cpp" line="228"/>
<source>POI size:</source>
<translation>Tamanho do POI:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="226"/>
<location filename="../src/GUI/optionsdialog.cpp" line="232"/>
<source>POIs</source>
<translation>POIs</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="252"/>
<location filename="../src/GUI/optionsdialog.cpp" line="258"/>
<source>Line width:</source>
<translation>Largura de linha:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="253"/>
<location filename="../src/GUI/optionsdialog.cpp" line="259"/>
<source>Slider color:</source>
<translation>Cor do cursor:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="276"/>
<location filename="../src/GUI/optionsdialog.cpp" line="282"/>
<source>Background color:</source>
<translation>Cor de fundo:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="277"/>
<location filename="../src/GUI/optionsdialog.cpp" line="283"/>
<source>Map opacity:</source>
<translation>Opacidade do mapa:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="287"/>
<location filename="../src/GUI/optionsdialog.cpp" line="293"/>
<source>Paths</source>
<translation>Caminhos</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="288"/>
<location filename="../src/GUI/optionsdialog.cpp" line="294"/>
<source>Points</source>
<translation>Pontos</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="289"/>
<location filename="../src/GUI/optionsdialog.cpp" line="545"/>
<location filename="../src/GUI/optionsdialog.cpp" line="295"/>
<location filename="../src/GUI/optionsdialog.cpp" line="575"/>
<source>Graphs</source>
<translation>Gráficos</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="290"/>
<location filename="../src/GUI/optionsdialog.cpp" line="296"/>
<source>Map</source>
<translation>Mapa</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="297"/>
<location filename="../src/GUI/optionsdialog.cpp" line="303"/>
<source>Moving average window size</source>
<translation>Tamanho de janela da média móvel</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="316"/>
<location filename="../src/GUI/optionsdialog.cpp" line="402"/>
<location filename="../src/GUI/optionsdialog.cpp" line="465"/>
<location filename="../src/GUI/optionsdialog.cpp" line="322"/>
<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="317"/>
<location filename="../src/GUI/optionsdialog.cpp" line="401"/>
<location filename="../src/GUI/optionsdialog.cpp" line="323"/>
<location filename="../src/GUI/optionsdialog.cpp" line="431"/>
<source>Speed:</source>
<translation>Velocidade:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="318"/>
<location filename="../src/GUI/optionsdialog.cpp" line="324"/>
<source>Heart rate:</source>
<translation>Frequência cardiaca:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="319"/>
<location filename="../src/GUI/optionsdialog.cpp" line="325"/>
<source>Cadence:</source>
<translation>Cadência:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="320"/>
<location filename="../src/GUI/optionsdialog.cpp" line="326"/>
<source>Power:</source>
<translation>Potência:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="322"/>
<location filename="../src/GUI/optionsdialog.cpp" line="328"/>
<source>Smoothing</source>
<translation>Suavizar</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="326"/>
<location filename="../src/GUI/optionsdialog.cpp" line="332"/>
<source>Eliminate GPS outliers</source>
<translation>Eliminar valores atípicos do GPS</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="335"/>
<location filename="../src/GUI/optionsdialog.cpp" line="341"/>
<source>Smoothing:</source>
<translation>Suavizar:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="352"/>
<source>Automatic</source>
<translation>Automática</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="353"/>
<source>Custom</source>
<translation>Personalizada</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="366"/>
<source>mi/h</source>
<translation>mi/h</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="355"/>
<location filename="../src/GUI/optionsdialog.cpp" line="369"/>
<source>kn</source>
<translation>kn</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="358"/>
<location filename="../src/GUI/optionsdialog.cpp" line="372"/>
<source>km/h</source>
<translation>km/h</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="362"/>
<location filename="../src/GUI/optionsdialog.cpp" line="568"/>
<location filename="../src/GUI/optionsdialog.cpp" line="376"/>
<location filename="../src/GUI/optionsdialog.cpp" line="598"/>
<source>s</source>
<translation>s</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="366"/>
<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="367"/>
<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="373"/>
<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="374"/>
<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="380"/>
<location filename="../src/GUI/optionsdialog.cpp" line="438"/>
<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="381"/>
<location filename="../src/GUI/optionsdialog.cpp" line="439"/>
<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="412"/>
<location filename="../src/GUI/optionsdialog.cpp" line="442"/>
<source>Speed</source>
<translation>Velocidade</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="418"/>
<location filename="../src/GUI/optionsdialog.cpp" line="448"/>
<source>Elevation</source>
<translation>Altitude</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="429"/>
<location filename="../src/GUI/optionsdialog.cpp" line="459"/>
<source>Filtering</source>
<translation>Filtragem</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="430"/>
<location filename="../src/GUI/optionsdialog.cpp" line="460"/>
<source>Sources</source>
<translation>Fontes</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="431"/>
<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="450"/>
<location filename="../src/GUI/optionsdialog.cpp" line="480"/>
<source>mi</source>
<translation>mi</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="453"/>
<location filename="../src/GUI/optionsdialog.cpp" line="483"/>
<source>nmi</source>
<translation>nmi</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="456"/>
<location filename="../src/GUI/optionsdialog.cpp" line="486"/>
<source>km</source>
<translation>km</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="464"/>
<location filename="../src/GUI/optionsdialog.cpp" line="494"/>
<source>Radius:</source>
<translation>Raio:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="471"/>
<location filename="../src/GUI/optionsdialog.cpp" line="611"/>
<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="478"/>
<location filename="../src/GUI/optionsdialog.cpp" line="508"/>
<source>WYSIWYG</source>
<translation>WYSIWYG</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="479"/>
<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="484"/>
<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="486"/>
<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="508"/>
<location filename="../src/GUI/optionsdialog.cpp" line="538"/>
<source>Name</source>
<translation>Nome</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="510"/>
<location filename="../src/GUI/optionsdialog.cpp" line="540"/>
<source>Date</source>
<translation>Data</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="512"/>
<location filename="../src/GUI/optionsdialog.cpp" line="542"/>
<source>Distance</source>
<translation>Distância</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="514"/>
<location filename="../src/GUI/optionsdialog.cpp" line="544"/>
<source>Time</source>
<translation>Tempo</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="516"/>
<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="518"/>
<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="533"/>
<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="543"/>
<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="544"/>
<location filename="../src/GUI/optionsdialog.cpp" line="574"/>
<source>Header</source>
<translation>Cabeçalho</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="552"/>
<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="555"/>
<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="562"/>
<location filename="../src/GUI/optionsdialog.cpp" line="592"/>
<source>MB</source>
<translation>MB</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="572"/>
<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="573"/>
<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="589"/>
<location filename="../src/GUI/optionsdialog.cpp" line="614"/>
<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="607"/>
<location filename="../src/GUI/optionsdialog.cpp" line="637"/>
<source>Appearance</source>
<translation>Aparência</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="609"/>
<location filename="../src/GUI/optionsdialog.cpp" line="639"/>
<source>Maps</source>
<translation>Mapas</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="610"/>
<location filename="../src/GUI/optionsdialog.cpp" line="640"/>
<source>Data</source>
<translation>Dados</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="612"/>
<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="641"/>
<location filename="../src/GUI/optionsdialog.cpp" line="671"/>
<source>Options</source>
<translation>Preferências</translation>
</message>
@ -1867,7 +1887,12 @@
<translation>Descrição</translation>
</message>
<message>
<location filename="../src/GUI/waypointitem.cpp" line="42"/>
<location filename="../src/GUI/waypointitem.cpp" line="44"/>
<source>Address</source>
<translation>Endereço</translation>
</message>
<message>
<location filename="../src/GUI/waypointitem.cpp" line="55"/>
<source>Links</source>
<translation>Links</translation>
</message>

View File

@ -47,77 +47,87 @@
<context>
<name>Data</name>
<message>
<location filename="../src/data/data.cpp" line="173"/>
<location filename="../src/data/data.cpp" line="179"/>
<source>Supported files</source>
<translation>Все поддерживаемые файлы</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="174"/>
<location filename="../src/data/data.cpp" line="180"/>
<source>CSV files</source>
<translation>CSV файлы</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="175"/>
<location filename="../src/data/data.cpp" line="181"/>
<source>CUP files</source>
<translation>CUP файлы</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="176"/>
<location filename="../src/data/data.cpp" line="182"/>
<source>FIT files</source>
<translation>FIT файлы</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="178"/>
<location filename="../src/data/data.cpp" line="184"/>
<source>GeoJSON files</source>
<translation>GeoJSON файлы</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="180"/>
<location filename="../src/data/data.cpp" line="186"/>
<source>GPI files</source>
<translation>GPI файлы</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="187"/>
<source>GPX files</source>
<translation>GPX файлы</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="181"/>
<location filename="../src/data/data.cpp" line="188"/>
<source>IGC files</source>
<translation>IGC файлы</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="182"/>
<location filename="../src/data/data.cpp" line="189"/>
<source>JPEG images</source>
<translation>JPEG изображения</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="183"/>
<location filename="../src/data/data.cpp" line="190"/>
<source>KML files</source>
<translation>KML файлы</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="184"/>
<location filename="../src/data/data.cpp" line="191"/>
<source>LOC files</source>
<translation>LOC файлы</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="185"/>
<location filename="../src/data/data.cpp" line="192"/>
<source>NMEA files</source>
<translation>NMEA файлы</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="186"/>
<location filename="../src/data/data.cpp" line="193"/>
<source>OziExplorer files</source>
<translation>OziExplorer файлы</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="188"/>
<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="187"/>
<location filename="../src/data/data.cpp" line="194"/>
<source>SLF files</source>
<translation>SLF файлы</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="189"/>
<location filename="../src/data/data.cpp" line="197"/>
<source>All files</source>
<translation>Все файлы</translation>
</message>
@ -508,8 +518,8 @@
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="413"/>
<location filename="../src/GUI/gui.cpp" line="1058"/>
<location filename="../src/GUI/gui.cpp" line="1124"/>
<location filename="../src/GUI/gui.cpp" line="1059"/>
<location filename="../src/GUI/gui.cpp" line="1125"/>
<source>Moving time</source>
<translation>Время движения</translation>
</message>
@ -664,32 +674,32 @@
<translation>Каталог со стилями:</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1036"/>
<location filename="../src/GUI/gui.cpp" line="1104"/>
<location filename="../src/GUI/gui.cpp" line="1037"/>
<location filename="../src/GUI/gui.cpp" line="1105"/>
<source>Areas</source>
<translation>Области</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1079"/>
<location filename="../src/GUI/gui.cpp" line="1080"/>
<location filename="../src/GUI/gui.cpp" line="1081"/>
<source>Statistics</source>
<translation>Статистика</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1312"/>
<location filename="../src/GUI/gui.cpp" line="1313"/>
<source>Open map file</source>
<translation>Открыть файл карты</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1346"/>
<location filename="../src/GUI/gui.cpp" line="1347"/>
<source>No files loaded</source>
<translation>Нет загруженных файлов</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1042"/>
<location filename="../src/GUI/gui.cpp" line="1046"/>
<location filename="../src/GUI/gui.cpp" line="1110"/>
<location filename="../src/GUI/gui.cpp" line="1113"/>
<location filename="../src/GUI/gui.cpp" line="1043"/>
<location filename="../src/GUI/gui.cpp" line="1047"/>
<location filename="../src/GUI/gui.cpp" line="1111"/>
<location filename="../src/GUI/gui.cpp" line="1114"/>
<source>Date</source>
<translation>Дата</translation>
</message>
@ -744,18 +754,18 @@
<translation>Каталог кеша тайлов:</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1030"/>
<location filename="../src/GUI/gui.cpp" line="1100"/>
<location filename="../src/GUI/gui.cpp" line="1031"/>
<location filename="../src/GUI/gui.cpp" line="1101"/>
<source>Routes</source>
<translation>Маршруты</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1335"/>
<location filename="../src/GUI/gui.cpp" line="1336"/>
<source>Error loading map:</source>
<translation>Ошибка загрузки карты:</translation>
</message>
<message numerus="yes">
<location filename="../src/GUI/gui.cpp" line="1350"/>
<location filename="../src/GUI/gui.cpp" line="1351"/>
<source>%n files</source>
<translation>
<numerusform>%n файл</numerusform>
@ -779,8 +789,8 @@
<translation>Экспорт в PDF</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1033"/>
<location filename="../src/GUI/gui.cpp" line="1102"/>
<location filename="../src/GUI/gui.cpp" line="1034"/>
<location filename="../src/GUI/gui.cpp" line="1103"/>
<source>Waypoints</source>
<translation>Точки</translation>
</message>
@ -821,13 +831,13 @@
<translation>Ошибка загрузки файла с точками POI:</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1094"/>
<location filename="../src/GUI/gui.cpp" line="1095"/>
<source>Name</source>
<translation>Имя</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1027"/>
<location filename="../src/GUI/gui.cpp" line="1098"/>
<location filename="../src/GUI/gui.cpp" line="1028"/>
<location filename="../src/GUI/gui.cpp" line="1099"/>
<source>Tracks</source>
<translation>Треки</translation>
</message>
@ -844,16 +854,16 @@
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="369"/>
<location filename="../src/GUI/gui.cpp" line="1053"/>
<location filename="../src/GUI/gui.cpp" line="1120"/>
<location filename="../src/GUI/gui.cpp" line="1054"/>
<location filename="../src/GUI/gui.cpp" line="1121"/>
<source>Distance</source>
<translation>Расстояние</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="376"/>
<location filename="../src/GUI/gui.cpp" line="552"/>
<location filename="../src/GUI/gui.cpp" line="1056"/>
<location filename="../src/GUI/gui.cpp" line="1122"/>
<location filename="../src/GUI/gui.cpp" line="1057"/>
<location filename="../src/GUI/gui.cpp" line="1123"/>
<source>Time</source>
<translation>Время</translation>
</message>
@ -950,12 +960,12 @@
</message>
<message>
<location filename="../src/GUI/graphview.cpp" line="66"/>
<location filename="../src/GUI/graphview.cpp" line="173"/>
<location filename="../src/GUI/graphview.cpp" line="177"/>
<source>Distance</source>
<translation>Расстояние</translation>
</message>
<message>
<location filename="../src/GUI/graphview.cpp" line="175"/>
<location filename="../src/GUI/graphview.cpp" line="179"/>
<source>Time</source>
<translation>Время</translation>
</message>
@ -1054,478 +1064,488 @@
<context>
<name>OptionsDialog</name>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="169"/>
<location filename="../src/GUI/optionsdialog.cpp" line="175"/>
<source>Base color:</source>
<translation>Основной цвет:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="170"/>
<location filename="../src/GUI/optionsdialog.cpp" line="176"/>
<source>Palette shift:</source>
<translation>Смещение палитры:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="114"/>
<location filename="../src/GUI/optionsdialog.cpp" line="120"/>
<source>Track width:</source>
<translation>Толщина трека:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="115"/>
<location filename="../src/GUI/optionsdialog.cpp" line="121"/>
<source>Track style:</source>
<translation>Стиль трека:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="119"/>
<location filename="../src/GUI/optionsdialog.cpp" line="125"/>
<source>Tracks</source>
<translation>Треки</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="131"/>
<location filename="../src/GUI/optionsdialog.cpp" line="137"/>
<source>Route width:</source>
<translation>Толщина маршрута:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="132"/>
<location filename="../src/GUI/optionsdialog.cpp" line="138"/>
<source>Route style:</source>
<translation>Стиль маршрута:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="136"/>
<location filename="../src/GUI/optionsdialog.cpp" line="142"/>
<source>Routes</source>
<translation>Маршруты</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="172"/>
<location filename="../src/GUI/optionsdialog.cpp" line="255"/>
<location filename="../src/GUI/optionsdialog.cpp" line="178"/>
<location filename="../src/GUI/optionsdialog.cpp" line="261"/>
<source>Use anti-aliasing</source>
<translation>Применять сглаживание</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="252"/>
<location filename="../src/GUI/optionsdialog.cpp" line="258"/>
<source>Line width:</source>
<translation>Толщина линии:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="276"/>
<location filename="../src/GUI/optionsdialog.cpp" line="282"/>
<source>Background color:</source>
<translation>Цвет фона:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="287"/>
<location filename="../src/GUI/optionsdialog.cpp" line="293"/>
<source>Paths</source>
<translation>Треки</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="277"/>
<location filename="../src/GUI/optionsdialog.cpp" line="283"/>
<source>Map opacity:</source>
<translation>Прозрачность карты:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="290"/>
<location filename="../src/GUI/optionsdialog.cpp" line="296"/>
<source>Map</source>
<translation>Карты</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="289"/>
<location filename="../src/GUI/optionsdialog.cpp" line="545"/>
<location filename="../src/GUI/optionsdialog.cpp" line="295"/>
<location filename="../src/GUI/optionsdialog.cpp" line="575"/>
<source>Graphs</source>
<translation>Графики</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="55"/>
<location filename="../src/GUI/optionsdialog.cpp" line="61"/>
<source>High-resolution</source>
<translation>Высокое разрешение</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="56"/>
<location filename="../src/GUI/optionsdialog.cpp" line="62"/>
<source>Standard</source>
<translation>Стандартный</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="61"/>
<location filename="../src/GUI/optionsdialog.cpp" line="67"/>
<source>Non-HiDPI maps are loaded as HiDPI maps. The map is sharp but map objects are small/hard to read.</source>
<translation>Не-HiDPI карты загружаются как HiDPI карты. Карта резкая, но объекты карты маленькие/трудночитаемые.</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="63"/>
<location filename="../src/GUI/optionsdialog.cpp" line="69"/>
<source>Non-HiDPI maps are loaded such as they are. Map objects have the expected size but the map is blurry.</source>
<translation>Не-HiDPI карты загружаются так, как есть. Объекты карты имеют ожидаемый размер, но карта размытая.</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="98"/>
<location filename="../src/GUI/optionsdialog.cpp" line="104"/>
<source>HiDPI display mode</source>
<translation>HiDPI режим отображения</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="117"/>
<location filename="../src/GUI/optionsdialog.cpp" line="134"/>
<location filename="../src/GUI/optionsdialog.cpp" line="153"/>
<location filename="../src/GUI/optionsdialog.cpp" line="123"/>
<location filename="../src/GUI/optionsdialog.cpp" line="140"/>
<location filename="../src/GUI/optionsdialog.cpp" line="159"/>
<source>Width:</source>
<translation>Толщина:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="118"/>
<location filename="../src/GUI/optionsdialog.cpp" line="135"/>
<location filename="../src/GUI/optionsdialog.cpp" line="154"/>
<location filename="../src/GUI/optionsdialog.cpp" line="124"/>
<location filename="../src/GUI/optionsdialog.cpp" line="141"/>
<location filename="../src/GUI/optionsdialog.cpp" line="160"/>
<source>Style:</source>
<translation>Стиль:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="205"/>
<location filename="../src/GUI/optionsdialog.cpp" line="211"/>
<source>Waypoint color:</source>
<translation>Цвет точки:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="206"/>
<location filename="../src/GUI/optionsdialog.cpp" line="212"/>
<source>Waypoint size:</source>
<translation>Размер точки:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="208"/>
<location filename="../src/GUI/optionsdialog.cpp" line="224"/>
<location filename="../src/GUI/optionsdialog.cpp" line="214"/>
<location filename="../src/GUI/optionsdialog.cpp" line="230"/>
<source>Color:</source>
<translation>Цвет:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="209"/>
<location filename="../src/GUI/optionsdialog.cpp" line="225"/>
<location filename="../src/GUI/optionsdialog.cpp" line="215"/>
<location filename="../src/GUI/optionsdialog.cpp" line="231"/>
<source>Size:</source>
<translation>Размер:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="210"/>
<location filename="../src/GUI/optionsdialog.cpp" line="216"/>
<source>Waypoints</source>
<translation>Точки</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="221"/>
<location filename="../src/GUI/optionsdialog.cpp" line="227"/>
<source>POI color:</source>
<translation>Цвет точки POI:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="222"/>
<location filename="../src/GUI/optionsdialog.cpp" line="228"/>
<source>POI size:</source>
<translation>Размер точки POI:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="226"/>
<location filename="../src/GUI/optionsdialog.cpp" line="232"/>
<source>POIs</source>
<translation>Точки POI</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="253"/>
<location filename="../src/GUI/optionsdialog.cpp" line="259"/>
<source>Slider color:</source>
<translation>Цвет ползунка:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="288"/>
<location filename="../src/GUI/optionsdialog.cpp" line="294"/>
<source>Points</source>
<translation>Точки</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="297"/>
<location filename="../src/GUI/optionsdialog.cpp" line="303"/>
<source>Moving average window size</source>
<translation>Ширины окна усреднения</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="316"/>
<location filename="../src/GUI/optionsdialog.cpp" line="402"/>
<location filename="../src/GUI/optionsdialog.cpp" line="465"/>
<location filename="../src/GUI/optionsdialog.cpp" line="322"/>
<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="317"/>
<location filename="../src/GUI/optionsdialog.cpp" line="401"/>
<location filename="../src/GUI/optionsdialog.cpp" line="323"/>
<location filename="../src/GUI/optionsdialog.cpp" line="431"/>
<source>Speed:</source>
<translation>Скорость:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="318"/>
<location filename="../src/GUI/optionsdialog.cpp" line="324"/>
<source>Heart rate:</source>
<translation>Пульс:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="319"/>
<location filename="../src/GUI/optionsdialog.cpp" line="325"/>
<source>Cadence:</source>
<translation>Каденс:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="320"/>
<location filename="../src/GUI/optionsdialog.cpp" line="326"/>
<source>Power:</source>
<translation>Мощность:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="322"/>
<location filename="../src/GUI/optionsdialog.cpp" line="328"/>
<source>Smoothing</source>
<translation>Сглаживание</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="326"/>
<location filename="../src/GUI/optionsdialog.cpp" line="332"/>
<source>Eliminate GPS outliers</source>
<translation>Устранять GPS выбросы</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="335"/>
<location filename="../src/GUI/optionsdialog.cpp" line="341"/>
<source>Smoothing:</source>
<translation>Сглаживание:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="352"/>
<source>Automatic</source>
<translation>Автоматическое</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="366"/>
<source>mi/h</source>
<translation>мл/ч</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="355"/>
<location filename="../src/GUI/optionsdialog.cpp" line="369"/>
<source>kn</source>
<translation>уз</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="358"/>
<location filename="../src/GUI/optionsdialog.cpp" line="372"/>
<source>km/h</source>
<translation>км/ч</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="362"/>
<location filename="../src/GUI/optionsdialog.cpp" line="568"/>
<location filename="../src/GUI/optionsdialog.cpp" line="376"/>
<location filename="../src/GUI/optionsdialog.cpp" line="598"/>
<source>s</source>
<translation>с</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="366"/>
<location filename="../src/GUI/optionsdialog.cpp" line="392"/>
<source>Minimal speed:</source>
<translation>Минимальная скорость:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="367"/>
<location filename="../src/GUI/optionsdialog.cpp" line="393"/>
<source>Minimal duration:</source>
<translation>Минимальная продолжительность:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="373"/>
<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="374"/>
<location filename="../src/GUI/optionsdialog.cpp" line="404"/>
<source>Recorded by device</source>
<translation>Записанная устройством</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="380"/>
<location filename="../src/GUI/optionsdialog.cpp" line="438"/>
<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="381"/>
<location filename="../src/GUI/optionsdialog.cpp" line="439"/>
<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="418"/>
<location filename="../src/GUI/optionsdialog.cpp" line="448"/>
<source>Elevation</source>
<translation>Высота</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="429"/>
<location filename="../src/GUI/optionsdialog.cpp" line="459"/>
<source>Filtering</source>
<translation>Фильтрация</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="430"/>
<location filename="../src/GUI/optionsdialog.cpp" line="460"/>
<source>Sources</source>
<translation>Источники</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="431"/>
<location filename="../src/GUI/optionsdialog.cpp" line="461"/>
<source>Pause detection</source>
<translation>Обнаружение остановок</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="464"/>
<location filename="../src/GUI/optionsdialog.cpp" line="494"/>
<source>Radius:</source>
<translation>Радиус:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="412"/>
<location filename="../src/GUI/optionsdialog.cpp" line="442"/>
<source>Speed</source>
<translation>Скорость</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="74"/>
<location filename="../src/GUI/optionsdialog.cpp" line="80"/>
<source>Projection:</source>
<translation>Проекция:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="96"/>
<location filename="../src/GUI/optionsdialog.cpp" line="102"/>
<source>Vector maps</source>
<translation>Векторные карты</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="149"/>
<location filename="../src/GUI/optionsdialog.cpp" line="155"/>
<source>Area border width:</source>
<translation>Толщина границы области:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="150"/>
<location filename="../src/GUI/optionsdialog.cpp" line="156"/>
<source>Area border style:</source>
<translation>Стиль границы области:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="151"/>
<location filename="../src/GUI/optionsdialog.cpp" line="157"/>
<source>Area fill opacity:</source>
<translation>Непрозрачность заливки области:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="155"/>
<location filename="../src/GUI/optionsdialog.cpp" line="161"/>
<source>Fill opacity:</source>
<translation>Непрозрачность заливки:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="156"/>
<location filename="../src/GUI/optionsdialog.cpp" line="162"/>
<source>Areas</source>
<translation>Области</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="450"/>
<location filename="../src/GUI/optionsdialog.cpp" line="353"/>
<source>Custom</source>
<translation>Пользовательскoe</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="480"/>
<source>mi</source>
<translation>мл</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="453"/>
<location filename="../src/GUI/optionsdialog.cpp" line="483"/>
<source>nmi</source>
<translation>мор. мл</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="456"/>
<location filename="../src/GUI/optionsdialog.cpp" line="486"/>
<source>km</source>
<translation>км</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="471"/>
<location filename="../src/GUI/optionsdialog.cpp" line="611"/>
<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="478"/>
<location filename="../src/GUI/optionsdialog.cpp" line="508"/>
<source>WYSIWYG</source>
<translation>WYSIWYG</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="479"/>
<location filename="../src/GUI/optionsdialog.cpp" line="509"/>
<source>High-Resolution</source>
<translation>Высокое разрешение</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="484"/>
<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="486"/>
<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="508"/>
<location filename="../src/GUI/optionsdialog.cpp" line="538"/>
<source>Name</source>
<translation>Имя</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="510"/>
<location filename="../src/GUI/optionsdialog.cpp" line="540"/>
<source>Date</source>
<translation>Дата</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="512"/>
<location filename="../src/GUI/optionsdialog.cpp" line="542"/>
<source>Distance</source>
<translation>Расстояние</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="514"/>
<location filename="../src/GUI/optionsdialog.cpp" line="544"/>
<source>Time</source>
<translation>Время</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="516"/>
<location filename="../src/GUI/optionsdialog.cpp" line="546"/>
<source>Moving time</source>
<translation>Время движения</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="518"/>
<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="533"/>
<location filename="../src/GUI/optionsdialog.cpp" line="563"/>
<source>Separate graph page</source>
<translation>Отдельная страница с графиком</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="543"/>
<location filename="../src/GUI/optionsdialog.cpp" line="573"/>
<source>Print mode</source>
<translation>Режим печати</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="544"/>
<location filename="../src/GUI/optionsdialog.cpp" line="574"/>
<source>Header</source>
<translation>Заголовок</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="552"/>
<location filename="../src/GUI/optionsdialog.cpp" line="582"/>
<source>Use OpenGL</source>
<translation>Использовать OpenGL</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="555"/>
<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="562"/>
<location filename="../src/GUI/optionsdialog.cpp" line="592"/>
<source>MB</source>
<translation>МБ</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="572"/>
<location filename="../src/GUI/optionsdialog.cpp" line="602"/>
<source>Image cache size:</source>
<translation>Размер кэша изображений:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="573"/>
<location filename="../src/GUI/optionsdialog.cpp" line="603"/>
<source>Connection timeout:</source>
<translation>Таймаут соединения:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="589"/>
<location filename="../src/GUI/optionsdialog.cpp" line="614"/>
<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="607"/>
<location filename="../src/GUI/optionsdialog.cpp" line="637"/>
<source>Appearance</source>
<translation>Внешний вид</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="609"/>
<location filename="../src/GUI/optionsdialog.cpp" line="639"/>
<source>Maps</source>
<translation>Карты</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="610"/>
<location filename="../src/GUI/optionsdialog.cpp" line="640"/>
<source>Data</source>
<translation>Данные</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="612"/>
<location filename="../src/GUI/optionsdialog.cpp" line="642"/>
<source>Print &amp; Export</source>
<translation>Печать и экспорт</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="641"/>
<location filename="../src/GUI/optionsdialog.cpp" line="671"/>
<source>Options</source>
<translation>Параметры</translation>
</message>
@ -1868,7 +1888,12 @@
<translation>Описание</translation>
</message>
<message>
<location filename="../src/GUI/waypointitem.cpp" line="42"/>
<location filename="../src/GUI/waypointitem.cpp" line="44"/>
<source>Address</source>
<translation>Адрес</translation>
</message>
<message>
<location filename="../src/GUI/waypointitem.cpp" line="55"/>
<source>Links</source>
<translation>Ссылки</translation>
</message>

View File

@ -47,77 +47,87 @@
<context>
<name>Data</name>
<message>
<location filename="../src/data/data.cpp" line="173"/>
<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="174"/>
<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="175"/>
<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="176"/>
<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="178"/>
<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="180"/>
<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="187"/>
<source>GPX files</source>
<translation>GPX-filer</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="181"/>
<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="182"/>
<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="183"/>
<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="184"/>
<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="185"/>
<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="186"/>
<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="188"/>
<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="187"/>
<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="189"/>
<location filename="../src/data/data.cpp" line="197"/>
<source>All files</source>
<translation>Alla filer</translation>
</message>
@ -518,8 +528,8 @@
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="413"/>
<location filename="../src/GUI/gui.cpp" line="1058"/>
<location filename="../src/GUI/gui.cpp" line="1124"/>
<location filename="../src/GUI/gui.cpp" line="1059"/>
<location filename="../src/GUI/gui.cpp" line="1125"/>
<source>Moving time</source>
<translation>Förflyttningstid</translation>
</message>
@ -674,34 +684,34 @@
<translation>Mapp för stilar:</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1036"/>
<location filename="../src/GUI/gui.cpp" line="1104"/>
<location filename="../src/GUI/gui.cpp" line="1037"/>
<location filename="../src/GUI/gui.cpp" line="1105"/>
<source>Areas</source>
<translation>Områden</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1079"/>
<location filename="../src/GUI/gui.cpp" line="1080"/>
<location filename="../src/GUI/gui.cpp" line="1081"/>
<source>Statistics</source>
<translation>Statistik</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1312"/>
<location filename="../src/GUI/gui.cpp" line="1313"/>
<source>Open map file</source>
<translation>Öppna kartfil</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1335"/>
<location filename="../src/GUI/gui.cpp" line="1336"/>
<source>Error loading map:</source>
<translation>Fel vid inläsning av karta:</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1346"/>
<location filename="../src/GUI/gui.cpp" line="1347"/>
<source>No files loaded</source>
<translation>Inga filer inlästa</translation>
</message>
<message numerus="yes">
<location filename="../src/GUI/gui.cpp" line="1350"/>
<location filename="../src/GUI/gui.cpp" line="1351"/>
<source>%n files</source>
<translation>
<numerusform>%n fil</numerusform>
@ -709,16 +719,16 @@
</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1042"/>
<location filename="../src/GUI/gui.cpp" line="1046"/>
<location filename="../src/GUI/gui.cpp" line="1110"/>
<location filename="../src/GUI/gui.cpp" line="1113"/>
<location filename="../src/GUI/gui.cpp" line="1043"/>
<location filename="../src/GUI/gui.cpp" line="1047"/>
<location filename="../src/GUI/gui.cpp" line="1111"/>
<location filename="../src/GUI/gui.cpp" line="1114"/>
<source>Date</source>
<translation>Datum</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1030"/>
<location filename="../src/GUI/gui.cpp" line="1100"/>
<location filename="../src/GUI/gui.cpp" line="1031"/>
<location filename="../src/GUI/gui.cpp" line="1101"/>
<source>Routes</source>
<translation>Rutter</translation>
</message>
@ -738,8 +748,8 @@
<translation>Exportera till PDF...</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1033"/>
<location filename="../src/GUI/gui.cpp" line="1102"/>
<location filename="../src/GUI/gui.cpp" line="1034"/>
<location filename="../src/GUI/gui.cpp" line="1103"/>
<source>Waypoints</source>
<translation>Vägpunkter</translation>
</message>
@ -820,13 +830,13 @@
<translation>Fel vid inläsning av POI-fil:</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1094"/>
<location filename="../src/GUI/gui.cpp" line="1095"/>
<source>Name</source>
<translation>Namn</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1027"/>
<location filename="../src/GUI/gui.cpp" line="1098"/>
<location filename="../src/GUI/gui.cpp" line="1028"/>
<location filename="../src/GUI/gui.cpp" line="1099"/>
<source>Tracks</source>
<translation>Spår</translation>
</message>
@ -843,16 +853,16 @@
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="369"/>
<location filename="../src/GUI/gui.cpp" line="1053"/>
<location filename="../src/GUI/gui.cpp" line="1120"/>
<location filename="../src/GUI/gui.cpp" line="1054"/>
<location filename="../src/GUI/gui.cpp" line="1121"/>
<source>Distance</source>
<translation>Avstånd</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="376"/>
<location filename="../src/GUI/gui.cpp" line="552"/>
<location filename="../src/GUI/gui.cpp" line="1056"/>
<location filename="../src/GUI/gui.cpp" line="1122"/>
<location filename="../src/GUI/gui.cpp" line="1057"/>
<location filename="../src/GUI/gui.cpp" line="1123"/>
<source>Time</source>
<translation>Tid</translation>
</message>
@ -949,12 +959,12 @@
</message>
<message>
<location filename="../src/GUI/graphview.cpp" line="66"/>
<location filename="../src/GUI/graphview.cpp" line="173"/>
<location filename="../src/GUI/graphview.cpp" line="177"/>
<source>Distance</source>
<translation>Avstånd</translation>
</message>
<message>
<location filename="../src/GUI/graphview.cpp" line="175"/>
<location filename="../src/GUI/graphview.cpp" line="179"/>
<source>Time</source>
<translation>Tid</translation>
</message>
@ -1053,478 +1063,488 @@
<context>
<name>OptionsDialog</name>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="169"/>
<location filename="../src/GUI/optionsdialog.cpp" line="175"/>
<source>Base color:</source>
<translation>Basfärg:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="170"/>
<location filename="../src/GUI/optionsdialog.cpp" line="176"/>
<source>Palette shift:</source>
<translation>Palettskiftning:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="114"/>
<location filename="../src/GUI/optionsdialog.cpp" line="120"/>
<source>Track width:</source>
<translation>Spårtjocklek:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="115"/>
<location filename="../src/GUI/optionsdialog.cpp" line="121"/>
<source>Track style:</source>
<translation>Spårstil:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="119"/>
<location filename="../src/GUI/optionsdialog.cpp" line="125"/>
<source>Tracks</source>
<translation>Spår</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="131"/>
<location filename="../src/GUI/optionsdialog.cpp" line="137"/>
<source>Route width:</source>
<translation>Ruttjocklek:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="132"/>
<location filename="../src/GUI/optionsdialog.cpp" line="138"/>
<source>Route style:</source>
<translation>Ruttstil:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="136"/>
<location filename="../src/GUI/optionsdialog.cpp" line="142"/>
<source>Routes</source>
<translation>Rutter</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="172"/>
<location filename="../src/GUI/optionsdialog.cpp" line="255"/>
<location filename="../src/GUI/optionsdialog.cpp" line="178"/>
<location filename="../src/GUI/optionsdialog.cpp" line="261"/>
<source>Use anti-aliasing</source>
<translation>Använd kantutjämning</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="252"/>
<location filename="../src/GUI/optionsdialog.cpp" line="258"/>
<source>Line width:</source>
<translation>Linjetjocklek:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="276"/>
<location filename="../src/GUI/optionsdialog.cpp" line="282"/>
<source>Background color:</source>
<translation>Bakgrundsfärg:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="287"/>
<location filename="../src/GUI/optionsdialog.cpp" line="293"/>
<source>Paths</source>
<translation>Sökvägar</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="277"/>
<location filename="../src/GUI/optionsdialog.cpp" line="283"/>
<source>Map opacity:</source>
<translation>Kartopacitet:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="290"/>
<location filename="../src/GUI/optionsdialog.cpp" line="296"/>
<source>Map</source>
<translation>Karta</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="289"/>
<location filename="../src/GUI/optionsdialog.cpp" line="545"/>
<location filename="../src/GUI/optionsdialog.cpp" line="295"/>
<location filename="../src/GUI/optionsdialog.cpp" line="575"/>
<source>Graphs</source>
<translation>Diagram</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="55"/>
<location filename="../src/GUI/optionsdialog.cpp" line="61"/>
<source>High-resolution</source>
<translation>Högupplösning</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="56"/>
<location filename="../src/GUI/optionsdialog.cpp" line="62"/>
<source>Standard</source>
<translation>Standard</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="61"/>
<location filename="../src/GUI/optionsdialog.cpp" line="67"/>
<source>Non-HiDPI maps are loaded as HiDPI maps. The map is sharp but map objects are small/hard to read.</source>
<translation>Icke högupplösta kartor läses in som högupplösta. Kartan är skarp men kartobjekt är små/svåra att läsa.</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="63"/>
<location filename="../src/GUI/optionsdialog.cpp" line="69"/>
<source>Non-HiDPI maps are loaded such as they are. Map objects have the expected size but the map is blurry.</source>
<translation>Icke högupplösta kartor läses in som de är. Kartobjekt har förväntad storlek men kartan är oskarp.</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="98"/>
<location filename="../src/GUI/optionsdialog.cpp" line="104"/>
<source>HiDPI display mode</source>
<translation>Högupplöst visningsläge</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="117"/>
<location filename="../src/GUI/optionsdialog.cpp" line="134"/>
<location filename="../src/GUI/optionsdialog.cpp" line="153"/>
<location filename="../src/GUI/optionsdialog.cpp" line="123"/>
<location filename="../src/GUI/optionsdialog.cpp" line="140"/>
<location filename="../src/GUI/optionsdialog.cpp" line="159"/>
<source>Width:</source>
<translation>Bredd:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="118"/>
<location filename="../src/GUI/optionsdialog.cpp" line="135"/>
<location filename="../src/GUI/optionsdialog.cpp" line="154"/>
<location filename="../src/GUI/optionsdialog.cpp" line="124"/>
<location filename="../src/GUI/optionsdialog.cpp" line="141"/>
<location filename="../src/GUI/optionsdialog.cpp" line="160"/>
<source>Style:</source>
<translation>Stil:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="205"/>
<location filename="../src/GUI/optionsdialog.cpp" line="211"/>
<source>Waypoint color:</source>
<translation>Navigeringspunktsfärg:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="206"/>
<location filename="../src/GUI/optionsdialog.cpp" line="212"/>
<source>Waypoint size:</source>
<translation>Navigeringspunktsstorlek:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="208"/>
<location filename="../src/GUI/optionsdialog.cpp" line="224"/>
<location filename="../src/GUI/optionsdialog.cpp" line="214"/>
<location filename="../src/GUI/optionsdialog.cpp" line="230"/>
<source>Color:</source>
<translation>Färg:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="209"/>
<location filename="../src/GUI/optionsdialog.cpp" line="225"/>
<location filename="../src/GUI/optionsdialog.cpp" line="215"/>
<location filename="../src/GUI/optionsdialog.cpp" line="231"/>
<source>Size:</source>
<translation>Storlek:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="210"/>
<location filename="../src/GUI/optionsdialog.cpp" line="216"/>
<source>Waypoints</source>
<translation>Navigeringspunkter</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="221"/>
<location filename="../src/GUI/optionsdialog.cpp" line="227"/>
<source>POI color:</source>
<translation>POI-färg:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="222"/>
<location filename="../src/GUI/optionsdialog.cpp" line="228"/>
<source>POI size:</source>
<translation>POI-storlek:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="226"/>
<location filename="../src/GUI/optionsdialog.cpp" line="232"/>
<source>POIs</source>
<translation>POI:er</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="253"/>
<location filename="../src/GUI/optionsdialog.cpp" line="259"/>
<source>Slider color:</source>
<translation>Skjutreglagefärg:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="288"/>
<location filename="../src/GUI/optionsdialog.cpp" line="294"/>
<source>Points</source>
<translation>Punkter</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="297"/>
<location filename="../src/GUI/optionsdialog.cpp" line="303"/>
<source>Moving average window size</source>
<translation>Flyttar vanlig fönsterstorlek</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="316"/>
<location filename="../src/GUI/optionsdialog.cpp" line="402"/>
<location filename="../src/GUI/optionsdialog.cpp" line="465"/>
<location filename="../src/GUI/optionsdialog.cpp" line="322"/>
<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="317"/>
<location filename="../src/GUI/optionsdialog.cpp" line="401"/>
<location filename="../src/GUI/optionsdialog.cpp" line="323"/>
<location filename="../src/GUI/optionsdialog.cpp" line="431"/>
<source>Speed:</source>
<translation>Hastighet:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="318"/>
<location filename="../src/GUI/optionsdialog.cpp" line="324"/>
<source>Heart rate:</source>
<translation>Hjärtfrekvens:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="319"/>
<location filename="../src/GUI/optionsdialog.cpp" line="325"/>
<source>Cadence:</source>
<translation>Stegfrekvens:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="320"/>
<location filename="../src/GUI/optionsdialog.cpp" line="326"/>
<source>Power:</source>
<translation>Kraft:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="322"/>
<location filename="../src/GUI/optionsdialog.cpp" line="328"/>
<source>Smoothing</source>
<translation>Utjämning</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="326"/>
<location filename="../src/GUI/optionsdialog.cpp" line="332"/>
<source>Eliminate GPS outliers</source>
<translation>Eliminera GPS-extremvärden</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="335"/>
<location filename="../src/GUI/optionsdialog.cpp" line="341"/>
<source>Smoothing:</source>
<translation>Utjämning:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="352"/>
<source>Automatic</source>
<translation>Automatiskt</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="366"/>
<source>mi/h</source>
<translation>mi/h</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="355"/>
<location filename="../src/GUI/optionsdialog.cpp" line="369"/>
<source>kn</source>
<translation>knop</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="358"/>
<location filename="../src/GUI/optionsdialog.cpp" line="372"/>
<source>km/h</source>
<translation>km/h</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="362"/>
<location filename="../src/GUI/optionsdialog.cpp" line="568"/>
<location filename="../src/GUI/optionsdialog.cpp" line="376"/>
<location filename="../src/GUI/optionsdialog.cpp" line="598"/>
<source>s</source>
<translation>sek</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="366"/>
<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="367"/>
<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="373"/>
<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="374"/>
<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="380"/>
<location filename="../src/GUI/optionsdialog.cpp" line="438"/>
<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="381"/>
<location filename="../src/GUI/optionsdialog.cpp" line="439"/>
<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="418"/>
<location filename="../src/GUI/optionsdialog.cpp" line="448"/>
<source>Elevation</source>
<translation>Stigning</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="429"/>
<location filename="../src/GUI/optionsdialog.cpp" line="459"/>
<source>Filtering</source>
<translation>Filtrering</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="430"/>
<location filename="../src/GUI/optionsdialog.cpp" line="460"/>
<source>Sources</source>
<translation>Källor</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="431"/>
<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="464"/>
<location filename="../src/GUI/optionsdialog.cpp" line="494"/>
<source>Radius:</source>
<translation>Radie:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="412"/>
<location filename="../src/GUI/optionsdialog.cpp" line="442"/>
<source>Speed</source>
<translation>Hastighet</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="74"/>
<location filename="../src/GUI/optionsdialog.cpp" line="80"/>
<source>Projection:</source>
<translation>Projektion:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="96"/>
<location filename="../src/GUI/optionsdialog.cpp" line="102"/>
<source>Vector maps</source>
<translation>Vektor-kartor</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="149"/>
<location filename="../src/GUI/optionsdialog.cpp" line="155"/>
<source>Area border width:</source>
<translation>Kantbredd för områden:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="150"/>
<location filename="../src/GUI/optionsdialog.cpp" line="156"/>
<source>Area border style:</source>
<translation>Kantstil för områden:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="151"/>
<location filename="../src/GUI/optionsdialog.cpp" line="157"/>
<source>Area fill opacity:</source>
<translation>Ifyllnadsopacitet för områden:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="155"/>
<location filename="../src/GUI/optionsdialog.cpp" line="161"/>
<source>Fill opacity:</source>
<translation>Ifyllnadsopacitet:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="156"/>
<location filename="../src/GUI/optionsdialog.cpp" line="162"/>
<source>Areas</source>
<translation>Områden</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="450"/>
<location filename="../src/GUI/optionsdialog.cpp" line="353"/>
<source>Custom</source>
<translation>Anpassat</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="480"/>
<source>mi</source>
<translation>mi</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="453"/>
<location filename="../src/GUI/optionsdialog.cpp" line="483"/>
<source>nmi</source>
<translation>nmi</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="456"/>
<location filename="../src/GUI/optionsdialog.cpp" line="486"/>
<source>km</source>
<translation>km</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="471"/>
<location filename="../src/GUI/optionsdialog.cpp" line="611"/>
<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="478"/>
<location filename="../src/GUI/optionsdialog.cpp" line="508"/>
<source>WYSIWYG</source>
<translation>WYSIWYG</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="479"/>
<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="484"/>
<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="486"/>
<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="508"/>
<location filename="../src/GUI/optionsdialog.cpp" line="538"/>
<source>Name</source>
<translation>Namn</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="510"/>
<location filename="../src/GUI/optionsdialog.cpp" line="540"/>
<source>Date</source>
<translation>Datum</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="512"/>
<location filename="../src/GUI/optionsdialog.cpp" line="542"/>
<source>Distance</source>
<translation>Avstånd</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="514"/>
<location filename="../src/GUI/optionsdialog.cpp" line="544"/>
<source>Time</source>
<translation>Tid</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="516"/>
<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="518"/>
<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="533"/>
<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="543"/>
<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="544"/>
<location filename="../src/GUI/optionsdialog.cpp" line="574"/>
<source>Header</source>
<translation>Rubrik</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="552"/>
<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="555"/>
<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="562"/>
<location filename="../src/GUI/optionsdialog.cpp" line="592"/>
<source>MB</source>
<translation>MB</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="572"/>
<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="573"/>
<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="589"/>
<location filename="../src/GUI/optionsdialog.cpp" line="614"/>
<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="607"/>
<location filename="../src/GUI/optionsdialog.cpp" line="637"/>
<source>Appearance</source>
<translation>Utseende</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="609"/>
<location filename="../src/GUI/optionsdialog.cpp" line="639"/>
<source>Maps</source>
<translation>Kartor</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="610"/>
<location filename="../src/GUI/optionsdialog.cpp" line="640"/>
<source>Data</source>
<translation>Data</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="612"/>
<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="641"/>
<location filename="../src/GUI/optionsdialog.cpp" line="671"/>
<source>Options</source>
<translation>Alternativ</translation>
</message>
@ -1867,7 +1887,12 @@
<translation>Beskrivning</translation>
</message>
<message>
<location filename="../src/GUI/waypointitem.cpp" line="42"/>
<location filename="../src/GUI/waypointitem.cpp" line="44"/>
<source>Address</source>
<translation>Adress</translation>
</message>
<message>
<location filename="../src/GUI/waypointitem.cpp" line="55"/>
<source>Links</source>
<translation>Länkar</translation>
</message>

View File

@ -47,77 +47,87 @@
<context>
<name>Data</name>
<message>
<location filename="../src/data/data.cpp" line="173"/>
<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="174"/>
<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="175"/>
<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="176"/>
<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="178"/>
<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="180"/>
<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="187"/>
<source>GPX files</source>
<translation>GPX dosyalar</translation>
</message>
<message>
<location filename="../src/data/data.cpp" line="181"/>
<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="182"/>
<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="183"/>
<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="184"/>
<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="185"/>
<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="186"/>
<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="187"/>
<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="188"/>
<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="189"/>
<location filename="../src/data/data.cpp" line="197"/>
<source>All files</source>
<translation>Tüm dosyalar</translation>
</message>
@ -484,16 +494,16 @@
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="369"/>
<location filename="../src/GUI/gui.cpp" line="1053"/>
<location filename="../src/GUI/gui.cpp" line="1120"/>
<location filename="../src/GUI/gui.cpp" line="1054"/>
<location filename="../src/GUI/gui.cpp" line="1121"/>
<source>Distance</source>
<translation>Mesafe</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="376"/>
<location filename="../src/GUI/gui.cpp" line="552"/>
<location filename="../src/GUI/gui.cpp" line="1056"/>
<location filename="../src/GUI/gui.cpp" line="1122"/>
<location filename="../src/GUI/gui.cpp" line="1057"/>
<location filename="../src/GUI/gui.cpp" line="1123"/>
<source>Time</source>
<translation>Zaman</translation>
</message>
@ -524,8 +534,8 @@
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="413"/>
<location filename="../src/GUI/gui.cpp" line="1058"/>
<location filename="../src/GUI/gui.cpp" line="1124"/>
<location filename="../src/GUI/gui.cpp" line="1059"/>
<location filename="../src/GUI/gui.cpp" line="1125"/>
<source>Moving time</source>
<translation>Hareket süresi</translation>
</message>
@ -791,69 +801,68 @@
<translation>POI dosyası yükleme hatası:</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1027"/>
<location filename="../src/GUI/gui.cpp" line="1098"/>
<location filename="../src/GUI/gui.cpp" line="1028"/>
<location filename="../src/GUI/gui.cpp" line="1099"/>
<source>Tracks</source>
<translation>İzler</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1030"/>
<location filename="../src/GUI/gui.cpp" line="1100"/>
<location filename="../src/GUI/gui.cpp" line="1031"/>
<location filename="../src/GUI/gui.cpp" line="1101"/>
<source>Routes</source>
<translation>Rotalar</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1033"/>
<location filename="../src/GUI/gui.cpp" line="1102"/>
<location filename="../src/GUI/gui.cpp" line="1034"/>
<location filename="../src/GUI/gui.cpp" line="1103"/>
<source>Waypoints</source>
<translation>Yer işaretleri</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1036"/>
<location filename="../src/GUI/gui.cpp" line="1104"/>
<location filename="../src/GUI/gui.cpp" line="1037"/>
<location filename="../src/GUI/gui.cpp" line="1105"/>
<source>Areas</source>
<translation>Alanlar</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1042"/>
<location filename="../src/GUI/gui.cpp" line="1046"/>
<location filename="../src/GUI/gui.cpp" line="1110"/>
<location filename="../src/GUI/gui.cpp" line="1113"/>
<location filename="../src/GUI/gui.cpp" line="1043"/>
<location filename="../src/GUI/gui.cpp" line="1047"/>
<location filename="../src/GUI/gui.cpp" line="1111"/>
<location filename="../src/GUI/gui.cpp" line="1114"/>
<source>Date</source>
<translation>Tarih</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1079"/>
<location filename="../src/GUI/gui.cpp" line="1080"/>
<location filename="../src/GUI/gui.cpp" line="1081"/>
<source>Statistics</source>
<translation>İstatistikler</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1094"/>
<location filename="../src/GUI/gui.cpp" line="1095"/>
<source>Name</source>
<translation>Adı</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1312"/>
<location filename="../src/GUI/gui.cpp" line="1313"/>
<source>Open map file</source>
<translation>Harita dosyası </translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1335"/>
<location filename="../src/GUI/gui.cpp" line="1336"/>
<source>Error loading map:</source>
<translation>Harita yüklenirken hata oluştu:</translation>
</message>
<message>
<location filename="../src/GUI/gui.cpp" line="1346"/>
<location filename="../src/GUI/gui.cpp" line="1347"/>
<source>No files loaded</source>
<translation>Hiç dosya yüklenmedi</translation>
</message>
<message numerus="yes">
<location filename="../src/GUI/gui.cpp" line="1350"/>
<location filename="../src/GUI/gui.cpp" line="1351"/>
<source>%n files</source>
<translation>
<numerusform>%n dosya</numerusform>
<numerusform>%n dosya</numerusform>
</translation>
</message>
</context>
@ -908,7 +917,7 @@
</message>
<message>
<location filename="../src/GUI/graphview.cpp" line="66"/>
<location filename="../src/GUI/graphview.cpp" line="173"/>
<location filename="../src/GUI/graphview.cpp" line="177"/>
<source>Distance</source>
<translation>Mesafe</translation>
</message>
@ -954,7 +963,7 @@
<translation>sa</translation>
</message>
<message>
<location filename="../src/GUI/graphview.cpp" line="175"/>
<location filename="../src/GUI/graphview.cpp" line="179"/>
<source>Time</source>
<translation>Zaman</translation>
</message>
@ -1053,478 +1062,488 @@
<context>
<name>OptionsDialog</name>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="55"/>
<location filename="../src/GUI/optionsdialog.cpp" line="61"/>
<source>High-resolution</source>
<translation>Yüksek çözünürlük</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="56"/>
<location filename="../src/GUI/optionsdialog.cpp" line="62"/>
<source>Standard</source>
<translation>Standart</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="61"/>
<location filename="../src/GUI/optionsdialog.cpp" line="67"/>
<source>Non-HiDPI maps are loaded as HiDPI maps. The map is sharp but map objects are small/hard to read.</source>
<translation>HiDPI olmayan haritalar, HiDPI haritaları olarak yüklenir. Harita keskin ama harita nesneleri küçük/okunması zor.</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="63"/>
<location filename="../src/GUI/optionsdialog.cpp" line="69"/>
<source>Non-HiDPI maps are loaded such as they are. Map objects have the expected size but the map is blurry.</source>
<translation>HiDPI olmayan haritalar, oldukları gibi yüklenir. Harita nesneleri beklenen boyuta sahip ancak harita bulanıktır.</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="98"/>
<location filename="../src/GUI/optionsdialog.cpp" line="104"/>
<source>HiDPI display mode</source>
<translation>HiDPI gösterim modu</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="169"/>
<location filename="../src/GUI/optionsdialog.cpp" line="175"/>
<source>Base color:</source>
<translation>Temel renk:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="170"/>
<location filename="../src/GUI/optionsdialog.cpp" line="176"/>
<source>Palette shift:</source>
<translation>Palet değişimi:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="114"/>
<location filename="../src/GUI/optionsdialog.cpp" line="120"/>
<source>Track width:</source>
<translation>İz genişliği:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="74"/>
<location filename="../src/GUI/optionsdialog.cpp" line="80"/>
<source>Projection:</source>
<translation>Projeksiyon:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="96"/>
<location filename="../src/GUI/optionsdialog.cpp" line="102"/>
<source>Vector maps</source>
<translation>Vektör haritaları</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="115"/>
<location filename="../src/GUI/optionsdialog.cpp" line="121"/>
<source>Track style:</source>
<translation>İz stili:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="117"/>
<location filename="../src/GUI/optionsdialog.cpp" line="134"/>
<location filename="../src/GUI/optionsdialog.cpp" line="153"/>
<location filename="../src/GUI/optionsdialog.cpp" line="123"/>
<location filename="../src/GUI/optionsdialog.cpp" line="140"/>
<location filename="../src/GUI/optionsdialog.cpp" line="159"/>
<source>Width:</source>
<translation>Genişlik:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="118"/>
<location filename="../src/GUI/optionsdialog.cpp" line="135"/>
<location filename="../src/GUI/optionsdialog.cpp" line="154"/>
<location filename="../src/GUI/optionsdialog.cpp" line="124"/>
<location filename="../src/GUI/optionsdialog.cpp" line="141"/>
<location filename="../src/GUI/optionsdialog.cpp" line="160"/>
<source>Style:</source>
<translation>Stil:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="119"/>
<location filename="../src/GUI/optionsdialog.cpp" line="125"/>
<source>Tracks</source>
<translation>İzler</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="131"/>
<location filename="../src/GUI/optionsdialog.cpp" line="137"/>
<source>Route width:</source>
<translation>Rota genişliği:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="132"/>
<location filename="../src/GUI/optionsdialog.cpp" line="138"/>
<source>Route style:</source>
<translation>Rota stili:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="136"/>
<location filename="../src/GUI/optionsdialog.cpp" line="142"/>
<source>Routes</source>
<translation>Rotalar</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="149"/>
<location filename="../src/GUI/optionsdialog.cpp" line="155"/>
<source>Area border width:</source>
<translation>Alan sınır genişliği:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="150"/>
<location filename="../src/GUI/optionsdialog.cpp" line="156"/>
<source>Area border style:</source>
<translation>Alan sınır stili:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="151"/>
<location filename="../src/GUI/optionsdialog.cpp" line="157"/>
<source>Area fill opacity:</source>
<translation>Alan dolgusu opaklığı:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="155"/>
<location filename="../src/GUI/optionsdialog.cpp" line="161"/>
<source>Fill opacity:</source>
<translation>Opaklığı doldur:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="156"/>
<location filename="../src/GUI/optionsdialog.cpp" line="162"/>
<source>Areas</source>
<translation>Alanlar</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="172"/>
<location filename="../src/GUI/optionsdialog.cpp" line="255"/>
<location filename="../src/GUI/optionsdialog.cpp" line="178"/>
<location filename="../src/GUI/optionsdialog.cpp" line="261"/>
<source>Use anti-aliasing</source>
<translation>Kenar yumuşatma kullan</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="205"/>
<location filename="../src/GUI/optionsdialog.cpp" line="211"/>
<source>Waypoint color:</source>
<translation>Yer işareti rengi:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="206"/>
<location filename="../src/GUI/optionsdialog.cpp" line="212"/>
<source>Waypoint size:</source>
<translation>Yer işareti boyutu:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="208"/>
<location filename="../src/GUI/optionsdialog.cpp" line="224"/>
<location filename="../src/GUI/optionsdialog.cpp" line="214"/>
<location filename="../src/GUI/optionsdialog.cpp" line="230"/>
<source>Color:</source>
<translation>Renk:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="209"/>
<location filename="../src/GUI/optionsdialog.cpp" line="225"/>
<location filename="../src/GUI/optionsdialog.cpp" line="215"/>
<location filename="../src/GUI/optionsdialog.cpp" line="231"/>
<source>Size:</source>
<translation>Boyut:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="210"/>
<location filename="../src/GUI/optionsdialog.cpp" line="216"/>
<source>Waypoints</source>
<translation>Yer işaretleri</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="221"/>
<location filename="../src/GUI/optionsdialog.cpp" line="227"/>
<source>POI color:</source>
<translation>POI renk:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="222"/>
<location filename="../src/GUI/optionsdialog.cpp" line="228"/>
<source>POI size:</source>
<translation>POI boyutu:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="226"/>
<location filename="../src/GUI/optionsdialog.cpp" line="232"/>
<source>POIs</source>
<translation>POI&apos;ler</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="252"/>
<location filename="../src/GUI/optionsdialog.cpp" line="258"/>
<source>Line width:</source>
<translation>Hat genişliği:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="253"/>
<location filename="../src/GUI/optionsdialog.cpp" line="259"/>
<source>Slider color:</source>
<translation>Kaydırıcı rengi:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="276"/>
<location filename="../src/GUI/optionsdialog.cpp" line="282"/>
<source>Background color:</source>
<translation>Arka plan rengi:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="277"/>
<location filename="../src/GUI/optionsdialog.cpp" line="283"/>
<source>Map opacity:</source>
<translation>Harita opaklığı:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="287"/>
<location filename="../src/GUI/optionsdialog.cpp" line="293"/>
<source>Paths</source>
<translation>Klasör konumları</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="288"/>
<location filename="../src/GUI/optionsdialog.cpp" line="294"/>
<source>Points</source>
<translation>Noktalar</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="289"/>
<location filename="../src/GUI/optionsdialog.cpp" line="545"/>
<location filename="../src/GUI/optionsdialog.cpp" line="295"/>
<location filename="../src/GUI/optionsdialog.cpp" line="575"/>
<source>Graphs</source>
<translation>Grafikler</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="290"/>
<location filename="../src/GUI/optionsdialog.cpp" line="296"/>
<source>Map</source>
<translation>Harita</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="297"/>
<location filename="../src/GUI/optionsdialog.cpp" line="303"/>
<source>Moving average window size</source>
<translation>Ortalama pencere boyutuna taşıma</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="316"/>
<location filename="../src/GUI/optionsdialog.cpp" line="402"/>
<location filename="../src/GUI/optionsdialog.cpp" line="465"/>
<location filename="../src/GUI/optionsdialog.cpp" line="322"/>
<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="317"/>
<location filename="../src/GUI/optionsdialog.cpp" line="401"/>
<location filename="../src/GUI/optionsdialog.cpp" line="323"/>
<location filename="../src/GUI/optionsdialog.cpp" line="431"/>
<source>Speed:</source>
<translation>Hız:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="318"/>
<location filename="../src/GUI/optionsdialog.cpp" line="324"/>
<source>Heart rate:</source>
<translation>Nabız:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="319"/>
<location filename="../src/GUI/optionsdialog.cpp" line="325"/>
<source>Cadence:</source>
<translation>Kadans:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="320"/>
<location filename="../src/GUI/optionsdialog.cpp" line="326"/>
<source>Power:</source>
<translation>Güç:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="322"/>
<location filename="../src/GUI/optionsdialog.cpp" line="328"/>
<source>Smoothing</source>
<translation>Yumuşatma</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="326"/>
<location filename="../src/GUI/optionsdialog.cpp" line="332"/>
<source>Eliminate GPS outliers</source>
<translation>Aykırı GPS ele</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="335"/>
<location filename="../src/GUI/optionsdialog.cpp" line="341"/>
<source>Smoothing:</source>
<translation>Yumuşatma:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="352"/>
<source>Automatic</source>
<translation>Otomatik</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="366"/>
<source>mi/h</source>
<translation>mi/h</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="355"/>
<location filename="../src/GUI/optionsdialog.cpp" line="369"/>
<source>kn</source>
<translation>kn</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="358"/>
<location filename="../src/GUI/optionsdialog.cpp" line="372"/>
<source>km/h</source>
<translation>km/h</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="362"/>
<location filename="../src/GUI/optionsdialog.cpp" line="568"/>
<location filename="../src/GUI/optionsdialog.cpp" line="376"/>
<location filename="../src/GUI/optionsdialog.cpp" line="598"/>
<source>s</source>
<translation>s</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="366"/>
<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="367"/>
<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="373"/>
<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="374"/>
<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="380"/>
<location filename="../src/GUI/optionsdialog.cpp" line="438"/>
<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="381"/>
<location filename="../src/GUI/optionsdialog.cpp" line="439"/>
<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="418"/>
<location filename="../src/GUI/optionsdialog.cpp" line="448"/>
<source>Elevation</source>
<translation>Rakım</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="429"/>
<location filename="../src/GUI/optionsdialog.cpp" line="459"/>
<source>Filtering</source>
<translation>Filtreleme</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="430"/>
<location filename="../src/GUI/optionsdialog.cpp" line="460"/>
<source>Sources</source>
<translation>Kaynaklar</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="431"/>
<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="464"/>
<location filename="../src/GUI/optionsdialog.cpp" line="494"/>
<source>Radius:</source>
<translation>Yarıçap:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="412"/>
<location filename="../src/GUI/optionsdialog.cpp" line="442"/>
<source>Speed</source>
<translation>Hız</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="450"/>
<location filename="../src/GUI/optionsdialog.cpp" line="353"/>
<source>Custom</source>
<translation>Özel</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="480"/>
<source>mi</source>
<translation>mi</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="453"/>
<location filename="../src/GUI/optionsdialog.cpp" line="483"/>
<source>nmi</source>
<translation>nmi</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="456"/>
<location filename="../src/GUI/optionsdialog.cpp" line="486"/>
<source>km</source>
<translation>Km</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="471"/>
<location filename="../src/GUI/optionsdialog.cpp" line="611"/>
<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="478"/>
<location filename="../src/GUI/optionsdialog.cpp" line="508"/>
<source>WYSIWYG</source>
<translation>WYSIWYG</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="479"/>
<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="484"/>
<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="486"/>
<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="508"/>
<location filename="../src/GUI/optionsdialog.cpp" line="538"/>
<source>Name</source>
<translation>Adı</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="510"/>
<location filename="../src/GUI/optionsdialog.cpp" line="540"/>
<source>Date</source>
<translation>Tarih</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="512"/>
<location filename="../src/GUI/optionsdialog.cpp" line="542"/>
<source>Distance</source>
<translation>Mesafe</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="514"/>
<location filename="../src/GUI/optionsdialog.cpp" line="544"/>
<source>Time</source>
<translation>Zaman</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="516"/>
<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="518"/>
<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="533"/>
<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="543"/>
<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="544"/>
<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="552"/>
<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="555"/>
<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="562"/>
<location filename="../src/GUI/optionsdialog.cpp" line="592"/>
<source>MB</source>
<translation>MB</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="572"/>
<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="573"/>
<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="589"/>
<location filename="../src/GUI/optionsdialog.cpp" line="614"/>
<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="607"/>
<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="609"/>
<location filename="../src/GUI/optionsdialog.cpp" line="639"/>
<source>Maps</source>
<translation>Haritalar</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="610"/>
<location filename="../src/GUI/optionsdialog.cpp" line="640"/>
<source>Data</source>
<translation>Veri</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="612"/>
<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="641"/>
<location filename="../src/GUI/optionsdialog.cpp" line="671"/>
<source>Options</source>
<translation>Seçenekler</translation>
</message>
@ -1867,7 +1886,12 @@
<translation>ıklama</translation>
</message>
<message>
<location filename="../src/GUI/waypointitem.cpp" line="42"/>
<location filename="../src/GUI/waypointitem.cpp" line="44"/>
<source>Address</source>
<translation>Adres</translation>
</message>
<message>
<location filename="../src/GUI/waypointitem.cpp" line="55"/>
<source>Links</source>
<translation>Bağlantılar</translation>
</message>

1901
lang/gpxsee_uk.ts Normal file

File diff suppressed because it is too large Load Diff

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>
@ -538,7 +554,28 @@
<string>gpi</string>
</array>
<key>public.mime-type</key>
<string>application/vnd.garmin.cup</string>
<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>

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 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 and temperature
graphs.</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>
@ -69,5 +70,7 @@
<mimetype>application/slf+xml</mimetype>
<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

@ -3,12 +3,16 @@ Name=GPXSee
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
Comment[tr]=GPS günlük dosyası görüntüleyici ve analizcisi
Comment[uk]=Переглядач та аналізатор GPS логів
Exec=gpxsee %F
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;
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.16"
!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"
@ -195,6 +184,7 @@ SectionGroup "Localization" SEC_LOCALIZATION
!insertmacro LOCALIZATION "Spanish" "es"
!insertmacro LOCALIZATION "Swedish" "sv"
!insertmacro LOCALIZATION "Turkish" "tr"
!insertmacro LOCALIZATION "Ukrainian" "uk"
SectionGroupEnd
;--------------------------------
@ -231,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
@ -243,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

@ -91,4 +91,18 @@
<generic-icon name="text-plain"/>
<glob pattern="*.cup"/>
</mime-type>
<mime-type type="application/vnd.garmin.gpi">
<comment>Garmin POI File</comment>
<sub-class-of type="application/octet-stream"/>
<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.16"
!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"
@ -197,6 +191,7 @@ SectionGroup "Localization" SEC_LOCALIZATION
!insertmacro LOCALIZATION "Spanish" "es"
!insertmacro LOCALIZATION "Swedish" "sv"
!insertmacro LOCALIZATION "Turkish" "tr"
!insertmacro LOCALIZATION "Ukrainian" "uk"
SectionGroupEnd
;--------------------------------
@ -234,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
@ -246,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

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<map xmlns="http://www.gpxsee.org/map/1.3">
<name>4UMaps</name>
<url>https://4umaps.com/$z/$x/$y.png</url>
<url>https://tileserver.4umaps.com/$z/$x/$y.png</url>
<zoom min="2" max="15"/>
<bounds bottom="-65"/>
<copyright>Map data: © OpenStreetMap contributors (ODbL) | Rendering: © 4UMaps.eu</copyright>

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<map xmlns="http://www.gpxsee.org/map/1.3">
<name>Open Street Map</name>
<url>http://tile.openstreetmap.org/$z/$x/$y.png</url>
<url>https://tile.openstreetmap.org/$z/$x/$y.png</url>
<copyright>Map data: © OpenStreetMap contributors (ODbL) | Rendering: © OpenStreetMap (CC-BY-SA)</copyright>
</map>

View File

@ -8,7 +8,7 @@
#include "areaitem.h"
ToolTip AreaItem::toolTip() const
QString AreaItem::info() const
{
ToolTip tt;
@ -18,11 +18,11 @@ ToolTip AreaItem::toolTip() const
tt.insert(qApp->translate("PolygonItem", "Description"),
_area.description());
return tt;
return tt.toString();
}
AreaItem::AreaItem(const Area &area, Map *map, QGraphicsItem *parent)
: QGraphicsItem(parent), _area(area)
AreaItem::AreaItem(const Area &area, Map *map, GraphicsItem *parent)
: GraphicsItem(parent), _area(area)
{
_map = map;
_digitalZoom = 0;
@ -173,6 +173,6 @@ void AreaItem::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
void AreaItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
Popup::show(event->screenPos(), toolTip().toString(), event->widget());
Popup::show(event->screenPos(), info(), event->widget());
QGraphicsItem::mousePressEvent(event);
}

View File

@ -1,16 +1,16 @@
#ifndef AREAITEM_H
#define AREAITEM_H
#include <QGraphicsItem>
#include "data/area.h"
#include "graphicsscene.h"
#include "tooltip.h"
class Map;
class AreaItem : public QGraphicsItem
class AreaItem : public GraphicsItem
{
public:
AreaItem(const Area &area, Map *map, QGraphicsItem *parent = 0);
AreaItem(const Area &area, Map *map, GraphicsItem *parent = 0);
QPainterPath shape() const {return _painterPath;}
QRectF boundingRect() const {return _painterPath.boundingRect();}
@ -27,6 +27,8 @@ public:
void setStyle(Qt::PenStyle style);
void setDigitalZoom(int zoom);
virtual QString info() const;
protected:
void hoverEnterEvent(QGraphicsSceneHoverEvent *event);
void hoverLeaveEvent(QGraphicsSceneHoverEvent *event);

View File

@ -46,3 +46,9 @@ void GraphicsScene::helpEvent(QGraphicsSceneHelpEvent *event)
/* No need to process QGraphicsScene::helpEvent() */
}
void GraphicsScene::clear()
{
Popup::clear();
QGraphicsScene::clear();
}

View File

@ -18,6 +18,9 @@ class GraphicsScene : public QGraphicsScene
public:
GraphicsScene(QObject *parent = 0) : QGraphicsScene(parent) {}
public slots:
void clear();
protected:
void helpEvent(QGraphicsSceneHelpEvent *event);

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);
@ -949,6 +949,7 @@ void GUI::openOptions()
SET_TRACK_OPTION(cadenceFilter, setCadenceFilter);
SET_TRACK_OPTION(powerFilter, setPowerFilter);
SET_TRACK_OPTION(outlierEliminate, setOutlierElimination);
SET_TRACK_OPTION(automaticPause, setAutomaticPause);
SET_TRACK_OPTION(pauseSpeed, setPauseSpeed);
SET_TRACK_OPTION(pauseInterval, setPauseInterval);
SET_TRACK_OPTION(useReportedSpeed, useReportedSpeed);
@ -1654,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);
@ -1798,6 +1799,8 @@ void GUI::writeSettings()
settings.setValue(POWER_FILTER_SETTING, _options.powerFilter);
if (_options.outlierEliminate != OUTLIER_ELIMINATE_DEFAULT)
settings.setValue(OUTLIER_ELIMINATE_SETTING, _options.outlierEliminate);
if (_options.automaticPause != AUTOMATIC_PAUSE_DEFAULT)
settings.setValue(AUTOMATIC_PAUSE_SETTING, _options.automaticPause);
if (_options.pauseSpeed != PAUSE_SPEED_DEFAULT)
settings.setValue(PAUSE_SPEED_SETTING, _options.pauseSpeed);
if (_options.pauseInterval != PAUSE_INTERVAL_DEFAULT)
@ -1876,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
@ -2072,6 +2075,8 @@ void GUI::readSettings()
USE_REPORTED_SPEED_DEFAULT).toBool();
_options.dataUseDEM = settings.value(DATA_USE_DEM_SETTING,
DATA_USE_DEM_DEFAULT).toBool();
_options.automaticPause = settings.value(AUTOMATIC_PAUSE_SETTING,
AUTOMATIC_PAUSE_DEFAULT).toBool();
_options.pauseInterval = settings.value(PAUSE_INTERVAL_SETTING,
PAUSE_INTERVAL_DEFAULT).toInt();
_options.poiRadius = settings.value(POI_RADIUS_SETTING, POI_RADIUS_DEFAULT)
@ -2153,6 +2158,7 @@ void GUI::readSettings()
Track::setCadenceFilter(_options.cadenceFilter);
Track::setPowerFilter(_options.powerFilter);
Track::setOutlierElimination(_options.outlierEliminate);
Track::setAutomaticPause(_options.automaticPause);
Track::setPauseSpeed(_options.pauseSpeed);
Track::setPauseInterval(_options.pauseInterval);
Track::useReportedSpeed(_options.useReportedSpeed);

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

@ -37,6 +37,12 @@ static QFrame *line()
#endif // Q_OS_MAC
void OptionsDialog::automaticPauseDetectionSet(bool set)
{
_pauseInterval->setEnabled(!set);
_pauseSpeed->setEnabled(!set);
}
QWidget *OptionsDialog::createMapPage()
{
_projection = new LimitedComboBox(200);
@ -343,10 +349,18 @@ QWidget *OptionsDialog::createDataPage()
filterTab->setLayout(filterTabLayout);
_automaticPause = new QRadioButton(tr("Automatic"));
_manualPause = new QRadioButton(tr("Custom"));
if (_options->automaticPause)
_automaticPause->setChecked(true);
else
_manualPause->setChecked(true);
_pauseSpeed = new QDoubleSpinBox();
_pauseSpeed->setDecimals(1);
_pauseSpeed->setSingleStep(0.1);
_pauseSpeed->setMinimum(0.1);
_pauseSpeed->setEnabled(_manualPause->isChecked());
if (_options->units == Imperial) {
_pauseSpeed->setValue(_options->pauseSpeed * MS2MIH);
_pauseSpeed->setSuffix(UNIT_SPACE + tr("mi/h"));
@ -361,10 +375,26 @@ QWidget *OptionsDialog::createDataPage()
_pauseInterval->setMinimum(1);
_pauseInterval->setSuffix(UNIT_SPACE + tr("s"));
_pauseInterval->setValue(_options->pauseInterval);
_pauseInterval->setEnabled(_manualPause->isChecked());
QFormLayout *pauseLayout = new QFormLayout();
pauseLayout->addRow(tr("Minimal speed:"), _pauseSpeed);
pauseLayout->addRow(tr("Minimal duration:"), _pauseInterval);
connect(_automaticPause, SIGNAL(toggled(bool)), this,
SLOT(automaticPauseDetectionSet(bool)));
QHBoxLayout *pauseTypeLayout = new QHBoxLayout();
#ifdef Q_OS_MAC
pauseTypeLayout->addStretch();
#endif
pauseTypeLayout->addWidget(_automaticPause);
pauseTypeLayout->addWidget(_manualPause);
pauseTypeLayout->addStretch();
QFormLayout *pauseValuesLayout = new QFormLayout();
pauseValuesLayout->addRow(tr("Minimal speed:"), _pauseSpeed);
pauseValuesLayout->addRow(tr("Minimal duration:"), _pauseInterval);
QVBoxLayout *pauseLayout = new QVBoxLayout();
pauseLayout->addLayout(pauseTypeLayout);
pauseLayout->addLayout(pauseValuesLayout);
QWidget *pauseTab = new QWidget();
pauseTab->setLayout(pauseLayout);
@ -679,6 +709,7 @@ void OptionsDialog::accept()
_options->cadenceFilter = _cadenceFilter->value();
_options->powerFilter = _powerFilter->value();
_options->outlierEliminate = _outlierEliminate->isChecked();
_options->automaticPause = _automaticPause->isChecked();
qreal pauseSpeed = (_options->units == Imperial)
? _pauseSpeed->value() / MS2MIH : (_options->units == Nautical)
? _pauseSpeed->value() / MS2KN : _pauseSpeed->value() / MS2KMH;

View File

@ -49,6 +49,7 @@ struct Options {
int cadenceFilter;
int powerFilter;
bool outlierEliminate;
bool automaticPause;
qreal pauseSpeed;
int pauseInterval;
bool useReportedSpeed;
@ -86,6 +87,9 @@ public slots:
public:
OptionsDialog(Options *options, QWidget *parent = 0);
private slots:
void automaticPauseDetectionSet(bool set);
private:
QWidget *createMapPage();
QWidget *createAppearancePage();
@ -129,6 +133,9 @@ private:
OddSpinBox *_cadenceFilter;
OddSpinBox *_powerFilter;
QCheckBox *_outlierEliminate;
QRadioButton *_automaticPause;
QRadioButton *_manualPause;
QDoubleSpinBox *_pauseSpeed;
QSpinBox *_pauseInterval;
QRadioButton *_computedSpeed;

View File

@ -163,3 +163,9 @@ void Popup::show(const QPoint &pos, const QString &text, QWidget *w)
PopupLabel::_instance->place(pos, w);
PopupLabel::_instance->showNormal();
}
void Popup::clear()
{
if (PopupLabel::_instance)
delete PopupLabel::_instance;
}

View File

@ -9,6 +9,7 @@ class Popup
{
public:
static void show(const QPoint &pos, const QString &text, QWidget *w);
static void clear();
};
#endif // POPUP_H

View File

@ -135,6 +135,8 @@
#define POWER_FILTER_DEFAULT 3
#define OUTLIER_ELIMINATE_SETTING "outlierEliminate"
#define OUTLIER_ELIMINATE_DEFAULT true
#define AUTOMATIC_PAUSE_SETTING "automaticPause"
#define AUTOMATIC_PAUSE_DEFAULT true
#define PAUSE_SPEED_SETTING "pauseSpeed"
#define PAUSE_SPEED_DEFAULT 0.5 /* m/s */
#define PAUSE_INTERVAL_SETTING "pauseInterval"

View File

@ -1,10 +1,21 @@
#include <QImageReader>
#include <QLabel>
#include "popup.h"
#include "tooltip.h"
static QSize thumbnailSize(const ImageInfo &img, int limit)
{
int width, height;
if (img.size().width() > img.size().height()) {
width = qMin(img.size().width(), limit);
qreal ratio = img.size().width() / (qreal)img.size().height();
height = (int)(width / ratio);
} else {
height = qMin(img.size().height(), limit);
qreal ratio = img.size().height() / (qreal)img.size().width();
width = (int)(height / ratio);
}
#define THUMBNAIL_MAX_SIZE 240
return QSize(width, height);
}
void ToolTip::insert(const QString &key, const QString &value)
{
@ -15,22 +26,17 @@ QString ToolTip::toString() const
{
QString html;
if (_img.isValid()) {
int width, height;
if (_img.size().width() > _img.size().height()) {
width = qMin(_img.size().width(), THUMBNAIL_MAX_SIZE);
qreal ratio = _img.size().width() / (qreal)_img.size().height();
height = (int)(width / ratio);
} else {
height = qMin(_img.size().height(), THUMBNAIL_MAX_SIZE);
qreal ratio = _img.size().height() / (qreal)_img.size().width();
width = (int)(height / ratio);
}
if (_images.size()) {
html = "<div align=\"center\">";
for (int i = 0; i < _images.size(); i++) {
const ImageInfo &img = _images.at(i);
QSize size(thumbnailSize(img, qMin(960/_images.size(), 240)));
html += "<div align=\"center\">";
html += QString("<a href=\"file:%0\">"
"<img src=\"%0\" width=\"%1\" height=\"%2\"/></a>")
.arg(_img.path(), QString::number(width), QString::number(height));
html += QString("<a href=\"file:%0\">"
"<img src=\"%0\" width=\"%1\" height=\"%2\"/></a>")
.arg(img.path(), QString::number(size.width()),
QString::number(size.height()));
}
html += "</div>";
}

View File

@ -3,6 +3,7 @@
#include <QString>
#include <QList>
#include <QVector>
#include "common/kv.h"
#include "data/imageinfo.h"
@ -10,12 +11,12 @@ class ToolTip
{
public:
void insert(const QString &key, const QString &value);
void setImage(const ImageInfo &image) {_img = image;}
void setImages(const QVector<ImageInfo> &images) {_images = images;}
QString toString() const;
private:
QList<KV<QString, QString> > _list;
ImageInfo _img;
QVector<ImageInfo> _images;
};
#endif // TOOLTIP_H

View File

@ -30,6 +30,19 @@ QString WaypointItem::info() const
if (!_waypoint.description().isEmpty())
tt.insert(qApp->translate("WaypointItem", "Description"),
_waypoint.description());
if (_waypoint.address().isValid()) {
QString addr("<address>");
addr += _waypoint.address().street();
addr += "<br/>" + _waypoint.address().city();
if (!_waypoint.address().postalCode().isEmpty())
addr += "<br/>" + _waypoint.address().postalCode();
if (!_waypoint.address().state().isEmpty())
addr += "<br/>" + _waypoint.address().state();
if (!_waypoint.address().country().isEmpty())
addr += "<br/>" + _waypoint.address().country();
addr += "</address>";
tt.insert(qApp->translate("WaypointItem", "Address"), addr);
}
if (!_waypoint.links().isEmpty()) {
QString links;
for (int i = 0; i < _waypoint.links().size(); i++) {
@ -41,7 +54,7 @@ QString WaypointItem::info() const
}
tt.insert(qApp->translate("WaypointItem", "Links"), links);
}
tt.setImage(_waypoint.image());
tt.setImages(_waypoint.images());
return tt.toString();
}

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

16
src/common/garmin.h Normal file
View File

@ -0,0 +1,16 @@
#ifndef GARMIN_H
#define GARMIN_H
#include <QtGlobal>
inline double toWGS32(qint32 v)
{
return (double)(((double)v / (double)(1U<<31)) * (double)180);
}
inline double toWGS24(qint32 v)
{
return toWGS32(v<<8);
}
#endif // GARMIN_H

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

35
src/data/address.h Normal file
View File

@ -0,0 +1,35 @@
#ifndef ADDRESS_H
#define ADDRESS_H
#include <QString>
class Address
{
public:
Address() {}
Address(const QString &street, const QString &city)
: _street(street), _city(city) {}
const QString &street() const {return _street;}
const QString &city() const {return _city;}
const QString &state() const {return _state;}
const QString &country() const {return _country;}
const QString &postalCode() const {return _postalCode;}
void setStreet(const QString &street) {_street = street;}
void setCity(const QString &city) {_city = city;}
void setState(const QString &state) {_state = state;}
void setCountry(const QString &country) {_country = country;}
void setPostalCode(const QString &postalCode) {_postalCode = postalCode;}
bool isValid() const {return !(_street.isEmpty() || _city.isEmpty());}
private:
QString _street;
QString _city;
QString _state;
QString _country;
QString _postalCode;
};
#endif // ADDRESS_H

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

@ -1,4 +1,9 @@
#include <QtEndian>
#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0)
#include <QtCore/qmath.h>
#else // QT5
#include <QtMath>
#endif // QT5
#include <QDir>
#include <QFile>
#include "common/coordinates.h"
@ -37,10 +42,10 @@ static qreal height(const Coordinates &c, const QByteArray *data)
else
return NAN;
int row = (int)((c.lat() - (int)c.lat()) * (samples - 1));
int col = (int)((c.lon() - (int)c.lon()) * (samples - 1));
qreal dx = ((c.lon() - (int)c.lon()) * (samples - 1)) - col;
qreal dy = ((c.lat() - (int)c.lat()) * (samples - 1)) - row;
int row = (int)((c.lat() - qFloor(c.lat())) * (samples - 1));
int col = (int)((c.lon() - qFloor(c.lon())) * (samples - 1));
qreal dx = ((c.lon() - qFloor(c.lon())) * (samples - 1)) - col;
qreal dy = ((c.lat() - qFloor(c.lat())) * (samples - 1)) - row;
qreal p0 = value(col, row, samples, data);
qreal p1 = value(col + 1, row, samples, data);
@ -75,7 +80,7 @@ qreal DEM::elevation(const Coordinates &c)
if (_dir.isEmpty())
return NAN;
Key k((int)c.lon(), (int)c.lat());
Key k(qFloor(c.lon()), qFloor(c.lat()));
QByteArray *ba = _data[k];
if (!ba) {

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))
@ -209,7 +212,7 @@ bool EXIFParser::parseTIFF(QFile *file, QVector<Waypoint> &waypoints)
Waypoint wp(c);
wp.setName(QFileInfo(file->fileName()).baseName());
wp.setImage(img);
wp.addImage(img);
wp.setElevation(altitude(tiff, GPSIFD.value(GPSAltitude),
GPSIFD.value(GPSAltitudeRef)));
wp.setTimestamp(QDateTime(QDate::fromString(text(tiff,

View File

@ -1,7 +1,17 @@
#include <cstring>
#include <QDataStream>
#include <QTextCodec>
#include <QtEndian>
#include <QUrl>
#include <QIODevice>
#include <QApplication>
#include <QBuffer>
#include <QImageReader>
#include <QCryptographicHash>
#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)
#include <QTemporaryDir>
#endif // QT_VERSION >= 5
#include "common/garmin.h"
#include "gpiparser.h"
@ -26,16 +36,105 @@ private:
QString _str;
};
static inline double toWGS(qint32 v)
class CryptDevice : public QIODevice
{
return (double)(((double)v / (double)(1U<<31)) * (double)180);
public:
CryptDevice(QIODevice *device, quint32 key, quint32 blockSize,
QObject *parent = 0);
bool isSequential() const {return true;}
protected:
qint64 readData(char *data, qint64 maxSize);
qint64 writeData(const char *, qint64) {return -1;}
private:
QIODevice *_device;
quint32 _key;
QByteArray _block;
int _available;
};
static void demangle(quint8 *data, quint32 size, quint32 key)
{
static const unsigned char shuf[] = {
0xb, 0xc, 0xa, 0x0,
0x8, 0xf, 0x2, 0x1,
0x6, 0x4, 0x9, 0x3,
0xd, 0x5, 0x7, 0xe
};
int hiCnt = 0, loCnt;
quint8 sum = shuf[((key >> 24) + (key >> 16) + (key >> 8) + key) & 0xf];
for (quint32 i = 0; i < size; i++) {
quint8 hiAdd = shuf[key >> (hiCnt << 2) & 0xf] + sum;
loCnt = (hiCnt > 6) ? 0 : hiCnt + 1;
quint8 loAdd = shuf[key >> (loCnt << 2) & 0xf] + sum;
quint8 hi = data[i] - (hiAdd << 4);
quint8 lo = data[i] - loAdd;
data[i] = (hi & 0xf0) | (lo & 0x0f);
hiCnt = (loCnt > 6) ? 0 : loCnt + 1;
}
}
CryptDevice::CryptDevice(QIODevice *device, quint32 key, quint32 blockSize,
QObject *parent) : QIODevice(parent), _device(device), _key(key), _available(0)
{
_block.resize(blockSize);
setOpenMode(_device->openMode());
}
qint64 CryptDevice::readData(char *data, qint64 maxSize)
{
qint64 rs, ts = 0;
int cs;
if (_available) {
cs = qMin(maxSize, (qint64)_available);
memcpy(data, _block.constData() + _block.size() - _available, cs);
_available -= cs;
maxSize -= cs;
ts = cs;
}
while (maxSize) {
if ((rs = _device->read(_block.data(), _block.size())) < 0)
return -1;
else if (!rs)
break;
_available = rs;
demangle((quint8*)_block.data(), _available, _key);
cs = qMin(maxSize, (qint64)_available);
memcpy(data + ts, _block.constData(), cs);
_available -= cs;
maxSize -= cs;
ts += cs;
}
return ts;
}
static qint32 readInt24(QDataStream &stream)
{
unsigned char data[3];
quint32 val;
stream.readRawData((char*)data, sizeof(data));
val = data[0] | ((quint32)data[1]) << 8 | ((quint32)data[2]) << 16;
return (val > 0x7FFFFF) ? (val & 0x7FFFFF) - 0x800000 : val;
}
static quint16 nextHeaderType(QDataStream &stream)
{
quint16 type = 0;
stream.device()->peek((char*)&type, sizeof(type));
return qFromLittleEndian(type);
if (stream.device()->peek((char*)&type, sizeof(type))
< (qint64)sizeof(type)) {
stream.setStatus(QDataStream::ReadCorruptData);
return 0xFFFF;
} else
return qFromLittleEndian(type);
}
static quint8 readRecordHeader(QDataStream &stream, RecordHeader &hdr)
@ -55,18 +154,6 @@ static quint32 skipRecord(QDataStream &stream)
return rs + rh.size;
}
static quint32 readFprsRecord(QDataStream &stream)
{
RecordHeader rh;
quint16 s1;
quint8 rs, s2, s3, s4;
rs = readRecordHeader(stream, rh);
stream >> s1 >> s2 >> s3 >> s4;
return rs + 5;
}
static quint16 readString(QDataStream &stream, QTextCodec *codec, QString &str)
{
quint16 len;
@ -83,15 +170,16 @@ static quint32 readTranslatedObjects(QDataStream &stream, QTextCodec *codec,
QList<TranslatedString> &objects)
{
qint32 size = 0, ret;
char lang[2];
char lang[3];
memset(lang, 0, sizeof(lang));
objects.clear();
stream >> size;
ret = size + 4;
while (size > 0) {
while (stream.status() == QDataStream::Ok && size > 0) {
QString str;
stream.readRawData(lang, sizeof(lang));
stream.readRawData(lang, sizeof(lang) - 1);
size -= readString(stream, codec, str) + 2;
objects.append(TranslatedString(lang, str));
}
@ -102,6 +190,67 @@ static quint32 readTranslatedObjects(QDataStream &stream, QTextCodec *codec,
return ret;
}
static quint32 readFprsRecord(QDataStream &stream)
{
RecordHeader rh;
quint16 s1;
quint8 rs, s2, s3, s4;
rs = readRecordHeader(stream, rh);
stream >> s1 >> s2 >> s3 >> s4;
return rs + 5;
}
static quint32 readFileDataRecord(QDataStream &stream, QTextCodec *codec)
{
RecordHeader rh;
quint32 ds, s1;
quint16 s2, s3;
quint8 rs;
QList<TranslatedString> obj;
rs = readRecordHeader(stream, rh);
stream >> s1 >> s2 >> s3;
ds = 8;
ds += readTranslatedObjects(stream, codec, obj);
ds += readTranslatedObjects(stream, codec, obj);
if (s1 & 0x10) {
quint8 ss1, ss2;
quint16 ss3;
stream >> ss1 >> ss2 >> ss3;
ds += 4;
}
if (s1 & 0x100) {
quint32 ss1;
stream >> ss1;
if (ss1)
stream.skipRawData(ss1);
ds += ss1 + 4;
}
if (s1 & 0x400) {
QString str;
ds += readString(stream, codec, str);
}
if (s1 & 0x400000) {
quint16 ss1;
stream >> ss1;
if (ss1)
stream.skipRawData(ss1);
ds += ss1 + 2;
}
// structure of higher fields not known
if (ds > rh.size)
stream.setStatus(QDataStream::ReadCorruptData);
else if (ds < rh.size)
// skip remaining unknown fields
stream.skipRawData(rh.size - ds);
return rs + rh.size;
}
static quint32 readDescription(QDataStream &stream, QTextCodec *codec,
Waypoint &waypoint)
{
@ -154,29 +303,29 @@ static quint32 readContact(QDataStream &stream, QTextCodec *codec,
{
RecordHeader rh;
quint8 rs;
quint16 s1;
quint16 flags;
quint32 ds = 2;
QString str;
QList<TranslatedString> obj;
rs = readRecordHeader(stream, rh);
stream >> s1;
stream >> flags;
if (s1 & 0x1) // phone
if (flags & 0x1) // phone
ds += readString(stream, codec, str);
if (s1 & 0x2) // phone2
if (flags & 0x2) // phone2
ds += readString(stream, codec, str);
if (s1 & 0x4) // fax
if (flags & 0x4) // fax
ds += readString(stream, codec, str);
if (s1 & 0x8) // mail
if (flags & 0x8) // mail
ds += readString(stream, codec, str);
if (s1 & 0x10) { // web
if (flags & 0x10) { // web
ds += readString(stream, codec, str);
QUrl url(str);
waypoint.addLink(Link(url.scheme().isEmpty()
? "http://" + str : str, str));
}
if (s1 & 0x20) // unknown
if (flags & 0x20) // unknown
ds += readTranslatedObjects(stream, codec, obj);
if (ds != rh.size)
@ -185,34 +334,228 @@ static quint32 readContact(QDataStream &stream, QTextCodec *codec,
return rs + rh.size;
}
static quint32 readAddress(QDataStream &stream, QTextCodec *codec,
Waypoint &waypoint)
{
RecordHeader rh;
quint8 rs;
quint16 flags;
quint32 ds = 2;
QList<TranslatedString> obj;
QString str;
Address addr;
rs = readRecordHeader(stream, rh);
stream >> flags;
if (flags & 0x1) {
ds += readTranslatedObjects(stream, codec, obj);
if (!obj.isEmpty())
addr.setCity(obj.first().str());
}
if (flags & 0x2) {
ds += readTranslatedObjects(stream, codec, obj);
if (!obj.isEmpty())
addr.setCountry(obj.first().str());
}
if (flags & 0x4) {
ds += readTranslatedObjects(stream, codec, obj);
if (!obj.isEmpty())
addr.setState(obj.first().str());
}
if (flags & 0x8) {
ds += readString(stream, codec, str);
addr.setPostalCode(str);
}
if (flags & 0x10) {
ds += readTranslatedObjects(stream, codec, obj);
if (!obj.isEmpty())
addr.setStreet(obj.first().str());
}
if (flags & 0x20) // unknown
ds += readString(stream, codec, str);
waypoint.setAddress(addr);
if (ds != rh.size)
stream.setStatus(QDataStream::ReadCorruptData);
return rs + rh.size;
}
#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)
static const QTemporaryDir &tempDir()
{
static QTemporaryDir dir;
return dir;
}
static quint32 readImageInfo(QDataStream &stream, Waypoint &waypoint,
const QString &fileName, int &imgId)
{
RecordHeader rh;
quint8 rs, s1;
quint32 size;
rs = readRecordHeader(stream, rh);
stream >> s1 >> size;
QByteArray ba;
ba.resize(size);
stream.readRawData(ba.data(), ba.size());
if (tempDir().isValid()) {
QBuffer buf(&ba);
QImageReader ir(&buf);
QByteArray id(fileName.toUtf8() + QByteArray::number(imgId++));
QFile imgFile(tempDir().path() + "/" + QString("%0.%1").arg(
QCryptographicHash::hash(id, QCryptographicHash::Sha1).toHex(),
QString(ir.format())));
imgFile.open(QIODevice::WriteOnly);
imgFile.write(ba);
imgFile.close();
waypoint.addImage(ImageInfo(imgFile.fileName(), ir.size()));
}
if (size + 5 != rh.size)
stream.setStatus(QDataStream::ReadCorruptData);
return rs + rh.size;
}
#endif // QT_VERSION >= 5
static int speed(quint8 flags)
{
switch (flags >> 4) {
case 0x8:
return 40;
case 0x9:
return 30;
case 0xA:
return 50;
case 0xB:
return 70;
case 0xC:
return 80;
case 0xD:
return 90;
case 0xE:
return 100;
case 0xF:
return 120;
default:
return 0;
}
}
static quint32 readCamera(QDataStream &stream, QVector<Waypoint> &waypoints,
QList<Area> &polygons)
{
RecordHeader rh;
quint8 flags, type, s7, rs;
qint32 top, right, bottom, left, lat, lon;
quint32 ds = 15;
rs = readRecordHeader(stream, rh);
top = readInt24(stream);
right = readInt24(stream);
bottom = readInt24(stream);
left = readInt24(stream);
stream >> flags >> type >> s7;
if (s7) {
quint32 skip = s7 + 2 + s7/4;
stream.skipRawData(skip);
lat = readInt24(stream);
lon = readInt24(stream);
ds += skip + 6;
} else {
quint8 s8;
stream.skipRawData(9);
stream >> s8;
quint32 skip = 3 + s8 + s8/4;
stream.skipRawData(skip);
lat = readInt24(stream);
lon = readInt24(stream);
ds += skip + 16;
}
waypoints.append(Coordinates(toWGS24(lon), toWGS24(lat)));
Area area;
Polygon polygon;
QVector<Coordinates> v(4);
v[0] = Coordinates(toWGS24(left), toWGS24(top));
v[1] = Coordinates(toWGS24(right), toWGS24(top));
v[2] = Coordinates(toWGS24(right), toWGS24(bottom));
v[3] = Coordinates(toWGS24(left), toWGS24(bottom));
polygon.append(v);
area.append(polygon);
switch (type) {
case 8:
area.setDescription(QString("%1&nbsp;mi/h")
.arg(speed(flags)));
break;
case 9:
area.setDescription(QString("%1&nbsp;km/h")
.arg(speed(flags)));
break;
case 10:
case 11:
area.setDescription("Red light camera");
break;
}
polygons.append(area);
if (ds > rh.size)
stream.setStatus(QDataStream::ReadCorruptData);
else if (ds < rh.size)
stream.skipRawData(rh.size - ds);
return rs + rh.size;
}
static quint32 readPOI(QDataStream &stream, QTextCodec *codec,
QVector<Waypoint> &waypoints)
QVector<Waypoint> &waypoints, const QString &fileName, int &imgId)
{
RecordHeader rh;
quint8 rs;
quint32 ds;
qint32 s1, s2;
qint32 lat, lon;
quint16 s3;
QList<TranslatedString> obj;
rs = readRecordHeader(stream, rh);
stream >> s1 >> s2 >> s3;
stream >> lat >> lon >> s3;
stream.skipRawData(s3);
ds = 10 + s3;
ds += readTranslatedObjects(stream, codec, obj);
waypoints.append(Waypoint(Coordinates(toWGS(s2), toWGS(s1))));
waypoints.append(Waypoint(Coordinates(toWGS32(lon), toWGS32(lat))));
if (!obj.isEmpty())
waypoints.last().setName(obj.first().str());
while (ds < rh.size) {
while (stream.status() == QDataStream::Ok && ds < rh.size) {
switch(nextHeaderType(stream)) {
case 10:
ds += readDescription(stream, codec, waypoints.last());
break;
case 11:
ds += readAddress(stream, codec, waypoints.last());
break;
case 12:
ds += readContact(stream, codec, waypoints.last());
break;
#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)
case 13:
ds += readImageInfo(stream, waypoints.last(), fileName, imgId);
break;
#endif // QT_VERSION >= 5
case 14:
ds += readNotes(stream, codec, waypoints.last());
break;
@ -228,7 +571,8 @@ static quint32 readPOI(QDataStream &stream, QTextCodec *codec,
}
static quint32 readSpatialIndex(QDataStream &stream, QTextCodec *codec,
QVector<Waypoint> &waypoints)
QVector<Waypoint> &waypoints, QList<Area> &polygons, const QString &fileName,
int &imgId)
{
RecordHeader rh;
quint32 ds, s5;
@ -241,13 +585,17 @@ static quint32 readSpatialIndex(QDataStream &stream, QTextCodec *codec,
stream.skipRawData(s6);
ds = 22 + s6;
if (rh.flags & 0x8) {
while (ds < rh.size) {
while (stream.status() == QDataStream::Ok && ds < rh.size) {
switch(nextHeaderType(stream)) {
case 2:
ds += readPOI(stream, codec, waypoints);
ds += readPOI(stream, codec, waypoints, fileName, imgId);
break;
case 8:
ds += readSpatialIndex(stream, codec, waypoints);
ds += readSpatialIndex(stream, codec, waypoints, polygons,
fileName, imgId);
break;
case 19:
ds += readCamera(stream, waypoints, polygons);
break;
default:
ds += skipRecord(stream);
@ -261,52 +609,93 @@ static quint32 readSpatialIndex(QDataStream &stream, QTextCodec *codec,
return rs + rh.size;
}
static quint32 readFileDataRecord(QDataStream &stream, QTextCodec *codec)
static void readPOIDatabase(QDataStream &stream, QTextCodec *codec,
QVector<Waypoint> &waypoints, QList<Area> &polygons, const QString &fileName,
int &imgId)
{
RecordHeader rh;
quint32 ds, s1;
quint16 s2, s3;
quint8 rs;
QList<TranslatedString> obj;
quint32 ds;
rs = readRecordHeader(stream, rh);
stream >> s1 >> s2 >> s3;
ds = 8;
ds += readTranslatedObjects(stream, codec, obj);
ds += readTranslatedObjects(stream, codec, obj);
if (s1 & 0x10) {
quint8 ss1, ss2;
quint16 ss3;
stream >> ss1 >> ss2 >> ss3;
ds += 4;
}
if (s1 & 0x100) {
quint32 ss1;
stream >> ss1;
if (ss1)
stream.skipRawData(ss1);
ds += ss1 + 4;
}
if (s1 & 0x400) {
QString str;
ds += readString(stream, codec, str);
}
if (s1 & 0x400000) {
quint16 ss1;
stream >> ss1;
if (ss1)
stream.skipRawData(ss1);
ds += ss1 + 2;
readRecordHeader(stream, rh);
ds = readTranslatedObjects(stream, codec, obj);
ds += readSpatialIndex(stream, codec, waypoints, polygons, fileName, imgId);
if (rh.flags & 0x8) {
while (stream.status() == QDataStream::Ok && ds < rh.size) {
switch(nextHeaderType(stream)) {
case 5: // symbol
case 7: // category
default:
ds += skipRecord(stream);
}
}
}
if (ds != rh.size)
stream.setStatus(QDataStream::ReadCorruptData);
return rs + rh.size;
}
bool GPIParser::readFileHeader(QDataStream &stream)
bool GPIParser::readData(QDataStream &stream, QTextCodec *codec,
QVector<Waypoint> &waypoints, QList<Area> &polygons, const QString &fileName)
{
int imgId = 0;
while (stream.status() == QDataStream::Ok) {
switch (nextHeaderType(stream)) {
case 0x09: // POI database
readPOIDatabase(stream, codec, waypoints, polygons, fileName,
imgId);
break;
case 0xffff: // EOF
skipRecord(stream);
if (stream.status() == QDataStream::Ok)
return true;
break;
case 0x16: // route
case 0x15: // info header
default:
skipRecord(stream);
}
}
_errorString = "Invalid/corrupted GPI data";
return false;
}
bool GPIParser::readGPIHeader(QDataStream &stream, QTextCodec **codec)
{
RecordHeader rh;
char m1[6], m2[2];
quint16 codepage = 0;
quint8 s2, s3;
quint32 ds;
readRecordHeader(stream, rh);
stream.readRawData(m1, sizeof(m1));
stream.readRawData(m2, sizeof(m2));
stream >> codepage >> s2 >> s3;
ds = sizeof(m1) + sizeof(m2) + 4;
if (codepage == 65001)
*codec = QTextCodec::codecForName("UTF-8");
else if (codepage == 0)
*codec = 0;
else
*codec = QTextCodec::codecForName(QString("CP%1").arg(codepage)
.toLatin1());
if (s2 & 0x10)
ds += readFileDataRecord(stream, *codec);
if (stream.status() != QDataStream::Ok || ds != rh.size) {
_errorString = "Invalid GPI header";
return false;
} else
return true;
}
bool GPIParser::readFileHeader(QDataStream &stream, quint32 &ebs)
{
RecordHeader rh;
quint32 ds, s7;
@ -326,10 +715,7 @@ bool GPIParser::readFileHeader(QDataStream &stream)
if (rh.flags & 8)
ds += readFprsRecord(stream);
if (s8 & 0x4) {
_errorString = "Encrypted GPI files not supported";
return false;
}
ebs = (s8 & 0x4) ? s9 * 8 + 8 : 0;
if (stream.status() != QDataStream::Ok || ds != rh.size) {
_errorString = "Invalid file header";
@ -338,109 +724,26 @@ bool GPIParser::readFileHeader(QDataStream &stream)
return true;
}
bool GPIParser::readGPIHeader(QDataStream &stream, QTextCodec *codec)
{
RecordHeader rh;
char m1[6], m2[2];
quint16 codepage = 0;
quint8 s2, s3;
quint32 ds;
readRecordHeader(stream, rh);
stream.readRawData(m1, sizeof(m1));
stream.readRawData(m2, sizeof(m2));
stream >> codepage >> s2 >> s3;
ds = sizeof(m1) + sizeof(m2) + 4;
if (codepage == 65001)
codec = QTextCodec::codecForName("UTF-8");
else if (codepage == 0)
codec = 0;
else
codec = QTextCodec::codecForName(QString("CP%1").arg(codepage)
.toLatin1());
if (s2 & 0x10)
ds += readFileDataRecord(stream, codec);
if (stream.status() != QDataStream::Ok || ds != rh.size) {
_errorString = "Invalid GPI header";
return false;
} else
return true;
}
void GPIParser::readPOIDatabase(QDataStream &stream, QTextCodec *codec,
QVector<Waypoint> &waypoints)
{
RecordHeader rh;
QList<TranslatedString> obj;
quint32 ds;
readRecordHeader(stream, rh);
ds = readTranslatedObjects(stream, codec, obj);
ds += readSpatialIndex(stream, codec, waypoints);
if (rh.flags & 0x8) {
while (ds < rh.size) {
switch(nextHeaderType(stream)) {
case 5: // symbol
case 7: // category
default:
ds += skipRecord(stream);
}
}
}
if (ds != rh.size)
stream.setStatus(QDataStream::ReadCorruptData);
}
bool GPIParser::readEntry(QDataStream &stream, QTextCodec *codec,
QVector<Waypoint> &waypoints)
{
switch (nextHeaderType(stream)) {
case 0x09: // POI database
readPOIDatabase(stream, codec, waypoints);
break;
case 0xffff: // EOF
skipRecord(stream);
return false;
case 0x16: // route
case 0x15: // info header
default:
skipRecord(stream);
}
return true;
}
bool GPIParser::readData(QDataStream &stream, QTextCodec *codec,
QVector<Waypoint> &waypoints)
{
while (stream.status() == QDataStream::Ok)
if (!readEntry(stream, codec, waypoints))
return stream.atEnd();
return false;
}
bool GPIParser::parse(QFile *file, QList<TrackData> &tracks,
QList<RouteData> &routes, QList<Area> &polygons, QVector<Waypoint> &waypoints)
{
Q_UNUSED(tracks);
Q_UNUSED(routes);
Q_UNUSED(polygons);
QDataStream stream(file);
QTextCodec *codec = 0;
quint32 ebs;
stream.setByteOrder(QDataStream::LittleEndian);
if (!readFileHeader(stream) || !readGPIHeader(stream, codec))
if (!readFileHeader(stream, ebs) || !readGPIHeader(stream, &codec))
return false;
if (!readData(stream, codec, waypoints)) {
_errorString = "Invalid/corrupted GPI data";
return false;
if (ebs) {
CryptDevice dev(stream.device(), 0xf870b5, ebs);
QDataStream cryptStream(&dev);
cryptStream.setByteOrder(QDataStream::LittleEndian);
return readData(cryptStream, codec, waypoints, polygons,
file->fileName());
} else
return true;
return readData(stream, codec, waypoints, polygons, file->fileName());
}

View File

@ -15,14 +15,11 @@ public:
int errorLine() const {return 0;}
private:
bool readFileHeader(QDataStream &stream);
bool readGPIHeader(QDataStream &stream, QTextCodec *codec);
bool readFileHeader(QDataStream &stream, quint32 &ebs);
bool readGPIHeader(QDataStream &stream, QTextCodec **codec);
bool readData(QDataStream &stream, QTextCodec *codec,
QVector<Waypoint> &waypoints);
bool readEntry(QDataStream &stream, QTextCodec *codec,
QVector<Waypoint> &waypoints);
void readPOIDatabase(QDataStream &stream, QTextCodec *codec,
QVector<Waypoint> &waypoints);
QVector<Waypoint> &waypoints, QList<Area> &polygons,
const QString &fileName);
QString _errorString;
};

View File

@ -69,8 +69,10 @@ Coordinates GPXParser::coordinates()
void GPXParser::rpExtension(SegmentData *autoRoute)
{
while (_reader.readNextStartElement()) {
if (_reader.name() == QLatin1String("rpt"))
autoRoute->append(Trackpoint(coordinates()));
if (_reader.name() == QLatin1String("rpt")) {
if (autoRoute)
autoRoute->append(Trackpoint(coordinates()));
}
_reader.skipCurrentElement();
}
}
@ -91,11 +93,45 @@ void GPXParser::tpExtension(Trackpoint &trackpoint)
}
}
void GPXParser::rteptExtensions(SegmentData *autoRoute)
void GPXParser::address(Waypoint &waypoint)
{
Address addr;
while (_reader.readNextStartElement()) {
if (_reader.name() == QLatin1String("StreetAddress"))
addr.setStreet(_reader.readElementText());
else if (_reader.name() == QLatin1String("City"))
addr.setCity(_reader.readElementText());
else if (_reader.name() == QLatin1String("PostalCode"))
addr.setPostalCode(_reader.readElementText());
else if (_reader.name() == QLatin1String("State"))
addr.setState(_reader.readElementText());
else if (_reader.name() == QLatin1String("Country"))
addr.setCountry(_reader.readElementText());
else
_reader.skipCurrentElement();
}
waypoint.setAddress(addr);
}
void GPXParser::wpExtension(Waypoint &waypoint)
{
while (_reader.readNextStartElement()) {
if (_reader.name() == QLatin1String("Address"))
address(waypoint);
else
_reader.skipCurrentElement();
}
}
void GPXParser::waypointExtensions(Waypoint &waypoint, SegmentData *autoRoute)
{
while (_reader.readNextStartElement()) {
if (_reader.name() == QLatin1String("RoutePointExtension"))
rpExtension(autoRoute);
else if (_reader.name() == QLatin1String("WaypointExtension"))
wpExtension(waypoint);
else
_reader.skipCurrentElement();
}
@ -170,8 +206,8 @@ void GPXParser::waypointData(Waypoint &waypoint, SegmentData *autoRoute)
link10.setURL(_reader.readElementText());
else if (_reader.name() == QLatin1String("urlname"))
link10.setText(_reader.readElementText());
else if (autoRoute && _reader.name() == QLatin1String("extensions"))
rteptExtensions(autoRoute);
else if (_reader.name() == QLatin1String("extensions"))
waypointExtensions(waypoint, autoRoute);
else
_reader.skipCurrentElement();
}

View File

@ -21,11 +21,13 @@ private:
void rpExtension(SegmentData *autoRoute);
void tpExtension(Trackpoint &trackpoint);
void trkptExtensions(Trackpoint &trackpoint);
void rteptExtensions(SegmentData *autoRoute);
void wpExtension(Waypoint &waypoint);
void waypointExtensions(Waypoint &waypoint, SegmentData *autoRoute);
void area(Area &area);
void gpxExtensions(QList<Area> &areas);
void trackpointData(Trackpoint &trackpoint);
void waypointData(Waypoint &waypoint, SegmentData *autoRoute = 0);
void address(Waypoint &waypoint);
qreal number();
QDateTime time();
Coordinates coordinates();

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

View File

@ -7,6 +7,7 @@ int Track::_heartRateWindow = 3;
int Track::_cadenceWindow = 3;
int Track::_powerWindow = 3;
bool Track::_automaticPause = true;
qreal Track::_pauseSpeed = 0.5;
int Track::_pauseInterval = 10;
@ -14,6 +15,16 @@ bool Track::_outlierEliminate = true;
bool Track::_useReportedSpeed = false;
static qreal avg(const QVector<qreal> &v)
{
qreal sum = 0;
for (int i = 0; i < v.size(); i++)
sum += v.at(i);
return sum/v.size();
}
static qreal median(QVector<qreal> &v)
{
qSort(v.begin(), v.end());
@ -24,8 +35,7 @@ static qreal MAD(QVector<qreal> &v, qreal m)
{
for (int i = 0; i < v.size(); i++)
v[i] = qAbs(v.at(i) - m);
qSort(v.begin(), v.end());
return v.at(v.size() / 2);
return median(v);
}
static QSet<int> eliminate(const QVector<qreal> &v)
@ -74,17 +84,19 @@ Track::Track(const TrackData &data) : _data(data), _pause(0)
for (int i = 0; i < _data.size(); i++) {
const SegmentData &sd = _data.at(i);
_segments.append(Segment());
if (sd.isEmpty())
continue;
// precompute distances, times, speeds and acceleration
QVector<qreal> acceleration;
_segments.append(Segment());
Segment &seg = _segments.last();
seg.distance.append(i ? _segments.at(i-1).distance.last() : 0);
seg.time.append(i ? _segments.at(i-1).time.last() :
seg.distance.append(i && !_segments.at(i-1).distance.isEmpty()
? _segments.at(i-1).distance.last() : 0);
seg.time.append(i && !_segments.at(i-1).time.isEmpty()
? _segments.at(i-1).time.last() :
sd.first().hasTimestamp() ? 0 : NAN);
seg.speed.append(sd.first().hasTimestamp() ? 0 : NAN);
acceleration.append(sd.first().hasTimestamp() ? 0 : NAN);
@ -130,17 +142,39 @@ Track::Track(const TrackData &data) : _data(data), _pause(0)
}
}
if (!hasTime)
continue;
// get stop-points + pause duration
int pauseInterval;
qreal pauseSpeed;
if (_automaticPause) {
pauseSpeed = (avg(seg.speed) > 2.8) ? 0.40 : 0.15;
pauseInterval = 10;
} else {
pauseSpeed = _pauseSpeed;
pauseInterval = _pauseInterval;
}
int ss = 0, la = 0;
for (int j = 1; j < seg.time.size(); j++) {
if (seg.time.at(j) > seg.time.at(j-1) + _pauseInterval
&& seg.speed.at(j) < _pauseSpeed) {
_pause += seg.time.at(j) - seg.time.at(j-1);
seg.stop.insert(j-1);
seg.stop.insert(j);
if (seg.speed.at(j) > pauseSpeed)
ss = -1;
else if (ss < 0)
ss = j-1;
if (ss >= 0 && seg.time.at(j) > seg.time.at(ss) + pauseInterval) {
int l = qMax(ss, la);
_pause += seg.time.at(j) - seg.time.at(l);
for (int k = l; k <= j; k++)
seg.stop.insert(k);
la = j;
}
}
if (!_outlierEliminate || !hasTime)
if (!_outlierEliminate)
continue;

View File

@ -41,6 +41,7 @@ public:
static void setHeartRateFilter(int window) {_heartRateWindow = window;}
static void setCadenceFilter(int window) {_cadenceWindow = window;}
static void setPowerFilter(int window) {_powerWindow = window;}
static void setAutomaticPause(bool set) {_automaticPause = set;}
static void setPauseSpeed(qreal speed) {_pauseSpeed = speed;}
static void setPauseInterval(int interval) {_pauseInterval = interval;}
static void setOutlierElimination(bool eliminate)
@ -68,6 +69,7 @@ private:
static int _heartRateWindow;
static int _cadenceWindow;
static int _powerWindow;
static bool _automaticPause;
static qreal _pauseSpeed;
static int _pauseInterval;
static bool _useReportedSpeed;

View File

@ -4,10 +4,12 @@
#include <QString>
#include <QDateTime>
#include <QHash>
#include <QVector>
#include <QDebug>
#include "common/coordinates.h"
#include "imageinfo.h"
#include "link.h"
#include "address.h"
class Waypoint
{
@ -19,7 +21,8 @@ public:
const Coordinates &coordinates() const {return _coordinates;}
const QString &name() const {return _name;}
const QString &description() const {return _description;}
const ImageInfo &image() const {return _image;}
const Address &address() const {return _address;}
const QVector<ImageInfo> &images() const {return _images;}
const QVector<Link> &links() const {return _links;}
const QDateTime &timestamp() const {return _timestamp;}
qreal elevation() const {return _elevation;}
@ -29,9 +32,10 @@ public:
void setName(const QString &name) {_name = name;}
void setDescription(const QString &description)
{_description = description;}
void setAddress(const Address &address) {_address = address;}
void setTimestamp(const QDateTime &timestamp) {_timestamp = timestamp;}
void setElevation(qreal elevation) {_elevation = elevation;}
void setImage(const ImageInfo &image) {_image = image;}
void addImage(const ImageInfo &image) {_images.append(image);}
void addLink(const Link &link) {_links.append(link);}
bool hasElevation() const {return !std::isnan(_elevation);}
@ -44,7 +48,8 @@ private:
Coordinates _coordinates;
QString _name;
QString _description;
ImageInfo _image;
Address _address;
QVector<ImageInfo> _images;
QVector<Link> _links;
QDateTime _timestamp;
qreal _elevation;

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;
@ -50,10 +56,10 @@ IMG::IMG(const QString &fileName)
CHECK(_file.seek(0x49) && read(d1, sizeof(d1)) && _file.seek(0x61)
&& readValue(e1) && readValue(e2) && _file.seek(0x65)
&& read(d2, sizeof(d2)));
QByteArray nba(QByteArray(d1, sizeof(d1)) + QByteArray(d2, sizeof(d2)));
_name = QString(nba).trimmed();
_name = QString::fromLatin1(nba.constData(), nba.size()-1).trimmed();
_blockSize = 1 << (e1 + e2);
_blockCache.setMaxCost(CACHE_SIZE / _blockSize);
// Read the FAT table
quint8 flag;
@ -74,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
@ -130,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)
@ -227,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

@ -50,17 +50,16 @@ static QString capitalize(const QString &str)
}
bool LBLFile::init()
bool LBLFile::init(Handle &hdl)
{
Handle hdl;
quint16 codepage;
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;
@ -90,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};
@ -139,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;
@ -165,7 +164,7 @@ Label LBLFile::label8b(Handle &hdl, quint32 offset) const
Label LBLFile::label(Handle &hdl, quint32 offset, bool poi)
{
if (!_multiplier && !init())
if (!_multiplier && !init(hdl))
return QString();
quint32 labelOffset;

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) {}
@ -19,7 +22,7 @@ public:
Label label(Handle &hdl, quint32 offset, bool poi = false);
private:
bool init();
bool init(Handle &hdl);
Label label6b(Handle &hdl, quint32 offset) const;
Label label8b(Handle &hdl, quint32 offset) const;

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

@ -1,12 +1,13 @@
#include "netfile.h"
bool NETFile::init()
bool NETFile::init(Handle &hdl)
{
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;
@ -16,7 +17,7 @@ bool NETFile::init()
bool NETFile::lblOffset(Handle &hdl, quint32 netOffset, quint32 &lblOffset)
{
if (!_multiplier && !init())
if (!_multiplier && !init(hdl))
return false;
if (!(seek(hdl, _offset + netOffset * _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();
bool init(Handle &hdl);
quint32 _offset;
quint32 _size;
quint32 _offset, _size;
quint8 _multiplier;
};

View File

@ -1,127 +1,84 @@
#include <cstring>
#include "common/rectc.h"
#include "units.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;
}
bool RGNFile::init()
void RGNFile::clearFlags()
{
memset(_polygonsFlags, 0, sizeof(_polygonsFlags));
memset(_linesFlags, 0, sizeof(_linesFlags));
memset(_pointsFlags, 0, sizeof(_pointsFlags));
}
bool RGNFile::init(Handle &hdl)
{
Handle hdl;
quint16 hdrLen;
if (!(seek(hdl, _gmpOffset) && readUInt16(hdl, hdrLen)
@ -129,25 +86,29 @@ bool RGNFile::init()
&& 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;
@ -155,14 +116,16 @@ bool RGNFile::init()
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;
@ -170,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(toWGS84(pos.x()), toWGS84(pos.y()));
RectC br(c, c);
Coordinates c(toWGS24(pos.x()), toWGS24(pos.y()));
poly.boundingRect = RectC(c, c);
poly.points.append(QPointF(c.lon(), c.lat()));
qint32 lonDelta, latDelta;
@ -204,16 +167,13 @@ bool RGNFile::polyObjects(const RectC &rect, Handle &hdl, const SubDiv *subdiv,
pos.rx() += lonDelta<<(24-subdiv->bits());
pos.ry() += latDelta<<(24-subdiv->bits());
Coordinates c(toWGS84(pos.x()), toWGS84(pos.y()));
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;
@ -230,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(toWGS84(pos.x()), toWGS84(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(toWGS84(pos.x()), toWGS84(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);
@ -294,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());
point.coordinates = Coordinates(toWGS84(subdiv->lon() + lonOffset),
toWGS84(subdiv->lat() + latOffset));
if (!rect.contains(point.coordinates))
continue;
qint32 lonOffset = lon<<(24-subdiv->bits());
qint32 latOffset = lat<<(24-subdiv->bits());
point.coordinates = Coordinates(toWGS24(subdiv->lon() + lonOffset),
toWGS24(subdiv->lat() + latOffset));
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);
}
@ -340,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());
point.coordinates = Coordinates(toWGS84(subdiv->lon() + lonOffset),
toWGS84(subdiv->lat() + latOffset));
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())
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())
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) {}
_linesSize(0), _pointsOffset(0), _pointsSize(0), _init(false)
{clearFlags();}
void objects(const RectC &rect, const SubDiv *subdiv, LBLFile *lbl,
NETFile *net, QList<IMG::Poly> *polygons, QList<IMG::Poly> *lines,
QList<IMG::Point> *points);
void extObjects(const RectC &rect, const SubDiv *subdiv, LBLFile *lbl,
QList<IMG::Poly> *polygons, QList<IMG::Poly> *lines,
QList<IMG::Point> *points);
bool initialized() const {return _init;}
bool init(Handle &hdl);
bool polyObjects(Handle &hdl, const SubDiv *subdiv, SegmentType segmentType,
LBLFile *lbl, Handle &lblHdl, NETFile *net, Handle &netHdl,
QList<IMG::Poly> *polys) 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;
bool subdivInit(Handle &hdl, SubDiv *subdiv) const;
private:
class Segment {
public:
enum Type {
Point = 0x10,
IndexedPoint = 0x20,
Line = 0x40,
Polygon = 0x80
};
Segment() : _start(0), _end(0), _type(Point) {}
Segment(quint32 start, Type type)
: _start(start), _end(0), _type(type) {}
Segment(quint32 start, quint32 end, Type type)
: _start(start), _end(end), _type(type) {}
void setEnd(quint32 end) {_end = end;}
quint32 start() const {return _start;}
quint32 end() const {return _end;}
Type type() const {return _type;}
private:
quint32 _start;
quint32 _end;
Type _type;
};
class BitStream {
public:
BitStream(const SubFile &file, Handle &hdl, quint32 length)
: _file(file), _hdl(hdl), _length(length), _remaining(0) {}
bool read(int bits, quint32 &val);
bool flush() {return _file.seek(_hdl, _hdl.pos + _length);}
quint32 bitsAvailable() const {return _length * 8 + _remaining;}
private:
const SubFile &_file;
Handle &_hdl;
quint32 _length, _remaining;
quint8 _data;
};
class DeltaStream : public BitStream {
public:
DeltaStream(const SubFile &file, Handle &hdl, quint32 length,
quint8 info, bool extraBit, bool extended);
bool readNext(qint32 &lonDelta, qint32 &latDelta)
{
return hasNext()
? (readDelta(_lonBits, _lonSign, _extraBit, lonDelta)
&& readDelta(_latBits, _latSign, false, latDelta))
: false;
}
bool atEnd() const {return (_readBits != 0xFFFFFFFF && !hasNext());}
private:
bool hasNext() const {return bitsAvailable() >= _readBits;}
bool sign(int &val);
bool readDelta(int bits, int sign, int extraBit, qint32 &delta);
int _lonSign, _latSign, _extraBit;
quint32 _lonBits, _latBits, _readBits;
};
bool init();
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,
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;
friend QDebug operator<<(QDebug dbg, const RGNFile::Segment &segment);
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;
@ -966,31 +961,10 @@ const Style::Point &Style::point(quint32 type) const
{
static Point null;
QMap<quint16, Point>::const_iterator it = _points.find(type);
QMap<quint32, Point>::const_iterator it = _points.find(type);
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:
@ -142,13 +158,14 @@ private:
QMap<quint32, Line> _lines;
QMap<quint32, Polygon> _polygons;
QMap<quint16, Point> _points;
QMap<quint32, Point> _points;
QList<quint32> _drawOrder;
};
#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

@ -3,59 +3,151 @@
#include <QtGlobal>
#include "common/coordinates.h"
#include "units.h"
#include "common/garmin.h"
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(toWGS84(subdiv.lon()), toWGS84(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

@ -100,6 +100,8 @@ static QPainterPath textPath(const QPolygonF &path, qreal textWidth,
qreal charWidth, const QRectF &tileRect)
{
QList<QLineF> lines(lineString(path, tileRect));
if (lines.isEmpty())
return QPainterPath();
qreal length = 0;
qreal angle = lines.first().angle();
int last = 0;

View File

@ -1,9 +1,9 @@
#include "common/garmin.h"
#include "subdiv.h"
#include "units.h"
#include "trefile.h"
static void unlock(quint8 *dst, const quint8 *src, quint32 size, quint32 key)
static void demangle(quint8 *data, quint32 size, quint32 key)
{
static const unsigned char shuf[] = {
0xb, 0xc, 0xa, 0x0,
@ -15,8 +15,8 @@ static void unlock(quint8 *dst, const quint8 *src, quint32 size, quint32 key)
int sum = shuf[((key >> 24) + (key >> 16) + (key >> 8) + key) & 0xf];
for (quint32 i = 0, ringctr = 16; i < size; i++) {
quint32 upper = src[i] >> 4;
quint32 lower = src[i];
quint32 upper = data[i] >> 4;
quint32 lower = data[i];
upper -= sum;
upper -= key >> ringctr;
@ -28,7 +28,7 @@ static void unlock(quint8 *dst, const quint8 *src, quint32 size, quint32 key)
lower -= shuf[(key >> ringctr) & 0xf];
ringctr = ringctr ? ringctr - 4 : 16;
dst[i] = ((upper << 4) & 0xf0) | (lower & 0xf);
data[i] = ((upper << 4) & 0xf0) | (lower & 0xf);
}
}
@ -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
@ -52,8 +52,8 @@ bool TREFile::init()
if (!(seek(hdl, _gmpOffset + 0x15) && readInt24(hdl, north)
&& readInt24(hdl, east) && readInt24(hdl, south) && readInt24(hdl, west)))
return false;
_bounds = RectC(Coordinates(toWGS84(west), toWGS84(north)),
Coordinates(toWGS84(east), toWGS84(south)));
_bounds = RectC(Coordinates(toWGS24(west), toWGS24(north)),
Coordinates(toWGS24(east), toWGS24(south)));
// Levels & subdivs info
quint32 levelsOffset, levelsSize, subdivSize;
@ -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,15 +78,13 @@ 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;
quint8 unlocked[64];
if (!seek(hdl, _gmpOffset + 0xAA) || !readUInt32(hdl, key))
return false;
unlock(unlocked, levels, levelsSize, key);
memcpy(levels, unlocked, levelsSize);
demangle(levels, levelsSize, key);
}
quint32 levelsCount = levelsSize / 4;
@ -107,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();
@ -128,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;
@ -148,13 +152,14 @@ 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);
double min[2], max[2];
RectC bounds(Coordinates(toWGS84(lon - width),
toWGS84(lat + height + 1)), Coordinates(toWGS84(lon + width + 1),
toWGS84(lat - height)));
RectC bounds(Coordinates(toWGS24(lon - width),
toWGS24(lat + height + 1)), Coordinates(toWGS24(lon + width + 1),
toWGS24(lat - height)));
min[0] = bounds.left();
min[1] = bounds.bottom();
@ -196,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;
}
@ -233,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;
@ -256,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,11 +0,0 @@
#ifndef UNITS_H
#define UNITS_H
inline double toWGS84(qint32 coord)
{
return (coord < 0x800000)
? (double)coord * 360.0 / (double)(1<<24)
: (double)(coord - 0x1000000) * 360.0 / (double)(1<<24);
}
#endif // UNITS_H

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));
}

Some files were not shown because too many files have changed in this diff Show More