1
0
mirror of https://github.com/tumic0/GPXSee.git synced 2025-07-09 00:34:27 +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} version: 7.21.{build}
configuration: Release
platform: Any CPU configuration:
- Release
image:
- Visual Studio 2017
environment: environment:
NSISDIR: C:\Program Files (x86)\NSIS NSISDIR: C:\Program Files (x86)\NSIS
matrix: matrix:
- QTDIR: C:\Qt\5.11\msvc2015 - QTDIR: C:\Qt\5.13\msvc2017
PLATFORM: x86
NSI: gpxsee.nsi NSI: gpxsee.nsi
OPENSSLDIR: C:\OpenSSL-Win32\bin VCVARS: vcvars32.bat
- QTDIR: C:\Qt\5.11\msvc2015_64 OPENSSLDIR: C:\OpenSSL-v111-Win32\bin
PLATFORM: x86_amd64 LIBCRYPTO: libssl-1_1.dll
LIBSSL: libcrypto-1_1.dll
- QTDIR: C:\Qt\5.13\msvc2017_64
NSI: gpxsee64.nsi NSI: gpxsee64.nsi
OPENSSLDIR: C:\OpenSSL-Win64\bin VCVARS: vcvars64.bat
OPENSSLDIR: C:\OpenSSL-v111-Win64\bin
LIBCRYPTO: libssl-1_1-x64.dll
LIBSSL: libcrypto-1_1-x64.dll
install: install:
- cmd: >- - cmd: >-
set PATH=%QTDIR%\bin;%NSISDIR%;%PATH% set PATH=%QTDIR%\bin;%NSISDIR%;%PATH%
call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" %PLATFORM% call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\"%VCVARS%
build_script: build_script:
- cmd: >- - cmd: >-
lrelease gpxsee.pro lrelease gpxsee.pro
@ -44,9 +55,9 @@ build_script:
copy licence.txt installer copy licence.txt installer
copy %OPENSSLDIR%\libeay32.dll installer copy %OPENSSLDIR%\%LIBCRYPTO% installer
copy %OPENSSLDIR%\ssleay32.dll installer copy %OPENSSLDIR%\%LIBSSL% installer
makensis.exe installer\%NSI% makensis.exe installer\%NSI%

View File

@ -6,6 +6,7 @@ os:
before_install: before_install:
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get -qq update; fi - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get -qq update; fi
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update; fi
install: install:
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install qt; fi - 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. GPXSee is a Qt-based GPS log file viewer and analyzer that supports all common GPS log file formats.
## Features ## Features
* Opens GPX, TCX, FIT, KML, NMEA, IGC, CUP, SLF, LOC, GeoJSON, OziExplorer (PLT, RTE, WPT), Garmin CSV and geotagged JPEG files. * Opens GPX, TCX, FIT, KML, NMEA, IGC, CUP, SIGMA SLF, Suunto SML, LOC, GeoJSON, OziExplorer (PLT, RTE, WPT), Garmin GPI&CSV and geotagged JPEG files.
* User-definable online maps (OpenStreetMap/Google tiles, WMTS, WMS, TMS, QuadTiles). * User-definable online maps (OpenStreetMap/Google tiles, WMTS, WMS, TMS, QuadTiles).
* Offline maps (MBTiles, OziExplorer maps, TrekBuddy maps/atlases, Garmin IMG & JNX maps, TwoNav RMaps, GeoTIFF images). * Offline maps (MBTiles, OziExplorer maps, TrekBuddy maps/atlases, Garmin IMG & JNX maps, TwoNav RMaps, GeoTIFF images).
* Elevation, speed, heart rate, cadence, power, temperature and gear ratio/shifts graphs. * Elevation, speed, heart rate, cadence, power, temperature and gear ratio/shifts graphs.

View File

@ -3,7 +3,7 @@ unix:!macx {
} else { } else {
TARGET = GPXSee TARGET = GPXSee
} }
VERSION = 7.16 VERSION = 7.21
QT += core \ QT += core \
gui \ gui \
@ -21,6 +21,7 @@ INCLUDEPATH += ./src
HEADERS += src/common/config.h \ HEADERS += src/common/config.h \
src/GUI/graphicsscene.h \ src/GUI/graphicsscene.h \
src/GUI/popup.h \ src/GUI/popup.h \
src/common/garmin.h \
src/common/staticassert.h \ src/common/staticassert.h \
src/common/coordinates.h \ src/common/coordinates.h \
src/common/range.h \ src/common/range.h \
@ -88,6 +89,12 @@ HEADERS += src/common/config.h \
src/GUI/areaitem.h \ src/GUI/areaitem.h \
src/data/link.h \ src/data/link.h \
src/map/IMG/bitmapline.h \ src/map/IMG/bitmapline.h \
src/map/IMG/bitstream.h \
src/map/IMG/deltastream.h \
src/map/IMG/gmap.h \
src/map/IMG/huffmanstream.h \
src/map/IMG/huffmantable.h \
src/map/IMG/mapdata.h \
src/map/IMG/textpathitem.h \ src/map/IMG/textpathitem.h \
src/map/IMG/textpointitem.h \ src/map/IMG/textpointitem.h \
src/map/projection.h \ src/map/projection.h \
@ -178,7 +185,6 @@ HEADERS += src/common/config.h \
src/map/IMG/lblfile.h \ src/map/IMG/lblfile.h \
src/map/IMG/vectortile.h \ src/map/IMG/vectortile.h \
src/map/IMG/subdiv.h \ src/map/IMG/subdiv.h \
src/map/IMG/units.h \
src/map/IMG/style.h \ src/map/IMG/style.h \
src/map/IMG/netfile.h \ src/map/IMG/netfile.h \
src/GUI/limitedcombobox.h \ src/GUI/limitedcombobox.h \
@ -187,7 +193,9 @@ HEADERS += src/common/config.h \
src/map/IMG/label.h \ src/map/IMG/label.h \
src/data/csv.h \ src/data/csv.h \
src/data/cupparser.h \ src/data/cupparser.h \
src/data/gpiparser.h src/data/gpiparser.h \
src/data/address.h \
src/data/smlparser.h
SOURCES += src/main.cpp \ SOURCES += src/main.cpp \
src/GUI/popup.cpp \ src/GUI/popup.cpp \
src/common/coordinates.cpp \ src/common/coordinates.cpp \
@ -241,6 +249,12 @@ SOURCES += src/main.cpp \
src/GUI/mapview.cpp \ src/GUI/mapview.cpp \
src/GUI/areaitem.cpp \ src/GUI/areaitem.cpp \
src/map/IMG/bitmapline.cpp \ src/map/IMG/bitmapline.cpp \
src/map/IMG/bitstream.cpp \
src/map/IMG/deltastream.cpp \
src/map/IMG/gmap.cpp \
src/map/IMG/huffmanstream.cpp \
src/map/IMG/huffmantable.cpp \
src/map/IMG/mapdata.cpp \
src/map/IMG/textpathitem.cpp \ src/map/IMG/textpathitem.cpp \
src/map/IMG/textpointitem.cpp \ src/map/IMG/textpointitem.cpp \
src/map/maplist.cpp \ src/map/maplist.cpp \
@ -323,7 +337,8 @@ SOURCES += src/main.cpp \
src/data/csv.cpp \ src/data/csv.cpp \
src/data/cupparser.cpp \ src/data/cupparser.cpp \
src/GUI/graphicsscene.cpp \ src/GUI/graphicsscene.cpp \
src/data/gpiparser.cpp src/data/gpiparser.cpp \
src/data/smlparser.cpp
greaterThan(QT_MAJOR_VERSION, 4) { greaterThan(QT_MAJOR_VERSION, 4) {
HEADERS += src/data/geojsonparser.h HEADERS += src/data/geojsonparser.h
@ -347,7 +362,9 @@ TRANSLATIONS = lang/gpxsee_en.ts \
lang/gpxsee_da.ts \ lang/gpxsee_da.ts \
lang/gpxsee_tr.ts \ lang/gpxsee_tr.ts \
lang/gpxsee_es.ts \ lang/gpxsee_es.ts \
lang/gpxsee_pt_BR.ts lang/gpxsee_pt_BR.ts \
lang/gpxsee_uk.ts \
lang/gpxsee_hu.ts
macx { macx {
ICON = icons/gpxsee.icns ICON = icons/gpxsee.icns
@ -365,7 +382,8 @@ macx {
lang/gpxsee_da.qm \ lang/gpxsee_da.qm \
lang/gpxsee_tr.qm \ lang/gpxsee_tr.qm \
lang/gpxsee_es.qm \ lang/gpxsee_es.qm \
lang/gpxsee_pt_BR.qm lang/gpxsee_pt_BR.qm \
lang/gpxsee_uk.qm
csv.path = Contents/Resources csv.path = Contents/Resources
csv.files = pkg/csv csv.files = pkg/csv
maps.path = Contents/Resources maps.path = Contents/Resources
@ -384,7 +402,8 @@ macx {
icons/formats/slf.icns \ icons/formats/slf.icns \
icons/formats/json.icns \ icons/formats/json.icns \
icons/formats/cup.icns \ icons/formats/cup.icns \
icons/formats/gpi.icns icons/formats/gpi.icns \
icons/formats/sml.icns
QMAKE_BUNDLE_DATA += locale maps icons csv QMAKE_BUNDLE_DATA += locale maps icons csv
} }
@ -403,7 +422,8 @@ win32 {
icons/formats/slf.ico \ icons/formats/slf.ico \
icons/formats/json.ico \ icons/formats/json.ico \
icons/formats/cup.ico \ icons/formats/cup.ico \
icons/formats/gpi.ico icons/formats/gpi.ico \
icons/formats/sml.ico
DEFINES += _USE_MATH_DEFINES \ DEFINES += _USE_MATH_DEFINES \
NOGDI NOGDI
} }

BIN
icons/formats/sml.icns Normal file

Binary file not shown.

BIN
icons/formats/sml.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 304 KiB

View File

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

View File

@ -47,77 +47,87 @@
<context> <context>
<name>Data</name> <name>Data</name>
<message> <message>
<location filename="../src/data/data.cpp" line="173"/> <location filename="../src/data/data.cpp" line="179"/>
<source>Supported files</source> <source>Supported files</source>
<translation>Podporované soubory</translation> <translation>Podporované soubory</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="174"/> <location filename="../src/data/data.cpp" line="180"/>
<source>CSV files</source> <source>CSV files</source>
<translation>Soubory CSV</translation> <translation>Soubory CSV</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="175"/> <location filename="../src/data/data.cpp" line="181"/>
<source>CUP files</source> <source>CUP files</source>
<translation>Soubory CUP</translation> <translation>Soubory CUP</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="176"/> <location filename="../src/data/data.cpp" line="182"/>
<source>FIT files</source> <source>FIT files</source>
<translation>Soubory FIT</translation> <translation>Soubory FIT</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="178"/> <location filename="../src/data/data.cpp" line="184"/>
<source>GeoJSON files</source> <source>GeoJSON files</source>
<translation>Soubory GeoJSON</translation> <translation>Soubory GeoJSON</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="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> <source>GPX files</source>
<translation>Soubory GPX</translation> <translation>Soubory GPX</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="181"/> <location filename="../src/data/data.cpp" line="188"/>
<source>IGC files</source> <source>IGC files</source>
<translation>Soubory IGC</translation> <translation>Soubory IGC</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="182"/> <location filename="../src/data/data.cpp" line="189"/>
<source>JPEG images</source> <source>JPEG images</source>
<translation>Obrázky JPEG</translation> <translation>Obrázky JPEG</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="183"/> <location filename="../src/data/data.cpp" line="190"/>
<source>KML files</source> <source>KML files</source>
<translation>Soubory KML</translation> <translation>Soubory KML</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="184"/> <location filename="../src/data/data.cpp" line="191"/>
<source>LOC files</source> <source>LOC files</source>
<translation>Soubory LOC</translation> <translation>Soubory LOC</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="185"/> <location filename="../src/data/data.cpp" line="192"/>
<source>NMEA files</source> <source>NMEA files</source>
<translation>Soubory NMEA</translation> <translation>Soubory NMEA</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="186"/> <location filename="../src/data/data.cpp" line="193"/>
<source>OziExplorer files</source> <source>OziExplorer files</source>
<translation>Soubory OziExploreru</translation> <translation>Soubory OziExploreru</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="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> <source>TCX files</source>
<translation>Soubory TCX</translation> <translation>Soubory TCX</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="187"/> <location filename="../src/data/data.cpp" line="194"/>
<source>SLF files</source> <source>SLF files</source>
<translation>Soubory SLF</translation> <translation>Soubory SLF</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="189"/> <location filename="../src/data/data.cpp" line="197"/>
<source>All files</source> <source>All files</source>
<translation>Všechny soubory</translation> <translation>Všechny soubory</translation>
</message> </message>
@ -508,8 +518,8 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="413"/> <location filename="../src/GUI/gui.cpp" line="413"/>
<location filename="../src/GUI/gui.cpp" line="1058"/> <location filename="../src/GUI/gui.cpp" line="1059"/>
<location filename="../src/GUI/gui.cpp" line="1124"/> <location filename="../src/GUI/gui.cpp" line="1125"/>
<source>Moving time</source> <source>Moving time</source>
<translation>Čistý čas</translation> <translation>Čistý čas</translation>
</message> </message>
@ -664,32 +674,32 @@
<translation>Adresář se styly:</translation> <translation>Adresář se styly:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1036"/> <location filename="../src/GUI/gui.cpp" line="1037"/>
<location filename="../src/GUI/gui.cpp" line="1104"/> <location filename="../src/GUI/gui.cpp" line="1105"/>
<source>Areas</source> <source>Areas</source>
<translation>Plochy</translation> <translation>Plochy</translation>
</message> </message>
<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="1080"/>
<location filename="../src/GUI/gui.cpp" line="1081"/>
<source>Statistics</source> <source>Statistics</source>
<translation>Statistika</translation> <translation>Statistika</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1312"/> <location filename="../src/GUI/gui.cpp" line="1313"/>
<source>Open map file</source> <source>Open map file</source>
<translation>Otevřít mapový soubor</translation> <translation>Otevřít mapový soubor</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1346"/> <location filename="../src/GUI/gui.cpp" line="1347"/>
<source>No files loaded</source> <source>No files loaded</source>
<translation>Nejsou načteny žádné soubory</translation> <translation>Nejsou načteny žádné soubory</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1042"/> <location filename="../src/GUI/gui.cpp" line="1043"/>
<location filename="../src/GUI/gui.cpp" line="1046"/> <location filename="../src/GUI/gui.cpp" line="1047"/>
<location filename="../src/GUI/gui.cpp" line="1110"/> <location filename="../src/GUI/gui.cpp" line="1111"/>
<location filename="../src/GUI/gui.cpp" line="1113"/> <location filename="../src/GUI/gui.cpp" line="1114"/>
<source>Date</source> <source>Date</source>
<translation>Datum</translation> <translation>Datum</translation>
</message> </message>
@ -744,18 +754,18 @@
<translation>Adresář mezipaměti dlaždic:</translation> <translation>Adresář mezipaměti dlaždic:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1030"/> <location filename="../src/GUI/gui.cpp" line="1031"/>
<location filename="../src/GUI/gui.cpp" line="1100"/> <location filename="../src/GUI/gui.cpp" line="1101"/>
<source>Routes</source> <source>Routes</source>
<translation>Trasy</translation> <translation>Trasy</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1335"/> <location filename="../src/GUI/gui.cpp" line="1336"/>
<source>Error loading map:</source> <source>Error loading map:</source>
<translation>Mapu nelze načíst:</translation> <translation>Mapu nelze načíst:</translation>
</message> </message>
<message numerus="yes"> <message numerus="yes">
<location filename="../src/GUI/gui.cpp" line="1350"/> <location filename="../src/GUI/gui.cpp" line="1351"/>
<source>%n files</source> <source>%n files</source>
<translation> <translation>
<numerusform>%n soubor</numerusform> <numerusform>%n soubor</numerusform>
@ -779,8 +789,8 @@
<translation>Exportovat do PDF...</translation> <translation>Exportovat do PDF...</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1033"/> <location filename="../src/GUI/gui.cpp" line="1034"/>
<location filename="../src/GUI/gui.cpp" line="1102"/> <location filename="../src/GUI/gui.cpp" line="1103"/>
<source>Waypoints</source> <source>Waypoints</source>
<translation>Navigační body</translation> <translation>Navigační body</translation>
</message> </message>
@ -821,13 +831,13 @@
<translation>Soubor POI nelze načíst:</translation> <translation>Soubor POI nelze načíst:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1094"/> <location filename="../src/GUI/gui.cpp" line="1095"/>
<source>Name</source> <source>Name</source>
<translation>Název</translation> <translation>Název</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1027"/> <location filename="../src/GUI/gui.cpp" line="1028"/>
<location filename="../src/GUI/gui.cpp" line="1098"/> <location filename="../src/GUI/gui.cpp" line="1099"/>
<source>Tracks</source> <source>Tracks</source>
<translation>Cesty</translation> <translation>Cesty</translation>
</message> </message>
@ -844,16 +854,16 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="369"/> <location filename="../src/GUI/gui.cpp" line="369"/>
<location filename="../src/GUI/gui.cpp" line="1053"/> <location filename="../src/GUI/gui.cpp" line="1054"/>
<location filename="../src/GUI/gui.cpp" line="1120"/> <location filename="../src/GUI/gui.cpp" line="1121"/>
<source>Distance</source> <source>Distance</source>
<translation>Vzdálenost</translation> <translation>Vzdálenost</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="376"/> <location filename="../src/GUI/gui.cpp" line="376"/>
<location filename="../src/GUI/gui.cpp" line="552"/> <location filename="../src/GUI/gui.cpp" line="552"/>
<location filename="../src/GUI/gui.cpp" line="1056"/> <location filename="../src/GUI/gui.cpp" line="1057"/>
<location filename="../src/GUI/gui.cpp" line="1122"/> <location filename="../src/GUI/gui.cpp" line="1123"/>
<source>Time</source> <source>Time</source>
<translation>Čas</translation> <translation>Čas</translation>
</message> </message>
@ -950,12 +960,12 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/graphview.cpp" line="66"/> <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> <source>Distance</source>
<translation>Vzdálenost</translation> <translation>Vzdálenost</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/graphview.cpp" line="175"/> <location filename="../src/GUI/graphview.cpp" line="179"/>
<source>Time</source> <source>Time</source>
<translation>Čas</translation> <translation>Čas</translation>
</message> </message>
@ -1054,478 +1064,488 @@
<context> <context>
<name>OptionsDialog</name> <name>OptionsDialog</name>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="169"/> <location filename="../src/GUI/optionsdialog.cpp" line="175"/>
<source>Base color:</source> <source>Base color:</source>
<translation>Základní barva:</translation> <translation>Základní barva:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="170"/> <location filename="../src/GUI/optionsdialog.cpp" line="176"/>
<source>Palette shift:</source> <source>Palette shift:</source>
<translation>Posun palety:</translation> <translation>Posun palety:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="114"/> <location filename="../src/GUI/optionsdialog.cpp" line="120"/>
<source>Track width:</source> <source>Track width:</source>
<translation>Šířka cest:</translation> <translation>Šířka cest:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="115"/> <location filename="../src/GUI/optionsdialog.cpp" line="121"/>
<source>Track style:</source> <source>Track style:</source>
<translation>Styl cest:</translation> <translation>Styl cest:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="119"/> <location filename="../src/GUI/optionsdialog.cpp" line="125"/>
<source>Tracks</source> <source>Tracks</source>
<translation>Cesty</translation> <translation>Cesty</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="131"/> <location filename="../src/GUI/optionsdialog.cpp" line="137"/>
<source>Route width:</source> <source>Route width:</source>
<translation>Šířka tras:</translation> <translation>Šířka tras:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="132"/> <location filename="../src/GUI/optionsdialog.cpp" line="138"/>
<source>Route style:</source> <source>Route style:</source>
<translation>Styl tras:</translation> <translation>Styl tras:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="136"/> <location filename="../src/GUI/optionsdialog.cpp" line="142"/>
<source>Routes</source> <source>Routes</source>
<translation>Trasy</translation> <translation>Trasy</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="172"/> <location filename="../src/GUI/optionsdialog.cpp" line="178"/>
<location filename="../src/GUI/optionsdialog.cpp" line="255"/> <location filename="../src/GUI/optionsdialog.cpp" line="261"/>
<source>Use anti-aliasing</source> <source>Use anti-aliasing</source>
<translation>Vyhlazovat hrany</translation> <translation>Vyhlazovat hrany</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="252"/> <location filename="../src/GUI/optionsdialog.cpp" line="258"/>
<source>Line width:</source> <source>Line width:</source>
<translation>Šířka čar:</translation> <translation>Šířka čar:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="276"/> <location filename="../src/GUI/optionsdialog.cpp" line="282"/>
<source>Background color:</source> <source>Background color:</source>
<translation>Barva pozadí:</translation> <translation>Barva pozadí:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="287"/> <location filename="../src/GUI/optionsdialog.cpp" line="293"/>
<source>Paths</source> <source>Paths</source>
<translation>Trasy</translation> <translation>Trasy</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="277"/> <location filename="../src/GUI/optionsdialog.cpp" line="283"/>
<source>Map opacity:</source> <source>Map opacity:</source>
<translation>Neprůhlednost mapy:</translation> <translation>Neprůhlednost mapy:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="290"/> <location filename="../src/GUI/optionsdialog.cpp" line="296"/>
<source>Map</source> <source>Map</source>
<translation>Mapa</translation> <translation>Mapa</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="289"/> <location filename="../src/GUI/optionsdialog.cpp" line="295"/>
<location filename="../src/GUI/optionsdialog.cpp" line="545"/> <location filename="../src/GUI/optionsdialog.cpp" line="575"/>
<source>Graphs</source> <source>Graphs</source>
<translation>Grafy</translation> <translation>Grafy</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="55"/> <location filename="../src/GUI/optionsdialog.cpp" line="61"/>
<source>High-resolution</source> <source>High-resolution</source>
<translation>Vysoké rozlišení</translation> <translation>Vysoké rozlišení</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="56"/> <location filename="../src/GUI/optionsdialog.cpp" line="62"/>
<source>Standard</source> <source>Standard</source>
<translation>Standardní</translation> <translation>Standardní</translation>
</message> </message>
<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> <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> <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>
<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> <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> <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>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="98"/> <location filename="../src/GUI/optionsdialog.cpp" line="104"/>
<source>HiDPI display mode</source> <source>HiDPI display mode</source>
<translation>HiDPI režim zobrazení</translation> <translation>HiDPI režim zobrazení</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="117"/> <location filename="../src/GUI/optionsdialog.cpp" line="123"/>
<location filename="../src/GUI/optionsdialog.cpp" line="134"/> <location filename="../src/GUI/optionsdialog.cpp" line="140"/>
<location filename="../src/GUI/optionsdialog.cpp" line="153"/> <location filename="../src/GUI/optionsdialog.cpp" line="159"/>
<source>Width:</source> <source>Width:</source>
<translation>Šířka:</translation> <translation>Šířka:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="118"/> <location filename="../src/GUI/optionsdialog.cpp" line="124"/>
<location filename="../src/GUI/optionsdialog.cpp" line="135"/> <location filename="../src/GUI/optionsdialog.cpp" line="141"/>
<location filename="../src/GUI/optionsdialog.cpp" line="154"/> <location filename="../src/GUI/optionsdialog.cpp" line="160"/>
<source>Style:</source> <source>Style:</source>
<translation>Styl:</translation> <translation>Styl:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="205"/> <location filename="../src/GUI/optionsdialog.cpp" line="211"/>
<source>Waypoint color:</source> <source>Waypoint color:</source>
<translation>Barva navigačních bodů:</translation> <translation>Barva navigačních bodů:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="206"/> <location filename="../src/GUI/optionsdialog.cpp" line="212"/>
<source>Waypoint size:</source> <source>Waypoint size:</source>
<translation>Velikost navigačních bodů:</translation> <translation>Velikost navigačních bodů:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="208"/> <location filename="../src/GUI/optionsdialog.cpp" line="214"/>
<location filename="../src/GUI/optionsdialog.cpp" line="224"/> <location filename="../src/GUI/optionsdialog.cpp" line="230"/>
<source>Color:</source> <source>Color:</source>
<translation>Barva:</translation> <translation>Barva:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="209"/> <location filename="../src/GUI/optionsdialog.cpp" line="215"/>
<location filename="../src/GUI/optionsdialog.cpp" line="225"/> <location filename="../src/GUI/optionsdialog.cpp" line="231"/>
<source>Size:</source> <source>Size:</source>
<translation>Velikost:</translation> <translation>Velikost:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="210"/> <location filename="../src/GUI/optionsdialog.cpp" line="216"/>
<source>Waypoints</source> <source>Waypoints</source>
<translation>Navigační body</translation> <translation>Navigační body</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="221"/> <location filename="../src/GUI/optionsdialog.cpp" line="227"/>
<source>POI color:</source> <source>POI color:</source>
<translation>Barva POI:</translation> <translation>Barva POI:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="222"/> <location filename="../src/GUI/optionsdialog.cpp" line="228"/>
<source>POI size:</source> <source>POI size:</source>
<translation>Velikost POI:</translation> <translation>Velikost POI:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="226"/> <location filename="../src/GUI/optionsdialog.cpp" line="232"/>
<source>POIs</source> <source>POIs</source>
<translation>POI body</translation> <translation>POI body</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="253"/> <location filename="../src/GUI/optionsdialog.cpp" line="259"/>
<source>Slider color:</source> <source>Slider color:</source>
<translation>Barva posuvníku:</translation> <translation>Barva posuvníku:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="288"/> <location filename="../src/GUI/optionsdialog.cpp" line="294"/>
<source>Points</source> <source>Points</source>
<translation>Body</translation> <translation>Body</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="297"/> <location filename="../src/GUI/optionsdialog.cpp" line="303"/>
<source>Moving average window size</source> <source>Moving average window size</source>
<translation>Velikost okna klouzavého průměru</translation> <translation>Velikost okna klouzavého průměru</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="316"/> <location filename="../src/GUI/optionsdialog.cpp" line="322"/>
<location filename="../src/GUI/optionsdialog.cpp" line="402"/> <location filename="../src/GUI/optionsdialog.cpp" line="432"/>
<location filename="../src/GUI/optionsdialog.cpp" line="465"/> <location filename="../src/GUI/optionsdialog.cpp" line="495"/>
<source>Elevation:</source> <source>Elevation:</source>
<translation>Výška:</translation> <translation>Výška:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="317"/> <location filename="../src/GUI/optionsdialog.cpp" line="323"/>
<location filename="../src/GUI/optionsdialog.cpp" line="401"/> <location filename="../src/GUI/optionsdialog.cpp" line="431"/>
<source>Speed:</source> <source>Speed:</source>
<translation>Rychlost:</translation> <translation>Rychlost:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="318"/> <location filename="../src/GUI/optionsdialog.cpp" line="324"/>
<source>Heart rate:</source> <source>Heart rate:</source>
<translation>Tep:</translation> <translation>Tep:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="319"/> <location filename="../src/GUI/optionsdialog.cpp" line="325"/>
<source>Cadence:</source> <source>Cadence:</source>
<translation>Kadence:</translation> <translation>Kadence:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="320"/> <location filename="../src/GUI/optionsdialog.cpp" line="326"/>
<source>Power:</source> <source>Power:</source>
<translation>Výkon:</translation> <translation>Výkon:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="322"/> <location filename="../src/GUI/optionsdialog.cpp" line="328"/>
<source>Smoothing</source> <source>Smoothing</source>
<translation>Vyhlazování</translation> <translation>Vyhlazování</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="326"/> <location filename="../src/GUI/optionsdialog.cpp" line="332"/>
<source>Eliminate GPS outliers</source> <source>Eliminate GPS outliers</source>
<translation>Odstarnit odlehlé GPS záznamy</translation> <translation>Odstarnit odlehlé GPS záznamy</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="335"/> <location filename="../src/GUI/optionsdialog.cpp" line="341"/>
<source>Smoothing:</source> <source>Smoothing:</source>
<translation>Vyhlazování:</translation> <translation>Vyhlazování:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="352"/> <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> <source>mi/h</source>
<translation>mi/h</translation> <translation>mi/h</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="355"/> <location filename="../src/GUI/optionsdialog.cpp" line="369"/>
<source>kn</source> <source>kn</source>
<translation>kn</translation> <translation>kn</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="358"/> <location filename="../src/GUI/optionsdialog.cpp" line="372"/>
<source>km/h</source> <source>km/h</source>
<translation>km/h</translation> <translation>km/h</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="362"/> <location filename="../src/GUI/optionsdialog.cpp" line="376"/>
<location filename="../src/GUI/optionsdialog.cpp" line="568"/> <location filename="../src/GUI/optionsdialog.cpp" line="598"/>
<source>s</source> <source>s</source>
<translation>s</translation> <translation>s</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="366"/> <location filename="../src/GUI/optionsdialog.cpp" line="392"/>
<source>Minimal speed:</source> <source>Minimal speed:</source>
<translation>Minimální rychlost:</translation> <translation>Minimální rychlost:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="367"/> <location filename="../src/GUI/optionsdialog.cpp" line="393"/>
<source>Minimal duration:</source> <source>Minimal duration:</source>
<translation>Minimální doba trvání:</translation> <translation>Minimální doba trvání:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="373"/> <location filename="../src/GUI/optionsdialog.cpp" line="403"/>
<source>Computed from distance/time</source> <source>Computed from distance/time</source>
<translation>Vypočítaná ze vzdálenosti/času</translation> <translation>Vypočítaná ze vzdálenosti/času</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="374"/> <location filename="../src/GUI/optionsdialog.cpp" line="404"/>
<source>Recorded by device</source> <source>Recorded by device</source>
<translation>Zaznamenaná zařízením</translation> <translation>Zaznamenaná zařízením</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="380"/> <location filename="../src/GUI/optionsdialog.cpp" line="410"/>
<location filename="../src/GUI/optionsdialog.cpp" line="438"/> <location filename="../src/GUI/optionsdialog.cpp" line="468"/>
<source>GPS data</source> <source>GPS data</source>
<translation>GPS data</translation> <translation>GPS data</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="381"/> <location filename="../src/GUI/optionsdialog.cpp" line="411"/>
<location filename="../src/GUI/optionsdialog.cpp" line="439"/> <location filename="../src/GUI/optionsdialog.cpp" line="469"/>
<source>DEM data</source> <source>DEM data</source>
<translation>DEM data</translation> <translation>DEM data</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="418"/> <location filename="../src/GUI/optionsdialog.cpp" line="448"/>
<source>Elevation</source> <source>Elevation</source>
<translation>Výška</translation> <translation>Výška</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="429"/> <location filename="../src/GUI/optionsdialog.cpp" line="459"/>
<source>Filtering</source> <source>Filtering</source>
<translation>Filtrování</translation> <translation>Filtrování</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="430"/> <location filename="../src/GUI/optionsdialog.cpp" line="460"/>
<source>Sources</source> <source>Sources</source>
<translation>Zdroje</translation> <translation>Zdroje</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="431"/> <location filename="../src/GUI/optionsdialog.cpp" line="461"/>
<source>Pause detection</source> <source>Pause detection</source>
<translation>Detekce přestávek</translation> <translation>Detekce přestávek</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="464"/> <location filename="../src/GUI/optionsdialog.cpp" line="494"/>
<source>Radius:</source> <source>Radius:</source>
<translation>Radius:</translation> <translation>Radius:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="412"/> <location filename="../src/GUI/optionsdialog.cpp" line="442"/>
<source>Speed</source> <source>Speed</source>
<translation>Rychlost</translation> <translation>Rychlost</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="74"/> <location filename="../src/GUI/optionsdialog.cpp" line="80"/>
<source>Projection:</source> <source>Projection:</source>
<translation>Projekce:</translation> <translation>Projekce:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="96"/> <location filename="../src/GUI/optionsdialog.cpp" line="102"/>
<source>Vector maps</source> <source>Vector maps</source>
<translation>Vektorové mapy</translation> <translation>Vektorové mapy</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="149"/> <location filename="../src/GUI/optionsdialog.cpp" line="155"/>
<source>Area border width:</source> <source>Area border width:</source>
<translation>Šířka okrajů ploch:</translation> <translation>Šířka okrajů ploch:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="150"/> <location filename="../src/GUI/optionsdialog.cpp" line="156"/>
<source>Area border style:</source> <source>Area border style:</source>
<translation>Styl okrajů ploch:</translation> <translation>Styl okrajů ploch:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="151"/> <location filename="../src/GUI/optionsdialog.cpp" line="157"/>
<source>Area fill opacity:</source> <source>Area fill opacity:</source>
<translation>Neprůhlednost výplně ploch:</translation> <translation>Neprůhlednost výplně ploch:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="155"/> <location filename="../src/GUI/optionsdialog.cpp" line="161"/>
<source>Fill opacity:</source> <source>Fill opacity:</source>
<translation>Neprůhlednost výplně:</translation> <translation>Neprůhlednost výplně:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="156"/> <location filename="../src/GUI/optionsdialog.cpp" line="162"/>
<source>Areas</source> <source>Areas</source>
<translation>Plochy</translation> <translation>Plochy</translation>
</message> </message>
<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> <source>mi</source>
<translation>mi</translation> <translation>mi</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="453"/> <location filename="../src/GUI/optionsdialog.cpp" line="483"/>
<source>nmi</source> <source>nmi</source>
<translation>nmi</translation> <translation>nmi</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="456"/> <location filename="../src/GUI/optionsdialog.cpp" line="486"/>
<source>km</source> <source>km</source>
<translation>km</translation> <translation>km</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="471"/> <location filename="../src/GUI/optionsdialog.cpp" line="501"/>
<location filename="../src/GUI/optionsdialog.cpp" line="611"/> <location filename="../src/GUI/optionsdialog.cpp" line="641"/>
<source>POI</source> <source>POI</source>
<translation>POI</translation> <translation>POI</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="478"/> <location filename="../src/GUI/optionsdialog.cpp" line="508"/>
<source>WYSIWYG</source> <source>WYSIWYG</source>
<translation>WYSIWYG</translation> <translation>WYSIWYG</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="479"/> <location filename="../src/GUI/optionsdialog.cpp" line="509"/>
<source>High-Resolution</source> <source>High-Resolution</source>
<translation>Vysoké rozlišení</translation> <translation>Vysoké rozlišení</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="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> <source>The printed area is approximately the display area. The map zoom level does not change.</source>
<translation>Oblast tisku přibližně odpovídá zobrazované oblasti. Přiblížení mapy se nemění.</translation> <translation>Oblast tisku přibližně odpovídá zobrazované oblasti. Přiblížení mapy se nemění.</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="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> <source>The zoom level will be changed so that the whole content (tracks/waypoints) fits to the printed area and the map resolution is as close as possible to the print resolution.</source>
<translation>Přiblížení mapy bude upraveno tak, aby se celý obsah (trasy/body) vešel do oblasti tisku a rozlišení mapy bylo co nejblíže rozlišení tisku.</translation> <translation>Přiblížení mapy bude upraveno tak, aby se celý obsah (trasy/body) vešel do oblasti tisku a rozlišení mapy bylo co nejblíže rozlišení tisku.</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="508"/> <location filename="../src/GUI/optionsdialog.cpp" line="538"/>
<source>Name</source> <source>Name</source>
<translation>Název</translation> <translation>Název</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="510"/> <location filename="../src/GUI/optionsdialog.cpp" line="540"/>
<source>Date</source> <source>Date</source>
<translation>Datum</translation> <translation>Datum</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="512"/> <location filename="../src/GUI/optionsdialog.cpp" line="542"/>
<source>Distance</source> <source>Distance</source>
<translation>Vzdálenost</translation> <translation>Vzdálenost</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="514"/> <location filename="../src/GUI/optionsdialog.cpp" line="544"/>
<source>Time</source> <source>Time</source>
<translation>Čas</translation> <translation>Čas</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="516"/> <location filename="../src/GUI/optionsdialog.cpp" line="546"/>
<source>Moving time</source> <source>Moving time</source>
<translation>Čistý čas</translation> <translation>Čistý čas</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="518"/> <location filename="../src/GUI/optionsdialog.cpp" line="548"/>
<source>Item count (&gt;1)</source> <source>Item count (&gt;1)</source>
<translation>Počet objektů (&gt;1)</translation> <translation>Počet objektů (&gt;1)</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="533"/> <location filename="../src/GUI/optionsdialog.cpp" line="563"/>
<source>Separate graph page</source> <source>Separate graph page</source>
<translation>Samostatná stránka s grafy</translation> <translation>Samostatná stránka s grafy</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="543"/> <location filename="../src/GUI/optionsdialog.cpp" line="573"/>
<source>Print mode</source> <source>Print mode</source>
<translation>Režim tisku</translation> <translation>Režim tisku</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="544"/> <location filename="../src/GUI/optionsdialog.cpp" line="574"/>
<source>Header</source> <source>Header</source>
<translation>Záhlaví</translation> <translation>Záhlaví</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="552"/> <location filename="../src/GUI/optionsdialog.cpp" line="582"/>
<source>Use OpenGL</source> <source>Use OpenGL</source>
<translation>Používat OpenGL</translation> <translation>Používat OpenGL</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="555"/> <location filename="../src/GUI/optionsdialog.cpp" line="585"/>
<source>Enable HTTP/2</source> <source>Enable HTTP/2</source>
<translation>Povolit HTTP/2</translation> <translation>Povolit HTTP/2</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="562"/> <location filename="../src/GUI/optionsdialog.cpp" line="592"/>
<source>MB</source> <source>MB</source>
<translation>MB</translation> <translation>MB</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="572"/> <location filename="../src/GUI/optionsdialog.cpp" line="602"/>
<source>Image cache size:</source> <source>Image cache size:</source>
<translation>Mezipaměť obrázků:</translation> <translation>Mezipaměť obrázků:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="573"/> <location filename="../src/GUI/optionsdialog.cpp" line="603"/>
<source>Connection timeout:</source> <source>Connection timeout:</source>
<translation>Časový limit připojení:</translation> <translation>Časový limit připojení:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="589"/> <location filename="../src/GUI/optionsdialog.cpp" line="619"/>
<location filename="../src/GUI/optionsdialog.cpp" line="614"/> <location filename="../src/GUI/optionsdialog.cpp" line="644"/>
<source>System</source> <source>System</source>
<translation>Systém</translation> <translation>Systém</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="607"/> <location filename="../src/GUI/optionsdialog.cpp" line="637"/>
<source>Appearance</source> <source>Appearance</source>
<translation>Vzhled</translation> <translation>Vzhled</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="609"/> <location filename="../src/GUI/optionsdialog.cpp" line="639"/>
<source>Maps</source> <source>Maps</source>
<translation>Mapy</translation> <translation>Mapy</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="610"/> <location filename="../src/GUI/optionsdialog.cpp" line="640"/>
<source>Data</source> <source>Data</source>
<translation>Data</translation> <translation>Data</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="612"/> <location filename="../src/GUI/optionsdialog.cpp" line="642"/>
<source>Print &amp; Export</source> <source>Print &amp; Export</source>
<translation>Tisk a export</translation> <translation>Tisk a export</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="641"/> <location filename="../src/GUI/optionsdialog.cpp" line="671"/>
<source>Options</source> <source>Options</source>
<translation>Nastavení</translation> <translation>Nastavení</translation>
</message> </message>
@ -1868,7 +1888,12 @@
<translation>Popis</translation> <translation>Popis</translation>
</message> </message>
<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> <source>Links</source>
<translation>Odkazy</translation> <translation>Odkazy</translation>
</message> </message>

View File

@ -47,77 +47,87 @@
<context> <context>
<name>Data</name> <name>Data</name>
<message> <message>
<location filename="../src/data/data.cpp" line="173"/> <location filename="../src/data/data.cpp" line="179"/>
<source>Supported files</source> <source>Supported files</source>
<translation>Understøttede filer</translation> <translation>Understøttede filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="174"/> <location filename="../src/data/data.cpp" line="180"/>
<source>CSV files</source> <source>CSV files</source>
<translation>CSV-filer</translation> <translation>CSV-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="175"/> <location filename="../src/data/data.cpp" line="181"/>
<source>CUP files</source> <source>CUP files</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="176"/> <location filename="../src/data/data.cpp" line="182"/>
<source>FIT files</source> <source>FIT files</source>
<translation>FIT-filer</translation> <translation>FIT-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="178"/> <location filename="../src/data/data.cpp" line="184"/>
<source>GeoJSON files</source> <source>GeoJSON files</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="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> <source>GPX files</source>
<translation>GPX-filer</translation> <translation>GPX-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="181"/> <location filename="../src/data/data.cpp" line="188"/>
<source>IGC files</source> <source>IGC files</source>
<translation>IGC-filer</translation> <translation>IGC-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="182"/> <location filename="../src/data/data.cpp" line="189"/>
<source>JPEG images</source> <source>JPEG images</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="183"/> <location filename="../src/data/data.cpp" line="190"/>
<source>KML files</source> <source>KML files</source>
<translation>KML-filer</translation> <translation>KML-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="184"/> <location filename="../src/data/data.cpp" line="191"/>
<source>LOC files</source> <source>LOC files</source>
<translation>LOC-filer</translation> <translation>LOC-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="185"/> <location filename="../src/data/data.cpp" line="192"/>
<source>NMEA files</source> <source>NMEA files</source>
<translation>NMEA-filer</translation> <translation>NMEA-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="186"/> <location filename="../src/data/data.cpp" line="193"/>
<source>OziExplorer files</source> <source>OziExplorer files</source>
<translation>OziExplorer-filer</translation> <translation>OziExplorer-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="187"/> <location filename="../src/data/data.cpp" line="194"/>
<source>SLF files</source> <source>SLF files</source>
<translation>SLF-filer</translation> <translation>SLF-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="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> <source>TCX files</source>
<translation>TCX-filer</translation> <translation>TCX-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="189"/> <location filename="../src/data/data.cpp" line="197"/>
<source>All files</source> <source>All files</source>
<translation>Alle filer</translation> <translation>Alle filer</translation>
</message> </message>
@ -484,16 +494,16 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="369"/> <location filename="../src/GUI/gui.cpp" line="369"/>
<location filename="../src/GUI/gui.cpp" line="1053"/> <location filename="../src/GUI/gui.cpp" line="1054"/>
<location filename="../src/GUI/gui.cpp" line="1120"/> <location filename="../src/GUI/gui.cpp" line="1121"/>
<source>Distance</source> <source>Distance</source>
<translation>Afstand</translation> <translation>Afstand</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="376"/> <location filename="../src/GUI/gui.cpp" line="376"/>
<location filename="../src/GUI/gui.cpp" line="552"/> <location filename="../src/GUI/gui.cpp" line="552"/>
<location filename="../src/GUI/gui.cpp" line="1056"/> <location filename="../src/GUI/gui.cpp" line="1057"/>
<location filename="../src/GUI/gui.cpp" line="1122"/> <location filename="../src/GUI/gui.cpp" line="1123"/>
<source>Time</source> <source>Time</source>
<translation>Tid</translation> <translation>Tid</translation>
</message> </message>
@ -524,8 +534,8 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="413"/> <location filename="../src/GUI/gui.cpp" line="413"/>
<location filename="../src/GUI/gui.cpp" line="1058"/> <location filename="../src/GUI/gui.cpp" line="1059"/>
<location filename="../src/GUI/gui.cpp" line="1124"/> <location filename="../src/GUI/gui.cpp" line="1125"/>
<source>Moving time</source> <source>Moving time</source>
<translation>Tid i bevægelse</translation> <translation>Tid i bevægelse</translation>
</message> </message>
@ -791,65 +801,65 @@
<translation>Fejl ved indlæsning af IP-fil:</translation> <translation>Fejl ved indlæsning af IP-fil:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1027"/> <location filename="../src/GUI/gui.cpp" line="1028"/>
<location filename="../src/GUI/gui.cpp" line="1098"/> <location filename="../src/GUI/gui.cpp" line="1099"/>
<source>Tracks</source> <source>Tracks</source>
<translation>Spor</translation> <translation>Spor</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1030"/> <location filename="../src/GUI/gui.cpp" line="1031"/>
<location filename="../src/GUI/gui.cpp" line="1100"/> <location filename="../src/GUI/gui.cpp" line="1101"/>
<source>Routes</source> <source>Routes</source>
<translation>Ruter</translation> <translation>Ruter</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1033"/> <location filename="../src/GUI/gui.cpp" line="1034"/>
<location filename="../src/GUI/gui.cpp" line="1102"/> <location filename="../src/GUI/gui.cpp" line="1103"/>
<source>Waypoints</source> <source>Waypoints</source>
<translation>Rutepunkter</translation> <translation>Rutepunkter</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1036"/> <location filename="../src/GUI/gui.cpp" line="1037"/>
<location filename="../src/GUI/gui.cpp" line="1104"/> <location filename="../src/GUI/gui.cpp" line="1105"/>
<source>Areas</source> <source>Areas</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1042"/> <location filename="../src/GUI/gui.cpp" line="1043"/>
<location filename="../src/GUI/gui.cpp" line="1046"/> <location filename="../src/GUI/gui.cpp" line="1047"/>
<location filename="../src/GUI/gui.cpp" line="1110"/> <location filename="../src/GUI/gui.cpp" line="1111"/>
<location filename="../src/GUI/gui.cpp" line="1113"/> <location filename="../src/GUI/gui.cpp" line="1114"/>
<source>Date</source> <source>Date</source>
<translation>Dato</translation> <translation>Dato</translation>
</message> </message>
<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="1080"/>
<location filename="../src/GUI/gui.cpp" line="1081"/>
<source>Statistics</source> <source>Statistics</source>
<translation>Statistikker</translation> <translation>Statistikker</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1094"/> <location filename="../src/GUI/gui.cpp" line="1095"/>
<source>Name</source> <source>Name</source>
<translation>Navn</translation> <translation>Navn</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1312"/> <location filename="../src/GUI/gui.cpp" line="1313"/>
<source>Open map file</source> <source>Open map file</source>
<translation>Åbn kort-fil</translation> <translation>Åbn kort-fil</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1335"/> <location filename="../src/GUI/gui.cpp" line="1336"/>
<source>Error loading map:</source> <source>Error loading map:</source>
<translation>Fejl ved indlæsning af kort:</translation> <translation>Fejl ved indlæsning af kort:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1346"/> <location filename="../src/GUI/gui.cpp" line="1347"/>
<source>No files loaded</source> <source>No files loaded</source>
<translation>Ingen filer indlæst</translation> <translation>Ingen filer indlæst</translation>
</message> </message>
<message numerus="yes"> <message numerus="yes">
<location filename="../src/GUI/gui.cpp" line="1350"/> <location filename="../src/GUI/gui.cpp" line="1351"/>
<source>%n files</source> <source>%n files</source>
<translation> <translation>
<numerusform>%n fil</numerusform> <numerusform>%n fil</numerusform>
@ -908,7 +918,7 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/graphview.cpp" line="66"/> <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> <source>Distance</source>
<translation>Afstand</translation> <translation>Afstand</translation>
</message> </message>
@ -954,7 +964,7 @@
<translation>t</translation> <translation>t</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/graphview.cpp" line="175"/> <location filename="../src/GUI/graphview.cpp" line="179"/>
<source>Time</source> <source>Time</source>
<translation>Tid</translation> <translation>Tid</translation>
</message> </message>
@ -1053,478 +1063,488 @@
<context> <context>
<name>OptionsDialog</name> <name>OptionsDialog</name>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="55"/> <location filename="../src/GUI/optionsdialog.cpp" line="61"/>
<source>High-resolution</source> <source>High-resolution</source>
<translation>Højopløsning</translation> <translation>Højopløsning</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="56"/> <location filename="../src/GUI/optionsdialog.cpp" line="62"/>
<source>Standard</source> <source>Standard</source>
<translation>Standard</translation> <translation>Standard</translation>
</message> </message>
<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> <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> <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>
<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> <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> <translation>Ikke HiDPI kort er indlæst som de er. Kortobjekter har den forventede størrelse, men kortet er sløret.</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="98"/> <location filename="../src/GUI/optionsdialog.cpp" line="104"/>
<source>HiDPI display mode</source> <source>HiDPI display mode</source>
<translation>HiDPI skærmtilstand</translation> <translation>HiDPI skærmtilstand</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="169"/> <location filename="../src/GUI/optionsdialog.cpp" line="175"/>
<source>Base color:</source> <source>Base color:</source>
<translation>Grundfarve:</translation> <translation>Grundfarve:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="170"/> <location filename="../src/GUI/optionsdialog.cpp" line="176"/>
<source>Palette shift:</source> <source>Palette shift:</source>
<translation>Paletteskift:</translation> <translation>Paletteskift:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="114"/> <location filename="../src/GUI/optionsdialog.cpp" line="120"/>
<source>Track width:</source> <source>Track width:</source>
<translation>Sporvidde:</translation> <translation>Sporvidde:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="74"/> <location filename="../src/GUI/optionsdialog.cpp" line="80"/>
<source>Projection:</source> <source>Projection:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="96"/> <location filename="../src/GUI/optionsdialog.cpp" line="102"/>
<source>Vector maps</source> <source>Vector maps</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="115"/> <location filename="../src/GUI/optionsdialog.cpp" line="121"/>
<source>Track style:</source> <source>Track style:</source>
<translation>Sporstil:</translation> <translation>Sporstil:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="117"/> <location filename="../src/GUI/optionsdialog.cpp" line="123"/>
<location filename="../src/GUI/optionsdialog.cpp" line="134"/> <location filename="../src/GUI/optionsdialog.cpp" line="140"/>
<location filename="../src/GUI/optionsdialog.cpp" line="153"/> <location filename="../src/GUI/optionsdialog.cpp" line="159"/>
<source>Width:</source> <source>Width:</source>
<translation>Bredde:</translation> <translation>Bredde:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="118"/> <location filename="../src/GUI/optionsdialog.cpp" line="124"/>
<location filename="../src/GUI/optionsdialog.cpp" line="135"/> <location filename="../src/GUI/optionsdialog.cpp" line="141"/>
<location filename="../src/GUI/optionsdialog.cpp" line="154"/> <location filename="../src/GUI/optionsdialog.cpp" line="160"/>
<source>Style:</source> <source>Style:</source>
<translation>Stil:</translation> <translation>Stil:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="119"/> <location filename="../src/GUI/optionsdialog.cpp" line="125"/>
<source>Tracks</source> <source>Tracks</source>
<translation>Spor</translation> <translation>Spor</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="131"/> <location filename="../src/GUI/optionsdialog.cpp" line="137"/>
<source>Route width:</source> <source>Route width:</source>
<translation>Rutebredde:</translation> <translation>Rutebredde:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="132"/> <location filename="../src/GUI/optionsdialog.cpp" line="138"/>
<source>Route style:</source> <source>Route style:</source>
<translation>Rutestil:</translation> <translation>Rutestil:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="136"/> <location filename="../src/GUI/optionsdialog.cpp" line="142"/>
<source>Routes</source> <source>Routes</source>
<translation>Ruter</translation> <translation>Ruter</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="149"/> <location filename="../src/GUI/optionsdialog.cpp" line="155"/>
<source>Area border width:</source> <source>Area border width:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="150"/> <location filename="../src/GUI/optionsdialog.cpp" line="156"/>
<source>Area border style:</source> <source>Area border style:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="151"/> <location filename="../src/GUI/optionsdialog.cpp" line="157"/>
<source>Area fill opacity:</source> <source>Area fill opacity:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="155"/> <location filename="../src/GUI/optionsdialog.cpp" line="161"/>
<source>Fill opacity:</source> <source>Fill opacity:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="156"/> <location filename="../src/GUI/optionsdialog.cpp" line="162"/>
<source>Areas</source> <source>Areas</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="172"/> <location filename="../src/GUI/optionsdialog.cpp" line="178"/>
<location filename="../src/GUI/optionsdialog.cpp" line="255"/> <location filename="../src/GUI/optionsdialog.cpp" line="261"/>
<source>Use anti-aliasing</source> <source>Use anti-aliasing</source>
<translation>Brug anti-aliasing</translation> <translation>Brug anti-aliasing</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="205"/> <location filename="../src/GUI/optionsdialog.cpp" line="211"/>
<source>Waypoint color:</source> <source>Waypoint color:</source>
<translation>Rutepunktfarve:</translation> <translation>Rutepunktfarve:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="206"/> <location filename="../src/GUI/optionsdialog.cpp" line="212"/>
<source>Waypoint size:</source> <source>Waypoint size:</source>
<translation>Rutepunktstørrelse:</translation> <translation>Rutepunktstørrelse:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="208"/> <location filename="../src/GUI/optionsdialog.cpp" line="214"/>
<location filename="../src/GUI/optionsdialog.cpp" line="224"/> <location filename="../src/GUI/optionsdialog.cpp" line="230"/>
<source>Color:</source> <source>Color:</source>
<translation>Farve:</translation> <translation>Farve:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="209"/> <location filename="../src/GUI/optionsdialog.cpp" line="215"/>
<location filename="../src/GUI/optionsdialog.cpp" line="225"/> <location filename="../src/GUI/optionsdialog.cpp" line="231"/>
<source>Size:</source> <source>Size:</source>
<translation>Størrelse:</translation> <translation>Størrelse:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="210"/> <location filename="../src/GUI/optionsdialog.cpp" line="216"/>
<source>Waypoints</source> <source>Waypoints</source>
<translation>Rutepunkter</translation> <translation>Rutepunkter</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="221"/> <location filename="../src/GUI/optionsdialog.cpp" line="227"/>
<source>POI color:</source> <source>POI color:</source>
<translation>IP farve:</translation> <translation>IP farve:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="222"/> <location filename="../src/GUI/optionsdialog.cpp" line="228"/>
<source>POI size:</source> <source>POI size:</source>
<translation>IP størrelse:</translation> <translation>IP størrelse:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="226"/> <location filename="../src/GUI/optionsdialog.cpp" line="232"/>
<source>POIs</source> <source>POIs</source>
<translation type="unfinished">Interessepunkter</translation> <translation type="unfinished">Interessepunkter</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="252"/> <location filename="../src/GUI/optionsdialog.cpp" line="258"/>
<source>Line width:</source> <source>Line width:</source>
<translation>Linjebredde:</translation> <translation>Linjebredde:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="253"/> <location filename="../src/GUI/optionsdialog.cpp" line="259"/>
<source>Slider color:</source> <source>Slider color:</source>
<translation type="unfinished">Skyderfarve:</translation> <translation type="unfinished">Skyderfarve:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="276"/> <location filename="../src/GUI/optionsdialog.cpp" line="282"/>
<source>Background color:</source> <source>Background color:</source>
<translation>Baggrundsfarve:</translation> <translation>Baggrundsfarve:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="277"/> <location filename="../src/GUI/optionsdialog.cpp" line="283"/>
<source>Map opacity:</source> <source>Map opacity:</source>
<translation type="unfinished">Gennemsigtighed for kort:</translation> <translation type="unfinished">Gennemsigtighed for kort:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="287"/> <location filename="../src/GUI/optionsdialog.cpp" line="293"/>
<source>Paths</source> <source>Paths</source>
<translation>Stier</translation> <translation>Stier</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="288"/> <location filename="../src/GUI/optionsdialog.cpp" line="294"/>
<source>Points</source> <source>Points</source>
<translation>Punkter</translation> <translation>Punkter</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="289"/> <location filename="../src/GUI/optionsdialog.cpp" line="295"/>
<location filename="../src/GUI/optionsdialog.cpp" line="545"/> <location filename="../src/GUI/optionsdialog.cpp" line="575"/>
<source>Graphs</source> <source>Graphs</source>
<translation>Grafer</translation> <translation>Grafer</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="290"/> <location filename="../src/GUI/optionsdialog.cpp" line="296"/>
<source>Map</source> <source>Map</source>
<translation>Kort</translation> <translation>Kort</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="297"/> <location filename="../src/GUI/optionsdialog.cpp" line="303"/>
<source>Moving average window size</source> <source>Moving average window size</source>
<translation type="unfinished">Glidende gennemsnitlig vinduesstørrelse</translation> <translation type="unfinished">Glidende gennemsnitlig vinduesstørrelse</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="316"/> <location filename="../src/GUI/optionsdialog.cpp" line="322"/>
<location filename="../src/GUI/optionsdialog.cpp" line="402"/> <location filename="../src/GUI/optionsdialog.cpp" line="432"/>
<location filename="../src/GUI/optionsdialog.cpp" line="465"/> <location filename="../src/GUI/optionsdialog.cpp" line="495"/>
<source>Elevation:</source> <source>Elevation:</source>
<translation>Højde:</translation> <translation>Højde:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="317"/> <location filename="../src/GUI/optionsdialog.cpp" line="323"/>
<location filename="../src/GUI/optionsdialog.cpp" line="401"/> <location filename="../src/GUI/optionsdialog.cpp" line="431"/>
<source>Speed:</source> <source>Speed:</source>
<translation>Hastighed:</translation> <translation>Hastighed:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="318"/> <location filename="../src/GUI/optionsdialog.cpp" line="324"/>
<source>Heart rate:</source> <source>Heart rate:</source>
<translation>Puls:</translation> <translation>Puls:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="319"/> <location filename="../src/GUI/optionsdialog.cpp" line="325"/>
<source>Cadence:</source> <source>Cadence:</source>
<translation>Kadence:</translation> <translation>Kadence:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="320"/> <location filename="../src/GUI/optionsdialog.cpp" line="326"/>
<source>Power:</source> <source>Power:</source>
<translation>Effekt:</translation> <translation>Effekt:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="322"/> <location filename="../src/GUI/optionsdialog.cpp" line="328"/>
<source>Smoothing</source> <source>Smoothing</source>
<translation>Udjævning</translation> <translation>Udjævning</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="326"/> <location filename="../src/GUI/optionsdialog.cpp" line="332"/>
<source>Eliminate GPS outliers</source> <source>Eliminate GPS outliers</source>
<translation>Eliminer GPS-ekstremværdier</translation> <translation>Eliminer GPS-ekstremværdier</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="335"/> <location filename="../src/GUI/optionsdialog.cpp" line="341"/>
<source>Smoothing:</source> <source>Smoothing:</source>
<translation>Udjævning:</translation> <translation>Udjævning:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="352"/> <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> <source>mi/h</source>
<translation>mil/t</translation> <translation>mil/t</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="355"/> <location filename="../src/GUI/optionsdialog.cpp" line="369"/>
<source>kn</source> <source>kn</source>
<translation type="unfinished">knob</translation> <translation type="unfinished">knob</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="358"/> <location filename="../src/GUI/optionsdialog.cpp" line="372"/>
<source>km/h</source> <source>km/h</source>
<translation>km/t</translation> <translation>km/t</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="362"/> <location filename="../src/GUI/optionsdialog.cpp" line="376"/>
<location filename="../src/GUI/optionsdialog.cpp" line="568"/> <location filename="../src/GUI/optionsdialog.cpp" line="598"/>
<source>s</source> <source>s</source>
<translation>s</translation> <translation>s</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="366"/> <location filename="../src/GUI/optionsdialog.cpp" line="392"/>
<source>Minimal speed:</source> <source>Minimal speed:</source>
<translation>Mindste hastighed:</translation> <translation>Mindste hastighed:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="367"/> <location filename="../src/GUI/optionsdialog.cpp" line="393"/>
<source>Minimal duration:</source> <source>Minimal duration:</source>
<translation>Minidste varighed:</translation> <translation>Minidste varighed:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="373"/> <location filename="../src/GUI/optionsdialog.cpp" line="403"/>
<source>Computed from distance/time</source> <source>Computed from distance/time</source>
<translation>Beregnet ud fra afstanden/tiden</translation> <translation>Beregnet ud fra afstanden/tiden</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="374"/> <location filename="../src/GUI/optionsdialog.cpp" line="404"/>
<source>Recorded by device</source> <source>Recorded by device</source>
<translation>Indspillet af enhed</translation> <translation>Indspillet af enhed</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="380"/> <location filename="../src/GUI/optionsdialog.cpp" line="410"/>
<location filename="../src/GUI/optionsdialog.cpp" line="438"/> <location filename="../src/GUI/optionsdialog.cpp" line="468"/>
<source>GPS data</source> <source>GPS data</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="381"/> <location filename="../src/GUI/optionsdialog.cpp" line="411"/>
<location filename="../src/GUI/optionsdialog.cpp" line="439"/> <location filename="../src/GUI/optionsdialog.cpp" line="469"/>
<source>DEM data</source> <source>DEM data</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="418"/> <location filename="../src/GUI/optionsdialog.cpp" line="448"/>
<source>Elevation</source> <source>Elevation</source>
<translation type="unfinished">Højde</translation> <translation type="unfinished">Højde</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="429"/> <location filename="../src/GUI/optionsdialog.cpp" line="459"/>
<source>Filtering</source> <source>Filtering</source>
<translation>Filtrering</translation> <translation>Filtrering</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="430"/> <location filename="../src/GUI/optionsdialog.cpp" line="460"/>
<source>Sources</source> <source>Sources</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="431"/> <location filename="../src/GUI/optionsdialog.cpp" line="461"/>
<source>Pause detection</source> <source>Pause detection</source>
<translation type="unfinished">Pause genkendelse</translation> <translation type="unfinished">Pause genkendelse</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="464"/> <location filename="../src/GUI/optionsdialog.cpp" line="494"/>
<source>Radius:</source> <source>Radius:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="412"/> <location filename="../src/GUI/optionsdialog.cpp" line="442"/>
<source>Speed</source> <source>Speed</source>
<translation>Hastighed</translation> <translation>Hastighed</translation>
</message> </message>
<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> <source>mi</source>
<translation>mil</translation> <translation>mil</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="453"/> <location filename="../src/GUI/optionsdialog.cpp" line="483"/>
<source>nmi</source> <source>nmi</source>
<translation>sømil</translation> <translation>sømil</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="456"/> <location filename="../src/GUI/optionsdialog.cpp" line="486"/>
<source>km</source> <source>km</source>
<translation>km</translation> <translation>km</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="471"/> <location filename="../src/GUI/optionsdialog.cpp" line="501"/>
<location filename="../src/GUI/optionsdialog.cpp" line="611"/> <location filename="../src/GUI/optionsdialog.cpp" line="641"/>
<source>POI</source> <source>POI</source>
<translation>IP</translation> <translation>IP</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="478"/> <location filename="../src/GUI/optionsdialog.cpp" line="508"/>
<source>WYSIWYG</source> <source>WYSIWYG</source>
<translation type="unfinished">WYSIWYG</translation> <translation type="unfinished">WYSIWYG</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="479"/> <location filename="../src/GUI/optionsdialog.cpp" line="509"/>
<source>High-Resolution</source> <source>High-Resolution</source>
<translation>Højopløsning</translation> <translation>Højopløsning</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="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> <source>The printed area is approximately the display area. The map zoom level does not change.</source>
<translation type="unfinished">Det udskrevne område er ca. det samme som visningsområdet. Kortes zoomniveau ændres ikke.</translation> <translation type="unfinished">Det udskrevne område er ca. det samme som visningsområdet. Kortes zoomniveau ændres ikke.</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="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> <source>The zoom level will be changed so that the whole content (tracks/waypoints) fits to the printed area and the map resolution is as close as possible to the print resolution.</source>
<translation type="unfinished">Zoom-niveauet vil blive ændret, således at hele indholdet (spor/rutepunkter) passer til udskriftsområdet og kortopløsning er tæt som muligt udskriftsopløsningen.</translation> <translation type="unfinished">Zoom-niveauet vil blive ændret, således at hele indholdet (spor/rutepunkter) passer til udskriftsområdet og kortopløsning er tæt som muligt udskriftsopløsningen.</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="508"/> <location filename="../src/GUI/optionsdialog.cpp" line="538"/>
<source>Name</source> <source>Name</source>
<translation>Navn</translation> <translation>Navn</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="510"/> <location filename="../src/GUI/optionsdialog.cpp" line="540"/>
<source>Date</source> <source>Date</source>
<translation>Dato</translation> <translation>Dato</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="512"/> <location filename="../src/GUI/optionsdialog.cpp" line="542"/>
<source>Distance</source> <source>Distance</source>
<translation>Afstand</translation> <translation>Afstand</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="514"/> <location filename="../src/GUI/optionsdialog.cpp" line="544"/>
<source>Time</source> <source>Time</source>
<translation>Tid</translation> <translation>Tid</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="516"/> <location filename="../src/GUI/optionsdialog.cpp" line="546"/>
<source>Moving time</source> <source>Moving time</source>
<translation>Tid i bevægelse</translation> <translation>Tid i bevægelse</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="518"/> <location filename="../src/GUI/optionsdialog.cpp" line="548"/>
<source>Item count (&gt;1)</source> <source>Item count (&gt;1)</source>
<translation type="unfinished">Elementantal (&gt;1)</translation> <translation type="unfinished">Elementantal (&gt;1)</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="533"/> <location filename="../src/GUI/optionsdialog.cpp" line="563"/>
<source>Separate graph page</source> <source>Separate graph page</source>
<translation>Separat grafside</translation> <translation>Separat grafside</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="543"/> <location filename="../src/GUI/optionsdialog.cpp" line="573"/>
<source>Print mode</source> <source>Print mode</source>
<translation type="unfinished">Udskrivningstilstand</translation> <translation type="unfinished">Udskrivningstilstand</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="544"/> <location filename="../src/GUI/optionsdialog.cpp" line="574"/>
<source>Header</source> <source>Header</source>
<translation type="unfinished">Toptekst</translation> <translation type="unfinished">Toptekst</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="552"/> <location filename="../src/GUI/optionsdialog.cpp" line="582"/>
<source>Use OpenGL</source> <source>Use OpenGL</source>
<translation>Brug OpenGL</translation> <translation>Brug OpenGL</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="555"/> <location filename="../src/GUI/optionsdialog.cpp" line="585"/>
<source>Enable HTTP/2</source> <source>Enable HTTP/2</source>
<translation>Aktiver HTTP/2</translation> <translation>Aktiver HTTP/2</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="562"/> <location filename="../src/GUI/optionsdialog.cpp" line="592"/>
<source>MB</source> <source>MB</source>
<translation>MB</translation> <translation>MB</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="572"/> <location filename="../src/GUI/optionsdialog.cpp" line="602"/>
<source>Image cache size:</source> <source>Image cache size:</source>
<translation type="unfinished">Billed cachestørrelse:</translation> <translation type="unfinished">Billed cachestørrelse:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="573"/> <location filename="../src/GUI/optionsdialog.cpp" line="603"/>
<source>Connection timeout:</source> <source>Connection timeout:</source>
<translation>Timeout for forbindelse:</translation> <translation>Timeout for forbindelse:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="589"/> <location filename="../src/GUI/optionsdialog.cpp" line="619"/>
<location filename="../src/GUI/optionsdialog.cpp" line="614"/> <location filename="../src/GUI/optionsdialog.cpp" line="644"/>
<source>System</source> <source>System</source>
<translation>System</translation> <translation>System</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="607"/> <location filename="../src/GUI/optionsdialog.cpp" line="637"/>
<source>Appearance</source> <source>Appearance</source>
<translation>Udseende</translation> <translation>Udseende</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="609"/> <location filename="../src/GUI/optionsdialog.cpp" line="639"/>
<source>Maps</source> <source>Maps</source>
<translation>Kort</translation> <translation>Kort</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="610"/> <location filename="../src/GUI/optionsdialog.cpp" line="640"/>
<source>Data</source> <source>Data</source>
<translation>Data</translation> <translation>Data</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="612"/> <location filename="../src/GUI/optionsdialog.cpp" line="642"/>
<source>Print &amp; Export</source> <source>Print &amp; Export</source>
<translation>Udskriv &amp; eksport</translation> <translation>Udskriv &amp; eksport</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="641"/> <location filename="../src/GUI/optionsdialog.cpp" line="671"/>
<source>Options</source> <source>Options</source>
<translation>Indstillinger</translation> <translation>Indstillinger</translation>
</message> </message>
@ -1867,7 +1887,12 @@
<translation>Beskrivelse</translation> <translation>Beskrivelse</translation>
</message> </message>
<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> <source>Links</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

View File

@ -47,77 +47,87 @@
<context> <context>
<name>Data</name> <name>Data</name>
<message> <message>
<location filename="../src/data/data.cpp" line="173"/> <location filename="../src/data/data.cpp" line="179"/>
<source>Supported files</source> <source>Supported files</source>
<translation>Unterstützte Dateien</translation> <translation>Unterstützte Dateien</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="174"/> <location filename="../src/data/data.cpp" line="180"/>
<source>CSV files</source> <source>CSV files</source>
<translation>CSV-Dateien</translation> <translation>CSV-Dateien</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="175"/> <location filename="../src/data/data.cpp" line="181"/>
<source>CUP files</source> <source>CUP files</source>
<translation>CUP-Dateien</translation> <translation>CUP-Dateien</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="176"/> <location filename="../src/data/data.cpp" line="182"/>
<source>FIT files</source> <source>FIT files</source>
<translation>FIT-Dateien</translation> <translation>FIT-Dateien</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="178"/> <location filename="../src/data/data.cpp" line="184"/>
<source>GeoJSON files</source> <source>GeoJSON files</source>
<translation>GeoJSON-Dateien</translation> <translation>GeoJSON-Dateien</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="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> <source>GPX files</source>
<translation>GPX-Dateien</translation> <translation>GPX-Dateien</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="181"/> <location filename="../src/data/data.cpp" line="188"/>
<source>IGC files</source> <source>IGC files</source>
<translation>IGC-Dateien</translation> <translation>IGC-Dateien</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="182"/> <location filename="../src/data/data.cpp" line="189"/>
<source>JPEG images</source> <source>JPEG images</source>
<translation>JPEG-Bilder</translation> <translation>JPEG-Bilder</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="183"/> <location filename="../src/data/data.cpp" line="190"/>
<source>KML files</source> <source>KML files</source>
<translation>KML-Dateien</translation> <translation>KML-Dateien</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="184"/> <location filename="../src/data/data.cpp" line="191"/>
<source>LOC files</source> <source>LOC files</source>
<translation>LOC-Dateien</translation> <translation>LOC-Dateien</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="185"/> <location filename="../src/data/data.cpp" line="192"/>
<source>NMEA files</source> <source>NMEA files</source>
<translation>NMEA-Dateien</translation> <translation>NMEA-Dateien</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="186"/> <location filename="../src/data/data.cpp" line="193"/>
<source>OziExplorer files</source> <source>OziExplorer files</source>
<translation>OziExplorer-Dateien</translation> <translation>OziExplorer-Dateien</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="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> <source>TCX files</source>
<translation>TCX-Dateien</translation> <translation>TCX-Dateien</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="187"/> <location filename="../src/data/data.cpp" line="194"/>
<source>SLF files</source> <source>SLF files</source>
<translation>SLF-Dateien</translation> <translation>SLF-Dateien</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="189"/> <location filename="../src/data/data.cpp" line="197"/>
<source>All files</source> <source>All files</source>
<translation>Alle Dateien</translation> <translation>Alle Dateien</translation>
</message> </message>
@ -518,8 +528,8 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="413"/> <location filename="../src/GUI/gui.cpp" line="413"/>
<location filename="../src/GUI/gui.cpp" line="1058"/> <location filename="../src/GUI/gui.cpp" line="1059"/>
<location filename="../src/GUI/gui.cpp" line="1124"/> <location filename="../src/GUI/gui.cpp" line="1125"/>
<source>Moving time</source> <source>Moving time</source>
<translation>Bewegungszeit</translation> <translation>Bewegungszeit</translation>
</message> </message>
@ -674,34 +684,34 @@
<translation>Formatvorlagen-Verzeichnis:</translation> <translation>Formatvorlagen-Verzeichnis:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1036"/> <location filename="../src/GUI/gui.cpp" line="1037"/>
<location filename="../src/GUI/gui.cpp" line="1104"/> <location filename="../src/GUI/gui.cpp" line="1105"/>
<source>Areas</source> <source>Areas</source>
<translation>Flächen</translation> <translation>Flächen</translation>
</message> </message>
<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="1080"/>
<location filename="../src/GUI/gui.cpp" line="1081"/>
<source>Statistics</source> <source>Statistics</source>
<translation>Statistiken</translation> <translation>Statistiken</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1312"/> <location filename="../src/GUI/gui.cpp" line="1313"/>
<source>Open map file</source> <source>Open map file</source>
<translation>Kartendatei öffnen</translation> <translation>Kartendatei öffnen</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1335"/> <location filename="../src/GUI/gui.cpp" line="1336"/>
<source>Error loading map:</source> <source>Error loading map:</source>
<translation>Fehler beim Laden der Kartendatei:</translation> <translation>Fehler beim Laden der Kartendatei:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1346"/> <location filename="../src/GUI/gui.cpp" line="1347"/>
<source>No files loaded</source> <source>No files loaded</source>
<translation>Keine Dateien geladen</translation> <translation>Keine Dateien geladen</translation>
</message> </message>
<message numerus="yes"> <message numerus="yes">
<location filename="../src/GUI/gui.cpp" line="1350"/> <location filename="../src/GUI/gui.cpp" line="1351"/>
<source>%n files</source> <source>%n files</source>
<translation> <translation>
<numerusform>%n Datei</numerusform> <numerusform>%n Datei</numerusform>
@ -709,16 +719,16 @@
</translation> </translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1042"/> <location filename="../src/GUI/gui.cpp" line="1043"/>
<location filename="../src/GUI/gui.cpp" line="1046"/> <location filename="../src/GUI/gui.cpp" line="1047"/>
<location filename="../src/GUI/gui.cpp" line="1110"/> <location filename="../src/GUI/gui.cpp" line="1111"/>
<location filename="../src/GUI/gui.cpp" line="1113"/> <location filename="../src/GUI/gui.cpp" line="1114"/>
<source>Date</source> <source>Date</source>
<translation>Datum</translation> <translation>Datum</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1030"/> <location filename="../src/GUI/gui.cpp" line="1031"/>
<location filename="../src/GUI/gui.cpp" line="1100"/> <location filename="../src/GUI/gui.cpp" line="1101"/>
<source>Routes</source> <source>Routes</source>
<translation>Routen</translation> <translation>Routen</translation>
</message> </message>
@ -738,8 +748,8 @@
<translation>Als PDF exportieren </translation> <translation>Als PDF exportieren </translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1033"/> <location filename="../src/GUI/gui.cpp" line="1034"/>
<location filename="../src/GUI/gui.cpp" line="1102"/> <location filename="../src/GUI/gui.cpp" line="1103"/>
<source>Waypoints</source> <source>Waypoints</source>
<translation>Wegpunkte</translation> <translation>Wegpunkte</translation>
</message> </message>
@ -820,13 +830,13 @@
<translation>Fehler beim Laden der POI-Datei:</translation> <translation>Fehler beim Laden der POI-Datei:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1094"/> <location filename="../src/GUI/gui.cpp" line="1095"/>
<source>Name</source> <source>Name</source>
<translation>Name</translation> <translation>Name</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1027"/> <location filename="../src/GUI/gui.cpp" line="1028"/>
<location filename="../src/GUI/gui.cpp" line="1098"/> <location filename="../src/GUI/gui.cpp" line="1099"/>
<source>Tracks</source> <source>Tracks</source>
<translation>Strecken</translation> <translation>Strecken</translation>
</message> </message>
@ -843,16 +853,16 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="369"/> <location filename="../src/GUI/gui.cpp" line="369"/>
<location filename="../src/GUI/gui.cpp" line="1053"/> <location filename="../src/GUI/gui.cpp" line="1054"/>
<location filename="../src/GUI/gui.cpp" line="1120"/> <location filename="../src/GUI/gui.cpp" line="1121"/>
<source>Distance</source> <source>Distance</source>
<translation>Distanz</translation> <translation>Distanz</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="376"/> <location filename="../src/GUI/gui.cpp" line="376"/>
<location filename="../src/GUI/gui.cpp" line="552"/> <location filename="../src/GUI/gui.cpp" line="552"/>
<location filename="../src/GUI/gui.cpp" line="1056"/> <location filename="../src/GUI/gui.cpp" line="1057"/>
<location filename="../src/GUI/gui.cpp" line="1122"/> <location filename="../src/GUI/gui.cpp" line="1123"/>
<source>Time</source> <source>Time</source>
<translation>Zeit</translation> <translation>Zeit</translation>
</message> </message>
@ -949,12 +959,12 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/graphview.cpp" line="66"/> <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> <source>Distance</source>
<translation>Distanz</translation> <translation>Distanz</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/graphview.cpp" line="175"/> <location filename="../src/GUI/graphview.cpp" line="179"/>
<source>Time</source> <source>Time</source>
<translation>Zeit</translation> <translation>Zeit</translation>
</message> </message>
@ -1053,478 +1063,488 @@
<context> <context>
<name>OptionsDialog</name> <name>OptionsDialog</name>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="169"/> <location filename="../src/GUI/optionsdialog.cpp" line="175"/>
<source>Base color:</source> <source>Base color:</source>
<translation>Grundfarbe:</translation> <translation>Grundfarbe:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="170"/> <location filename="../src/GUI/optionsdialog.cpp" line="176"/>
<source>Palette shift:</source> <source>Palette shift:</source>
<translation>Palettenverschiebung:</translation> <translation>Palettenverschiebung:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="114"/> <location filename="../src/GUI/optionsdialog.cpp" line="120"/>
<source>Track width:</source> <source>Track width:</source>
<translation>Streckenbreite:</translation> <translation>Streckenbreite:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="115"/> <location filename="../src/GUI/optionsdialog.cpp" line="121"/>
<source>Track style:</source> <source>Track style:</source>
<translation>Streckenstil:</translation> <translation>Streckenstil:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="119"/> <location filename="../src/GUI/optionsdialog.cpp" line="125"/>
<source>Tracks</source> <source>Tracks</source>
<translation>Strecken</translation> <translation>Strecken</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="131"/> <location filename="../src/GUI/optionsdialog.cpp" line="137"/>
<source>Route width:</source> <source>Route width:</source>
<translation>Routenbreite:</translation> <translation>Routenbreite:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="132"/> <location filename="../src/GUI/optionsdialog.cpp" line="138"/>
<source>Route style:</source> <source>Route style:</source>
<translation>Routenstil:</translation> <translation>Routenstil:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="136"/> <location filename="../src/GUI/optionsdialog.cpp" line="142"/>
<source>Routes</source> <source>Routes</source>
<translation>Routen</translation> <translation>Routen</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="172"/> <location filename="../src/GUI/optionsdialog.cpp" line="178"/>
<location filename="../src/GUI/optionsdialog.cpp" line="255"/> <location filename="../src/GUI/optionsdialog.cpp" line="261"/>
<source>Use anti-aliasing</source> <source>Use anti-aliasing</source>
<translation>Anti-Aliasing verwenden</translation> <translation>Anti-Aliasing verwenden</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="252"/> <location filename="../src/GUI/optionsdialog.cpp" line="258"/>
<source>Line width:</source> <source>Line width:</source>
<translation>Linienbreite:</translation> <translation>Linienbreite:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="276"/> <location filename="../src/GUI/optionsdialog.cpp" line="282"/>
<source>Background color:</source> <source>Background color:</source>
<translation>Hintergrundfarbe:</translation> <translation>Hintergrundfarbe:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="287"/> <location filename="../src/GUI/optionsdialog.cpp" line="293"/>
<source>Paths</source> <source>Paths</source>
<translation>Pfade</translation> <translation>Pfade</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="277"/> <location filename="../src/GUI/optionsdialog.cpp" line="283"/>
<source>Map opacity:</source> <source>Map opacity:</source>
<translation>Kartendeckkraft:</translation> <translation>Kartendeckkraft:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="290"/> <location filename="../src/GUI/optionsdialog.cpp" line="296"/>
<source>Map</source> <source>Map</source>
<translation>Karte</translation> <translation>Karte</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="289"/> <location filename="../src/GUI/optionsdialog.cpp" line="295"/>
<location filename="../src/GUI/optionsdialog.cpp" line="545"/> <location filename="../src/GUI/optionsdialog.cpp" line="575"/>
<source>Graphs</source> <source>Graphs</source>
<translation>Graphen</translation> <translation>Graphen</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="55"/> <location filename="../src/GUI/optionsdialog.cpp" line="61"/>
<source>High-resolution</source> <source>High-resolution</source>
<translation>Hohe Auflösung</translation> <translation>Hohe Auflösung</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="56"/> <location filename="../src/GUI/optionsdialog.cpp" line="62"/>
<source>Standard</source> <source>Standard</source>
<translation>Standardmäßig</translation> <translation>Standardmäßig</translation>
</message> </message>
<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> <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> <translation>Nicht-HiDPI-Karten werden als HiDPI-Karten geladen. Die Karte ist scharf, aber die Kartenobjekte sind klein / schwer zu lesen.</translation>
</message> </message>
<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> <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> <translation>Nicht-HiDPI-Karten werden so geladen, wie sie sind. Kartenobjekte haben die erwartete Größe, aber die Karte ist verschwommen.</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="98"/> <location filename="../src/GUI/optionsdialog.cpp" line="104"/>
<source>HiDPI display mode</source> <source>HiDPI display mode</source>
<translation>HiDPI-Anzeigemodus</translation> <translation>HiDPI-Anzeigemodus</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="117"/> <location filename="../src/GUI/optionsdialog.cpp" line="123"/>
<location filename="../src/GUI/optionsdialog.cpp" line="134"/> <location filename="../src/GUI/optionsdialog.cpp" line="140"/>
<location filename="../src/GUI/optionsdialog.cpp" line="153"/> <location filename="../src/GUI/optionsdialog.cpp" line="159"/>
<source>Width:</source> <source>Width:</source>
<translation>Breite:</translation> <translation>Breite:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="118"/> <location filename="../src/GUI/optionsdialog.cpp" line="124"/>
<location filename="../src/GUI/optionsdialog.cpp" line="135"/> <location filename="../src/GUI/optionsdialog.cpp" line="141"/>
<location filename="../src/GUI/optionsdialog.cpp" line="154"/> <location filename="../src/GUI/optionsdialog.cpp" line="160"/>
<source>Style:</source> <source>Style:</source>
<translation>Stil:</translation> <translation>Stil:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="205"/> <location filename="../src/GUI/optionsdialog.cpp" line="211"/>
<source>Waypoint color:</source> <source>Waypoint color:</source>
<translation>Wegpunkt-Farbe:</translation> <translation>Wegpunkt-Farbe:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="206"/> <location filename="../src/GUI/optionsdialog.cpp" line="212"/>
<source>Waypoint size:</source> <source>Waypoint size:</source>
<translation>Wegpunkt-Größe:</translation> <translation>Wegpunkt-Größe:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="208"/> <location filename="../src/GUI/optionsdialog.cpp" line="214"/>
<location filename="../src/GUI/optionsdialog.cpp" line="224"/> <location filename="../src/GUI/optionsdialog.cpp" line="230"/>
<source>Color:</source> <source>Color:</source>
<translation>Farbe:</translation> <translation>Farbe:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="209"/> <location filename="../src/GUI/optionsdialog.cpp" line="215"/>
<location filename="../src/GUI/optionsdialog.cpp" line="225"/> <location filename="../src/GUI/optionsdialog.cpp" line="231"/>
<source>Size:</source> <source>Size:</source>
<translation>Größe:</translation> <translation>Größe:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="210"/> <location filename="../src/GUI/optionsdialog.cpp" line="216"/>
<source>Waypoints</source> <source>Waypoints</source>
<translation>Wegpunkte</translation> <translation>Wegpunkte</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="221"/> <location filename="../src/GUI/optionsdialog.cpp" line="227"/>
<source>POI color:</source> <source>POI color:</source>
<translation>POI-Farbe:</translation> <translation>POI-Farbe:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="222"/> <location filename="../src/GUI/optionsdialog.cpp" line="228"/>
<source>POI size:</source> <source>POI size:</source>
<translation>POI-Größe:</translation> <translation>POI-Größe:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="226"/> <location filename="../src/GUI/optionsdialog.cpp" line="232"/>
<source>POIs</source> <source>POIs</source>
<translation>POIs</translation> <translation>POIs</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="253"/> <location filename="../src/GUI/optionsdialog.cpp" line="259"/>
<source>Slider color:</source> <source>Slider color:</source>
<translation>Schieber-Farbe:</translation> <translation>Schieber-Farbe:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="288"/> <location filename="../src/GUI/optionsdialog.cpp" line="294"/>
<source>Points</source> <source>Points</source>
<translation>Punkte</translation> <translation>Punkte</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="297"/> <location filename="../src/GUI/optionsdialog.cpp" line="303"/>
<source>Moving average window size</source> <source>Moving average window size</source>
<translation>Fensterbreite des gleitenden Mittelwerts</translation> <translation>Fensterbreite des gleitenden Mittelwerts</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="316"/> <location filename="../src/GUI/optionsdialog.cpp" line="322"/>
<location filename="../src/GUI/optionsdialog.cpp" line="402"/> <location filename="../src/GUI/optionsdialog.cpp" line="432"/>
<location filename="../src/GUI/optionsdialog.cpp" line="465"/> <location filename="../src/GUI/optionsdialog.cpp" line="495"/>
<source>Elevation:</source> <source>Elevation:</source>
<translation>Höhe:</translation> <translation>Höhe:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="317"/> <location filename="../src/GUI/optionsdialog.cpp" line="323"/>
<location filename="../src/GUI/optionsdialog.cpp" line="401"/> <location filename="../src/GUI/optionsdialog.cpp" line="431"/>
<source>Speed:</source> <source>Speed:</source>
<translation>Geschwindigkeit:</translation> <translation>Geschwindigkeit:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="318"/> <location filename="../src/GUI/optionsdialog.cpp" line="324"/>
<source>Heart rate:</source> <source>Heart rate:</source>
<translation>Herzfrequenz:</translation> <translation>Herzfrequenz:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="319"/> <location filename="../src/GUI/optionsdialog.cpp" line="325"/>
<source>Cadence:</source> <source>Cadence:</source>
<translation>Frequenz:</translation> <translation>Frequenz:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="320"/> <location filename="../src/GUI/optionsdialog.cpp" line="326"/>
<source>Power:</source> <source>Power:</source>
<translation>Leistung:</translation> <translation>Leistung:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="322"/> <location filename="../src/GUI/optionsdialog.cpp" line="328"/>
<source>Smoothing</source> <source>Smoothing</source>
<translation>Glätten</translation> <translation>Glätten</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="326"/> <location filename="../src/GUI/optionsdialog.cpp" line="332"/>
<source>Eliminate GPS outliers</source> <source>Eliminate GPS outliers</source>
<translation>GPS-Ausreißer entfernen</translation> <translation>GPS-Ausreißer entfernen</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="335"/> <location filename="../src/GUI/optionsdialog.cpp" line="341"/>
<source>Smoothing:</source> <source>Smoothing:</source>
<translation>Glätten:</translation> <translation>Glätten:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="352"/> <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> <source>mi/h</source>
<translation>mi/h</translation> <translation>mi/h</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="355"/> <location filename="../src/GUI/optionsdialog.cpp" line="369"/>
<source>kn</source> <source>kn</source>
<translation>kn</translation> <translation>kn</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="358"/> <location filename="../src/GUI/optionsdialog.cpp" line="372"/>
<source>km/h</source> <source>km/h</source>
<translation>km/h</translation> <translation>km/h</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="362"/> <location filename="../src/GUI/optionsdialog.cpp" line="376"/>
<location filename="../src/GUI/optionsdialog.cpp" line="568"/> <location filename="../src/GUI/optionsdialog.cpp" line="598"/>
<source>s</source> <source>s</source>
<translation>sek</translation> <translation>sek</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="366"/> <location filename="../src/GUI/optionsdialog.cpp" line="392"/>
<source>Minimal speed:</source> <source>Minimal speed:</source>
<translation>Minimale Geschwindigkeit:</translation> <translation>Minimale Geschwindigkeit:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="367"/> <location filename="../src/GUI/optionsdialog.cpp" line="393"/>
<source>Minimal duration:</source> <source>Minimal duration:</source>
<translation>Minimale Dauer:</translation> <translation>Minimale Dauer:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="373"/> <location filename="../src/GUI/optionsdialog.cpp" line="403"/>
<source>Computed from distance/time</source> <source>Computed from distance/time</source>
<translation>Berechnet aus Entfernung/Zeit</translation> <translation>Berechnet aus Entfernung/Zeit</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="374"/> <location filename="../src/GUI/optionsdialog.cpp" line="404"/>
<source>Recorded by device</source> <source>Recorded by device</source>
<translation>Aufgezeichnet von Gerät</translation> <translation>Aufgezeichnet von Gerät</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="380"/> <location filename="../src/GUI/optionsdialog.cpp" line="410"/>
<location filename="../src/GUI/optionsdialog.cpp" line="438"/> <location filename="../src/GUI/optionsdialog.cpp" line="468"/>
<source>GPS data</source> <source>GPS data</source>
<translation>GPS-Daten</translation> <translation>GPS-Daten</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="381"/> <location filename="../src/GUI/optionsdialog.cpp" line="411"/>
<location filename="../src/GUI/optionsdialog.cpp" line="439"/> <location filename="../src/GUI/optionsdialog.cpp" line="469"/>
<source>DEM data</source> <source>DEM data</source>
<translation>DEM-Daten</translation> <translation>DEM-Daten</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="418"/> <location filename="../src/GUI/optionsdialog.cpp" line="448"/>
<source>Elevation</source> <source>Elevation</source>
<translation>Höhe</translation> <translation>Höhe</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="429"/> <location filename="../src/GUI/optionsdialog.cpp" line="459"/>
<source>Filtering</source> <source>Filtering</source>
<translation>Datenfilterung</translation> <translation>Datenfilterung</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="430"/> <location filename="../src/GUI/optionsdialog.cpp" line="460"/>
<source>Sources</source> <source>Sources</source>
<translation>Datenquellen</translation> <translation>Datenquellen</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="431"/> <location filename="../src/GUI/optionsdialog.cpp" line="461"/>
<source>Pause detection</source> <source>Pause detection</source>
<translation>Pausenerkennung</translation> <translation>Pausenerkennung</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="464"/> <location filename="../src/GUI/optionsdialog.cpp" line="494"/>
<source>Radius:</source> <source>Radius:</source>
<translation>Radius:</translation> <translation>Radius:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="412"/> <location filename="../src/GUI/optionsdialog.cpp" line="442"/>
<source>Speed</source> <source>Speed</source>
<translation>Geschwindigkeit</translation> <translation>Geschwindigkeit</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="74"/> <location filename="../src/GUI/optionsdialog.cpp" line="80"/>
<source>Projection:</source> <source>Projection:</source>
<translation>Projektion:</translation> <translation>Projektion:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="96"/> <location filename="../src/GUI/optionsdialog.cpp" line="102"/>
<source>Vector maps</source> <source>Vector maps</source>
<translation>Vektorkarten</translation> <translation>Vektorkarten</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="149"/> <location filename="../src/GUI/optionsdialog.cpp" line="155"/>
<source>Area border width:</source> <source>Area border width:</source>
<translation>Flächen-Randbreite:</translation> <translation>Flächen-Randbreite:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="150"/> <location filename="../src/GUI/optionsdialog.cpp" line="156"/>
<source>Area border style:</source> <source>Area border style:</source>
<translation>Flächen-Randstil:</translation> <translation>Flächen-Randstil:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="151"/> <location filename="../src/GUI/optionsdialog.cpp" line="157"/>
<source>Area fill opacity:</source> <source>Area fill opacity:</source>
<translation>Flächendeckkraft:</translation> <translation>Flächendeckkraft:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="155"/> <location filename="../src/GUI/optionsdialog.cpp" line="161"/>
<source>Fill opacity:</source> <source>Fill opacity:</source>
<translation>Deckkraft:</translation> <translation>Deckkraft:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="156"/> <location filename="../src/GUI/optionsdialog.cpp" line="162"/>
<source>Areas</source> <source>Areas</source>
<translation>Flächen</translation> <translation>Flächen</translation>
</message> </message>
<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> <source>mi</source>
<translation>mi</translation> <translation>mi</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="453"/> <location filename="../src/GUI/optionsdialog.cpp" line="483"/>
<source>nmi</source> <source>nmi</source>
<translation>nmi</translation> <translation>nmi</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="456"/> <location filename="../src/GUI/optionsdialog.cpp" line="486"/>
<source>km</source> <source>km</source>
<translation>km</translation> <translation>km</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="471"/> <location filename="../src/GUI/optionsdialog.cpp" line="501"/>
<location filename="../src/GUI/optionsdialog.cpp" line="611"/> <location filename="../src/GUI/optionsdialog.cpp" line="641"/>
<source>POI</source> <source>POI</source>
<translation>POI</translation> <translation>POI</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="478"/> <location filename="../src/GUI/optionsdialog.cpp" line="508"/>
<source>WYSIWYG</source> <source>WYSIWYG</source>
<translation>WYSIWYG</translation> <translation>WYSIWYG</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="479"/> <location filename="../src/GUI/optionsdialog.cpp" line="509"/>
<source>High-Resolution</source> <source>High-Resolution</source>
<translation>Hohe Auflösung</translation> <translation>Hohe Auflösung</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="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> <source>The printed area is approximately the display area. The map zoom level does not change.</source>
<translation>Der Druckbereich entspricht ungefähr dem Anzeigebereich. Das Karten-Zoom ändert sich nicht.</translation> <translation>Der Druckbereich entspricht ungefähr dem Anzeigebereich. Das Karten-Zoom ändert sich nicht.</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="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> <source>The zoom level will be changed so that the whole content (tracks/waypoints) fits to the printed area and the map resolution is as close as possible to the print resolution.</source>
<translation>Das Karten-Zoom ändert sich so, dass der ganze Inhalt (Strecken/Wegpunkte) in den Druckbereich passen und die Kartenauflösung so nah wie möglich an der Druckauflösung ist.</translation> <translation>Das Karten-Zoom ändert sich so, dass der ganze Inhalt (Strecken/Wegpunkte) in den Druckbereich passen und die Kartenauflösung so nah wie möglich an der Druckauflösung ist.</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="508"/> <location filename="../src/GUI/optionsdialog.cpp" line="538"/>
<source>Name</source> <source>Name</source>
<translation>Name</translation> <translation>Name</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="510"/> <location filename="../src/GUI/optionsdialog.cpp" line="540"/>
<source>Date</source> <source>Date</source>
<translation>Datum</translation> <translation>Datum</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="512"/> <location filename="../src/GUI/optionsdialog.cpp" line="542"/>
<source>Distance</source> <source>Distance</source>
<translation>Distanz</translation> <translation>Distanz</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="514"/> <location filename="../src/GUI/optionsdialog.cpp" line="544"/>
<source>Time</source> <source>Time</source>
<translation>Zeit</translation> <translation>Zeit</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="516"/> <location filename="../src/GUI/optionsdialog.cpp" line="546"/>
<source>Moving time</source> <source>Moving time</source>
<translation>Bewegungszeit</translation> <translation>Bewegungszeit</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="518"/> <location filename="../src/GUI/optionsdialog.cpp" line="548"/>
<source>Item count (&gt;1)</source> <source>Item count (&gt;1)</source>
<translation>Elementanzahl (&gt;1)</translation> <translation>Elementanzahl (&gt;1)</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="533"/> <location filename="../src/GUI/optionsdialog.cpp" line="563"/>
<source>Separate graph page</source> <source>Separate graph page</source>
<translation>Separate Seite für Graphen</translation> <translation>Separate Seite für Graphen</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="543"/> <location filename="../src/GUI/optionsdialog.cpp" line="573"/>
<source>Print mode</source> <source>Print mode</source>
<translation>Druckmodus</translation> <translation>Druckmodus</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="544"/> <location filename="../src/GUI/optionsdialog.cpp" line="574"/>
<source>Header</source> <source>Header</source>
<translation>Kopfzeile</translation> <translation>Kopfzeile</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="552"/> <location filename="../src/GUI/optionsdialog.cpp" line="582"/>
<source>Use OpenGL</source> <source>Use OpenGL</source>
<translation>OpenGL verwenden</translation> <translation>OpenGL verwenden</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="555"/> <location filename="../src/GUI/optionsdialog.cpp" line="585"/>
<source>Enable HTTP/2</source> <source>Enable HTTP/2</source>
<translation>HTTP/2 verwenden</translation> <translation>HTTP/2 verwenden</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="562"/> <location filename="../src/GUI/optionsdialog.cpp" line="592"/>
<source>MB</source> <source>MB</source>
<translation>MB</translation> <translation>MB</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="572"/> <location filename="../src/GUI/optionsdialog.cpp" line="602"/>
<source>Image cache size:</source> <source>Image cache size:</source>
<translation>Bild-Cachegröße:</translation> <translation>Bild-Cachegröße:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="573"/> <location filename="../src/GUI/optionsdialog.cpp" line="603"/>
<source>Connection timeout:</source> <source>Connection timeout:</source>
<translation>Verbindungs-Timeout:</translation> <translation>Verbindungs-Timeout:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="589"/> <location filename="../src/GUI/optionsdialog.cpp" line="619"/>
<location filename="../src/GUI/optionsdialog.cpp" line="614"/> <location filename="../src/GUI/optionsdialog.cpp" line="644"/>
<source>System</source> <source>System</source>
<translation>System</translation> <translation>System</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="607"/> <location filename="../src/GUI/optionsdialog.cpp" line="637"/>
<source>Appearance</source> <source>Appearance</source>
<translation>Erscheinungsbild</translation> <translation>Erscheinungsbild</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="609"/> <location filename="../src/GUI/optionsdialog.cpp" line="639"/>
<source>Maps</source> <source>Maps</source>
<translation>Karten</translation> <translation>Karten</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="610"/> <location filename="../src/GUI/optionsdialog.cpp" line="640"/>
<source>Data</source> <source>Data</source>
<translation>Daten</translation> <translation>Daten</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="612"/> <location filename="../src/GUI/optionsdialog.cpp" line="642"/>
<source>Print &amp; Export</source> <source>Print &amp; Export</source>
<translation>Druck / Export</translation> <translation>Druck / Export</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="641"/> <location filename="../src/GUI/optionsdialog.cpp" line="671"/>
<source>Options</source> <source>Options</source>
<translation>Einstellungen</translation> <translation>Einstellungen</translation>
</message> </message>
@ -1867,7 +1887,12 @@
<translation>Beschreibung</translation> <translation>Beschreibung</translation>
</message> </message>
<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> <source>Links</source>
<translation>Links</translation> <translation>Links</translation>
</message> </message>

File diff suppressed because it is too large Load Diff

View File

@ -47,77 +47,87 @@
<context> <context>
<name>Data</name> <name>Data</name>
<message> <message>
<location filename="../src/data/data.cpp" line="173"/> <location filename="../src/data/data.cpp" line="179"/>
<source>Supported files</source> <source>Supported files</source>
<translation>Tuetut tiedostot</translation> <translation>Tuetut tiedostot</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="174"/> <location filename="../src/data/data.cpp" line="180"/>
<source>CSV files</source> <source>CSV files</source>
<translation>CSV-tiedostot</translation> <translation>CSV-tiedostot</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="175"/> <location filename="../src/data/data.cpp" line="181"/>
<source>CUP files</source> <source>CUP files</source>
<translation>CUP-tiedostot</translation> <translation>CUP-tiedostot</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="176"/> <location filename="../src/data/data.cpp" line="182"/>
<source>FIT files</source> <source>FIT files</source>
<translation>FIT-tiedostot</translation> <translation>FIT-tiedostot</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="178"/> <location filename="../src/data/data.cpp" line="184"/>
<source>GeoJSON files</source> <source>GeoJSON files</source>
<translation>GeoJSON-tiedostot</translation> <translation>GeoJSON-tiedostot</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="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> <source>GPX files</source>
<translation>GPX-tiedostot</translation> <translation>GPX-tiedostot</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="181"/> <location filename="../src/data/data.cpp" line="188"/>
<source>IGC files</source> <source>IGC files</source>
<translation>IGC-tiedostot</translation> <translation>IGC-tiedostot</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="182"/> <location filename="../src/data/data.cpp" line="189"/>
<source>JPEG images</source> <source>JPEG images</source>
<translation>JPEG-kuvat</translation> <translation>JPEG-kuvat</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="183"/> <location filename="../src/data/data.cpp" line="190"/>
<source>KML files</source> <source>KML files</source>
<translation>KML-tiedostot</translation> <translation>KML-tiedostot</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="184"/> <location filename="../src/data/data.cpp" line="191"/>
<source>LOC files</source> <source>LOC files</source>
<translation>LOC-tiedostot</translation> <translation>LOC-tiedostot</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="185"/> <location filename="../src/data/data.cpp" line="192"/>
<source>NMEA files</source> <source>NMEA files</source>
<translation>NMEA-tiedostot</translation> <translation>NMEA-tiedostot</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="186"/> <location filename="../src/data/data.cpp" line="193"/>
<source>OziExplorer files</source> <source>OziExplorer files</source>
<translation>OziExplorer-tiedostot</translation> <translation>OziExplorer-tiedostot</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="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> <source>TCX files</source>
<translation>TCX-tiedostot</translation> <translation>TCX-tiedostot</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="187"/> <location filename="../src/data/data.cpp" line="194"/>
<source>SLF files</source> <source>SLF files</source>
<translation>SLF-tiedostot</translation> <translation>SLF-tiedostot</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="189"/> <location filename="../src/data/data.cpp" line="197"/>
<source>All files</source> <source>All files</source>
<translation>Kaikki tiedostot</translation> <translation>Kaikki tiedostot</translation>
</message> </message>
@ -508,8 +518,8 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="413"/> <location filename="../src/GUI/gui.cpp" line="413"/>
<location filename="../src/GUI/gui.cpp" line="1058"/> <location filename="../src/GUI/gui.cpp" line="1059"/>
<location filename="../src/GUI/gui.cpp" line="1124"/> <location filename="../src/GUI/gui.cpp" line="1125"/>
<source>Moving time</source> <source>Moving time</source>
<translation>Liikkumisaika</translation> <translation>Liikkumisaika</translation>
</message> </message>
@ -664,32 +674,32 @@
<translation>Tyylitiedostoiden hakemisto:</translation> <translation>Tyylitiedostoiden hakemisto:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1036"/> <location filename="../src/GUI/gui.cpp" line="1037"/>
<location filename="../src/GUI/gui.cpp" line="1104"/> <location filename="../src/GUI/gui.cpp" line="1105"/>
<source>Areas</source> <source>Areas</source>
<translation>Alueet</translation> <translation>Alueet</translation>
</message> </message>
<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="1080"/>
<location filename="../src/GUI/gui.cpp" line="1081"/>
<source>Statistics</source> <source>Statistics</source>
<translation>Tilasto</translation> <translation>Tilasto</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1312"/> <location filename="../src/GUI/gui.cpp" line="1313"/>
<source>Open map file</source> <source>Open map file</source>
<translation>Avaa karttatiedosto</translation> <translation>Avaa karttatiedosto</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1346"/> <location filename="../src/GUI/gui.cpp" line="1347"/>
<source>No files loaded</source> <source>No files loaded</source>
<translation>Yhtään tiedostoa ei ladattu</translation> <translation>Yhtään tiedostoa ei ladattu</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1042"/> <location filename="../src/GUI/gui.cpp" line="1043"/>
<location filename="../src/GUI/gui.cpp" line="1046"/> <location filename="../src/GUI/gui.cpp" line="1047"/>
<location filename="../src/GUI/gui.cpp" line="1110"/> <location filename="../src/GUI/gui.cpp" line="1111"/>
<location filename="../src/GUI/gui.cpp" line="1113"/> <location filename="../src/GUI/gui.cpp" line="1114"/>
<source>Date</source> <source>Date</source>
<translation>Päivämäärä</translation> <translation>Päivämäärä</translation>
</message> </message>
@ -744,18 +754,18 @@
<translation>Välimuistin hakemisto:</translation> <translation>Välimuistin hakemisto:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1030"/> <location filename="../src/GUI/gui.cpp" line="1031"/>
<location filename="../src/GUI/gui.cpp" line="1100"/> <location filename="../src/GUI/gui.cpp" line="1101"/>
<source>Routes</source> <source>Routes</source>
<translation>Reitit</translation> <translation>Reitit</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1335"/> <location filename="../src/GUI/gui.cpp" line="1336"/>
<source>Error loading map:</source> <source>Error loading map:</source>
<translation>Virhe ladattaessa karttaa:</translation> <translation>Virhe ladattaessa karttaa:</translation>
</message> </message>
<message numerus="yes"> <message numerus="yes">
<location filename="../src/GUI/gui.cpp" line="1350"/> <location filename="../src/GUI/gui.cpp" line="1351"/>
<source>%n files</source> <source>%n files</source>
<translation> <translation>
<numerusform>%n tiedosto</numerusform> <numerusform>%n tiedosto</numerusform>
@ -778,8 +788,8 @@
<translation>Vie PDF:ksi...</translation> <translation>Vie PDF:ksi...</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1033"/> <location filename="../src/GUI/gui.cpp" line="1034"/>
<location filename="../src/GUI/gui.cpp" line="1102"/> <location filename="../src/GUI/gui.cpp" line="1103"/>
<source>Waypoints</source> <source>Waypoints</source>
<translation>Reittipisteet</translation> <translation>Reittipisteet</translation>
</message> </message>
@ -820,13 +830,13 @@
<translation>Virhe ladattaessa POI-tiedostoa:</translation> <translation>Virhe ladattaessa POI-tiedostoa:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1094"/> <location filename="../src/GUI/gui.cpp" line="1095"/>
<source>Name</source> <source>Name</source>
<translation>Nimi</translation> <translation>Nimi</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1027"/> <location filename="../src/GUI/gui.cpp" line="1028"/>
<location filename="../src/GUI/gui.cpp" line="1098"/> <location filename="../src/GUI/gui.cpp" line="1099"/>
<source>Tracks</source> <source>Tracks</source>
<translation>Jäljet</translation> <translation>Jäljet</translation>
</message> </message>
@ -843,16 +853,16 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="369"/> <location filename="../src/GUI/gui.cpp" line="369"/>
<location filename="../src/GUI/gui.cpp" line="1053"/> <location filename="../src/GUI/gui.cpp" line="1054"/>
<location filename="../src/GUI/gui.cpp" line="1120"/> <location filename="../src/GUI/gui.cpp" line="1121"/>
<source>Distance</source> <source>Distance</source>
<translation>Etäisyys</translation> <translation>Etäisyys</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="376"/> <location filename="../src/GUI/gui.cpp" line="376"/>
<location filename="../src/GUI/gui.cpp" line="552"/> <location filename="../src/GUI/gui.cpp" line="552"/>
<location filename="../src/GUI/gui.cpp" line="1056"/> <location filename="../src/GUI/gui.cpp" line="1057"/>
<location filename="../src/GUI/gui.cpp" line="1122"/> <location filename="../src/GUI/gui.cpp" line="1123"/>
<source>Time</source> <source>Time</source>
<translation>Aika</translation> <translation>Aika</translation>
</message> </message>
@ -949,12 +959,12 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/graphview.cpp" line="66"/> <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> <source>Distance</source>
<translation>Etäisyys</translation> <translation>Etäisyys</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/graphview.cpp" line="175"/> <location filename="../src/GUI/graphview.cpp" line="179"/>
<source>Time</source> <source>Time</source>
<translation>Aika</translation> <translation>Aika</translation>
</message> </message>
@ -1053,478 +1063,488 @@
<context> <context>
<name>OptionsDialog</name> <name>OptionsDialog</name>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="169"/> <location filename="../src/GUI/optionsdialog.cpp" line="175"/>
<source>Base color:</source> <source>Base color:</source>
<translation>Pohjaväri:</translation> <translation>Pohjaväri:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="170"/> <location filename="../src/GUI/optionsdialog.cpp" line="176"/>
<source>Palette shift:</source> <source>Palette shift:</source>
<translation>Paletin muutos:</translation> <translation>Paletin muutos:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="114"/> <location filename="../src/GUI/optionsdialog.cpp" line="120"/>
<source>Track width:</source> <source>Track width:</source>
<translation>Jäljen leveys:</translation> <translation>Jäljen leveys:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="115"/> <location filename="../src/GUI/optionsdialog.cpp" line="121"/>
<source>Track style:</source> <source>Track style:</source>
<translation>Jäljen tyyli:</translation> <translation>Jäljen tyyli:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="119"/> <location filename="../src/GUI/optionsdialog.cpp" line="125"/>
<source>Tracks</source> <source>Tracks</source>
<translation>Jäljet</translation> <translation>Jäljet</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="131"/> <location filename="../src/GUI/optionsdialog.cpp" line="137"/>
<source>Route width:</source> <source>Route width:</source>
<translation>Reitin leveys:</translation> <translation>Reitin leveys:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="132"/> <location filename="../src/GUI/optionsdialog.cpp" line="138"/>
<source>Route style:</source> <source>Route style:</source>
<translation>Reitin tyyli:</translation> <translation>Reitin tyyli:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="136"/> <location filename="../src/GUI/optionsdialog.cpp" line="142"/>
<source>Routes</source> <source>Routes</source>
<translation>Reitit</translation> <translation>Reitit</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="172"/> <location filename="../src/GUI/optionsdialog.cpp" line="178"/>
<location filename="../src/GUI/optionsdialog.cpp" line="255"/> <location filename="../src/GUI/optionsdialog.cpp" line="261"/>
<source>Use anti-aliasing</source> <source>Use anti-aliasing</source>
<translation>Käytä reunanpehmennystä</translation> <translation>Käytä reunanpehmennystä</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="252"/> <location filename="../src/GUI/optionsdialog.cpp" line="258"/>
<source>Line width:</source> <source>Line width:</source>
<translation>Viivan leveys:</translation> <translation>Viivan leveys:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="276"/> <location filename="../src/GUI/optionsdialog.cpp" line="282"/>
<source>Background color:</source> <source>Background color:</source>
<translation>Taustan väri:</translation> <translation>Taustan väri:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="287"/> <location filename="../src/GUI/optionsdialog.cpp" line="293"/>
<source>Paths</source> <source>Paths</source>
<translation>Jäljet</translation> <translation>Jäljet</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="277"/> <location filename="../src/GUI/optionsdialog.cpp" line="283"/>
<source>Map opacity:</source> <source>Map opacity:</source>
<translation>Kartan läpinäkymättömyys:</translation> <translation>Kartan läpinäkymättömyys:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="290"/> <location filename="../src/GUI/optionsdialog.cpp" line="296"/>
<source>Map</source> <source>Map</source>
<translation>Kartat</translation> <translation>Kartat</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="289"/> <location filename="../src/GUI/optionsdialog.cpp" line="295"/>
<location filename="../src/GUI/optionsdialog.cpp" line="545"/> <location filename="../src/GUI/optionsdialog.cpp" line="575"/>
<source>Graphs</source> <source>Graphs</source>
<translation>Kaaviokuvat</translation> <translation>Kaaviokuvat</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="55"/> <location filename="../src/GUI/optionsdialog.cpp" line="61"/>
<source>High-resolution</source> <source>High-resolution</source>
<translation>Korkea resoluutio</translation> <translation>Korkea resoluutio</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="56"/> <location filename="../src/GUI/optionsdialog.cpp" line="62"/>
<source>Standard</source> <source>Standard</source>
<translation>Vakioresoluutio</translation> <translation>Vakioresoluutio</translation>
</message> </message>
<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> <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> <translation>Ei-HiDPI-kartat ladataan HiDPI-karttoina. Kartta on terävä, mutta karttakohteet ovat pieniä/vaikeasti luettavia.</translation>
</message> </message>
<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> <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> <translation>Ei-HiDPI-kartat ladataan kuten ne ovat. Karttakohteilla on odotettu koko, mutta kartta on epäselvä.</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="98"/> <location filename="../src/GUI/optionsdialog.cpp" line="104"/>
<source>HiDPI display mode</source> <source>HiDPI display mode</source>
<translation>HiDPI-näyttötila</translation> <translation>HiDPI-näyttötila</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="117"/> <location filename="../src/GUI/optionsdialog.cpp" line="123"/>
<location filename="../src/GUI/optionsdialog.cpp" line="134"/> <location filename="../src/GUI/optionsdialog.cpp" line="140"/>
<location filename="../src/GUI/optionsdialog.cpp" line="153"/> <location filename="../src/GUI/optionsdialog.cpp" line="159"/>
<source>Width:</source> <source>Width:</source>
<translation>Leveys:</translation> <translation>Leveys:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="118"/> <location filename="../src/GUI/optionsdialog.cpp" line="124"/>
<location filename="../src/GUI/optionsdialog.cpp" line="135"/> <location filename="../src/GUI/optionsdialog.cpp" line="141"/>
<location filename="../src/GUI/optionsdialog.cpp" line="154"/> <location filename="../src/GUI/optionsdialog.cpp" line="160"/>
<source>Style:</source> <source>Style:</source>
<translation>Tyyli:</translation> <translation>Tyyli:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="205"/> <location filename="../src/GUI/optionsdialog.cpp" line="211"/>
<source>Waypoint color:</source> <source>Waypoint color:</source>
<translation>Reittipisteen väri:</translation> <translation>Reittipisteen väri:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="206"/> <location filename="../src/GUI/optionsdialog.cpp" line="212"/>
<source>Waypoint size:</source> <source>Waypoint size:</source>
<translation>Reittipisteen koko:</translation> <translation>Reittipisteen koko:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="208"/> <location filename="../src/GUI/optionsdialog.cpp" line="214"/>
<location filename="../src/GUI/optionsdialog.cpp" line="224"/> <location filename="../src/GUI/optionsdialog.cpp" line="230"/>
<source>Color:</source> <source>Color:</source>
<translation>Väri:</translation> <translation>Väri:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="209"/> <location filename="../src/GUI/optionsdialog.cpp" line="215"/>
<location filename="../src/GUI/optionsdialog.cpp" line="225"/> <location filename="../src/GUI/optionsdialog.cpp" line="231"/>
<source>Size:</source> <source>Size:</source>
<translation>Koko:</translation> <translation>Koko:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="210"/> <location filename="../src/GUI/optionsdialog.cpp" line="216"/>
<source>Waypoints</source> <source>Waypoints</source>
<translation>Reittipisteet</translation> <translation>Reittipisteet</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="221"/> <location filename="../src/GUI/optionsdialog.cpp" line="227"/>
<source>POI color:</source> <source>POI color:</source>
<translation>POI:n väri:</translation> <translation>POI:n väri:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="222"/> <location filename="../src/GUI/optionsdialog.cpp" line="228"/>
<source>POI size:</source> <source>POI size:</source>
<translation>POI:n koko:</translation> <translation>POI:n koko:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="226"/> <location filename="../src/GUI/optionsdialog.cpp" line="232"/>
<source>POIs</source> <source>POIs</source>
<translation>POI:t</translation> <translation>POI:t</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="253"/> <location filename="../src/GUI/optionsdialog.cpp" line="259"/>
<source>Slider color:</source> <source>Slider color:</source>
<translation>Liukusäätimen väri:</translation> <translation>Liukusäätimen väri:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="288"/> <location filename="../src/GUI/optionsdialog.cpp" line="294"/>
<source>Points</source> <source>Points</source>
<translation>Pisteet</translation> <translation>Pisteet</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="297"/> <location filename="../src/GUI/optionsdialog.cpp" line="303"/>
<source>Moving average window size</source> <source>Moving average window size</source>
<translation>Liukuvan keskiarvon ikkunan koko</translation> <translation>Liukuvan keskiarvon ikkunan koko</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="316"/> <location filename="../src/GUI/optionsdialog.cpp" line="322"/>
<location filename="../src/GUI/optionsdialog.cpp" line="402"/> <location filename="../src/GUI/optionsdialog.cpp" line="432"/>
<location filename="../src/GUI/optionsdialog.cpp" line="465"/> <location filename="../src/GUI/optionsdialog.cpp" line="495"/>
<source>Elevation:</source> <source>Elevation:</source>
<translation>Korkeus:</translation> <translation>Korkeus:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="317"/> <location filename="../src/GUI/optionsdialog.cpp" line="323"/>
<location filename="../src/GUI/optionsdialog.cpp" line="401"/> <location filename="../src/GUI/optionsdialog.cpp" line="431"/>
<source>Speed:</source> <source>Speed:</source>
<translation>Vauhti:</translation> <translation>Vauhti:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="318"/> <location filename="../src/GUI/optionsdialog.cpp" line="324"/>
<source>Heart rate:</source> <source>Heart rate:</source>
<translation>Sydämen syke:</translation> <translation>Sydämen syke:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="319"/> <location filename="../src/GUI/optionsdialog.cpp" line="325"/>
<source>Cadence:</source> <source>Cadence:</source>
<translation>Kadenssi:</translation> <translation>Kadenssi:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="320"/> <location filename="../src/GUI/optionsdialog.cpp" line="326"/>
<source>Power:</source> <source>Power:</source>
<translation>Teho:</translation> <translation>Teho:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="322"/> <location filename="../src/GUI/optionsdialog.cpp" line="328"/>
<source>Smoothing</source> <source>Smoothing</source>
<translation>Silotus</translation> <translation>Silotus</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="326"/> <location filename="../src/GUI/optionsdialog.cpp" line="332"/>
<source>Eliminate GPS outliers</source> <source>Eliminate GPS outliers</source>
<translation>Poista poikkeavat GPS-havainnot</translation> <translation>Poista poikkeavat GPS-havainnot</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="335"/> <location filename="../src/GUI/optionsdialog.cpp" line="341"/>
<source>Smoothing:</source> <source>Smoothing:</source>
<translation>Silotus:</translation> <translation>Silotus:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="352"/> <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> <source>mi/h</source>
<translation>mph</translation> <translation>mph</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="355"/> <location filename="../src/GUI/optionsdialog.cpp" line="369"/>
<source>kn</source> <source>kn</source>
<translation>kn</translation> <translation>kn</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="358"/> <location filename="../src/GUI/optionsdialog.cpp" line="372"/>
<source>km/h</source> <source>km/h</source>
<translation>km/t</translation> <translation>km/t</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="362"/> <location filename="../src/GUI/optionsdialog.cpp" line="376"/>
<location filename="../src/GUI/optionsdialog.cpp" line="568"/> <location filename="../src/GUI/optionsdialog.cpp" line="598"/>
<source>s</source> <source>s</source>
<translation>s</translation> <translation>s</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="366"/> <location filename="../src/GUI/optionsdialog.cpp" line="392"/>
<source>Minimal speed:</source> <source>Minimal speed:</source>
<translation>Minimivauhti:</translation> <translation>Minimivauhti:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="367"/> <location filename="../src/GUI/optionsdialog.cpp" line="393"/>
<source>Minimal duration:</source> <source>Minimal duration:</source>
<translation>Minimikesto:</translation> <translation>Minimikesto:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="373"/> <location filename="../src/GUI/optionsdialog.cpp" line="403"/>
<source>Computed from distance/time</source> <source>Computed from distance/time</source>
<translation>Laskettu etäisyydestä/ajasta</translation> <translation>Laskettu etäisyydestä/ajasta</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="374"/> <location filename="../src/GUI/optionsdialog.cpp" line="404"/>
<source>Recorded by device</source> <source>Recorded by device</source>
<translation>Tallennettu laitteella</translation> <translation>Tallennettu laitteella</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="380"/> <location filename="../src/GUI/optionsdialog.cpp" line="410"/>
<location filename="../src/GUI/optionsdialog.cpp" line="438"/> <location filename="../src/GUI/optionsdialog.cpp" line="468"/>
<source>GPS data</source> <source>GPS data</source>
<translation>GPS-tiedot</translation> <translation>GPS-tiedot</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="381"/> <location filename="../src/GUI/optionsdialog.cpp" line="411"/>
<location filename="../src/GUI/optionsdialog.cpp" line="439"/> <location filename="../src/GUI/optionsdialog.cpp" line="469"/>
<source>DEM data</source> <source>DEM data</source>
<translation>DEM-tiedot</translation> <translation>DEM-tiedot</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="418"/> <location filename="../src/GUI/optionsdialog.cpp" line="448"/>
<source>Elevation</source> <source>Elevation</source>
<translation>Korkeus</translation> <translation>Korkeus</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="429"/> <location filename="../src/GUI/optionsdialog.cpp" line="459"/>
<source>Filtering</source> <source>Filtering</source>
<translation>Suodatus</translation> <translation>Suodatus</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="430"/> <location filename="../src/GUI/optionsdialog.cpp" line="460"/>
<source>Sources</source> <source>Sources</source>
<translation>Lähteet</translation> <translation>Lähteet</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="431"/> <location filename="../src/GUI/optionsdialog.cpp" line="461"/>
<source>Pause detection</source> <source>Pause detection</source>
<translation>Pysähdysten havaitseminen</translation> <translation>Pysähdysten havaitseminen</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="464"/> <location filename="../src/GUI/optionsdialog.cpp" line="494"/>
<source>Radius:</source> <source>Radius:</source>
<translation>Säde:</translation> <translation>Säde:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="412"/> <location filename="../src/GUI/optionsdialog.cpp" line="442"/>
<source>Speed</source> <source>Speed</source>
<translation>Vauhti</translation> <translation>Vauhti</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="74"/> <location filename="../src/GUI/optionsdialog.cpp" line="80"/>
<source>Projection:</source> <source>Projection:</source>
<translation>Projektio:</translation> <translation>Projektio:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="96"/> <location filename="../src/GUI/optionsdialog.cpp" line="102"/>
<source>Vector maps</source> <source>Vector maps</source>
<translation>Vektorikartat</translation> <translation>Vektorikartat</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="149"/> <location filename="../src/GUI/optionsdialog.cpp" line="155"/>
<source>Area border width:</source> <source>Area border width:</source>
<translation>Alueen rajan leveys:</translation> <translation>Alueen rajan leveys:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="150"/> <location filename="../src/GUI/optionsdialog.cpp" line="156"/>
<source>Area border style:</source> <source>Area border style:</source>
<translation>Alueen rajan tyyli:</translation> <translation>Alueen rajan tyyli:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="151"/> <location filename="../src/GUI/optionsdialog.cpp" line="157"/>
<source>Area fill opacity:</source> <source>Area fill opacity:</source>
<translation>Alueen täytön läpinäkymättömyys:</translation> <translation>Alueen täytön läpinäkymättömyys:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="155"/> <location filename="../src/GUI/optionsdialog.cpp" line="161"/>
<source>Fill opacity:</source> <source>Fill opacity:</source>
<translation>Täytön läpinäkymättömyys:</translation> <translation>Täytön läpinäkymättömyys:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="156"/> <location filename="../src/GUI/optionsdialog.cpp" line="162"/>
<source>Areas</source> <source>Areas</source>
<translation>Alueet</translation> <translation>Alueet</translation>
</message> </message>
<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> <source>mi</source>
<translation>mi</translation> <translation>mi</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="453"/> <location filename="../src/GUI/optionsdialog.cpp" line="483"/>
<source>nmi</source> <source>nmi</source>
<translation>mpk</translation> <translation>mpk</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="456"/> <location filename="../src/GUI/optionsdialog.cpp" line="486"/>
<source>km</source> <source>km</source>
<translation>km</translation> <translation>km</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="471"/> <location filename="../src/GUI/optionsdialog.cpp" line="501"/>
<location filename="../src/GUI/optionsdialog.cpp" line="611"/> <location filename="../src/GUI/optionsdialog.cpp" line="641"/>
<source>POI</source> <source>POI</source>
<translation>POI</translation> <translation>POI</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="478"/> <location filename="../src/GUI/optionsdialog.cpp" line="508"/>
<source>WYSIWYG</source> <source>WYSIWYG</source>
<translation>WYSIWYG</translation> <translation>WYSIWYG</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="479"/> <location filename="../src/GUI/optionsdialog.cpp" line="509"/>
<source>High-Resolution</source> <source>High-Resolution</source>
<translation>Korkea resoluutio</translation> <translation>Korkea resoluutio</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="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> <source>The printed area is approximately the display area. The map zoom level does not change.</source>
<translation>Painettu alue on suunnilleen näyttöalue. Kartan zoomaustaso ei muutu.</translation> <translation>Painettu alue on suunnilleen näyttöalue. Kartan zoomaustaso ei muutu.</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="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> <source>The zoom level will be changed so that the whole content (tracks/waypoints) fits to the printed area and the map resolution is as close as possible to the print resolution.</source>
<translation>Zoomaustasoa muutetaan niin, että koko sisältö (jäljet/reittipisteet) sopii painettuun alueeseen ja kartan resoluutio on mahdollisimman lähellä tulostusresoluutiota.</translation> <translation>Zoomaustasoa muutetaan niin, että koko sisältö (jäljet/reittipisteet) sopii painettuun alueeseen ja kartan resoluutio on mahdollisimman lähellä tulostusresoluutiota.</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="508"/> <location filename="../src/GUI/optionsdialog.cpp" line="538"/>
<source>Name</source> <source>Name</source>
<translation>Nimi</translation> <translation>Nimi</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="510"/> <location filename="../src/GUI/optionsdialog.cpp" line="540"/>
<source>Date</source> <source>Date</source>
<translation>Päivämäärä</translation> <translation>Päivämäärä</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="512"/> <location filename="../src/GUI/optionsdialog.cpp" line="542"/>
<source>Distance</source> <source>Distance</source>
<translation>Etäisyys</translation> <translation>Etäisyys</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="514"/> <location filename="../src/GUI/optionsdialog.cpp" line="544"/>
<source>Time</source> <source>Time</source>
<translation>Aika</translation> <translation>Aika</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="516"/> <location filename="../src/GUI/optionsdialog.cpp" line="546"/>
<source>Moving time</source> <source>Moving time</source>
<translation>Liikkumisaika</translation> <translation>Liikkumisaika</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="518"/> <location filename="../src/GUI/optionsdialog.cpp" line="548"/>
<source>Item count (&gt;1)</source> <source>Item count (&gt;1)</source>
<translation>Kohteiden määrä (&gt;1)</translation> <translation>Kohteiden määrä (&gt;1)</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="533"/> <location filename="../src/GUI/optionsdialog.cpp" line="563"/>
<source>Separate graph page</source> <source>Separate graph page</source>
<translation>Erillinen sivu kaaviokuvalle</translation> <translation>Erillinen sivu kaaviokuvalle</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="543"/> <location filename="../src/GUI/optionsdialog.cpp" line="573"/>
<source>Print mode</source> <source>Print mode</source>
<translation>Tulostustila</translation> <translation>Tulostustila</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="544"/> <location filename="../src/GUI/optionsdialog.cpp" line="574"/>
<source>Header</source> <source>Header</source>
<translation>Otsikko</translation> <translation>Otsikko</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="552"/> <location filename="../src/GUI/optionsdialog.cpp" line="582"/>
<source>Use OpenGL</source> <source>Use OpenGL</source>
<translation>Käytä OpenGL:ää</translation> <translation>Käytä OpenGL:ää</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="555"/> <location filename="../src/GUI/optionsdialog.cpp" line="585"/>
<source>Enable HTTP/2</source> <source>Enable HTTP/2</source>
<translation>Ota HTTP/2 käyttöön</translation> <translation>Ota HTTP/2 käyttöön</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="562"/> <location filename="../src/GUI/optionsdialog.cpp" line="592"/>
<source>MB</source> <source>MB</source>
<translation>Mt</translation> <translation>Mt</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="572"/> <location filename="../src/GUI/optionsdialog.cpp" line="602"/>
<source>Image cache size:</source> <source>Image cache size:</source>
<translation>Kuvavälimuistin koko:</translation> <translation>Kuvavälimuistin koko:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="573"/> <location filename="../src/GUI/optionsdialog.cpp" line="603"/>
<source>Connection timeout:</source> <source>Connection timeout:</source>
<translation>Yhteyden aikakatkaisu:</translation> <translation>Yhteyden aikakatkaisu:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="589"/> <location filename="../src/GUI/optionsdialog.cpp" line="619"/>
<location filename="../src/GUI/optionsdialog.cpp" line="614"/> <location filename="../src/GUI/optionsdialog.cpp" line="644"/>
<source>System</source> <source>System</source>
<translation>Järjestelmä</translation> <translation>Järjestelmä</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="607"/> <location filename="../src/GUI/optionsdialog.cpp" line="637"/>
<source>Appearance</source> <source>Appearance</source>
<translation>Ulkoasu</translation> <translation>Ulkoasu</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="609"/> <location filename="../src/GUI/optionsdialog.cpp" line="639"/>
<source>Maps</source> <source>Maps</source>
<translation>Kartat</translation> <translation>Kartat</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="610"/> <location filename="../src/GUI/optionsdialog.cpp" line="640"/>
<source>Data</source> <source>Data</source>
<translation>Tiedot</translation> <translation>Tiedot</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="612"/> <location filename="../src/GUI/optionsdialog.cpp" line="642"/>
<source>Print &amp; Export</source> <source>Print &amp; Export</source>
<translation>Tulostus &amp; vienti</translation> <translation>Tulostus &amp; vienti</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="641"/> <location filename="../src/GUI/optionsdialog.cpp" line="671"/>
<source>Options</source> <source>Options</source>
<translation>Valinnat</translation> <translation>Valinnat</translation>
</message> </message>
@ -1867,7 +1887,12 @@
<translation>Kuvaus</translation> <translation>Kuvaus</translation>
</message> </message>
<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> <source>Links</source>
<translation>Linkit</translation> <translation>Linkit</translation>
</message> </message>

View File

@ -47,77 +47,87 @@
<context> <context>
<name>Data</name> <name>Data</name>
<message> <message>
<location filename="../src/data/data.cpp" line="173"/> <location filename="../src/data/data.cpp" line="179"/>
<source>Supported files</source> <source>Supported files</source>
<translation>Formats pris en charge</translation> <translation>Formats pris en charge</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="174"/> <location filename="../src/data/data.cpp" line="180"/>
<source>CSV files</source> <source>CSV files</source>
<translation>Données CSV</translation> <translation>Données CSV</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="175"/> <location filename="../src/data/data.cpp" line="181"/>
<source>CUP files</source> <source>CUP files</source>
<translation>Données CUP</translation> <translation>Données CUP</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="176"/> <location filename="../src/data/data.cpp" line="182"/>
<source>FIT files</source> <source>FIT files</source>
<translation>Données FIT</translation> <translation>Données FIT</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="178"/> <location filename="../src/data/data.cpp" line="184"/>
<source>GeoJSON files</source> <source>GeoJSON files</source>
<translation>Données GeoJSON</translation> <translation>Données GeoJSON</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="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> <source>GPX files</source>
<translation>Données GPX</translation> <translation>Données GPX</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="181"/> <location filename="../src/data/data.cpp" line="188"/>
<source>IGC files</source> <source>IGC files</source>
<translation>Données IGC</translation> <translation>Données IGC</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="182"/> <location filename="../src/data/data.cpp" line="189"/>
<source>JPEG images</source> <source>JPEG images</source>
<translation>Images JPEG</translation> <translation>Images JPEG</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="183"/> <location filename="../src/data/data.cpp" line="190"/>
<source>KML files</source> <source>KML files</source>
<translation>Données KML</translation> <translation>Données KML</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="184"/> <location filename="../src/data/data.cpp" line="191"/>
<source>LOC files</source> <source>LOC files</source>
<translation>Données LOC</translation> <translation>Données LOC</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="185"/> <location filename="../src/data/data.cpp" line="192"/>
<source>NMEA files</source> <source>NMEA files</source>
<translation>Données NMEA</translation> <translation>Données NMEA</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="186"/> <location filename="../src/data/data.cpp" line="193"/>
<source>OziExplorer files</source> <source>OziExplorer files</source>
<translation>Données OziExplorer</translation> <translation>Données OziExplorer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="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> <source>TCX files</source>
<translation>Données TCX</translation> <translation>Données TCX</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="187"/> <location filename="../src/data/data.cpp" line="194"/>
<source>SLF files</source> <source>SLF files</source>
<translation>Données SLF</translation> <translation>Données SLF</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="189"/> <location filename="../src/data/data.cpp" line="197"/>
<source>All files</source> <source>All files</source>
<translation>Tous les fichiers</translation> <translation>Tous les fichiers</translation>
</message> </message>
@ -518,8 +528,8 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="413"/> <location filename="../src/GUI/gui.cpp" line="413"/>
<location filename="../src/GUI/gui.cpp" line="1058"/> <location filename="../src/GUI/gui.cpp" line="1059"/>
<location filename="../src/GUI/gui.cpp" line="1124"/> <location filename="../src/GUI/gui.cpp" line="1125"/>
<source>Moving time</source> <source>Moving time</source>
<translation>Durée en déplacement</translation> <translation>Durée en déplacement</translation>
</message> </message>
@ -674,34 +684,34 @@
<translation>Dossier de styles :</translation> <translation>Dossier de styles :</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1036"/> <location filename="../src/GUI/gui.cpp" line="1037"/>
<location filename="../src/GUI/gui.cpp" line="1104"/> <location filename="../src/GUI/gui.cpp" line="1105"/>
<source>Areas</source> <source>Areas</source>
<translation>Zones</translation> <translation>Zones</translation>
</message> </message>
<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="1080"/>
<location filename="../src/GUI/gui.cpp" line="1081"/>
<source>Statistics</source> <source>Statistics</source>
<translation>Statistiques</translation> <translation>Statistiques</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1312"/> <location filename="../src/GUI/gui.cpp" line="1313"/>
<source>Open map file</source> <source>Open map file</source>
<translation>Ouvrir un fichier de carte</translation> <translation>Ouvrir un fichier de carte</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1335"/> <location filename="../src/GUI/gui.cpp" line="1336"/>
<source>Error loading map:</source> <source>Error loading map:</source>
<translation>Erreur lors du chargement de la carte :</translation> <translation>Erreur lors du chargement de la carte :</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1346"/> <location filename="../src/GUI/gui.cpp" line="1347"/>
<source>No files loaded</source> <source>No files loaded</source>
<translation>Aucun fichier chargé</translation> <translation>Aucun fichier chargé</translation>
</message> </message>
<message numerus="yes"> <message numerus="yes">
<location filename="../src/GUI/gui.cpp" line="1350"/> <location filename="../src/GUI/gui.cpp" line="1351"/>
<source>%n files</source> <source>%n files</source>
<translation> <translation>
<numerusform>%n fichier</numerusform> <numerusform>%n fichier</numerusform>
@ -709,16 +719,16 @@
</translation> </translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1042"/> <location filename="../src/GUI/gui.cpp" line="1043"/>
<location filename="../src/GUI/gui.cpp" line="1046"/> <location filename="../src/GUI/gui.cpp" line="1047"/>
<location filename="../src/GUI/gui.cpp" line="1110"/> <location filename="../src/GUI/gui.cpp" line="1111"/>
<location filename="../src/GUI/gui.cpp" line="1113"/> <location filename="../src/GUI/gui.cpp" line="1114"/>
<source>Date</source> <source>Date</source>
<translation>Date</translation> <translation>Date</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1030"/> <location filename="../src/GUI/gui.cpp" line="1031"/>
<location filename="../src/GUI/gui.cpp" line="1100"/> <location filename="../src/GUI/gui.cpp" line="1101"/>
<source>Routes</source> <source>Routes</source>
<translation>Routes</translation> <translation>Routes</translation>
</message> </message>
@ -738,8 +748,8 @@
<translation>Exporter au format PDF...</translation> <translation>Exporter au format PDF...</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1033"/> <location filename="../src/GUI/gui.cpp" line="1034"/>
<location filename="../src/GUI/gui.cpp" line="1102"/> <location filename="../src/GUI/gui.cpp" line="1103"/>
<source>Waypoints</source> <source>Waypoints</source>
<translation>Points de jalonnement</translation> <translation>Points de jalonnement</translation>
</message> </message>
@ -820,13 +830,13 @@
<translation>Erreur lors du chargement du fichier POI :</translation> <translation>Erreur lors du chargement du fichier POI :</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1094"/> <location filename="../src/GUI/gui.cpp" line="1095"/>
<source>Name</source> <source>Name</source>
<translation>Nom</translation> <translation>Nom</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1027"/> <location filename="../src/GUI/gui.cpp" line="1028"/>
<location filename="../src/GUI/gui.cpp" line="1098"/> <location filename="../src/GUI/gui.cpp" line="1099"/>
<source>Tracks</source> <source>Tracks</source>
<translation>Traces</translation> <translation>Traces</translation>
</message> </message>
@ -843,16 +853,16 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="369"/> <location filename="../src/GUI/gui.cpp" line="369"/>
<location filename="../src/GUI/gui.cpp" line="1053"/> <location filename="../src/GUI/gui.cpp" line="1054"/>
<location filename="../src/GUI/gui.cpp" line="1120"/> <location filename="../src/GUI/gui.cpp" line="1121"/>
<source>Distance</source> <source>Distance</source>
<translation>Distance</translation> <translation>Distance</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="376"/> <location filename="../src/GUI/gui.cpp" line="376"/>
<location filename="../src/GUI/gui.cpp" line="552"/> <location filename="../src/GUI/gui.cpp" line="552"/>
<location filename="../src/GUI/gui.cpp" line="1056"/> <location filename="../src/GUI/gui.cpp" line="1057"/>
<location filename="../src/GUI/gui.cpp" line="1122"/> <location filename="../src/GUI/gui.cpp" line="1123"/>
<source>Time</source> <source>Time</source>
<translation>Temps</translation> <translation>Temps</translation>
</message> </message>
@ -949,12 +959,12 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/graphview.cpp" line="66"/> <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> <source>Distance</source>
<translation>Distance</translation> <translation>Distance</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/graphview.cpp" line="175"/> <location filename="../src/GUI/graphview.cpp" line="179"/>
<source>Time</source> <source>Time</source>
<translation>Temps</translation> <translation>Temps</translation>
</message> </message>
@ -1053,478 +1063,488 @@
<context> <context>
<name>OptionsDialog</name> <name>OptionsDialog</name>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="169"/> <location filename="../src/GUI/optionsdialog.cpp" line="175"/>
<source>Base color:</source> <source>Base color:</source>
<translation>Couleur de base :</translation> <translation>Couleur de base :</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="170"/> <location filename="../src/GUI/optionsdialog.cpp" line="176"/>
<source>Palette shift:</source> <source>Palette shift:</source>
<translation>Incrément de palette :</translation> <translation>Incrément de palette :</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="114"/> <location filename="../src/GUI/optionsdialog.cpp" line="120"/>
<source>Track width:</source> <source>Track width:</source>
<translation>Épaisseur des traces :</translation> <translation>Épaisseur des traces :</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="115"/> <location filename="../src/GUI/optionsdialog.cpp" line="121"/>
<source>Track style:</source> <source>Track style:</source>
<translation>Style des traces :</translation> <translation>Style des traces :</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="119"/> <location filename="../src/GUI/optionsdialog.cpp" line="125"/>
<source>Tracks</source> <source>Tracks</source>
<translation>Traces</translation> <translation>Traces</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="131"/> <location filename="../src/GUI/optionsdialog.cpp" line="137"/>
<source>Route width:</source> <source>Route width:</source>
<translation>Épaisseur des routes :</translation> <translation>Épaisseur des routes :</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="132"/> <location filename="../src/GUI/optionsdialog.cpp" line="138"/>
<source>Route style:</source> <source>Route style:</source>
<translation>Style des routes :</translation> <translation>Style des routes :</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="136"/> <location filename="../src/GUI/optionsdialog.cpp" line="142"/>
<source>Routes</source> <source>Routes</source>
<translation>Routes</translation> <translation>Routes</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="172"/> <location filename="../src/GUI/optionsdialog.cpp" line="178"/>
<location filename="../src/GUI/optionsdialog.cpp" line="255"/> <location filename="../src/GUI/optionsdialog.cpp" line="261"/>
<source>Use anti-aliasing</source> <source>Use anti-aliasing</source>
<translation>Utiliser l&apos;anticrénelage</translation> <translation>Utiliser l&apos;anticrénelage</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="252"/> <location filename="../src/GUI/optionsdialog.cpp" line="258"/>
<source>Line width:</source> <source>Line width:</source>
<translation>Épaisseur de ligne :</translation> <translation>Épaisseur de ligne :</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="276"/> <location filename="../src/GUI/optionsdialog.cpp" line="282"/>
<source>Background color:</source> <source>Background color:</source>
<translation>Couleur d&apos;arrière plan :</translation> <translation>Couleur d&apos;arrière plan :</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="287"/> <location filename="../src/GUI/optionsdialog.cpp" line="293"/>
<source>Paths</source> <source>Paths</source>
<translation>Chemins</translation> <translation>Chemins</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="277"/> <location filename="../src/GUI/optionsdialog.cpp" line="283"/>
<source>Map opacity:</source> <source>Map opacity:</source>
<translation>Opacité de la carte :</translation> <translation>Opacité de la carte :</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="290"/> <location filename="../src/GUI/optionsdialog.cpp" line="296"/>
<source>Map</source> <source>Map</source>
<translation>Carte</translation> <translation>Carte</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="289"/> <location filename="../src/GUI/optionsdialog.cpp" line="295"/>
<location filename="../src/GUI/optionsdialog.cpp" line="545"/> <location filename="../src/GUI/optionsdialog.cpp" line="575"/>
<source>Graphs</source> <source>Graphs</source>
<translation>Graphe</translation> <translation>Graphe</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="55"/> <location filename="../src/GUI/optionsdialog.cpp" line="61"/>
<source>High-resolution</source> <source>High-resolution</source>
<translation>Résolution élevée</translation> <translation>Résolution élevée</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="56"/> <location filename="../src/GUI/optionsdialog.cpp" line="62"/>
<source>Standard</source> <source>Standard</source>
<translation>Standard</translation> <translation>Standard</translation>
</message> </message>
<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> <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>
<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> <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>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="98"/> <location filename="../src/GUI/optionsdialog.cpp" line="104"/>
<source>HiDPI display mode</source> <source>HiDPI display mode</source>
<translation>Affichage à haute résolution</translation> <translation>Affichage à haute résolution</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="117"/> <location filename="../src/GUI/optionsdialog.cpp" line="123"/>
<location filename="../src/GUI/optionsdialog.cpp" line="134"/> <location filename="../src/GUI/optionsdialog.cpp" line="140"/>
<location filename="../src/GUI/optionsdialog.cpp" line="153"/> <location filename="../src/GUI/optionsdialog.cpp" line="159"/>
<source>Width:</source> <source>Width:</source>
<translation>Épaisseur :</translation> <translation>Épaisseur :</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="118"/> <location filename="../src/GUI/optionsdialog.cpp" line="124"/>
<location filename="../src/GUI/optionsdialog.cpp" line="135"/> <location filename="../src/GUI/optionsdialog.cpp" line="141"/>
<location filename="../src/GUI/optionsdialog.cpp" line="154"/> <location filename="../src/GUI/optionsdialog.cpp" line="160"/>
<source>Style:</source> <source>Style:</source>
<translation>Style :</translation> <translation>Style :</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="205"/> <location filename="../src/GUI/optionsdialog.cpp" line="211"/>
<source>Waypoint color:</source> <source>Waypoint color:</source>
<translation>Couleur des points de jalonnement :</translation> <translation>Couleur des points de jalonnement :</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="206"/> <location filename="../src/GUI/optionsdialog.cpp" line="212"/>
<source>Waypoint size:</source> <source>Waypoint size:</source>
<translation>Tailles des points de jalonnement :</translation> <translation>Tailles des points de jalonnement :</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="208"/> <location filename="../src/GUI/optionsdialog.cpp" line="214"/>
<location filename="../src/GUI/optionsdialog.cpp" line="224"/> <location filename="../src/GUI/optionsdialog.cpp" line="230"/>
<source>Color:</source> <source>Color:</source>
<translation>Couleur :</translation> <translation>Couleur :</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="209"/> <location filename="../src/GUI/optionsdialog.cpp" line="215"/>
<location filename="../src/GUI/optionsdialog.cpp" line="225"/> <location filename="../src/GUI/optionsdialog.cpp" line="231"/>
<source>Size:</source> <source>Size:</source>
<translation>Taille :</translation> <translation>Taille :</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="210"/> <location filename="../src/GUI/optionsdialog.cpp" line="216"/>
<source>Waypoints</source> <source>Waypoints</source>
<translation>Points de jalonnement</translation> <translation>Points de jalonnement</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="221"/> <location filename="../src/GUI/optionsdialog.cpp" line="227"/>
<source>POI color:</source> <source>POI color:</source>
<translation>Couleur des POI :</translation> <translation>Couleur des POI :</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="222"/> <location filename="../src/GUI/optionsdialog.cpp" line="228"/>
<source>POI size:</source> <source>POI size:</source>
<translation>Taille des POI :</translation> <translation>Taille des POI :</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="226"/> <location filename="../src/GUI/optionsdialog.cpp" line="232"/>
<source>POIs</source> <source>POIs</source>
<translation>POI</translation> <translation>POI</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="253"/> <location filename="../src/GUI/optionsdialog.cpp" line="259"/>
<source>Slider color:</source> <source>Slider color:</source>
<translation>Couleur du curseur :</translation> <translation>Couleur du curseur :</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="288"/> <location filename="../src/GUI/optionsdialog.cpp" line="294"/>
<source>Points</source> <source>Points</source>
<translation>Points</translation> <translation>Points</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="297"/> <location filename="../src/GUI/optionsdialog.cpp" line="303"/>
<source>Moving average window size</source> <source>Moving average window size</source>
<translation>Largeur de fenêtre de la moyenne glissante</translation> <translation>Largeur de fenêtre de la moyenne glissante</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="316"/> <location filename="../src/GUI/optionsdialog.cpp" line="322"/>
<location filename="../src/GUI/optionsdialog.cpp" line="402"/> <location filename="../src/GUI/optionsdialog.cpp" line="432"/>
<location filename="../src/GUI/optionsdialog.cpp" line="465"/> <location filename="../src/GUI/optionsdialog.cpp" line="495"/>
<source>Elevation:</source> <source>Elevation:</source>
<translation>Altitude :</translation> <translation>Altitude :</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="317"/> <location filename="../src/GUI/optionsdialog.cpp" line="323"/>
<location filename="../src/GUI/optionsdialog.cpp" line="401"/> <location filename="../src/GUI/optionsdialog.cpp" line="431"/>
<source>Speed:</source> <source>Speed:</source>
<translation>Vitesse :</translation> <translation>Vitesse :</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="318"/> <location filename="../src/GUI/optionsdialog.cpp" line="324"/>
<source>Heart rate:</source> <source>Heart rate:</source>
<translation>Fréquence cardiaque :</translation> <translation>Fréquence cardiaque :</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="319"/> <location filename="../src/GUI/optionsdialog.cpp" line="325"/>
<source>Cadence:</source> <source>Cadence:</source>
<translation>Cadence :</translation> <translation>Cadence :</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="320"/> <location filename="../src/GUI/optionsdialog.cpp" line="326"/>
<source>Power:</source> <source>Power:</source>
<translation>Puissance :</translation> <translation>Puissance :</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="322"/> <location filename="../src/GUI/optionsdialog.cpp" line="328"/>
<source>Smoothing</source> <source>Smoothing</source>
<translation>Lissage</translation> <translation>Lissage</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="326"/> <location filename="../src/GUI/optionsdialog.cpp" line="332"/>
<source>Eliminate GPS outliers</source> <source>Eliminate GPS outliers</source>
<translation>Supprimer les données GPS aberrantes</translation> <translation>Supprimer les données GPS aberrantes</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="335"/> <location filename="../src/GUI/optionsdialog.cpp" line="341"/>
<source>Smoothing:</source> <source>Smoothing:</source>
<translation>Lissage :</translation> <translation>Lissage :</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="352"/> <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> <source>mi/h</source>
<translation>mi/h</translation> <translation>mi/h</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="355"/> <location filename="../src/GUI/optionsdialog.cpp" line="369"/>
<source>kn</source> <source>kn</source>
<translation>nd</translation> <translation>nd</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="358"/> <location filename="../src/GUI/optionsdialog.cpp" line="372"/>
<source>km/h</source> <source>km/h</source>
<translation>km/h</translation> <translation>km/h</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="362"/> <location filename="../src/GUI/optionsdialog.cpp" line="376"/>
<location filename="../src/GUI/optionsdialog.cpp" line="568"/> <location filename="../src/GUI/optionsdialog.cpp" line="598"/>
<source>s</source> <source>s</source>
<translation>s</translation> <translation>s</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="366"/> <location filename="../src/GUI/optionsdialog.cpp" line="392"/>
<source>Minimal speed:</source> <source>Minimal speed:</source>
<translation>Vitesse minimale :</translation> <translation>Vitesse minimale :</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="367"/> <location filename="../src/GUI/optionsdialog.cpp" line="393"/>
<source>Minimal duration:</source> <source>Minimal duration:</source>
<translation>Durée minimale :</translation> <translation>Durée minimale :</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="373"/> <location filename="../src/GUI/optionsdialog.cpp" line="403"/>
<source>Computed from distance/time</source> <source>Computed from distance/time</source>
<translation>Calculée comme distance/temps</translation> <translation>Calculée comme distance/temps</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="374"/> <location filename="../src/GUI/optionsdialog.cpp" line="404"/>
<source>Recorded by device</source> <source>Recorded by device</source>
<translation>Enregistrée par l&apos;appareil</translation> <translation>Enregistrée par l&apos;appareil</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="380"/> <location filename="../src/GUI/optionsdialog.cpp" line="410"/>
<location filename="../src/GUI/optionsdialog.cpp" line="438"/> <location filename="../src/GUI/optionsdialog.cpp" line="468"/>
<source>GPS data</source> <source>GPS data</source>
<translation>Données GPS</translation> <translation>Données GPS</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="381"/> <location filename="../src/GUI/optionsdialog.cpp" line="411"/>
<location filename="../src/GUI/optionsdialog.cpp" line="439"/> <location filename="../src/GUI/optionsdialog.cpp" line="469"/>
<source>DEM data</source> <source>DEM data</source>
<translation>Données MNT</translation> <translation>Données MNT</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="418"/> <location filename="../src/GUI/optionsdialog.cpp" line="448"/>
<source>Elevation</source> <source>Elevation</source>
<translation>Altitude</translation> <translation>Altitude</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="429"/> <location filename="../src/GUI/optionsdialog.cpp" line="459"/>
<source>Filtering</source> <source>Filtering</source>
<translation>Filtrage</translation> <translation>Filtrage</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="430"/> <location filename="../src/GUI/optionsdialog.cpp" line="460"/>
<source>Sources</source> <source>Sources</source>
<translation>Sources</translation> <translation>Sources</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="431"/> <location filename="../src/GUI/optionsdialog.cpp" line="461"/>
<source>Pause detection</source> <source>Pause detection</source>
<translation>Détection des arrêts</translation> <translation>Détection des arrêts</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="464"/> <location filename="../src/GUI/optionsdialog.cpp" line="494"/>
<source>Radius:</source> <source>Radius:</source>
<translation>Rayon :</translation> <translation>Rayon :</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="412"/> <location filename="../src/GUI/optionsdialog.cpp" line="442"/>
<source>Speed</source> <source>Speed</source>
<translation>Vitesse</translation> <translation>Vitesse</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="74"/> <location filename="../src/GUI/optionsdialog.cpp" line="80"/>
<source>Projection:</source> <source>Projection:</source>
<translation>Projection :</translation> <translation>Projection :</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="96"/> <location filename="../src/GUI/optionsdialog.cpp" line="102"/>
<source>Vector maps</source> <source>Vector maps</source>
<translation>Cartes vectorielles</translation> <translation>Cartes vectorielles</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="149"/> <location filename="../src/GUI/optionsdialog.cpp" line="155"/>
<source>Area border width:</source> <source>Area border width:</source>
<translation>Épaisseur de bord de zone :</translation> <translation>Épaisseur de bord de zone :</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="150"/> <location filename="../src/GUI/optionsdialog.cpp" line="156"/>
<source>Area border style:</source> <source>Area border style:</source>
<translation>Style de bord de zone :</translation> <translation>Style de bord de zone :</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="151"/> <location filename="../src/GUI/optionsdialog.cpp" line="157"/>
<source>Area fill opacity:</source> <source>Area fill opacity:</source>
<translation>Opacité du remplissage des zones :</translation> <translation>Opacité du remplissage des zones :</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="155"/> <location filename="../src/GUI/optionsdialog.cpp" line="161"/>
<source>Fill opacity:</source> <source>Fill opacity:</source>
<translation>Opacité de remplissage :</translation> <translation>Opacité de remplissage :</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="156"/> <location filename="../src/GUI/optionsdialog.cpp" line="162"/>
<source>Areas</source> <source>Areas</source>
<translation>Zones</translation> <translation>Zones</translation>
</message> </message>
<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> <source>mi</source>
<translation>mi</translation> <translation>mi</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="453"/> <location filename="../src/GUI/optionsdialog.cpp" line="483"/>
<source>nmi</source> <source>nmi</source>
<translation>nmi</translation> <translation>nmi</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="456"/> <location filename="../src/GUI/optionsdialog.cpp" line="486"/>
<source>km</source> <source>km</source>
<translation>km</translation> <translation>km</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="471"/> <location filename="../src/GUI/optionsdialog.cpp" line="501"/>
<location filename="../src/GUI/optionsdialog.cpp" line="611"/> <location filename="../src/GUI/optionsdialog.cpp" line="641"/>
<source>POI</source> <source>POI</source>
<translation>POI</translation> <translation>POI</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="478"/> <location filename="../src/GUI/optionsdialog.cpp" line="508"/>
<source>WYSIWYG</source> <source>WYSIWYG</source>
<translation>WYSIWYG</translation> <translation>WYSIWYG</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="479"/> <location filename="../src/GUI/optionsdialog.cpp" line="509"/>
<source>High-Resolution</source> <source>High-Resolution</source>
<translation>Résolution élevée</translation> <translation>Résolution élevée</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="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> <source>The printed area is approximately the display area. The map zoom level does not change.</source>
<translation>La zone d&apos;impression est presque celle affichée. L&apos;échelle reste la même.</translation> <translation>La zone d&apos;impression est presque celle affichée. L&apos;échelle reste la même.</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="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> <source>The zoom level will be changed so that the whole content (tracks/waypoints) fits to the printed area and the map resolution is as close as possible to the print resolution.</source>
<translation>L&apos;échelle est ajustée pour que tout le contenu (traces et points de jalonnement) rentre dans la zone d&apos;impression tout en gardant proches les résolutions d&apos;impression et de carte.</translation> <translation>L&apos;échelle est ajustée pour que tout le contenu (traces et points de jalonnement) rentre dans la zone d&apos;impression tout en gardant proches les résolutions d&apos;impression et de carte.</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="508"/> <location filename="../src/GUI/optionsdialog.cpp" line="538"/>
<source>Name</source> <source>Name</source>
<translation>Nom</translation> <translation>Nom</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="510"/> <location filename="../src/GUI/optionsdialog.cpp" line="540"/>
<source>Date</source> <source>Date</source>
<translation>Date</translation> <translation>Date</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="512"/> <location filename="../src/GUI/optionsdialog.cpp" line="542"/>
<source>Distance</source> <source>Distance</source>
<translation>Distance</translation> <translation>Distance</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="514"/> <location filename="../src/GUI/optionsdialog.cpp" line="544"/>
<source>Time</source> <source>Time</source>
<translation>Durée</translation> <translation>Durée</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="516"/> <location filename="../src/GUI/optionsdialog.cpp" line="546"/>
<source>Moving time</source> <source>Moving time</source>
<translation>Durée en déplacement</translation> <translation>Durée en déplacement</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="518"/> <location filename="../src/GUI/optionsdialog.cpp" line="548"/>
<source>Item count (&gt;1)</source> <source>Item count (&gt;1)</source>
<translation>Nombre d&apos;éléments (&gt;1)</translation> <translation>Nombre d&apos;éléments (&gt;1)</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="533"/> <location filename="../src/GUI/optionsdialog.cpp" line="563"/>
<source>Separate graph page</source> <source>Separate graph page</source>
<translation>Sauter une page pour les graphes</translation> <translation>Sauter une page pour les graphes</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="543"/> <location filename="../src/GUI/optionsdialog.cpp" line="573"/>
<source>Print mode</source> <source>Print mode</source>
<translation>Mode d&apos;impression</translation> <translation>Mode d&apos;impression</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="544"/> <location filename="../src/GUI/optionsdialog.cpp" line="574"/>
<source>Header</source> <source>Header</source>
<translation>Entête</translation> <translation>Entête</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="552"/> <location filename="../src/GUI/optionsdialog.cpp" line="582"/>
<source>Use OpenGL</source> <source>Use OpenGL</source>
<translation>Utiliser OpenGL</translation> <translation>Utiliser OpenGL</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="555"/> <location filename="../src/GUI/optionsdialog.cpp" line="585"/>
<source>Enable HTTP/2</source> <source>Enable HTTP/2</source>
<translation>Activer l&apos;HTTP/2</translation> <translation>Activer l&apos;HTTP/2</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="562"/> <location filename="../src/GUI/optionsdialog.cpp" line="592"/>
<source>MB</source> <source>MB</source>
<translation>Mo</translation> <translation>Mo</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="572"/> <location filename="../src/GUI/optionsdialog.cpp" line="602"/>
<source>Image cache size:</source> <source>Image cache size:</source>
<translation>Volume du cache à images :</translation> <translation>Volume du cache à images :</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="573"/> <location filename="../src/GUI/optionsdialog.cpp" line="603"/>
<source>Connection timeout:</source> <source>Connection timeout:</source>
<translation>Délai d&apos;attente de connexion :</translation> <translation>Délai d&apos;attente de connexion :</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="589"/> <location filename="../src/GUI/optionsdialog.cpp" line="619"/>
<location filename="../src/GUI/optionsdialog.cpp" line="614"/> <location filename="../src/GUI/optionsdialog.cpp" line="644"/>
<source>System</source> <source>System</source>
<translation>Système</translation> <translation>Système</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="607"/> <location filename="../src/GUI/optionsdialog.cpp" line="637"/>
<source>Appearance</source> <source>Appearance</source>
<translation>Apparence</translation> <translation>Apparence</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="609"/> <location filename="../src/GUI/optionsdialog.cpp" line="639"/>
<source>Maps</source> <source>Maps</source>
<translation>Cartes</translation> <translation>Cartes</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="610"/> <location filename="../src/GUI/optionsdialog.cpp" line="640"/>
<source>Data</source> <source>Data</source>
<translation>Données</translation> <translation>Données</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="612"/> <location filename="../src/GUI/optionsdialog.cpp" line="642"/>
<source>Print &amp; Export</source> <source>Print &amp; Export</source>
<translation>Imprimer et exporter</translation> <translation>Imprimer et exporter</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="641"/> <location filename="../src/GUI/optionsdialog.cpp" line="671"/>
<source>Options</source> <source>Options</source>
<translation>Options</translation> <translation>Options</translation>
</message> </message>
@ -1605,7 +1625,7 @@
<message> <message>
<location filename="../src/GUI/routeitem.cpp" line="29"/> <location filename="../src/GUI/routeitem.cpp" line="29"/>
<source>Links</source> <source>Links</source>
<translation type="unfinished"></translation> <translation>Liens</translation>
</message> </message>
</context> </context>
<context> <context>
@ -1836,7 +1856,7 @@
<message> <message>
<location filename="../src/GUI/trackitem.cpp" line="33"/> <location filename="../src/GUI/trackitem.cpp" line="33"/>
<source>Links</source> <source>Links</source>
<translation type="unfinished"></translation> <translation>Liens</translation>
</message> </message>
</context> </context>
<context> <context>
@ -1867,9 +1887,14 @@
<translation>Description</translation> <translation>Description</translation>
</message> </message>
<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> <source>Links</source>
<translation type="unfinished"></translation> <translation>Liens</translation>
</message> </message>
</context> </context>
</TS> </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> <context>
<name>Data</name> <name>Data</name>
<message> <message>
<location filename="../src/data/data.cpp" line="173"/> <location filename="../src/data/data.cpp" line="179"/>
<source>Supported files</source> <source>Supported files</source>
<translation>Obsługiwane pliki</translation> <translation>Obsługiwane pliki</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="174"/> <location filename="../src/data/data.cpp" line="180"/>
<source>CSV files</source> <source>CSV files</source>
<translation>Pliki CSV</translation> <translation>Pliki CSV</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="175"/> <location filename="../src/data/data.cpp" line="181"/>
<source>CUP files</source> <source>CUP files</source>
<translation type="unfinished"></translation> <translation>Pliki CUP</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="176"/> <location filename="../src/data/data.cpp" line="182"/>
<source>FIT files</source> <source>FIT files</source>
<translation>Pliki FIT</translation> <translation>Pliki FIT</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="178"/> <location filename="../src/data/data.cpp" line="184"/>
<source>GeoJSON files</source> <source>GeoJSON files</source>
<translation>Pliki GeoJSON</translation> <translation>Pliki GeoJSON</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="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> <source>GPX files</source>
<translation>Pliki GPX</translation> <translation>Pliki GPX</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="181"/> <location filename="../src/data/data.cpp" line="188"/>
<source>IGC files</source> <source>IGC files</source>
<translation>Pliki IGC</translation> <translation>Pliki IGC</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="182"/> <location filename="../src/data/data.cpp" line="189"/>
<source>JPEG images</source> <source>JPEG images</source>
<translation>Pliki JPEG</translation> <translation>Pliki JPEG</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="183"/> <location filename="../src/data/data.cpp" line="190"/>
<source>KML files</source> <source>KML files</source>
<translation>Pliki KML</translation> <translation>Pliki KML</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="184"/> <location filename="../src/data/data.cpp" line="191"/>
<source>LOC files</source> <source>LOC files</source>
<translation>Pliki LOC</translation> <translation>Pliki LOC</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="185"/> <location filename="../src/data/data.cpp" line="192"/>
<source>NMEA files</source> <source>NMEA files</source>
<translation>Pliki NMEA</translation> <translation>Pliki NMEA</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="186"/> <location filename="../src/data/data.cpp" line="193"/>
<source>OziExplorer files</source> <source>OziExplorer files</source>
<translation>Pliki OziExplorer</translation> <translation>Pliki OziExplorer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="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> <source>TCX files</source>
<translation>Pliki TCX</translation> <translation>Pliki TCX</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="187"/> <location filename="../src/data/data.cpp" line="194"/>
<source>SLF files</source> <source>SLF files</source>
<translation>Pliki SLF</translation> <translation>Pliki SLF</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="189"/> <location filename="../src/data/data.cpp" line="197"/>
<source>All files</source> <source>All files</source>
<translation>Wszystkie pliki</translation> <translation>Wszystkie pliki</translation>
</message> </message>
@ -508,8 +518,8 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="413"/> <location filename="../src/GUI/gui.cpp" line="413"/>
<location filename="../src/GUI/gui.cpp" line="1058"/> <location filename="../src/GUI/gui.cpp" line="1059"/>
<location filename="../src/GUI/gui.cpp" line="1124"/> <location filename="../src/GUI/gui.cpp" line="1125"/>
<source>Moving time</source> <source>Moving time</source>
<translation>Czas ruchu</translation> <translation>Czas ruchu</translation>
</message> </message>
@ -664,32 +674,32 @@
<translation>Katalog ze stylami:</translation> <translation>Katalog ze stylami:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1036"/> <location filename="../src/GUI/gui.cpp" line="1037"/>
<location filename="../src/GUI/gui.cpp" line="1104"/> <location filename="../src/GUI/gui.cpp" line="1105"/>
<source>Areas</source> <source>Areas</source>
<translation>Obszary</translation> <translation>Obszary</translation>
</message> </message>
<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="1080"/>
<location filename="../src/GUI/gui.cpp" line="1081"/>
<source>Statistics</source> <source>Statistics</source>
<translation>Statystyka</translation> <translation>Statystyka</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1312"/> <location filename="../src/GUI/gui.cpp" line="1313"/>
<source>Open map file</source> <source>Open map file</source>
<translation>Otwórz plik mapy</translation> <translation>Otwórz plik mapy</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1346"/> <location filename="../src/GUI/gui.cpp" line="1347"/>
<source>No files loaded</source> <source>No files loaded</source>
<translation>Nie załadowano żadnych plików</translation> <translation>Nie załadowano żadnych plików</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1042"/> <location filename="../src/GUI/gui.cpp" line="1043"/>
<location filename="../src/GUI/gui.cpp" line="1046"/> <location filename="../src/GUI/gui.cpp" line="1047"/>
<location filename="../src/GUI/gui.cpp" line="1110"/> <location filename="../src/GUI/gui.cpp" line="1111"/>
<location filename="../src/GUI/gui.cpp" line="1113"/> <location filename="../src/GUI/gui.cpp" line="1114"/>
<source>Date</source> <source>Date</source>
<translation>Data</translation> <translation>Data</translation>
</message> </message>
@ -744,18 +754,18 @@
<translation>Katalog pamięci podręcznej kafelków:</translation> <translation>Katalog pamięci podręcznej kafelków:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1030"/> <location filename="../src/GUI/gui.cpp" line="1031"/>
<location filename="../src/GUI/gui.cpp" line="1100"/> <location filename="../src/GUI/gui.cpp" line="1101"/>
<source>Routes</source> <source>Routes</source>
<translation>Trasy</translation> <translation>Trasy</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1335"/> <location filename="../src/GUI/gui.cpp" line="1336"/>
<source>Error loading map:</source> <source>Error loading map:</source>
<translation>Wystąpił błąd podczas ładowania mapy:</translation> <translation>Wystąpił błąd podczas ładowania mapy:</translation>
</message> </message>
<message numerus="yes"> <message numerus="yes">
<location filename="../src/GUI/gui.cpp" line="1350"/> <location filename="../src/GUI/gui.cpp" line="1351"/>
<source>%n files</source> <source>%n files</source>
<translation> <translation>
<numerusform>%n plik</numerusform> <numerusform>%n plik</numerusform>
@ -779,8 +789,8 @@
<translation>Eksportuj do PDF...</translation> <translation>Eksportuj do PDF...</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1033"/> <location filename="../src/GUI/gui.cpp" line="1034"/>
<location filename="../src/GUI/gui.cpp" line="1102"/> <location filename="../src/GUI/gui.cpp" line="1103"/>
<source>Waypoints</source> <source>Waypoints</source>
<translation>Punkty nawigacyjne</translation> <translation>Punkty nawigacyjne</translation>
</message> </message>
@ -821,13 +831,13 @@
<translation>Błąd podczas ładowania pliku POI:</translation> <translation>Błąd podczas ładowania pliku POI:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1094"/> <location filename="../src/GUI/gui.cpp" line="1095"/>
<source>Name</source> <source>Name</source>
<translation>Nazwa</translation> <translation>Nazwa</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1027"/> <location filename="../src/GUI/gui.cpp" line="1028"/>
<location filename="../src/GUI/gui.cpp" line="1098"/> <location filename="../src/GUI/gui.cpp" line="1099"/>
<source>Tracks</source> <source>Tracks</source>
<translation>Ślady</translation> <translation>Ślady</translation>
</message> </message>
@ -844,16 +854,16 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="369"/> <location filename="../src/GUI/gui.cpp" line="369"/>
<location filename="../src/GUI/gui.cpp" line="1053"/> <location filename="../src/GUI/gui.cpp" line="1054"/>
<location filename="../src/GUI/gui.cpp" line="1120"/> <location filename="../src/GUI/gui.cpp" line="1121"/>
<source>Distance</source> <source>Distance</source>
<translation>Dystans</translation> <translation>Dystans</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="376"/> <location filename="../src/GUI/gui.cpp" line="376"/>
<location filename="../src/GUI/gui.cpp" line="552"/> <location filename="../src/GUI/gui.cpp" line="552"/>
<location filename="../src/GUI/gui.cpp" line="1056"/> <location filename="../src/GUI/gui.cpp" line="1057"/>
<location filename="../src/GUI/gui.cpp" line="1122"/> <location filename="../src/GUI/gui.cpp" line="1123"/>
<source>Time</source> <source>Time</source>
<translation>Czas</translation> <translation>Czas</translation>
</message> </message>
@ -950,12 +960,12 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/graphview.cpp" line="66"/> <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> <source>Distance</source>
<translation>Dystans</translation> <translation>Dystans</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/graphview.cpp" line="175"/> <location filename="../src/GUI/graphview.cpp" line="179"/>
<source>Time</source> <source>Time</source>
<translation>Czas</translation> <translation>Czas</translation>
</message> </message>
@ -1054,478 +1064,488 @@
<context> <context>
<name>OptionsDialog</name> <name>OptionsDialog</name>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="169"/> <location filename="../src/GUI/optionsdialog.cpp" line="175"/>
<source>Base color:</source> <source>Base color:</source>
<translation>Kolor podstawowy:</translation> <translation>Kolor podstawowy:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="170"/> <location filename="../src/GUI/optionsdialog.cpp" line="176"/>
<source>Palette shift:</source> <source>Palette shift:</source>
<translation>Przesunięcie palety:</translation> <translation>Przesunięcie palety:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="114"/> <location filename="../src/GUI/optionsdialog.cpp" line="120"/>
<source>Track width:</source> <source>Track width:</source>
<translation>Szerokość śladu:</translation> <translation>Szerokość śladu:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="115"/> <location filename="../src/GUI/optionsdialog.cpp" line="121"/>
<source>Track style:</source> <source>Track style:</source>
<translation>Styl śladu:</translation> <translation>Styl śladu:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="119"/> <location filename="../src/GUI/optionsdialog.cpp" line="125"/>
<source>Tracks</source> <source>Tracks</source>
<translation>Ślady</translation> <translation>Ślady</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="131"/> <location filename="../src/GUI/optionsdialog.cpp" line="137"/>
<source>Route width:</source> <source>Route width:</source>
<translation>Szerokość trasy:</translation> <translation>Szerokość trasy:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="132"/> <location filename="../src/GUI/optionsdialog.cpp" line="138"/>
<source>Route style:</source> <source>Route style:</source>
<translation>Styl trasy:</translation> <translation>Styl trasy:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="136"/> <location filename="../src/GUI/optionsdialog.cpp" line="142"/>
<source>Routes</source> <source>Routes</source>
<translation>Trasy</translation> <translation>Trasy</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="172"/> <location filename="../src/GUI/optionsdialog.cpp" line="178"/>
<location filename="../src/GUI/optionsdialog.cpp" line="255"/> <location filename="../src/GUI/optionsdialog.cpp" line="261"/>
<source>Use anti-aliasing</source> <source>Use anti-aliasing</source>
<translation>Użyj wygładzania</translation> <translation>Użyj wygładzania</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="252"/> <location filename="../src/GUI/optionsdialog.cpp" line="258"/>
<source>Line width:</source> <source>Line width:</source>
<translation>Szerokość lini:</translation> <translation>Szerokość lini:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="276"/> <location filename="../src/GUI/optionsdialog.cpp" line="282"/>
<source>Background color:</source> <source>Background color:</source>
<translation>Kolor tła:</translation> <translation>Kolor tła:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="287"/> <location filename="../src/GUI/optionsdialog.cpp" line="293"/>
<source>Paths</source> <source>Paths</source>
<translation>Ścieżki</translation> <translation>Ścieżki</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="277"/> <location filename="../src/GUI/optionsdialog.cpp" line="283"/>
<source>Map opacity:</source> <source>Map opacity:</source>
<translation>Nieprzezroczystość mapy:</translation> <translation>Nieprzezroczystość mapy:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="290"/> <location filename="../src/GUI/optionsdialog.cpp" line="296"/>
<source>Map</source> <source>Map</source>
<translation>Mapa</translation> <translation>Mapa</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="289"/> <location filename="../src/GUI/optionsdialog.cpp" line="295"/>
<location filename="../src/GUI/optionsdialog.cpp" line="545"/> <location filename="../src/GUI/optionsdialog.cpp" line="575"/>
<source>Graphs</source> <source>Graphs</source>
<translation>Wykresy</translation> <translation>Wykresy</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="55"/> <location filename="../src/GUI/optionsdialog.cpp" line="61"/>
<source>High-resolution</source> <source>High-resolution</source>
<translation>Wysoka rozdzielczość</translation> <translation>Wysoka rozdzielczość</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="56"/> <location filename="../src/GUI/optionsdialog.cpp" line="62"/>
<source>Standard</source> <source>Standard</source>
<translation>Standardowy</translation> <translation>Standardowy</translation>
</message> </message>
<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> <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> <translation>Mapy inne niż HiDPI ładowane jako mapy HiDPI. Mapa jest ostra, ale obiekty mapy małe / trudne do odczytania.</translation>
</message> </message>
<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> <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> <translation>Mapy inne niż HiDPI ładowane w takiej postaci, w jakiej . Obiekty mapy mają oczekiwany rozmiar, ale mapa jest rozmyta / nieostra.</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="98"/> <location filename="../src/GUI/optionsdialog.cpp" line="104"/>
<source>HiDPI display mode</source> <source>HiDPI display mode</source>
<translation>Tryb wyświetlania HiDPI</translation> <translation>Tryb wyświetlania HiDPI</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="117"/> <location filename="../src/GUI/optionsdialog.cpp" line="123"/>
<location filename="../src/GUI/optionsdialog.cpp" line="134"/> <location filename="../src/GUI/optionsdialog.cpp" line="140"/>
<location filename="../src/GUI/optionsdialog.cpp" line="153"/> <location filename="../src/GUI/optionsdialog.cpp" line="159"/>
<source>Width:</source> <source>Width:</source>
<translation>Szerokość:</translation> <translation>Szerokość:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="118"/> <location filename="../src/GUI/optionsdialog.cpp" line="124"/>
<location filename="../src/GUI/optionsdialog.cpp" line="135"/> <location filename="../src/GUI/optionsdialog.cpp" line="141"/>
<location filename="../src/GUI/optionsdialog.cpp" line="154"/> <location filename="../src/GUI/optionsdialog.cpp" line="160"/>
<source>Style:</source> <source>Style:</source>
<translation>Styl:</translation> <translation>Styl:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="205"/> <location filename="../src/GUI/optionsdialog.cpp" line="211"/>
<source>Waypoint color:</source> <source>Waypoint color:</source>
<translation>Kolor punktów nawigacyjnych:</translation> <translation>Kolor punktów nawigacyjnych:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="206"/> <location filename="../src/GUI/optionsdialog.cpp" line="212"/>
<source>Waypoint size:</source> <source>Waypoint size:</source>
<translation>Rozmiar punktów nawigacyjnych:</translation> <translation>Rozmiar punktów nawigacyjnych:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="208"/> <location filename="../src/GUI/optionsdialog.cpp" line="214"/>
<location filename="../src/GUI/optionsdialog.cpp" line="224"/> <location filename="../src/GUI/optionsdialog.cpp" line="230"/>
<source>Color:</source> <source>Color:</source>
<translation>Kolor:</translation> <translation>Kolor:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="209"/> <location filename="../src/GUI/optionsdialog.cpp" line="215"/>
<location filename="../src/GUI/optionsdialog.cpp" line="225"/> <location filename="../src/GUI/optionsdialog.cpp" line="231"/>
<source>Size:</source> <source>Size:</source>
<translation>Rozmiar:</translation> <translation>Rozmiar:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="210"/> <location filename="../src/GUI/optionsdialog.cpp" line="216"/>
<source>Waypoints</source> <source>Waypoints</source>
<translation>Punkty nawigacyjne</translation> <translation>Punkty nawigacyjne</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="221"/> <location filename="../src/GUI/optionsdialog.cpp" line="227"/>
<source>POI color:</source> <source>POI color:</source>
<translation>Kolor POI:</translation> <translation>Kolor POI:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="222"/> <location filename="../src/GUI/optionsdialog.cpp" line="228"/>
<source>POI size:</source> <source>POI size:</source>
<translation>Rozmiar POI:</translation> <translation>Rozmiar POI:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="226"/> <location filename="../src/GUI/optionsdialog.cpp" line="232"/>
<source>POIs</source> <source>POIs</source>
<translation>Punkty POI</translation> <translation>Punkty POI</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="253"/> <location filename="../src/GUI/optionsdialog.cpp" line="259"/>
<source>Slider color:</source> <source>Slider color:</source>
<translation>Kolor suwaka:</translation> <translation>Kolor suwaka:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="288"/> <location filename="../src/GUI/optionsdialog.cpp" line="294"/>
<source>Points</source> <source>Points</source>
<translation>Punkty</translation> <translation>Punkty</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="297"/> <location filename="../src/GUI/optionsdialog.cpp" line="303"/>
<source>Moving average window size</source> <source>Moving average window size</source>
<translation>Rozmiar okna średniej ruchomej</translation> <translation>Rozmiar okna średniej ruchomej</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="316"/> <location filename="../src/GUI/optionsdialog.cpp" line="322"/>
<location filename="../src/GUI/optionsdialog.cpp" line="402"/> <location filename="../src/GUI/optionsdialog.cpp" line="432"/>
<location filename="../src/GUI/optionsdialog.cpp" line="465"/> <location filename="../src/GUI/optionsdialog.cpp" line="495"/>
<source>Elevation:</source> <source>Elevation:</source>
<translation>Wysokość:</translation> <translation>Wysokość:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="317"/> <location filename="../src/GUI/optionsdialog.cpp" line="323"/>
<location filename="../src/GUI/optionsdialog.cpp" line="401"/> <location filename="../src/GUI/optionsdialog.cpp" line="431"/>
<source>Speed:</source> <source>Speed:</source>
<translation>Prędkość:</translation> <translation>Prędkość:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="318"/> <location filename="../src/GUI/optionsdialog.cpp" line="324"/>
<source>Heart rate:</source> <source>Heart rate:</source>
<translation>Tętno:</translation> <translation>Tętno:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="319"/> <location filename="../src/GUI/optionsdialog.cpp" line="325"/>
<source>Cadence:</source> <source>Cadence:</source>
<translation>Kadencja:</translation> <translation>Kadencja:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="320"/> <location filename="../src/GUI/optionsdialog.cpp" line="326"/>
<source>Power:</source> <source>Power:</source>
<translation>Moc:</translation> <translation>Moc:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="322"/> <location filename="../src/GUI/optionsdialog.cpp" line="328"/>
<source>Smoothing</source> <source>Smoothing</source>
<translation>Wygładzanie</translation> <translation>Wygładzanie</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="326"/> <location filename="../src/GUI/optionsdialog.cpp" line="332"/>
<source>Eliminate GPS outliers</source> <source>Eliminate GPS outliers</source>
<translation>Wyeliminuj odstające dane GPS</translation> <translation>Wyeliminuj odstające dane GPS</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="335"/> <location filename="../src/GUI/optionsdialog.cpp" line="341"/>
<source>Smoothing:</source> <source>Smoothing:</source>
<translation>Wygładzanie:</translation> <translation>Wygładzanie:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="352"/> <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> <source>mi/h</source>
<translation>mi/h</translation> <translation>mi/h</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="355"/> <location filename="../src/GUI/optionsdialog.cpp" line="369"/>
<source>kn</source> <source>kn</source>
<translation>kn</translation> <translation>kn</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="358"/> <location filename="../src/GUI/optionsdialog.cpp" line="372"/>
<source>km/h</source> <source>km/h</source>
<translation>km/h</translation> <translation>km/h</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="362"/> <location filename="../src/GUI/optionsdialog.cpp" line="376"/>
<location filename="../src/GUI/optionsdialog.cpp" line="568"/> <location filename="../src/GUI/optionsdialog.cpp" line="598"/>
<source>s</source> <source>s</source>
<translation>s</translation> <translation>s</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="366"/> <location filename="../src/GUI/optionsdialog.cpp" line="392"/>
<source>Minimal speed:</source> <source>Minimal speed:</source>
<translation>Minimalna prędkość:</translation> <translation>Minimalna prędkość:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="367"/> <location filename="../src/GUI/optionsdialog.cpp" line="393"/>
<source>Minimal duration:</source> <source>Minimal duration:</source>
<translation>Minimalny czas trwania:</translation> <translation>Minimalny czas trwania:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="373"/> <location filename="../src/GUI/optionsdialog.cpp" line="403"/>
<source>Computed from distance/time</source> <source>Computed from distance/time</source>
<translation>Obliczona na postawie odległości/czasu</translation> <translation>Obliczona na postawie odległości/czasu</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="374"/> <location filename="../src/GUI/optionsdialog.cpp" line="404"/>
<source>Recorded by device</source> <source>Recorded by device</source>
<translation>Zapisana przez urządzenie</translation> <translation>Zapisana przez urządzenie</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="380"/> <location filename="../src/GUI/optionsdialog.cpp" line="410"/>
<location filename="../src/GUI/optionsdialog.cpp" line="438"/> <location filename="../src/GUI/optionsdialog.cpp" line="468"/>
<source>GPS data</source> <source>GPS data</source>
<translation>Dane GPS</translation> <translation>Dane GPS</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="381"/> <location filename="../src/GUI/optionsdialog.cpp" line="411"/>
<location filename="../src/GUI/optionsdialog.cpp" line="439"/> <location filename="../src/GUI/optionsdialog.cpp" line="469"/>
<source>DEM data</source> <source>DEM data</source>
<translation>Dane DEM</translation> <translation>Dane DEM</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="418"/> <location filename="../src/GUI/optionsdialog.cpp" line="448"/>
<source>Elevation</source> <source>Elevation</source>
<translation>Wysokość</translation> <translation>Wysokość</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="429"/> <location filename="../src/GUI/optionsdialog.cpp" line="459"/>
<source>Filtering</source> <source>Filtering</source>
<translation>Filtrowanie</translation> <translation>Filtrowanie</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="430"/> <location filename="../src/GUI/optionsdialog.cpp" line="460"/>
<source>Sources</source> <source>Sources</source>
<translation>Źródła</translation> <translation>Źródła</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="431"/> <location filename="../src/GUI/optionsdialog.cpp" line="461"/>
<source>Pause detection</source> <source>Pause detection</source>
<translation>Wykrywanie postoju</translation> <translation>Wykrywanie postoju</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="464"/> <location filename="../src/GUI/optionsdialog.cpp" line="494"/>
<source>Radius:</source> <source>Radius:</source>
<translation>Promień:</translation> <translation>Promień:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="412"/> <location filename="../src/GUI/optionsdialog.cpp" line="442"/>
<source>Speed</source> <source>Speed</source>
<translation>Prędkość</translation> <translation>Prędkość</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="74"/> <location filename="../src/GUI/optionsdialog.cpp" line="80"/>
<source>Projection:</source> <source>Projection:</source>
<translation>Odwzorowanie:</translation> <translation>Odwzorowanie:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="96"/> <location filename="../src/GUI/optionsdialog.cpp" line="102"/>
<source>Vector maps</source> <source>Vector maps</source>
<translation>Mapy wektorowe</translation> <translation>Mapy wektorowe</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="149"/> <location filename="../src/GUI/optionsdialog.cpp" line="155"/>
<source>Area border width:</source> <source>Area border width:</source>
<translation>Szerokość granicy obszaru:</translation> <translation>Szerokość granicy obszaru:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="150"/> <location filename="../src/GUI/optionsdialog.cpp" line="156"/>
<source>Area border style:</source> <source>Area border style:</source>
<translation>Styl obramowania obszaru:</translation> <translation>Styl obramowania obszaru:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="151"/> <location filename="../src/GUI/optionsdialog.cpp" line="157"/>
<source>Area fill opacity:</source> <source>Area fill opacity:</source>
<translation>Nieprzezroczystość wypełnienia obszaru:</translation> <translation>Nieprzezroczystość wypełnienia obszaru:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="155"/> <location filename="../src/GUI/optionsdialog.cpp" line="161"/>
<source>Fill opacity:</source> <source>Fill opacity:</source>
<translation>Nieprzezroczystość wypełnienia:</translation> <translation>Nieprzezroczystość wypełnienia:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="156"/> <location filename="../src/GUI/optionsdialog.cpp" line="162"/>
<source>Areas</source> <source>Areas</source>
<translation>Obszary</translation> <translation>Obszary</translation>
</message> </message>
<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> <source>mi</source>
<translation>mi</translation> <translation>mi</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="453"/> <location filename="../src/GUI/optionsdialog.cpp" line="483"/>
<source>nmi</source> <source>nmi</source>
<translation>nmi</translation> <translation>nmi</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="456"/> <location filename="../src/GUI/optionsdialog.cpp" line="486"/>
<source>km</source> <source>km</source>
<translation>km</translation> <translation>km</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="471"/> <location filename="../src/GUI/optionsdialog.cpp" line="501"/>
<location filename="../src/GUI/optionsdialog.cpp" line="611"/> <location filename="../src/GUI/optionsdialog.cpp" line="641"/>
<source>POI</source> <source>POI</source>
<translation>POI</translation> <translation>POI</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="478"/> <location filename="../src/GUI/optionsdialog.cpp" line="508"/>
<source>WYSIWYG</source> <source>WYSIWYG</source>
<translation>WYSIWYG</translation> <translation>WYSIWYG</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="479"/> <location filename="../src/GUI/optionsdialog.cpp" line="509"/>
<source>High-Resolution</source> <source>High-Resolution</source>
<translation>Wysoka rozdzielczość</translation> <translation>Wysoka rozdzielczość</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="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> <source>The printed area is approximately the display area. The map zoom level does not change.</source>
<translation>Wydrukowany obszar jest w przybliżeniu obszarem wyświetlania. Poziom powiększenia mapy nie zmienia się.</translation> <translation>Wydrukowany obszar jest w przybliżeniu obszarem wyświetlania. Poziom powiększenia mapy nie zmienia się.</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="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> <source>The zoom level will be changed so that the whole content (tracks/waypoints) fits to the printed area and the map resolution is as close as possible to the print resolution.</source>
<translation>Poziom powiększenia mapy zostanie dostosowany w taki sposób, aby cała zawartość (ścieżki/punkty) wchodziła do drukowanego obszaru, a rozdzielczość mapy była jak najbliższa rozdzielczości wydruku.</translation> <translation>Poziom powiększenia mapy zostanie dostosowany w taki sposób, aby cała zawartość (ścieżki/punkty) wchodziła do drukowanego obszaru, a rozdzielczość mapy była jak najbliższa rozdzielczości wydruku.</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="508"/> <location filename="../src/GUI/optionsdialog.cpp" line="538"/>
<source>Name</source> <source>Name</source>
<translation>Nazwa</translation> <translation>Nazwa</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="510"/> <location filename="../src/GUI/optionsdialog.cpp" line="540"/>
<source>Date</source> <source>Date</source>
<translation>Data</translation> <translation>Data</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="512"/> <location filename="../src/GUI/optionsdialog.cpp" line="542"/>
<source>Distance</source> <source>Distance</source>
<translation>Dystans</translation> <translation>Dystans</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="514"/> <location filename="../src/GUI/optionsdialog.cpp" line="544"/>
<source>Time</source> <source>Time</source>
<translation>Czas</translation> <translation>Czas</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="516"/> <location filename="../src/GUI/optionsdialog.cpp" line="546"/>
<source>Moving time</source> <source>Moving time</source>
<translation>Czas ruchu</translation> <translation>Czas ruchu</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="518"/> <location filename="../src/GUI/optionsdialog.cpp" line="548"/>
<source>Item count (&gt;1)</source> <source>Item count (&gt;1)</source>
<translation>Liczba elementów (&gt;1)</translation> <translation>Liczba elementów (&gt;1)</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="533"/> <location filename="../src/GUI/optionsdialog.cpp" line="563"/>
<source>Separate graph page</source> <source>Separate graph page</source>
<translation>Oddzielna strona wykresu</translation> <translation>Oddzielna strona wykresu</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="543"/> <location filename="../src/GUI/optionsdialog.cpp" line="573"/>
<source>Print mode</source> <source>Print mode</source>
<translation>Tryb wydruku</translation> <translation>Tryb wydruku</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="544"/> <location filename="../src/GUI/optionsdialog.cpp" line="574"/>
<source>Header</source> <source>Header</source>
<translation>Nagłówek</translation> <translation>Nagłówek</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="552"/> <location filename="../src/GUI/optionsdialog.cpp" line="582"/>
<source>Use OpenGL</source> <source>Use OpenGL</source>
<translation>Używaj OpenGL</translation> <translation>Używaj OpenGL</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="555"/> <location filename="../src/GUI/optionsdialog.cpp" line="585"/>
<source>Enable HTTP/2</source> <source>Enable HTTP/2</source>
<translation>Włącz HTTP/2</translation> <translation>Włącz HTTP/2</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="562"/> <location filename="../src/GUI/optionsdialog.cpp" line="592"/>
<source>MB</source> <source>MB</source>
<translation>MB</translation> <translation>MB</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="572"/> <location filename="../src/GUI/optionsdialog.cpp" line="602"/>
<source>Image cache size:</source> <source>Image cache size:</source>
<translation>Rozmiar pamięci podręcznej obrazu:</translation> <translation>Rozmiar pamięci podręcznej obrazu:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="573"/> <location filename="../src/GUI/optionsdialog.cpp" line="603"/>
<source>Connection timeout:</source> <source>Connection timeout:</source>
<translation>Limit czasu połączenia:</translation> <translation>Limit czasu połączenia:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="589"/> <location filename="../src/GUI/optionsdialog.cpp" line="619"/>
<location filename="../src/GUI/optionsdialog.cpp" line="614"/> <location filename="../src/GUI/optionsdialog.cpp" line="644"/>
<source>System</source> <source>System</source>
<translation>System</translation> <translation>System</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="607"/> <location filename="../src/GUI/optionsdialog.cpp" line="637"/>
<source>Appearance</source> <source>Appearance</source>
<translation>Wygląd</translation> <translation>Wygląd</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="609"/> <location filename="../src/GUI/optionsdialog.cpp" line="639"/>
<source>Maps</source> <source>Maps</source>
<translation>Mapy</translation> <translation>Mapy</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="610"/> <location filename="../src/GUI/optionsdialog.cpp" line="640"/>
<source>Data</source> <source>Data</source>
<translation>Dane</translation> <translation>Dane</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="612"/> <location filename="../src/GUI/optionsdialog.cpp" line="642"/>
<source>Print &amp; Export</source> <source>Print &amp; Export</source>
<translation>Drukowanie i eksport</translation> <translation>Drukowanie i eksport</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="641"/> <location filename="../src/GUI/optionsdialog.cpp" line="671"/>
<source>Options</source> <source>Options</source>
<translation>Opcje</translation> <translation>Opcje</translation>
</message> </message>
@ -1868,7 +1888,12 @@
<translation>Opis</translation> <translation>Opis</translation>
</message> </message>
<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> <source>Links</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

View File

@ -47,77 +47,87 @@
<context> <context>
<name>Data</name> <name>Data</name>
<message> <message>
<location filename="../src/data/data.cpp" line="173"/> <location filename="../src/data/data.cpp" line="179"/>
<source>Supported files</source> <source>Supported files</source>
<translation>Formatos suportados</translation> <translation>Formatos suportados</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="174"/> <location filename="../src/data/data.cpp" line="180"/>
<source>CSV files</source> <source>CSV files</source>
<translation>Arquivos CSV</translation> <translation>Arquivos CSV</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="175"/> <location filename="../src/data/data.cpp" line="181"/>
<source>CUP files</source> <source>CUP files</source>
<translation>Arquivos CUP</translation> <translation>Arquivos CUP</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="176"/> <location filename="../src/data/data.cpp" line="182"/>
<source>FIT files</source> <source>FIT files</source>
<translation>Arquivos FIT</translation> <translation>Arquivos FIT</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="178"/> <location filename="../src/data/data.cpp" line="184"/>
<source>GeoJSON files</source> <source>GeoJSON files</source>
<translation>Arquivos GeoJSON</translation> <translation>Arquivos GeoJSON</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="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> <source>GPX files</source>
<translation>Arquivos GPX</translation> <translation>Arquivos GPX</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="181"/> <location filename="../src/data/data.cpp" line="188"/>
<source>IGC files</source> <source>IGC files</source>
<translation>Arquivos IGC</translation> <translation>Arquivos IGC</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="182"/> <location filename="../src/data/data.cpp" line="189"/>
<source>JPEG images</source> <source>JPEG images</source>
<translation>Imagens JPEG</translation> <translation>Imagens JPEG</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="183"/> <location filename="../src/data/data.cpp" line="190"/>
<source>KML files</source> <source>KML files</source>
<translation>Arquivos KML</translation> <translation>Arquivos KML</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="184"/> <location filename="../src/data/data.cpp" line="191"/>
<source>LOC files</source> <source>LOC files</source>
<translation>Arquivos LOC</translation> <translation>Arquivos LOC</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="185"/> <location filename="../src/data/data.cpp" line="192"/>
<source>NMEA files</source> <source>NMEA files</source>
<translation>Arquivos NMEA</translation> <translation>Arquivos NMEA</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="186"/> <location filename="../src/data/data.cpp" line="193"/>
<source>OziExplorer files</source> <source>OziExplorer files</source>
<translation>Arquivos OziExplorer</translation> <translation>Arquivos OziExplorer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="187"/> <location filename="../src/data/data.cpp" line="194"/>
<source>SLF files</source> <source>SLF files</source>
<translation>Arquivos SLF</translation> <translation>Arquivos SLF</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="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> <source>TCX files</source>
<translation>Arquivos TCX</translation> <translation>Arquivos TCX</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="189"/> <location filename="../src/data/data.cpp" line="197"/>
<source>All files</source> <source>All files</source>
<translation>Todos os arquivos</translation> <translation>Todos os arquivos</translation>
</message> </message>
@ -484,16 +494,16 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="369"/> <location filename="../src/GUI/gui.cpp" line="369"/>
<location filename="../src/GUI/gui.cpp" line="1053"/> <location filename="../src/GUI/gui.cpp" line="1054"/>
<location filename="../src/GUI/gui.cpp" line="1120"/> <location filename="../src/GUI/gui.cpp" line="1121"/>
<source>Distance</source> <source>Distance</source>
<translation>Distância</translation> <translation>Distância</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="376"/> <location filename="../src/GUI/gui.cpp" line="376"/>
<location filename="../src/GUI/gui.cpp" line="552"/> <location filename="../src/GUI/gui.cpp" line="552"/>
<location filename="../src/GUI/gui.cpp" line="1056"/> <location filename="../src/GUI/gui.cpp" line="1057"/>
<location filename="../src/GUI/gui.cpp" line="1122"/> <location filename="../src/GUI/gui.cpp" line="1123"/>
<source>Time</source> <source>Time</source>
<translation>Tempo</translation> <translation>Tempo</translation>
</message> </message>
@ -524,8 +534,8 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="413"/> <location filename="../src/GUI/gui.cpp" line="413"/>
<location filename="../src/GUI/gui.cpp" line="1058"/> <location filename="../src/GUI/gui.cpp" line="1059"/>
<location filename="../src/GUI/gui.cpp" line="1124"/> <location filename="../src/GUI/gui.cpp" line="1125"/>
<source>Moving time</source> <source>Moving time</source>
<translation>Tempo em movimento</translation> <translation>Tempo em movimento</translation>
</message> </message>
@ -791,65 +801,65 @@
<translation>Erro ao carregar arquivo POI:</translation> <translation>Erro ao carregar arquivo POI:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1027"/> <location filename="../src/GUI/gui.cpp" line="1028"/>
<location filename="../src/GUI/gui.cpp" line="1098"/> <location filename="../src/GUI/gui.cpp" line="1099"/>
<source>Tracks</source> <source>Tracks</source>
<translation>Trilhas</translation> <translation>Trilhas</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1030"/> <location filename="../src/GUI/gui.cpp" line="1031"/>
<location filename="../src/GUI/gui.cpp" line="1100"/> <location filename="../src/GUI/gui.cpp" line="1101"/>
<source>Routes</source> <source>Routes</source>
<translation>Rotas</translation> <translation>Rotas</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1033"/> <location filename="../src/GUI/gui.cpp" line="1034"/>
<location filename="../src/GUI/gui.cpp" line="1102"/> <location filename="../src/GUI/gui.cpp" line="1103"/>
<source>Waypoints</source> <source>Waypoints</source>
<translation>Waypoints</translation> <translation>Waypoints</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1036"/> <location filename="../src/GUI/gui.cpp" line="1037"/>
<location filename="../src/GUI/gui.cpp" line="1104"/> <location filename="../src/GUI/gui.cpp" line="1105"/>
<source>Areas</source> <source>Areas</source>
<translation>Áreas</translation> <translation>Áreas</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1042"/> <location filename="../src/GUI/gui.cpp" line="1043"/>
<location filename="../src/GUI/gui.cpp" line="1046"/> <location filename="../src/GUI/gui.cpp" line="1047"/>
<location filename="../src/GUI/gui.cpp" line="1110"/> <location filename="../src/GUI/gui.cpp" line="1111"/>
<location filename="../src/GUI/gui.cpp" line="1113"/> <location filename="../src/GUI/gui.cpp" line="1114"/>
<source>Date</source> <source>Date</source>
<translation>Data</translation> <translation>Data</translation>
</message> </message>
<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="1080"/>
<location filename="../src/GUI/gui.cpp" line="1081"/>
<source>Statistics</source> <source>Statistics</source>
<translation>Estatísticas</translation> <translation>Estatísticas</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1094"/> <location filename="../src/GUI/gui.cpp" line="1095"/>
<source>Name</source> <source>Name</source>
<translation>Nome</translation> <translation>Nome</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1312"/> <location filename="../src/GUI/gui.cpp" line="1313"/>
<source>Open map file</source> <source>Open map file</source>
<translation>Abrir arquivo de mapa</translation> <translation>Abrir arquivo de mapa</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1335"/> <location filename="../src/GUI/gui.cpp" line="1336"/>
<source>Error loading map:</source> <source>Error loading map:</source>
<translation>Erro ao carregar o mapa:</translation> <translation>Erro ao carregar o mapa:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1346"/> <location filename="../src/GUI/gui.cpp" line="1347"/>
<source>No files loaded</source> <source>No files loaded</source>
<translation>Nenhum arquivo carregado</translation> <translation>Nenhum arquivo carregado</translation>
</message> </message>
<message numerus="yes"> <message numerus="yes">
<location filename="../src/GUI/gui.cpp" line="1350"/> <location filename="../src/GUI/gui.cpp" line="1351"/>
<source>%n files</source> <source>%n files</source>
<translation> <translation>
<numerusform>%n arquivo</numerusform> <numerusform>%n arquivo</numerusform>
@ -908,7 +918,7 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/graphview.cpp" line="66"/> <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> <source>Distance</source>
<translation>Distância</translation> <translation>Distância</translation>
</message> </message>
@ -954,7 +964,7 @@
<translation>h</translation> <translation>h</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/graphview.cpp" line="175"/> <location filename="../src/GUI/graphview.cpp" line="179"/>
<source>Time</source> <source>Time</source>
<translation>Tempo</translation> <translation>Tempo</translation>
</message> </message>
@ -1053,478 +1063,488 @@
<context> <context>
<name>OptionsDialog</name> <name>OptionsDialog</name>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="55"/> <location filename="../src/GUI/optionsdialog.cpp" line="61"/>
<source>High-resolution</source> <source>High-resolution</source>
<translation>Alta resolução</translation> <translation>Alta resolução</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="56"/> <location filename="../src/GUI/optionsdialog.cpp" line="62"/>
<source>Standard</source> <source>Standard</source>
<translation>Padrão</translation> <translation>Padrão</translation>
</message> </message>
<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> <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> <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>
<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> <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> <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>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="74"/> <location filename="../src/GUI/optionsdialog.cpp" line="80"/>
<source>Projection:</source> <source>Projection:</source>
<translation>Projeção:</translation> <translation>Projeção:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="96"/> <location filename="../src/GUI/optionsdialog.cpp" line="102"/>
<source>Vector maps</source> <source>Vector maps</source>
<translation>Mapas vetoriais</translation> <translation>Mapas vetoriais</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="98"/> <location filename="../src/GUI/optionsdialog.cpp" line="104"/>
<source>HiDPI display mode</source> <source>HiDPI display mode</source>
<translation>Modo de exibição HiDPI</translation> <translation>Modo de exibição HiDPI</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="114"/> <location filename="../src/GUI/optionsdialog.cpp" line="120"/>
<source>Track width:</source> <source>Track width:</source>
<translation>Largura da trilha:</translation> <translation>Largura da trilha:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="115"/> <location filename="../src/GUI/optionsdialog.cpp" line="121"/>
<source>Track style:</source> <source>Track style:</source>
<translation>Estilo da trilha:</translation> <translation>Estilo da trilha:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="117"/> <location filename="../src/GUI/optionsdialog.cpp" line="123"/>
<location filename="../src/GUI/optionsdialog.cpp" line="134"/> <location filename="../src/GUI/optionsdialog.cpp" line="140"/>
<location filename="../src/GUI/optionsdialog.cpp" line="153"/> <location filename="../src/GUI/optionsdialog.cpp" line="159"/>
<source>Width:</source> <source>Width:</source>
<translation>Largura:</translation> <translation>Largura:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="118"/> <location filename="../src/GUI/optionsdialog.cpp" line="124"/>
<location filename="../src/GUI/optionsdialog.cpp" line="135"/> <location filename="../src/GUI/optionsdialog.cpp" line="141"/>
<location filename="../src/GUI/optionsdialog.cpp" line="154"/> <location filename="../src/GUI/optionsdialog.cpp" line="160"/>
<source>Style:</source> <source>Style:</source>
<translation>Estilo:</translation> <translation>Estilo:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="119"/> <location filename="../src/GUI/optionsdialog.cpp" line="125"/>
<source>Tracks</source> <source>Tracks</source>
<translation>Trilhas</translation> <translation>Trilhas</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="131"/> <location filename="../src/GUI/optionsdialog.cpp" line="137"/>
<source>Route width:</source> <source>Route width:</source>
<translation>Largura da rota:</translation> <translation>Largura da rota:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="132"/> <location filename="../src/GUI/optionsdialog.cpp" line="138"/>
<source>Route style:</source> <source>Route style:</source>
<translation>Estilo da rota:</translation> <translation>Estilo da rota:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="136"/> <location filename="../src/GUI/optionsdialog.cpp" line="142"/>
<source>Routes</source> <source>Routes</source>
<translation>Rotas</translation> <translation>Rotas</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="149"/> <location filename="../src/GUI/optionsdialog.cpp" line="155"/>
<source>Area border width:</source> <source>Area border width:</source>
<translation>Largura de borda de área:</translation> <translation>Largura de borda de área:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="150"/> <location filename="../src/GUI/optionsdialog.cpp" line="156"/>
<source>Area border style:</source> <source>Area border style:</source>
<translation>Estilo de borda de área:</translation> <translation>Estilo de borda de área:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="151"/> <location filename="../src/GUI/optionsdialog.cpp" line="157"/>
<source>Area fill opacity:</source> <source>Area fill opacity:</source>
<translation>Opacidade de preenchimento de área:</translation> <translation>Opacidade de preenchimento de área:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="155"/> <location filename="../src/GUI/optionsdialog.cpp" line="161"/>
<source>Fill opacity:</source> <source>Fill opacity:</source>
<translation>Opacidade de preenchimento:</translation> <translation>Opacidade de preenchimento:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="156"/> <location filename="../src/GUI/optionsdialog.cpp" line="162"/>
<source>Areas</source> <source>Areas</source>
<translation>Áreas</translation> <translation>Áreas</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="169"/> <location filename="../src/GUI/optionsdialog.cpp" line="175"/>
<source>Base color:</source> <source>Base color:</source>
<translation>Cor de base:</translation> <translation>Cor de base:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="170"/> <location filename="../src/GUI/optionsdialog.cpp" line="176"/>
<source>Palette shift:</source> <source>Palette shift:</source>
<translation>Deslocamento de paleta:</translation> <translation>Deslocamento de paleta:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="172"/> <location filename="../src/GUI/optionsdialog.cpp" line="178"/>
<location filename="../src/GUI/optionsdialog.cpp" line="255"/> <location filename="../src/GUI/optionsdialog.cpp" line="261"/>
<source>Use anti-aliasing</source> <source>Use anti-aliasing</source>
<translation>Usar anti-aliasing</translation> <translation>Usar anti-aliasing</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="205"/> <location filename="../src/GUI/optionsdialog.cpp" line="211"/>
<source>Waypoint color:</source> <source>Waypoint color:</source>
<translation>Cor de waypoint:</translation> <translation>Cor de waypoint:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="206"/> <location filename="../src/GUI/optionsdialog.cpp" line="212"/>
<source>Waypoint size:</source> <source>Waypoint size:</source>
<translation>Tamanho de waypoint:</translation> <translation>Tamanho de waypoint:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="208"/> <location filename="../src/GUI/optionsdialog.cpp" line="214"/>
<location filename="../src/GUI/optionsdialog.cpp" line="224"/> <location filename="../src/GUI/optionsdialog.cpp" line="230"/>
<source>Color:</source> <source>Color:</source>
<translation>Cor:</translation> <translation>Cor:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="209"/> <location filename="../src/GUI/optionsdialog.cpp" line="215"/>
<location filename="../src/GUI/optionsdialog.cpp" line="225"/> <location filename="../src/GUI/optionsdialog.cpp" line="231"/>
<source>Size:</source> <source>Size:</source>
<translation>Tamanho:</translation> <translation>Tamanho:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="210"/> <location filename="../src/GUI/optionsdialog.cpp" line="216"/>
<source>Waypoints</source> <source>Waypoints</source>
<translation>Waypoints</translation> <translation>Waypoints</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="221"/> <location filename="../src/GUI/optionsdialog.cpp" line="227"/>
<source>POI color:</source> <source>POI color:</source>
<translation>Cor do POI:</translation> <translation>Cor do POI:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="222"/> <location filename="../src/GUI/optionsdialog.cpp" line="228"/>
<source>POI size:</source> <source>POI size:</source>
<translation>Tamanho do POI:</translation> <translation>Tamanho do POI:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="226"/> <location filename="../src/GUI/optionsdialog.cpp" line="232"/>
<source>POIs</source> <source>POIs</source>
<translation>POIs</translation> <translation>POIs</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="252"/> <location filename="../src/GUI/optionsdialog.cpp" line="258"/>
<source>Line width:</source> <source>Line width:</source>
<translation>Largura de linha:</translation> <translation>Largura de linha:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="253"/> <location filename="../src/GUI/optionsdialog.cpp" line="259"/>
<source>Slider color:</source> <source>Slider color:</source>
<translation>Cor do cursor:</translation> <translation>Cor do cursor:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="276"/> <location filename="../src/GUI/optionsdialog.cpp" line="282"/>
<source>Background color:</source> <source>Background color:</source>
<translation>Cor de fundo:</translation> <translation>Cor de fundo:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="277"/> <location filename="../src/GUI/optionsdialog.cpp" line="283"/>
<source>Map opacity:</source> <source>Map opacity:</source>
<translation>Opacidade do mapa:</translation> <translation>Opacidade do mapa:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="287"/> <location filename="../src/GUI/optionsdialog.cpp" line="293"/>
<source>Paths</source> <source>Paths</source>
<translation>Caminhos</translation> <translation>Caminhos</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="288"/> <location filename="../src/GUI/optionsdialog.cpp" line="294"/>
<source>Points</source> <source>Points</source>
<translation>Pontos</translation> <translation>Pontos</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="289"/> <location filename="../src/GUI/optionsdialog.cpp" line="295"/>
<location filename="../src/GUI/optionsdialog.cpp" line="545"/> <location filename="../src/GUI/optionsdialog.cpp" line="575"/>
<source>Graphs</source> <source>Graphs</source>
<translation>Gráficos</translation> <translation>Gráficos</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="290"/> <location filename="../src/GUI/optionsdialog.cpp" line="296"/>
<source>Map</source> <source>Map</source>
<translation>Mapa</translation> <translation>Mapa</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="297"/> <location filename="../src/GUI/optionsdialog.cpp" line="303"/>
<source>Moving average window size</source> <source>Moving average window size</source>
<translation>Tamanho de janela da média móvel</translation> <translation>Tamanho de janela da média móvel</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="316"/> <location filename="../src/GUI/optionsdialog.cpp" line="322"/>
<location filename="../src/GUI/optionsdialog.cpp" line="402"/> <location filename="../src/GUI/optionsdialog.cpp" line="432"/>
<location filename="../src/GUI/optionsdialog.cpp" line="465"/> <location filename="../src/GUI/optionsdialog.cpp" line="495"/>
<source>Elevation:</source> <source>Elevation:</source>
<translation>Altitude:</translation> <translation>Altitude:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="317"/> <location filename="../src/GUI/optionsdialog.cpp" line="323"/>
<location filename="../src/GUI/optionsdialog.cpp" line="401"/> <location filename="../src/GUI/optionsdialog.cpp" line="431"/>
<source>Speed:</source> <source>Speed:</source>
<translation>Velocidade:</translation> <translation>Velocidade:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="318"/> <location filename="../src/GUI/optionsdialog.cpp" line="324"/>
<source>Heart rate:</source> <source>Heart rate:</source>
<translation>Frequência cardiaca:</translation> <translation>Frequência cardiaca:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="319"/> <location filename="../src/GUI/optionsdialog.cpp" line="325"/>
<source>Cadence:</source> <source>Cadence:</source>
<translation>Cadência:</translation> <translation>Cadência:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="320"/> <location filename="../src/GUI/optionsdialog.cpp" line="326"/>
<source>Power:</source> <source>Power:</source>
<translation>Potência:</translation> <translation>Potência:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="322"/> <location filename="../src/GUI/optionsdialog.cpp" line="328"/>
<source>Smoothing</source> <source>Smoothing</source>
<translation>Suavizar</translation> <translation>Suavizar</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="326"/> <location filename="../src/GUI/optionsdialog.cpp" line="332"/>
<source>Eliminate GPS outliers</source> <source>Eliminate GPS outliers</source>
<translation>Eliminar valores atípicos do GPS</translation> <translation>Eliminar valores atípicos do GPS</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="335"/> <location filename="../src/GUI/optionsdialog.cpp" line="341"/>
<source>Smoothing:</source> <source>Smoothing:</source>
<translation>Suavizar:</translation> <translation>Suavizar:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="352"/> <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> <source>mi/h</source>
<translation>mi/h</translation> <translation>mi/h</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="355"/> <location filename="../src/GUI/optionsdialog.cpp" line="369"/>
<source>kn</source> <source>kn</source>
<translation>kn</translation> <translation>kn</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="358"/> <location filename="../src/GUI/optionsdialog.cpp" line="372"/>
<source>km/h</source> <source>km/h</source>
<translation>km/h</translation> <translation>km/h</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="362"/> <location filename="../src/GUI/optionsdialog.cpp" line="376"/>
<location filename="../src/GUI/optionsdialog.cpp" line="568"/> <location filename="../src/GUI/optionsdialog.cpp" line="598"/>
<source>s</source> <source>s</source>
<translation>s</translation> <translation>s</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="366"/> <location filename="../src/GUI/optionsdialog.cpp" line="392"/>
<source>Minimal speed:</source> <source>Minimal speed:</source>
<translation>Velocidade Mínima:</translation> <translation>Velocidade Mínima:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="367"/> <location filename="../src/GUI/optionsdialog.cpp" line="393"/>
<source>Minimal duration:</source> <source>Minimal duration:</source>
<translation>Duração mínima:</translation> <translation>Duração mínima:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="373"/> <location filename="../src/GUI/optionsdialog.cpp" line="403"/>
<source>Computed from distance/time</source> <source>Computed from distance/time</source>
<translation>Calculada a partir da distância/tempo</translation> <translation>Calculada a partir da distância/tempo</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="374"/> <location filename="../src/GUI/optionsdialog.cpp" line="404"/>
<source>Recorded by device</source> <source>Recorded by device</source>
<translation>Gravada através de dispositivo</translation> <translation>Gravada através de dispositivo</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="380"/> <location filename="../src/GUI/optionsdialog.cpp" line="410"/>
<location filename="../src/GUI/optionsdialog.cpp" line="438"/> <location filename="../src/GUI/optionsdialog.cpp" line="468"/>
<source>GPS data</source> <source>GPS data</source>
<translation>Dados de GPS</translation> <translation>Dados de GPS</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="381"/> <location filename="../src/GUI/optionsdialog.cpp" line="411"/>
<location filename="../src/GUI/optionsdialog.cpp" line="439"/> <location filename="../src/GUI/optionsdialog.cpp" line="469"/>
<source>DEM data</source> <source>DEM data</source>
<translation>Dados de DEM</translation> <translation>Dados de DEM</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="412"/> <location filename="../src/GUI/optionsdialog.cpp" line="442"/>
<source>Speed</source> <source>Speed</source>
<translation>Velocidade</translation> <translation>Velocidade</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="418"/> <location filename="../src/GUI/optionsdialog.cpp" line="448"/>
<source>Elevation</source> <source>Elevation</source>
<translation>Altitude</translation> <translation>Altitude</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="429"/> <location filename="../src/GUI/optionsdialog.cpp" line="459"/>
<source>Filtering</source> <source>Filtering</source>
<translation>Filtragem</translation> <translation>Filtragem</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="430"/> <location filename="../src/GUI/optionsdialog.cpp" line="460"/>
<source>Sources</source> <source>Sources</source>
<translation>Fontes</translation> <translation>Fontes</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="431"/> <location filename="../src/GUI/optionsdialog.cpp" line="461"/>
<source>Pause detection</source> <source>Pause detection</source>
<translation>Detecção de pausa</translation> <translation>Detecção de pausa</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="450"/> <location filename="../src/GUI/optionsdialog.cpp" line="480"/>
<source>mi</source> <source>mi</source>
<translation>mi</translation> <translation>mi</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="453"/> <location filename="../src/GUI/optionsdialog.cpp" line="483"/>
<source>nmi</source> <source>nmi</source>
<translation>nmi</translation> <translation>nmi</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="456"/> <location filename="../src/GUI/optionsdialog.cpp" line="486"/>
<source>km</source> <source>km</source>
<translation>km</translation> <translation>km</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="464"/> <location filename="../src/GUI/optionsdialog.cpp" line="494"/>
<source>Radius:</source> <source>Radius:</source>
<translation>Raio:</translation> <translation>Raio:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="471"/> <location filename="../src/GUI/optionsdialog.cpp" line="501"/>
<location filename="../src/GUI/optionsdialog.cpp" line="611"/> <location filename="../src/GUI/optionsdialog.cpp" line="641"/>
<source>POI</source> <source>POI</source>
<translation>POI</translation> <translation>POI</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="478"/> <location filename="../src/GUI/optionsdialog.cpp" line="508"/>
<source>WYSIWYG</source> <source>WYSIWYG</source>
<translation>WYSIWYG</translation> <translation>WYSIWYG</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="479"/> <location filename="../src/GUI/optionsdialog.cpp" line="509"/>
<source>High-Resolution</source> <source>High-Resolution</source>
<translation>Alta resolução</translation> <translation>Alta resolução</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="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> <source>The printed area is approximately the display area. The map zoom level does not change.</source>
<translation>A área de impressão é aproximadamente a área de tela. O nível de zoom do mapa não é alterado.</translation> <translation>A área de impressão é aproximadamente a área de tela. O nível de zoom do mapa não é alterado.</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="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> <source>The zoom level will be changed so that the whole content (tracks/waypoints) fits to the printed area and the map resolution is as close as possible to the print resolution.</source>
<translation>O nível de zoom será alterado de modo que todo o conteúdo (trilhas/waypoints) caiba na área de impressão e a resolução seja tão próxima quanto possível da resolução de impressão.</translation> <translation>O nível de zoom será alterado de modo que todo o conteúdo (trilhas/waypoints) caiba na área de impressão e a resolução seja tão próxima quanto possível da resolução de impressão.</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="508"/> <location filename="../src/GUI/optionsdialog.cpp" line="538"/>
<source>Name</source> <source>Name</source>
<translation>Nome</translation> <translation>Nome</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="510"/> <location filename="../src/GUI/optionsdialog.cpp" line="540"/>
<source>Date</source> <source>Date</source>
<translation>Data</translation> <translation>Data</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="512"/> <location filename="../src/GUI/optionsdialog.cpp" line="542"/>
<source>Distance</source> <source>Distance</source>
<translation>Distância</translation> <translation>Distância</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="514"/> <location filename="../src/GUI/optionsdialog.cpp" line="544"/>
<source>Time</source> <source>Time</source>
<translation>Tempo</translation> <translation>Tempo</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="516"/> <location filename="../src/GUI/optionsdialog.cpp" line="546"/>
<source>Moving time</source> <source>Moving time</source>
<translation>Tempo em movimento</translation> <translation>Tempo em movimento</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="518"/> <location filename="../src/GUI/optionsdialog.cpp" line="548"/>
<source>Item count (&gt;1)</source> <source>Item count (&gt;1)</source>
<translation>Número de itens (&gt;1)</translation> <translation>Número de itens (&gt;1)</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="533"/> <location filename="../src/GUI/optionsdialog.cpp" line="563"/>
<source>Separate graph page</source> <source>Separate graph page</source>
<translation>Separar página de gráficos</translation> <translation>Separar página de gráficos</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="543"/> <location filename="../src/GUI/optionsdialog.cpp" line="573"/>
<source>Print mode</source> <source>Print mode</source>
<translation>Modo de impressão</translation> <translation>Modo de impressão</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="544"/> <location filename="../src/GUI/optionsdialog.cpp" line="574"/>
<source>Header</source> <source>Header</source>
<translation>Cabeçalho</translation> <translation>Cabeçalho</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="552"/> <location filename="../src/GUI/optionsdialog.cpp" line="582"/>
<source>Use OpenGL</source> <source>Use OpenGL</source>
<translation>Usar OpenGL</translation> <translation>Usar OpenGL</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="555"/> <location filename="../src/GUI/optionsdialog.cpp" line="585"/>
<source>Enable HTTP/2</source> <source>Enable HTTP/2</source>
<translation>Habilitar HTTP/2</translation> <translation>Habilitar HTTP/2</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="562"/> <location filename="../src/GUI/optionsdialog.cpp" line="592"/>
<source>MB</source> <source>MB</source>
<translation>MB</translation> <translation>MB</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="572"/> <location filename="../src/GUI/optionsdialog.cpp" line="602"/>
<source>Image cache size:</source> <source>Image cache size:</source>
<translation>Tamanho do cache de imagens:</translation> <translation>Tamanho do cache de imagens:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="573"/> <location filename="../src/GUI/optionsdialog.cpp" line="603"/>
<source>Connection timeout:</source> <source>Connection timeout:</source>
<translation>Tempo de espera de conexão:</translation> <translation>Tempo de espera de conexão:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="589"/> <location filename="../src/GUI/optionsdialog.cpp" line="619"/>
<location filename="../src/GUI/optionsdialog.cpp" line="614"/> <location filename="../src/GUI/optionsdialog.cpp" line="644"/>
<source>System</source> <source>System</source>
<translation>Sistema</translation> <translation>Sistema</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="607"/> <location filename="../src/GUI/optionsdialog.cpp" line="637"/>
<source>Appearance</source> <source>Appearance</source>
<translation>Aparência</translation> <translation>Aparência</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="609"/> <location filename="../src/GUI/optionsdialog.cpp" line="639"/>
<source>Maps</source> <source>Maps</source>
<translation>Mapas</translation> <translation>Mapas</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="610"/> <location filename="../src/GUI/optionsdialog.cpp" line="640"/>
<source>Data</source> <source>Data</source>
<translation>Dados</translation> <translation>Dados</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="612"/> <location filename="../src/GUI/optionsdialog.cpp" line="642"/>
<source>Print &amp; Export</source> <source>Print &amp; Export</source>
<translation>Imprimir e Exportar</translation> <translation>Imprimir e Exportar</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="641"/> <location filename="../src/GUI/optionsdialog.cpp" line="671"/>
<source>Options</source> <source>Options</source>
<translation>Preferências</translation> <translation>Preferências</translation>
</message> </message>
@ -1867,7 +1887,12 @@
<translation>Descrição</translation> <translation>Descrição</translation>
</message> </message>
<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> <source>Links</source>
<translation>Links</translation> <translation>Links</translation>
</message> </message>

View File

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

View File

@ -47,77 +47,87 @@
<context> <context>
<name>Data</name> <name>Data</name>
<message> <message>
<location filename="../src/data/data.cpp" line="173"/> <location filename="../src/data/data.cpp" line="179"/>
<source>Supported files</source> <source>Supported files</source>
<translation>Filer som stöds</translation> <translation>Filer som stöds</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="174"/> <location filename="../src/data/data.cpp" line="180"/>
<source>CSV files</source> <source>CSV files</source>
<translation>CSV-filer</translation> <translation>CSV-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="175"/> <location filename="../src/data/data.cpp" line="181"/>
<source>CUP files</source> <source>CUP files</source>
<translation>CUP-filer</translation> <translation>CUP-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="176"/> <location filename="../src/data/data.cpp" line="182"/>
<source>FIT files</source> <source>FIT files</source>
<translation>FIT-filer</translation> <translation>FIT-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="178"/> <location filename="../src/data/data.cpp" line="184"/>
<source>GeoJSON files</source> <source>GeoJSON files</source>
<translation>GeoJSON-filer</translation> <translation>GeoJSON-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="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> <source>GPX files</source>
<translation>GPX-filer</translation> <translation>GPX-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="181"/> <location filename="../src/data/data.cpp" line="188"/>
<source>IGC files</source> <source>IGC files</source>
<translation>IGC-filer</translation> <translation>IGC-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="182"/> <location filename="../src/data/data.cpp" line="189"/>
<source>JPEG images</source> <source>JPEG images</source>
<translation>JPEG-bilder</translation> <translation>JPEG-bilder</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="183"/> <location filename="../src/data/data.cpp" line="190"/>
<source>KML files</source> <source>KML files</source>
<translation>KML-filer</translation> <translation>KML-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="184"/> <location filename="../src/data/data.cpp" line="191"/>
<source>LOC files</source> <source>LOC files</source>
<translation>LOC-filer</translation> <translation>LOC-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="185"/> <location filename="../src/data/data.cpp" line="192"/>
<source>NMEA files</source> <source>NMEA files</source>
<translation>NMEA-filer</translation> <translation>NMEA-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="186"/> <location filename="../src/data/data.cpp" line="193"/>
<source>OziExplorer files</source> <source>OziExplorer files</source>
<translation>OziExplorer-filer</translation> <translation>OziExplorer-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="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> <source>TCX files</source>
<translation>TCX-filer</translation> <translation>TCX-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="187"/> <location filename="../src/data/data.cpp" line="194"/>
<source>SLF files</source> <source>SLF files</source>
<translation>SLF-filer</translation> <translation>SLF-filer</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="189"/> <location filename="../src/data/data.cpp" line="197"/>
<source>All files</source> <source>All files</source>
<translation>Alla filer</translation> <translation>Alla filer</translation>
</message> </message>
@ -518,8 +528,8 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="413"/> <location filename="../src/GUI/gui.cpp" line="413"/>
<location filename="../src/GUI/gui.cpp" line="1058"/> <location filename="../src/GUI/gui.cpp" line="1059"/>
<location filename="../src/GUI/gui.cpp" line="1124"/> <location filename="../src/GUI/gui.cpp" line="1125"/>
<source>Moving time</source> <source>Moving time</source>
<translation>Förflyttningstid</translation> <translation>Förflyttningstid</translation>
</message> </message>
@ -674,34 +684,34 @@
<translation>Mapp för stilar:</translation> <translation>Mapp för stilar:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1036"/> <location filename="../src/GUI/gui.cpp" line="1037"/>
<location filename="../src/GUI/gui.cpp" line="1104"/> <location filename="../src/GUI/gui.cpp" line="1105"/>
<source>Areas</source> <source>Areas</source>
<translation>Områden</translation> <translation>Områden</translation>
</message> </message>
<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="1080"/>
<location filename="../src/GUI/gui.cpp" line="1081"/>
<source>Statistics</source> <source>Statistics</source>
<translation>Statistik</translation> <translation>Statistik</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1312"/> <location filename="../src/GUI/gui.cpp" line="1313"/>
<source>Open map file</source> <source>Open map file</source>
<translation>Öppna kartfil</translation> <translation>Öppna kartfil</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1335"/> <location filename="../src/GUI/gui.cpp" line="1336"/>
<source>Error loading map:</source> <source>Error loading map:</source>
<translation>Fel vid inläsning av karta:</translation> <translation>Fel vid inläsning av karta:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1346"/> <location filename="../src/GUI/gui.cpp" line="1347"/>
<source>No files loaded</source> <source>No files loaded</source>
<translation>Inga filer inlästa</translation> <translation>Inga filer inlästa</translation>
</message> </message>
<message numerus="yes"> <message numerus="yes">
<location filename="../src/GUI/gui.cpp" line="1350"/> <location filename="../src/GUI/gui.cpp" line="1351"/>
<source>%n files</source> <source>%n files</source>
<translation> <translation>
<numerusform>%n fil</numerusform> <numerusform>%n fil</numerusform>
@ -709,16 +719,16 @@
</translation> </translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1042"/> <location filename="../src/GUI/gui.cpp" line="1043"/>
<location filename="../src/GUI/gui.cpp" line="1046"/> <location filename="../src/GUI/gui.cpp" line="1047"/>
<location filename="../src/GUI/gui.cpp" line="1110"/> <location filename="../src/GUI/gui.cpp" line="1111"/>
<location filename="../src/GUI/gui.cpp" line="1113"/> <location filename="../src/GUI/gui.cpp" line="1114"/>
<source>Date</source> <source>Date</source>
<translation>Datum</translation> <translation>Datum</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1030"/> <location filename="../src/GUI/gui.cpp" line="1031"/>
<location filename="../src/GUI/gui.cpp" line="1100"/> <location filename="../src/GUI/gui.cpp" line="1101"/>
<source>Routes</source> <source>Routes</source>
<translation>Rutter</translation> <translation>Rutter</translation>
</message> </message>
@ -738,8 +748,8 @@
<translation>Exportera till PDF...</translation> <translation>Exportera till PDF...</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1033"/> <location filename="../src/GUI/gui.cpp" line="1034"/>
<location filename="../src/GUI/gui.cpp" line="1102"/> <location filename="../src/GUI/gui.cpp" line="1103"/>
<source>Waypoints</source> <source>Waypoints</source>
<translation>Vägpunkter</translation> <translation>Vägpunkter</translation>
</message> </message>
@ -820,13 +830,13 @@
<translation>Fel vid inläsning av POI-fil:</translation> <translation>Fel vid inläsning av POI-fil:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1094"/> <location filename="../src/GUI/gui.cpp" line="1095"/>
<source>Name</source> <source>Name</source>
<translation>Namn</translation> <translation>Namn</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1027"/> <location filename="../src/GUI/gui.cpp" line="1028"/>
<location filename="../src/GUI/gui.cpp" line="1098"/> <location filename="../src/GUI/gui.cpp" line="1099"/>
<source>Tracks</source> <source>Tracks</source>
<translation>Spår</translation> <translation>Spår</translation>
</message> </message>
@ -843,16 +853,16 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="369"/> <location filename="../src/GUI/gui.cpp" line="369"/>
<location filename="../src/GUI/gui.cpp" line="1053"/> <location filename="../src/GUI/gui.cpp" line="1054"/>
<location filename="../src/GUI/gui.cpp" line="1120"/> <location filename="../src/GUI/gui.cpp" line="1121"/>
<source>Distance</source> <source>Distance</source>
<translation>Avstånd</translation> <translation>Avstånd</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="376"/> <location filename="../src/GUI/gui.cpp" line="376"/>
<location filename="../src/GUI/gui.cpp" line="552"/> <location filename="../src/GUI/gui.cpp" line="552"/>
<location filename="../src/GUI/gui.cpp" line="1056"/> <location filename="../src/GUI/gui.cpp" line="1057"/>
<location filename="../src/GUI/gui.cpp" line="1122"/> <location filename="../src/GUI/gui.cpp" line="1123"/>
<source>Time</source> <source>Time</source>
<translation>Tid</translation> <translation>Tid</translation>
</message> </message>
@ -949,12 +959,12 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/graphview.cpp" line="66"/> <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> <source>Distance</source>
<translation>Avstånd</translation> <translation>Avstånd</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/graphview.cpp" line="175"/> <location filename="../src/GUI/graphview.cpp" line="179"/>
<source>Time</source> <source>Time</source>
<translation>Tid</translation> <translation>Tid</translation>
</message> </message>
@ -1053,478 +1063,488 @@
<context> <context>
<name>OptionsDialog</name> <name>OptionsDialog</name>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="169"/> <location filename="../src/GUI/optionsdialog.cpp" line="175"/>
<source>Base color:</source> <source>Base color:</source>
<translation>Basfärg:</translation> <translation>Basfärg:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="170"/> <location filename="../src/GUI/optionsdialog.cpp" line="176"/>
<source>Palette shift:</source> <source>Palette shift:</source>
<translation>Palettskiftning:</translation> <translation>Palettskiftning:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="114"/> <location filename="../src/GUI/optionsdialog.cpp" line="120"/>
<source>Track width:</source> <source>Track width:</source>
<translation>Spårtjocklek:</translation> <translation>Spårtjocklek:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="115"/> <location filename="../src/GUI/optionsdialog.cpp" line="121"/>
<source>Track style:</source> <source>Track style:</source>
<translation>Spårstil:</translation> <translation>Spårstil:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="119"/> <location filename="../src/GUI/optionsdialog.cpp" line="125"/>
<source>Tracks</source> <source>Tracks</source>
<translation>Spår</translation> <translation>Spår</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="131"/> <location filename="../src/GUI/optionsdialog.cpp" line="137"/>
<source>Route width:</source> <source>Route width:</source>
<translation>Ruttjocklek:</translation> <translation>Ruttjocklek:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="132"/> <location filename="../src/GUI/optionsdialog.cpp" line="138"/>
<source>Route style:</source> <source>Route style:</source>
<translation>Ruttstil:</translation> <translation>Ruttstil:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="136"/> <location filename="../src/GUI/optionsdialog.cpp" line="142"/>
<source>Routes</source> <source>Routes</source>
<translation>Rutter</translation> <translation>Rutter</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="172"/> <location filename="../src/GUI/optionsdialog.cpp" line="178"/>
<location filename="../src/GUI/optionsdialog.cpp" line="255"/> <location filename="../src/GUI/optionsdialog.cpp" line="261"/>
<source>Use anti-aliasing</source> <source>Use anti-aliasing</source>
<translation>Använd kantutjämning</translation> <translation>Använd kantutjämning</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="252"/> <location filename="../src/GUI/optionsdialog.cpp" line="258"/>
<source>Line width:</source> <source>Line width:</source>
<translation>Linjetjocklek:</translation> <translation>Linjetjocklek:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="276"/> <location filename="../src/GUI/optionsdialog.cpp" line="282"/>
<source>Background color:</source> <source>Background color:</source>
<translation>Bakgrundsfärg:</translation> <translation>Bakgrundsfärg:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="287"/> <location filename="../src/GUI/optionsdialog.cpp" line="293"/>
<source>Paths</source> <source>Paths</source>
<translation>Sökvägar</translation> <translation>Sökvägar</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="277"/> <location filename="../src/GUI/optionsdialog.cpp" line="283"/>
<source>Map opacity:</source> <source>Map opacity:</source>
<translation>Kartopacitet:</translation> <translation>Kartopacitet:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="290"/> <location filename="../src/GUI/optionsdialog.cpp" line="296"/>
<source>Map</source> <source>Map</source>
<translation>Karta</translation> <translation>Karta</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="289"/> <location filename="../src/GUI/optionsdialog.cpp" line="295"/>
<location filename="../src/GUI/optionsdialog.cpp" line="545"/> <location filename="../src/GUI/optionsdialog.cpp" line="575"/>
<source>Graphs</source> <source>Graphs</source>
<translation>Diagram</translation> <translation>Diagram</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="55"/> <location filename="../src/GUI/optionsdialog.cpp" line="61"/>
<source>High-resolution</source> <source>High-resolution</source>
<translation>Högupplösning</translation> <translation>Högupplösning</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="56"/> <location filename="../src/GUI/optionsdialog.cpp" line="62"/>
<source>Standard</source> <source>Standard</source>
<translation>Standard</translation> <translation>Standard</translation>
</message> </message>
<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> <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> <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>
<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> <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> <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>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="98"/> <location filename="../src/GUI/optionsdialog.cpp" line="104"/>
<source>HiDPI display mode</source> <source>HiDPI display mode</source>
<translation>Högupplöst visningsläge</translation> <translation>Högupplöst visningsläge</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="117"/> <location filename="../src/GUI/optionsdialog.cpp" line="123"/>
<location filename="../src/GUI/optionsdialog.cpp" line="134"/> <location filename="../src/GUI/optionsdialog.cpp" line="140"/>
<location filename="../src/GUI/optionsdialog.cpp" line="153"/> <location filename="../src/GUI/optionsdialog.cpp" line="159"/>
<source>Width:</source> <source>Width:</source>
<translation>Bredd:</translation> <translation>Bredd:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="118"/> <location filename="../src/GUI/optionsdialog.cpp" line="124"/>
<location filename="../src/GUI/optionsdialog.cpp" line="135"/> <location filename="../src/GUI/optionsdialog.cpp" line="141"/>
<location filename="../src/GUI/optionsdialog.cpp" line="154"/> <location filename="../src/GUI/optionsdialog.cpp" line="160"/>
<source>Style:</source> <source>Style:</source>
<translation>Stil:</translation> <translation>Stil:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="205"/> <location filename="../src/GUI/optionsdialog.cpp" line="211"/>
<source>Waypoint color:</source> <source>Waypoint color:</source>
<translation>Navigeringspunktsfärg:</translation> <translation>Navigeringspunktsfärg:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="206"/> <location filename="../src/GUI/optionsdialog.cpp" line="212"/>
<source>Waypoint size:</source> <source>Waypoint size:</source>
<translation>Navigeringspunktsstorlek:</translation> <translation>Navigeringspunktsstorlek:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="208"/> <location filename="../src/GUI/optionsdialog.cpp" line="214"/>
<location filename="../src/GUI/optionsdialog.cpp" line="224"/> <location filename="../src/GUI/optionsdialog.cpp" line="230"/>
<source>Color:</source> <source>Color:</source>
<translation>Färg:</translation> <translation>Färg:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="209"/> <location filename="../src/GUI/optionsdialog.cpp" line="215"/>
<location filename="../src/GUI/optionsdialog.cpp" line="225"/> <location filename="../src/GUI/optionsdialog.cpp" line="231"/>
<source>Size:</source> <source>Size:</source>
<translation>Storlek:</translation> <translation>Storlek:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="210"/> <location filename="../src/GUI/optionsdialog.cpp" line="216"/>
<source>Waypoints</source> <source>Waypoints</source>
<translation>Navigeringspunkter</translation> <translation>Navigeringspunkter</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="221"/> <location filename="../src/GUI/optionsdialog.cpp" line="227"/>
<source>POI color:</source> <source>POI color:</source>
<translation>POI-färg:</translation> <translation>POI-färg:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="222"/> <location filename="../src/GUI/optionsdialog.cpp" line="228"/>
<source>POI size:</source> <source>POI size:</source>
<translation>POI-storlek:</translation> <translation>POI-storlek:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="226"/> <location filename="../src/GUI/optionsdialog.cpp" line="232"/>
<source>POIs</source> <source>POIs</source>
<translation>POI:er</translation> <translation>POI:er</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="253"/> <location filename="../src/GUI/optionsdialog.cpp" line="259"/>
<source>Slider color:</source> <source>Slider color:</source>
<translation>Skjutreglagefärg:</translation> <translation>Skjutreglagefärg:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="288"/> <location filename="../src/GUI/optionsdialog.cpp" line="294"/>
<source>Points</source> <source>Points</source>
<translation>Punkter</translation> <translation>Punkter</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="297"/> <location filename="../src/GUI/optionsdialog.cpp" line="303"/>
<source>Moving average window size</source> <source>Moving average window size</source>
<translation>Flyttar vanlig fönsterstorlek</translation> <translation>Flyttar vanlig fönsterstorlek</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="316"/> <location filename="../src/GUI/optionsdialog.cpp" line="322"/>
<location filename="../src/GUI/optionsdialog.cpp" line="402"/> <location filename="../src/GUI/optionsdialog.cpp" line="432"/>
<location filename="../src/GUI/optionsdialog.cpp" line="465"/> <location filename="../src/GUI/optionsdialog.cpp" line="495"/>
<source>Elevation:</source> <source>Elevation:</source>
<translation>Höjd:</translation> <translation>Höjd:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="317"/> <location filename="../src/GUI/optionsdialog.cpp" line="323"/>
<location filename="../src/GUI/optionsdialog.cpp" line="401"/> <location filename="../src/GUI/optionsdialog.cpp" line="431"/>
<source>Speed:</source> <source>Speed:</source>
<translation>Hastighet:</translation> <translation>Hastighet:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="318"/> <location filename="../src/GUI/optionsdialog.cpp" line="324"/>
<source>Heart rate:</source> <source>Heart rate:</source>
<translation>Hjärtfrekvens:</translation> <translation>Hjärtfrekvens:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="319"/> <location filename="../src/GUI/optionsdialog.cpp" line="325"/>
<source>Cadence:</source> <source>Cadence:</source>
<translation>Stegfrekvens:</translation> <translation>Stegfrekvens:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="320"/> <location filename="../src/GUI/optionsdialog.cpp" line="326"/>
<source>Power:</source> <source>Power:</source>
<translation>Kraft:</translation> <translation>Kraft:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="322"/> <location filename="../src/GUI/optionsdialog.cpp" line="328"/>
<source>Smoothing</source> <source>Smoothing</source>
<translation>Utjämning</translation> <translation>Utjämning</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="326"/> <location filename="../src/GUI/optionsdialog.cpp" line="332"/>
<source>Eliminate GPS outliers</source> <source>Eliminate GPS outliers</source>
<translation>Eliminera GPS-extremvärden</translation> <translation>Eliminera GPS-extremvärden</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="335"/> <location filename="../src/GUI/optionsdialog.cpp" line="341"/>
<source>Smoothing:</source> <source>Smoothing:</source>
<translation>Utjämning:</translation> <translation>Utjämning:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="352"/> <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> <source>mi/h</source>
<translation>mi/h</translation> <translation>mi/h</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="355"/> <location filename="../src/GUI/optionsdialog.cpp" line="369"/>
<source>kn</source> <source>kn</source>
<translation>knop</translation> <translation>knop</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="358"/> <location filename="../src/GUI/optionsdialog.cpp" line="372"/>
<source>km/h</source> <source>km/h</source>
<translation>km/h</translation> <translation>km/h</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="362"/> <location filename="../src/GUI/optionsdialog.cpp" line="376"/>
<location filename="../src/GUI/optionsdialog.cpp" line="568"/> <location filename="../src/GUI/optionsdialog.cpp" line="598"/>
<source>s</source> <source>s</source>
<translation>sek</translation> <translation>sek</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="366"/> <location filename="../src/GUI/optionsdialog.cpp" line="392"/>
<source>Minimal speed:</source> <source>Minimal speed:</source>
<translation>Minsta hastighet:</translation> <translation>Minsta hastighet:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="367"/> <location filename="../src/GUI/optionsdialog.cpp" line="393"/>
<source>Minimal duration:</source> <source>Minimal duration:</source>
<translation>Kortast varaktighet:</translation> <translation>Kortast varaktighet:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="373"/> <location filename="../src/GUI/optionsdialog.cpp" line="403"/>
<source>Computed from distance/time</source> <source>Computed from distance/time</source>
<translation>Beräknad från distans/tid</translation> <translation>Beräknad från distans/tid</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="374"/> <location filename="../src/GUI/optionsdialog.cpp" line="404"/>
<source>Recorded by device</source> <source>Recorded by device</source>
<translation>Inspelad av enhet</translation> <translation>Inspelad av enhet</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="380"/> <location filename="../src/GUI/optionsdialog.cpp" line="410"/>
<location filename="../src/GUI/optionsdialog.cpp" line="438"/> <location filename="../src/GUI/optionsdialog.cpp" line="468"/>
<source>GPS data</source> <source>GPS data</source>
<translation>GPS-data</translation> <translation>GPS-data</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="381"/> <location filename="../src/GUI/optionsdialog.cpp" line="411"/>
<location filename="../src/GUI/optionsdialog.cpp" line="439"/> <location filename="../src/GUI/optionsdialog.cpp" line="469"/>
<source>DEM data</source> <source>DEM data</source>
<translation>DEM-data</translation> <translation>DEM-data</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="418"/> <location filename="../src/GUI/optionsdialog.cpp" line="448"/>
<source>Elevation</source> <source>Elevation</source>
<translation>Stigning</translation> <translation>Stigning</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="429"/> <location filename="../src/GUI/optionsdialog.cpp" line="459"/>
<source>Filtering</source> <source>Filtering</source>
<translation>Filtrering</translation> <translation>Filtrering</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="430"/> <location filename="../src/GUI/optionsdialog.cpp" line="460"/>
<source>Sources</source> <source>Sources</source>
<translation>Källor</translation> <translation>Källor</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="431"/> <location filename="../src/GUI/optionsdialog.cpp" line="461"/>
<source>Pause detection</source> <source>Pause detection</source>
<translation>Pausa identifiering</translation> <translation>Pausa identifiering</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="464"/> <location filename="../src/GUI/optionsdialog.cpp" line="494"/>
<source>Radius:</source> <source>Radius:</source>
<translation>Radie:</translation> <translation>Radie:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="412"/> <location filename="../src/GUI/optionsdialog.cpp" line="442"/>
<source>Speed</source> <source>Speed</source>
<translation>Hastighet</translation> <translation>Hastighet</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="74"/> <location filename="../src/GUI/optionsdialog.cpp" line="80"/>
<source>Projection:</source> <source>Projection:</source>
<translation>Projektion:</translation> <translation>Projektion:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="96"/> <location filename="../src/GUI/optionsdialog.cpp" line="102"/>
<source>Vector maps</source> <source>Vector maps</source>
<translation>Vektor-kartor</translation> <translation>Vektor-kartor</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="149"/> <location filename="../src/GUI/optionsdialog.cpp" line="155"/>
<source>Area border width:</source> <source>Area border width:</source>
<translation>Kantbredd för områden:</translation> <translation>Kantbredd för områden:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="150"/> <location filename="../src/GUI/optionsdialog.cpp" line="156"/>
<source>Area border style:</source> <source>Area border style:</source>
<translation>Kantstil för områden:</translation> <translation>Kantstil för områden:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="151"/> <location filename="../src/GUI/optionsdialog.cpp" line="157"/>
<source>Area fill opacity:</source> <source>Area fill opacity:</source>
<translation>Ifyllnadsopacitet för områden:</translation> <translation>Ifyllnadsopacitet för områden:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="155"/> <location filename="../src/GUI/optionsdialog.cpp" line="161"/>
<source>Fill opacity:</source> <source>Fill opacity:</source>
<translation>Ifyllnadsopacitet:</translation> <translation>Ifyllnadsopacitet:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="156"/> <location filename="../src/GUI/optionsdialog.cpp" line="162"/>
<source>Areas</source> <source>Areas</source>
<translation>Områden</translation> <translation>Områden</translation>
</message> </message>
<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> <source>mi</source>
<translation>mi</translation> <translation>mi</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="453"/> <location filename="../src/GUI/optionsdialog.cpp" line="483"/>
<source>nmi</source> <source>nmi</source>
<translation>nmi</translation> <translation>nmi</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="456"/> <location filename="../src/GUI/optionsdialog.cpp" line="486"/>
<source>km</source> <source>km</source>
<translation>km</translation> <translation>km</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="471"/> <location filename="../src/GUI/optionsdialog.cpp" line="501"/>
<location filename="../src/GUI/optionsdialog.cpp" line="611"/> <location filename="../src/GUI/optionsdialog.cpp" line="641"/>
<source>POI</source> <source>POI</source>
<translation>POI</translation> <translation>POI</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="478"/> <location filename="../src/GUI/optionsdialog.cpp" line="508"/>
<source>WYSIWYG</source> <source>WYSIWYG</source>
<translation>WYSIWYG</translation> <translation>WYSIWYG</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="479"/> <location filename="../src/GUI/optionsdialog.cpp" line="509"/>
<source>High-Resolution</source> <source>High-Resolution</source>
<translation>Högupplösning</translation> <translation>Högupplösning</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="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> <source>The printed area is approximately the display area. The map zoom level does not change.</source>
<translation>Det utskrivna området är ungefär detsamma som synligt område skärmen. Kartans zoomnivå ändras inte.</translation> <translation>Det utskrivna området är ungefär detsamma som synligt område skärmen. Kartans zoomnivå ändras inte.</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="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> <source>The zoom level will be changed so that the whole content (tracks/waypoints) fits to the printed area and the map resolution is as close as possible to the print resolution.</source>
<translation>Zoomnivån kommer att ändras att hela innehållet (spår/vägpunkter) passar utskriftsområdet och kartresolutionen är nära som möjligt till utskriftsupplösningen.</translation> <translation>Zoomnivån kommer att ändras att hela innehållet (spår/vägpunkter) passar utskriftsområdet och kartresolutionen är nära som möjligt till utskriftsupplösningen.</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="508"/> <location filename="../src/GUI/optionsdialog.cpp" line="538"/>
<source>Name</source> <source>Name</source>
<translation>Namn</translation> <translation>Namn</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="510"/> <location filename="../src/GUI/optionsdialog.cpp" line="540"/>
<source>Date</source> <source>Date</source>
<translation>Datum</translation> <translation>Datum</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="512"/> <location filename="../src/GUI/optionsdialog.cpp" line="542"/>
<source>Distance</source> <source>Distance</source>
<translation>Avstånd</translation> <translation>Avstånd</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="514"/> <location filename="../src/GUI/optionsdialog.cpp" line="544"/>
<source>Time</source> <source>Time</source>
<translation>Tid</translation> <translation>Tid</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="516"/> <location filename="../src/GUI/optionsdialog.cpp" line="546"/>
<source>Moving time</source> <source>Moving time</source>
<translation>Förflyttningstid</translation> <translation>Förflyttningstid</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="518"/> <location filename="../src/GUI/optionsdialog.cpp" line="548"/>
<source>Item count (&gt;1)</source> <source>Item count (&gt;1)</source>
<translation>Objektantal (&gt;1)</translation> <translation>Objektantal (&gt;1)</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="533"/> <location filename="../src/GUI/optionsdialog.cpp" line="563"/>
<source>Separate graph page</source> <source>Separate graph page</source>
<translation>Separat diagramsida</translation> <translation>Separat diagramsida</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="543"/> <location filename="../src/GUI/optionsdialog.cpp" line="573"/>
<source>Print mode</source> <source>Print mode</source>
<translation>Utskriftsläge</translation> <translation>Utskriftsläge</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="544"/> <location filename="../src/GUI/optionsdialog.cpp" line="574"/>
<source>Header</source> <source>Header</source>
<translation>Rubrik</translation> <translation>Rubrik</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="552"/> <location filename="../src/GUI/optionsdialog.cpp" line="582"/>
<source>Use OpenGL</source> <source>Use OpenGL</source>
<translation>Använd OpenGL</translation> <translation>Använd OpenGL</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="555"/> <location filename="../src/GUI/optionsdialog.cpp" line="585"/>
<source>Enable HTTP/2</source> <source>Enable HTTP/2</source>
<translation>Aktivera HTTP/2</translation> <translation>Aktivera HTTP/2</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="562"/> <location filename="../src/GUI/optionsdialog.cpp" line="592"/>
<source>MB</source> <source>MB</source>
<translation>MB</translation> <translation>MB</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="572"/> <location filename="../src/GUI/optionsdialog.cpp" line="602"/>
<source>Image cache size:</source> <source>Image cache size:</source>
<translation>Cashe-storlek för bilder:</translation> <translation>Cashe-storlek för bilder:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="573"/> <location filename="../src/GUI/optionsdialog.cpp" line="603"/>
<source>Connection timeout:</source> <source>Connection timeout:</source>
<translation>Anslutningens tidsgräns:</translation> <translation>Anslutningens tidsgräns:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="589"/> <location filename="../src/GUI/optionsdialog.cpp" line="619"/>
<location filename="../src/GUI/optionsdialog.cpp" line="614"/> <location filename="../src/GUI/optionsdialog.cpp" line="644"/>
<source>System</source> <source>System</source>
<translation>System</translation> <translation>System</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="607"/> <location filename="../src/GUI/optionsdialog.cpp" line="637"/>
<source>Appearance</source> <source>Appearance</source>
<translation>Utseende</translation> <translation>Utseende</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="609"/> <location filename="../src/GUI/optionsdialog.cpp" line="639"/>
<source>Maps</source> <source>Maps</source>
<translation>Kartor</translation> <translation>Kartor</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="610"/> <location filename="../src/GUI/optionsdialog.cpp" line="640"/>
<source>Data</source> <source>Data</source>
<translation>Data</translation> <translation>Data</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="612"/> <location filename="../src/GUI/optionsdialog.cpp" line="642"/>
<source>Print &amp; Export</source> <source>Print &amp; Export</source>
<translation>Utskrift &amp; Export</translation> <translation>Utskrift &amp; Export</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="641"/> <location filename="../src/GUI/optionsdialog.cpp" line="671"/>
<source>Options</source> <source>Options</source>
<translation>Alternativ</translation> <translation>Alternativ</translation>
</message> </message>
@ -1867,7 +1887,12 @@
<translation>Beskrivning</translation> <translation>Beskrivning</translation>
</message> </message>
<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> <source>Links</source>
<translation>Länkar</translation> <translation>Länkar</translation>
</message> </message>

View File

@ -47,77 +47,87 @@
<context> <context>
<name>Data</name> <name>Data</name>
<message> <message>
<location filename="../src/data/data.cpp" line="173"/> <location filename="../src/data/data.cpp" line="179"/>
<source>Supported files</source> <source>Supported files</source>
<translation>Desteklenen dosyalar</translation> <translation>Desteklenen dosyalar</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="174"/> <location filename="../src/data/data.cpp" line="180"/>
<source>CSV files</source> <source>CSV files</source>
<translation>CSV dosyalar</translation> <translation>CSV dosyalar</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="175"/> <location filename="../src/data/data.cpp" line="181"/>
<source>CUP files</source> <source>CUP files</source>
<translation>CUP dosyaları</translation> <translation>CUP dosyaları</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="176"/> <location filename="../src/data/data.cpp" line="182"/>
<source>FIT files</source> <source>FIT files</source>
<translation>FIT dosyalar</translation> <translation>FIT dosyalar</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="178"/> <location filename="../src/data/data.cpp" line="184"/>
<source>GeoJSON files</source> <source>GeoJSON files</source>
<translation>GeoJSON dosyalar</translation> <translation>GeoJSON dosyalar</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="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> <source>GPX files</source>
<translation>GPX dosyalar</translation> <translation>GPX dosyalar</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="181"/> <location filename="../src/data/data.cpp" line="188"/>
<source>IGC files</source> <source>IGC files</source>
<translation>IGC dosyalar</translation> <translation>IGC dosyalar</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="182"/> <location filename="../src/data/data.cpp" line="189"/>
<source>JPEG images</source> <source>JPEG images</source>
<translation>JPEG resimler</translation> <translation>JPEG resimler</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="183"/> <location filename="../src/data/data.cpp" line="190"/>
<source>KML files</source> <source>KML files</source>
<translation>KML dosyalar</translation> <translation>KML dosyalar</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="184"/> <location filename="../src/data/data.cpp" line="191"/>
<source>LOC files</source> <source>LOC files</source>
<translation>LOC dosyalar</translation> <translation>LOC dosyalar</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="185"/> <location filename="../src/data/data.cpp" line="192"/>
<source>NMEA files</source> <source>NMEA files</source>
<translation>NMEA dosyalar</translation> <translation>NMEA dosyalar</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="186"/> <location filename="../src/data/data.cpp" line="193"/>
<source>OziExplorer files</source> <source>OziExplorer files</source>
<translation>OziExplorer dosyalar</translation> <translation>OziExplorer dosyalar</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="187"/> <location filename="../src/data/data.cpp" line="194"/>
<source>SLF files</source> <source>SLF files</source>
<translation>SLF dosyalar</translation> <translation>SLF dosyalar</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="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> <source>TCX files</source>
<translation>TCX dosyalar</translation> <translation>TCX dosyalar</translation>
</message> </message>
<message> <message>
<location filename="../src/data/data.cpp" line="189"/> <location filename="../src/data/data.cpp" line="197"/>
<source>All files</source> <source>All files</source>
<translation>Tüm dosyalar</translation> <translation>Tüm dosyalar</translation>
</message> </message>
@ -484,16 +494,16 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="369"/> <location filename="../src/GUI/gui.cpp" line="369"/>
<location filename="../src/GUI/gui.cpp" line="1053"/> <location filename="../src/GUI/gui.cpp" line="1054"/>
<location filename="../src/GUI/gui.cpp" line="1120"/> <location filename="../src/GUI/gui.cpp" line="1121"/>
<source>Distance</source> <source>Distance</source>
<translation>Mesafe</translation> <translation>Mesafe</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="376"/> <location filename="../src/GUI/gui.cpp" line="376"/>
<location filename="../src/GUI/gui.cpp" line="552"/> <location filename="../src/GUI/gui.cpp" line="552"/>
<location filename="../src/GUI/gui.cpp" line="1056"/> <location filename="../src/GUI/gui.cpp" line="1057"/>
<location filename="../src/GUI/gui.cpp" line="1122"/> <location filename="../src/GUI/gui.cpp" line="1123"/>
<source>Time</source> <source>Time</source>
<translation>Zaman</translation> <translation>Zaman</translation>
</message> </message>
@ -524,8 +534,8 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="413"/> <location filename="../src/GUI/gui.cpp" line="413"/>
<location filename="../src/GUI/gui.cpp" line="1058"/> <location filename="../src/GUI/gui.cpp" line="1059"/>
<location filename="../src/GUI/gui.cpp" line="1124"/> <location filename="../src/GUI/gui.cpp" line="1125"/>
<source>Moving time</source> <source>Moving time</source>
<translation>Hareket süresi</translation> <translation>Hareket süresi</translation>
</message> </message>
@ -791,69 +801,68 @@
<translation>POI dosyası yükleme hatası:</translation> <translation>POI dosyası yükleme hatası:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1027"/> <location filename="../src/GUI/gui.cpp" line="1028"/>
<location filename="../src/GUI/gui.cpp" line="1098"/> <location filename="../src/GUI/gui.cpp" line="1099"/>
<source>Tracks</source> <source>Tracks</source>
<translation>İzler</translation> <translation>İzler</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1030"/> <location filename="../src/GUI/gui.cpp" line="1031"/>
<location filename="../src/GUI/gui.cpp" line="1100"/> <location filename="../src/GUI/gui.cpp" line="1101"/>
<source>Routes</source> <source>Routes</source>
<translation>Rotalar</translation> <translation>Rotalar</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1033"/> <location filename="../src/GUI/gui.cpp" line="1034"/>
<location filename="../src/GUI/gui.cpp" line="1102"/> <location filename="../src/GUI/gui.cpp" line="1103"/>
<source>Waypoints</source> <source>Waypoints</source>
<translation>Yer işaretleri</translation> <translation>Yer işaretleri</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1036"/> <location filename="../src/GUI/gui.cpp" line="1037"/>
<location filename="../src/GUI/gui.cpp" line="1104"/> <location filename="../src/GUI/gui.cpp" line="1105"/>
<source>Areas</source> <source>Areas</source>
<translation>Alanlar</translation> <translation>Alanlar</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1042"/> <location filename="../src/GUI/gui.cpp" line="1043"/>
<location filename="../src/GUI/gui.cpp" line="1046"/> <location filename="../src/GUI/gui.cpp" line="1047"/>
<location filename="../src/GUI/gui.cpp" line="1110"/> <location filename="../src/GUI/gui.cpp" line="1111"/>
<location filename="../src/GUI/gui.cpp" line="1113"/> <location filename="../src/GUI/gui.cpp" line="1114"/>
<source>Date</source> <source>Date</source>
<translation>Tarih</translation> <translation>Tarih</translation>
</message> </message>
<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="1080"/>
<location filename="../src/GUI/gui.cpp" line="1081"/>
<source>Statistics</source> <source>Statistics</source>
<translation>İstatistikler</translation> <translation>İstatistikler</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1094"/> <location filename="../src/GUI/gui.cpp" line="1095"/>
<source>Name</source> <source>Name</source>
<translation>Adı</translation> <translation>Adı</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1312"/> <location filename="../src/GUI/gui.cpp" line="1313"/>
<source>Open map file</source> <source>Open map file</source>
<translation>Harita dosyası </translation> <translation>Harita dosyası </translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1335"/> <location filename="../src/GUI/gui.cpp" line="1336"/>
<source>Error loading map:</source> <source>Error loading map:</source>
<translation>Harita yüklenirken hata oluştu:</translation> <translation>Harita yüklenirken hata oluştu:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="1346"/> <location filename="../src/GUI/gui.cpp" line="1347"/>
<source>No files loaded</source> <source>No files loaded</source>
<translation>Hiç dosya yüklenmedi</translation> <translation>Hiç dosya yüklenmedi</translation>
</message> </message>
<message numerus="yes"> <message numerus="yes">
<location filename="../src/GUI/gui.cpp" line="1350"/> <location filename="../src/GUI/gui.cpp" line="1351"/>
<source>%n files</source> <source>%n files</source>
<translation> <translation>
<numerusform>%n dosya</numerusform> <numerusform>%n dosya</numerusform>
<numerusform>%n dosya</numerusform>
</translation> </translation>
</message> </message>
</context> </context>
@ -908,7 +917,7 @@
</message> </message>
<message> <message>
<location filename="../src/GUI/graphview.cpp" line="66"/> <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> <source>Distance</source>
<translation>Mesafe</translation> <translation>Mesafe</translation>
</message> </message>
@ -954,7 +963,7 @@
<translation>sa</translation> <translation>sa</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/graphview.cpp" line="175"/> <location filename="../src/GUI/graphview.cpp" line="179"/>
<source>Time</source> <source>Time</source>
<translation>Zaman</translation> <translation>Zaman</translation>
</message> </message>
@ -1053,478 +1062,488 @@
<context> <context>
<name>OptionsDialog</name> <name>OptionsDialog</name>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="55"/> <location filename="../src/GUI/optionsdialog.cpp" line="61"/>
<source>High-resolution</source> <source>High-resolution</source>
<translation>Yüksek çözünürlük</translation> <translation>Yüksek çözünürlük</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="56"/> <location filename="../src/GUI/optionsdialog.cpp" line="62"/>
<source>Standard</source> <source>Standard</source>
<translation>Standart</translation> <translation>Standart</translation>
</message> </message>
<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> <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> <translation>HiDPI olmayan haritalar, HiDPI haritaları olarak yüklenir. Harita keskin ama harita nesneleri küçük/okunması zor.</translation>
</message> </message>
<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> <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> <translation>HiDPI olmayan haritalar, oldukları gibi yüklenir. Harita nesneleri beklenen boyuta sahip ancak harita bulanıktır.</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="98"/> <location filename="../src/GUI/optionsdialog.cpp" line="104"/>
<source>HiDPI display mode</source> <source>HiDPI display mode</source>
<translation>HiDPI gösterim modu</translation> <translation>HiDPI gösterim modu</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="169"/> <location filename="../src/GUI/optionsdialog.cpp" line="175"/>
<source>Base color:</source> <source>Base color:</source>
<translation>Temel renk:</translation> <translation>Temel renk:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="170"/> <location filename="../src/GUI/optionsdialog.cpp" line="176"/>
<source>Palette shift:</source> <source>Palette shift:</source>
<translation>Palet değişimi:</translation> <translation>Palet değişimi:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="114"/> <location filename="../src/GUI/optionsdialog.cpp" line="120"/>
<source>Track width:</source> <source>Track width:</source>
<translation>İz genişliği:</translation> <translation>İz genişliği:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="74"/> <location filename="../src/GUI/optionsdialog.cpp" line="80"/>
<source>Projection:</source> <source>Projection:</source>
<translation>Projeksiyon:</translation> <translation>Projeksiyon:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="96"/> <location filename="../src/GUI/optionsdialog.cpp" line="102"/>
<source>Vector maps</source> <source>Vector maps</source>
<translation>Vektör haritaları</translation> <translation>Vektör haritaları</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="115"/> <location filename="../src/GUI/optionsdialog.cpp" line="121"/>
<source>Track style:</source> <source>Track style:</source>
<translation>İz stili:</translation> <translation>İz stili:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="117"/> <location filename="../src/GUI/optionsdialog.cpp" line="123"/>
<location filename="../src/GUI/optionsdialog.cpp" line="134"/> <location filename="../src/GUI/optionsdialog.cpp" line="140"/>
<location filename="../src/GUI/optionsdialog.cpp" line="153"/> <location filename="../src/GUI/optionsdialog.cpp" line="159"/>
<source>Width:</source> <source>Width:</source>
<translation>Genişlik:</translation> <translation>Genişlik:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="118"/> <location filename="../src/GUI/optionsdialog.cpp" line="124"/>
<location filename="../src/GUI/optionsdialog.cpp" line="135"/> <location filename="../src/GUI/optionsdialog.cpp" line="141"/>
<location filename="../src/GUI/optionsdialog.cpp" line="154"/> <location filename="../src/GUI/optionsdialog.cpp" line="160"/>
<source>Style:</source> <source>Style:</source>
<translation>Stil:</translation> <translation>Stil:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="119"/> <location filename="../src/GUI/optionsdialog.cpp" line="125"/>
<source>Tracks</source> <source>Tracks</source>
<translation>İzler</translation> <translation>İzler</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="131"/> <location filename="../src/GUI/optionsdialog.cpp" line="137"/>
<source>Route width:</source> <source>Route width:</source>
<translation>Rota genişliği:</translation> <translation>Rota genişliği:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="132"/> <location filename="../src/GUI/optionsdialog.cpp" line="138"/>
<source>Route style:</source> <source>Route style:</source>
<translation>Rota stili:</translation> <translation>Rota stili:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="136"/> <location filename="../src/GUI/optionsdialog.cpp" line="142"/>
<source>Routes</source> <source>Routes</source>
<translation>Rotalar</translation> <translation>Rotalar</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="149"/> <location filename="../src/GUI/optionsdialog.cpp" line="155"/>
<source>Area border width:</source> <source>Area border width:</source>
<translation>Alan sınır genişliği:</translation> <translation>Alan sınır genişliği:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="150"/> <location filename="../src/GUI/optionsdialog.cpp" line="156"/>
<source>Area border style:</source> <source>Area border style:</source>
<translation>Alan sınır stili:</translation> <translation>Alan sınır stili:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="151"/> <location filename="../src/GUI/optionsdialog.cpp" line="157"/>
<source>Area fill opacity:</source> <source>Area fill opacity:</source>
<translation>Alan dolgusu opaklığı:</translation> <translation>Alan dolgusu opaklığı:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="155"/> <location filename="../src/GUI/optionsdialog.cpp" line="161"/>
<source>Fill opacity:</source> <source>Fill opacity:</source>
<translation>Opaklığı doldur:</translation> <translation>Opaklığı doldur:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="156"/> <location filename="../src/GUI/optionsdialog.cpp" line="162"/>
<source>Areas</source> <source>Areas</source>
<translation>Alanlar</translation> <translation>Alanlar</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="172"/> <location filename="../src/GUI/optionsdialog.cpp" line="178"/>
<location filename="../src/GUI/optionsdialog.cpp" line="255"/> <location filename="../src/GUI/optionsdialog.cpp" line="261"/>
<source>Use anti-aliasing</source> <source>Use anti-aliasing</source>
<translation>Kenar yumuşatma kullan</translation> <translation>Kenar yumuşatma kullan</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="205"/> <location filename="../src/GUI/optionsdialog.cpp" line="211"/>
<source>Waypoint color:</source> <source>Waypoint color:</source>
<translation>Yer işareti rengi:</translation> <translation>Yer işareti rengi:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="206"/> <location filename="../src/GUI/optionsdialog.cpp" line="212"/>
<source>Waypoint size:</source> <source>Waypoint size:</source>
<translation>Yer işareti boyutu:</translation> <translation>Yer işareti boyutu:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="208"/> <location filename="../src/GUI/optionsdialog.cpp" line="214"/>
<location filename="../src/GUI/optionsdialog.cpp" line="224"/> <location filename="../src/GUI/optionsdialog.cpp" line="230"/>
<source>Color:</source> <source>Color:</source>
<translation>Renk:</translation> <translation>Renk:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="209"/> <location filename="../src/GUI/optionsdialog.cpp" line="215"/>
<location filename="../src/GUI/optionsdialog.cpp" line="225"/> <location filename="../src/GUI/optionsdialog.cpp" line="231"/>
<source>Size:</source> <source>Size:</source>
<translation>Boyut:</translation> <translation>Boyut:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="210"/> <location filename="../src/GUI/optionsdialog.cpp" line="216"/>
<source>Waypoints</source> <source>Waypoints</source>
<translation>Yer işaretleri</translation> <translation>Yer işaretleri</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="221"/> <location filename="../src/GUI/optionsdialog.cpp" line="227"/>
<source>POI color:</source> <source>POI color:</source>
<translation>POI renk:</translation> <translation>POI renk:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="222"/> <location filename="../src/GUI/optionsdialog.cpp" line="228"/>
<source>POI size:</source> <source>POI size:</source>
<translation>POI boyutu:</translation> <translation>POI boyutu:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="226"/> <location filename="../src/GUI/optionsdialog.cpp" line="232"/>
<source>POIs</source> <source>POIs</source>
<translation>POI&apos;ler</translation> <translation>POI&apos;ler</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="252"/> <location filename="../src/GUI/optionsdialog.cpp" line="258"/>
<source>Line width:</source> <source>Line width:</source>
<translation>Hat genişliği:</translation> <translation>Hat genişliği:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="253"/> <location filename="../src/GUI/optionsdialog.cpp" line="259"/>
<source>Slider color:</source> <source>Slider color:</source>
<translation>Kaydırıcı rengi:</translation> <translation>Kaydırıcı rengi:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="276"/> <location filename="../src/GUI/optionsdialog.cpp" line="282"/>
<source>Background color:</source> <source>Background color:</source>
<translation>Arka plan rengi:</translation> <translation>Arka plan rengi:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="277"/> <location filename="../src/GUI/optionsdialog.cpp" line="283"/>
<source>Map opacity:</source> <source>Map opacity:</source>
<translation>Harita opaklığı:</translation> <translation>Harita opaklığı:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="287"/> <location filename="../src/GUI/optionsdialog.cpp" line="293"/>
<source>Paths</source> <source>Paths</source>
<translation>Klasör konumları</translation> <translation>Klasör konumları</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="288"/> <location filename="../src/GUI/optionsdialog.cpp" line="294"/>
<source>Points</source> <source>Points</source>
<translation>Noktalar</translation> <translation>Noktalar</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="289"/> <location filename="../src/GUI/optionsdialog.cpp" line="295"/>
<location filename="../src/GUI/optionsdialog.cpp" line="545"/> <location filename="../src/GUI/optionsdialog.cpp" line="575"/>
<source>Graphs</source> <source>Graphs</source>
<translation>Grafikler</translation> <translation>Grafikler</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="290"/> <location filename="../src/GUI/optionsdialog.cpp" line="296"/>
<source>Map</source> <source>Map</source>
<translation>Harita</translation> <translation>Harita</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="297"/> <location filename="../src/GUI/optionsdialog.cpp" line="303"/>
<source>Moving average window size</source> <source>Moving average window size</source>
<translation>Ortalama pencere boyutuna taşıma</translation> <translation>Ortalama pencere boyutuna taşıma</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="316"/> <location filename="../src/GUI/optionsdialog.cpp" line="322"/>
<location filename="../src/GUI/optionsdialog.cpp" line="402"/> <location filename="../src/GUI/optionsdialog.cpp" line="432"/>
<location filename="../src/GUI/optionsdialog.cpp" line="465"/> <location filename="../src/GUI/optionsdialog.cpp" line="495"/>
<source>Elevation:</source> <source>Elevation:</source>
<translation>Rakım:</translation> <translation>Rakım:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="317"/> <location filename="../src/GUI/optionsdialog.cpp" line="323"/>
<location filename="../src/GUI/optionsdialog.cpp" line="401"/> <location filename="../src/GUI/optionsdialog.cpp" line="431"/>
<source>Speed:</source> <source>Speed:</source>
<translation>Hız:</translation> <translation>Hız:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="318"/> <location filename="../src/GUI/optionsdialog.cpp" line="324"/>
<source>Heart rate:</source> <source>Heart rate:</source>
<translation>Nabız:</translation> <translation>Nabız:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="319"/> <location filename="../src/GUI/optionsdialog.cpp" line="325"/>
<source>Cadence:</source> <source>Cadence:</source>
<translation>Kadans:</translation> <translation>Kadans:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="320"/> <location filename="../src/GUI/optionsdialog.cpp" line="326"/>
<source>Power:</source> <source>Power:</source>
<translation>Güç:</translation> <translation>Güç:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="322"/> <location filename="../src/GUI/optionsdialog.cpp" line="328"/>
<source>Smoothing</source> <source>Smoothing</source>
<translation>Yumuşatma</translation> <translation>Yumuşatma</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="326"/> <location filename="../src/GUI/optionsdialog.cpp" line="332"/>
<source>Eliminate GPS outliers</source> <source>Eliminate GPS outliers</source>
<translation>Aykırı GPS ele</translation> <translation>Aykırı GPS ele</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="335"/> <location filename="../src/GUI/optionsdialog.cpp" line="341"/>
<source>Smoothing:</source> <source>Smoothing:</source>
<translation>Yumuşatma:</translation> <translation>Yumuşatma:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="352"/> <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> <source>mi/h</source>
<translation>mi/h</translation> <translation>mi/h</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="355"/> <location filename="../src/GUI/optionsdialog.cpp" line="369"/>
<source>kn</source> <source>kn</source>
<translation>kn</translation> <translation>kn</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="358"/> <location filename="../src/GUI/optionsdialog.cpp" line="372"/>
<source>km/h</source> <source>km/h</source>
<translation>km/h</translation> <translation>km/h</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="362"/> <location filename="../src/GUI/optionsdialog.cpp" line="376"/>
<location filename="../src/GUI/optionsdialog.cpp" line="568"/> <location filename="../src/GUI/optionsdialog.cpp" line="598"/>
<source>s</source> <source>s</source>
<translation>s</translation> <translation>s</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="366"/> <location filename="../src/GUI/optionsdialog.cpp" line="392"/>
<source>Minimal speed:</source> <source>Minimal speed:</source>
<translation>Asgari hız:</translation> <translation>Asgari hız:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="367"/> <location filename="../src/GUI/optionsdialog.cpp" line="393"/>
<source>Minimal duration:</source> <source>Minimal duration:</source>
<translation>Minimum süre:</translation> <translation>Minimum süre:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="373"/> <location filename="../src/GUI/optionsdialog.cpp" line="403"/>
<source>Computed from distance/time</source> <source>Computed from distance/time</source>
<translation>Mesafe/zamandan hesaplandı</translation> <translation>Mesafe/zamandan hesaplandı</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="374"/> <location filename="../src/GUI/optionsdialog.cpp" line="404"/>
<source>Recorded by device</source> <source>Recorded by device</source>
<translation>Cihazdan kaydedilen</translation> <translation>Cihazdan kaydedilen</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="380"/> <location filename="../src/GUI/optionsdialog.cpp" line="410"/>
<location filename="../src/GUI/optionsdialog.cpp" line="438"/> <location filename="../src/GUI/optionsdialog.cpp" line="468"/>
<source>GPS data</source> <source>GPS data</source>
<translation>GPS verisi</translation> <translation>GPS verisi</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="381"/> <location filename="../src/GUI/optionsdialog.cpp" line="411"/>
<location filename="../src/GUI/optionsdialog.cpp" line="439"/> <location filename="../src/GUI/optionsdialog.cpp" line="469"/>
<source>DEM data</source> <source>DEM data</source>
<translation>DEM verisi</translation> <translation>DEM verisi</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="418"/> <location filename="../src/GUI/optionsdialog.cpp" line="448"/>
<source>Elevation</source> <source>Elevation</source>
<translation>Rakım</translation> <translation>Rakım</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="429"/> <location filename="../src/GUI/optionsdialog.cpp" line="459"/>
<source>Filtering</source> <source>Filtering</source>
<translation>Filtreleme</translation> <translation>Filtreleme</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="430"/> <location filename="../src/GUI/optionsdialog.cpp" line="460"/>
<source>Sources</source> <source>Sources</source>
<translation>Kaynaklar</translation> <translation>Kaynaklar</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="431"/> <location filename="../src/GUI/optionsdialog.cpp" line="461"/>
<source>Pause detection</source> <source>Pause detection</source>
<translation>Duraklama algılama</translation> <translation>Duraklama algılama</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="464"/> <location filename="../src/GUI/optionsdialog.cpp" line="494"/>
<source>Radius:</source> <source>Radius:</source>
<translation>Yarıçap:</translation> <translation>Yarıçap:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="412"/> <location filename="../src/GUI/optionsdialog.cpp" line="442"/>
<source>Speed</source> <source>Speed</source>
<translation>Hız</translation> <translation>Hız</translation>
</message> </message>
<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> <source>mi</source>
<translation>mi</translation> <translation>mi</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="453"/> <location filename="../src/GUI/optionsdialog.cpp" line="483"/>
<source>nmi</source> <source>nmi</source>
<translation>nmi</translation> <translation>nmi</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="456"/> <location filename="../src/GUI/optionsdialog.cpp" line="486"/>
<source>km</source> <source>km</source>
<translation>Km</translation> <translation>Km</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="471"/> <location filename="../src/GUI/optionsdialog.cpp" line="501"/>
<location filename="../src/GUI/optionsdialog.cpp" line="611"/> <location filename="../src/GUI/optionsdialog.cpp" line="641"/>
<source>POI</source> <source>POI</source>
<translation>POI</translation> <translation>POI</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="478"/> <location filename="../src/GUI/optionsdialog.cpp" line="508"/>
<source>WYSIWYG</source> <source>WYSIWYG</source>
<translation>WYSIWYG</translation> <translation>WYSIWYG</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="479"/> <location filename="../src/GUI/optionsdialog.cpp" line="509"/>
<source>High-Resolution</source> <source>High-Resolution</source>
<translation>Yüksek çözünürlük</translation> <translation>Yüksek çözünürlük</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="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> <source>The printed area is approximately the display area. The map zoom level does not change.</source>
<translation>Yazdırılan alan yaklaşık olarak görüntü alanıdır. Harita zum seviyesi değişmez.</translation> <translation>Yazdırılan alan yaklaşık olarak görüntü alanıdır. Harita zum seviyesi değişmez.</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="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> <source>The zoom level will be changed so that the whole content (tracks/waypoints) fits to the printed area and the map resolution is as close as possible to the print resolution.</source>
<translation>Yakınlaştırma seviyesi, tüm içeriğin (izler/yer işaretleri) yazdırılan alana sığması ve harita çözünürlüğünün baskı çözünürlüğüne olabildiğince yakın olacak şekilde değiştirilecektir.</translation> <translation>Yakınlaştırma seviyesi, tüm içeriğin (izler/yer işaretleri) yazdırılan alana sığması ve harita çözünürlüğünün baskı çözünürlüğüne olabildiğince yakın olacak şekilde değiştirilecektir.</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="508"/> <location filename="../src/GUI/optionsdialog.cpp" line="538"/>
<source>Name</source> <source>Name</source>
<translation>Adı</translation> <translation>Adı</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="510"/> <location filename="../src/GUI/optionsdialog.cpp" line="540"/>
<source>Date</source> <source>Date</source>
<translation>Tarih</translation> <translation>Tarih</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="512"/> <location filename="../src/GUI/optionsdialog.cpp" line="542"/>
<source>Distance</source> <source>Distance</source>
<translation>Mesafe</translation> <translation>Mesafe</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="514"/> <location filename="../src/GUI/optionsdialog.cpp" line="544"/>
<source>Time</source> <source>Time</source>
<translation>Zaman</translation> <translation>Zaman</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="516"/> <location filename="../src/GUI/optionsdialog.cpp" line="546"/>
<source>Moving time</source> <source>Moving time</source>
<translation>Hareket süresi</translation> <translation>Hareket süresi</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="518"/> <location filename="../src/GUI/optionsdialog.cpp" line="548"/>
<source>Item count (&gt;1)</source> <source>Item count (&gt;1)</source>
<translation>Öğe sayısı (&gt;1)</translation> <translation>Öğe sayısı (&gt;1)</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="533"/> <location filename="../src/GUI/optionsdialog.cpp" line="563"/>
<source>Separate graph page</source> <source>Separate graph page</source>
<translation>Ayrı grafik sayfası</translation> <translation>Ayrı grafik sayfası</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="543"/> <location filename="../src/GUI/optionsdialog.cpp" line="573"/>
<source>Print mode</source> <source>Print mode</source>
<translation>Yazdırma modu</translation> <translation>Yazdırma modu</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="544"/> <location filename="../src/GUI/optionsdialog.cpp" line="574"/>
<source>Header</source> <source>Header</source>
<translation>Başlık</translation> <translation>Başlık</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="552"/> <location filename="../src/GUI/optionsdialog.cpp" line="582"/>
<source>Use OpenGL</source> <source>Use OpenGL</source>
<translation>OpenGL Kullan</translation> <translation>OpenGL Kullan</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="555"/> <location filename="../src/GUI/optionsdialog.cpp" line="585"/>
<source>Enable HTTP/2</source> <source>Enable HTTP/2</source>
<translation>HTTP/2 etkinleştir</translation> <translation>HTTP/2 etkinleştir</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="562"/> <location filename="../src/GUI/optionsdialog.cpp" line="592"/>
<source>MB</source> <source>MB</source>
<translation>MB</translation> <translation>MB</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="572"/> <location filename="../src/GUI/optionsdialog.cpp" line="602"/>
<source>Image cache size:</source> <source>Image cache size:</source>
<translation>Görüntü önbellek boyutu:</translation> <translation>Görüntü önbellek boyutu:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="573"/> <location filename="../src/GUI/optionsdialog.cpp" line="603"/>
<source>Connection timeout:</source> <source>Connection timeout:</source>
<translation>Bağlantı zaman ımı:</translation> <translation>Bağlantı zaman ımı:</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="589"/> <location filename="../src/GUI/optionsdialog.cpp" line="619"/>
<location filename="../src/GUI/optionsdialog.cpp" line="614"/> <location filename="../src/GUI/optionsdialog.cpp" line="644"/>
<source>System</source> <source>System</source>
<translation>Sistem</translation> <translation>Sistem</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="607"/> <location filename="../src/GUI/optionsdialog.cpp" line="637"/>
<source>Appearance</source> <source>Appearance</source>
<translation>Görünüm</translation> <translation>Görünüm</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="609"/> <location filename="../src/GUI/optionsdialog.cpp" line="639"/>
<source>Maps</source> <source>Maps</source>
<translation>Haritalar</translation> <translation>Haritalar</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="610"/> <location filename="../src/GUI/optionsdialog.cpp" line="640"/>
<source>Data</source> <source>Data</source>
<translation>Veri</translation> <translation>Veri</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="612"/> <location filename="../src/GUI/optionsdialog.cpp" line="642"/>
<source>Print &amp; Export</source> <source>Print &amp; Export</source>
<translation>Yazdır &amp; Dışa ver</translation> <translation>Yazdır &amp; Dışa ver</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/optionsdialog.cpp" line="641"/> <location filename="../src/GUI/optionsdialog.cpp" line="671"/>
<source>Options</source> <source>Options</source>
<translation>Seçenekler</translation> <translation>Seçenekler</translation>
</message> </message>
@ -1867,7 +1886,12 @@
<translation>ıklama</translation> <translation>ıklama</translation>
</message> </message>
<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> <source>Links</source>
<translation>Bağlantılar</translation> <translation>Bağlantılar</translation>
</message> </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> <key>CFBundleTypeRole</key>
<string>Viewer</string> <string>Viewer</string>
</dict> </dict>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>sml</string>
</array>
<key>CFBundleTypeMIMETypes</key>
<array>
<string>application/sml+xml</string>
</array>
<key>CFBundleTypeIconFile</key>
<string>icons/sml.icns</string>
<key>CFBundleTypeName</key>
<string>Suunto Markup Language</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
</dict>
</array> </array>
<key>UTImportedTypeDeclarations</key> <key>UTImportedTypeDeclarations</key>
@ -538,7 +554,28 @@
<string>gpi</string> <string>gpi</string>
</array> </array>
<key>public.mime-type</key> <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>
</dict> </dict>
</array> </array>

View File

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

View File

@ -3,12 +3,16 @@ Name=GPXSee
Comment=GPS log file viewer and analyzer Comment=GPS log file viewer and analyzer
Comment[cz]=Prohlížeč a analyzátor GPS logů Comment[cz]=Prohlížeč a analyzátor GPS logů
Comment[fi]=Ohjelma GPS-lokien katseluun ja analysointiin Comment[fi]=Ohjelma GPS-lokien katseluun ja analysointiin
Comment[fr]=Visualisation et analyse de fichier GPS
Comment[nb]=GPS-loggfilleser og analysator
Comment[pl]=Przeglądarka i analizator plików dziennika GPS Comment[pl]=Przeglądarka i analizator plików dziennika GPS
Comment[ru]=Программа для просмотра и анализа GPS логов Comment[ru]=Программа для просмотра и анализа GPS логов
Comment[sv]=GPS-loggfilsläsare och analysator Comment[sv]=GPS-loggfilsläsare och analysator
Comment[tr]=GPS günlük dosyası görüntüleyici ve analizcisi
Comment[uk]=Переглядач та аналізатор GPS логів
Exec=gpxsee %F Exec=gpxsee %F
Icon=gpxsee Icon=gpxsee
Terminal=false Terminal=false
Type=Application Type=Application
Categories=Graphics;Viewer;Education;Geography;Maps;Sports;Qt; Categories=Graphics;Viewer;Education;Geography;Maps;Sports;Qt;
MimeType=application/gpx+xml;application/tcx+xml;application/vnd.ant.fit;application/vnd.google-earth.kml+xml;application/vnd.fai.igc;application/vnd.nmea.nmea;application/vnd.oziexplorer.plt;application/vnd.oziexplorer.rte;application/vnd.oziexplorer.wpt;application/loc+xml;application/slf+xml;application/geo+json;application/vnd.naviter.seeyou.cup; MimeType=application/gpx+xml;application/tcx+xml;application/vnd.ant.fit;application/vnd.google-earth.kml+xml;application/vnd.fai.igc;application/vnd.nmea.nmea;application/vnd.oziexplorer.plt;application/vnd.oziexplorer.rte;application/vnd.oziexplorer.wpt;application/loc+xml;application/slf+xml;application/geo+json;application/vnd.naviter.seeyou.cup;application/vnd.garmin.gpi;application/sml+xml;

View File

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

View File

@ -91,4 +91,18 @@
<generic-icon name="text-plain"/> <generic-icon name="text-plain"/>
<glob pattern="*.cup"/> <glob pattern="*.cup"/>
</mime-type> </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> </mime-info>

View File

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

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<map xmlns="http://www.gpxsee.org/map/1.3"> <map xmlns="http://www.gpxsee.org/map/1.3">
<name>4UMaps</name> <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"/> <zoom min="2" max="15"/>
<bounds bottom="-65"/> <bounds bottom="-65"/>
<copyright>Map data: © OpenStreetMap contributors (ODbL) | Rendering: © 4UMaps.eu</copyright> <copyright>Map data: © OpenStreetMap contributors (ODbL) | Rendering: © 4UMaps.eu</copyright>

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<map xmlns="http://www.gpxsee.org/map/1.3"> <map xmlns="http://www.gpxsee.org/map/1.3">
<name>Open Street Map</name> <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> <copyright>Map data: © OpenStreetMap contributors (ODbL) | Rendering: © OpenStreetMap (CC-BY-SA)</copyright>
</map> </map>

View File

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

View File

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

View File

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

View File

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

View File

@ -451,11 +451,11 @@ void GUI::createActions()
_degreesMinutesAction->setActionGroup(ag); _degreesMinutesAction->setActionGroup(ag);
connect(_degreesMinutesAction, SIGNAL(triggered()), this, connect(_degreesMinutesAction, SIGNAL(triggered()), this,
SLOT(setDegreesMinutes())); SLOT(setDegreesMinutes()));
_DMSAction = new QAction(tr("Degrees, minutes, seconds (DMS)"), this); _dmsAction = new QAction(tr("Degrees, minutes, seconds (DMS)"), this);
_DMSAction->setMenuRole(QAction::NoRole); _dmsAction->setMenuRole(QAction::NoRole);
_DMSAction->setCheckable(true); _dmsAction->setCheckable(true);
_DMSAction->setActionGroup(ag); _dmsAction->setActionGroup(ag);
connect(_DMSAction, SIGNAL(triggered()), this, SLOT(setDMS())); connect(_dmsAction, SIGNAL(triggered()), this, SLOT(setDMS()));
_fullscreenAction = new QAction(QIcon(FULLSCREEN_ICON), _fullscreenAction = new QAction(QIcon(FULLSCREEN_ICON),
tr("Fullscreen mode"), this); tr("Fullscreen mode"), this);
_fullscreenAction->setMenuRole(QAction::NoRole); _fullscreenAction->setMenuRole(QAction::NoRole);
@ -559,7 +559,7 @@ void GUI::createMenus()
QMenu *coordinatesMenu = settingsMenu->addMenu(tr("Coordinates format")); QMenu *coordinatesMenu = settingsMenu->addMenu(tr("Coordinates format"));
coordinatesMenu->addAction(_decimalDegreesAction); coordinatesMenu->addAction(_decimalDegreesAction);
coordinatesMenu->addAction(_degreesMinutesAction); coordinatesMenu->addAction(_degreesMinutesAction);
coordinatesMenu->addAction(_DMSAction); coordinatesMenu->addAction(_dmsAction);
settingsMenu->addSeparator(); settingsMenu->addSeparator();
settingsMenu->addAction(_showToolbarsAction); settingsMenu->addAction(_showToolbarsAction);
settingsMenu->addAction(_fullscreenAction); settingsMenu->addAction(_fullscreenAction);
@ -949,6 +949,7 @@ void GUI::openOptions()
SET_TRACK_OPTION(cadenceFilter, setCadenceFilter); SET_TRACK_OPTION(cadenceFilter, setCadenceFilter);
SET_TRACK_OPTION(powerFilter, setPowerFilter); SET_TRACK_OPTION(powerFilter, setPowerFilter);
SET_TRACK_OPTION(outlierEliminate, setOutlierElimination); SET_TRACK_OPTION(outlierEliminate, setOutlierElimination);
SET_TRACK_OPTION(automaticPause, setAutomaticPause);
SET_TRACK_OPTION(pauseSpeed, setPauseSpeed); SET_TRACK_OPTION(pauseSpeed, setPauseSpeed);
SET_TRACK_OPTION(pauseInterval, setPauseInterval); SET_TRACK_OPTION(pauseInterval, setPauseInterval);
SET_TRACK_OPTION(useReportedSpeed, useReportedSpeed); SET_TRACK_OPTION(useReportedSpeed, useReportedSpeed);
@ -1654,7 +1655,7 @@ void GUI::writeSettings()
: _nauticalUnitsAction->isChecked() ? Nautical : Metric; : _nauticalUnitsAction->isChecked() ? Nautical : Metric;
if (units != UNITS_DEFAULT) if (units != UNITS_DEFAULT)
settings.setValue(UNITS_SETTING, units); settings.setValue(UNITS_SETTING, units);
CoordinatesFormat format = _DMSAction->isChecked() ? DMS CoordinatesFormat format = _dmsAction->isChecked() ? DMS
: _degreesMinutesAction->isChecked() ? DegreesMinutes : DecimalDegrees; : _degreesMinutesAction->isChecked() ? DegreesMinutes : DecimalDegrees;
if (format != COORDINATES_DEFAULT) if (format != COORDINATES_DEFAULT)
settings.setValue(COORDINATES_SETTING, format); settings.setValue(COORDINATES_SETTING, format);
@ -1798,6 +1799,8 @@ void GUI::writeSettings()
settings.setValue(POWER_FILTER_SETTING, _options.powerFilter); settings.setValue(POWER_FILTER_SETTING, _options.powerFilter);
if (_options.outlierEliminate != OUTLIER_ELIMINATE_DEFAULT) if (_options.outlierEliminate != OUTLIER_ELIMINATE_DEFAULT)
settings.setValue(OUTLIER_ELIMINATE_SETTING, _options.outlierEliminate); 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) if (_options.pauseSpeed != PAUSE_SPEED_DEFAULT)
settings.setValue(PAUSE_SPEED_SETTING, _options.pauseSpeed); settings.setValue(PAUSE_SPEED_SETTING, _options.pauseSpeed);
if (_options.pauseInterval != PAUSE_INTERVAL_DEFAULT) if (_options.pauseInterval != PAUSE_INTERVAL_DEFAULT)
@ -1876,7 +1879,7 @@ void GUI::readSettings()
value = settings.value(COORDINATES_SETTING, COORDINATES_DEFAULT).toInt(); value = settings.value(COORDINATES_SETTING, COORDINATES_DEFAULT).toInt();
if (value == DMS) if (value == DMS)
_DMSAction->trigger(); _dmsAction->trigger();
else if (value == DegreesMinutes) else if (value == DegreesMinutes)
_degreesMinutesAction->trigger(); _degreesMinutesAction->trigger();
else else
@ -2072,6 +2075,8 @@ void GUI::readSettings()
USE_REPORTED_SPEED_DEFAULT).toBool(); USE_REPORTED_SPEED_DEFAULT).toBool();
_options.dataUseDEM = settings.value(DATA_USE_DEM_SETTING, _options.dataUseDEM = settings.value(DATA_USE_DEM_SETTING,
DATA_USE_DEM_DEFAULT).toBool(); DATA_USE_DEM_DEFAULT).toBool();
_options.automaticPause = settings.value(AUTOMATIC_PAUSE_SETTING,
AUTOMATIC_PAUSE_DEFAULT).toBool();
_options.pauseInterval = settings.value(PAUSE_INTERVAL_SETTING, _options.pauseInterval = settings.value(PAUSE_INTERVAL_SETTING,
PAUSE_INTERVAL_DEFAULT).toInt(); PAUSE_INTERVAL_DEFAULT).toInt();
_options.poiRadius = settings.value(POI_RADIUS_SETTING, POI_RADIUS_DEFAULT) _options.poiRadius = settings.value(POI_RADIUS_SETTING, POI_RADIUS_DEFAULT)
@ -2153,6 +2158,7 @@ void GUI::readSettings()
Track::setCadenceFilter(_options.cadenceFilter); Track::setCadenceFilter(_options.cadenceFilter);
Track::setPowerFilter(_options.powerFilter); Track::setPowerFilter(_options.powerFilter);
Track::setOutlierElimination(_options.outlierEliminate); Track::setOutlierElimination(_options.outlierEliminate);
Track::setAutomaticPause(_options.automaticPause);
Track::setPauseSpeed(_options.pauseSpeed); Track::setPauseSpeed(_options.pauseSpeed);
Track::setPauseInterval(_options.pauseInterval); Track::setPauseInterval(_options.pauseInterval);
Track::useReportedSpeed(_options.useReportedSpeed); Track::useReportedSpeed(_options.useReportedSpeed);

View File

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

View File

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

View File

@ -49,6 +49,7 @@ struct Options {
int cadenceFilter; int cadenceFilter;
int powerFilter; int powerFilter;
bool outlierEliminate; bool outlierEliminate;
bool automaticPause;
qreal pauseSpeed; qreal pauseSpeed;
int pauseInterval; int pauseInterval;
bool useReportedSpeed; bool useReportedSpeed;
@ -86,6 +87,9 @@ public slots:
public: public:
OptionsDialog(Options *options, QWidget *parent = 0); OptionsDialog(Options *options, QWidget *parent = 0);
private slots:
void automaticPauseDetectionSet(bool set);
private: private:
QWidget *createMapPage(); QWidget *createMapPage();
QWidget *createAppearancePage(); QWidget *createAppearancePage();
@ -129,6 +133,9 @@ private:
OddSpinBox *_cadenceFilter; OddSpinBox *_cadenceFilter;
OddSpinBox *_powerFilter; OddSpinBox *_powerFilter;
QCheckBox *_outlierEliminate; QCheckBox *_outlierEliminate;
QRadioButton *_automaticPause;
QRadioButton *_manualPause;
QDoubleSpinBox *_pauseSpeed; QDoubleSpinBox *_pauseSpeed;
QSpinBox *_pauseInterval; QSpinBox *_pauseInterval;
QRadioButton *_computedSpeed; 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->place(pos, w);
PopupLabel::_instance->showNormal(); PopupLabel::_instance->showNormal();
} }
void Popup::clear()
{
if (PopupLabel::_instance)
delete PopupLabel::_instance;
}

View File

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

View File

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

View File

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

View File

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

View File

@ -30,6 +30,19 @@ QString WaypointItem::info() const
if (!_waypoint.description().isEmpty()) if (!_waypoint.description().isEmpty())
tt.insert(qApp->translate("WaypointItem", "Description"), tt.insert(qApp->translate("WaypointItem", "Description"),
_waypoint.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()) { if (!_waypoint.links().isEmpty()) {
QString links; QString links;
for (int i = 0; i < _waypoint.links().size(); i++) { 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.insert(qApp->translate("WaypointItem", "Links"), links);
} }
tt.setImage(_waypoint.image()); tt.setImages(_waypoint.images());
return tt.toString(); return tt.toString();
} }

View File

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

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_SHORT 3
#define TIFF_LONG 4 #define TIFF_LONG 4
#define TIFF_RATIONAL 5 #define TIFF_RATIONAL 5
#define TIFF_SRATIONAL 10
#define TIFF_DOUBLE 12 #define TIFF_DOUBLE 12
class TIFFFile class TIFFFile

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

View File

@ -1,4 +1,9 @@
#include <QtEndian> #include <QtEndian>
#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0)
#include <QtCore/qmath.h>
#else // QT5
#include <QtMath>
#endif // QT5
#include <QDir> #include <QDir>
#include <QFile> #include <QFile>
#include "common/coordinates.h" #include "common/coordinates.h"
@ -37,10 +42,10 @@ static qreal height(const Coordinates &c, const QByteArray *data)
else else
return NAN; return NAN;
int row = (int)((c.lat() - (int)c.lat()) * (samples - 1)); int row = (int)((c.lat() - qFloor(c.lat())) * (samples - 1));
int col = (int)((c.lon() - (int)c.lon()) * (samples - 1)); int col = (int)((c.lon() - qFloor(c.lon())) * (samples - 1));
qreal dx = ((c.lon() - (int)c.lon()) * (samples - 1)) - col; qreal dx = ((c.lon() - qFloor(c.lon())) * (samples - 1)) - col;
qreal dy = ((c.lat() - (int)c.lat()) * (samples - 1)) - row; qreal dy = ((c.lat() - qFloor(c.lat())) * (samples - 1)) - row;
qreal p0 = value(col, row, samples, data); qreal p0 = value(col, row, samples, data);
qreal p1 = value(col + 1, row, samples, data); qreal p1 = value(col + 1, row, samples, data);
@ -75,7 +80,7 @@ qreal DEM::elevation(const Coordinates &c)
if (_dir.isEmpty()) if (_dir.isEmpty())
return NAN; return NAN;
Key k((int)c.lon(), (int)c.lat()); Key k(qFloor(c.lon()), qFloor(c.lat()));
QByteArray *ba = _data[k]; QByteArray *ba = _data[k];
if (!ba) { 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 double EXIFParser::coordinate(TIFFFile &file, const IFDEntry &ll) const
{ {
if (!(ll.type == TIFF_RATIONAL && ll.count == 3)) // Some broken image creators like NOKIA phones use a wrong (SRATIONAL)
// data type
if (!((ll.type == TIFF_RATIONAL || ll.type == TIFF_SRATIONAL)
&& ll.count == 3))
return NAN; return NAN;
if (!file.seek(ll.offset)) if (!file.seek(ll.offset))
@ -209,7 +212,7 @@ bool EXIFParser::parseTIFF(QFile *file, QVector<Waypoint> &waypoints)
Waypoint wp(c); Waypoint wp(c);
wp.setName(QFileInfo(file->fileName()).baseName()); wp.setName(QFileInfo(file->fileName()).baseName());
wp.setImage(img); wp.addImage(img);
wp.setElevation(altitude(tiff, GPSIFD.value(GPSAltitude), wp.setElevation(altitude(tiff, GPSIFD.value(GPSAltitude),
GPSIFD.value(GPSAltitudeRef))); GPSIFD.value(GPSAltitudeRef)));
wp.setTimestamp(QDateTime(QDate::fromString(text(tiff, wp.setTimestamp(QDateTime(QDate::fromString(text(tiff,

View File

@ -1,7 +1,17 @@
#include <cstring>
#include <QDataStream> #include <QDataStream>
#include <QTextCodec> #include <QTextCodec>
#include <QtEndian> #include <QtEndian>
#include <QUrl> #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" #include "gpiparser.h"
@ -26,16 +36,105 @@ private:
QString _str; 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) static quint16 nextHeaderType(QDataStream &stream)
{ {
quint16 type = 0; 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) static quint8 readRecordHeader(QDataStream &stream, RecordHeader &hdr)
@ -55,18 +154,6 @@ static quint32 skipRecord(QDataStream &stream)
return rs + rh.size; 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) static quint16 readString(QDataStream &stream, QTextCodec *codec, QString &str)
{ {
quint16 len; quint16 len;
@ -83,15 +170,16 @@ static quint32 readTranslatedObjects(QDataStream &stream, QTextCodec *codec,
QList<TranslatedString> &objects) QList<TranslatedString> &objects)
{ {
qint32 size = 0, ret; qint32 size = 0, ret;
char lang[2]; char lang[3];
memset(lang, 0, sizeof(lang));
objects.clear(); objects.clear();
stream >> size; stream >> size;
ret = size + 4; ret = size + 4;
while (size > 0) { while (stream.status() == QDataStream::Ok && size > 0) {
QString str; QString str;
stream.readRawData(lang, sizeof(lang)); stream.readRawData(lang, sizeof(lang) - 1);
size -= readString(stream, codec, str) + 2; size -= readString(stream, codec, str) + 2;
objects.append(TranslatedString(lang, str)); objects.append(TranslatedString(lang, str));
} }
@ -102,6 +190,67 @@ static quint32 readTranslatedObjects(QDataStream &stream, QTextCodec *codec,
return ret; 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, static quint32 readDescription(QDataStream &stream, QTextCodec *codec,
Waypoint &waypoint) Waypoint &waypoint)
{ {
@ -154,29 +303,29 @@ static quint32 readContact(QDataStream &stream, QTextCodec *codec,
{ {
RecordHeader rh; RecordHeader rh;
quint8 rs; quint8 rs;
quint16 s1; quint16 flags;
quint32 ds = 2; quint32 ds = 2;
QString str; QString str;
QList<TranslatedString> obj; QList<TranslatedString> obj;
rs = readRecordHeader(stream, rh); rs = readRecordHeader(stream, rh);
stream >> s1; stream >> flags;
if (s1 & 0x1) // phone if (flags & 0x1) // phone
ds += readString(stream, codec, str); ds += readString(stream, codec, str);
if (s1 & 0x2) // phone2 if (flags & 0x2) // phone2
ds += readString(stream, codec, str); ds += readString(stream, codec, str);
if (s1 & 0x4) // fax if (flags & 0x4) // fax
ds += readString(stream, codec, str); ds += readString(stream, codec, str);
if (s1 & 0x8) // mail if (flags & 0x8) // mail
ds += readString(stream, codec, str); ds += readString(stream, codec, str);
if (s1 & 0x10) { // web if (flags & 0x10) { // web
ds += readString(stream, codec, str); ds += readString(stream, codec, str);
QUrl url(str); QUrl url(str);
waypoint.addLink(Link(url.scheme().isEmpty() waypoint.addLink(Link(url.scheme().isEmpty()
? "http://" + str : str, str)); ? "http://" + str : str, str));
} }
if (s1 & 0x20) // unknown if (flags & 0x20) // unknown
ds += readTranslatedObjects(stream, codec, obj); ds += readTranslatedObjects(stream, codec, obj);
if (ds != rh.size) if (ds != rh.size)
@ -185,34 +334,228 @@ static quint32 readContact(QDataStream &stream, QTextCodec *codec,
return rs + rh.size; 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, static quint32 readPOI(QDataStream &stream, QTextCodec *codec,
QVector<Waypoint> &waypoints) QVector<Waypoint> &waypoints, const QString &fileName, int &imgId)
{ {
RecordHeader rh; RecordHeader rh;
quint8 rs; quint8 rs;
quint32 ds; quint32 ds;
qint32 s1, s2; qint32 lat, lon;
quint16 s3; quint16 s3;
QList<TranslatedString> obj; QList<TranslatedString> obj;
rs = readRecordHeader(stream, rh); rs = readRecordHeader(stream, rh);
stream >> s1 >> s2 >> s3; stream >> lat >> lon >> s3;
stream.skipRawData(s3); stream.skipRawData(s3);
ds = 10 + s3; ds = 10 + s3;
ds += readTranslatedObjects(stream, codec, obj); ds += readTranslatedObjects(stream, codec, obj);
waypoints.append(Waypoint(Coordinates(toWGS(s2), toWGS(s1)))); waypoints.append(Waypoint(Coordinates(toWGS32(lon), toWGS32(lat))));
if (!obj.isEmpty()) if (!obj.isEmpty())
waypoints.last().setName(obj.first().str()); waypoints.last().setName(obj.first().str());
while (ds < rh.size) { while (stream.status() == QDataStream::Ok && ds < rh.size) {
switch(nextHeaderType(stream)) { switch(nextHeaderType(stream)) {
case 10: case 10:
ds += readDescription(stream, codec, waypoints.last()); ds += readDescription(stream, codec, waypoints.last());
break; break;
case 11:
ds += readAddress(stream, codec, waypoints.last());
break;
case 12: case 12:
ds += readContact(stream, codec, waypoints.last()); ds += readContact(stream, codec, waypoints.last());
break; 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: case 14:
ds += readNotes(stream, codec, waypoints.last()); ds += readNotes(stream, codec, waypoints.last());
break; break;
@ -228,7 +571,8 @@ static quint32 readPOI(QDataStream &stream, QTextCodec *codec,
} }
static quint32 readSpatialIndex(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; RecordHeader rh;
quint32 ds, s5; quint32 ds, s5;
@ -241,13 +585,17 @@ static quint32 readSpatialIndex(QDataStream &stream, QTextCodec *codec,
stream.skipRawData(s6); stream.skipRawData(s6);
ds = 22 + s6; ds = 22 + s6;
if (rh.flags & 0x8) { if (rh.flags & 0x8) {
while (ds < rh.size) { while (stream.status() == QDataStream::Ok && ds < rh.size) {
switch(nextHeaderType(stream)) { switch(nextHeaderType(stream)) {
case 2: case 2:
ds += readPOI(stream, codec, waypoints); ds += readPOI(stream, codec, waypoints, fileName, imgId);
break; break;
case 8: case 8:
ds += readSpatialIndex(stream, codec, waypoints); ds += readSpatialIndex(stream, codec, waypoints, polygons,
fileName, imgId);
break;
case 19:
ds += readCamera(stream, waypoints, polygons);
break; break;
default: default:
ds += skipRecord(stream); ds += skipRecord(stream);
@ -261,52 +609,93 @@ static quint32 readSpatialIndex(QDataStream &stream, QTextCodec *codec,
return rs + rh.size; 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; RecordHeader rh;
quint32 ds, s1;
quint16 s2, s3;
quint8 rs;
QList<TranslatedString> obj; QList<TranslatedString> obj;
quint32 ds;
rs = readRecordHeader(stream, rh); readRecordHeader(stream, rh);
stream >> s1 >> s2 >> s3; ds = readTranslatedObjects(stream, codec, obj);
ds = 8; ds += readSpatialIndex(stream, codec, waypoints, polygons, fileName, imgId);
ds += readTranslatedObjects(stream, codec, obj); if (rh.flags & 0x8) {
ds += readTranslatedObjects(stream, codec, obj); while (stream.status() == QDataStream::Ok && ds < rh.size) {
switch(nextHeaderType(stream)) {
if (s1 & 0x10) { case 5: // symbol
quint8 ss1, ss2; case 7: // category
quint16 ss3; default:
stream >> ss1 >> ss2 >> ss3; ds += skipRecord(stream);
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;
} }
if (ds != rh.size) if (ds != rh.size)
stream.setStatus(QDataStream::ReadCorruptData); 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; RecordHeader rh;
quint32 ds, s7; quint32 ds, s7;
@ -326,10 +715,7 @@ bool GPIParser::readFileHeader(QDataStream &stream)
if (rh.flags & 8) if (rh.flags & 8)
ds += readFprsRecord(stream); ds += readFprsRecord(stream);
if (s8 & 0x4) { ebs = (s8 & 0x4) ? s9 * 8 + 8 : 0;
_errorString = "Encrypted GPI files not supported";
return false;
}
if (stream.status() != QDataStream::Ok || ds != rh.size) { if (stream.status() != QDataStream::Ok || ds != rh.size) {
_errorString = "Invalid file header"; _errorString = "Invalid file header";
@ -338,109 +724,26 @@ bool GPIParser::readFileHeader(QDataStream &stream)
return true; 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, bool GPIParser::parse(QFile *file, QList<TrackData> &tracks,
QList<RouteData> &routes, QList<Area> &polygons, QVector<Waypoint> &waypoints) QList<RouteData> &routes, QList<Area> &polygons, QVector<Waypoint> &waypoints)
{ {
Q_UNUSED(tracks); Q_UNUSED(tracks);
Q_UNUSED(routes); Q_UNUSED(routes);
Q_UNUSED(polygons);
QDataStream stream(file); QDataStream stream(file);
QTextCodec *codec = 0; QTextCodec *codec = 0;
quint32 ebs;
stream.setByteOrder(QDataStream::LittleEndian); stream.setByteOrder(QDataStream::LittleEndian);
if (!readFileHeader(stream) || !readGPIHeader(stream, codec)) if (!readFileHeader(stream, ebs) || !readGPIHeader(stream, &codec))
return false; return false;
if (!readData(stream, codec, waypoints)) { if (ebs) {
_errorString = "Invalid/corrupted GPI data"; CryptDevice dev(stream.device(), 0xf870b5, ebs);
return false; QDataStream cryptStream(&dev);
cryptStream.setByteOrder(QDataStream::LittleEndian);
return readData(cryptStream, codec, waypoints, polygons,
file->fileName());
} else } else
return true; return readData(stream, codec, waypoints, polygons, file->fileName());
} }

View File

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

View File

@ -69,8 +69,10 @@ Coordinates GPXParser::coordinates()
void GPXParser::rpExtension(SegmentData *autoRoute) void GPXParser::rpExtension(SegmentData *autoRoute)
{ {
while (_reader.readNextStartElement()) { while (_reader.readNextStartElement()) {
if (_reader.name() == QLatin1String("rpt")) if (_reader.name() == QLatin1String("rpt")) {
autoRoute->append(Trackpoint(coordinates())); if (autoRoute)
autoRoute->append(Trackpoint(coordinates()));
}
_reader.skipCurrentElement(); _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()) { while (_reader.readNextStartElement()) {
if (_reader.name() == QLatin1String("RoutePointExtension")) if (_reader.name() == QLatin1String("RoutePointExtension"))
rpExtension(autoRoute); rpExtension(autoRoute);
else if (_reader.name() == QLatin1String("WaypointExtension"))
wpExtension(waypoint);
else else
_reader.skipCurrentElement(); _reader.skipCurrentElement();
} }
@ -170,8 +206,8 @@ void GPXParser::waypointData(Waypoint &waypoint, SegmentData *autoRoute)
link10.setURL(_reader.readElementText()); link10.setURL(_reader.readElementText());
else if (_reader.name() == QLatin1String("urlname")) else if (_reader.name() == QLatin1String("urlname"))
link10.setText(_reader.readElementText()); link10.setText(_reader.readElementText());
else if (autoRoute && _reader.name() == QLatin1String("extensions")) else if (_reader.name() == QLatin1String("extensions"))
rteptExtensions(autoRoute); waypointExtensions(waypoint, autoRoute);
else else
_reader.skipCurrentElement(); _reader.skipCurrentElement();
} }

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

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

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

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

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

View File

@ -7,6 +7,7 @@ int Track::_heartRateWindow = 3;
int Track::_cadenceWindow = 3; int Track::_cadenceWindow = 3;
int Track::_powerWindow = 3; int Track::_powerWindow = 3;
bool Track::_automaticPause = true;
qreal Track::_pauseSpeed = 0.5; qreal Track::_pauseSpeed = 0.5;
int Track::_pauseInterval = 10; int Track::_pauseInterval = 10;
@ -14,6 +15,16 @@ bool Track::_outlierEliminate = true;
bool Track::_useReportedSpeed = false; 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) static qreal median(QVector<qreal> &v)
{ {
qSort(v.begin(), v.end()); 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++) for (int i = 0; i < v.size(); i++)
v[i] = qAbs(v.at(i) - m); v[i] = qAbs(v.at(i) - m);
qSort(v.begin(), v.end()); return median(v);
return v.at(v.size() / 2);
} }
static QSet<int> eliminate(const QVector<qreal> &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++) { for (int i = 0; i < _data.size(); i++) {
const SegmentData &sd = _data.at(i); const SegmentData &sd = _data.at(i);
_segments.append(Segment());
if (sd.isEmpty()) if (sd.isEmpty())
continue; continue;
// precompute distances, times, speeds and acceleration // precompute distances, times, speeds and acceleration
QVector<qreal> acceleration; QVector<qreal> acceleration;
_segments.append(Segment());
Segment &seg = _segments.last(); Segment &seg = _segments.last();
seg.distance.append(i ? _segments.at(i-1).distance.last() : 0); seg.distance.append(i && !_segments.at(i-1).distance.isEmpty()
seg.time.append(i ? _segments.at(i-1).time.last() : ? _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); sd.first().hasTimestamp() ? 0 : NAN);
seg.speed.append(sd.first().hasTimestamp() ? 0 : NAN); seg.speed.append(sd.first().hasTimestamp() ? 0 : NAN);
acceleration.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 // 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++) { for (int j = 1; j < seg.time.size(); j++) {
if (seg.time.at(j) > seg.time.at(j-1) + _pauseInterval if (seg.speed.at(j) > pauseSpeed)
&& seg.speed.at(j) < _pauseSpeed) { ss = -1;
_pause += seg.time.at(j) - seg.time.at(j-1); else if (ss < 0)
seg.stop.insert(j-1); ss = j-1;
seg.stop.insert(j);
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; continue;

View File

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

View File

@ -4,10 +4,12 @@
#include <QString> #include <QString>
#include <QDateTime> #include <QDateTime>
#include <QHash> #include <QHash>
#include <QVector>
#include <QDebug> #include <QDebug>
#include "common/coordinates.h" #include "common/coordinates.h"
#include "imageinfo.h" #include "imageinfo.h"
#include "link.h" #include "link.h"
#include "address.h"
class Waypoint class Waypoint
{ {
@ -19,7 +21,8 @@ public:
const Coordinates &coordinates() const {return _coordinates;} const Coordinates &coordinates() const {return _coordinates;}
const QString &name() const {return _name;} const QString &name() const {return _name;}
const QString &description() const {return _description;} 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 QVector<Link> &links() const {return _links;}
const QDateTime &timestamp() const {return _timestamp;} const QDateTime &timestamp() const {return _timestamp;}
qreal elevation() const {return _elevation;} qreal elevation() const {return _elevation;}
@ -29,9 +32,10 @@ public:
void setName(const QString &name) {_name = name;} void setName(const QString &name) {_name = name;}
void setDescription(const QString &description) void setDescription(const QString &description)
{_description = description;} {_description = description;}
void setAddress(const Address &address) {_address = address;}
void setTimestamp(const QDateTime &timestamp) {_timestamp = timestamp;} void setTimestamp(const QDateTime &timestamp) {_timestamp = timestamp;}
void setElevation(qreal elevation) {_elevation = elevation;} 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);} void addLink(const Link &link) {_links.append(link);}
bool hasElevation() const {return !std::isnan(_elevation);} bool hasElevation() const {return !std::isnan(_elevation);}
@ -44,7 +48,8 @@ private:
Coordinates _coordinates; Coordinates _coordinates;
QString _name; QString _name;
QString _description; QString _description;
ImageInfo _image; Address _address;
QVector<ImageInfo> _images;
QVector<Link> _links; QVector<Link> _links;
QDateTime _timestamp; QDateTime _timestamp;
qreal _elevation; 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 <QtEndian>
#include "common/programpaths.h"
#include "vectortile.h" #include "vectortile.h"
#include "img.h" #include "img.h"
#define CACHE_SIZE 8388608 /* 8MB */ typedef QMap<QByteArray, VectorTile*> TileMap;
static SubFile::Type tileType(const char str[3])
{
if (!memcmp(str, "TRE", 3))
return SubFile::TRE;
else if (!memcmp(str, "RGN", 3))
return SubFile::RGN;
else if (!memcmp(str, "LBL", 3))
return SubFile::LBL;
else if (!memcmp(str, "TYP", 3))
return SubFile::TYP;
else if (!memcmp(str, "GMP", 3))
return SubFile::GMP;
else if (!memcmp(str, "NET", 3))
return SubFile::NET;
else
return SubFile::Unknown;
}
IMG::IMG(const QString &fileName) : _file(fileName)
{
#define CHECK(condition) \ #define CHECK(condition) \
if (!(condition)) { \ if (!(condition)) { \
_errorString = "Unsupported or invalid IMG file"; \ _errorString = "Unsupported or invalid IMG file"; \
qDeleteAll(tileMap); \
return; \ return; \
} }
struct CTX TileMap tileMap;
{ QByteArray typFile;
CTX(const RectC &rect, int bits, QList<IMG::Poly> *polygons,
QList<IMG::Poly> *lines, QList<IMG::Point> *points)
: rect(rect), bits(bits), polygons(polygons), lines(lines),
points(points) {}
const RectC &rect;
int bits;
QList<IMG::Poly> *polygons;
QList<IMG::Poly> *lines;
QList<IMG::Point> *points;
};
IMG::IMG(const QString &fileName)
: _file(fileName), _typ(0), _style(0), _valid(false)
{
if (!_file.open(QFile::ReadOnly)) { if (!_file.open(QFile::ReadOnly)) {
_errorString = _file.errorString(); _errorString = _file.errorString();
return; return;
@ -50,10 +56,10 @@ IMG::IMG(const QString &fileName)
CHECK(_file.seek(0x49) && read(d1, sizeof(d1)) && _file.seek(0x61) CHECK(_file.seek(0x49) && read(d1, sizeof(d1)) && _file.seek(0x61)
&& readValue(e1) && readValue(e2) && _file.seek(0x65) && readValue(e1) && readValue(e2) && _file.seek(0x65)
&& read(d2, sizeof(d2))); && read(d2, sizeof(d2)));
QByteArray nba(QByteArray(d1, sizeof(d1)) + QByteArray(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); _blockSize = 1 << (e1 + e2);
_blockCache.setMaxCost(CACHE_SIZE / _blockSize);
// Read the FAT table // Read the FAT table
quint8 flag; quint8 flag;
@ -74,22 +80,18 @@ IMG::IMG(const QString &fileName)
offset += 512; offset += 512;
int cnt = (size - offset) / 512; int cnt = (size - offset) / 512;
QMap<QString, VectorTile*> tileMap;
QString typFile;
// Read FAT blocks describing the IMG sub-files // Read FAT blocks describing the IMG sub-files
for (int i = 0; i < cnt; i++) { for (int i = 0; i < cnt; i++) {
quint16 block; quint16 block;
CHECK(_file.seek(offset) && readValue(flag) && read(name, sizeof(name)) CHECK(_file.seek(offset) && readValue(flag) && read(name, sizeof(name))
&& read(type, sizeof(type)) && readValue(size) && readValue(part)); && read(type, sizeof(type)) && readValue(size) && readValue(part));
SubFile::Type tt = SubFile::type(type); SubFile::Type tt = tileType(type);
QString fn(QByteArray(name, sizeof(name))); QByteArray fn(name, sizeof(name));
if (SubFile::isTileFile(tt)) { if (VectorTile::isTileFile(tt)) {
VectorTile *tile; VectorTile *tile;
QMap<QString, VectorTile*>::iterator it = tileMap.find(fn); TileMap::const_iterator it = tileMap.find(fn);
if (it == tileMap.end()) { if (it == tileMap.constEnd()) {
tile = new VectorTile(); tile = new VectorTile();
tileMap.insert(fn, tile); tileMap.insert(fn, tile);
} else } else
@ -130,80 +132,31 @@ IMG::IMG(const QString &fileName)
} }
// Create tile tree // Create tile tree
for (QMap<QString, VectorTile*>::iterator it = tileMap.begin(); for (TileMap::const_iterator it = tileMap.constBegin();
it != tileMap.end(); ++it) { it != tileMap.constEnd(); ++it) {
CHECK((*it)->init()); VectorTile *tile = it.value();
if (!tile->init(false)) {
qWarning("%s: %s: Invalid map tile", qPrintable(_file.fileName()),
qPrintable(it.key()));
delete tile;
continue;
}
double min[2], max[2]; double min[2], max[2];
min[0] = (*it)->bounds().left(); min[0] = tile->bounds().left();
min[1] = (*it)->bounds().bottom(); min[1] = tile->bounds().bottom();
max[0] = (*it)->bounds().right(); max[0] = tile->bounds().right();
max[1] = (*it)->bounds().top(); max[1] = tile->bounds().top();
_tileTree.Insert(min, max, *it); _tileTree.Insert(min, max, tile);
_bounds |= (*it)->bounds(); _bounds |= tile->bounds();
} }
_valid = true; if (!_tileTree.Count())
} _errorString = "No usable map tile found";
else
IMG::~IMG() _valid = true;
{
TileTree::Iterator it;
for (_tileTree.GetFirst(it); !_tileTree.IsNull(it); _tileTree.GetNext(it))
delete _tileTree.GetAt(it);
delete _typ;
delete _style;
}
void IMG::load()
{
Q_ASSERT(!_style);
if (_typ)
_style = new Style(_typ);
else {
QFile typFile(ProgramPaths::typFile());
if (typFile.exists()) {
SubFile typ(&typFile);
_style = new Style(&typ);
} else
_style = new Style();
}
}
void IMG::clear()
{
TileTree::Iterator it;
for (_tileTree.GetFirst(it); !_tileTree.IsNull(it); _tileTree.GetNext(it))
_tileTree.GetAt(it)->clear();
delete _style;
_style = 0;
_blockCache.clear();
}
static bool cb(VectorTile *tile, void *context)
{
CTX *ctx = (CTX*)context;
tile->objects(ctx->rect, ctx->bits, ctx->polygons, ctx->lines, ctx->points);
return true;
}
void IMG::objects(const RectC &rect, int bits, QList<Poly> *polygons,
QList<Poly> *lines, QList<Point> *points)
{
CTX ctx(rect, bits, polygons, lines, points);
double min[2], max[2];
min[0] = rect.left();
min[1] = rect.bottom();
max[0] = rect.right();
max[1] = rect.top();
_tileTree.Search(min, max, cb, &ctx);
} }
qint64 IMG::read(char *data, qint64 maxSize) qint64 IMG::read(char *data, qint64 maxSize)
@ -227,33 +180,12 @@ template<class T> bool IMG::readValue(T &val)
return true; return true;
} }
bool IMG::readBlock(int blockNum, QByteArray &data) bool IMG::readBlock(int blockNum, char *data)
{ {
QByteArray *block = _blockCache[blockNum]; if (!_file.seek((qint64)blockNum * (qint64)_blockSize))
if (!block) { return false;
if (!_file.seek((qint64)blockNum * (qint64)_blockSize)) if (read(data, _blockSize) < _blockSize)
return false; return false;
data.resize(_blockSize);
if (read(data.data(), _blockSize) < _blockSize)
return false;
_blockCache.insert(blockNum, new QByteArray(data));
} else
data = *block;
return true; return true;
} }
#ifndef QT_NO_DEBUG
QDebug operator<<(QDebug dbg, const IMG::Point &point)
{
dbg.nospace() << "Point(" << hex << point.type << ", " << point.label
<< ", " << point.poi << ")";
return dbg.space();
}
QDebug operator<<(QDebug dbg, const IMG::Poly &poly)
{
dbg.nospace() << "Poly(" << hex << poly.type << ", " << poly.label << ")";
return dbg.space();
}
#endif // QT_NO_DEBUG

View File

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

View File

@ -50,17 +50,16 @@ static QString capitalize(const QString &str)
} }
bool LBLFile::init() bool LBLFile::init(Handle &hdl)
{ {
Handle hdl;
quint16 codepage; quint16 codepage;
quint8 multiplier, poiMultiplier; quint8 multiplier, poiMultiplier;
if (!(seek(hdl, _gmpOffset + 0x15) && readUInt32(hdl, _offset) if (!(seek(hdl, _gmpOffset + 0x15) && readUInt32(hdl, _offset)
&& readUInt32(hdl, _size) && readByte(hdl, multiplier) && readUInt32(hdl, _size) && readUInt8(hdl, multiplier)
&& readByte(hdl, _encoding) && seek(hdl, _gmpOffset + 0x57) && readUInt8(hdl, _encoding) && seek(hdl, _gmpOffset + 0x57)
&& readUInt32(hdl, _poiOffset) && readUInt32(hdl, _poiSize) && readUInt32(hdl, _poiOffset) && readUInt32(hdl, _poiSize)
&& readByte(hdl, poiMultiplier) && seek(hdl, _gmpOffset + 0xAA) && readUInt8(hdl, poiMultiplier) && seek(hdl, _gmpOffset + 0xAA)
&& readUInt16(hdl, codepage))) && readUInt16(hdl, codepage)))
return false; return false;
@ -90,7 +89,7 @@ Label LBLFile::label6b(Handle &hdl, quint32 offset) const
return Label(); return Label();
while (true) { while (true) {
if (!(readByte(hdl, b1) && readByte(hdl, b2) && readByte(hdl, b3))) if (!(readUInt8(hdl, b1) && readUInt8(hdl, b2) && readUInt8(hdl, b3)))
return Label(); return Label();
int c[]= {b1>>2, (b1&0x3)<<4|b2>>4, (b2&0xF)<<2|b3>>6, b3&0x3F}; int c[]= {b1>>2, (b1&0x3)<<4|b2>>4, (b2&0xF)<<2|b3>>6, b3&0x3F};
@ -139,7 +138,7 @@ Label LBLFile::label8b(Handle &hdl, quint32 offset) const
return Label(); return Label();
while (true) { while (true) {
if (!readByte(hdl, c)) if (!readUInt8(hdl, c))
return Label(); return Label();
if (!c || c == 0x1d) if (!c || c == 0x1d)
break; break;
@ -165,7 +164,7 @@ Label LBLFile::label8b(Handle &hdl, quint32 offset) const
Label LBLFile::label(Handle &hdl, quint32 offset, bool poi) Label LBLFile::label(Handle &hdl, quint32 offset, bool poi)
{ {
if (!_multiplier && !init()) if (!_multiplier && !init(hdl))
return QString(); return QString();
quint32 labelOffset; quint32 labelOffset;

View File

@ -12,6 +12,9 @@ public:
LBLFile(IMG *img) LBLFile(IMG *img)
: SubFile(img), _codec(0), _offset(0), _size(0), _poiOffset(0), : SubFile(img), _codec(0), _offset(0), _size(0), _poiOffset(0),
_poiSize(0), _poiMultiplier(0), _multiplier(0), _encoding(0) {} _poiSize(0), _poiMultiplier(0), _multiplier(0), _encoding(0) {}
LBLFile(const QString &path)
: SubFile(path), _codec(0), _offset(0), _size(0), _poiOffset(0),
_poiSize(0), _poiMultiplier(0), _multiplier(0), _encoding(0) {}
LBLFile(SubFile *gmp, quint32 offset) : SubFile(gmp, offset), LBLFile(SubFile *gmp, quint32 offset) : SubFile(gmp, offset),
_codec(0), _offset(0), _size(0), _poiOffset(0), _poiSize(0), _codec(0), _offset(0), _size(0), _poiOffset(0), _poiSize(0),
_poiMultiplier(0), _multiplier(0), _encoding(0) {} _poiMultiplier(0), _multiplier(0), _encoding(0) {}
@ -19,7 +22,7 @@ public:
Label label(Handle &hdl, quint32 offset, bool poi = false); Label label(Handle &hdl, quint32 offset, bool poi = false);
private: private:
bool init(); bool init(Handle &hdl);
Label label6b(Handle &hdl, quint32 offset) const; Label label6b(Handle &hdl, quint32 offset) const;
Label label8b(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" #include "netfile.h"
bool NETFile::init() bool NETFile::init(Handle &hdl)
{ {
Handle hdl;
quint8 multiplier; quint8 multiplier;
quint16 hdrLen;
if (!(seek(hdl, _gmpOffset + 0x15) && readUInt32(hdl, _offset) if (!(seek(hdl, _gmpOffset) && readUInt16(hdl, hdrLen)
&& readUInt32(hdl, _size) && readByte(hdl, multiplier))) && seek(hdl, _gmpOffset + 0x15) && readUInt32(hdl, _offset)
&& readUInt32(hdl, _size) && readUInt8(hdl, multiplier)))
return false; return false;
_multiplier = 1<<multiplier; _multiplier = 1<<multiplier;
@ -16,7 +17,7 @@ bool NETFile::init()
bool NETFile::lblOffset(Handle &hdl, quint32 netOffset, quint32 &lblOffset) bool NETFile::lblOffset(Handle &hdl, quint32 netOffset, quint32 &lblOffset)
{ {
if (!_multiplier && !init()) if (!_multiplier && !init(hdl))
return false; return false;
if (!(seek(hdl, _offset + netOffset * _multiplier) if (!(seek(hdl, _offset + netOffset * _multiplier)

View File

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

View File

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

View File

@ -4,6 +4,7 @@
#include "img.h" #include "img.h"
#include "subfile.h" #include "subfile.h"
#include "subdiv.h" #include "subdiv.h"
#include "huffmantable.h"
class LBLFile; class LBLFile;
class NETFile; class NETFile;
@ -11,121 +12,67 @@ class NETFile;
class RGNFile : public SubFile class RGNFile : public SubFile
{ {
public: public:
enum SegmentType {
Point = 0x1,
IndexedPoint = 0x2,
Line = 0x4,
Polygon = 0x8,
RoadReference = 0x10
};
RGNFile(IMG *img) RGNFile(IMG *img)
: SubFile(img), _offset(0), _size(0), _polygonsOffset(0), : SubFile(img), _offset(0), _size(0), _polygonsOffset(0),
_polygonsSize(0), _linesOffset(0), _linesSize(0), _pointsOffset(0), _polygonsSize(0), _linesOffset(0), _linesSize(0), _pointsOffset(0),
_pointsSize(0), _init(false) {} _pointsSize(0), _init(false) {clearFlags();}
RGNFile(const QString &path)
: SubFile(path), _offset(0), _size(0), _polygonsOffset(0),
_polygonsSize(0), _linesOffset(0), _linesSize(0), _pointsOffset(0),
_pointsSize(0), _init(false) {clearFlags();}
RGNFile(SubFile *gmp, quint32 offset) : SubFile(gmp, offset), _offset(0), RGNFile(SubFile *gmp, quint32 offset) : SubFile(gmp, offset), _offset(0),
_size(0), _polygonsOffset(0), _polygonsSize(0), _linesOffset(0), _size(0), _polygonsOffset(0), _polygonsSize(0), _linesOffset(0),
_linesSize(0), _pointsOffset(0), _pointsSize(0), _init(false) {} _linesSize(0), _pointsOffset(0), _pointsSize(0), _init(false)
{clearFlags();}
void objects(const RectC &rect, const SubDiv *subdiv, LBLFile *lbl, bool initialized() const {return _init;}
NETFile *net, QList<IMG::Poly> *polygons, QList<IMG::Poly> *lines, bool init(Handle &hdl);
QList<IMG::Point> *points);
void extObjects(const RectC &rect, const SubDiv *subdiv, LBLFile *lbl, bool polyObjects(Handle &hdl, const SubDiv *subdiv, SegmentType segmentType,
QList<IMG::Poly> *polygons, QList<IMG::Poly> *lines, LBLFile *lbl, Handle &lblHdl, NETFile *net, Handle &netHdl,
QList<IMG::Point> *points); 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: private:
class Segment { QMap<SegmentType, SubDiv::Segment> segments(Handle &hdl, SubDiv *subdiv)
public: const;
enum Type { void clearFlags();
Point = 0x10, bool skipClassFields(Handle &hdl) const;
IndexedPoint = 0x20, bool skipLclFields(Handle &hdl, const quint32 flags[3], SegmentType type)
Line = 0x40, const;
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);
quint32 _offset; quint32 _offset;
quint32 _size; quint32 _size;
quint32 _polygonsOffset; quint32 _polygonsOffset;
quint32 _polygonsSize; quint32 _polygonsSize;
quint32 _polygonsFlags[3];
quint32 _linesOffset; quint32 _linesOffset;
quint32 _linesSize; quint32 _linesSize;
quint32 _linesFlags[3];
quint32 _pointsOffset; quint32 _pointsOffset;
quint32 _pointsSize; quint32 _pointsSize;
quint32 _pointsFlags[3];
HuffmanTable _huffmanTable;
bool _init; bool _init;
}; };
#ifndef QT_NO_DEBUG
QDebug operator<<(QDebug dbg, const RGNFile::Segment &segment);
#endif // QT_NO_DEBUG
#endif // RGNFILE_H #endif // RGNFILE_H

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,9 +1,9 @@
#include "common/garmin.h"
#include "subdiv.h" #include "subdiv.h"
#include "units.h"
#include "trefile.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[] = { static const unsigned char shuf[] = {
0xb, 0xc, 0xa, 0x0, 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]; int sum = shuf[((key >> 24) + (key >> 16) + (key >> 8) + key) & 0xf];
for (quint32 i = 0, ringctr = 16; i < size; i++) { for (quint32 i = 0, ringctr = 16; i < size; i++) {
quint32 upper = src[i] >> 4; quint32 upper = data[i] >> 4;
quint32 lower = src[i]; quint32 lower = data[i];
upper -= sum; upper -= sum;
upper -= key >> ringctr; upper -= key >> ringctr;
@ -28,7 +28,7 @@ static void unlock(quint8 *dst, const quint8 *src, quint32 size, quint32 key)
lower -= shuf[(key >> ringctr) & 0xf]; lower -= shuf[(key >> ringctr) & 0xf];
ringctr = ringctr ? ringctr - 4 : 16; 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(); clear();
} }
bool TREFile::init() bool TREFile::init(bool baseMap)
{ {
Handle hdl; Handle hdl(this);
quint8 locked; quint8 locked;
quint16 hdrLen; quint16 hdrLen;
if (!(seek(hdl, _gmpOffset) && readUInt16(hdl, hdrLen) if (!(seek(hdl, _gmpOffset) && readUInt16(hdl, hdrLen)
&& seek(hdl, _gmpOffset + 0x0D) && readByte(hdl, locked))) && seek(hdl, _gmpOffset + 0x0D) && readUInt8(hdl, locked)))
return false; return false;
// Tile bounds // Tile bounds
@ -52,8 +52,8 @@ bool TREFile::init()
if (!(seek(hdl, _gmpOffset + 0x15) && readInt24(hdl, north) if (!(seek(hdl, _gmpOffset + 0x15) && readInt24(hdl, north)
&& readInt24(hdl, east) && readInt24(hdl, south) && readInt24(hdl, west))) && readInt24(hdl, east) && readInt24(hdl, south) && readInt24(hdl, west)))
return false; return false;
_bounds = RectC(Coordinates(toWGS84(west), toWGS84(north)), _bounds = RectC(Coordinates(toWGS24(west), toWGS24(north)),
Coordinates(toWGS84(east), toWGS84(south))); Coordinates(toWGS24(east), toWGS24(south)));
// Levels & subdivs info // Levels & subdivs info
quint32 levelsOffset, levelsSize, subdivSize; quint32 levelsOffset, levelsSize, subdivSize;
@ -62,12 +62,15 @@ bool TREFile::init()
&& readUInt32(hdl, subdivSize))) && readUInt32(hdl, subdivSize)))
return false; return false;
// TRE7 info
if (hdrLen > 0x9A) { if (hdrLen > 0x9A) {
// TRE7 info
if (!(seek(hdl, _gmpOffset + 0x7C) && readUInt32(hdl, _extended.offset) if (!(seek(hdl, _gmpOffset + 0x7C) && readUInt32(hdl, _extended.offset)
&& readUInt32(hdl, _extended.size) && readUInt32(hdl, _extended.size)
&& readUInt16(hdl, _extended.itemSize))) && readUInt16(hdl, _extended.itemSize)))
return false; return false;
// flags
if (!(seek(hdl, _gmpOffset + 0x86) && readUInt32(hdl, _flags)))
return false;
} }
// Tile levels // Tile levels
@ -75,15 +78,13 @@ bool TREFile::init()
return false; return false;
quint8 levels[64]; quint8 levels[64];
for (quint32 i = 0; i < levelsSize; i++) for (quint32 i = 0; i < levelsSize; i++)
if (!readByte(hdl, levels[i])) if (!readUInt8(hdl, levels[i]))
return false; return false;
if (locked) { if (locked) {
quint32 key; quint32 key;
quint8 unlocked[64];
if (!seek(hdl, _gmpOffset + 0xAA) || !readUInt32(hdl, key)) if (!seek(hdl, _gmpOffset + 0xAA) || !readUInt32(hdl, key))
return false; return false;
unlock(unlocked, levels, levelsSize, key); demangle(levels, levelsSize, key);
memcpy(levels, unlocked, levelsSize);
} }
quint32 levelsCount = levelsSize / 4; quint32 levelsCount = levelsSize / 4;
@ -107,12 +108,14 @@ bool TREFile::init()
} }
} }
_isBaseMap = baseMap;
return (_firstLevel >= 0); return (_firstLevel >= 0);
} }
bool TREFile::load(int idx) bool TREFile::load(int idx)
{ {
Handle hdl; Handle hdl(this);
QList<SubDiv*> sl; QList<SubDiv*> sl;
SubDiv *s = 0; SubDiv *s = 0;
SubDivTree *tree = new SubDivTree(); SubDivTree *tree = new SubDivTree();
@ -128,15 +131,16 @@ bool TREFile::load(int idx)
return false; return false;
for (int j = 0; j < _levels.at(idx).subdivs; j++) { for (int j = 0; j < _levels.at(idx).subdivs; j++) {
quint32 offset; quint32 oo;
qint32 lon, lat; qint32 lon, lat;
quint8 objects;
quint16 width, height, nextLevel; quint16 width, height, nextLevel;
if (!(readUInt24(hdl, offset) && readByte(hdl, objects) if (!(readUInt32(hdl, oo) && readInt24(hdl, lon) && readInt24(hdl, lat)
&& readInt24(hdl, lon) && readInt24(hdl, lat)
&& readUInt16(hdl, width) && readUInt16(hdl, height))) && readUInt16(hdl, width) && readUInt16(hdl, height)))
goto error; goto error;
quint32 offset = oo & 0xfffffff;
quint8 objects = (((qint16)height < 0) << 4) | (oo >> 0x1c);
if (idx != _levels.size() - 1) if (idx != _levels.size() - 1)
if (!readUInt16(hdl, nextLevel)) if (!readUInt16(hdl, nextLevel))
goto error; goto error;
@ -148,13 +152,14 @@ bool TREFile::load(int idx)
width <<= (24 - _levels.at(idx).bits); width <<= (24 - _levels.at(idx).bits);
height <<= (24 - _levels.at(idx).bits); height <<= (24 - _levels.at(idx).bits);
s = new SubDiv(offset, lon, lat, _levels.at(idx).bits, objects); s = new SubDiv(offset, lon, lat, _levels.at(idx).bits, objects);
sl.append(s); sl.append(s);
double min[2], max[2]; double min[2], max[2];
RectC bounds(Coordinates(toWGS84(lon - width), RectC bounds(Coordinates(toWGS24(lon - width),
toWGS84(lat + height + 1)), Coordinates(toWGS84(lon + width + 1), toWGS24(lat + height + 1)), Coordinates(toWGS24(lon + width + 1),
toWGS84(lat - height))); toWGS24(lat - height)));
min[0] = bounds.left(); min[0] = bounds.left();
min[1] = bounds.bottom(); min[1] = bounds.bottom();
@ -196,7 +201,7 @@ bool TREFile::load(int idx)
if (i) if (i)
sl.at(i-1)->setExtEnds(polygons, lines, points); sl.at(i-1)->setExtEnds(polygons, lines, points);
if (!seek(hdl, hdl.pos + _extended.itemSize - 12)) if (!seek(hdl, hdl.pos() + _extended.itemSize - 12))
goto error; goto error;
} }
@ -233,10 +238,17 @@ void TREFile::clear()
_subdivs.clear(); _subdivs.clear();
} }
int TREFile::level(int bits) int TREFile::level(int bits, bool baseMap)
{ {
int idx = _firstLevel; int idx = _firstLevel;
if (baseMap) {
if (!_isBaseMap && _levels.at(idx).bits > bits)
return -1;
if (_isBaseMap && bits > _levels.last().bits)
return -1;
}
for (int i = idx + 1; i < _levels.size(); i++) { for (int i = idx + 1; i < _levels.size(); i++) {
if (_levels.at(i).bits > bits) if (_levels.at(i).bits > bits)
break; break;
@ -256,10 +268,10 @@ static bool cb(SubDiv *subdiv, void *context)
return true; return true;
} }
QList<SubDiv*> TREFile::subdivs(const RectC &rect, int bits) QList<SubDiv*> TREFile::subdivs(const RectC &rect, int bits, bool baseMap)
{ {
QList<SubDiv*> list; QList<SubDiv*> list;
SubDivTree *tree = _subdivs.value(level(bits)); SubDivTree *tree = _subdivs.value(level(bits, baseMap));
double min[2], max[2]; double min[2], max[2];
min[0] = rect.left(); min[0] = rect.left();

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

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