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

Compare commits

..

234 Commits
9.0 ... 9.6

Author SHA1 Message Date
0c434106af Merge remote-tracking branch 'weblate/master' 2021-09-04 10:03:35 +02:00
b938e24d65 Do not check for insane numbers of DEM tiles 2021-09-04 10:02:24 +02:00
1d65e32335 Translated using Weblate (Esperanto)
Currently translated at 94.9% (395 of 416 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/eo/
2021-09-03 11:37:11 +02:00
6be33a1fc1 Translated using Weblate (Russian)
Currently translated at 100.0% (416 of 416 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/ru/
2021-09-03 11:37:11 +02:00
660fdde8c2 Translated using Weblate (Finnish)
Currently translated at 98.5% (410 of 416 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/fi/
2021-09-03 11:37:11 +02:00
d50ab8607e Added some more shortcuts 2021-09-02 12:55:32 +02:00
3709a3feb5 Do not show the "Print" button in the toolbar on OS X
(As we are using buttons with text on OS X, the space is very limited)
2021-09-02 12:47:29 +02:00
a073c93e0d Removed debug stuff 2021-09-02 12:30:07 +02:00
f934df59e4 Some more options dialog polishing on OS X 2021-09-02 12:27:20 +02:00
394fcf6d4d Merge remote-tracking branch 'weblate/master' 2021-09-02 04:18:35 +02:00
0e1584ea24 Translated using Weblate (German)
Currently translated at 100.0% (416 of 416 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/de/
2021-09-02 04:17:13 +02:00
c592be7cfd Use the static exists() functions that are faster according to the docs 2021-09-01 20:14:06 +02:00
c84d7871fb Merge remote-tracking branch 'weblate/master' 2021-09-01 13:27:51 +02:00
34669b68f5 Code cleanup 2021-09-01 13:27:30 +02:00
849eaa57cc Merge branch 'origin/master' into Weblate. 2021-09-01 13:11:29 +02:00
7f6ac2e4c3 Improved DEM downloads handling logic 2021-09-01 13:08:34 +02:00
5407fe35e6 Merge branch 'origin/master' into Weblate. 2021-08-31 23:40:53 +02:00
133aac3bd4 Windows/Linux optionsdialog polishing 2021-08-31 22:55:32 +02:00
a5cd05233c Merge branch 'origin/master' into Weblate. 2021-08-31 18:45:31 +02:00
22b691252f Fixed widget margins 2021-08-31 18:43:55 +02:00
988ea7d952 Czech translation update 2021-08-31 18:43:32 +02:00
c253669017 Merge branch 'origin/master' into Weblate. 2021-08-31 18:28:00 +02:00
37d8aadfed Translated using Weblate (Hungarian)
Currently translated at 100.0% (417 of 417 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/hu/
2021-08-31 18:27:59 +02:00
ae204e9ddf Translated using Weblate (Turkish)
Currently translated at 100.0% (417 of 417 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/tr/
2021-08-31 18:27:59 +02:00
07410ad7d5 Translated using Weblate (Russian)
Currently translated at 98.8% (412 of 417 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/ru/
2021-08-31 18:27:59 +02:00
98b56485bd Localization update 2021-08-31 18:27:42 +02:00
302fe4d8e1 Improved Options UI on OS X 2021-08-31 18:25:30 +02:00
045dab6cdd Silenced QT6 warning 2021-08-31 18:23:10 +02:00
da522cd2ba Use the latest OS X image 2021-08-31 18:10:26 +02:00
38322f09a6 Translated using Weblate (Swedish)
Currently translated at 100.0% (417 of 417 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/sv/
2021-08-31 07:28:09 +02:00
7803340c0e Localization update 2021-08-30 20:33:39 +02:00
2232b011a1 Added support for downloading DEM tiles 2021-08-30 20:31:33 +02:00
94a0158243 Properly handle connection timeouts
(count timeout from last received data chunk, not for the whole download)
2021-08-29 20:28:08 +02:00
018d0ba085 Redesigned HTTP downloader
- Save the data as they come rather than at once
- + some related refactoring
2021-08-26 22:22:18 +02:00
d5a472ddc0 Cosmetics 2021-08-25 00:34:31 +02:00
09a6d8655e Code cleanup 2021-08-23 22:27:36 +02:00
1d2b93466f Fixed shifted file association 2021-08-22 19:07:38 +02:00
9979a8b233 Added ONmove OMD/GHP support info 2021-08-22 17:29:42 +02:00
ef6f3a0516 Translated using Weblate (Ukrainian)
Currently translated at 95.3% (388 of 407 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/uk/
2021-08-22 16:58:45 +02:00
4f81e120b7 Translated using Weblate (German)
Currently translated at 100.0% (407 of 407 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/de/
2021-08-22 16:58:45 +02:00
ed68cbd891 Translated using Weblate (Czech)
Currently translated at 100.0% (407 of 407 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/cs/
2021-08-22 15:24:16 +02:00
a4c7449772 Translated using Weblate (Esperanto)
Currently translated at 95.5% (389 of 407 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/eo/
2021-08-21 17:35:10 +02:00
60d82c9b7b Translated using Weblate (Russian)
Currently translated at 100.0% (407 of 407 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/ru/
2021-08-21 17:35:09 +02:00
fe288a4fea Translated using Weblate (Finnish)
Currently translated at 99.2% (404 of 407 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/fi/
2021-08-21 17:35:09 +02:00
9f95ded407 Translated using Weblate (Hungarian)
Currently translated at 100.0% (407 of 407 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/hu/
2021-08-21 10:35:40 +02:00
1241b71475 Translated using Weblate (Turkish)
Currently translated at 100.0% (407 of 407 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/tr/
2021-08-21 10:35:40 +02:00
48a7ecb83e Translated using Weblate (Swedish)
Currently translated at 100.0% (407 of 407 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/sv/
2021-08-21 10:35:40 +02:00
62a60723be Added GHP OS X desktop integration 2021-08-19 23:41:01 +02:00
b7ee1ac660 Localization update 2021-08-19 19:47:26 +02:00
9f6ced0342 Added GHP Linux & Windows desktop integration 2021-08-19 19:45:53 +02:00
814eceb82c Added support for ONmove 7xx series GHP files 2021-08-19 19:35:26 +02:00
445598cd52 Localization update 2021-08-19 00:01:29 +02:00
eab43332ee Version++ 2021-08-18 23:30:38 +02:00
94571ccfc6 OMD OS X desktop integration 2021-08-18 23:28:11 +02:00
accea5d9da OMD Windows & Linux desktop integration 2021-08-18 22:30:02 +02:00
8d8a31eef9 Cosmetics 2021-08-18 21:33:07 +02:00
221d1b3fdb Added support for OnMove OMD files 2021-08-18 21:29:28 +02:00
ab062cc3ff Improved handling of labels with separators 2021-08-16 09:00:36 +02:00
78e8b03d66 Code cleanup 2021-08-10 20:44:16 +02:00
82d2ac0871 Fixed layout centering 2021-08-08 11:07:53 +02:00
0b3e35db72 Fixed some possible corner case 2021-08-05 00:02:47 +02:00
0c4e5b0017 A more human yaml syntax 2021-08-04 23:51:24 +02:00
933f2c3837 Rotate JPEG thumbnails acording to EXIF data
fixes #385
2021-08-04 08:57:42 +02:00
6e4cc406ab Version++ 2021-07-31 08:25:30 +02:00
21ce65146a Cache homebrew packages between builds 2021-07-30 23:41:50 +02:00
c99adfd6d2 Use the apt addon instead of manual packages install 2021-07-30 08:56:49 +02:00
c537f1ba6c Use travis-ci homebrew addon instead of manual package installation 2021-07-30 08:44:18 +02:00
4e36d8633c Translated using Weblate (Turkish)
Currently translated at 100.0% (406 of 406 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/tr/
2021-07-29 23:00:36 +02:00
8beeeb7526 Merge branch 'origin/master' into Weblate. 2021-07-27 21:54:33 +02:00
69cc6ccb75 Render symbols/labels for not rendered areas 2021-07-27 21:53:24 +02:00
f042f11eed Fixed rule evaluation logic 2021-07-27 21:52:37 +02:00
f72835f05e Translated using Weblate (Finnish)
Currently translated at 99.2% (403 of 406 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/fi/
2021-07-24 20:18:47 +02:00
c8779b4592 Translated using Weblate (Esperanto)
Currently translated at 95.5% (388 of 406 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/eo/
2021-07-24 20:18:47 +02:00
4b30e665cc Translated using Weblate (Russian)
Currently translated at 100.0% (406 of 406 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/ru/
2021-07-24 20:18:47 +02:00
ac45ccaab6 Translated using Weblate (Ukrainian)
Currently translated at 95.3% (387 of 406 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/uk/
2021-07-24 20:18:46 +02:00
6d2182eb46 Translated using Weblate (French)
Currently translated at 100.0% (406 of 406 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/fr/
2021-07-24 07:30:18 +02:00
50aea76bf7 Merge branch 'origin/master' into Weblate. 2021-07-22 00:34:45 +02:00
7676a21fc3 Some more file open logic fix/improvement 2021-07-22 00:32:36 +02:00
dc6a57338e Code cleanup 2021-07-22 00:31:57 +02:00
fa3fac5314 Merge branch 'origin/master' into Weblate. 2021-07-21 02:07:49 +02:00
a53fedf838 Yet another unnecessary file open remove 2021-07-21 02:06:35 +02:00
4d284ad0e5 Merge branch 'origin/master' into Weblate. 2021-07-19 22:52:50 +02:00
3f3ccb6856 Cache the open file descriptors between successive raster loads 2021-07-19 22:51:00 +02:00
2ea16eaaab Do not open/close the data files when not accessing them 2021-07-19 22:47:44 +02:00
effb0bb654 Translated using Weblate (Russian)
Currently translated at 99.5% (404 of 406 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/ru/
2021-07-19 08:46:45 +02:00
8bd08b31a3 Give the flags human readable names 2021-07-18 22:32:49 +02:00
7a9d941e60 German translation 2021-07-16 21:35:58 +02:00
5c341c8339 Updated Czech translation 2021-07-16 21:08:03 +02:00
abddd8f9f1 Merge branch 'origin/master' into Weblate. 2021-07-13 19:58:30 +02:00
29f9fb7a68 Some more error checking 2021-07-13 19:58:12 +02:00
1387e9f12e Merge branch 'origin/master' into Weblate. 2021-07-13 19:43:50 +02:00
b04ac5fae3 Some more style error checks 2021-07-13 19:43:29 +02:00
9754e52f2d Merge branch 'origin/master' into Weblate. 2021-07-13 17:33:10 +02:00
ced95a9b3d Translated using Weblate (Hungarian)
Currently translated at 100.0% (406 of 406 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/hu/
2021-07-13 17:33:10 +02:00
c5e1872c2e Fixed "float font sizes causing crash on style load" issue 2021-07-13 17:31:37 +02:00
52a88d39df Merge branch 'origin/master' into Weblate. 2021-07-13 08:53:18 +02:00
199806a107 Change the open path on options change 2021-07-13 08:52:41 +02:00
50dfa34dbc Merge branch 'origin/master' into Weblate. 2021-07-12 20:25:26 +02:00
eaaa1b0506 Translated using Weblate (Norwegian Bokmål)
Currently translated at 96.7% (393 of 406 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/nb_NO/
2021-07-12 20:25:26 +02:00
15f194a848 Version++ 2021-07-12 20:25:06 +02:00
56e60e32a7 Translated using Weblate (Swedish)
Currently translated at 100.0% (406 of 406 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/sv/
2021-07-12 13:43:31 +02:00
762180542f Merge branch 'origin/master' into Weblate. 2021-07-12 12:09:03 +02:00
e48c5bf740 Localization update 2021-07-12 12:08:56 +02:00
b36aa057e8 Added missing placeholder text 2021-07-12 12:07:09 +02:00
62d37df40c Merge branch 'origin/master' into Weblate. 2021-07-12 11:50:04 +02:00
d51b16b398 Added missing class forward declarations 2021-07-12 11:49:36 +02:00
6234216862 Merge branch 'origin/master' into Weblate. 2021-07-12 00:21:53 +02:00
5b3b7128f6 Added initial open file paths configuration 2021-07-12 00:21:21 +02:00
f1dd54457d Merge branch 'origin/master' into Weblate. 2021-07-11 12:55:10 +02:00
3644ed3b1f Do not count errored maps as areas 2021-07-11 12:54:45 +02:00
655d4ea362 Merge branch 'origin/master' into Weblate. 2021-07-09 07:57:21 +02:00
3d7e64a470 Removed the artificial POI zoom level limits 2021-07-09 07:56:35 +02:00
c667972498 Translated using Weblate (Finnish)
Currently translated at 99.7% (398 of 399 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/fi/
2021-07-04 22:33:33 +02:00
34e3e04e03 Improved error handling/reporting.
+ refactoring
2021-07-01 22:18:45 +02:00
f4d0c7f032 Remove all the remaining obscure micro-optimizations 2021-07-01 08:54:48 +02:00
f77e428eeb Added world files support info 2021-06-30 08:11:01 +02:00
0935ce45b6 Localization update/fix 2021-06-29 23:11:56 +02:00
442fc24776 Merge branch 'origin/master' into Weblate. 2021-06-29 21:34:57 +02:00
2f6556dbb3 Remove the forced combobox style causing huge performance drawback 2021-06-29 21:34:00 +02:00
a54bfbadab Merge branch 'origin/master' into Weblate. 2021-06-29 21:33:12 +02:00
e9220d5526 Worldfiles OS X desktop integration 2021-06-29 21:32:27 +02:00
e90959ff34 Translated using Weblate (Polish)
Currently translated at 100.0% (399 of 399 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/pl/
2021-06-29 13:33:17 +02:00
17ed28ebf7 Cosmetics 2021-06-28 23:48:02 +02:00
e9cd0963dc Finalize the projection combo box redesign 2021-06-28 23:47:20 +02:00
fa0f7f95d2 Improve map projections combo box creation time
(but make the combo box less user-friendly)
2021-06-27 22:19:19 +02:00
0dcfeeead1 Fixed error handling 2021-06-27 21:27:02 +02:00
af9ba34521 WLD files windows integration 2021-06-27 20:57:54 +02:00
8e26ed5a50 wld files association (linux) 2021-06-27 17:30:18 +02:00
141f88e46e Merge branch 'origin/master' into Weblate. 2021-06-27 16:36:05 +02:00
c84b677938 Czech translation update 2021-06-27 16:36:21 +02:00
31bd85bcc8 Version++ 2021-06-27 16:24:40 +02:00
c0c7e9046a Code cleanup 2021-06-27 16:00:27 +02:00
f5ea667f34 Improved error handling 2021-06-27 16:00:08 +02:00
04b8d015cc Merge branch 'origin/master' into Weblate. 2021-06-27 16:00:06 +02:00
3db2828874 Translated using Weblate (Polish)
Currently translated at 99.4% (397 of 399 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/pl/
2021-06-25 00:09:57 +02:00
1a3660ba2f Cosmetics 2021-06-22 07:42:48 +02:00
a8b76f350d Merge branch 'origin/master' into Weblate. 2021-06-22 07:42:37 +02:00
e49351a7c9 Merge branch 'origin/master' into Weblate. 2021-06-21 23:35:43 +02:00
057c625283 Improve WKT parsing compatability 2021-06-21 23:35:31 +02:00
47d9eea1af Use propper basename in extension replace 2021-06-21 23:34:29 +02:00
c60aa8876b Translated using Weblate (Hungarian)
Currently translated at 100.0% (399 of 399 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/hu/
2021-06-19 12:32:46 +02:00
31db5f2140 Translated using Weblate (Russian)
Currently translated at 100.0% (399 of 399 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/ru/
2021-06-19 12:32:46 +02:00
9ff94f3b24 Translated using Weblate (Finnish)
Currently translated at 98.4% (393 of 399 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/fi/
2021-06-19 12:32:46 +02:00
334e0c3b37 Translated using Weblate (Swedish)
Currently translated at 100.0% (399 of 399 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/sv/
2021-06-18 07:40:13 +02:00
3244dd675d Fixed QT6 build 2021-06-17 22:40:37 +02:00
6f093b2148 Localization update 2021-06-17 22:15:13 +02:00
319f1180f1 Cosmetics 2021-06-17 22:13:31 +02:00
ec5a1c7851 Added support for world file maps 2021-06-17 21:58:25 +02:00
4ada19b4bf Reverted all the crazy changes done by user "caspertone2003" using weblate 2021-06-07 00:39:34 +02:00
1777e708d3 Translated using Weblate (Spanish)
Currently translated at 100.0% (398 of 398 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/es/
2021-06-07 00:31:02 +02:00
fd590c83d1 Merge branch 'origin/master' into Weblate. 2021-06-06 16:56:54 +02:00
811d41c26f Always check whether the file is at the end 2021-06-06 16:56:26 +02:00
8887e5d7a7 Merge branch 'origin/master' into Weblate. 2021-06-06 08:06:32 +02:00
8ac739c50a Translated using Weblate (Spanish)
Currently translated at 100.0% (398 of 398 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/es/
2021-06-06 08:06:31 +02:00
d291320832 Allow "quoted" CSV files not ending with CRLF 2021-06-06 08:04:21 +02:00
14c90e3eb0 Merge branch 'origin/master' into Weblate. 2021-06-04 21:08:21 +02:00
7163441cb5 Fixed pixel align issue 2021-06-04 21:04:09 +02:00
1cb478e707 Merge branch 'origin/master' into Weblate. 2021-05-31 22:38:14 +02:00
8589716a59 A little bit more sane bitmask 2021-05-31 22:37:55 +02:00
9973236912 Merge branch 'origin/master' into Weblate. 2021-05-29 23:15:08 +02:00
aff4dc9408 Fixed lat/lon error checks 2021-05-29 23:14:26 +02:00
c173a0372f Merge branch 'origin/master' into Weblate. 2021-05-29 13:10:02 +02:00
c7ef24ff30 Added TomTom OV2 and ITN support info 2021-05-29 13:09:58 +02:00
ee36404613 Merge branch 'origin/master' into Weblate. 2021-05-29 00:27:39 +02:00
c9083c184b Added missing icns resources (ov2 & itn) 2021-05-29 00:26:36 +02:00
918a55732f Use smaller icns files generated by rsvg instead of imagemagick 2021-05-29 00:24:12 +02:00
bfca1a127b Use rsvg instead of imagemagick for SVG->PNG conversion on OS X 2021-05-29 00:22:24 +02:00
89044d215b Merge branch 'origin/master' into Weblate. 2021-05-29 00:19:58 +02:00
86993863c5 Make the fullscreen shortcut more standard
(+ fix Travis CI OS X build)
2021-05-29 00:17:53 +02:00
28333ffc28 Merge branch 'origin/master' into Weblate. 2021-05-28 07:20:28 +02:00
723f2060a3 Brew on Travis CI has QT 6.x which requires XCode 12 2021-05-28 07:20:07 +02:00
190a4a437a Merge branch 'origin/master' into Weblate. 2021-05-27 23:22:46 +02:00
cbe03a7a29 Try some newer Travis CI OS X image, maybe it will work... 2021-05-27 23:22:27 +02:00
11c9fd6d48 Merge branch 'origin/master' into Weblate. 2021-05-27 22:08:59 +02:00
a53f20314f Improved/fixed data dir changes handling 2021-05-27 22:08:40 +02:00
59e680d695 Added missing OS X ov2 and itn integration 2021-05-27 22:07:44 +02:00
d39bd296f6 Properly handle Mapsforge world maps 2021-05-27 22:07:09 +02:00
441ccc59d0 Added support for font-family style parameters 2021-05-27 22:06:14 +02:00
a74495a5e2 Translated using Weblate (Polish)
Currently translated at 100.0% (398 of 398 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/pl/
2021-05-26 18:34:17 +02:00
0f8478c380 Removed Chiness translation stub
(There is evidently no real interest in translating anything)
2021-05-23 10:30:13 +02:00
d1cd1be878 Translated using Weblate (Polish)
Currently translated at 99.4% (396 of 398 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/pl/
2021-05-23 10:26:22 +02:00
596e1fd754 Translated using Weblate (Italian)
Currently translated at 98.7% (393 of 398 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/it/
2021-05-19 14:36:17 +02:00
bfa7eea6ed Translated using Weblate (French)
Currently translated at 100.0% (398 of 398 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/fr/
2021-05-19 14:36:16 +02:00
7ad051ddd5 Translated using Weblate (German)
Currently translated at 100.0% (398 of 398 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/de/
2021-05-19 14:36:16 +02:00
52d715e3ce Merge branch 'origin/master' into Weblate. 2021-05-14 22:58:52 +02:00
2748849032 Fixed rendering issues when digital zoom is active 2021-05-14 22:57:35 +02:00
0f48e7c137 Also accept broken ITN files generated by GPSBabel 2021-05-14 22:56:38 +02:00
f3c0ed3f7f Added workaround for broken IGC files created by XCSoar
closes #371
2021-05-14 22:47:09 +02:00
d1faf6c2c5 Translated using Weblate (Esperanto)
Currently translated at 96.4% (384 of 398 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/eo/
2021-05-14 20:38:19 +02:00
e0dc4ea352 Translated using Weblate (Hungarian)
Currently translated at 100.0% (398 of 398 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/hu/
2021-05-14 20:38:19 +02:00
2235231723 Translated using Weblate (Ukrainian)
Currently translated at 96.4% (384 of 398 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/uk/
2021-05-14 20:38:18 +02:00
b8c2f77fee Translated using Weblate (Turkish)
Currently translated at 100.0% (398 of 398 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/tr/
2021-05-14 20:38:18 +02:00
c5516071ab Translated using Weblate (Swedish)
Currently translated at 100.0% (398 of 398 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/sv/
2021-05-14 20:38:18 +02:00
64307c0641 Translated using Weblate (Russian)
Currently translated at 100.0% (398 of 398 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/ru/
2021-05-14 20:38:17 +02:00
7ccb80cb91 Translated using Weblate (Finnish)
Currently translated at 98.9% (394 of 398 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/fi/
2021-05-14 20:38:17 +02:00
38d6f52965 Merge branch 'origin/master' into Weblate. 2021-05-12 22:17:45 +02:00
854454248e Czech translation 2021-05-12 22:17:28 +02:00
1b66dc4744 Merge branch 'origin/master' into Weblate. 2021-05-12 22:02:42 +02:00
87df10d099 OV2/ITM desktop integration 2021-05-12 22:02:04 +02:00
f310230fd3 Localization update 2021-05-12 22:00:48 +02:00
b9e3e81ac1 Added support for waypoint phone data
+ address waypoint data where missing
2021-05-12 21:58:46 +02:00
c84c3bfd65 Translated using Weblate (Swedish)
Currently translated at 100.0% (397 of 397 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/sv/
2021-05-12 19:45:04 +02:00
86cb33266d Translated using Weblate (Turkish)
Currently translated at 100.0% (397 of 397 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/tr/
2021-05-12 19:45:04 +02:00
881f380cf0 Translated using Weblate (Hungarian)
Currently translated at 100.0% (397 of 397 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/hu/
2021-05-12 19:45:04 +02:00
637820930b Merge branch 'origin/master' into Weblate. 2021-05-12 07:48:28 +02:00
4b2bee2368 Localization update 2021-05-12 07:48:13 +02:00
86e8ac71ee Added support for TomTom ITN files 2021-05-12 07:44:25 +02:00
ae270de0c5 Merge branch 'origin/master' into Weblate. 2021-05-12 07:44:24 +02:00
9dccc113f5 Translated using Weblate (Hungarian)
Currently translated at 100.0% (396 of 396 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/hu/
2021-05-11 09:32:00 +02:00
4b4053e85b Translated using Weblate (Turkish)
Currently translated at 100.0% (396 of 396 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/tr/
2021-05-11 09:32:00 +02:00
72b550f209 Translated using Weblate (Swedish)
Currently translated at 100.0% (396 of 396 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/sv/
2021-05-11 09:31:59 +02:00
9373c7070b Translated using Weblate (Russian)
Currently translated at 100.0% (396 of 396 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/ru/
2021-05-11 09:31:59 +02:00
5efd3d1e33 Propper entry text trim 2021-05-10 08:26:19 +02:00
411428718e Localization update 2021-05-09 22:46:00 +02:00
6f0a6511db Version++ 2021-05-09 22:43:54 +02:00
4c65cb186a Merge branch 'origin/master' into Weblate. 2021-05-09 22:40:40 +02:00
14b884f61a Removed obsolete include 2021-05-09 22:40:24 +02:00
6a941566cb Added support for TomTom OV2 files 2021-05-09 22:39:39 +02:00
64aa44d09b Fixed "Show POI laels" setting 2021-05-09 22:36:37 +02:00
cbaecee4a8 Code cleanup 2021-05-09 22:35:05 +02:00
3908c363d9 Translated using Weblate (German)
Currently translated at 100.0% (395 of 395 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/de/
2021-05-07 00:09:49 +02:00
ff8be4206c Translated using Weblate (Italian)
Currently translated at 93.1% (368 of 395 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/it/
2021-05-07 00:09:49 +02:00
fc75bbfbc3 Merge branch 'origin/master' into Weblate. 2021-04-28 00:01:36 +02:00
95c9b42f66 Translated using Weblate (Esperanto)
Currently translated at 96.4% (381 of 395 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/eo/
2021-04-28 00:01:36 +02:00
9ed4418e1b Translated using Weblate (Ukrainian)
Currently translated at 96.4% (381 of 395 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/uk/
2021-04-28 00:01:35 +02:00
0b634b33ad Translated using Weblate (Finnish)
Currently translated at 98.9% (391 of 395 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/fi/
2021-04-28 00:01:35 +02:00
2e2fee560f Switched to Qt5 signal/slot API 2021-04-28 00:01:07 +02:00
527f9891c8 Translated using Weblate (Esperanto)
Currently translated at 96.2% (380 of 395 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/eo/
2021-04-27 21:31:51 +02:00
8c8ad4a4ba Merge branch 'origin/master' into Weblate. 2021-04-25 10:01:29 +02:00
9f3917b0f2 Fixed crash when loading Trekbuddy atlases or Garmin GMAP as map dirs. 2021-04-25 10:00:15 +02:00
7673154795 Merge branch 'origin/master' into Weblate. 2021-04-24 05:18:06 +02:00
e05c47b9ce Translated using Weblate (French)
Currently translated at 100.0% (395 of 395 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/fr/
2021-04-24 05:18:06 +02:00
d33bcd1e55 Also read subsequent spatial indexes on the same level 2021-04-24 05:17:12 +02:00
f248e1a735 Translated using Weblate (Russian)
Currently translated at 100.0% (395 of 395 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/ru/
2021-04-22 12:03:18 +02:00
244 changed files with 11617 additions and 8789 deletions

View File

@ -1,4 +1,4 @@
version: 9.0.{build}
version: 9.6.{build}
configuration:
- Release
@ -30,43 +30,29 @@ environment:
NSISDEF: /DQT6
install:
- cmd: >-
- cmd: |-
set PATH=%QTDIR%\bin;%NSISDIR%;%PATH%
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\"%VCVARS%
build_script:
- cmd: >-
- cmd: |-
lrelease gpxsee.pro
qmake gpxsee.pro
nmake release
md installer
copy release\GPXSee.exe installer
windeployqt --release installer\GPXSee.exe
copy pkg\%NSI% installer
copy pkg\macros.nsh installer
xcopy pkg\csv installer\csv /i
xcopy pkg\maps installer\maps /i
xcopy lang\*.qm installer\translations\ /sy
copy licence.txt installer
copy %OPENSSLDIR%\%LIBCRYPTO% installer
copy %OPENSSLDIR%\%LIBSSL% installer
makensis.exe %NSISDEF% installer\%NSI%
artifacts:
- path: installer\GPXSee-*.exe

View File

@ -5,14 +5,25 @@ os:
- osx
dist: focal
osx_image: xcode12.5
before_install:
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get -qq update; fi
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update; fi
cache:
directories:
- $HOME/Library/Caches/Homebrew
install:
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install qt; fi
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get install qtbase5-dev qtbase5-private-dev libqt5opengl5-dev qttools5-dev-tools; fi
before_cache:
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew cleanup; fi
addons:
homebrew:
packages:
- qt
apt:
packages:
- qtbase5-dev
- qtbase5-private-dev
- libqt5opengl5-dev
- qttools5-dev-tools
script:
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then PATH=/usr/local/opt/qt/bin/:${PATH}; fi

View File

@ -2,9 +2,9 @@
GPXSee is a Qt-based GPS log file viewer and analyzer that supports all common GPS log file formats.
## Features
* 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.
* Opens GPX, TCX, FIT, KML, NMEA, IGC, CUP, SIGMA SLF, Suunto SML, LOC, GeoJSON, OziExplorer (PLT, RTE, WPT), Garmin GPI&CSV, TomTom OV2&ITN, ONmove OMD/GHP and geotagged JPEG files.
* User-definable online maps (OpenStreetMap/Google tiles, WMTS, WMS, TMS, QuadTiles).
* Offline maps (MBTiles, OziExplorer maps, TrekBuddy maps/atlases, Garmin IMG/GMAP & JNX maps, TwoNav RMaps, GeoTIFF images, BSB charts, KMZ maps, AlpineQuest maps, Locus/OsmAnd/RMaps SQLite maps, Mapsforge vector maps).
* Offline maps (MBTiles, OziExplorer maps, TrekBuddy maps/atlases, Garmin IMG/GMAP & JNX maps, TwoNav RMaps, GeoTIFF images, BSB charts, KMZ maps, AlpineQuest maps, Locus/OsmAnd/RMaps SQLite maps, Mapsforge vector maps, ESRI World-File georeferenced images).
* Elevation, speed, heart rate, cadence, power, temperature and gear ratio/shifts graphs.
* Support for DEM files (SRTM HGT).
* Support for multiple tracks in one view.

View File

@ -3,7 +3,7 @@ unix:!macx {
} else {
TARGET = GPXSee
}
VERSION = 9.0
VERSION = 9.6
QT += core \
gui \
@ -18,8 +18,12 @@ greaterThan(QT_MAJOR_VERSION, 5) {QT += openglwidgets}
CONFIG += object_parallel_to_source
INCLUDEPATH += ./src
HEADERS += src/common/config.h \
src/GUI/authenticationwidget.h \
src/GUI/axislabelitem.h \
src/GUI/dirselectwidget.h \
src/GUI/flowlayout.h \
src/GUI/graphicsscene.h \
src/GUI/infolabel.h \
src/GUI/mapaction.h \
src/GUI/mapitem.h \
src/GUI/marginswidget.h \
@ -27,6 +31,7 @@ HEADERS += src/common/config.h \
src/GUI/planeitem.h \
src/GUI/poiaction.h \
src/GUI/popup.h \
src/GUI/thumbnail.h \
src/common/garmin.h \
src/common/coordinates.h \
src/common/range.h \
@ -40,6 +45,7 @@ HEADERS += src/common/config.h \
src/common/greatcircle.h \
src/common/programpaths.h \
src/common/tifffile.h \
src/common/downloader.h \
src/GUI/app.h \
src/GUI/icons.h \
src/GUI/gui.h \
@ -90,7 +96,10 @@ HEADERS += src/common/config.h \
src/GUI/mapview.h \
src/GUI/font.h \
src/GUI/areaitem.h \
src/data/itnparser.h \
src/data/link.h \
src/data/onmoveparsers.h \
src/data/ov2parser.h \
src/map/IMG/bitmapline.h \
src/map/IMG/bitstream.h \
src/map/IMG/deltastream.h \
@ -105,6 +114,7 @@ HEADERS += src/common/config.h \
src/map/IMG/rastertile.h \
src/map/IMG/shield.h \
src/map/mapsforge/style.h \
src/map/prjfile.h \
src/map/textpathitem.h \
src/map/textpointitem.h \
src/map/mapsforge/mapdata.h \
@ -128,7 +138,6 @@ HEADERS += src/common/config.h \
src/map/map.h \
src/map/maplist.h \
src/map/onlinemap.h \
src/map/downloader.h \
src/map/tile.h \
src/map/emptymap.h \
src/map/ozimap.h \
@ -147,6 +156,7 @@ HEADERS += src/common/config.h \
src/map/ct.h \
src/map/mapsource.h \
src/map/tileloader.h \
src/map/wldfile.h \
src/map/wmtsmap.h \
src/map/wmts.h \
src/map/wmsmap.h \
@ -186,6 +196,7 @@ HEADERS += src/common/config.h \
src/data/locparser.h \
src/data/slfparser.h \
src/data/dem.h \
src/data/demloader.h \
src/common/polygon.h \
src/data/area.h \
src/map/obliquestereographic.h \
@ -205,7 +216,7 @@ HEADERS += src/common/config.h \
src/map/IMG/subdiv.h \
src/map/IMG/style.h \
src/map/IMG/netfile.h \
src/GUI/limitedcombobox.h \
src/GUI/projectioncombobox.h \
src/GUI/pathtickitem.h \
src/map/textitem.h \
src/map/IMG/label.h \
@ -219,14 +230,20 @@ HEADERS += src/common/config.h \
src/data/geojsonparser.h \
src/GUI/timezoneinfo.h \
src/map/aqmmap.h \
src/map/mapsforgemap.h
src/map/mapsforgemap.h \
src/map/worldfilemap.h
SOURCES += src/main.cpp \
src/GUI/authenticationwidget.cpp \
src/GUI/axislabelitem.cpp \
src/GUI/dirselectwidget.cpp \
src/GUI/flowlayout.cpp \
src/GUI/infolabel.cpp \
src/GUI/mapitem.cpp \
src/GUI/marginswidget.cpp \
src/GUI/markerinfoitem.cpp \
src/GUI/popup.cpp \
src/GUI/thumbnail.cpp \
src/common/coordinates.cpp \
src/common/rectc.cpp \
src/common/range.cpp \
@ -235,6 +252,7 @@ SOURCES += src/main.cpp \
src/common/greatcircle.cpp \
src/common/programpaths.cpp \
src/common/tifffile.cpp \
src/common/downloader.cpp \
src/GUI/app.cpp \
src/GUI/gui.cpp \
src/GUI/axisitem.cpp \
@ -254,7 +272,6 @@ SOURCES += src/main.cpp \
src/GUI/fileselectwidget.cpp \
src/GUI/temperaturegraph.cpp \
src/GUI/trackitem.cpp \
src/GUI/tooltip.cpp \
src/GUI/routeitem.cpp \
src/GUI/graphitem.cpp \
src/GUI/pathitem.cpp \
@ -277,6 +294,10 @@ SOURCES += src/main.cpp \
src/GUI/gearratiographitem.cpp \
src/GUI/mapview.cpp \
src/GUI/areaitem.cpp \
src/data/address.cpp \
src/data/itnparser.cpp \
src/data/onmoveparsers.cpp \
src/data/ov2parser.cpp \
src/data/waypoint.cpp \
src/map/IMG/bitmapline.cpp \
src/map/IMG/bitstream.cpp \
@ -290,6 +311,7 @@ SOURCES += src/main.cpp \
src/map/IMG/mapdata.cpp \
src/map/IMG/rastertile.cpp \
src/map/mapsforge/style.cpp \
src/map/prjfile.cpp \
src/map/textpathitem.cpp \
src/map/textpointitem.cpp \
src/map/mapsforge/mapdata.cpp \
@ -299,7 +321,6 @@ SOURCES += src/main.cpp \
src/map/kmzmap.cpp \
src/map/maplist.cpp \
src/map/onlinemap.cpp \
src/map/downloader.cpp \
src/map/emptymap.cpp \
src/map/ozimap.cpp \
src/map/polyconic.cpp \
@ -327,6 +348,7 @@ SOURCES += src/main.cpp \
src/map/linearunits.cpp \
src/map/mapsource.cpp \
src/map/tileloader.cpp \
src/map/wldfile.cpp \
src/map/wmtsmap.cpp \
src/map/wmts.cpp \
src/map/wmsmap.cpp \
@ -360,6 +382,7 @@ SOURCES += src/main.cpp \
src/data/locparser.cpp \
src/data/slfparser.cpp \
src/data/dem.cpp \
src/data/demloader.cpp \
src/map/obliquestereographic.cpp \
src/GUI/coordinatesitem.cpp \
src/map/rmap.cpp \
@ -384,7 +407,9 @@ SOURCES += src/main.cpp \
src/GUI/pngexportdialog.cpp \
src/data/geojsonparser.cpp \
src/map/aqmmap.cpp \
src/map/mapsforgemap.cpp
src/map/mapsforgemap.cpp \
src/map/worldfilemap.cpp \
src/GUI/projectioncombobox.cpp
DEFINES += APP_VERSION=\\\"$$VERSION\\\" \
QT_NO_DEPRECATED_WARNINGS
@ -456,7 +481,12 @@ macx {
icons/formats/rmap.icns \
icons/formats/tba.icns \
icons/formats/aqm.icns \
icons/formats/sqlt.icns
icons/formats/sqlt.icns \
icons/formats/ov2.icns \
icons/formats/itn.icns \
icons/formats/wld.icns \
icons/formats/omd.icns \
icons/formats/ghp.icns
QMAKE_BUNDLE_DATA += locale maps icons csv
}
@ -485,7 +515,12 @@ win32 {
icons/formats/rmap.ico \
icons/formats/tba.ico \
icons/formats/aqm.ico \
icons/formats/sqlt.ico
icons/formats/sqlt.ico \
icons/formats/ov2.ico \
icons/formats/itn.ico \
icons/formats/wld.ico \
icons/formats/omd.ico \
icons/formats/ghp.ico
DEFINES += _USE_MATH_DEFINES \
NOGDI
}

View File

@ -43,6 +43,8 @@
<file alias="view-filter@2x.png">icons/GUI/view-filter@2x.png</file>
<file alias="applications-internet_32.png">icons/GUI/applications-internet_32.png</file>
<file alias="applications-internet_32@2x.png">icons/GUI/applications-internet_32@2x.png</file>
<file alias="view-grid.png">icons/GUI/view-grid.png</file>
<file alias="view-grid@2x.png">icons/GUI/view-grid@2x.png</file>
</qresource>
<!-- POI icons for default IMG map style -->

BIN
icons/GUI/view-grid.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
icons/GUI/view-grid@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
icons/formats/ghp.icns Normal file

Binary file not shown.

BIN
icons/formats/ghp.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 304 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
icons/formats/itn.icns Normal file

Binary file not shown.

BIN
icons/formats/itn.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 302 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
icons/formats/omd.icns Normal file

Binary file not shown.

BIN
icons/formats/omd.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 305 KiB

BIN
icons/formats/ov2.icns Normal file

Binary file not shown.

BIN
icons/formats/ov2.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 306 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -22,3 +22,8 @@ rmap:#145cba
tba:#367050
aqm:#32a89e
sqlt:#303030
ov2:#a8c920
itn:#b8540d
wld:#c74c8f
omd:#ed09cb
ghp:#ed09cb

View File

@ -9,16 +9,16 @@ while read e; do
ICONSET=$1.iconset
mkdir $ICONSET
convert -density 400 -background none -resize '16x16' "$1.svg" "$ICONSET/icon_16x16.png"
convert -density 400 -background none -resize '32x32' "$1.svg" "$ICONSET/icon_16x16@2x.png"
rsvg-convert -w 16 -h 16 -o "$ICONSET/icon_16x16.png" "$1.svg"
rsvg-convert -w 32 -h 32 -o "$ICONSET/icon_16x16@2x.png" "$1.svg"
cp "$ICONSET/icon_16x16@2x.png" "$ICONSET/icon_32x32.png"
convert -density 400 -background none -resize '64x64' "$1.svg" "$ICONSET/icon_32x32@2x.png"
convert -density 400 -background none -resize '128x128' "$1.svg" "$ICONSET/icon_128x128.png"
convert -density 400 -background none -resize '256x256' "$1.svg" "$ICONSET/icon_128x128@2x.png"
rsvg-convert -w 64 -h 64 -o "$ICONSET/icon_32x32@2x.png" "$1.svg"
rsvg-convert -w 128 -h 128 -o "$ICONSET/icon_128x128.png" "$1.svg"
rsvg-convert -w 256 -h 256 -o "$ICONSET/icon_128x128@2x.png" "$1.svg"
cp "$ICONSET/icon_128x128@2x.png" "$ICONSET/icon_256x256.png"
convert -density 400 -background none -resize '512x512' "$1.svg" "$ICONSET/icon_256x256@2x.png"
rsvg-convert -w 512 -h 512 -o "$ICONSET/icon_256x256@2x.png" "$1.svg"
cp "$ICONSET/icon_256x256@2x.png" "$ICONSET/icon_512x512.png"
convert -density 400 -background none -resize '1024x1024' "$1.svg" "$ICONSET/icon_512x512@2x.png"
rsvg-convert -w 1024 -h 1024 -o "$ICONSET/icon_512x512@2x.png" "$1.svg"
iconutil -c icns -o $1.icns "$ICONSET"
rm -R "$ICONSET" $1.svg

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
icons/formats/wld.icns Normal file

Binary file not shown.

BIN
icons/formats/wld.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 305 KiB

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -494,6 +494,90 @@
<key>CFBundleTypeRole</key>
<string>Viewer</string>
</dict>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>ov2</string>
</array>
<key>CFBundleTypeMIMETypes</key>
<array>
<string>application/vnd.tomtom.ov2</string>
</array>
<key>CFBundleTypeIconFile</key>
<string>icons/ov2.icns</string>
<key>CFBundleTypeName</key>
<string>TomTom POI File</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
</dict>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>itn</string>
</array>
<key>CFBundleTypeMIMETypes</key>
<array>
<string>application/vnd.tomtom.itn</string>
</array>
<key>CFBundleTypeIconFile</key>
<string>icons/itn.icns</string>
<key>CFBundleTypeName</key>
<string>TomTom Route File</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
</dict>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>wld</string>
<string>jgw</string>
<string>gfw</string>
<string>pgw</string>
<string>tfw</string>
</array>
<key>CFBundleTypeMIMETypes</key>
<array>
<string>application/vnd.esri.wld</string>
</array>
<key>CFBundleTypeIconFile</key>
<string>icons/wld.icns</string>
<key>CFBundleTypeName</key>
<string>ESRI World File</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
</dict>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>omd</string>
</array>
<key>CFBundleTypeMIMETypes</key>
<array>
<string>application/vnd.onmove.omd</string>
</array>
<key>CFBundleTypeIconFile</key>
<string>icons/omd.icns</string>
<key>CFBundleTypeName</key>
<string>ONmove Log File</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
</dict>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>ghp</string>
</array>
<key>CFBundleTypeMIMETypes</key>
<array>
<string>application/vnd.onmove.ghp</string>
</array>
<key>CFBundleTypeIconFile</key>
<string>icons/ghp.icns</string>
<key>CFBundleTypeName</key>
<string>ONmove Log File</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
</dict>
</array>
<key>UTImportedTypeDeclarations</key>
@ -1113,6 +1197,115 @@
<string>image/tiff</string>
</dict>
</dict>
<dict>
<key>UTTypeIdentifier</key>
<string>com.tomtom.ov2</string>
<key>UTTypeReferenceURL</key>
<string>https://www.tomtom.com/lib/doc/ttnavsdk3_manual.pdf</string>
<key>UTTypeDescription</key>
<string>TomTom POI File</string>
<key>UTTypeConformsTo</key>
<array>
<string>public.data</string>
</array>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<array>
<string>ov2</string>
</array>
<key>public.mime-type</key>
<string>application/vnd.tomtom.ov2</string>
</dict>
</dict>
<dict>
<key>UTTypeIdentifier</key>
<string>com.tomtom.itn</string>
<key>UTTypeReferenceURL</key>
<string>https://www.tomtom.com/lib/doc/ttnavsdk3_manual.pdf</string>
<key>UTTypeDescription</key>
<string>TomTom Route File</string>
<key>UTTypeConformsTo</key>
<array>
<string>public.data</string>
</array>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<array>
<string>itn</string>
</array>
<key>public.mime-type</key>
<string>application/vnd.tomtom.itn</string>
</dict>
</dict>
<dict>
<key>UTTypeIdentifier</key>
<string>com.esri.wld</string>
<key>UTTypeReferenceURL</key>
<string>http://webhelp.esri.com/arcims/9.3/General/topics/author_world_files.htm</string>
<key>UTTypeDescription</key>
<string>ESRI World File</string>
<key>UTTypeConformsTo</key>
<array>
<string>public.data</string>
</array>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<array>
<string>wld</string>
<string>jgw</string>
<string>gfw</string>
<string>pgw</string>
<string>tfw</string>
</array>
<key>public.mime-type</key>
<string>application/vnd.esri.wld</string>
</dict>
</dict>
<dict>
<key>UTTypeIdentifier</key>
<string>com.geonaute.omd</string>
<key>UTTypeReferenceURL</key>
<string>https://github.com/ColinPitrat/kalenji-gps-watch-reader</string>
<key>UTTypeDescription</key>
<string>ONmove Log File</string>
<key>UTTypeConformsTo</key>
<array>
<string>public.data</string>
</array>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<array>
<string>omd</string>
</array>
<key>public.mime-type</key>
<string>application/vnd.onmove.omd</string>
</dict>
</dict>
<dict>
<key>UTTypeIdentifier</key>
<string>com.geonaute.ghp</string>
<key>UTTypeReferenceURL</key>
<string>https://github.com/ColinPitrat/kalenji-gps-watch-reader</string>
<key>UTTypeDescription</key>
<string>ONmove Log File</string>
<key>UTTypeConformsTo</key>
<array>
<string>public.data</string>
</array>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<array>
<string>ghp</string>
</array>
<key>public.mime-type</key>
<string>application/vnd.onmove.ghp</string>
</dict>
</dict>
</array>
<key>UTExportedTypeDeclarations</key>

View File

@ -14,13 +14,14 @@
<ul>
<li>Opens GPX, TCX, FIT, KML, IGC, NMEA, SIGMA SLF, Suunto SML, LOC,
OziExplorer (PLT, WPT, RTE), GeoJSON, SeeYou CUP,
Garmin GPI &amp; CSV and geotagged JPEG files.</li>
Garmin GPI &amp; CSV, TomTom OV2 &amp; ITN, ONmove OMD/GHP
and geotagged JPEG files.</li>
<li>User-definable online maps (OpenStreetMap/Google tiles, WMTS,
WMS, TMS, QuadTiles).</li>
<li>Offline maps (MBTiles, OziExplorer maps, TrekBuddy maps/atlases,
TwoNav RMaps, Garmin IMG &amp; JNX maps, GeoTIFF images,
BSB nautical charts, KMZ maps, AlpineQuest maps,
Mapsforge maps).</li>
Mapsforge maps), ESRI world files.</li>
<li>Elevation, speed, heart rate, cadence, power, temperature and
gear ratio graphs.</li>
<li>Support for multiple tracks in one view.</li>
@ -91,5 +92,10 @@
<mimetype>application/vnd.alpinequest.aqm</mimetype>
<mimetype>application/vnd.rmaps.sqlite</mimetype>
<mimetype>application/vnd.mapsforge.map</mimetype>
<mimetype>application/vnd.tomtom.ov2</mimetype>
<mimetype>application/vnd.tomtom.itn</mimetype>
<mimetype>application/vnd.esri.wld</mimetype>
<mimetype>application/vnd.onmove.omd</mimetype>
<mimetype>application/vnd.onmove.ghp</mimetype>
</mimetypes>
</component>

View File

@ -15,4 +15,4 @@ Icon=gpxsee
Terminal=false
Type=Application
Categories=Graphics;Viewer;Education;Geography;Maps;Sports;Qt
MimeType=application/gpx+xml;application/vnd.garmin.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/vnd.groundspeak.loc+xml;application/vnd.sigma.slf+xml;application/geo+json;application/vnd.naviter.seeyou.cup;application/vnd.garmin.gpi;application/vnd.suunto.sml+xml;image/jpeg;text/csv;application/vnd.garmin.img;application/vnd.garmin.jnx;application/vnd.garmin.gmap+xml;image/vnd.maptech.kap;application/vnd.oziexplorer.map;application/vnd.mapbox.mbtiles;application/vnd.twonav.rmap;application/vnd.trekbuddy.tba;application/vnd.gpxsee.map+xml;application/x-tar;image/tiff;application/vnd.google-earth.kmz;application/vnd.alpinequest.aqm;application/vnd.rmaps.sqlite;application/vnd.mapsforge.map
MimeType=application/gpx+xml;application/vnd.garmin.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/vnd.groundspeak.loc+xml;application/vnd.sigma.slf+xml;application/geo+json;application/vnd.naviter.seeyou.cup;application/vnd.garmin.gpi;application/vnd.suunto.sml+xml;image/jpeg;text/csv;application/vnd.garmin.img;application/vnd.garmin.jnx;application/vnd.garmin.gmap+xml;image/vnd.maptech.kap;application/vnd.oziexplorer.map;application/vnd.mapbox.mbtiles;application/vnd.twonav.rmap;application/vnd.trekbuddy.tba;application/vnd.gpxsee.map+xml;application/x-tar;image/tiff;application/vnd.google-earth.kmz;application/vnd.alpinequest.aqm;application/vnd.rmaps.sqlite;application/vnd.mapsforge.map;application/vnd.tomtom.ov2;application/vnd.tomtom.itn;application/vnd.esri.wld

View File

@ -9,7 +9,7 @@ Unicode true
; The name of the installer
Name "GPXSee"
; Program version
!define VERSION "9.0"
!define VERSION "9.6"
; The file to write
OutFile "GPXSee-${VERSION}.exe"
@ -130,15 +130,24 @@ Section "GPXSee" SEC_APP
!insertmacro FILE_ASSOCIATION_ADD "rmap" "TwoNav Raster Map File" 14
!insertmacro FILE_ASSOCIATION_ADD "tba" "TrekBuddy Atlas" 15
!insertmacro FILE_ASSOCIATION_ADD "aqm" "AlpineQuest Map File" 16
!insertmacro FILE_ASSOCIATION_ADD "sqlitedb" "RMAps SQLite Map File" 17
!insertmacro FILE_ASSOCIATION_ADD "tcx" "Training Center XML" 18
!insertmacro FILE_ASSOCIATION_ADD "kml" "Keyhole Markup Language" 19
!insertmacro FILE_ASSOCIATION_ADD "kmz" "KML geographic compressed data" 19
!insertmacro FILE_ASSOCIATION_ADD "fit" "Flexible and Interoperable Data Transfer" 20
!insertmacro FILE_ASSOCIATION_ADD "igc" "Flight Recorder Data Format" 21
!insertmacro FILE_ASSOCIATION_ADD "nmea" "NMEA 0183 Data" 22
!insertmacro FILE_ASSOCIATION_ADD "plt" "OziExplorer Track File" 23
!insertmacro FILE_ASSOCIATION_ADD "rte" "OziExplorer Route File" 24
!insertmacro FILE_ASSOCIATION_ADD "sqlitedb" "RMaps SQLite Map File" 17
!insertmacro FILE_ASSOCIATION_ADD "ov2" "TomTom POI File" 18
!insertmacro FILE_ASSOCIATION_ADD "itn" "TomTom Route File" 19
!insertmacro FILE_ASSOCIATION_ADD "wld" "ESRI World File" 20
!insertmacro FILE_ASSOCIATION_ADD "jgw" "ESRI World File" 20
!insertmacro FILE_ASSOCIATION_ADD "gfw" "ESRI World File" 20
!insertmacro FILE_ASSOCIATION_ADD "pgw" "ESRI World File" 20
!insertmacro FILE_ASSOCIATION_ADD "tfw" "ESRI World File" 20
!insertmacro FILE_ASSOCIATION_ADD "omd" "ONmove Log File" 21
!insertmacro FILE_ASSOCIATION_ADD "tcx" "Training Center XML" 22
!insertmacro FILE_ASSOCIATION_ADD "ghp" "ONmove Log File" 23
!insertmacro FILE_ASSOCIATION_ADD "kml" "Keyhole Markup Language" 24
!insertmacro FILE_ASSOCIATION_ADD "kmz" "KML geographic compressed data" 24
!insertmacro FILE_ASSOCIATION_ADD "fit" "Flexible and Interoperable Data Transfer" 25
!insertmacro FILE_ASSOCIATION_ADD "igc" "Flight Recorder Data Format" 26
!insertmacro FILE_ASSOCIATION_ADD "nmea" "NMEA 0183 Data" 27
!insertmacro FILE_ASSOCIATION_ADD "plt" "OziExplorer Track File" 28
!insertmacro FILE_ASSOCIATION_ADD "rte" "OziExplorer Route File" 29
WriteRegStr HKCR "Applications\GPXSee.exe\shell\open\command" "" "$\"$INSTDIR\GPXSee.exe$\" $\"%1$\""
WriteRegStr HKCR ".gpx\OpenWithList" "GPXSee.exe" ""
@ -156,6 +165,8 @@ Section "GPXSee" SEC_APP
WriteRegStr HKCR ".cup\OpenWithList" "GPXSee.exe" ""
WriteRegStr HKCR ".gpi\OpenWithList" "GPXSee.exe" ""
WriteRegStr HKCR ".sml\OpenWithList" "GPXSee.exe" ""
WriteRegStr HKCR ".ov2\OpenWithList" "GPXSee.exe" ""
WriteRegStr HKCR ".itn\OpenWithList" "GPXSee.exe" ""
WriteRegStr HKCR ".csv\OpenWithList" "GPXSee.exe" ""
WriteRegStr HKCR ".json\OpenWithList" "GPXSee.exe" ""
WriteRegStr HKCR ".jpg\OpenWithList" "GPXSee.exe" ""
@ -175,7 +186,14 @@ Section "GPXSee" SEC_APP
WriteRegStr HKCR ".kmz\OpenWithList" "GPXSee.exe" ""
WriteRegStr HKCR ".aqm\OpenWithList" "GPXSee.exe" ""
WriteRegStr HKCR ".sqlitedb\OpenWithList" "GPXSee.exe" ""
WriteRegStr HKCR ".wld\OpenWithList" "GPXSee.exe" ""
WriteRegStr HKCR ".jgw\OpenWithList" "GPXSee.exe" ""
WriteRegStr HKCR ".gfw\OpenWithList" "GPXSee.exe" ""
WriteRegStr HKCR ".pgw\OpenWithList" "GPXSee.exe" ""
WriteRegStr HKCR ".tfw\OpenWithList" "GPXSee.exe" ""
WriteRegStr HKCR ".omd\OpenWithList" "GPXSee.exe" ""
WriteRegStr HKCR ".ghp\OpenWithList" "GPXSee.exe" ""
System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) v (0x08000000, 0, 0, 0)'
SectionEnd
@ -292,6 +310,15 @@ Section "Uninstall"
!insertmacro FILE_ASSOCIATION_REMOVE "kmz"
!insertmacro FILE_ASSOCIATION_REMOVE "aqm"
!insertmacro FILE_ASSOCIATION_REMOVE "sqlitedb"
!insertmacro FILE_ASSOCIATION_REMOVE "ov2"
!insertmacro FILE_ASSOCIATION_REMOVE "itn"
!insertmacro FILE_ASSOCIATION_REMOVE "wld"
!insertmacro FILE_ASSOCIATION_REMOVE "jgw"
!insertmacro FILE_ASSOCIATION_REMOVE "gfw"
!insertmacro FILE_ASSOCIATION_REMOVE "pgw"
!insertmacro FILE_ASSOCIATION_REMOVE "tfw"
!insertmacro FILE_ASSOCIATION_REMOVE "omd"
!insertmacro FILE_ASSOCIATION_REMOVE "ghp"
DeleteRegValue HKCR ".gpx\OpenWithList" "GPXSee.exe"
DeleteRegValue HKCR ".tcx\OpenWithList" "GPXSee.exe"
@ -308,6 +335,8 @@ Section "Uninstall"
DeleteRegValue HKCR ".cup\OpenWithList" "GPXSee.exe"
DeleteRegValue HKCR ".gpi\OpenWithList" "GPXSee.exe"
DeleteRegValue HKCR ".sml\OpenWithList" "GPXSee.exe"
DeleteRegValue HKCR ".ov2\OpenWithList" "GPXSee.exe"
DeleteRegValue HKCR ".itn\OpenWithList" "GPXSee.exe"
DeleteRegValue HKCR ".csv\OpenWithList" "GPXSee.exe"
DeleteRegValue HKCR ".json\OpenWithList" "GPXSee.exe"
DeleteRegValue HKCR ".jpg\OpenWithList" "GPXSee.exe"
@ -327,6 +356,13 @@ Section "Uninstall"
DeleteRegValue HKCR ".kmz\OpenWithList" "GPXSee.exe"
DeleteRegValue HKCR ".aqm\OpenWithList" "GPXSee.exe"
DeleteRegValue HKCR ".sqlitedb\OpenWithList" "GPXSee.exe"
DeleteRegValue HKCR ".wld\OpenWithList" "GPXSee.exe"
DeleteRegValue HKCR ".jgw\OpenWithList" "GPXSee.exe"
DeleteRegValue HKCR ".gfw\OpenWithList" "GPXSee.exe"
DeleteRegValue HKCR ".pgw\OpenWithList" "GPXSee.exe"
DeleteRegValue HKCR ".tfw\OpenWithList" "GPXSee.exe"
DeleteRegValue HKCR ".omd\OpenWithList" "GPXSee.exe"
DeleteRegValue HKCR ".ghp\OpenWithList" "GPXSee.exe"
DeleteRegKey HKCR "Applications\GPXSee.exe"
System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) v (0x08000000, 0, 0, 0)'

View File

@ -128,6 +128,33 @@
<glob pattern="*.sml"/>
</mime-type>
<mime-type type="application/vnd.tomtom.ov2">
<comment>TomTom POI File</comment>
<sub-class-of type="application/octet-stream"/>
<generic-icon name="application/octet-stream"/>
<glob pattern="*.ov2"/>
</mime-type>
<mime-type type="application/vnd.tomtom.itn">
<comment>TomTom Route File</comment>
<sub-class-of type="text/csv"/>
<generic-icon name="text/csv"/>
<glob pattern="*.itn"/>
</mime-type>
<mime-type type="application/vnd.onmove.omd">
<comment>ONmove Log File</comment>
<sub-class-of type="application/octet-stream"/>
<generic-icon name="application/octet-stream"/>
<glob pattern="*.omd"/>
</mime-type>
<mime-type type="application/vnd.onmove.ghp">
<comment>ONmove Log File</comment>
<sub-class-of type="application/octet-stream"/>
<generic-icon name="application/octet-stream"/>
<glob pattern="*.ghp"/>
</mime-type>
<!-- Maps -->
@ -247,4 +274,15 @@
<glob pattern="*.map"/>
</mime-type>
<mime-type type="application/vnd.esri.wld">
<comment>ESRI World File</comment>
<sub-class-of type="text/plain"/>
<generic-icon name="text/plain"/>
<glob pattern="*.wld"/>
<glob pattern="*.jgw"/>
<glob pattern="*.gfw"/>
<glob pattern="*.pgw"/>
<glob pattern="*.tfw"/>
</mime-type>
</mime-info>

View File

@ -9,7 +9,7 @@ Unicode true
; The name of the installer
Name "GPXSee"
; Program version
!define VERSION "9.0"
!define VERSION "9.6"
; The file to write
OutFile "GPXSee-${VERSION}_x64.exe"
@ -138,14 +138,23 @@ Section "GPXSee" SEC_APP
!insertmacro FILE_ASSOCIATION_ADD "tba" "TrekBuddy Atlas" 15
!insertmacro FILE_ASSOCIATION_ADD "aqm" "AlpineQuest Map File" 16
!insertmacro FILE_ASSOCIATION_ADD "sqlitedb" "RMaps SQLite Map File" 17
!insertmacro FILE_ASSOCIATION_ADD "tcx" "Training Center XML" 18
!insertmacro FILE_ASSOCIATION_ADD "kml" "Keyhole Markup Language" 19
!insertmacro FILE_ASSOCIATION_ADD "kmz" "KML geographic compressed data" 19
!insertmacro FILE_ASSOCIATION_ADD "fit" "Flexible and Interoperable Data Transfer" 20
!insertmacro FILE_ASSOCIATION_ADD "igc" "Flight Recorder Data Format" 21
!insertmacro FILE_ASSOCIATION_ADD "nmea" "NMEA 0183 Data" 22
!insertmacro FILE_ASSOCIATION_ADD "plt" "OziExplorer Track File" 23
!insertmacro FILE_ASSOCIATION_ADD "rte" "OziExplorer Route File" 24
!insertmacro FILE_ASSOCIATION_ADD "ov2" "TomTom POI File" 18
!insertmacro FILE_ASSOCIATION_ADD "itn" "TomTom Route File" 19
!insertmacro FILE_ASSOCIATION_ADD "wld" "ESRI World File" 20
!insertmacro FILE_ASSOCIATION_ADD "jgw" "ESRI World File" 20
!insertmacro FILE_ASSOCIATION_ADD "gfw" "ESRI World File" 20
!insertmacro FILE_ASSOCIATION_ADD "pgw" "ESRI World File" 20
!insertmacro FILE_ASSOCIATION_ADD "tfw" "ESRI World File" 20
!insertmacro FILE_ASSOCIATION_ADD "omd" "ONmove Log File" 21
!insertmacro FILE_ASSOCIATION_ADD "tcx" "Training Center XML" 22
!insertmacro FILE_ASSOCIATION_ADD "ghp" "ONmove Log File" 23
!insertmacro FILE_ASSOCIATION_ADD "kml" "Keyhole Markup Language" 24
!insertmacro FILE_ASSOCIATION_ADD "kmz" "KML geographic compressed data" 24
!insertmacro FILE_ASSOCIATION_ADD "fit" "Flexible and Interoperable Data Transfer" 25
!insertmacro FILE_ASSOCIATION_ADD "igc" "Flight Recorder Data Format" 26
!insertmacro FILE_ASSOCIATION_ADD "nmea" "NMEA 0183 Data" 27
!insertmacro FILE_ASSOCIATION_ADD "plt" "OziExplorer Track File" 28
!insertmacro FILE_ASSOCIATION_ADD "rte" "OziExplorer Route File" 29
WriteRegStr HKCR "Applications\GPXSee.exe\shell\open\command" "" "$\"$INSTDIR\GPXSee.exe$\" $\"%1$\""
WriteRegStr HKCR ".gpx\OpenWithList" "GPXSee.exe" ""
@ -163,6 +172,8 @@ Section "GPXSee" SEC_APP
WriteRegStr HKCR ".cup\OpenWithList" "GPXSee.exe" ""
WriteRegStr HKCR ".gpi\OpenWithList" "GPXSee.exe" ""
WriteRegStr HKCR ".sml\OpenWithList" "GPXSee.exe" ""
WriteRegStr HKCR ".ov2\OpenWithList" "GPXSee.exe" ""
WriteRegStr HKCR ".itn\OpenWithList" "GPXSee.exe" ""
WriteRegStr HKCR ".csv\OpenWithList" "GPXSee.exe" ""
WriteRegStr HKCR ".json\OpenWithList" "GPXSee.exe" ""
WriteRegStr HKCR ".jpg\OpenWithList" "GPXSee.exe" ""
@ -182,6 +193,13 @@ Section "GPXSee" SEC_APP
WriteRegStr HKCR ".kmz\OpenWithList" "GPXSee.exe" ""
WriteRegStr HKCR ".aqm\OpenWithList" "GPXSee.exe" ""
WriteRegStr HKCR ".sqlitedb\OpenWithList" "GPXSee.exe" ""
WriteRegStr HKCR ".wld\OpenWithList" "GPXSee.exe" ""
WriteRegStr HKCR ".jgw\OpenWithList" "GPXSee.exe" ""
WriteRegStr HKCR ".gfw\OpenWithList" "GPXSee.exe" ""
WriteRegStr HKCR ".pgw\OpenWithList" "GPXSee.exe" ""
WriteRegStr HKCR ".tfw\OpenWithList" "GPXSee.exe" ""
WriteRegStr HKCR ".omd\OpenWithList" "GPXSee.exe" ""
WriteRegStr HKCR ".ghp\OpenWithList" "GPXSee.exe" ""
System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) v (0x08000000, 0, 0, 0)'
@ -315,6 +333,15 @@ Section "Uninstall"
!insertmacro FILE_ASSOCIATION_REMOVE "kmz"
!insertmacro FILE_ASSOCIATION_REMOVE "aqm"
!insertmacro FILE_ASSOCIATION_REMOVE "sqlitedb"
!insertmacro FILE_ASSOCIATION_REMOVE "ov2"
!insertmacro FILE_ASSOCIATION_REMOVE "itn"
!insertmacro FILE_ASSOCIATION_REMOVE "wld"
!insertmacro FILE_ASSOCIATION_REMOVE "jgw"
!insertmacro FILE_ASSOCIATION_REMOVE "gfw"
!insertmacro FILE_ASSOCIATION_REMOVE "pgw"
!insertmacro FILE_ASSOCIATION_REMOVE "tfw"
!insertmacro FILE_ASSOCIATION_REMOVE "omd"
!insertmacro FILE_ASSOCIATION_REMOVE "ghp"
DeleteRegValue HKCR ".gpx\OpenWithList" "GPXSee.exe"
DeleteRegValue HKCR ".tcx\OpenWithList" "GPXSee.exe"
@ -331,6 +358,8 @@ Section "Uninstall"
DeleteRegValue HKCR ".cup\OpenWithList" "GPXSee.exe"
DeleteRegValue HKCR ".gpi\OpenWithList" "GPXSee.exe"
DeleteRegValue HKCR ".sml\OpenWithList" "GPXSee.exe"
DeleteRegValue HKCR ".ov2\OpenWithList" "GPXSee.exe"
DeleteRegValue HKCR ".itn\OpenWithList" "GPXSee.exe"
DeleteRegValue HKCR ".csv\OpenWithList" "GPXSee.exe"
DeleteRegValue HKCR ".json\OpenWithList" "GPXSee.exe"
DeleteRegValue HKCR ".jpg\OpenWithList" "GPXSee.exe"
@ -350,6 +379,13 @@ Section "Uninstall"
DeleteRegValue HKCR ".kmz\OpenWithList" "GPXSee.exe"
DeleteRegValue HKCR ".aqm\OpenWithList" "GPXSee.exe"
DeleteRegValue HKCR ".sqlitedb\OpenWithList" "GPXSee.exe"
DeleteRegValue HKCR ".wld\OpenWithList" "GPXSee.exe"
DeleteRegValue HKCR ".jgw\OpenWithList" "GPXSee.exe"
DeleteRegValue HKCR ".gfw\OpenWithList" "GPXSee.exe"
DeleteRegValue HKCR ".pgw\OpenWithList" "GPXSee.exe"
DeleteRegValue HKCR ".tfw\OpenWithList" "GPXSee.exe"
DeleteRegValue HKCR ".omd\OpenWithList" "GPXSee.exe"
DeleteRegValue HKCR ".ghp\OpenWithList" "GPXSee.exe"
DeleteRegKey HKCR "Applications\GPXSee.exe"
System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) v (0x08000000, 0, 0, 0)'

View File

@ -9,7 +9,7 @@
#include <QSurfaceFormat>
#include "common/programpaths.h"
#include "common/config.h"
#include "map/downloader.h"
#include "common/downloader.h"
#include "map/ellipsoid.h"
#include "map/gcs.h"
#include "map/pcs.h"

View File

@ -9,7 +9,7 @@
#include "areaitem.h"
QString AreaItem::info() const
ToolTip AreaItem::info() const
{
ToolTip tt;
@ -19,7 +19,7 @@ QString AreaItem::info() const
tt.insert(qApp->translate("PolygonItem", "Description"),
_area.description());
return tt.toString();
return tt;
}
AreaItem::AreaItem(const Area &area, Map *map, GraphicsItem *parent)

View File

@ -25,7 +25,7 @@ public:
void setStyle(Qt::PenStyle style);
void setDigitalZoom(int zoom);
QString info() const;
ToolTip info() const;
protected:
void hoverEnterEvent(QGraphicsSceneHoverEvent *event);

View File

@ -0,0 +1,15 @@
#include <QFormLayout>
#include "authenticationwidget.h"
AuthenticationWidget::AuthenticationWidget(QWidget *parent) : QWidget(parent)
{
_username = new QLineEdit();
_password = new QLineEdit();
QFormLayout *layout = new QFormLayout();
layout->addRow(tr("Username:"), _username);
layout->addRow(tr("Password:"), _password);
layout->setContentsMargins(0, 0, 0, 0);
setLayout(layout);
}

View File

@ -0,0 +1,24 @@
#ifndef AUTHENTICATIONWIDGET_H
#define AUTHENTICATIONWIDGET_H
#include <QWidget>
#include <QLineEdit>
class AuthenticationWidget : public QWidget
{
Q_OBJECT
public:
AuthenticationWidget(QWidget *parent = 0);
QString username() const {return _username->text();}
QString password() const {return _password->text();}
void setUsername(const QString &username) {_username->setText(username);}
void setPassword(const QString &password) {_password->setText(password);}
private:
QLineEdit *_username, *_password;
};
#endif // AUTHENTICATIONWIDGET_H

View File

@ -9,7 +9,7 @@ CadenceGraphItem::CadenceGraphItem(const Graph &graph, GraphType type,
{
}
QString CadenceGraphItem::info() const
ToolTip CadenceGraphItem::info() const
{
ToolTip tt;
QLocale l(QLocale::system());
@ -19,5 +19,5 @@ QString CadenceGraphItem::info() const
tt.insert(tr("Average"), l.toString(avg(), 'f', 1)
+ UNIT_SPACE + tr("rpm"));
return tt.toString();
return tt;
}

View File

@ -11,7 +11,7 @@ public:
CadenceGraphItem(const Graph &graph, GraphType type, int width,
const QColor &color, QGraphicsItem *parent = 0);
QString info() const;
ToolTip info() const;
};
#endif // CADENCEGRAPHITEM_H

View File

@ -0,0 +1,43 @@
#include <QPushButton>
#include <QToolButton>
#include <QFileDialog>
#include <QHBoxLayout>
#include <QFileInfo>
#include <QFontMetrics>
#include <QApplication>
#include "dirselectwidget.h"
DirSelectWidget::DirSelectWidget(QWidget *parent) : QWidget(parent)
{
QFontMetrics fm(QApplication::font());
_edit = new QLineEdit();
_edit->setMinimumWidth(fm.averageCharWidth() * (QDir::homePath().length()
+ 12));
_edit->setPlaceholderText(tr("System default"));
#ifdef Q_OS_WIN32
_button = new QPushButton("...");
_button->setMaximumWidth(_button->sizeHint().width() / 2);
#else // Q_OS_WIN32
_button = new QToolButton();
_button->setText("...");
#endif // Q_OS_WIN32
connect(_button, &QToolButton::clicked, this, &DirSelectWidget::browse);
QHBoxLayout *layout = new QHBoxLayout();
layout->setContentsMargins(QMargins());
layout->addWidget(_edit);
layout->addWidget(_button);
setLayout(layout);
QSizePolicy p(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed);
setSizePolicy(p);
}
void DirSelectWidget::browse()
{
QString dir(QFileDialog::getExistingDirectory(this, tr("Select directory"),
_edit->text()));
if (!dir.isEmpty())
_edit->setText(dir);
}

33
src/GUI/dirselectwidget.h Normal file
View File

@ -0,0 +1,33 @@
#ifndef DIRSELECTWIDGET_H
#define DIRSELECTWIDGET_H
#include <QWidget>
#include <QLineEdit>
class QPushButton;
class QToolButton;
class DirSelectWidget : public QWidget
{
Q_OBJECT
public:
DirSelectWidget(QWidget *parent = 0);
QString dir() const {return _edit->text();}
void setDir(const QString &path) {_edit->setText(path);}
bool checkDir(QString &error) const;
private slots:
void browse();
private:
QLineEdit *_edit;
#ifdef Q_OS_WIN32
QPushButton *_button;
#else // Q_OS_WIN32
QToolButton *_button;
#endif // Q_OS_WIN32
};
#endif // DIRSELECTWIDGET_H

View File

@ -26,7 +26,7 @@ ElevationGraphItem::ElevationGraphItem(const Graph &graph, GraphType type,
}
}
QString ElevationGraphItem::info() const
ToolTip ElevationGraphItem::info() const
{
ToolTip tt;
qreal scale = (_units == Metric) ? 1.0 : M2FT;
@ -42,6 +42,5 @@ QString ElevationGraphItem::info() const
tt.insert(tr("Minimum"), l.toString(min() * scale, 'f', 0)
+ UNIT_SPACE + su);
return tt.toString();
return tt;
}

View File

@ -18,7 +18,7 @@ public:
qreal max() const {return _max;}
qreal min() const {return _min;}
QString info() const;
ToolTip info() const;
private:
qreal _ascent, _descent, _min, _max;

View File

@ -7,8 +7,8 @@ FileBrowser::FileBrowser(QObject *parent) : QObject(parent)
{
_watcher = new QFileSystemWatcher(this);
connect(_watcher, SIGNAL(directoryChanged(const QString &)), this,
SLOT(reloadDirectory(const QString &)));
connect(_watcher, &QFileSystemWatcher::directoryChanged, this,
&FileBrowser::reloadDirectory);
_index = -1;
}
@ -83,8 +83,10 @@ QString FileBrowser::first()
void FileBrowser::reloadDirectory(const QString &path)
{
QDir dir(path);
QFileInfo current = _files.at(_index);
QFileInfo current = (_index >= 0) ? _files.at(_index) : QFileInfo();
_files = dir.entryInfoList(_filter, QDir::Files);
_index = _files.empty() ? -1 : _files.indexOf(current);
emit listChanged();
}

View File

@ -25,6 +25,9 @@ public:
bool isLast() const;
bool isFirst() const;
signals:
void listChanged();
private slots:
void reloadDirectory(const QString &path);

View File

@ -21,7 +21,7 @@ FileSelectWidget::FileSelectWidget(QWidget *parent) : QWidget(parent)
_button = new QToolButton();
_button->setText("...");
#endif // Q_OS_WIN32
connect(_button, SIGNAL(clicked()), this, SLOT(browse()));
connect(_button, &QToolButton::clicked, this, &FileSelectWidget::browse);
QHBoxLayout *layout = new QHBoxLayout();
layout->setContentsMargins(QMargins());

181
src/GUI/flowlayout.cpp Normal file
View File

@ -0,0 +1,181 @@
#include <QtWidgets>
#include "flowlayout.h"
struct FlowLayoutItem
{
FlowLayoutItem() : item(0) {}
FlowLayoutItem(QLayoutItem *item, int x, int y) : item(item), pos(x, y) {}
QLayoutItem *item;
QPoint pos;
};
FlowLayout::FlowLayout(QWidget *parent, int margin, int hSpacing, int vSpacing)
: QLayout(parent), _hSpace(hSpacing), _vSpace(vSpacing)
{
setContentsMargins(margin, margin, margin, margin);
}
FlowLayout::FlowLayout(int margin, int hSpacing, int vSpacing)
: _hSpace(hSpacing), _vSpace(vSpacing)
{
setContentsMargins(margin, margin, margin, margin);
}
FlowLayout::~FlowLayout()
{
qDeleteAll(_items);
}
void FlowLayout::addItem(QLayoutItem *item)
{
_items.append(item);
}
int FlowLayout::horizontalSpacing() const
{
return (_hSpace >= 0)
? _hSpace
: smartSpacing(QStyle::PM_LayoutHorizontalSpacing);
}
int FlowLayout::verticalSpacing() const
{
return (_vSpace >= 0)
? _vSpace
: smartSpacing(QStyle::PM_LayoutVerticalSpacing);
}
int FlowLayout::count() const
{
return _items.size();
}
QLayoutItem *FlowLayout::itemAt(int index) const
{
return _items.value(index);
}
QLayoutItem *FlowLayout::takeAt(int index)
{
if (index >= 0 && index < _items.size())
return _items.takeAt(index);
return 0;
}
Qt::Orientations FlowLayout::expandingDirections() const
{
return {};
}
bool FlowLayout::hasHeightForWidth() const
{
return true;
}
int FlowLayout::heightForWidth(int width) const
{
int height = doLayout(QRect(0, 0, width, 0), true);
return height;
}
void FlowLayout::setGeometry(const QRect &rect)
{
QLayout::setGeometry(rect);
doLayout(rect, false);
}
QSize FlowLayout::sizeHint() const
{
return minimumSize();
}
QSize FlowLayout::minimumSize() const
{
QSize size;
for (int i = 0; i < _items.size(); i++)
size = size.expandedTo(_items.at(i)->minimumSize());
const QMargins margins = contentsMargins();
size += QSize(margins.left() + margins.right(), margins.top()
+ margins.bottom());
return size;
}
int FlowLayout::doLayout(const QRect &rect, bool testOnly) const
{
int left, top, right, bottom;
getContentsMargins(&left, &top, &right, &bottom);
QRect effectiveRect = rect.adjusted(+left, +top, -right, -bottom);
int x = effectiveRect.x();
int y = effectiveRect.y();
int lineHeight = 0;
QVector<QVector<FlowLayoutItem>> rows;
for (int i = 0; i < _items.size(); i++) {
QLayoutItem *item = _items.at(i);
const QWidget *wid = item->widget();
int spaceX = horizontalSpacing();
if (spaceX == -1)
spaceX = wid->style()->layoutSpacing(QSizePolicy::PushButton,
QSizePolicy::PushButton, Qt::Horizontal);
int spaceY = verticalSpacing();
if (spaceY == -1)
spaceY = wid->style()->layoutSpacing(QSizePolicy::PushButton,
QSizePolicy::PushButton, Qt::Vertical);
int nextX = x + item->sizeHint().width() + spaceX;
if (nextX - spaceX > effectiveRect.right() && lineHeight > 0) {
x = effectiveRect.x();
y = y + lineHeight + spaceY;
nextX = x + item->sizeHint().width() + spaceX;
lineHeight = 0;
rows.append(QVector<FlowLayoutItem>());
}
if (rows.isEmpty())
rows.append(QVector<FlowLayoutItem>());
rows.last().append(FlowLayoutItem(item, x, y));
x = nextX;
lineHeight = qMax(lineHeight, item->sizeHint().height());
}
if (!testOnly) {
for (int i = 0; i < rows.size(); i++) {
const FlowLayoutItem &li = rows.at(i).last();
int width = li.item->sizeHint().width() + li.pos.x()
- effectiveRect.x();
int offset = (effectiveRect.width() - width) / 2;
int height = 0;
for (int j = 0; j < rows.at(i).size(); j++)
height = qMax(rows.at(i).at(j).item->sizeHint().height(), height);
for (int j = 0; j < rows.at(i).size(); j++) {
QLayoutItem *item = rows.at(i).at(j).item;
const QPoint &p = rows.at(i).at(j).pos;
QSize sh(item->sizeHint());
item->setGeometry(QRect(QPoint(p.x() + offset, p.y() + height
- sh.height()), sh));
}
}
}
return y + lineHeight - rect.y() + bottom;
}
int FlowLayout::smartSpacing(QStyle::PixelMetric pm) const
{
QObject *parent = this->parent();
if (!parent)
return -1;
else if (parent->isWidgetType()) {
QWidget *pw = static_cast<QWidget *>(parent);
return pw->style()->pixelMetric(pm, 0, pw);
} else
return static_cast<QLayout *>(parent)->spacing();
}

38
src/GUI/flowlayout.h Normal file
View File

@ -0,0 +1,38 @@
#ifndef FLOWLAYOUT_H
#define FLOWLAYOUT_H
#include <QLayout>
#include <QRect>
#include <QStyle>
class FlowLayout : public QLayout
{
public:
FlowLayout(QWidget *parent, int margin = -1, int hSpacing = -1,
int vSpacing = -1);
FlowLayout(int margin = -1, int hSpacing = -1, int vSpacing = -1);
~FlowLayout();
void addItem(QLayoutItem *item);
int horizontalSpacing() const;
int verticalSpacing() const;
Qt::Orientations expandingDirections() const;
bool hasHeightForWidth() const;
int heightForWidth(int) const;
int count() const;
QLayoutItem *itemAt(int index) const;
QSize minimumSize() const;
void setGeometry(const QRect &rect);
QSize sizeHint() const;
QLayoutItem *takeAt(int index);
private:
int doLayout(const QRect &rect, bool testOnly) const;
int smartSpacing(QStyle::PixelMetric pm) const;
QList<QLayoutItem *> _items;
int _hSpace;
int _vSpace;
};
#endif // FLOWLAYOUT_H

View File

@ -27,7 +27,7 @@ GearRatioGraphItem::GearRatioGraphItem(const Graph &graph, GraphType type,
_top = key;
}
QString GearRatioGraphItem::info() const
ToolTip GearRatioGraphItem::info() const
{
ToolTip tt;
QLocale l(QLocale::system());
@ -36,5 +36,5 @@ QString GearRatioGraphItem::info() const
tt.insert(tr("Maximum"), l.toString(max(), 'f', 2));
tt.insert(tr("Most used"), l.toString(top(), 'f', 2));
return tt.toString();
return tt;
}

View File

@ -15,7 +15,7 @@ public:
qreal top() const {return _top;}
const QMap<qreal, qreal> &map() const {return _map;}
QString info() const;
ToolTip info() const;
private:
QMap<qreal, qreal> _map;

View File

@ -3,13 +3,14 @@
#include <QGraphicsScene>
#include <QGraphicsItem>
#include "tooltip.h"
class GraphicsItem : public QGraphicsItem
{
public:
GraphicsItem(QGraphicsItem *parent = 0) : QGraphicsItem(parent) {}
virtual QString info() const = 0;
virtual ToolTip info() const = 0;
int type() const {return QGraphicsItem::UserType + 1;}
};

View File

@ -16,7 +16,7 @@ public:
const QColor &color, Qt::PenStyle style, QGraphicsItem *parent = 0);
virtual ~GraphItem() {}
virtual QString info() const = 0;
virtual ToolTip info() const = 0;
QPainterPath shape() const {return _shape;}
QRectF boundingRect() const {return _shape.boundingRect();}

View File

@ -56,8 +56,8 @@ GraphView::GraphView(QWidget *parent)
_message->setBrush(QPalette().brush(QPalette::Disabled,
QPalette::WindowText));
connect(_slider, SIGNAL(positionChanged(const QPointF&)), this,
SLOT(emitSliderPositionChanged(const QPointF&)));
connect(_slider, &SliderItem::positionChanged, this,
&GraphView::emitSliderPositionChanged);
_width = 1;

View File

@ -26,11 +26,13 @@
#include <QStyle>
#include <QTabBar>
#include "common/programpaths.h"
#include "common/downloader.h"
#include "data/data.h"
#include "data/poi.h"
#include "data/demloader.h"
#include "map/maplist.h"
#include "map/emptymap.h"
#include "map/downloader.h"
#include "map/crs.h"
#include "icons.h"
#include "keys.h"
#include "settings.h"
@ -61,6 +63,8 @@ GUI::GUI()
TreeNode<POIAction*> poiActions;
_poi = new POI(this);
_dem = new DEMLoader(ProgramPaths::demDir(true), this);
connect(_dem, &DEMLoader::finished, this, &GUI::demLoaded);
createMapView();
createGraphTabs();
@ -95,12 +99,12 @@ GUI::GUI()
_movingTime = 0;
_lastTab = 0;
_dataDir = QDir::homePath();
_mapDir = QDir::homePath();
_poiDir = QDir::homePath();
readSettings();
_dataDir = _options.dataPath;
_mapDir = _options.mapsPath;
_poiDir = _options.poiPath;
updateGraphTabs();
updateStatusBarInfo();
}
@ -109,20 +113,22 @@ void GUI::createBrowser()
{
_browser = new FileBrowser(this);
_browser->setFilter(Data::filter());
connect(_browser, &FileBrowser::listChanged, this,
&GUI::updateNavigationActions);
}
TreeNode<MapAction*> GUI::createMapActions()
{
_mapsActionGroup = new QActionGroup(this);
_mapsActionGroup->setExclusive(true);
connect(_mapsActionGroup, SIGNAL(triggered(QAction*)), this,
SLOT(mapChanged(QAction*)));
connect(_mapsActionGroup, &QActionGroup::triggered, this, &GUI::mapChanged);
QString mapDir(ProgramPaths::mapDir());
if (mapDir.isNull())
return TreeNode<MapAction*>();
TreeNode<Map*> maps(MapList::loadMaps(mapDir));
TreeNode<Map*> maps(MapList::loadMaps(mapDir,
CRS::projection(_options.inputProjection)));
return createMapActionsNode(maps);
}
@ -137,7 +143,7 @@ TreeNode<MapAction*> GUI::createMapActionsNode(const TreeNode<Map*> &node)
Map *map = node.items().at(i);
if (map->isValid()) {
MapAction *a = new MapAction(map, _mapsActionGroup);
connect(a, SIGNAL(loaded()), this, SLOT(mapInitialized()));
connect(a, &MapAction::loaded, this, &GUI::mapInitialized);
tree.addItem(a);
} else {
qWarning("%s: %s", qPrintable(map->path()),
@ -169,8 +175,8 @@ TreeNode<POIAction *> GUI::createPOIActions()
{
_poisActionGroup = new QActionGroup(this);
_poisActionGroup->setExclusive(false);
connect(_poisActionGroup, SIGNAL(triggered(QAction*)), this,
SLOT(poiFileChecked(QAction*)));
connect(_poisActionGroup, &QActionGroup::triggered, this,
&GUI::poiFileChecked);
TreeNode<QString> poiFiles;
QString poiDir(ProgramPaths::poiDir());
@ -209,64 +215,65 @@ void GUI::createActions(TreeNode<MapAction*> &mapActions,
_exitAction = new QAction(QIcon(QUIT_ICON), tr("Quit"), this);
_exitAction->setShortcut(QUIT_SHORTCUT);
_exitAction->setMenuRole(QAction::QuitRole);
connect(_exitAction, SIGNAL(triggered()), this, SLOT(close()));
connect(_exitAction, &QAction::triggered, this, &GUI::close);
addAction(_exitAction);
// Help & About
_pathsAction = new QAction(tr("Paths"), this);
_pathsAction->setMenuRole(QAction::NoRole);
connect(_pathsAction, SIGNAL(triggered()), this, SLOT(paths()));
connect(_pathsAction, &QAction::triggered, this, &GUI::paths);
_keysAction = new QAction(tr("Keyboard controls"), this);
_keysAction->setMenuRole(QAction::NoRole);
connect(_keysAction, SIGNAL(triggered()), this, SLOT(keys()));
connect(_keysAction, &QAction::triggered, this, &GUI::keys);
_aboutAction = new QAction(QIcon(APP_ICON), tr("About GPXSee"), this);
_aboutAction->setMenuRole(QAction::AboutRole);
connect(_aboutAction, SIGNAL(triggered()), this, SLOT(about()));
connect(_aboutAction, &QAction::triggered, this, &GUI::about);
// File actions
_openFileAction = new QAction(QIcon(OPEN_FILE_ICON), tr("Open..."), this);
_openFileAction->setMenuRole(QAction::NoRole);
_openFileAction->setShortcut(OPEN_SHORTCUT);
connect(_openFileAction, SIGNAL(triggered()), this, SLOT(openFile()));
connect(_openFileAction, &QAction::triggered, this,
QOverload<>::of(&GUI::openFile));
addAction(_openFileAction);
_printFileAction = new QAction(QIcon(PRINT_FILE_ICON), tr("Print..."),
this);
_printFileAction->setMenuRole(QAction::NoRole);
_printFileAction->setActionGroup(_fileActionGroup);
connect(_printFileAction, SIGNAL(triggered()), this, SLOT(printFile()));
connect(_printFileAction, &QAction::triggered, this, &GUI::printFile);
addAction(_printFileAction);
_exportPDFFileAction = new QAction(QIcon(EXPORT_FILE_ICON),
tr("Export to PDF..."), this);
_exportPDFFileAction->setMenuRole(QAction::NoRole);
_exportPDFFileAction->setShortcut(PDF_EXPORT_SHORTCUT);
_exportPDFFileAction->setActionGroup(_fileActionGroup);
connect(_exportPDFFileAction, SIGNAL(triggered()), this, SLOT(exportPDFFile()));
connect(_exportPDFFileAction, &QAction::triggered, this, &GUI::exportPDFFile);
addAction(_exportPDFFileAction);
_exportPNGFileAction = new QAction(QIcon(EXPORT_FILE_ICON),
tr("Export to PNG..."), this);
_exportPNGFileAction->setMenuRole(QAction::NoRole);
_exportPNGFileAction->setShortcut(PNG_EXPORT_SHORTCUT);
_exportPNGFileAction->setActionGroup(_fileActionGroup);
connect(_exportPNGFileAction, SIGNAL(triggered()), this, SLOT(exportPNGFile()));
connect(_exportPNGFileAction, &QAction::triggered, this, &GUI::exportPNGFile);
addAction(_exportPNGFileAction);
_closeFileAction = new QAction(QIcon(CLOSE_FILE_ICON), tr("Close"), this);
_closeFileAction->setMenuRole(QAction::NoRole);
_closeFileAction->setShortcut(CLOSE_SHORTCUT);
_closeFileAction->setActionGroup(_fileActionGroup);
connect(_closeFileAction, SIGNAL(triggered()), this, SLOT(closeAll()));
connect(_closeFileAction, &QAction::triggered, this, &GUI::closeAll);
addAction(_closeFileAction);
_reloadFileAction = new QAction(QIcon(RELOAD_FILE_ICON), tr("Reload"),
this);
_reloadFileAction->setMenuRole(QAction::NoRole);
_reloadFileAction->setShortcut(RELOAD_SHORTCUT);
_reloadFileAction->setActionGroup(_fileActionGroup);
connect(_reloadFileAction, SIGNAL(triggered()), this, SLOT(reloadFiles()));
connect(_reloadFileAction, &QAction::triggered, this, &GUI::reloadFiles);
addAction(_reloadFileAction);
_statisticsAction = new QAction(tr("Statistics..."), this);
_statisticsAction->setMenuRole(QAction::NoRole);
_statisticsAction->setShortcut(STATISTICS_SHORTCUT);
_statisticsAction->setActionGroup(_fileActionGroup);
connect(_statisticsAction, SIGNAL(triggered()), this, SLOT(statistics()));
connect(_statisticsAction, &QAction::triggered, this, &GUI::statistics);
addAction(_statisticsAction);
// POI actions
@ -274,33 +281,33 @@ void GUI::createActions(TreeNode<MapAction*> &mapActions,
_openPOIAction = new QAction(QIcon(OPEN_FILE_ICON), tr("Load POI file..."),
this);
_openPOIAction->setMenuRole(QAction::NoRole);
connect(_openPOIAction, SIGNAL(triggered()), this, SLOT(openPOIFile()));
connect(_openPOIAction, &QAction::triggered, this,
QOverload<>::of(&GUI::openPOIFile));
_selectAllPOIAction = new QAction(tr("Select all files"), this);
_selectAllPOIAction->setMenuRole(QAction::NoRole);
_selectAllPOIAction->setEnabled(!_poisActionGroup->actions().isEmpty());
connect(_selectAllPOIAction, SIGNAL(triggered()), this,
SLOT(selectAllPOIs()));
connect(_selectAllPOIAction, &QAction::triggered, this,
&GUI::selectAllPOIs);
_unselectAllPOIAction = new QAction(tr("Unselect all files"), this);
_unselectAllPOIAction->setMenuRole(QAction::NoRole);
_unselectAllPOIAction->setEnabled(_selectAllPOIAction->isEnabled());
connect(_unselectAllPOIAction, SIGNAL(triggered()), this,
SLOT(unselectAllPOIs()));
connect(_unselectAllPOIAction, &QAction::triggered, this,
&GUI::unselectAllPOIs);
_overlapPOIAction = new QAction(tr("Overlap POIs"), this);
_overlapPOIAction->setMenuRole(QAction::NoRole);
_overlapPOIAction->setCheckable(true);
connect(_overlapPOIAction, SIGNAL(triggered(bool)), _mapView,
SLOT(showOverlappedPOIs(bool)));
connect(_overlapPOIAction, &QAction::triggered, _mapView,
&MapView::showOverlappedPOIs);
_showPOILabelsAction = new QAction(tr("Show POI labels"), this);
_showPOILabelsAction->setMenuRole(QAction::NoRole);
_showPOILabelsAction->setCheckable(true);
connect(_showPOILabelsAction, SIGNAL(triggered(bool)), _mapView,
SLOT(showPOILabels(bool)));
connect(_showPOILabelsAction, &QAction::triggered, _mapView,
&MapView::showPOILabels);
_showPOIAction = new QAction(QIcon(SHOW_POI_ICON), tr("Show POIs"), this);
_showPOIAction->setMenuRole(QAction::NoRole);
_showPOIAction->setCheckable(true);
_showPOIAction->setShortcut(SHOW_POI_SHORTCUT);
connect(_showPOIAction, SIGNAL(triggered(bool)), _mapView,
SLOT(showPOI(bool)));
connect(_showPOIAction, &QAction::triggered, _mapView, &MapView::showPOI);
addAction(_showPOIAction);
// Map actions
@ -311,77 +318,76 @@ void GUI::createActions(TreeNode<MapAction*> &mapActions,
_showMapAction->setMenuRole(QAction::NoRole);
_showMapAction->setCheckable(true);
_showMapAction->setShortcut(SHOW_MAP_SHORTCUT);
connect(_showMapAction, SIGNAL(triggered(bool)), _mapView,
SLOT(showMap(bool)));
connect(_showMapAction, &QAction::triggered, _mapView,
&MapView::showMap);
addAction(_showMapAction);
_loadMapAction = new QAction(QIcon(OPEN_FILE_ICON), tr("Load map..."),
this);
_loadMapAction->setMenuRole(QAction::NoRole);
connect(_loadMapAction, SIGNAL(triggered()), this, SLOT(loadMap()));
connect(_loadMapAction, &QAction::triggered, this,
QOverload<>::of(&GUI::loadMap));
_loadMapDirAction = new QAction(QIcon(OPEN_FILE_ICON),
tr("Load map directory..."), this);
_loadMapDirAction->setMenuRole(QAction::NoRole);
connect(_loadMapDirAction, SIGNAL(triggered()), this, SLOT(loadMapDir()));
connect(_loadMapDirAction, &QAction::triggered, this, &GUI::loadMapDir);
_clearMapCacheAction = new QAction(tr("Clear tile cache"), this);
_clearMapCacheAction->setEnabled(false);
_clearMapCacheAction->setMenuRole(QAction::NoRole);
connect(_clearMapCacheAction, SIGNAL(triggered()), this,
SLOT(clearMapCache()));
connect(_clearMapCacheAction, &QAction::triggered, this,
&GUI::clearMapCache);
_nextMapAction = new QAction(tr("Next map"), this);
_nextMapAction->setMenuRole(QAction::NoRole);
_nextMapAction->setShortcut(NEXT_MAP_SHORTCUT);
connect(_nextMapAction, SIGNAL(triggered()), this, SLOT(nextMap()));
connect(_nextMapAction, &QAction::triggered, this, &GUI::nextMap);
addAction(_nextMapAction);
_prevMapAction = new QAction(tr("Next map"), this);
_prevMapAction->setMenuRole(QAction::NoRole);
_prevMapAction->setShortcut(PREV_MAP_SHORTCUT);
connect(_prevMapAction, SIGNAL(triggered()), this, SLOT(prevMap()));
connect(_prevMapAction, &QAction::triggered, this, &GUI::prevMap);
addAction(_prevMapAction);
_showCoordinatesAction = new QAction(tr("Show cursor coordinates"), this);
_showCoordinatesAction->setMenuRole(QAction::NoRole);
_showCoordinatesAction->setCheckable(true);
connect(_showCoordinatesAction, SIGNAL(triggered(bool)), _mapView,
SLOT(showCoordinates(bool)));
connect(_showCoordinatesAction, &QAction::triggered, _mapView,
&MapView::showCoordinates);
// Data actions
_showTracksAction = new QAction(tr("Show tracks"), this);
_showTracksAction->setMenuRole(QAction::NoRole);
_showTracksAction->setCheckable(true);
connect(_showTracksAction, SIGNAL(triggered(bool)), this,
SLOT(showTracks(bool)));
_showTracksAction->setShortcut(SHOW_TRACKS_SHORTCUT);
connect(_showTracksAction, &QAction::triggered, this, &GUI::showTracks);
_showRoutesAction = new QAction(tr("Show routes"), this);
_showRoutesAction->setMenuRole(QAction::NoRole);
_showRoutesAction->setCheckable(true);
connect(_showRoutesAction, SIGNAL(triggered(bool)), this,
SLOT(showRoutes(bool)));
connect(_showRoutesAction, &QAction::triggered, this, &GUI::showRoutes);
_showWaypointsAction = new QAction(tr("Show waypoints"), this);
_showWaypointsAction->setMenuRole(QAction::NoRole);
_showWaypointsAction->setCheckable(true);
connect(_showWaypointsAction, SIGNAL(triggered(bool)), _mapView,
SLOT(showWaypoints(bool)));
connect(_showWaypointsAction, &QAction::triggered, this,
&GUI::showWaypoints);
_showAreasAction = new QAction(tr("Show areas"), this);
_showAreasAction->setMenuRole(QAction::NoRole);
_showAreasAction->setCheckable(true);
connect(_showAreasAction, SIGNAL(triggered(bool)), _mapView,
SLOT(showAreas(bool)));
connect(_showAreasAction, &QAction::triggered, this, &GUI::showAreas);
_showWaypointLabelsAction = new QAction(tr("Waypoint labels"), this);
_showWaypointLabelsAction->setMenuRole(QAction::NoRole);
_showWaypointLabelsAction->setCheckable(true);
connect(_showWaypointLabelsAction, SIGNAL(triggered(bool)), _mapView,
SLOT(showWaypointLabels(bool)));
connect(_showWaypointLabelsAction, &QAction::triggered, _mapView,
&MapView::showWaypointLabels);
_showRouteWaypointsAction = new QAction(tr("Route waypoints"), this);
_showRouteWaypointsAction->setMenuRole(QAction::NoRole);
_showRouteWaypointsAction->setCheckable(true);
connect(_showRouteWaypointsAction, SIGNAL(triggered(bool)), _mapView,
SLOT(showRouteWaypoints(bool)));
connect(_showRouteWaypointsAction, &QAction::triggered, _mapView,
&MapView::showRouteWaypoints);
_showTicksAction = new QAction(tr("km/mi markers"), this);
_showTicksAction->setMenuRole(QAction::NoRole);
_showTicksAction->setCheckable(true);
connect(_showTicksAction, SIGNAL(triggered(bool)), _mapView,
SLOT(showTicks(bool)));
connect(_showTicksAction, &QAction::triggered, _mapView,
&MapView::showTicks);
QActionGroup *markerInfoGroup = new QActionGroup(this);
connect(markerInfoGroup, SIGNAL(triggered(QAction*)), this,
SLOT(showPathMarkerInfo(QAction*)));
connect(markerInfoGroup, &QActionGroup::triggered, this,
&GUI::showPathMarkerInfo);
_hideMarkersAction = new QAction(tr("Do not show"), this);
_hideMarkersAction->setMenuRole(QAction::NoRole);
_hideMarkersAction->setCheckable(true);
@ -399,14 +405,20 @@ void GUI::createActions(TreeNode<MapAction*> &mapActions,
_showMarkerCoordinatesAction->setCheckable(true);
_showMarkerCoordinatesAction->setActionGroup(markerInfoGroup);
// DEM actions
_downloadDEMAction = new QAction(tr("Download DEM data"), this);
_downloadDEMAction->setMenuRole(QAction::NoRole);
_downloadDEMAction->setEnabled(false);
_downloadDEMAction->setShortcut(DOWNLOAD_DEM_SHORTCUT);
connect(_downloadDEMAction, &QAction::triggered, this, &GUI::downloadDEM);
// Graph actions
_showGraphsAction = new QAction(QIcon(SHOW_GRAPHS_ICON), tr("Show graphs"),
this);
_showGraphsAction->setMenuRole(QAction::NoRole);
_showGraphsAction->setCheckable(true);
_showGraphsAction->setShortcut(SHOW_GRAPHS_SHORTCUT);
connect(_showGraphsAction, SIGNAL(triggered(bool)), this,
SLOT(showGraphs(bool)));
connect(_showGraphsAction, &QAction::triggered, this, &GUI::showGraphs);
addAction(_showGraphsAction);
ag = new QActionGroup(this);
ag->setExclusive(true);
@ -414,117 +426,110 @@ void GUI::createActions(TreeNode<MapAction*> &mapActions,
_distanceGraphAction->setMenuRole(QAction::NoRole);
_distanceGraphAction->setCheckable(true);
_distanceGraphAction->setActionGroup(ag);
connect(_distanceGraphAction, SIGNAL(triggered()), this,
SLOT(setDistanceGraph()));
connect(_distanceGraphAction, &QAction::triggered, this,
&GUI::setDistanceGraph);
addAction(_distanceGraphAction);
_timeGraphAction = new QAction(tr("Time"), this);
_timeGraphAction->setMenuRole(QAction::NoRole);
_timeGraphAction->setCheckable(true);
_timeGraphAction->setActionGroup(ag);
connect(_timeGraphAction, SIGNAL(triggered()), this,
SLOT(setTimeGraph()));
connect(_timeGraphAction, &QAction::triggered, this, &GUI::setTimeGraph);
addAction(_timeGraphAction);
_showGraphGridAction = new QAction(tr("Show grid"), this);
_showGraphGridAction->setMenuRole(QAction::NoRole);
_showGraphGridAction->setCheckable(true);
connect(_showGraphGridAction, SIGNAL(triggered(bool)), this,
SLOT(showGraphGrids(bool)));
connect(_showGraphGridAction, &QAction::triggered, this,
&GUI::showGraphGrids);
_showGraphSliderInfoAction = new QAction(tr("Show slider info"), this);
_showGraphSliderInfoAction->setMenuRole(QAction::NoRole);
_showGraphSliderInfoAction->setCheckable(true);
connect(_showGraphSliderInfoAction, SIGNAL(triggered(bool)), this,
SLOT(showGraphSliderInfo(bool)));
connect(_showGraphSliderInfoAction, &QAction::triggered, this,
&GUI::showGraphSliderInfo);
// Settings actions
_showToolbarsAction = new QAction(tr("Show toolbars"), this);
_showToolbarsAction->setMenuRole(QAction::NoRole);
_showToolbarsAction->setCheckable(true);
connect(_showToolbarsAction, SIGNAL(triggered(bool)), this,
SLOT(showToolbars(bool)));
connect(_showToolbarsAction, &QAction::triggered, this, &GUI::showToolbars);
ag = new QActionGroup(this);
ag->setExclusive(true);
_totalTimeAction = new QAction(tr("Total time"), this);
_totalTimeAction->setMenuRole(QAction::NoRole);
_totalTimeAction->setCheckable(true);
_totalTimeAction->setActionGroup(ag);
connect(_totalTimeAction, SIGNAL(triggered()), this,
SLOT(setTotalTime()));
connect(_totalTimeAction, &QAction::triggered, this, &GUI::setTotalTime);
_movingTimeAction = new QAction(tr("Moving time"), this);
_movingTimeAction->setMenuRole(QAction::NoRole);
_movingTimeAction->setCheckable(true);
_movingTimeAction->setActionGroup(ag);
connect(_movingTimeAction, SIGNAL(triggered()), this,
SLOT(setMovingTime()));
connect(_movingTimeAction, &QAction::triggered, this, &GUI::setMovingTime);
ag = new QActionGroup(this);
ag->setExclusive(true);
_metricUnitsAction = new QAction(tr("Metric"), this);
_metricUnitsAction->setMenuRole(QAction::NoRole);
_metricUnitsAction->setCheckable(true);
_metricUnitsAction->setActionGroup(ag);
connect(_metricUnitsAction, SIGNAL(triggered()), this,
SLOT(setMetricUnits()));
connect(_metricUnitsAction, &QAction::triggered, this, &GUI::setMetricUnits);
_imperialUnitsAction = new QAction(tr("Imperial"), this);
_imperialUnitsAction->setMenuRole(QAction::NoRole);
_imperialUnitsAction->setCheckable(true);
_imperialUnitsAction->setActionGroup(ag);
connect(_imperialUnitsAction, SIGNAL(triggered()), this,
SLOT(setImperialUnits()));
connect(_imperialUnitsAction, &QAction::triggered, this,
&GUI::setImperialUnits);
_nauticalUnitsAction = new QAction(tr("Nautical"), this);
_nauticalUnitsAction->setMenuRole(QAction::NoRole);
_nauticalUnitsAction->setCheckable(true);
_nauticalUnitsAction->setActionGroup(ag);
connect(_nauticalUnitsAction, SIGNAL(triggered()), this,
SLOT(setNauticalUnits()));
connect(_nauticalUnitsAction, &QAction::triggered, this,
&GUI::setNauticalUnits);
ag = new QActionGroup(this);
ag->setExclusive(true);
_decimalDegreesAction = new QAction(tr("Decimal degrees (DD)"), this);
_decimalDegreesAction->setMenuRole(QAction::NoRole);
_decimalDegreesAction->setCheckable(true);
_decimalDegreesAction->setActionGroup(ag);
connect(_decimalDegreesAction, SIGNAL(triggered()), this,
SLOT(setDecimalDegrees()));
connect(_decimalDegreesAction, &QAction::triggered, this,
&GUI::setDecimalDegrees);
_degreesMinutesAction = new QAction(tr("Degrees and decimal minutes (DMM)"),
this);
_degreesMinutesAction->setMenuRole(QAction::NoRole);
_degreesMinutesAction->setCheckable(true);
_degreesMinutesAction->setActionGroup(ag);
connect(_degreesMinutesAction, SIGNAL(triggered()), this,
SLOT(setDegreesMinutes()));
connect(_degreesMinutesAction, &QAction::triggered, this,
&GUI::setDegreesMinutes);
_dmsAction = new QAction(tr("Degrees, minutes, seconds (DMS)"), this);
_dmsAction->setMenuRole(QAction::NoRole);
_dmsAction->setCheckable(true);
_dmsAction->setActionGroup(ag);
connect(_dmsAction, SIGNAL(triggered()), this, SLOT(setDMS()));
connect(_dmsAction, &QAction::triggered, this, &GUI::setDMS);
_fullscreenAction = new QAction(QIcon(FULLSCREEN_ICON),
tr("Fullscreen mode"), this);
_fullscreenAction->setMenuRole(QAction::NoRole);
_fullscreenAction->setCheckable(true);
_fullscreenAction->setShortcut(FULLSCREEN_SHORTCUT);
connect(_fullscreenAction, SIGNAL(triggered(bool)), this,
SLOT(showFullscreen(bool)));
connect(_fullscreenAction, &QAction::triggered, this, &GUI::showFullscreen);
addAction(_fullscreenAction);
_openOptionsAction = new QAction(tr("Options..."), this);
_openOptionsAction->setMenuRole(QAction::PreferencesRole);
connect(_openOptionsAction, SIGNAL(triggered()), this,
SLOT(openOptions()));
connect(_openOptionsAction, &QAction::triggered, this, &GUI::openOptions);
// Navigation actions
_nextAction = new QAction(QIcon(NEXT_FILE_ICON), tr("Next"), this);
_nextAction->setActionGroup(_navigationActionGroup);
_nextAction->setMenuRole(QAction::NoRole);
connect(_nextAction, SIGNAL(triggered()), this, SLOT(next()));
connect(_nextAction, &QAction::triggered, this, &GUI::next);
_prevAction = new QAction(QIcon(PREV_FILE_ICON), tr("Previous"), this);
_prevAction->setMenuRole(QAction::NoRole);
_prevAction->setActionGroup(_navigationActionGroup);
connect(_prevAction, SIGNAL(triggered()), this, SLOT(prev()));
connect(_prevAction, &QAction::triggered, this, &GUI::prev);
_lastAction = new QAction(QIcon(LAST_FILE_ICON), tr("Last"), this);
_lastAction->setMenuRole(QAction::NoRole);
_lastAction->setActionGroup(_navigationActionGroup);
connect(_lastAction, SIGNAL(triggered()), this, SLOT(last()));
connect(_lastAction, &QAction::triggered, this, &GUI::last);
_firstAction = new QAction(QIcon(FIRST_FILE_ICON), tr("First"), this);
_firstAction->setMenuRole(QAction::NoRole);
_firstAction->setActionGroup(_navigationActionGroup);
connect(_firstAction, SIGNAL(triggered()), this, SLOT(first()));
connect(_firstAction, &QAction::triggered, this, &GUI::first);
}
void GUI::createMapNodeMenu(const TreeNode<MapAction*> &node, QMenu *menu)
@ -590,18 +595,6 @@ void GUI::createMenus(const TreeNode<MapAction*> &mapActions,
graphMenu->addSeparator();
graphMenu->addAction(_showGraphsAction);
_poiMenu = menuBar()->addMenu(tr("&POI"));
createPOINodeMenu(poiActions, _poiMenu);
_poisEnd = _poiMenu->addSeparator();
_poiMenu->addAction(_openPOIAction);
_poiMenu->addAction(_selectAllPOIAction);
_poiMenu->addAction(_unselectAllPOIAction);
_poiMenu->addSeparator();
_poiMenu->addAction(_showPOILabelsAction);
_poiMenu->addAction(_overlapPOIAction);
_poiMenu->addSeparator();
_poiMenu->addAction(_showPOIAction);
QMenu *dataMenu = menuBar()->addMenu(tr("&Data"));
dataMenu->addAction(_showWaypointLabelsAction);
dataMenu->addAction(_showRouteWaypointsAction);
@ -617,6 +610,22 @@ void GUI::createMenus(const TreeNode<MapAction*> &mapActions,
dataMenu->addAction(_showAreasAction);
dataMenu->addAction(_showWaypointsAction);
_poiMenu = menuBar()->addMenu(tr("&POI"));
createPOINodeMenu(poiActions, _poiMenu);
_poisEnd = _poiMenu->addSeparator();
_poiMenu->addAction(_openPOIAction);
_poiMenu->addAction(_selectAllPOIAction);
_poiMenu->addAction(_unselectAllPOIAction);
_poiMenu->addSeparator();
_poiMenu->addAction(_showPOILabelsAction);
_poiMenu->addAction(_overlapPOIAction);
_poiMenu->addSeparator();
_poiMenu->addAction(_showPOIAction);
QMenu *demMenu = menuBar()->addMenu(tr("DEM"));
demMenu->addSeparator();
demMenu->addAction(_downloadDEMAction);
QMenu *settingsMenu = menuBar()->addMenu(tr("&Settings"));
QMenu *timeMenu = settingsMenu->addMenu(tr("Time"));
timeMenu->addAction(_totalTimeAction);
@ -657,7 +666,9 @@ void GUI::createToolBars()
_fileToolBar->addAction(_openFileAction);
_fileToolBar->addAction(_reloadFileAction);
_fileToolBar->addAction(_closeFileAction);
#ifndef Q_OS_MAC
_fileToolBar->addAction(_printFileAction);
#endif // Q_OS_MAC
_showToolBar = addToolBar(tr("Show"));
_showToolBar->setObjectName("Show");
@ -697,8 +708,8 @@ void GUI::createGraphTabs()
_graphTabWidget->setDocumentMode(true);
#endif // Q_OS_MAC
connect(_graphTabWidget, SIGNAL(currentChanged(int)), this,
SLOT(graphChanged(int)));
connect(_graphTabWidget, &QTabWidget::currentChanged, this,
&GUI::graphChanged);
_tabs.append(new ElevationGraph(_graphTabWidget));
_tabs.append(new SpeedGraph(_graphTabWidget));
@ -709,8 +720,8 @@ void GUI::createGraphTabs()
_tabs.append(new GearRatioGraph(_graphTabWidget));
for (int i = 0; i < _tabs.size(); i++)
connect(_tabs.at(i), SIGNAL(sliderPositionChanged(qreal)), _mapView,
SLOT(setMarkerPosition(qreal)));
connect(_tabs.at(i), &GraphTab::sliderPositionChanged, _mapView,
&MapView::setMarkerPosition);
}
void GUI::createStatusBar()
@ -859,6 +870,7 @@ bool GUI::loadFile(const QString &fileName, bool silent)
updateStatusBarInfo();
updateWindowTitle();
updateGraphTabs();
updateDEMDownloadAction();
QString error = tr("Error loading data file:") + "\n\n"
+ fileName + "\n\n" + data.errorString();
@ -924,6 +936,8 @@ void GUI::loadData(const Data &data)
pi->setMarkerPosition(gt->sliderPosition());
}
}
updateDEMDownloadAction();
}
void GUI::openPOIFile()
@ -1013,8 +1027,19 @@ void GUI::openOptions()
SET_VIEW_OPTION(pathAntiAliasing, useAntiAliasing);
SET_VIEW_OPTION(useOpenGL, useOpenGL);
SET_VIEW_OPTION(sliderColor, setMarkerColor);
SET_VIEW_OPTION(outputProjection, setOutputProjection);
SET_VIEW_OPTION(inputProjection, setInputProjection);
if (options.hidpiMap != _options.hidpiMap)
_mapView->setDevicePixelRatio(devicePixelRatioF(),
options.hidpiMap ? devicePixelRatioF() : 1.0);
if (options.outputProjection != _options.outputProjection)
_mapView->setOutputProjection(CRS::projection(options.outputProjection));
if (options.inputProjection != _options.inputProjection)
_mapView->setInputProjection(CRS::projection(options.inputProjection));
if (options.timeZone != _options.timeZone) {
_mapView->setTimeZone(options.timeZone.zone());
_dateRange.first = _dateRange.first.toTimeZone(options.timeZone.zone());
_dateRange.second = _dateRange.second.toTimeZone(options.timeZone.zone());
}
SET_TAB_OPTION(palette, setPalette);
SET_TAB_OPTION(graphWidth, setGraphWidth);
@ -1046,6 +1071,15 @@ void GUI::openOptions()
if (options.poiRadius != _options.poiRadius)
_poi->setRadius(options.poiRadius);
if (options.demURL != _options.demURL)
_dem->setUrl(options.demURL);
if (options.demAuthorization != _options.demAuthorization
|| options.demUsername != _options.demUsername
|| options.demPassword != _options.demPassword)
_dem->setAuthorization(options.demAuthorization
? Authorization(options.demUsername, options.demPassword)
: Authorization());
if (options.pixmapCache != _options.pixmapCache)
QPixmapCache::setCacheLimit(options.pixmapCache * 1024);
@ -1054,20 +1088,19 @@ void GUI::openOptions()
if (options.enableHTTP2 != _options.enableHTTP2)
Downloader::enableHTTP2(options.enableHTTP2);
if (options.hidpiMap != _options.hidpiMap)
_mapView->setDevicePixelRatio(devicePixelRatioF(),
options.hidpiMap ? devicePixelRatioF() : 1.0);
if (options.timeZone != _options.timeZone) {
_mapView->setTimeZone(options.timeZone.zone());
_dateRange.first = _dateRange.first.toTimeZone(options.timeZone.zone());
_dateRange.second = _dateRange.second.toTimeZone(options.timeZone.zone());
}
if (options.dataPath != _options.dataPath)
_dataDir = options.dataPath;
if (options.mapsPath != _options.mapsPath)
_mapDir = options.mapsPath;
if (options.poiPath != _options.poiPath)
_poiDir = options.poiPath;
if (reload)
reloadFiles();
_options = options;
updateDEMDownloadAction();
}
void GUI::printFile()
@ -1361,6 +1394,7 @@ void GUI::reloadFiles()
_fileActionGroup->setEnabled(false);
else
_browser->setCurrent(_files.last());
updateDEMDownloadAction();
}
void GUI::closeFiles()
@ -1393,6 +1427,7 @@ void GUI::closeAll()
updateStatusBarInfo();
updateWindowTitle();
updateGraphTabs();
updateDEMDownloadAction();
}
void GUI::showGraphs(bool show)
@ -1452,6 +1487,7 @@ void GUI::showTracks(bool show)
updateStatusBarInfo();
updateGraphTabs();
updateDEMDownloadAction();
}
void GUI::showRoutes(bool show)
@ -1463,6 +1499,19 @@ void GUI::showRoutes(bool show)
updateStatusBarInfo();
updateGraphTabs();
updateDEMDownloadAction();
}
void GUI::showWaypoints(bool show)
{
_mapView->showWaypoints(show);
updateDEMDownloadAction();
}
void GUI::showAreas(bool show)
{
_mapView->showAreas(show);
updateDEMDownloadAction();
}
void GUI::showGraphGrids(bool show)
@ -1553,7 +1602,7 @@ bool GUI::loadMapNode(const TreeNode<Map*> &node, MapAction *&action,
_showMapAction->setEnabled(true);
_clearMapCacheAction->setEnabled(true);
} else
connect(a, SIGNAL(loaded()), this, SLOT(mapLoaded()));
connect(a, &MapAction::loaded, this, &GUI::mapLoaded);
}
} else {
valid = true;
@ -1568,7 +1617,8 @@ bool GUI::loadMapNode(const TreeNode<Map*> &node, MapAction *&action,
bool GUI::loadMap(const QString &fileName, MapAction *&action, bool silent)
{
TreeNode<Map*> maps(MapList::loadMaps(fileName));
TreeNode<Map*> maps(MapList::loadMaps(fileName,
CRS::projection(_options.inputProjection)));
QList<QAction*> existingActions(_mapsActionGroup->actions());
return loadMapNode(maps, action, silent, existingActions);
@ -1637,10 +1687,10 @@ void GUI::loadMapDirNode(const TreeNode<Map *> &node, QList<MapAction*> &actions
_clearMapCacheAction->setEnabled(true);
actions.append(a);
} else
connect(a, SIGNAL(loaded()), this, SLOT(mapLoadedDir()));
}
connect(a, &MapAction::loaded, this, &GUI::mapLoadedDir);
_areaCount++;
_areaCount++;
}
} else {
map = a->data().value<Map*>();
if (map->isReady())
@ -1657,7 +1707,8 @@ void GUI::loadMapDir()
return;
QFileInfo fi(dir);
TreeNode<Map*> maps(MapList::loadMaps(dir));
TreeNode<Map*> maps(MapList::loadMaps(dir,
CRS::projection(_options.inputProjection)));
QList<QAction*> existingActions(_mapsActionGroup->actions());
QList<MapAction*> actions;
QMenu *menu = new QMenu(maps.name());
@ -1683,6 +1734,30 @@ void GUI::clearMapCache()
_mapView->clearMapCache();
}
void GUI::downloadDEM()
{
RectC br(_mapView->boundingRect());
_demRects.append(br);
if (!_dem->loadTiles(br) && _demRects.size() == 1)
demLoaded();
}
void GUI::demLoaded()
{
for (int i = 0; i < _demRects.size(); i++) {
if (!_dem->checkTiles(_demRects.at(i))) {
QMessageBox::warning(this, APP_NAME,
tr("Could not download all required DEM files."));
break;
}
}
DEM::clearCache();
_demRects.clear();
reloadFiles();
}
void GUI::updateStatusBarInfo()
{
if (_files.count() == 0)
@ -1800,21 +1875,10 @@ void GUI::graphChanged(int index)
void GUI::updateNavigationActions()
{
if (_browser->isLast()) {
_nextAction->setEnabled(false);
_lastAction->setEnabled(false);
} else {
_nextAction->setEnabled(true);
_lastAction->setEnabled(true);
}
if (_browser->isFirst()) {
_prevAction->setEnabled(false);
_firstAction->setEnabled(false);
} else {
_prevAction->setEnabled(true);
_firstAction->setEnabled(true);
}
_lastAction->setEnabled(!_browser->isLast());
_nextAction->setEnabled(!_browser->isLast());
_firstAction->setEnabled(!_browser->isFirst());
_prevAction->setEnabled(!_browser->isFirst());
}
bool GUI::updateGraphTabs()
@ -1849,6 +1913,12 @@ bool GUI::updateGraphTabs()
return (hidden != _graphTabWidget->isHidden());
}
void GUI::updateDEMDownloadAction()
{
_downloadDEMAction->setEnabled(!_dem->url().isEmpty()
&& !_dem->checkTiles(_mapView->boundingRect()));
}
void GUI::setTimeType(TimeType type)
{
for (int i = 0; i <_tabs.count(); i++)
@ -2081,6 +2151,9 @@ void GUI::writeSettings()
settings.setValue(SHOW_POI_SETTING, _showPOIAction->isChecked());
if (_overlapPOIAction->isChecked() != OVERLAP_POI_DEFAULT)
settings.setValue(OVERLAP_POI_SETTING, _overlapPOIAction->isChecked());
if (_showPOILabelsAction->isChecked() != SHOW_POI_LABELS_DEFAULT)
settings.setValue(SHOW_POI_LABELS_SETTING,
_showPOILabelsAction->isChecked());
int j = 0;
QList<QAction*> poiActions(_poisActionGroup->actions());
@ -2239,6 +2312,14 @@ void GUI::writeSettings()
settings.setValue(USE_SEGMENTS_SETTING, _options.useSegments);
if (_options.poiRadius != POI_RADIUS_DEFAULT)
settings.setValue(POI_RADIUS_SETTING, _options.poiRadius);
if (_options.demURL != DEM_URL_DEFAULT)
settings.setValue(DEM_URL_SETTING, _options.demURL);
if (_options.demAuthorization != DEM_AUTH_DEFAULT)
settings.setValue(DEM_AUTH_SETTING, _options.demAuthorization);
if (_options.demUsername != DEM_USERNAME_DEFAULT)
settings.setValue(DEM_USERNAME_SETTING, _options.demUsername);
if (_options.demPassword != DEM_PASSWORD_DEFAULT)
settings.setValue(DEM_PASSWORD_SETTING, _options.demPassword);
if (_options.useOpenGL != USE_OPENGL_DEFAULT)
settings.setValue(USE_OPENGL_SETTING, _options.useOpenGL);
if (_options.enableHTTP2 != ENABLE_HTTP2_DEFAULT)
@ -2272,6 +2353,13 @@ void GUI::writeSettings()
settings.setValue(INPUT_PROJECTION_SETTING, _options.inputProjection);
if (_options.hidpiMap != HIDPI_MAP_DEFAULT)
settings.setValue(HIDPI_MAP_SETTING, _options.hidpiMap);
if (_options.dataPath != DATA_PATH_DEFAULT)
settings.setValue(DATA_PATH_SETTING, _options.dataPath);
if (_options.mapsPath != MAPS_PATH_DEFAULT)
settings.setValue(MAPS_PATH_SETTING, _options.mapsPath);
if (_options.poiPath != POI_PATH_DEFAULT)
settings.setValue(POI_PATH_SETTING, _options.poiPath);
settings.endGroup();
}
@ -2359,7 +2447,8 @@ void GUI::readSettings()
_mapView->showOverlappedPOIs(false);
else
_overlapPOIAction->setChecked(true);
if (!settings.value(LABELS_POI_SETTING, LABELS_POI_DEFAULT).toBool())
if (!settings.value(SHOW_POI_LABELS_SETTING, SHOW_POI_LABELS_DEFAULT)
.toBool())
_mapView->showPOILabels(false);
else
_showPOILabelsAction->setChecked(true);
@ -2542,6 +2631,13 @@ void GUI::readSettings()
PAUSE_INTERVAL_DEFAULT).toInt();
_options.poiRadius = settings.value(POI_RADIUS_SETTING, POI_RADIUS_DEFAULT)
.toInt();
_options.demURL = settings.value(DEM_URL_SETTING, DEM_URL_DEFAULT).toString();
_options.demAuthorization = settings.value(DEM_AUTH_SETTING,
DEM_AUTH_DEFAULT).toBool();
_options.demUsername = settings.value(DEM_USERNAME_SETTING,
DEM_USERNAME_DEFAULT).toString();
_options.demPassword = settings.value(DEM_PASSWORD_SETTING,
DEM_PASSWORD_DEFAULT).toString();
_options.useOpenGL = settings.value(USE_OPENGL_SETTING, USE_OPENGL_DEFAULT)
.toBool();
_options.enableHTTP2 = settings.value(ENABLE_HTTP2_SETTING,
@ -2572,8 +2668,14 @@ void GUI::readSettings()
OUTPUT_PROJECTION_DEFAULT).toInt();
_options.inputProjection = settings.value(INPUT_PROJECTION_SETTING,
INPUT_PROJECTION_DEFAULT).toInt();
_options.hidpiMap = settings.value(HIDPI_MAP_SETTING, HIDPI_MAP_SETTING)
_options.hidpiMap = settings.value(HIDPI_MAP_SETTING, HIDPI_MAP_DEFAULT)
.toBool();
_options.dataPath = settings.value(DATA_PATH_SETTING, DATA_PATH_DEFAULT)
.toString();
_options.mapsPath = settings.value(MAPS_PATH_SETTING, MAPS_PATH_DEFAULT)
.toString();
_options.poiPath = settings.value(POI_PATH_SETTING, POI_PATH_DEFAULT)
.toString();
_mapView->setPalette(_options.palette);
_mapView->setMapOpacity(_options.mapOpacity);
@ -2595,8 +2697,8 @@ void GUI::readSettings()
_mapView->useOpenGL(true);
_mapView->setDevicePixelRatio(devicePixelRatioF(),
_options.hidpiMap ? devicePixelRatioF() : 1.0);
_mapView->setOutputProjection(_options.outputProjection);
_mapView->setInputProjection(_options.inputProjection);
_mapView->setOutputProjection(CRS::projection(_options.outputProjection));
_mapView->setInputProjection(CRS::projection(_options.inputProjection));
_mapView->setTimeZone(_options.timeZone.zone());
for (int i = 0; i < _tabs.count(); i++) {
@ -2630,6 +2732,11 @@ void GUI::readSettings()
_poi->setRadius(_options.poiRadius);
_dem->setUrl(_options.demURL);
if (_options.demAuthorization)
_dem->setAuthorization(Authorization(_options.demUsername,
_options.demPassword));
QPixmapCache::setCacheLimit(_options.pixmapCache * 1024);
settings.endGroup();
@ -2689,10 +2796,9 @@ void GUI::show()
QMainWindow::show();
QWindow *w = windowHandle();
connect(w->screen(), SIGNAL(logicalDotsPerInchChanged(qreal)), this,
SLOT(logicalDotsPerInchChanged(qreal)));
connect(w, SIGNAL(screenChanged(QScreen*)), this,
SLOT(screenChanged(QScreen*)));
connect(w->screen(), &QScreen::logicalDotsPerInchChanged, this,
&GUI::logicalDotsPerInchChanged);
connect(w, &QWindow::screenChanged, this, &GUI::screenChanged);
_mapView->fitContentToSize();
}
@ -2704,8 +2810,8 @@ void GUI::screenChanged(QScreen *screen)
disconnect(SIGNAL(logicalDotsPerInchChanged(qreal)), this,
SLOT(logicalDotsPerInchChanged(qreal)));
connect(screen, SIGNAL(logicalDotsPerInchChanged(qreal)), this,
SLOT(logicalDotsPerInchChanged(qreal)));
connect(screen, &QScreen::logicalDotsPerInchChanged, this,
&GUI::logicalDotsPerInchChanged);
}
void GUI::logicalDotsPerInchChanged(qreal dpi)

View File

@ -7,6 +7,7 @@
#include <QDate>
#include <QPrinter>
#include "common/treenode.h"
#include "common/rectc.h"
#include "data/graph.h"
#include "units.h"
#include "timetype.h"
@ -32,6 +33,7 @@ class QScreen;
class MapAction;
class POIAction;
class Data;
class DEMLoader;
class GUI : public QMainWindow
{
@ -65,12 +67,15 @@ private slots:
void showFullscreen(bool show);
void showTracks(bool show);
void showRoutes(bool show);
void showAreas(bool show);
void showWaypoints(bool show);
void loadMap();
void loadMapDir();
void nextMap();
void prevMap();
void openOptions();
void clearMapCache();
void downloadDEM();
void mapChanged(QAction *action);
void graphChanged(int);
@ -82,6 +87,7 @@ private slots:
void prev();
void last();
void first();
void updateNavigationActions();
void setTotalTime() {setTimeType(Total);}
void setMovingTime() {setTimeType(Moving);}
@ -101,6 +107,8 @@ private slots:
void mapLoadedDir();
void mapInitialized();
void demLoaded();
private:
typedef QPair<QDateTime, QDateTime> DateTimeRange;
@ -136,8 +144,8 @@ private:
QMenu *menu, const QList<QAction*> &existingActions);
void updateStatusBarInfo();
void updateWindowTitle();
void updateNavigationActions();
bool updateGraphTabs();
void updateDEMDownloadAction();
TimeType timeType() const;
Units units() const;
@ -224,6 +232,7 @@ private:
QAction *_showTicksAction;
QAction *_showCoordinatesAction;
QAction *_openOptionsAction;
QAction *_downloadDEMAction;
QAction *_mapsEnd;
QAction *_poisEnd;
@ -239,6 +248,7 @@ private:
POI *_poi;
Map *_map;
DEMLoader *_dem;
FileBrowser *_browser;
QList<QString> _files;
@ -260,6 +270,8 @@ private:
QString _dataDir, _mapDir, _poiDir;
Units _units;
QList<RectC> _demRects;
};
#endif // GUI_H

View File

@ -9,7 +9,7 @@ HeartRateGraphItem::HeartRateGraphItem(const Graph &graph, GraphType type,
{
}
QString HeartRateGraphItem::info() const
ToolTip HeartRateGraphItem::info() const
{
ToolTip tt;
QLocale l(QLocale::system());
@ -19,5 +19,5 @@ QString HeartRateGraphItem::info() const
tt.insert(tr("Average"), l.toString(avg(), 'f', 0)
+ UNIT_SPACE + tr("bpm"));
return tt.toString();
return tt;
}

View File

@ -11,7 +11,7 @@ public:
HeartRateGraphItem(const Graph &graph, GraphType type, int width,
const QColor &color, QGraphicsItem *parent = 0);
QString info() const;
ToolTip info() const;
};
#endif // HEARTRATEGRAPHITEM_H

View File

@ -26,5 +26,6 @@
#define PRINT_EXPORT_ICON ":/document-print_32.png"
#define DATA_ICON ":/view-filter.png"
#define MAPS_ICON ":/applications-internet_32.png"
#define DEM_ICON ":/view-grid.png"
#endif /* ICONS_H */

View File

@ -56,17 +56,25 @@ void InfoItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
//painter->drawRect(boundingRect());
}
int InfoItem::indexOf(const QString &key) const
{
for (int i = 0; i < _list.size(); i++)
if (_list.at(i).key() == key)
return i;
return -1;
}
void InfoItem::insert(const QString &key, const QString &value)
{
KV<QString, QString> kv(key, value);
int i;
prepareGeometryChange();
if ((i = _list.indexOf(kv)) < 0)
_list.append(kv);
if ((i = indexOf(key)) < 0)
_list.append(KV<QString, QString>(key, value));
else
_list[i] = kv;
_list[i] = KV<QString, QString>(key, value);
updateBoundingRect();
update();

View File

@ -22,6 +22,7 @@ public:
private:
void updateBoundingRect();
int indexOf(const QString &key) const;
QList<KV<QString, QString> > _list;
QRectF _boundingRect;

15
src/GUI/infolabel.cpp Normal file
View File

@ -0,0 +1,15 @@
#include <QtGlobal>
#include "infolabel.h"
InfoLabel::InfoLabel(const QString &text, QWidget *parent)
: QLabel(text, parent)
{
QFont f(font());
#ifdef Q_OS_MAC
f.setPointSize(qMax(10, f.pointSize() - 2));
#else // Q_OS_MAC
f.setPointSize(f.pointSize() - 1);
#endif // Q_OS_MAC
setWordWrap(true);
setFont(f);
}

12
src/GUI/infolabel.h Normal file
View File

@ -0,0 +1,12 @@
#ifndef INFOLABEL_H
#define INFOLABEL_H
#include <QLabel>
class InfoLabel : public QLabel
{
public:
InfoLabel(const QString &text, QWidget *parent = 0);
};
#endif // INFOLABEL_H

View File

@ -28,11 +28,10 @@
#define PREV_MAP_SHORTCUT QKeySequence(QKeySequence::Back)
#define SHOW_GRAPHS_SHORTCUT QKeySequence(Qt::CTRL + Qt::Key_G)
#define STATISTICS_SHORTCUT QKeySequence(Qt::CTRL + Qt::Key_S)
#ifdef Q_OS_MAC
#define FULLSCREEN_SHORTCUT QKeySequence(Qt::META + Qt::CTRL + Qt::Key_F)
#else // Q_OS_MAC
#define FULLSCREEN_SHORTCUT QKeySequence(Qt::Key_F11)
#endif // Q_OS_MAC
#define DOWNLOAD_DEM_SHORTCUT QKeySequence(Qt::CTRL + Qt::Key_D)
#define SHOW_TRACKS_SHORTCUT QKeySequence(Qt::CTRL + Qt::Key_T)
#define FULLSCREEN_SHORTCUT (QKeySequence(QKeySequence::FullScreen).isEmpty() \
? QKeySequence(Qt::Key_F11) \
: QKeySequence(QKeySequence::FullScreen))
#endif // KEYS_H

View File

@ -1,39 +0,0 @@
#ifndef LIMITEDCOMBOBOX_H
#define LIMITEDCOMBOBOX_H
#include <QComboBox>
#include <QEvent>
class LimitedComboBox : public QComboBox
{
public:
LimitedComboBox(int limit, QWidget *parent = 0)
: QComboBox(parent), _limit(limit)
{
setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed);
setStyleSheet("combobox-popup: 0;");
}
QSize sizeHint() const
{
return QSize(qMin(_limit, QComboBox::sizeHint().width()),
QComboBox::sizeHint().height());
}
QSize minimumSizeHint() const
{
return QSize(qMin(_limit, QComboBox::minimumSizeHint().width()),
QComboBox::minimumSizeHint().height());
}
bool event(QEvent *e)
{
if (e->type() == QEvent::Polish)
view()->setMinimumWidth(QComboBox::sizeHint().width());
return QComboBox::event(e);
}
private:
int _limit;
};
#endif // LIMITEDCOMBOBOX_H

View File

@ -18,7 +18,7 @@ public:
setMenuRole(QAction::NoRole);
setCheckable(true);
connect(map, SIGNAL(mapLoaded()), this, SLOT(mapLoaded()));
connect(map, &Map::mapLoaded, this, &MapAction::mapLoaded);
}
signals:

View File

@ -69,7 +69,7 @@ static QRectF bbox(const RectC &rect, Map *map, int samples = 100)
return prect;
}
QString MapItem::info() const
ToolTip MapItem::info() const
{
ToolTip tt;
@ -78,7 +78,7 @@ QString MapItem::info() const
if (!_fileName.isEmpty())
tt.insert(tr("File"), _fileName);
return tt.toString();
return tt;
}
MapItem::MapItem(MapAction *action, Map *map, GraphicsItem *parent)
@ -91,7 +91,7 @@ MapItem::MapItem(MapAction *action, Map *map, GraphicsItem *parent)
_fileName = src->path();
_bounds = src->llBounds();
connect(this, SIGNAL(triggered()), action, SLOT(trigger()));
connect(this, &MapItem::triggered, action, &MapAction::trigger);
_map = map;
_digitalZoom = 0;

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