1
0
mirror of https://github.com/tumic0/GPXSee.git synced 2025-07-10 01:04:27 +02:00

Compare commits

..

240 Commits
7.38 ... 8.8

Author SHA1 Message Date
c6cc34c73f Version++ 2021-02-24 00:10:31 +01:00
ddc0e60517 Graphtab->mapview connections can be permanent
(no need to recreate them on every graph change)
2021-02-23 23:12:14 +01:00
48dcc6655b Yet another place with broken graph tab index 2021-02-23 22:55:22 +01:00
f0be0d6774 Fixed broken path<->graph binding setup
fixes #348
2021-02-23 22:35:59 +01:00
e5d5c06a0e Fine-tune OS X fullscreen layout 2021-02-21 10:00:42 +01:00
5f18498138 Merge branch 'origin/master' into Weblate. 2021-02-19 19:37:08 +01:00
4f73150e3e Improved Full-screen layout 2021-02-19 19:36:26 +01:00
3fb81cf987 Merge branch 'origin/master' into Weblate. 2021-02-19 19:33:18 +01:00
c6fb231186 Properly save/restore window geometry
Fixes #328
2021-02-19 19:31:54 +01:00
d1ba44c9f4 Translated using Weblate (Esperanto)
Currently translated at 95.4% (376 of 394 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/eo/
2021-02-17 13:41:49 +01:00
7db6029de0 Translated using Weblate (Ukrainian)
Currently translated at 96.7% (381 of 394 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/uk/
2021-02-17 13:41:48 +01:00
47c8f12b02 Translated using Weblate (Finnish)
Currently translated at 98.9% (390 of 394 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/fi/
2021-02-17 13:41:48 +01:00
8cb56d3783 Version++ 2021-02-16 21:27:10 +01:00
7e41069cde Fixed broken marker date when time graphs are selected 2021-02-15 23:52:10 +01:00
294d26a173 Added Locus/OsmAnd/RMaps SQLite maps info 2021-02-15 00:33:46 +01:00
afaf07cdad Merge branch 'origin/master' into Weblate. 2021-02-13 23:45:13 +01:00
c8e2baba68 A better handling of missing/invalid dates 2021-02-13 23:44:48 +01:00
146e242d69 Translated using Weblate (Hungarian)
Currently translated at 100.0% (394 of 394 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/hu/
2021-02-13 13:58:23 +01:00
b1c04cd288 Translated using Weblate (Russian)
Currently translated at 99.7% (393 of 394 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/ru/
2021-02-13 13:58:22 +01:00
c24b437769 Removed duplicit entry 2021-02-13 10:39:14 +01:00
1e50d111c7 Merge remote-tracking branch 'weblate/master' 2021-02-13 10:35:57 +01:00
195eeafb04 Back to pluralsonly 2021-02-13 10:31:13 +01:00
0892343d3f Removed obsolete translations 2021-02-13 10:29:10 +01:00
59e72a391a sqlite -> SQLite 2021-02-13 10:25:22 +01:00
a8e51e9bca Merge branch 'origin/master' into Weblate. 2021-02-13 10:19:45 +01:00
2deaa434f9 Translated using Weblate (Turkish)
Currently translated at 100.0% (394 of 394 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/tr/
2021-02-13 10:19:45 +01:00
e34f3a77e7 Translated using Weblate (Norwegian Bokmål)
Currently translated at 98.2% (387 of 394 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/nb_NO/
2021-02-13 10:19:45 +01:00
b458c53be4 sqlite -> SQLite 2021-02-13 10:19:17 +01:00
48238dd060 Translated using Weblate (Swedish)
Currently translated at 100.0% (394 of 394 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/sv/
2021-02-13 06:33:47 +01:00
a9e014c78b German translation update 2021-02-12 23:12:14 +01:00
1a8bc74286 Merge remote-tracking branch 'weblate/master' 2021-02-12 22:59:08 +01:00
f51acf306c Localization update 2021-02-12 22:43:43 +01:00
e5de4dd5be Add Coordinates display option to position info
+ Data menu redesign
Closes #343
2021-02-12 22:41:38 +01:00
e9fc5bfb62 Merge branch 'origin/master' into Weblate. 2021-02-12 00:10:40 +01:00
60fb421f28 sqlite maps OS X desktop integration 2021-02-12 00:09:52 +01:00
8aa575bd4b Merge branch 'origin/master' into Weblate. 2021-02-10 23:34:27 +01:00
0eceae1267 Extended "Apps and features" info (icon, webpage) 2021-02-10 23:31:38 +01:00
a1a4438b30 Merge branch 'origin/master' into Weblate. 2021-02-10 21:28:25 +01:00
5eb4f28d8d Translated using Weblate (Esperanto)
Currently translated at 95.6% (374 of 391 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/eo/
2021-02-10 21:28:25 +01:00
dbf46c1c2e Translated using Weblate (Hungarian)
Currently translated at 100.0% (391 of 391 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/hu/
2021-02-10 21:28:25 +01:00
02dd63be84 Translated using Weblate (Ukrainian)
Currently translated at 96.9% (379 of 391 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/uk/
2021-02-10 21:28:25 +01:00
9de3d2b117 Translated using Weblate (Turkish)
Currently translated at 100.0% (391 of 391 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/tr/
2021-02-10 21:28:24 +01:00
33b1bb9e56 Translated using Weblate (Swedish)
Currently translated at 100.0% (391 of 391 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/sv/
2021-02-10 21:28:24 +01:00
5543bcbd02 Translated using Weblate (Russian)
Currently translated at 100.0% (391 of 391 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/ru/
2021-02-10 21:28:24 +01:00
fe5a5d7a8c Translated using Weblate (Finnish)
Currently translated at 100.0% (391 of 391 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/fi/
2021-02-10 21:28:24 +01:00
c6b1109d89 Added sqlite maps Windows & Linux desktop integration 2021-02-10 21:27:41 +01:00
a2390ae26f A much more sane raster tabel load... 2021-02-10 21:26:26 +01:00
5dd89914e5 Merge branch 'origin/master' into Weblate. 2021-02-09 22:51:45 +01:00
f99378e3de Translated using Weblate (Esperanto)
Currently translated at 95.1% (371 of 390 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/eo/
2021-02-09 22:51:44 +01:00
e00259a207 Translated using Weblate (Ukrainian)
Currently translated at 96.9% (378 of 390 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/uk/
2021-02-09 22:51:44 +01:00
f107b93d1c Translated using Weblate (Finnish)
Currently translated at 100.0% (390 of 390 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/fi/
2021-02-09 22:51:44 +01:00
af3b41cc92 Localization update 2021-02-09 22:51:19 +01:00
fd33605e2d Version++ 2021-02-09 21:08:07 +01:00
0929e9a692 Added support for sqlitedb maps (Locus, OsmAnd, RMaps) 2021-02-09 21:05:23 +01:00
c4599e6c4c Fixed AQM maps display with "world-level" tiles
+ code cleanup
2021-02-09 20:09:14 +01:00
946f30f696 A little bit more sane feature check 2021-02-09 20:06:11 +01:00
060c4df170 Merge branch 'origin/master' into Weblate. 2021-02-08 19:57:14 +01:00
d88f71ddba Version++ 2021-02-08 19:56:57 +01:00
24ade728d0 Merge branch 'origin/master' into Weblate. 2021-02-08 19:54:42 +01:00
de064c7ea1 Code cleanup after recent SubFile redesign 2021-02-08 19:54:14 +01:00
a8a613468e Do not show empty popups 2021-02-08 19:53:24 +01:00
ed6a81c9e7 Properly fix the areas crash 2021-02-08 19:52:48 +01:00
507fe0b9a8 Merge branch 'origin/master' into Weblate. 2021-02-08 00:57:54 +01:00
273f8a4c21 Translated using Weblate (Finnish)
Currently translated at 99.7% (389 of 390 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/fi/
2021-02-08 00:57:54 +01:00
aceb840700 Added missing AQM icon association 2021-02-08 00:56:20 +01:00
0cd18c0927 Fixed crash when there is no graph in the data 2021-02-08 00:55:27 +01:00
1d81afb89d Translated using Weblate (Russian)
Currently translated at 100.0% (390 of 390 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/ru/
2021-02-07 22:23:40 +01:00
1c9761be57 Translated using Weblate (Hungarian)
Currently translated at 100.0% (390 of 390 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/hu/
2021-02-07 16:41:13 +01:00
9481e9b4e5 Added AlpineQuest maps support info 2021-02-07 16:11:52 +01:00
c6db2401ff NSIS requires the BOM for UTF8 strings to work properly 2021-02-07 16:09:17 +01:00
145a46686e Propper error checking 2021-02-07 11:53:10 +01:00
065d52d98b Propper error handling 2021-02-07 11:46:03 +01:00
d769ec4f06 Propper error handling 2021-02-07 11:43:30 +01:00
4d05b6d667 Removed obsolete localization strings 2021-02-07 09:23:41 +01:00
a96b047a9e Merge branch 'origin/master' into Weblate. 2021-02-07 09:17:11 +01:00
9041524076 Translated using Weblate (Turkish)
Currently translated at 100.0% (390 of 390 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/tr/
2021-02-07 09:17:11 +01:00
5358c8ea38 Translated using Weblate (Swedish)
Currently translated at 100.0% (390 of 390 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/sv/
2021-02-07 09:17:11 +01:00
0b58f3ec48 Missing CZ and DE translations 2021-02-07 09:16:43 +01:00
1830c038f3 Fixed assignment instead of compare 2021-02-07 09:08:28 +01:00
42bf36fdfa Merge branch 'origin/master' into Weblate. 2021-02-07 01:08:23 +01:00
f2e91f4a6b Fixed date background rendering issue 2021-02-06 15:43:20 +01:00
7604346799 Localization update 2021-02-06 15:26:46 +01:00
a369a1689d Added position date display option
Closes #330
2021-02-06 15:23:02 +01:00
787868185f Translated using Weblate (Hungarian)
Currently translated at 100.0% (389 of 389 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/hu/
2021-02-06 11:23:34 +01:00
d294d86b0f Translated using Weblate (Turkish)
Currently translated at 100.0% (389 of 389 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/tr/
2021-02-06 11:23:34 +01:00
317833dfc3 Translated using Weblate (Swedish)
Currently translated at 100.0% (389 of 389 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/sv/
2021-02-06 11:23:33 +01:00
b80b50d5bb Translated using Weblate (Russian)
Currently translated at 100.0% (389 of 389 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/ru/
2021-02-06 11:23:33 +01:00
c44d21017a Translated using Weblate (Czech)
Currently translated at 100.0% (389 of 389 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/cs/
2021-02-06 11:23:11 +01:00
7bc1c53452 Added OS X AQM desktop integration 2021-02-06 10:44:31 +01:00
de8f49979c Localization update 2021-02-06 00:18:49 +01:00
399b6e9013 Fixed broken icon order 2021-02-05 23:11:10 +01:00
6590a2ca44 Added AQM MIME type 2021-02-05 22:20:30 +01:00
4ab611b04a Windows & Linux AQM desktop integration 2021-02-05 22:01:10 +01:00
c82e97b1ca Code cleanup 2021-02-05 21:58:34 +01:00
86c6fa7b03 Added support for AlpineQuest AQM maps 2021-02-04 23:22:16 +01:00
5cec192a1c Removed BOM 2021-02-03 23:34:03 +01:00
f73097af86 Cosmetics 2021-02-03 23:15:52 +01:00
2f740d5b8e Code cleanup 2021-02-03 22:56:30 +01:00
b9c1c6c6cf Fixed block read algorithm 2021-02-03 22:49:06 +01:00
731f2d7e6d Added an optimized subfile block read 2021-02-03 22:16:00 +01:00
d2a1271348 Optimization 2021-02-01 20:06:05 +01:00
47b6c9d116 Code cleanup 2021-01-31 14:54:21 +01:00
97dbfb163b Scale the painter, not the images for performance reasons 2021-01-31 10:30:06 +01:00
33f2002a52 Do not cache the raster data 2021-01-27 21:18:06 +01:00
02c3682758 Added propper error handling 2021-01-25 23:01:36 +01:00
a9c2b30bd6 Merge branch 'origin/master' into Weblate. 2021-01-25 21:39:22 +01:00
b880998dcc Version++ 2021-01-25 21:39:22 +01:00
01d7842c00 Merge branch 'origin/master' into Weblate. 2021-01-25 21:37:56 +01:00
bf613f1b6d Added support for raster polygon backgrounds 2021-01-25 21:37:07 +01:00
43c4dae4d1 Translated using Weblate (Norwegian Bokmål)
Currently translated at 98.4% (382 of 388 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/nb_NO/
2021-01-23 20:45:19 +01:00
6ba7493b59 Version++ 2021-01-23 18:30:46 +01:00
2e10c609f4 Fixed crash on empty paths
Fixes #339
2021-01-23 18:24:58 +01:00
cd571f4662 Removed surplus conversions 2021-01-23 15:15:29 +01:00
51e38bf4d8 Fixed typos 2021-01-18 23:00:23 +01:00
3b480fbd23 Merge branch 'origin/master' into Weblate. 2021-01-18 22:48:44 +01:00
c523ddbfac Translated using Weblate (Hungarian)
Currently translated at 100.0% (388 of 388 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/hu/
2021-01-18 22:48:44 +01:00
3be4227de9 Translated using Weblate (Turkish)
Currently translated at 100.0% (388 of 388 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/tr/
2021-01-18 22:48:44 +01:00
17dbcf3e10 Translated using Weblate (Swedish)
Currently translated at 100.0% (388 of 388 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/sv/
2021-01-18 22:48:43 +01:00
57b2f431c1 Translated using Weblate (Russian)
Currently translated at 100.0% (388 of 388 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/ru/
2021-01-18 22:48:43 +01:00
52b081ea59 Translated using Weblate (French)
Currently translated at 100.0% (388 of 388 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/fr/
2021-01-18 22:48:43 +01:00
dc97061c8e Translated using Weblate (Finnish)
Currently translated at 100.0% (388 of 388 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/fi/
2021-01-18 22:48:43 +01:00
b59e6d5d79 German translation 2021-01-18 22:48:14 +01:00
9386fa587c Rather do not hover on the secondary graphs 2021-01-18 00:36:52 +01:00
9a459dc365 Properly handle the marker when there are multiple tracks 2021-01-18 00:18:52 +01:00
2bbf75cb0b Localization update 2021-01-17 19:51:29 +01:00
f697c6b693 Removed unused include 2021-01-17 19:36:38 +01:00
6d8ccd2216 Unified path -> name conversion 2021-01-17 19:33:06 +01:00
3033bc680d Includes cleanup 2021-01-17 18:39:57 +01:00
c95e9abd65 Merge branch 'origin/master' into Weblate. 2021-01-17 16:03:30 +01:00
591560c0eb Improved graph slider and path marker handling
+ related refactoring
2021-01-17 16:02:37 +01:00
e473b5dc2d Merge branch 'origin/master' into Weblate. 2021-01-15 06:44:46 +01:00
7217f9acfc Cosmetics 2021-01-15 06:44:31 +01:00
8f39ce3be5 Translated using Weblate (Esperanto)
Currently translated at 96.1% (371 of 386 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/eo/
2021-01-14 13:32:18 +01:00
fba7a0b40f Translated using Weblate (French)
Currently translated at 100.0% (388 of 388 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/fr/
2021-01-14 13:32:17 +01:00
fb261a1513 Merge branch 'origin/master' into Weblate. 2021-01-11 23:42:04 +01:00
925ddffba5 Remove accidently added BOM 2021-01-11 23:41:44 +01:00
6891999139 Merge branch 'origin/master' into Weblate. 2021-01-11 23:39:17 +01:00
14a9c0a8cb A little bit more sane binary search 2021-01-11 23:38:46 +01:00
6103788008 Merge branch 'origin/master' into Weblate. 2021-01-11 00:31:26 +01:00
cb8c19a2bc Yet another retype for MSVC/qt6 2021-01-11 00:30:52 +01:00
dadf095cc1 Merge branch 'origin/master' into Weblate. 2021-01-10 16:17:41 +01:00
f4ee36a173 Silence Qt6 MSVC warning 2021-01-10 16:17:19 +01:00
7555c89f0c Merge branch 'origin/master' into Weblate. 2021-01-10 15:43:13 +01:00
ae1e357fb7 See if this silences MSVC2019... 2021-01-10 15:42:29 +01:00
05e8cccb3a Merge branch 'origin/master' into Weblate. 2021-01-10 15:21:22 +01:00
1468528a62 Try to silence some more MSVC warnings 2021-01-10 15:21:00 +01:00
30e6f624b6 Merge branch 'origin/master' into Weblate. 2021-01-10 15:03:49 +01:00
a568efadd2 Silence MSVC warning 2021-01-10 15:03:32 +01:00
aca258da05 Merge branch 'origin/master' into Weblate. 2021-01-10 13:24:18 +01:00
815071fc55 Use propper qHash return values on Qt6 2021-01-10 13:23:43 +01:00
35ff0f8d55 Translated using Weblate (Norwegian Bokmål)
Currently translated at 98.4% (382 of 388 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/nb_NO/
2021-01-10 08:32:09 +01:00
7a664342b6 Yet another Qt6 NSIS fix 2021-01-09 13:30:54 +01:00
34b5323fb6 Added support for NSIS QT6 build 2021-01-09 13:06:31 +01:00
0a5480ba2c Added AppVeyor Qt6 build 2021-01-09 11:43:59 +01:00
ef6dff42b7 Version++ 2021-01-09 11:29:29 +01:00
cec8946d86 Fixed windows icons background 2021-01-06 19:27:28 +01:00
1b842ab2f0 Fixed crash on invalid KMZ maps 2021-01-05 20:56:40 +01:00
0ac6b697bb Removed obsolete stuff 2021-01-02 22:37:56 +01:00
4cb369d2f3 Merge branch 'origin/master' into Weblate. 2021-01-01 12:52:00 +01:00
f7b44b64b0 Fixed broken graph info layout 2021-01-01 12:51:39 +01:00
895b2219c5 Merge branch 'origin/master' into Weblate. 2020-12-31 15:45:18 +01:00
0ec265e4ea Version++ 2020-12-31 15:45:03 +01:00
d9e5fc6a74 Merge branch 'origin/master' into Weblate. 2020-12-31 14:03:55 +01:00
c3f345c7f9 Added support for ZIPed DEM files 2020-12-31 14:03:30 +01:00
1f9bff6a9b Merge branch 'origin/master' into Weblate. 2020-12-30 09:26:41 +01:00
7e39a34d0e Fixed typo 2020-12-30 09:26:26 +01:00
a941a7315e Merge branch 'origin/master' into Weblate. 2020-12-29 18:36:59 +01:00
cf4f9b6f98 Fixed digital zoom on OS X 2020-12-29 18:36:23 +01:00
3d89d0d7da Merge branch 'origin/master' into Weblate. 2020-12-29 15:17:54 +01:00
9b3ed7ef1d Fixed Qt6 Release build 2020-12-29 15:17:31 +01:00
796107b1ab Merge branch 'origin/master' into Weblate. 2020-12-29 01:05:40 +01:00
a7e9c95ba2 Updated minimal required Qt version
Luckily for wretches using Debian systems, the minimal Qt version is 5.11, not 5.12
2020-12-29 01:05:36 +01:00
cd54d2d952 Merge branch 'origin/master' into Weblate. 2020-12-28 16:09:15 +01:00
bafbb825fc Fixed TimeZoneInfo QVariant loading/saving in QT6 2020-12-28 16:08:36 +01:00
031ed4907c Merge branch 'origin/master' into Weblate. 2020-12-28 14:45:51 +01:00
7cdbad3e79 Translated using Weblate (Hungarian)
Currently translated at 100.0% (388 of 388 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/hu/
2020-12-28 14:45:51 +01:00
b62ec2429a Translated using Weblate (Turkish)
Currently translated at 100.0% (388 of 388 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/tr/
2020-12-28 14:45:50 +01:00
10032000b1 Translated using Weblate (Russian)
Currently translated at 100.0% (388 of 388 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/ru/
2020-12-28 14:45:50 +01:00
fd19d9c5a4 Translated using Weblate (Finnish)
Currently translated at 100.0% (388 of 388 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/fi/
2020-12-28 14:45:50 +01:00
60bb42d708 Translated missing strings 2020-12-28 14:45:25 +01:00
6201ba1c67 Cosmetics 2020-12-28 14:42:16 +01:00
85d6357cb9 Added missing HiDPI mode support 2020-12-28 14:05:51 +01:00
26cbbee135 Added KMZ mimetype 2020-12-28 11:19:44 +01:00
e200d1597d Consistently use HTTPS 2020-12-28 11:13:40 +01:00
cd46a9cb0a Fixed screenshots links 2020-12-28 11:11:00 +01:00
1ba1ae498c Added Esperanto localization 2020-12-27 19:39:41 +01:00
31429b6344 Translated using Weblate (Swedish)
Currently translated at 100.0% (388 of 388 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/sv/
2020-12-27 06:32:19 +01:00
5719cb5a35 Merge branch 'origin/master' into Weblate. 2020-12-27 02:49:08 +01:00
73aab44848 Localization update 2020-12-27 02:48:47 +01:00
e2360f8fb2 Merge branch 'origin/master' into Weblate. 2020-12-27 00:16:20 +01:00
08fc8ff6c4 Fixed cut&paste error 2020-12-27 00:15:41 +01:00
78d6ae6838 Merge branch 'origin/master' into Weblate. 2020-12-27 00:14:49 +01:00
0ae55e1511 Improved projection settings layout 2020-12-27 00:14:28 +01:00
e0be482d65 Merge branch 'origin/master' into Weblate. 2020-12-27 00:01:23 +01:00
4f22c50510 Properly handle return values 2020-12-27 00:00:59 +01:00
3bc5adec73 Merge branch 'origin/master' into Weblate. 2020-12-26 19:57:42 +01:00
a17110782a Added KMZ maps info 2020-12-26 19:57:25 +01:00
1d5f5ccffd Merge branch 'origin/master' into Weblate. 2020-12-26 19:54:21 +01:00
e1e3800f72 Use the same icons for KML and KMZ
(soon we are out of colors anyway...)
2020-12-26 19:53:23 +01:00
a1a67fd03f Merge branch 'origin/master' into Weblate. 2020-12-26 14:46:20 +01:00
b12eef7366 Use a better data descriptions 2020-12-26 14:45:38 +01:00
a3071eb022 Merge branch 'origin/master' into Weblate. 2020-12-26 14:30:35 +01:00
821790fa91 Code cleanup 2020-12-26 14:30:18 +01:00
4d0cf66925 Merge branch 'origin/master' into Weblate. 2020-12-26 00:41:13 +01:00
598d21077e Translated using Weblate (Esperanto)
Currently translated at 95.0% (367 of 386 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/eo/
2020-12-26 00:41:13 +01:00
763d634934 Translated using Weblate (Swedish)
Currently translated at 100.0% (386 of 386 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/sv/
2020-12-26 00:41:11 +01:00
336f3741d8 Cosmetics 2020-12-26 00:40:57 +01:00
b6357cfab6 Merge branch 'origin/master' into Weblate. 2020-12-25 19:50:49 +01:00
248695ac04 Added KMZ maps info 2020-12-25 19:50:46 +01:00
ab4944b296 Merge branch 'origin/master' into Weblate. 2020-12-25 19:48:10 +01:00
d116508d73 Added Windows and Linux KMZ desktop integration 2020-12-25 19:47:37 +01:00
efec3ce4f4 Merge branch 'origin/master' into Weblate. 2020-12-25 18:42:28 +01:00
23c7d8e585 Translated using Weblate (Ukrainian)
Currently translated at 97.9% (378 of 386 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/uk/
2020-12-25 18:42:28 +01:00
ec86692ea9 Translated using Weblate (Russian)
Currently translated at 100.0% (386 of 386 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/ru/
2020-12-25 18:42:28 +01:00
3237146b78 Translated using Weblate (Finnish)
Currently translated at 100.0% (386 of 386 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/fi/
2020-12-25 18:42:28 +01:00
fbf81e8861 Added Esperanto localization stub 2020-12-25 18:42:12 +01:00
5bf9ee7bec Translated using Weblate (Czech)
Currently translated at 100.0% (386 of 386 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/cs/
2020-12-25 16:17:22 +01:00
652d6cf97c Removed obsolete/duplicit entries 2020-12-25 16:05:51 +01:00
a36068c207 Merge remote-tracking branch 'weblate/master' 2020-12-25 16:00:01 +01:00
8e5fcfa0b2 Translated using Weblate (Norwegian Bokmål)
Currently translated at 98.9% (382 of 386 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/nb_NO/
2020-12-25 15:12:09 +01:00
f1375fb7f8 Translated using Weblate (Finnish)
Currently translated at 100.0% (386 of 386 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/fi/
2020-12-25 15:12:09 +01:00
c98315a7b7 Updated localizations with fixed typo 2020-12-25 15:11:51 +01:00
b90dfc963f Translated using Weblate (Norwegian Bokmål)
Currently translated at 97.6% (377 of 386 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/nb_NO/
2020-12-25 11:08:06 +01:00
a7bbfb0995 Merge branch 'origin/master' into Weblate. 2020-12-25 09:13:20 +01:00
eca7ca44ee Translated using Weblate (Ukrainian)
Currently translated at 97.4% (376 of 386 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/uk/
2020-12-25 09:13:20 +01:00
56a68689b4 Translated using Weblate (Russian)
Currently translated at 100.0% (386 of 386 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/ru/
2020-12-25 09:13:20 +01:00
16e7de8a0d Translated using Weblate (Finnish)
Currently translated at 98.9% (382 of 386 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/fi/
2020-12-25 09:13:20 +01:00
977ba58570 Fixed typo 2020-12-25 09:13:11 +01:00
0d8e46cad0 Translated using Weblate (Turkish)
Currently translated at 100.0% (386 of 386 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/tr/
2020-12-24 21:28:56 +01:00
14cf94d393 Translated using Weblate (Hungarian)
Currently translated at 100.0% (386 of 386 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/hu/
2020-12-24 21:28:55 +01:00
88763ba1ca Translated using Weblate (Swedish)
Currently translated at 100.0% (386 of 386 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/sv/
2020-12-24 21:20:47 +01:00
d74693327d Localization update 2020-12-24 16:34:32 +01:00
dde8e9a22c Make the source projection of JNX and KMZ maps selectable 2020-12-24 16:33:17 +01:00
50d4ca1690 Added missing devel package 2020-12-24 00:06:29 +01:00
07894f3a55 Various KMZ map fixes 2020-12-23 23:05:12 +01:00
86dd6ed772 Fixed typos 2020-12-22 22:50:46 +01:00
d01a5a7e42 Added support for KMZ maps 2020-12-22 22:32:07 +01:00
97bea8c56c Added support for Qt6
Removed support for Qt4 and Qt5 < 5.12
2020-12-22 22:09:09 +01:00
b5972c8328 Added BSB charts support info 2020-12-16 00:25:31 +01:00
4fd0ca0b11 Added polyconic projection license info 2020-12-16 00:15:57 +01:00
186 changed files with 11498 additions and 6256 deletions

View File

@ -1,32 +1,39 @@
version: 7.38.{build}
version: 8.8.{build}
configuration:
- Release
image:
- Visual Studio 2017
- Visual Studio 2019
environment:
NSISDIR: C:\Program Files (x86)\NSIS
matrix:
- QTDIR: C:\Qt\5.13\msvc2017
- QTDIR: C:\Qt\5.15\msvc2019
NSI: gpxsee.nsi
VCVARS: vcvars32.bat
OPENSSLDIR: C:\OpenSSL-v111-Win32\bin
LIBCRYPTO: libssl-1_1.dll
LIBSSL: libcrypto-1_1.dll
- QTDIR: C:\Qt\5.13\msvc2017_64
- QTDIR: C:\Qt\5.15\msvc2019_64
NSI: gpxsee64.nsi
VCVARS: vcvars64.bat
OPENSSLDIR: C:\OpenSSL-v111-Win64\bin
LIBCRYPTO: libssl-1_1-x64.dll
LIBSSL: libcrypto-1_1-x64.dll
LIBSSL: libcrypto-1_1-x64.dll
- QTDIR: C:\Qt\6.0\msvc2019_64
NSI: gpxsee64.nsi
VCVARS: vcvars64.bat
OPENSSLDIR: C:\OpenSSL-v111-Win64\bin
LIBCRYPTO: libssl-1_1-x64.dll
LIBSSL: libcrypto-1_1-x64.dll
NSISDEF: /DQT6
install:
- cmd: >-
set PATH=%QTDIR%\bin;%NSISDIR%;%PATH%
call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\"%VCVARS%
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\"%VCVARS%
build_script:
- cmd: >-
@ -60,6 +67,6 @@ build_script:
copy %OPENSSLDIR%\%LIBSSL% installer
makensis.exe installer\%NSI%
makensis.exe %NSISDEF% installer\%NSI%
artifacts:
- path: installer\GPXSee-*.exe

View File

@ -4,13 +4,15 @@ os:
- linux
- osx
dist: focal
before_install:
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get -qq update; fi
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update; fi
install:
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install qt; fi
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get install libqt4-dev libqt4-opengl-dev; fi
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get install qtbase5-dev qtbase5-private-dev libqt5opengl5-dev qttools5-dev-tools; fi
script:
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then PATH=/usr/local/opt/qt/bin/:${PATH}; fi

View File

@ -4,7 +4,7 @@ GPXSee is a Qt-based GPS log file viewer and analyzer that supports all common G
## 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.
* 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).
* 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).
* 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.
@ -18,8 +18,8 @@ GPXSee is a Qt-based GPS log file viewer and analyzer that supports all common G
## Build
Build requirements:
* Qt 4.8 or QT 5.x (Qt >= 5.10.1 recommended for all features)
* C++03 or newer compiler (tested: msvc2015, gcc >= 4.8, clang/Apple LLVM version 8.1.0)
* Qt5 >= 5.11 or Qt 6.x
* C++11 or newer compiler (tested: msvc2017, gcc 7.5.0, clang/Apple LLVM version 10.0.0)
Build steps:
```shell
@ -51,6 +51,7 @@ licenses:
* [Mapbox Maki icons](icons/POI) - CC0
* [RTree implementation](src/common/rtree.h) - Public domain
* [Albers](src/map/albersequal.cpp), [Geocentric](src/map/geocentric.cpp), [LCC](src/map/lambertconic.cpp),
[Mercator](src/map/mercator.cpp), [Polar Stereographic](src/map/polarstereographic.cpp)
and [Transverse Mercator](src/map/transversemercator.cpp) projections - NIMA Source Code Disclaimer
[Mercator](src/map/mercator.cpp), [Polar Stereographic](src/map/polarstereographic.cpp),
[Polyconic](src/map/polyconic.cpp) and [Transverse Mercator](src/map/transversemercator.cpp)
projections - NIMA Source Code Disclaimer
* [Projection parameters CSV files](pkg/csv) - BSD/EPSG/Public domain

View File

@ -3,19 +3,17 @@ unix:!macx {
} else {
TARGET = GPXSee
}
VERSION = 7.38
VERSION = 8.8
QT += core \
gui \
gui-private \
network \
sql \
concurrent
greaterThan(QT_MAJOR_VERSION, 4) {
QT += widgets
QT += printsupport
}
lessThan(QT_MAJOR_VERSION, 5) {QT += opengl}
equals(QT_MAJOR_VERSION, 5) : lessThan(QT_MINOR_VERSION, 4) {QT += opengl}
concurrent \
widgets \
printsupport
greaterThan(QT_MAJOR_VERSION, 5) {QT += openglwidgets}
INCLUDEPATH += ./src
HEADERS += src/common/config.h \
@ -24,13 +22,14 @@ HEADERS += src/common/config.h \
src/GUI/mapaction.h \
src/GUI/mapitem.h \
src/GUI/marginswidget.h \
src/GUI/markerinfoitem.h \
src/GUI/planeitem.h \
src/GUI/popup.h \
src/common/garmin.h \
src/common/staticassert.h \
src/common/coordinates.h \
src/common/range.h \
src/common/rectc.h \
src/common/textcodec.h \
src/common/wgs84.h \
src/common/util.h \
src/common/rtree.h \
@ -58,7 +57,6 @@ HEADERS += src/common/config.h \
src/GUI/heartrategraph.h \
src/GUI/trackinfo.h \
src/GUI/fileselectwidget.h \
src/GUI/margins.h \
src/GUI/temperaturegraph.h \
src/GUI/graphtab.h \
src/GUI/trackitem.h \
@ -74,7 +72,6 @@ HEADERS += src/common/config.h \
src/GUI/optionsdialog.h \
src/GUI/colorbox.h \
src/GUI/stylecombobox.h \
src/GUI/opengl.h \
src/GUI/timetype.h \
src/GUI/percentslider.h \
src/GUI/elevationgraphitem.h \
@ -86,7 +83,6 @@ HEADERS += src/common/config.h \
src/GUI/gearratiographitem.h \
src/GUI/oddspinbox.h \
src/GUI/settings.h \
src/GUI/cpuarch.h \
src/GUI/searchpointer.h \
src/GUI/mapview.h \
src/GUI/font.h \
@ -102,15 +98,18 @@ HEADERS += src/common/config.h \
src/map/IMG/huffmantext.h \
src/map/IMG/nodfile.h \
src/map/IMG/mapdata.h \
src/map/IMG/raster.h \
src/map/IMG/rastertile.h \
src/map/IMG/textpathitem.h \
src/map/IMG/textpointitem.h \
src/map/bsbmap.h \
src/map/invalidmap.h \
src/map/kmzmap.h \
src/map/polyconic.h \
src/map/projection.h \
src/map/ellipsoid.h \
src/map/datum.h \
src/map/sqlitemap.h \
src/map/webmercator.h \
src/map/transversemercator.h \
src/map/latlon.h \
@ -208,15 +207,21 @@ HEADERS += src/common/config.h \
src/data/address.h \
src/data/smlparser.h \
src/GUI/pdfexportdialog.h \
src/GUI/pngexportdialog.h
src/GUI/pngexportdialog.h \
src/data/geojsonparser.h \
src/GUI/timezoneinfo.h \
src/map/aqmmap.h
SOURCES += src/main.cpp \
src/GUI/axislabelitem.cpp \
src/GUI/mapitem.cpp \
src/GUI/marginswidget.cpp \
src/GUI/markerinfoitem.cpp \
src/GUI/popup.cpp \
src/common/coordinates.cpp \
src/common/rectc.cpp \
src/common/range.cpp \
src/common/textcodec.cpp \
src/common/util.cpp \
src/common/greatcircle.cpp \
src/common/programpaths.cpp \
@ -278,12 +283,14 @@ SOURCES += src/main.cpp \
src/map/IMG/textpathitem.cpp \
src/map/IMG/textpointitem.cpp \
src/map/bsbmap.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 \
src/map/sqlitemap.cpp \
src/map/tar.cpp \
src/map/atlas.cpp \
src/map/ozf.cpp \
@ -362,19 +369,12 @@ SOURCES += src/main.cpp \
src/data/gpiparser.cpp \
src/data/smlparser.cpp \
src/GUI/pdfexportdialog.cpp \
src/GUI/pngexportdialog.cpp
greaterThan(QT_MAJOR_VERSION, 4) {
HEADERS += src/data/geojsonparser.h
SOURCES += src/data/geojsonparser.cpp
}
equals(QT_MAJOR_VERSION, 5):greaterThan(QT_MINOR_VERSION, 4) {
HEADERS += src/GUI/timezoneinfo.h
}
src/GUI/pngexportdialog.cpp \
src/data/geojsonparser.cpp \
src/map/aqmmap.cpp
DEFINES += APP_VERSION=\\\"$$VERSION\\\" \
QT_NO_DEPRECATED_WARNINGS
DEFINES *= QT_USE_QSTRINGBUILDER
RESOURCES += gpxsee.qrc
TRANSLATIONS = lang/gpxsee_en.ts \
@ -392,7 +392,8 @@ TRANSLATIONS = lang/gpxsee_en.ts \
lang/gpxsee_pt_BR.ts \
lang/gpxsee_uk.ts \
lang/gpxsee_hu.ts \
lang/gpxsee_it.ts
lang/gpxsee_it.ts \
lang/gpxsee_eo.ts
macx {
ICON = icons/app/gpxsee.icns
@ -413,7 +414,8 @@ macx {
lang/gpxsee_pt_BR.qm \
lang/gpxsee_uk.qm \
lang/gpxsee_hu.qm \
lang/gpxsee_it.qm
lang/gpxsee_it.qm \
lang/gpxsee_eo.qm
csv.path = Contents/Resources
csv.files = pkg/csv
maps.path = Contents/Resources
@ -439,7 +441,9 @@ macx {
icons/formats/kap.icns \
icons/formats/mbts.icns \
icons/formats/rmap.icns \
icons/formats/tba.icns
icons/formats/tba.icns \
icons/formats/aqm.icns \
icons/formats/sqlt.icns
QMAKE_BUNDLE_DATA += locale maps icons csv
}
@ -466,14 +470,15 @@ win32 {
icons/formats/map.ico \
icons/formats/mbts.ico \
icons/formats/rmap.ico \
icons/formats/tba.ico
icons/formats/tba.ico \
icons/formats/aqm.ico \
icons/formats/sqlt.ico
DEFINES += _USE_MATH_DEFINES \
NOGDI
}
unix:!macx {
isEmpty(PREFIX):PREFIX = /usr/local
DEFINES += PREFIX=\\\"$$PREFIX\\\"
maps.files = pkg/maps/*
maps.path = $$PREFIX/share/gpxsee/maps

BIN
icons/formats/aqm.icns Normal file

Binary file not shown.

BIN
icons/formats/aqm.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 306 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 304 KiB

After

Width:  |  Height:  |  Size: 305 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 302 KiB

After

Width:  |  Height:  |  Size: 302 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 303 KiB

After

Width:  |  Height:  |  Size: 304 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 305 KiB

After

Width:  |  Height:  |  Size: 306 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 304 KiB

After

Width:  |  Height:  |  Size: 304 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 304 KiB

After

Width:  |  Height:  |  Size: 304 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 304 KiB

After

Width:  |  Height:  |  Size: 304 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 306 KiB

After

Width:  |  Height:  |  Size: 307 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 305 KiB

After

Width:  |  Height:  |  Size: 305 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 304 KiB

After

Width:  |  Height:  |  Size: 304 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 305 KiB

After

Width:  |  Height:  |  Size: 305 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 303 KiB

After

Width:  |  Height:  |  Size: 304 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 305 KiB

After

Width:  |  Height:  |  Size: 305 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 305 KiB

After

Width:  |  Height:  |  Size: 305 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 302 KiB

After

Width:  |  Height:  |  Size: 302 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 305 KiB

After

Width:  |  Height:  |  Size: 306 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 302 KiB

After

Width:  |  Height:  |  Size: 303 KiB

View File

@ -20,3 +20,5 @@ map:#f6ff00
mbts:#ff0062
rmap:#145cba
tba:#367050
aqm:#32a89e
sqlt:#303030

View File

@ -5,6 +5,6 @@ while read e; do
EXT=`echo $1 | tr /a-z/ /A-Z/`
sed -e "s/\$EXTENSION/$EXT/" -e "s/\$COLOR/$2/" icon-template.svg > $1.svg
convert -density 400 $1.svg -define icon:auto-resize $1.ico
convert -density 400 -background none $1.svg -define icon:auto-resize $1.ico
rm $1.svg
done < extensions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 304 KiB

After

Width:  |  Height:  |  Size: 304 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 304 KiB

After

Width:  |  Height:  |  Size: 305 KiB

BIN
icons/formats/sqlt.icns Normal file

Binary file not shown.

BIN
icons/formats/sqlt.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 300 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 304 KiB

After

Width:  |  Height:  |  Size: 304 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 304 KiB

After

Width:  |  Height:  |  Size: 304 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 304 KiB

After

Width:  |  Height:  |  Size: 304 KiB

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

@ -4,7 +4,7 @@
<context>
<name>GUI</name>
<message numerus="yes">
<location filename="../src/GUI/gui.cpp" line="1392"/>
<location filename="../src/GUI/gui.cpp" line="1637"/>
<source>%n files</source>
<translation>
<numerusform>%n file</numerusform>

2123
lang/gpxsee_eo.ts Normal file

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

@ -67,6 +67,22 @@
<key>CFBundleTypeRole</key>
<string>Viewer</string>
</dict>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>kmz</string>
</array>
<key>CFBundleTypeMIMETypes</key>
<array>
<string>application/vnd.google-earth.kmz</string>
</array>
<key>CFBundleTypeIconFile</key>
<string>icons/kml.icns</string>
<key>CFBundleTypeName</key>
<string>KML geographic compressed data</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
</dict>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
@ -446,6 +462,38 @@
<key>CFBundleTypeRole</key>
<string>Viewer</string>
</dict>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>aqm</string>
</array>
<key>CFBundleTypeMIMETypes</key>
<array>
<string>application/vnd.alpinequest.aqm</string>
</array>
<key>CFBundleTypeIconFile</key>
<string>icons/aqm.icns</string>
<key>CFBundleTypeName</key>
<string>AlpineQuest Map File</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
</dict>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>sqlitedb</string>
</array>
<key>CFBundleTypeMIMETypes</key>
<array>
<string>application/vnd.rmaps.sqlite</string>
</array>
<key>CFBundleTypeIconFile</key>
<string>icons/sqlt.icns</string>
<key>CFBundleTypeName</key>
<string>RMaps SQLite Map File</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
</dict>
</array>
<key>UTImportedTypeDeclarations</key>
@ -513,6 +561,27 @@
<string>application/vnd.google-earth.kml+xml</string>
</dict>
</dict>
<dict>
<key>UTTypeIdentifier</key>
<string>com.google.kmz</string>
<key>UTTypeReferenceURL</key>
<string>https://developers.google.com/kml/documentation/kmlreference</string>
<key>UTTypeDescription</key>
<string>KML geographic compressed data</string>
<key>UTTypeConformsTo</key>
<array>
<string>public.archive</string>
</array>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<array>
<string>kmz</string>
</array>
<key>public.mime-type</key>
<string>application/vnd.google-earth.kmz</string>
</dict>
</dict>
<dict>
<key>UTTypeIdentifier</key>
<string>com.geocaching.loc</string>
@ -979,6 +1048,48 @@
<string>application/vnd.trekbuddy.tba</string>
</dict>
</dict>
<dict>
<key>UTTypeIdentifier</key>
<string>net.alpinequest.aqm</string>
<key>UTTypeReferenceURL</key>
<string>https://svn.code.sf.net/p/mobac/code/trunk/MOBAC</string>
<key>UTTypeDescription</key>
<string>AlpineQuest Map File</string>
<key>UTTypeConformsTo</key>
<array>
<string>public.data</string>
</array>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<array>
<string>aqm</string>
</array>
<key>public.mime-type</key>
<string>application/vnd.alpinequest.aqm</string>
</dict>
</dict>
<dict>
<key>UTTypeIdentifier</key>
<string>com.robert.maps</string>
<key>UTTypeReferenceURL</key>
<string>https://svn.code.sf.net/p/mobac/code/trunk/MOBAC</string>
<key>UTTypeDescription</key>
<string>RMaps SQLite Map File</string>
<key>UTTypeConformsTo</key>
<array>
<string>public.data</string>
</array>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<array>
<string>sqlitedb</string>
</array>
<key>public.mime-type</key>
<string>application/vnd.rmaps.sqlite</string>
</dict>
</dict>
<dict>
<key>UTTypeIdentifier</key>
<string>public.tiff</string>

View File

@ -19,7 +19,7 @@
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).</li>
BSB nautical charts, KMZ maps, AlpineQuest maps).</li>
<li>Elevation, speed, heart rate, cadence, power, temperature and
gear ratio graphs.</li>
<li>Support for multiple tracks in one view.</li>
@ -33,10 +33,10 @@
<screenshots>
<screenshot type="default">
<image>http://www.gpxsee.org/gallery/lin1.png</image>
<image>https://www.gpxsee.org/gallery/linux.png</image>
</screenshot>
<screenshot>
<image>http://www.gpxsee.org/gallery/lin2.png</image>
<image>https://www.gpxsee.org/gallery/poi2.png</image>
</screenshot>
</screenshots>
@ -49,7 +49,7 @@
<category>DataVisualization</category>
</categories>
<url type="homepage">http://www.gpxsee.org</url>
<url type="homepage">https://www.gpxsee.org</url>
<launchable type="desktop-id">gpxsee.desktop</launchable>
@ -86,5 +86,8 @@
<mimetype>application/vnd.gpxsee.map+xml</mimetype>
<mimetype>application/x-tar</mimetype>
<mimetype>image/tiff</mimetype>
<mimetype>application/vnd.google-earth.kmz</mimetype>
<mimetype>application/vnd.alpinequest.aqm</mimetype>
<mimetype>application/vnd.rmaps.sqlite</mimetype>
</mimetypes>
</component>

View File

@ -14,5 +14,5 @@ Exec=gpxsee %F
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;
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

View File

@ -1,13 +1,15 @@
!include "MUI2.nsh"
!include "MUI2.nsh"
!include "x64.nsh"
!include "WinVer.nsh"
!include "macros.nsh"
Unicode true
; The name of the installer
Name "GPXSee"
; Program version
!define VERSION "7.38"
!define VERSION "8.8"
; The file to write
OutFile "GPXSee-${VERSION}.exe"
@ -84,6 +86,9 @@ Section "GPXSee" SEC_APP
File /r "maps"
File /r "csv"
; Create the uninstaller
WriteUninstaller "$INSTDIR\uninstall.exe"
; Create start menu entry and add links
SetShellVarContext all
!insertmacro MUI_STARTMENU_WRITE_BEGIN Application
@ -92,31 +97,23 @@ Section "GPXSee" SEC_APP
CreateShortCut "$SMPROGRAMS\$StartMenuFolder\GPXSee.lnk" "$INSTDIR\gpxsee.exe"
!insertmacro MUI_STARTMENU_WRITE_END
; Create the uninstaller
WriteUninstaller "$INSTDIR\uninstall.exe"
; Write the installation path into the registry
DetailPrint "Registering application..."
WriteRegStr HKLM SOFTWARE\GPXSee "Install_Dir" "$INSTDIR"
; Write the uninstall keys for Windows
WriteRegStr HKLM "${REGENTRY}" "DisplayName" "GPXSee"
WriteRegStr HKLM "${REGENTRY}" "Publisher" "Martin Tuma"
WriteRegStr HKLM "${REGENTRY}" "Publisher" "Martin Tůma"
WriteRegStr HKLM "${REGENTRY}" "DisplayVersion" "${VERSION}"
WriteRegStr HKLM "${REGENTRY}" "UninstallString" '"$INSTDIR\uninstall.exe"'
WriteRegStr HKLM "${REGENTRY}" "DisplayIcon" '"$INSTDIR\gpxsee.exe"'
WriteRegStr HKLM "${REGENTRY}" "InstallLocation" '"$INSTDIR"'
WriteRegStr HKLM "${REGENTRY}" "URLInfoAbout" "https://www.gpxsee.org"
WriteRegDWORD HKLM "${REGENTRY}" "NoModify" 1
WriteRegDWORD HKLM "${REGENTRY}" "NoRepair" 1
; Associate file formats
DetailPrint "Associating file types..."
!insertmacro FILE_ASSOCIATION_ADD "gpx" "GPS Exchange Format" 11
!insertmacro FILE_ASSOCIATION_ADD "tcx" "Training Center XML" 16
!insertmacro FILE_ASSOCIATION_ADD "kml" "Keyhole Markup Language" 17
!insertmacro FILE_ASSOCIATION_ADD "fit" "Flexible and Interoperable Data Transfer" 18
!insertmacro FILE_ASSOCIATION_ADD "igc" "Flight Recorder Data Format" 19
!insertmacro FILE_ASSOCIATION_ADD "nmea" "NMEA 0183 Data" 20
!insertmacro FILE_ASSOCIATION_ADD "plt" "OziExplorer Track Point File" 21
!insertmacro FILE_ASSOCIATION_ADD "rte" "OziExplorer Route File" 22
!insertmacro FILE_ASSOCIATION_ADD "wpt" "OziExplorer Waypoint File" 1
!insertmacro FILE_ASSOCIATION_ADD "loc" "Geocaching.com Waypoint File" 2
!insertmacro FILE_ASSOCIATION_ADD "slf" "Sigma Log File" 3
@ -127,10 +124,21 @@ Section "GPXSee" SEC_APP
!insertmacro FILE_ASSOCIATION_ADD "img" "Garmin IMG Map" 8
!insertmacro FILE_ASSOCIATION_ADD "jnx" "Garmin JNX Map" 9
!insertmacro FILE_ASSOCIATION_ADD "kap" "BSB Nautical Chart" 10
!insertmacro FILE_ASSOCIATION_ADD "gpx" "GPS Exchange Format" 11
!insertmacro FILE_ASSOCIATION_ADD "map" "OziExplorer Map File" 12
!insertmacro FILE_ASSOCIATION_ADD "mbtiles" "MBTiles Map File" 13
!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
WriteRegStr HKCR "Applications\GPXSee.exe\shell\open\command" "" "$\"$INSTDIR\GPXSee.exe$\" $\"%1$\""
WriteRegStr HKCR ".gpx\OpenWithList" "GPXSee.exe" ""
@ -163,7 +171,10 @@ Section "GPXSee" SEC_APP
WriteRegStr HKCR ".tba\OpenWithList" "GPXSee.exe" ""
WriteRegStr HKCR ".tif\OpenWithList" "GPXSee.exe" ""
WriteRegStr HKCR ".tiff\OpenWithList" "GPXSee.exe" ""
WriteRegStr HKCR ".xml\OpenWithList" "GPXSee.exe" ""
WriteRegStr HKCR ".xml\OpenWithList" "GPXSee.exe" ""
WriteRegStr HKCR ".kmz\OpenWithList" "GPXSee.exe" ""
WriteRegStr HKCR ".aqm\OpenWithList" "GPXSee.exe" ""
WriteRegStr HKCR ".sqlitedb\OpenWithList" "GPXSee.exe" ""
System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) v (0x08000000, 0, 0, 0)'
@ -201,6 +212,8 @@ SectionEnd
Section "OpenSSL" SEC_OPENSSL
SectionIn RO
File "libcrypto-1_1.dll"
File "libssl-1_1.dll"
@ -217,6 +230,7 @@ SectionEnd
SectionGroup "Localization" SEC_LOCALIZATION
!insertmacro LOCALIZATION "Czech" "cs"
!insertmacro LOCALIZATION "Danish" "da"
!insertmacro LOCALIZATION "Esperanto" "eo"
!insertmacro LOCALIZATION "Finnish" "fi"
!insertmacro LOCALIZATION "French" "fr"
!insertmacro LOCALIZATION "German" "de"
@ -274,6 +288,9 @@ Section "Uninstall"
!insertmacro FILE_ASSOCIATION_REMOVE "mbtiles"
!insertmacro FILE_ASSOCIATION_REMOVE "rmap"
!insertmacro FILE_ASSOCIATION_REMOVE "tba"
!insertmacro FILE_ASSOCIATION_REMOVE "kmz"
!insertmacro FILE_ASSOCIATION_REMOVE "aqm"
!insertmacro FILE_ASSOCIATION_REMOVE "sqlitedb"
DeleteRegValue HKCR ".gpx\OpenWithList" "GPXSee.exe"
DeleteRegValue HKCR ".tcx\OpenWithList" "GPXSee.exe"
@ -306,6 +323,9 @@ Section "Uninstall"
DeleteRegValue HKCR ".tif\OpenWithList" "GPXSee.exe"
DeleteRegValue HKCR ".tiff\OpenWithList" "GPXSee.exe"
DeleteRegValue HKCR ".xml\OpenWithList" "GPXSee.exe"
DeleteRegValue HKCR ".kmz\OpenWithList" "GPXSee.exe"
DeleteRegValue HKCR ".aqm\OpenWithList" "GPXSee.exe"
DeleteRegValue HKCR ".sqlitedb\OpenWithList" "GPXSee.exe"
DeleteRegKey HKCR "Applications\GPXSee.exe"
System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) v (0x08000000, 0, 0, 0)'
@ -338,4 +358,4 @@ LangString DESC_LOCALIZATION ${LANG_ENGLISH} \
!insertmacro MUI_DESCRIPTION_TEXT ${SEC_MSVC} $(DESC_MSVC)
!insertmacro MUI_DESCRIPTION_TEXT ${SEC_APP} $(DESC_APP)
!insertmacro MUI_DESCRIPTION_TEXT ${SEC_LOCALIZATION} $(DESC_LOCALIZATION)
!insertmacro MUI_FUNCTION_DESCRIPTION_END
!insertmacro MUI_FUNCTION_DESCRIPTION_END

View File

@ -213,4 +213,28 @@
<glob pattern="*.xml"/>
</mime-type>
<mime-type type="application/vnd.google-earth.kmz">
<comment>KML geographic compressed data</comment>
<sub-class-of type="application/zip"/>
<generic-icon name="application/zip"/>
<glob pattern="*.kmz"/>
</mime-type>
<mime-type type="application/vnd.alpinequest.aqm">
<comment>AlpineQuest Map File</comment>
<sub-class-of type="application/octet-stream"/>
<generic-icon name="application/octet-stream"/>
<magic>
<match type="string" offset="0" value="FLATPACK1"/>
</magic>
<glob pattern="*.aqm"/>
</mime-type>
<mime-type type="application/vnd.rmaps.sqlite">
<comment>RMaps SQLite Map File</comment>
<sub-class-of type="application/vnd.sqlite3"/>
<generic-icon name="application/octet-stream"/>
<glob pattern="*.sqlitedb"/>
</mime-type>
</mime-info>

View File

@ -1,13 +1,15 @@
!include "MUI2.nsh"
!include "MUI2.nsh"
!include "x64.nsh"
!include "WinVer.nsh"
!include "macros.nsh"
Unicode true
; The name of the installer
Name "GPXSee"
; Program version
!define VERSION "7.38"
!define VERSION "8.8"
; The file to write
OutFile "GPXSee-${VERSION}_x64.exe"
@ -91,6 +93,9 @@ Section "GPXSee" SEC_APP
File /r "maps"
File /r "csv"
; Create the uninstaller
WriteUninstaller "$INSTDIR\uninstall.exe"
; Create start menu entry and add links
SetShellVarContext all
!insertmacro MUI_STARTMENU_WRITE_BEGIN Application
@ -99,31 +104,23 @@ Section "GPXSee" SEC_APP
CreateShortCut "$SMPROGRAMS\$StartMenuFolder\GPXSee.lnk" "$INSTDIR\gpxsee.exe"
!insertmacro MUI_STARTMENU_WRITE_END
; Create the uninstaller
WriteUninstaller "$INSTDIR\uninstall.exe"
; Write the installation path into the registry
DetailPrint "Registering application..."
WriteRegStr HKLM SOFTWARE\GPXSee "Install_Dir" "$INSTDIR"
; Write the uninstall keys for Windows
WriteRegStr HKLM "${REGENTRY}" "DisplayName" "GPXSee (x64)"
WriteRegStr HKLM "${REGENTRY}" "Publisher" "Martin Tuma"
WriteRegStr HKLM "${REGENTRY}" "Publisher" "Martin Tůma"
WriteRegStr HKLM "${REGENTRY}" "DisplayVersion" "${VERSION}"
WriteRegStr HKLM "${REGENTRY}" "UninstallString" '"$INSTDIR\uninstall.exe"'
WriteRegStr HKLM "${REGENTRY}" "DisplayIcon" '"$INSTDIR\gpxsee.exe"'
WriteRegStr HKLM "${REGENTRY}" "InstallLocation" '"$INSTDIR"'
WriteRegStr HKLM "${REGENTRY}" "URLInfoAbout" "https://www.gpxsee.org"
WriteRegDWORD HKLM "${REGENTRY}" "NoModify" 1
WriteRegDWORD HKLM "${REGENTRY}" "NoRepair" 1
; Associate file formats
DetailPrint "Associating file types..."
!insertmacro FILE_ASSOCIATION_ADD "gpx" "GPS Exchange Format" 11
!insertmacro FILE_ASSOCIATION_ADD "tcx" "Training Center XML" 16
!insertmacro FILE_ASSOCIATION_ADD "kml" "Keyhole Markup Language" 17
!insertmacro FILE_ASSOCIATION_ADD "fit" "Flexible and Interoperable Data Transfer" 18
!insertmacro FILE_ASSOCIATION_ADD "igc" "Flight Recorder Data Format" 19
!insertmacro FILE_ASSOCIATION_ADD "nmea" "NMEA 0183 Data" 20
!insertmacro FILE_ASSOCIATION_ADD "plt" "OziExplorer Track Point File" 21
!insertmacro FILE_ASSOCIATION_ADD "rte" "OziExplorer Route File" 22
!insertmacro FILE_ASSOCIATION_ADD "wpt" "OziExplorer Waypoint File" 1
!insertmacro FILE_ASSOCIATION_ADD "loc" "Geocaching.com Waypoint File" 2
!insertmacro FILE_ASSOCIATION_ADD "slf" "Sigma Log File" 3
@ -134,10 +131,21 @@ Section "GPXSee" SEC_APP
!insertmacro FILE_ASSOCIATION_ADD "img" "Garmin IMG Map" 8
!insertmacro FILE_ASSOCIATION_ADD "jnx" "Garmin JNX Map" 9
!insertmacro FILE_ASSOCIATION_ADD "kap" "BSB Nautical Chart" 10
!insertmacro FILE_ASSOCIATION_ADD "gpx" "GPS Exchange Format" 11
!insertmacro FILE_ASSOCIATION_ADD "map" "OziExplorer Map File" 12
!insertmacro FILE_ASSOCIATION_ADD "mbtiles" "MBTiles Map File" 13
!insertmacro FILE_ASSOCIATION_ADD "rmap" "TwoNav Raster Map File" 14
!insertmacro FILE_ASSOCIATION_ADD "tba" "TrekBuddy Atlas" 15
!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
WriteRegStr HKCR "Applications\GPXSee.exe\shell\open\command" "" "$\"$INSTDIR\GPXSee.exe$\" $\"%1$\""
WriteRegStr HKCR ".gpx\OpenWithList" "GPXSee.exe" ""
@ -171,6 +179,9 @@ Section "GPXSee" SEC_APP
WriteRegStr HKCR ".tif\OpenWithList" "GPXSee.exe" ""
WriteRegStr HKCR ".tiff\OpenWithList" "GPXSee.exe" ""
WriteRegStr HKCR ".xml\OpenWithList" "GPXSee.exe" ""
WriteRegStr HKCR ".kmz\OpenWithList" "GPXSee.exe" ""
WriteRegStr HKCR ".aqm\OpenWithList" "GPXSee.exe" ""
WriteRegStr HKCR ".sqlitedb\OpenWithList" "GPXSee.exe" ""
System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) v (0x08000000, 0, 0, 0)'
@ -180,6 +191,17 @@ Section "QT framework" SEC_QT
SectionIn RO
!ifdef QT6
File "Qt6Concurrent.dll"
File "Qt6Core.dll"
File "Qt6Gui.dll"
File "Qt6Network.dll"
File "Qt6OpenGL.dll"
File "Qt6OpenGLWidgets.dll"
File "Qt6PrintSupport.dll"
File "Qt6Sql.dll"
File "Qt6Widgets.dll"
!else
File "Qt5Core.dll"
File "Qt5Gui.dll"
File "Qt5Widgets.dll"
@ -187,9 +209,10 @@ Section "QT framework" SEC_QT
File "Qt5Network.dll"
File "Qt5Sql.dll"
File "Qt5Concurrent.dll"
File /r "printsupport"
!endif
File /r "platforms"
File /r "imageformats"
File /r "printsupport"
File /r "styles"
File /r "sqldrivers"
@ -208,11 +231,14 @@ SectionEnd
Section "OpenSSL" SEC_OPENSSL
SectionIn RO
File "libcrypto-1_1-x64.dll"
File "libssl-1_1-x64.dll"
SectionEnd
!ifndef QT6
Section "ANGLE" SEC_ANGLE
File "libGLESv2.dll"
@ -220,10 +246,12 @@ Section "ANGLE" SEC_ANGLE
File "D3DCompiler_47.dll"
SectionEnd
!endif
SectionGroup "Localization" SEC_LOCALIZATION
!insertmacro LOCALIZATION "Czech" "cs"
!insertmacro LOCALIZATION "Danish" "da"
!insertmacro LOCALIZATION "Esperanto" "eo"
!insertmacro LOCALIZATION "Finnish" "fi"
!insertmacro LOCALIZATION "French" "fr"
!insertmacro LOCALIZATION "German" "de"
@ -282,6 +310,9 @@ Section "Uninstall"
!insertmacro FILE_ASSOCIATION_REMOVE "mbtiles"
!insertmacro FILE_ASSOCIATION_REMOVE "rmap"
!insertmacro FILE_ASSOCIATION_REMOVE "tba"
!insertmacro FILE_ASSOCIATION_REMOVE "kmz"
!insertmacro FILE_ASSOCIATION_REMOVE "aqm"
!insertmacro FILE_ASSOCIATION_REMOVE "sqlitedb"
DeleteRegValue HKCR ".gpx\OpenWithList" "GPXSee.exe"
DeleteRegValue HKCR ".tcx\OpenWithList" "GPXSee.exe"
@ -314,6 +345,9 @@ Section "Uninstall"
DeleteRegValue HKCR ".tif\OpenWithList" "GPXSee.exe"
DeleteRegValue HKCR ".tiff\OpenWithList" "GPXSee.exe"
DeleteRegValue HKCR ".xml\OpenWithList" "GPXSee.exe"
DeleteRegValue HKCR ".kmz\OpenWithList" "GPXSee.exe"
DeleteRegValue HKCR ".aqm\OpenWithList" "GPXSee.exe"
DeleteRegValue HKCR ".sqlitedb\OpenWithList" "GPXSee.exe"
DeleteRegKey HKCR "Applications\GPXSee.exe"
System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) v (0x08000000, 0, 0, 0)'
@ -346,4 +380,4 @@ LangString DESC_LOCALIZATION ${LANG_ENGLISH} \
!insertmacro MUI_DESCRIPTION_TEXT ${SEC_MSVC} $(DESC_MSVC)
!insertmacro MUI_DESCRIPTION_TEXT ${SEC_APP} $(DESC_APP)
!insertmacro MUI_DESCRIPTION_TEXT ${SEC_LOCALIZATION} $(DESC_LOCALIZATION)
!insertmacro MUI_FUNCTION_DESCRIPTION_END
!insertmacro MUI_FUNCTION_DESCRIPTION_END

View File

@ -6,6 +6,7 @@
#include <QNetworkAccessManager>
#include <QLibraryInfo>
#include <QSettings>
#include <QSurfaceFormat>
#include "common/programpaths.h"
#include "common/config.h"
#include "map/downloader.h"
@ -13,7 +14,6 @@
#include "map/gcs.h"
#include "map/pcs.h"
#include "data/dem.h"
#include "opengl.h"
#include "gui.h"
#include "settings.h"
#include "mapaction.h"
@ -30,18 +30,18 @@ App::App(int &argc, char **argv) : QApplication(argc, argv)
setApplicationVersion(APP_VERSION);
QTranslator *gpxsee = new QTranslator(this);
gpxsee->load(QLocale::system(), "gpxsee", "_",
ProgramPaths::translationsDir());
installTranslator(gpxsee);
if (gpxsee->load(QLocale::system(), "gpxsee", "_",
ProgramPaths::translationsDir()))
installTranslator(gpxsee);
QTranslator *qt = new QTranslator(this);
#if defined(Q_OS_WIN32) || defined(Q_OS_MAC)
qt->load(QLocale::system(), "qt", "_", ProgramPaths::translationsDir());
if (qt->load(QLocale::system(), "qt", "_", ProgramPaths::translationsDir()))
#else // Q_OS_WIN32 || Q_OS_MAC
qt->load(QLocale::system(), "qt", "_", QLibraryInfo::location(
QLibraryInfo::TranslationsPath));
if (qt->load(QLocale::system(), "qt", "_", QLibraryInfo::location(
QLibraryInfo::TranslationsPath)))
#endif // Q_OS_WIN32 || Q_OS_MAC
installTranslator(qt);
installTranslator(qt);
#ifdef Q_OS_MAC
setAttribute(Qt::AA_DontShowIconsInMenus);
@ -52,17 +52,18 @@ App::App(int &argc, char **argv) : QApplication(argc, argv)
"QThreadStorage: Thread X exited after QThreadStorage Y destroyed" */
Downloader::setNetworkManager(new QNetworkAccessManager(this));
DEM::setDir(ProgramPaths::demDir());
OPENGL_SET_FORMAT(4, 8);
QSurfaceFormat fmt;
fmt.setStencilBufferSize(8);
fmt.setSamples(4);
QSurfaceFormat::setDefaultFormat(fmt);
loadDatums();
loadPCSs();
QSettings settings(qApp->applicationName(), qApp->applicationName());
settings.beginGroup(OPTIONS_SETTINGS_GROUP);
#ifdef ENABLE_HTTP2
Downloader::enableHTTP2(settings.value(ENABLE_HTTP2_SETTING,
ENABLE_HTTP2_DEFAULT).toBool());
#endif // ENABLE_HTTP2
Downloader::setTimeout(settings.value(CONNECTION_TIMEOUT_SETTING,
CONNECTION_TIMEOUT_DEFAULT).toInt());
settings.endGroup();

View File

@ -29,8 +29,8 @@ private:
Ticks::Ticks(double minValue, double maxValue, int maxCount)
{
double range = niceNum(maxValue - minValue, false);
_d = niceNum(range / maxCount, false);
double range = Util::niceNum(maxValue - minValue, false);
_d = Util::niceNum(range / maxCount, false);
_min = ceil(minValue / _d) * _d;
_max = floor(maxValue / _d) * _d;
}

View File

@ -55,7 +55,8 @@ void ColorBox::mousePressEvent(QMouseEvent *event)
if (event->button() != Qt::LeftButton)
return;
QColorDialog::ColorDialogOptions options = _alpha
? QColorDialog::ShowAlphaChannel : (QColorDialog::ColorDialogOptions)0;
? QColorDialog::ColorDialogOptions(QColorDialog::ShowAlphaChannel)
: QColorDialog::ColorDialogOptions();
QColor color = QColorDialog::getColor(_color, this, QString(), options);
if (color.isValid()) {
_color = color;

View File

@ -1,42 +0,0 @@
#ifndef CPUARCH_H
#define CPUARCH_H
#include <QtGlobal>
#if QT_VERSION < QT_VERSION_CHECK(5, 4, 0)
#if defined(__arm64__)
#define CPU_ARCH_STR "arm64"
#elif defined(__arm__) || defined(__TARGET_ARCH_ARM) || defined(_M_ARM)
#define CPU_ARCH_STR "arm"
#elif defined(__x86_64) || defined(__x86_64__) || defined(__amd64) \
|| defined(_M_X64)
#define CPU_ARCH_STR "x86_64"
#elif defined(__i386) || defined(__i386__) || defined(_M_IX86)
#define CPU_ARCH_STR "i386"
#elif defined(__ia64) || defined(__ia64__) || defined(_M_IA64)
#define CPU_ARCH_STR "ia64"
#elif defined(_MIPS_ARCH_MIPS64) || defined(__mips64)
#define CPU_ARCH_STR "mips64"
#elif defined(__mips) || defined(__mips__) || defined(_M_MRX000)
#define CPU_ARCH_STR "mips"
#elif defined(__ppc64__) || defined(__powerpc64__) || defined(__64BIT__)
#define CPU_ARCH_STR "power64"
#elif defined(__ppc__) || defined(__ppc) || defined(__powerpc__) \
|| defined(_ARCH_COM) || defined(_ARCH_PWR) || defined(_ARCH_PPC) \
|| defined(_M_MPPC) || defined(_M_PPC)
#define CPU_ARCH_STR "power"
#else
#define CPU_ARCH_STR "unknown"
#endif
#define CPU_ARCH QString(CPU_ARCH_STR)
#else // QT_VERSION < 5.4
#include <QSysInfo>
#define CPU_ARCH QSysInfo::buildCpuArchitecture()
#endif // QT_VERSION < 5.4
#endif // CPUARCH_H

View File

@ -24,7 +24,7 @@ FileSelectWidget::FileSelectWidget(QWidget *parent) : QWidget(parent)
connect(_button, SIGNAL(clicked()), this, SLOT(browse()));
QHBoxLayout *layout = new QHBoxLayout();
layout->setMargin(0);
layout->setContentsMargins(QMargins());
layout->addWidget(_edit);
layout->addWidget(_button);
setLayout(layout);

View File

@ -84,23 +84,38 @@ QString Format::elevation(qreal value, Units units)
+ qApp->translate("Format", "ft");
}
QString Format::coordinates(const Coordinates &value, CoordinatesFormat type)
QString Format::lon(const Coordinates &c, CoordinatesFormat type)
{
QChar yH = (value.lat() < 0) ? 'S' : 'N';
QChar xH = (value.lon() < 0) ? 'W' : 'E';
QChar xH = (c.lon() < 0) ? 'W' : 'E';
switch (type) {
case DegreesMinutes:
return deg2DMM(qAbs(value.lat())) + yH + "," + QChar(0x00A0)
+ deg2DMM(qAbs(value.lon())) + xH;
break;
return deg2DMM(qAbs(c.lon())) + xH;
case DMS:
return deg2DMS(qAbs(value.lat())) + yH + "," + QChar(0x00A0)
+ deg2DMS(qAbs(value.lon())) + xH;
break;
return deg2DMS(qAbs(c.lon())) + xH;
default:
QLocale l(QLocale::system());
return l.toString(qAbs(value.lat()), 'f', 5) + yH + ","
+ QChar(0x00A0) + l.toString(qAbs(value.lon()), 'f', 5) + xH;
return l.toString(qAbs(c.lon()), 'f', 5) + xH;
}
}
QString Format::lat(const Coordinates &c, CoordinatesFormat type)
{
QChar yH = (c.lat() < 0) ? 'S' : 'N';
switch (type) {
case DegreesMinutes:
return deg2DMM(qAbs(c.lat())) + yH;
case DMS:
return deg2DMS(qAbs(c.lat())) + yH;
default:
QLocale l(QLocale::system());
return l.toString(qAbs(c.lat()), 'f', 5) + yH;
}
}
QString Format::coordinates(const Coordinates &c, CoordinatesFormat type)
{
return lat(c, type) + "," + QChar(0x00A0) + lon(c, type);
}

View File

@ -17,7 +17,9 @@ namespace Format
QString timeSpan(qreal time, bool full = true);
QString distance(qreal value, Units units);
QString elevation(qreal value, Units units);
QString coordinates(const Coordinates &value, CoordinatesFormat type);
QString coordinates(const Coordinates &c, CoordinatesFormat type);
QString lon(const Coordinates &c, CoordinatesFormat type);
QString lat(const Coordinates &c, CoordinatesFormat type);
}
#endif // FORMAT_H

View File

@ -85,7 +85,7 @@ const GraphSegment *GraphItem::segment(qreal x, GraphType type) const
return 0;
}
qreal GraphItem::yAtX(qreal x)
qreal GraphItem::yAtX(qreal x) const
{
const GraphSegment *seg = segment(x, _type);
if (!seg)
@ -106,7 +106,7 @@ qreal GraphItem::yAtX(qreal x)
else if (p.x(_type) < x)
low = mid + 1;
else
return -p.y();
return p.y();
}
QLineF l;
@ -117,11 +117,14 @@ qreal GraphItem::yAtX(qreal x)
l = QLineF(seg->at(mid-1).x(_type), seg->at(mid-1).y(),
seg->at(mid).x(_type), seg->at(mid).y());
return -l.pointAt((x - l.p1().x()) / (l.p2().x() - l.p1().x())).y();
return l.pointAt((x - l.p1().x()) / (l.p2().x() - l.p1().x())).y();
}
qreal GraphItem::distanceAtTime(qreal time)
qreal GraphItem::distanceAtTime(qreal time) const
{
if (!_time)
return NAN;
const GraphSegment *seg = segment(time, Time);
if (!seg)
return NAN;
@ -155,12 +158,42 @@ qreal GraphItem::distanceAtTime(qreal time)
return l.pointAt((time - l.p1().x()) / (l.p2().x() - l.p1().x())).y();
}
void GraphItem::emitSliderPositionChanged(qreal pos)
qreal GraphItem::timeAtDistance(qreal distance) const
{
if (_type == Time)
emit sliderPositionChanged(_time ? distanceAtTime(pos) : NAN);
if (!_time)
return NAN;
const GraphSegment *seg = segment(distance, Distance);
if (!seg)
return NAN;
int low = 0;
int high = seg->count() - 1;
int mid = 0;
if (!(distance >= seg->at(low).s() && distance <= seg->at(high).s()))
return NAN;
while (low <= high) {
mid = low + ((high - low) / 2);
const GraphPoint &p = seg->at(mid);
if (p.s() > distance)
high = mid - 1;
else if (p.s() < distance)
low = mid + 1;
else
return seg->at(mid).t();
}
QLineF l;
if (seg->at(mid).s() < distance)
l = QLineF(seg->at(mid).s(), seg->at(mid).t(), seg->at(mid+1).s(),
seg->at(mid+1).t());
else
emit sliderPositionChanged(pos);
l = QLineF(seg->at(mid-1).s(), seg->at(mid-1).t(),
seg->at(mid).s(), seg->at(mid).t());
return l.pointAt((distance - l.p1().x()) / (l.p2().x() - l.p1().x())).y();
}
void GraphItem::hover(bool hover)

View File

@ -23,6 +23,7 @@ public:
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
QWidget *widget);
GraphType graphType() const {return _type;}
const QRectF &bounds() const {return _bounds;}
qreal max() const;
@ -38,17 +39,16 @@ public:
GraphItem *secondaryGraph() const {return _secondaryGraph;}
void setSecondaryGraph(GraphItem *graph) {_secondaryGraph = graph;}
qreal yAtX(qreal x);
qreal distanceAtTime(qreal time);
qreal yAtX(qreal x) const;
qreal distanceAtTime(qreal time) const;
qreal timeAtDistance(qreal distance) const;
void redraw();
signals:
void sliderPositionChanged(qreal);
void selected(bool);
public slots:
void emitSliderPositionChanged(qreal);
void hover(bool hover);
protected:

View File

@ -1,6 +1,7 @@
#ifndef GRAPHTAB_H
#define GRAPHTAB_H
#include <QtGlobal>
#include <QList>
#include "graphview.h"
#include "units.h"
@ -14,7 +15,12 @@ class GraphTab : public GraphView
Q_OBJECT
public:
GraphTab(QWidget *parent = 0) : GraphView(parent) {}
GraphTab(QWidget *parent = 0) : GraphView(parent)
{
#if defined(Q_OS_WIN32) || defined(Q_OS_MAC)
setFrameShape(QFrame::NoFrame);
#endif // Q_OS_WIN32 || Q_OS_MAC
}
virtual ~GraphTab() {}
virtual QString label() const = 0;

View File

@ -6,8 +6,8 @@
#include <QGraphicsSimpleTextItem>
#include <QPalette>
#include <QLocale>
#include <QOpenGLWidget>
#include "data/graph.h"
#include "opengl.h"
#include "axisitem.h"
#include "axislabelitem.h"
#include "slideritem.h"
@ -179,6 +179,13 @@ void GraphView::setGraphType(GraphType type)
_xLabel = tr("Time");
setXUnits();
if (singleGraph())
_sliderPos = (type == Distance)
? _graphs.first()->distanceAtTime(_sliderPos)
: _graphs.first()->timeAtDistance(_sliderPos);
else
_sliderPos = 0;
redraw();
}
@ -194,9 +201,6 @@ void GraphView::showSliderInfo(bool show)
void GraphView::addGraph(GraphItem *graph)
{
connect(this, SIGNAL(sliderPositionChanged(qreal)), graph,
SLOT(emitSliderPositionChanged(qreal)));
_graphs.append(graph);
if (!graph->bounds().isNull())
_scene->addItem(graph);
@ -207,9 +211,6 @@ void GraphView::addGraph(GraphItem *graph)
void GraphView::removeGraph(GraphItem *graph)
{
disconnect(this, SIGNAL(sliderPositionChanged(qreal)), graph,
SLOT(emitSliderPositionChanged(qreal)));
_graphs.removeOne(graph);
_scene->removeItem(graph);
@ -351,23 +352,31 @@ void GraphView::wheelEvent(QWheelEvent *e)
{
static int deg = 0;
deg += e->delta() / 8;
deg += e->angleDelta().y() / 8;
if (qAbs(deg) < 15)
return;
deg = 0;
#if QT_VERSION < QT_VERSION_CHECK(5, 15, 0)
QPointF pos = mapToScene(e->pos());
#else // QT 5.15
QPointF pos = mapToScene(e->position().toPoint());
#endif // QT 5.15
QRectF gr(_grid->boundingRect());
QPointF r(pos.x() / gr.width(), pos.y() / gr.height());
_zoom = (e->delta() > 0) ? _zoom * 1.25 : qMax(_zoom / 1.25, 1.0);
_zoom = (e->angleDelta().y() > 0) ? _zoom * 1.25 : qMax(_zoom / 1.25, 1.0);
redraw();
QRectF ngr(_grid->boundingRect());
QPointF npos(mapFromScene(QPointF(r.x() * ngr.width(),
r.y() * ngr.height())));
QScrollBar *sb = horizontalScrollBar();
#if QT_VERSION < QT_VERSION_CHECK(5, 15, 0)
sb->setSliderPosition(sb->sliderPosition() + npos.x() - e->pos().x());
#else // QT 5.15
sb->setSliderPosition(sb->sliderPosition() + npos.x() - e->position().x());
#endif // QT 5.15
QGraphicsView::wheelEvent(e);
}
@ -426,12 +435,17 @@ void GraphView::updateSliderPosition()
}
}
bool GraphView::singleGraph() const
{
return (_graphs.count() == 1
|| (_graphs.count() == 2 && _graphs.first()->secondaryGraph()));
}
void GraphView::updateSliderInfo()
{
QLocale l(QLocale::system());
qreal r = 0, y = 0;
GraphItem *cardinal = (_graphs.count() == 1 || (_graphs.count() == 2
&& _graphs.first()->secondaryGraph())) ? _graphs.first() : 0;
GraphItem *cardinal = singleGraph() ? _graphs.first() : 0;
if (cardinal) {
QRectF br(_bounds);
@ -439,7 +453,7 @@ void GraphView::updateSliderInfo()
br.adjust(0, -(_minYRange/2 - br.height()/2), 0,
_minYRange/2 - br.height()/2);
y = cardinal->yAtX(_sliderPos);
y = -cardinal->yAtX(_sliderPos);
r = (y - br.bottom()) / br.height();
}
@ -455,9 +469,9 @@ void GraphView::updateSliderInfo()
QString yText((!cardinal) ? QString() : l.toString(-y * _yScale + _yOffset,
'f', _precision) + UNIT_SPACE + _yUnits);
if (cardinal && cardinal->secondaryGraph()) {
qreal delta = y - cardinal->secondaryGraph()->yAtX(_sliderPos);
yText += " " + QChar(0x0394) + l.toString(-delta * _yScale + _yOffset,
'f', _precision) + UNIT_SPACE + _yUnits;
qreal delta = y + cardinal->secondaryGraph()->yAtX(_sliderPos);
yText += QString(" ") + QChar(0x0394) + l.toString(-delta * _yScale
+ _yOffset, 'f', _precision) + UNIT_SPACE + _yUnits;
}
_sliderInfo->setText(xText, yText);
}
@ -537,7 +551,7 @@ void GraphView::setGraphWidth(int width)
void GraphView::useOpenGL(bool use)
{
if (use)
setViewport(new OPENGL_WIDGET);
setViewport(new QOpenGLWidget);
else
setViewport(new QWidget);
}

View File

@ -43,6 +43,8 @@ public:
void setSliderPosition(qreal pos);
void setSliderColor(const QColor &color);
qreal sliderPosition() const {return _sliderPos;}
signals:
void sliderPositionChanged(qreal);
@ -91,6 +93,7 @@ private:
void updateSliderInfo();
void removeItem(QGraphicsItem *item);
void addItem(QGraphicsItem *item);
bool singleGraph() const;
GraphicsScene *_scene;

View File

@ -1,4 +1,3 @@
#include "common/config.h"
#include <QApplication>
#include <QSplitter>
#include <QVBoxLayout>
@ -23,11 +22,10 @@
#include <QMimeData>
#include <QUrl>
#include <QPixmapCache>
#ifdef ENABLE_HIDPI
#include <QWindow>
#include <QScreen>
#endif // ENABLE_HIDPI
#include <QStyle>
#include <QTabBar>
#include "common/programpaths.h"
#include "data/data.h"
#include "data/poi.h"
@ -47,7 +45,6 @@
#include "mapview.h"
#include "trackinfo.h"
#include "filebrowser.h"
#include "cpuarch.h"
#include "graphtab.h"
#include "graphitem.h"
#include "pathitem.h"
@ -94,8 +91,7 @@ GUI::GUI()
_routeDistance = 0;
_time = 0;
_movingTime = 0;
_sliderPos = 0;
_lastGraphTab = 0;
_dataDir = QDir::homePath();
_mapDir = QDir::homePath();
@ -174,8 +170,13 @@ void GUI::mapInitialized()
void GUI::createPOIFilesActions()
{
_poiFilesSignalMapper = new QSignalMapper(this);
#if QT_VERSION < QT_VERSION_CHECK(5, 15, 0)
connect(_poiFilesSignalMapper, SIGNAL(mapped(int)), this,
SLOT(poiFileChecked(int)));
#else // QT 5.15
connect(_poiFilesSignalMapper, SIGNAL(mappedInt(int)), this,
SLOT(poiFileChecked(int)));
#endif // QT 5.15
for (int i = 0; i < _poi->files().count(); i++)
createPOIFileAction(_poi->files().at(i));
@ -283,7 +284,7 @@ void GUI::createActions()
_overlapPOIAction->setMenuRole(QAction::NoRole);
_overlapPOIAction->setCheckable(true);
connect(_overlapPOIAction, SIGNAL(triggered(bool)), _mapView,
SLOT(setPOIOverlap(bool)));
SLOT(showOverlappedPOIs(bool)));
_showPOILabelsAction = new QAction(tr("Show POI labels"), this);
_showPOILabelsAction->setMenuRole(QAction::NoRole);
_showPOILabelsAction->setCheckable(true);
@ -374,6 +375,25 @@ void GUI::createActions()
_showTicksAction->setCheckable(true);
connect(_showTicksAction, SIGNAL(triggered(bool)), _mapView,
SLOT(showTicks(bool)));
QActionGroup *markerInfoGroup = new QActionGroup(this);
connect(markerInfoGroup, SIGNAL(triggered(QAction*)), this,
SLOT(showPathMarkerInfo(QAction*)));
_hideMarkersAction = new QAction(tr("Do not show"), this);
_hideMarkersAction->setMenuRole(QAction::NoRole);
_hideMarkersAction->setCheckable(true);
_hideMarkersAction->setActionGroup(markerInfoGroup);
_showMarkersAction = new QAction(tr("Marker only"), this);
_showMarkersAction->setMenuRole(QAction::NoRole);
_showMarkersAction->setCheckable(true);
_showMarkersAction->setActionGroup(markerInfoGroup);
_showMarkerDateAction = new QAction(tr("Date/time"), this);
_showMarkerDateAction->setMenuRole(QAction::NoRole);
_showMarkerDateAction->setCheckable(true);
_showMarkerDateAction->setActionGroup(markerInfoGroup);
_showMarkerCoordinatesAction = new QAction(tr("Coordinates"), this);
_showMarkerCoordinatesAction->setMenuRole(QAction::NoRole);
_showMarkerCoordinatesAction->setCheckable(true);
_showMarkerCoordinatesAction->setActionGroup(markerInfoGroup);
// Graph actions
_showGraphsAction = new QAction(QIcon(SHOW_GRAPHS_ICON), tr("Show graphs"),
@ -410,11 +430,6 @@ void GUI::createActions()
_showGraphSliderInfoAction->setCheckable(true);
connect(_showGraphSliderInfoAction, SIGNAL(triggered(bool)), this,
SLOT(showGraphSliderInfo(bool)));
_showMarkersAction = new QAction(tr("Show path markers"), this);
_showMarkersAction->setMenuRole(QAction::NoRole);
_showMarkersAction->setCheckable(true);
connect(_showMarkersAction, SIGNAL(triggered(bool)), _mapView,
SLOT(showMarkers(bool)));
// Settings actions
_showToolbarsAction = new QAction(tr("Show toolbars"), this);
@ -543,7 +558,6 @@ void GUI::createMenus()
graphMenu->addSeparator();
graphMenu->addAction(_showGraphGridAction);
graphMenu->addAction(_showGraphSliderInfoAction);
graphMenu->addAction(_showMarkersAction);
graphMenu->addSeparator();
graphMenu->addAction(_showGraphsAction);
@ -560,10 +574,14 @@ void GUI::createMenus()
poiMenu->addAction(_showPOIAction);
QMenu *dataMenu = menuBar()->addMenu(tr("&Data"));
QMenu *displayMenu = dataMenu->addMenu(tr("Display"));
displayMenu->addAction(_showWaypointLabelsAction);
displayMenu->addAction(_showRouteWaypointsAction);
displayMenu->addAction(_showTicksAction);
dataMenu->addAction(_showWaypointLabelsAction);
dataMenu->addAction(_showRouteWaypointsAction);
dataMenu->addAction(_showTicksAction);
QMenu *markerMenu = dataMenu->addMenu(tr("Position info"));
markerMenu->addAction(_hideMarkersAction);
markerMenu->addAction(_showMarkersAction);
markerMenu->addAction(_showMarkerDateAction);
markerMenu->addAction(_showMarkerCoordinatesAction);
dataMenu->addSeparator();
dataMenu->addAction(_showTracksAction);
dataMenu->addAction(_showRoutesAction);
@ -661,13 +679,9 @@ void GUI::createGraphTabs()
_tabs.append(new TemperatureGraph(_graphTabWidget));
_tabs.append(new GearRatioGraph(_graphTabWidget));
for (int i = 0; i < _tabs.count(); i++) {
#if defined(Q_OS_WIN32) || defined(Q_OS_MAC)
_tabs.at(i)->setFrameShape(QFrame::NoFrame);
#endif // Q_OS_WIN32 || Q_OS_MAC
connect(_tabs.at(i), SIGNAL(sliderPositionChanged(qreal)), this,
SLOT(sliderPositionChanged(qreal)));
}
for (int i = 0; i < _tabs.size(); i++)
connect(_tabs.at(i), SIGNAL(sliderPositionChanged(qreal)), _mapView,
SLOT(setMarkerPosition(qreal)));
}
void GUI::createStatusBar()
@ -691,8 +705,8 @@ void GUI::about()
msgBox.setWindowTitle(tr("About GPXSee"));
msgBox.setText("<h2>" + QString(APP_NAME) + "</h2><p><p>" + tr("Version %1")
.arg(QString(APP_VERSION) + " (" + CPU_ARCH + ", Qt " + QT_VERSION_STR
+ ")") + "</p>");
.arg(QString(APP_VERSION) + " (" + QSysInfo::buildCpuArchitecture()
+ ", Qt " + QT_VERSION_STR + ")") + "</p>");
msgBox.setInformativeText("<table width=\"300\"><tr><td>"
+ tr("GPXSee is distributed under the terms of the GNU General Public "
"License version 3. For more info about GPXSee visit the project "
@ -727,7 +741,9 @@ void GUI::keys()
+ tr("Toggle graph type") + "</td><td><i>"
+ QKeySequence(TOGGLE_GRAPH_TYPE_KEY).toString() + "</i></td></tr><tr><td>"
+ tr("Toggle time type") + "</td><td><i>"
+ QKeySequence(TOGGLE_TIME_TYPE_KEY).toString()
+ QKeySequence(TOGGLE_TIME_TYPE_KEY).toString() + "</i></td></tr><tr><td>"
+ tr("Toggle position info") + "</td><td><i>"
+ QKeySequence(TOGGLE_MARKER_INFO_KEY).toString() + "</i></td></tr>"
+ "<tr><td></td><td></td></tr><tr><td>" + tr("Next map")
+ "</td><td><i>" + NEXT_MAP_SHORTCUT.toString() + "</i></td></tr><tr><td>"
+ tr("Previous map") + "</td><td><i>" + PREV_MAP_SHORTCUT.toString()
@ -835,12 +851,7 @@ void GUI::loadData(const Data &data)
_trackDistance += track.distance();
_time += track.time();
_movingTime += track.movingTime();
#ifdef ENABLE_TIMEZONES
const QDateTime date = track.date().toTimeZone(
_options.timeZone.zone());
#else // ENABLE_TIMEZONES
const QDateTime &date = track.date();
#endif // ENABLE_TIMEZONES
const QDateTime date = track.date().toTimeZone(_options.timeZone.zone());
if (_dateRange.first.isNull() || _dateRange.first > date)
_dateRange.first = date;
if (_dateRange.second.isNull() || _dateRange.second < date)
@ -869,16 +880,19 @@ void GUI::loadData(const Data &data)
_splitter->refresh();
paths = _mapView->loadData(data);
GraphTab *gt = static_cast<GraphTab*>(_graphTabWidget->currentWidget());
for (int i = 0; i < paths.count(); i++) {
const PathItem *pi = paths.at(i);
for (int j = 0; j < graphs.count(); j++) {
const GraphItem *gi = graphs.at(j).at(i);
if (!gi)
continue;
connect(gi, SIGNAL(sliderPositionChanged(qreal)), pi,
SLOT(moveMarker(qreal)));
connect(pi, SIGNAL(selected(bool)), gi, SLOT(hover(bool)));
connect(gi, SIGNAL(selected(bool)), pi, SLOT(hover(bool)));
PathItem *pi = paths.at(i);
if (!pi)
continue;
for (int j = 0; j < graphs.count(); j++)
pi->addGraph(graphs.at(j).at(i));
if (gt) {
pi->setGraph(_tabs.indexOf(gt));
pi->setMarkerPosition(gt->sliderPosition());
}
}
}
@ -977,7 +991,8 @@ void GUI::openOptions()
SET_VIEW_OPTION(pathAntiAliasing, useAntiAliasing);
SET_VIEW_OPTION(useOpenGL, useOpenGL);
SET_VIEW_OPTION(sliderColor, setMarkerColor);
SET_VIEW_OPTION(projection, setProjection);
SET_VIEW_OPTION(outputProjection, setOutputProjection);
SET_VIEW_OPTION(inputProjection, setInputProjection);
SET_TAB_OPTION(palette, setPalette);
SET_TAB_OPTION(graphWidth, setGraphWidth);
@ -1014,23 +1029,18 @@ void GUI::openOptions()
if (options.connectionTimeout != _options.connectionTimeout)
Downloader::setTimeout(options.connectionTimeout);
#ifdef ENABLE_HTTP2
if (options.enableHTTP2 != _options.enableHTTP2)
Downloader::enableHTTP2(options.enableHTTP2);
#endif // ENABLE_HTTP2
#ifdef ENABLE_HIDPI
if (options.hidpiMap != _options.hidpiMap)
_mapView->setDevicePixelRatio(devicePixelRatioF(),
options.hidpiMap ? devicePixelRatioF() : 1.0);
#endif // ENABLE_HIDPI
#ifdef ENABLE_TIMEZONES
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());
}
#endif // ENABLE_TIMEZONES
if (reload)
reloadFiles();
@ -1058,12 +1068,9 @@ void GUI::exportPDFFile()
printer.setCreator(QString(APP_NAME) + QString(" ")
+ QString(APP_VERSION));
printer.setResolution(_pdfExport.resolution);
printer.setOrientation(_pdfExport.orientation);
printer.setPageLayout(QPageLayout(QPageSize(_pdfExport.paperSize),
_pdfExport.orientation, _pdfExport.margins, QPageLayout::Millimeter));
printer.setOutputFileName(_pdfExport.fileName);
printer.setPaperSize(_pdfExport.paperSize);
printer.setPageMargins(_pdfExport.margins.left(), _pdfExport.margins.top(),
_pdfExport.margins.right(), _pdfExport.margins.bottom(),
QPrinter::Millimeter);
plot(&printer);
}
@ -1319,8 +1326,6 @@ void GUI::reloadFiles()
_tabs.at(i)->clear();
_mapView->clear();
_sliderPos = 0;
for (int i = 0; i < _files.size(); i++) {
if (!loadFile(_files.at(i))) {
_files.removeAt(i);
@ -1349,8 +1354,6 @@ void GUI::closeFiles()
_dateRange = DateTimeRange(QDateTime(), QDateTime());
_pathName = QString();
_sliderPos = 0;
for (int i = 0; i < _tabs.count(); i++)
_tabs.at(i)->clear();
_mapView->clear();
@ -1378,7 +1381,7 @@ void GUI::showToolbars(bool show)
if (show) {
Q_ASSERT(!_windowStates.isEmpty());
restoreState(_windowStates.last());
_windowStates.pop_back();
_windowStates.removeLast();
} else {
_windowStates.append(saveState());
removeToolBar(_fileToolBar);
@ -1390,17 +1393,28 @@ void GUI::showToolbars(bool show)
void GUI::showFullscreen(bool show)
{
if (show) {
_windowGeometries.append(saveGeometry());
_frameStyle = _mapView->frameStyle();
statusBar()->hide();
menuBar()->hide();
showToolbars(false);
_mapView->setFrameStyle(QFrame::NoFrame);
_graphTabWidget->tabBar()->hide();
#ifdef Q_OS_MAC
_graphTabWidget->setDocumentMode(true);
#endif // Q_OS_MAC
showFullScreen();
} else {
Q_ASSERT(!_windowGeometries.isEmpty());
_windowGeometries.removeLast();
statusBar()->show();
menuBar()->show();
showToolbars(true);
_mapView->setFrameStyle(_frameStyle);
_graphTabWidget->tabBar()->show();
#ifdef Q_OS_MAC
_graphTabWidget->setDocumentMode(false);
#endif // Q_OS_MAC
showNormal();
}
}
@ -1439,6 +1453,23 @@ void GUI::showGraphSliderInfo(bool show)
_tabs.at(i)->showSliderInfo(show);
}
void GUI::showPathMarkerInfo(QAction *action)
{
if (action == _showMarkersAction) {
_mapView->showMarkers(true);
_mapView->showMarkerInfo(MarkerInfoItem::None);
} else if (action == _showMarkerDateAction) {
_mapView->showMarkers(true);
_mapView->showMarkerInfo(MarkerInfoItem::Date);
} else if (action == _showMarkerCoordinatesAction) {
_mapView->showMarkers(true);
_mapView->showMarkerInfo(MarkerInfoItem::Position);
} else {
_mapView->showMarkers(false);
_mapView->showMarkerInfo(MarkerInfoItem::None);
}
}
void GUI::loadMap()
{
QStringList files(QFileDialog::getOpenFileNames(this, tr("Open map file"),
@ -1690,18 +1721,18 @@ void GUI::poiFileChecked(int index)
_poiFilesActions.at(index)->isChecked());
}
void GUI::sliderPositionChanged(qreal pos)
{
_sliderPos = pos;
}
void GUI::graphChanged(int index)
{
if (index < 0)
return;
GraphTab *gt = static_cast<GraphTab*>(_graphTabWidget->widget(index));
gt->setSliderPosition(_sliderPos);
_mapView->setGraph(_tabs.indexOf(gt));
if (_lastGraphTab)
gt->setSliderPosition(_lastGraphTab->sliderPosition());
_lastGraphTab = gt;
}
void GUI::updateNavigationActions()
@ -1780,12 +1811,8 @@ void GUI::setCoordinatesFormat(CoordinatesFormat format)
void GUI::setGraphType(GraphType type)
{
_sliderPos = 0;
for (int i = 0; i <_tabs.count(); i++) {
for (int i = 0; i <_tabs.count(); i++)
_tabs.at(i)->setGraphType(type);
_tabs.at(i)->setSliderPosition(0);
}
}
void GUI::next()
@ -1858,6 +1885,12 @@ void GUI::keyPressEvent(QKeyEvent *event)
else
_movingTimeAction->trigger();
break;
case TOGGLE_MARKER_INFO_KEY:
if (_showMarkerDateAction->isChecked())
_showMarkerCoordinatesAction->trigger();
else if (_showMarkerCoordinatesAction->isChecked())
_showMarkerDateAction->trigger();
break;
case Qt::Key_Escape:
if (_fullscreenAction->isChecked()) {
_fullscreenAction->setChecked(false);
@ -1929,14 +1962,13 @@ void GUI::writeSettings()
settings.clear();
settings.beginGroup(WINDOW_SETTINGS_GROUP);
if (size() != WINDOW_SIZE_DEFAULT)
settings.setValue(WINDOW_SIZE_SETTING, size());
if (pos() != WINDOW_POS_DEFAULT)
settings.setValue(WINDOW_POS_SETTING, pos());
if (_windowStates.isEmpty())
settings.setValue(WINDOW_STATE_SETTING, saveState());
else
if (!_windowStates.isEmpty() && !_windowGeometries.isEmpty()) {
settings.setValue(WINDOW_STATE_SETTING, _windowStates.first());
settings.setValue(WINDOW_GEOMETRY_SETTING, _windowGeometries.first());
} else {
settings.setValue(WINDOW_STATE_SETTING, saveState());
settings.setValue(WINDOW_GEOMETRY_SETTING, saveGeometry());
}
settings.endGroup();
settings.beginGroup(SETTINGS_SETTINGS_GROUP);
@ -1979,9 +2011,6 @@ void GUI::writeSettings()
!= SHOW_GRAPH_SLIDER_INFO_DEFAULT)
settings.setValue(SHOW_GRAPH_SLIDER_INFO_SETTING,
_showGraphSliderInfoAction->isChecked());
if (_showMarkersAction->isChecked() != SHOW_MARKERS_DEFAULT)
settings.setValue(SHOW_MARKERS_SETTING,
_showMarkersAction->isChecked());
settings.endGroup();
settings.beginGroup(POI_SETTINGS_GROUP);
@ -2022,6 +2051,17 @@ void GUI::writeSettings()
if (_showTicksAction->isChecked() != SHOW_TICKS_DEFAULT)
settings.setValue(SHOW_TICKS_SETTING,
_showTicksAction->isChecked());
bool sm = _showMarkersAction->isChecked()
| _showMarkerDateAction->isChecked()
| _showMarkerCoordinatesAction->isChecked();
if (sm != SHOW_MARKERS_DEFAULT)
settings.setValue(SHOW_MARKERS_SETTING, sm);
if (_showMarkerDateAction->isChecked()
&& SHOW_MARKER_INFO_DEFAULT != MarkerInfoItem::Date)
settings.setValue(SHOW_MARKER_INFO_SETTING, MarkerInfoItem::Date);
else if (_showMarkerCoordinatesAction->isChecked()
&& SHOW_MARKER_INFO_DEFAULT != MarkerInfoItem::Position)
settings.setValue(SHOW_MARKER_INFO_SETTING, MarkerInfoItem::Position);
settings.endGroup();
settings.beginGroup(PDF_EXPORT_SETTINGS_GROUP);
@ -2127,21 +2167,17 @@ void GUI::writeSettings()
if (_options.showSecondarySpeed != SHOW_SECONDARY_SPEED_DEFAULT)
settings.setValue(SHOW_SECONDARY_SPEED_SETTING,
_options.showSecondarySpeed);
#ifdef ENABLE_TIMEZONES
if (_options.timeZone != TimeZoneInfo())
settings.setValue(TIME_ZONE_SETTING, QVariant::fromValue(
_options.timeZone));
#endif // ENABLE_TIMEZONES
if (_options.useSegments != USE_SEGMENTS_DEFAULT)
settings.setValue(USE_SEGMENTS_SETTING, _options.useSegments);
if (_options.poiRadius != POI_RADIUS_DEFAULT)
settings.setValue(POI_RADIUS_SETTING, _options.poiRadius);
if (_options.useOpenGL != USE_OPENGL_DEFAULT)
settings.setValue(USE_OPENGL_SETTING, _options.useOpenGL);
#ifdef ENABLE_HTTP2
if (_options.enableHTTP2 != ENABLE_HTTP2_DEFAULT)
settings.setValue(ENABLE_HTTP2_SETTING, _options.enableHTTP2);
#endif // ENABLE_HTTP2
if (_options.pixmapCache != PIXMAP_CACHE_DEFAULT)
settings.setValue(PIXMAP_CACHE_SETTING, _options.pixmapCache);
if (_options.connectionTimeout != CONNECTION_TIMEOUT_DEFAULT)
@ -2165,12 +2201,12 @@ void GUI::writeSettings()
_options.separateGraphPage);
if (_options.sliderColor != SLIDER_COLOR_DEFAULT)
settings.setValue(SLIDER_COLOR_SETTING, _options.sliderColor);
if (_options.projection != PROJECTION_DEFAULT)
settings.setValue(PROJECTION_SETTING, _options.projection);
#ifdef ENABLE_HIDPI
if (_options.outputProjection != OUTPUT_PROJECTION_DEFAULT)
settings.setValue(OUTPUT_PROJECTION_SETTING, _options.outputProjection);
if (_options.inputProjection != INPUT_PROJECTION_DEFAULT)
settings.setValue(INPUT_PROJECTION_SETTING, _options.outputProjection);
if (_options.hidpiMap != HIDPI_MAP_DEFAULT)
settings.setValue(HIDPI_MAP_SETTING, _options.hidpiMap);
#endif // ENABLE_HIDPI
settings.endGroup();
}
@ -2180,14 +2216,12 @@ void GUI::readSettings()
QSettings settings(qApp->applicationName(), qApp->applicationName());
settings.beginGroup(WINDOW_SETTINGS_GROUP);
resize(settings.value(WINDOW_SIZE_SETTING, WINDOW_SIZE_DEFAULT).toSize());
move(settings.value(WINDOW_POS_SETTING, WINDOW_POS_DEFAULT).toPoint());
restoreGeometry(settings.value(WINDOW_GEOMETRY_SETTING).toByteArray());
restoreState(settings.value(WINDOW_STATE_SETTING).toByteArray());
settings.endGroup();
settings.beginGroup(SETTINGS_SETTINGS_GROUP);
if (settings.value(TIME_TYPE_SETTING, TIME_TYPE_DEFAULT).toInt()
== Moving)
if (settings.value(TIME_TYPE_SETTING, TIME_TYPE_DEFAULT).toInt() == Moving)
_movingTimeAction->trigger();
else
_totalTimeAction->trigger();
@ -2253,15 +2287,11 @@ void GUI::readSettings()
showGraphSliderInfo(false);
else
_showGraphSliderInfoAction->setChecked(true);
if (!settings.value(SHOW_MARKERS_SETTING, SHOW_MARKERS_DEFAULT).toBool())
_mapView->showMarkers(false);
else
_showMarkersAction->setChecked(true);
settings.endGroup();
settings.beginGroup(POI_SETTINGS_GROUP);
if (!settings.value(OVERLAP_POI_SETTING, OVERLAP_POI_DEFAULT).toBool())
_mapView->setPOIOverlap(false);
_mapView->showOverlappedPOIs(false);
else
_overlapPOIAction->setChecked(true);
if (!settings.value(LABELS_POI_SETTING, LABELS_POI_DEFAULT).toBool())
@ -2323,14 +2353,26 @@ void GUI::readSettings()
_mapView->showTicks(true);
_showTicksAction->setChecked(true);
}
if (settings.value(SHOW_MARKERS_SETTING, SHOW_MARKERS_DEFAULT).toBool()) {
MarkerInfoItem::Type mt = static_cast<MarkerInfoItem::Type>
(settings.value(SHOW_MARKER_INFO_SETTING,
SHOW_MARKER_INFO_DEFAULT).toInt());
if (mt == MarkerInfoItem::Position)
_showMarkerCoordinatesAction->trigger();
else if (mt == MarkerInfoItem::Date)
_showMarkerDateAction->trigger();
else
_showMarkersAction->trigger();
} else
_hideMarkersAction->trigger();
settings.endGroup();
settings.beginGroup(PDF_EXPORT_SETTINGS_GROUP);
_pdfExport.orientation = (QPrinter::Orientation) settings.value(
_pdfExport.orientation = (QPageLayout::Orientation) settings.value(
PAPER_ORIENTATION_SETTING, PAPER_ORIENTATION_DEFAULT).toInt();
_pdfExport.resolution = settings.value(RESOLUTION_SETTING,
RESOLUTION_DEFAULT).toInt();
_pdfExport.paperSize = (QPrinter::PaperSize) settings.value(
_pdfExport.paperSize = (QPageSize::PageSizeId) settings.value(
PAPER_SIZE_SETTING, PAPER_SIZE_DEFAULT).toInt();
qreal ml = settings.value(PDF_MARGIN_LEFT_SETTING, PDF_MARGIN_LEFT_DEFAULT)
.toReal();
@ -2340,7 +2382,7 @@ void GUI::readSettings()
PDF_MARGIN_RIGHT_DEFAULT).toReal();
qreal mb = settings.value(PDF_MARGIN_BOTTOM_SETTING,
PDF_MARGIN_BOTTOM_DEFAULT).toReal();
_pdfExport.margins = MarginsF(ml, mt, mr, mb);
_pdfExport.margins = QMarginsF(ml, mt, mr, mb);
_pdfExport.fileName = settings.value(PDF_FILENAME_SETTING,
PDF_FILENAME_DEFAULT).toString();
settings.endGroup();
@ -2354,8 +2396,8 @@ void GUI::readSettings()
.toInt();
int mri = settings.value(PNG_MARGIN_RIGHT_SETTING, PNG_MARGIN_RIGHT_DEFAULT)
.toInt();
int mbi = settings.value(PNG_MARGIN_BOTTOM_SETTING, PNG_MARGIN_BOTTOM_DEFAULT)
.toInt();
int mbi = settings.value(PNG_MARGIN_BOTTOM_SETTING,
PNG_MARGIN_BOTTOM_DEFAULT).toInt();
_pngExport.margins = QMargins(mli, mti, mri, mbi);
_pngExport.antialiasing = settings.value(PNG_ANTIALIASING_SETTING,
PNG_ANTIALIASING_DEFAULT).toBool();
@ -2425,9 +2467,7 @@ void GUI::readSettings()
_options.showSecondarySpeed = settings.value(
SHOW_SECONDARY_SPEED_SETTING,
SHOW_SECONDARY_SPEED_DEFAULT).toBool();
#ifdef ENABLE_TIMEZONES
_options.timeZone = settings.value(TIME_ZONE_SETTING).value<TimeZoneInfo>();
#endif // ENABLE_TIMEZONES
_options.useSegments = settings.value(USE_SEGMENTS_SETTING,
USE_SEGMENTS_DEFAULT).toBool();
_options.automaticPause = settings.value(AUTOMATIC_PAUSE_SETTING,
@ -2438,10 +2478,8 @@ void GUI::readSettings()
.toInt();
_options.useOpenGL = settings.value(USE_OPENGL_SETTING, USE_OPENGL_DEFAULT)
.toBool();
#ifdef ENABLE_HTTP2
_options.enableHTTP2 = settings.value(ENABLE_HTTP2_SETTING,
ENABLE_HTTP2_DEFAULT).toBool();
#endif // ENABLE_HTTP2
_options.pixmapCache = settings.value(PIXMAP_CACHE_SETTING,
PIXMAP_CACHE_DEFAULT).toInt();
_options.connectionTimeout = settings.value(CONNECTION_TIMEOUT_SETTING,
@ -2464,12 +2502,12 @@ void GUI::readSettings()
SEPARATE_GRAPH_PAGE_DEFAULT).toBool();
_options.sliderColor = settings.value(SLIDER_COLOR_SETTING,
SLIDER_COLOR_DEFAULT).value<QColor>();
_options.projection = settings.value(PROJECTION_SETTING, PROJECTION_DEFAULT)
.toInt();
#ifdef ENABLE_HIDPI
_options.outputProjection = settings.value(OUTPUT_PROJECTION_SETTING,
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)
.toBool();
#endif // ENABLE_HIDPI
_mapView->setPalette(_options.palette);
_mapView->setMapOpacity(_options.mapOpacity);
@ -2489,14 +2527,11 @@ void GUI::readSettings()
_mapView->setMarkerColor(_options.sliderColor);
if (_options.useOpenGL)
_mapView->useOpenGL(true);
#ifdef ENABLE_HIDPI
_mapView->setDevicePixelRatio(devicePixelRatioF(),
_options.hidpiMap ? devicePixelRatioF() : 1.0);
#endif // ENABLE_HIDPI
_mapView->setProjection(_options.projection);
#ifdef ENABLE_TIMEZONES
_mapView->setOutputProjection(_options.outputProjection);
_mapView->setInputProjection(_options.inputProjection);
_mapView->setTimeZone(_options.timeZone.zone());
#endif // ENABLE_TIMEZONES
for (int i = 0; i < _tabs.count(); i++) {
_tabs.at(i)->setPalette(_options.palette);
@ -2587,20 +2622,17 @@ void GUI::show()
{
QMainWindow::show();
#ifdef ENABLE_HIDPI
QWindow *w = windowHandle();
connect(w->screen(), SIGNAL(logicalDotsPerInchChanged(qreal)), this,
SLOT(logicalDotsPerInchChanged(qreal)));
connect(w, SIGNAL(screenChanged(QScreen*)), this,
SLOT(screenChanged(QScreen*)));
#endif // ENABLE_HIDPI
_mapView->fitContentToSize();
}
void GUI::screenChanged(QScreen *screen)
{
#ifdef ENABLE_HIDPI
_mapView->setDevicePixelRatio(devicePixelRatioF(),
_options.hidpiMap ? devicePixelRatioF() : 1.0);
@ -2608,17 +2640,12 @@ void GUI::screenChanged(QScreen *screen)
SLOT(logicalDotsPerInchChanged(qreal)));
connect(screen, SIGNAL(logicalDotsPerInchChanged(qreal)), this,
SLOT(logicalDotsPerInchChanged(qreal)));
#else // ENABLE_HIDPI
Q_UNUSED(screen);
#endif // ENABLE_HIDPI
}
void GUI::logicalDotsPerInchChanged(qreal dpi)
{
Q_UNUSED(dpi)
#ifdef ENABLE_HIDPI
_mapView->setDevicePixelRatio(devicePixelRatioF(),
_options.hidpiMap ? devicePixelRatioF() : 1.0);
#endif // ENBLE_HIDPI
}

View File

@ -60,6 +60,7 @@ private slots:
void showGraphs(bool show);
void showGraphGrids(bool show);
void showGraphSliderInfo(bool show);
void showPathMarkerInfo(QAction *action);
void showToolbars(bool show);
void showFullscreen(bool show);
void showTracks(bool show);
@ -91,7 +92,6 @@ private slots:
void setDegreesMinutes() {setCoordinatesFormat(DegreesMinutes);}
void setDMS() {setCoordinatesFormat(DMS);}
void sliderPositionChanged(qreal pos);
void screenChanged(QScreen *screen);
void logicalDotsPerInchChanged(qreal dpi);
@ -206,7 +206,10 @@ private:
QAction *_showWaypointLabelsAction;
QAction *_showAreasAction;
QAction *_showRouteWaypointsAction;
QAction *_hideMarkersAction;
QAction *_showMarkersAction;
QAction *_showMarkerDateAction;
QAction *_showMarkerCoordinatesAction;
QAction *_showTicksAction;
QAction *_showCoordinatesAction;
QAction *_openOptionsAction;
@ -236,9 +239,10 @@ private:
DateTimeRange _dateRange;
QString _pathName;
qreal _sliderPos;
GraphTab *_lastGraphTab;
QList<QByteArray> _windowStates;
QList<QByteArray> _windowGeometries;
int _frameStyle;
PDFExport _pdfExport;

View File

@ -18,9 +18,9 @@ void InfoItem::updateBoundingRect()
for (QList<KV<QString, QString> >::const_iterator i = _list.constBegin();
i != _list.constEnd(); i++) {
width += fm.width(i->key() + ": ");
width += fm.width(i->value()) + ((i == _list.constEnd() - 1)
? 0 : PADDING);
width += fm.horizontalAdvance(i->key() + ": " + i->value());
if (i != _list.constEnd() - 1)
width += PADDING;
}
_boundingRect = QRectF(0, 0, width, _list.isEmpty() ? 0 : fm.height());
@ -39,12 +39,11 @@ void InfoItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
for (QList<KV<QString, QString> >::const_iterator i = _list.constBegin();
i != _list.constEnd(); i++) {
painter->drawText(width, fm.height() - fm.descent(), i->key() + ": ");
width += fm.width(i->key() + ": ");
painter->drawText(width, fm.height() - fm.descent(), i->value());
width += fm.width(i->value()) + ((i == _list.constEnd() - 1)
? 0 : PADDING);
QString text(i->key() + ": " + i->value());
painter->drawText(width, fm.height() - fm.descent(), text);
width += fm.horizontalAdvance(text);
if (i != _list.constEnd() - 1) {
width += PADDING;
painter->save();
painter->setPen(Qt::gray);
painter->drawLine(width - PADDING/2, fm.descent(),

View File

@ -14,6 +14,7 @@
#define ZOOM_OUT Qt::Key_Minus
#define TOGGLE_GRAPH_TYPE_KEY Qt::Key_X
#define TOGGLE_TIME_TYPE_KEY Qt::Key_T
#define TOGGLE_MARKER_INFO_KEY Qt::Key_I
#define QUIT_SHORTCUT QKeySequence(QKeySequence::Quit)
#define OPEN_SHORTCUT QKeySequence(QKeySequence::Open)

View File

@ -4,11 +4,11 @@
#include <QApplication>
#include <QScrollBar>
#include <QClipboard>
#include <QOpenGLWidget>
#include "data/poi.h"
#include "data/data.h"
#include "map/map.h"
#include "map/pcs.h"
#include "opengl.h"
#include "trackitem.h"
#include "routeitem.h"
#include "waypointitem.h"
@ -19,6 +19,7 @@
#include "keys.h"
#include "graphicsscene.h"
#include "mapaction.h"
#include "markerinfoitem.h"
#include "mapview.h"
@ -67,10 +68,12 @@ MapView::MapView(Map *map, POI *poi, QWidget *parent)
_coordinates->setVisible(false);
_scene->addItem(_coordinates);
_projection = PCS::pcs(3857);
_outputProjection = PCS::pcs(3857);
_inputProjection = GCS::gcs(4326);
_map = map;
_map->load();
_map->setProjection(_projection);
_map->setOutputProjection(_outputProjection);
_map->setInputProjection(_inputProjection);
connect(_map, SIGNAL(tilesLoaded()), this, SLOT(reloadMap()));
_poi = poi;
@ -91,6 +94,7 @@ MapView::MapView(Map *map, POI *poi, QWidget *parent)
_overlapPOIs = true;
_showRouteWaypoints = true;
_showMarkers = true;
_markerInfoType = MarkerInfoItem::None;
_showPathTicks = false;
_trackWidth = 3;
_routeWidth = 3;
@ -101,10 +105,8 @@ MapView::MapView(Map *map, POI *poi, QWidget *parent)
_poiSize = 8;
_poiColor = Qt::black;
#ifdef ENABLE_HIDPI
_deviceRatio = 1.0;
_mapRatio = 1.0;
#endif // ENABLE_HIDPI
_opengl = false;
_plot = false;
_digitalZoom = 0;
@ -141,6 +143,7 @@ PathItem *MapView::addTrack(const Track &track)
ti->setDigitalZoom(_digitalZoom);
ti->setMarkerColor(_markerColor);
ti->showMarker(_showMarkers);
ti->showMarkerInfo(_markerInfoType);
ti->showTicks(_showPathTicks);
_scene->addItem(ti);
@ -169,6 +172,7 @@ PathItem *MapView::addRoute(const Route &route)
ri->setDigitalZoom(_digitalZoom);
ri->setMarkerColor(_markerColor);
ri->showMarker(_showMarkers);
ri->showMarkerInfo(_markerInfoType);
ri->showTicks(_showPathTicks);
_scene->addItem(ri);
@ -371,10 +375,9 @@ void MapView::setMap(Map *map)
_map = map;
_map->load();
_map->setProjection(_projection);
#ifdef ENABLE_HIDPI
_map->setOutputProjection(_outputProjection);
_map->setInputProjection(_inputProjection);
_map->setDevicePixelRatio(_deviceRatio, _mapRatio);
#endif // ENABLE_HIDPI
connect(_map, SIGNAL(tilesLoaded()), this, SLOT(reloadMap()));
digitalZoom(0);
@ -413,6 +416,14 @@ void MapView::setPOI(POI *poi)
updatePOI();
}
void MapView::setGraph(int index)
{
for (int i = 0; i < _tracks.size(); i++)
_tracks.at(i)->setGraph(index);
for (int i = 0; i < _routes.size(); i++)
_routes.at(i)->setGraph(index);
}
void MapView::updatePOI()
{
for (POIHash::const_iterator it = _pois.constBegin();
@ -474,18 +485,25 @@ void MapView::setUnits(Units units)
void MapView::setCoordinatesFormat(CoordinatesFormat format)
{
WaypointItem::setCoordinatesFormat(format);
PathItem::setCoordinatesFormat(format);
for (int i = 0; i < _tracks.count(); i++)
_tracks[i]->updateMarkerInfo();
for (int i = 0; i < _routes.count(); i++)
_routes[i]->updateMarkerInfo();
_coordinates->setFormat(format);
}
void MapView::setTimeZone(const QTimeZone &zone)
{
#ifdef ENABLE_TIMEZONES
WaypointItem::setTimeZone(zone);
PathItem::setTimeZone(zone);
#else // ENABLE_TIMEZONES
Q_UNUSED(zone);
#endif // ENABLE_TIMEZONES
for (int i = 0; i < _tracks.count(); i++)
_tracks[i]->updateMarkerInfo();
for (int i = 0; i < _routes.count(); i++)
_routes[i]->updateMarkerInfo();
}
void MapView::clearMapCache()
@ -520,10 +538,8 @@ void MapView::digitalZoom(int zoom)
_coordinates->setDigitalZoom(_digitalZoom);
}
void MapView::zoom(int zoom, const QPoint &pos)
void MapView::zoom(int zoom, const QPoint &pos, bool shift)
{
bool shift = QApplication::keyboardModifiers() & Qt::ShiftModifier;
if (_digitalZoom) {
if (((_digitalZoom > 0 && zoom > 0) && (!shift || _digitalZoom
>= MAX_DIGITAL_ZOOM)) || ((_digitalZoom < 0 && zoom < 0) && (!shift
@ -549,17 +565,28 @@ void MapView::zoom(int zoom, const QPoint &pos)
void MapView::wheelEvent(QWheelEvent *event)
{
static int deg = 0;
bool shift = (event->modifiers() & MODIFIER) ? true : false;
// Shift inverts the wheel axis on OS X, so use scrolling in both axes for
// the zoom.
int delta = event->angleDelta().y()
? event->angleDelta().y() : event->angleDelta().x();
deg += event->delta() / 8;
deg += delta / 8;
if (qAbs(deg) < 15)
return;
deg = 0;
zoom((event->delta() > 0) ? 1 : -1, event->pos());
#if QT_VERSION < QT_VERSION_CHECK(5, 15, 0)
zoom((delta > 0) ? 1 : -1, event->pos(), shift);
#else // QT 5.15
zoom((delta > 0) ? 1 : -1, event->position().toPoint(), shift);
#endif // QT 5.15
}
void MapView::mouseDoubleClickEvent(QMouseEvent *event)
{
bool shift = (event->modifiers() & MODIFIER) ? true : false;
QGraphicsView::mouseDoubleClickEvent(event);
if (event->isAccepted())
return;
@ -567,13 +594,13 @@ void MapView::mouseDoubleClickEvent(QMouseEvent *event)
if (event->button() != Qt::LeftButton && event->button() != Qt::RightButton)
return;
zoom((event->button() == Qt::LeftButton) ? 1 : -1, event->pos());
zoom((event->button() == Qt::LeftButton) ? 1 : -1, event->pos(), shift);
}
void MapView::keyPressEvent(QKeyEvent *event)
{
int z;
bool shift = (event->modifiers() & MODIFIER) ? true : false;
QPoint pos = viewport()->rect().center();
if (event->key() == ZOOM_IN)
@ -593,7 +620,7 @@ void MapView::keyPressEvent(QKeyEvent *event)
return;
}
zoom(z, pos);
zoom(z, pos, shift);
}
void MapView::keyReleaseEvent(QKeyEvent *event)
@ -626,9 +653,7 @@ void MapView::plot(QPainter *painter, const QRectF &target, qreal scale,
// Enter plot mode
setUpdatesEnabled(false);
_plot = true;
#ifdef ENABLE_HIDPI
_map->setDevicePixelRatio(_deviceRatio, 1.0);
#endif // ENABLE_HIDPI
// Compute sizes & ratios
orig = viewport()->rect();
@ -695,9 +720,7 @@ void MapView::plot(QPainter *painter, const QRectF &target, qreal scale,
_mapScale->setPos(origPos);
// Exit plot mode
#ifdef ENABLE_HIDPI
_map->setDevicePixelRatio(_deviceRatio, _mapRatio);
#endif // ENABLE_HIDPI
_plot = false;
setUpdatesEnabled(true);
}
@ -797,6 +820,16 @@ void MapView::showMarkers(bool show)
_routes.at(i)->showMarker(show);
}
void MapView::showMarkerInfo(MarkerInfoItem::Type type)
{
_markerInfoType = type;
for (int i = 0; i < _tracks.size(); i++)
_tracks.at(i)->showMarkerInfo(type);
for (int i = 0; i < _routes.size(); i++)
_routes.at(i)->showMarkerInfo(type);
}
void MapView::showTicks(bool show)
{
_showPathTicks = show;
@ -840,9 +873,9 @@ void MapView::showCoordinates(bool show)
setMouseTracking(show);
}
void MapView::setPOIOverlap(bool overlap)
void MapView::showOverlappedPOIs(bool show)
{
_overlapPOIs = overlap;
_overlapPOIs = show;
updatePOIVisibility();
}
@ -1019,7 +1052,7 @@ void MapView::useOpenGL(bool use)
_opengl = use;
if (use)
setViewport(new OPENGL_WIDGET);
setViewport(new QOpenGLWidget);
else
setViewport(new QWidget);
}
@ -1039,6 +1072,14 @@ void MapView::setMarkerColor(const QColor &color)
_routes.at(i)->setMarkerColor(color);
}
void MapView::setMarkerPosition(qreal pos)
{
for (int i = 0; i < _tracks.size(); i++)
_tracks.at(i)->setMarkerPosition(pos);
for (int i = 0; i < _routes.size(); i++)
_routes.at(i)->setMarkerPosition(pos);
}
void MapView::reloadMap()
{
_scene->invalidate();
@ -1046,7 +1087,6 @@ void MapView::reloadMap()
void MapView::setDevicePixelRatio(qreal deviceRatio, qreal mapRatio)
{
#ifdef ENABLE_HIDPI
if (_deviceRatio == deviceRatio && _mapRatio == mapRatio)
return;
@ -1079,26 +1119,40 @@ void MapView::setDevicePixelRatio(qreal deviceRatio, qreal mapRatio)
centerOn(nc);
reloadMap();
#else // ENABLE_HIDPI
Q_UNUSED(deviceRatio);
Q_UNUSED(mapRatio);
#endif // ENABLE_HIDPI
}
void MapView::setProjection(int id)
void MapView::setOutputProjection(int id)
{
const PCS *pcs;
const GCS *gcs;
Coordinates center = _map->xy2ll(mapToScene(viewport()->rect().center()));
if ((pcs = PCS::pcs(id)))
_projection = Projection(pcs);
_outputProjection = Projection(pcs);
else if ((gcs = GCS::gcs(id)))
_projection = Projection(gcs);
_outputProjection = Projection(gcs);
else
qWarning("%d: Unknown PCS/GCS id", id);
_map->setProjection(_projection);
_map->setOutputProjection(_outputProjection);
rescale();
centerOn(_map->ll2xy(center));
}
void MapView::setInputProjection(int id)
{
const PCS *pcs;
const GCS *gcs;
Coordinates center = _map->xy2ll(mapToScene(viewport()->rect().center()));
if ((pcs = PCS::pcs(id)))
_inputProjection = Projection(pcs);
else if ((gcs = GCS::gcs(id)))
_inputProjection = Projection(gcs);
else
qWarning("%d: Unknown PCS/GCS id", id);
_map->setInputProjection(_inputProjection);
rescale();
centerOn(_map->ll2xy(center));
}

View File

@ -14,6 +14,7 @@
#include "searchpointer.h"
#include "units.h"
#include "format.h"
#include "markerinfoitem.h"
#include "palette.h"
@ -56,6 +57,7 @@ public:
void setPalette(const Palette &palette);
void setPOI(POI *poi);
void setMap(Map *map);
void setGraph(int index);
void plot(QPainter *painter, const QRectF &target, qreal scale,
PlotFlags flags);
@ -79,28 +81,30 @@ public:
void setBackgroundColor(const QColor &color);
void useOpenGL(bool use);
void useAntiAliasing(bool use);
void setCoordinatesFormat(CoordinatesFormat format);
void setTimeZone(const QTimeZone &zone);
void setDevicePixelRatio(qreal deviceRatio, qreal mapRatio);
void setOutputProjection(int id);
void setInputProjection(int id);
void clearMapCache();
void fitContentToSize();
public slots:
void showMap(bool show);
void showPOI(bool show);
void setPOIOverlap(bool overlap);
void showWaypointLabels(bool show);
void showPOILabels(bool show);
void showCoordinates(bool show);
void showTicks(bool show);
void showMarkers(bool show);
void showMarkerInfo(MarkerInfoItem::Type type);
void showOverlappedPOIs(bool show);
void showWaypointLabels(bool show);
void showTracks(bool show);
void showRoutes(bool show);
void showAreas(bool show);
void showWaypoints(bool show);
void showRouteWaypoints(bool show);
void showMarkers(bool show);
void showCoordinates(bool show);
void showTicks(bool show);
void clearMapCache();
void setCoordinatesFormat(CoordinatesFormat format);
void setTimeZone(const QTimeZone &zone);
void setDevicePixelRatio(qreal deviceRatio, qreal mapRatio);
void setProjection(int id);
void fitContentToSize();
void setMarkerPosition(qreal pos);
private slots:
void updatePOI();
@ -122,7 +126,7 @@ private:
QPointF contentCenter() const;
void rescale();
void centerOn(const QPointF &pos);
void zoom(int zoom, const QPoint &pos);
void zoom(int zoom, const QPoint &pos, bool shift);
void digitalZoom(int zoom);
void updatePOIVisibility();
void skipColor() {_palette.nextColor();}
@ -155,11 +159,12 @@ private:
Palette _palette;
qreal _mapOpacity;
Projection _projection;
Projection _outputProjection, _inputProjection;
bool _showMap, _showTracks, _showRoutes, _showAreas, _showWaypoints,
_showWaypointLabels, _showPOI, _showPOILabels, _showRouteWaypoints,
_showMarkers, _showPathTicks;
MarkerInfoItem::Type _markerInfoType;
bool _overlapPOIs;
int _trackWidth, _routeWidth, _areaWidth;
Qt::PenStyle _trackStyle, _routeStyle, _areaStyle;
@ -171,10 +176,8 @@ private:
bool _plot;
QCursor _cursor;
#ifdef ENABLE_HIDPI
qreal _deviceRatio;
qreal _mapRatio;
#endif // ENABLE_HIDPI
bool _opengl;
};

View File

@ -1,44 +0,0 @@
#ifndef MARGINS_H
#define MARGINS_H
#include <QtGlobal>
#include <QDebug>
class MarginsF
{
public:
MarginsF() {_left = 0; _top = 0; _right = 0; _bottom = 0;}
MarginsF(qreal left, qreal top, qreal right, qreal bottom)
{_left = left, _top = top; _right = right; _bottom = bottom;}
qreal left() const {return _left;}
qreal top() const {return _top;}
qreal right() const {return _right;}
qreal bottom() const {return _bottom;}
private:
qreal _left, _top, _right, _bottom;
};
inline MarginsF operator*(const MarginsF &margins, qreal factor)
{
return MarginsF(margins.left() * factor, margins.top() * factor,
margins.right() * factor, margins.bottom() * factor);
}
inline MarginsF operator/(const MarginsF &margins, qreal factor)
{
return MarginsF(margins.left() / factor, margins.top() / factor,
margins.right() / factor, margins.bottom() / factor);
}
#ifndef QT_NO_DEBUG
inline QDebug operator<<(QDebug dbg, const MarginsF &margins)
{
dbg.nospace() << "MarginsF(" << margins.left() << ", " << margins.top()
<< ", " << margins.right() << margins.bottom() << ")";
return dbg.space();
}
#endif // QT_NO_DEBUG
#endif // MARGINS_H

View File

@ -75,7 +75,7 @@ MarginsFWidget::MarginsFWidget(QWidget *parent) : QWidget(parent)
setLayout(layout);
}
void MarginsFWidget::setValue(const MarginsF &value)
void MarginsFWidget::setValue(const QMarginsF &value)
{
_top->setValue(value.top());
_bottom->setValue(value.bottom());
@ -104,8 +104,8 @@ void MarginsFWidget::setSingleStep(qreal step)
_right->setSingleStep(step);
}
MarginsF MarginsFWidget::value() const
QMarginsF MarginsFWidget::value() const
{
return MarginsF(_left->value(), _top->value(), _right->value(),
return QMarginsF(_left->value(), _top->value(), _right->value(),
_bottom->value());
}

View File

@ -3,7 +3,6 @@
#include <QWidget>
#include <QMargins>
#include "margins.h"
class QSpinBox;
class QDoubleSpinBox;
@ -33,8 +32,8 @@ class MarginsFWidget : public QWidget
public:
MarginsFWidget(QWidget *parent = 0);
MarginsF value() const;
void setValue(const MarginsF &value);
QMarginsF value() const;
void setValue(const QMarginsF &value);
void setUnits(const QString &units);
void setSingleStep(qreal step);

View File

@ -0,0 +1,86 @@
#include <QPainter>
#include <QDateTime>
#include <QLocale>
#include "common/coordinates.h"
#include "font.h"
#include "markerinfoitem.h"
#define OFFSET 7
CoordinatesFormat MarkerInfoItem::_format = DecimalDegrees;
MarkerInfoItem::MarkerInfoItem(QGraphicsItem *parent) : QGraphicsItem(parent)
{
_color = Qt::red;
_font.setPixelSize(FONT_SIZE);
_font.setFamily(FONT_FAMILY);
}
void MarkerInfoItem::setDate(const QDateTime &date)
{
prepareGeometryChange();
QLocale l;
_s1 = l.toString(date.date(), QLocale::ShortFormat);
_s2 = l.toString(date.time(), QLocale::ShortFormat);
updateBoundingRect();
}
void MarkerInfoItem::setCoordinates(const Coordinates &c)
{
prepareGeometryChange();
_s1 = Format::lat(c, _format);
_s2 = Format::lon(c, _format);
updateBoundingRect();
}
void MarkerInfoItem::updateBoundingRect()
{
QFontMetrics fm(_font);
qreal width = qMax(fm.boundingRect(_s1).width(),
fm.boundingRect(_s2).width());
qreal height = 2 * fm.height() - 2*fm.descent();
_boundingRect = QRectF(-OFFSET/2, -height/2, width + 1.5*OFFSET, height);
}
void MarkerInfoItem::paint(QPainter *painter, const QStyleOptionGraphicsItem
*option, QWidget *widget)
{
Q_UNUSED(option);
Q_UNUSED(widget);
QFontMetrics fm(_font);
QRectF r1(OFFSET, -fm.height() + fm.descent(),
fm.boundingRect(_s1).width(), fm.height() - fm.descent());
QRectF r2(OFFSET, 0, fm.boundingRect(_s2).width(), fm.height()
- fm.descent());
painter->setPen(Qt::NoPen);
QColor bc(painter->background().color());
bc.setAlpha(196);
painter->setBrush(QBrush(bc));
painter->drawRect(r2);
painter->drawRect(r1);
painter->setBrush(Qt::NoBrush);
painter->setFont(_font);
painter->setPen(_color);
painter->drawText(OFFSET, -fm.descent()/2, _s1);
painter->drawText(OFFSET, fm.height() - fm.descent()*1.5, _s2);
//painter->drawRect(boundingRect());
}
void MarkerInfoItem::setColor(const QColor &color)
{
_color = color;
update();
}

43
src/GUI/markerinfoitem.h Normal file
View File

@ -0,0 +1,43 @@
#ifndef MARKERINFOITEM_H
#define MARKERINFOITEM_H
#include <QGraphicsItem>
#include "format.h"
class Coordinates;
class MarkerInfoItem : public QGraphicsItem
{
public:
enum Type {
None,
Date,
Position
};
MarkerInfoItem(QGraphicsItem *parent = 0);
QRectF boundingRect() const {return _boundingRect;}
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
QWidget *widget);
void setDate(const QDateTime &date);
void setCoordinates(const Coordinates &c);
void setColor(const QColor &color);
static void setCoordinatesFormat(const CoordinatesFormat &format)
{_format = format;}
private:
void updateBoundingRect();
QString _s1, _s2;
QRectF _boundingRect;
QColor _color;
QFont _font;
static CoordinatesFormat _format;
};
#endif // MARKERINFOITEM_H

View File

@ -1,28 +0,0 @@
#include <QtGlobal>
#if QT_VERSION < QT_VERSION_CHECK(5, 4, 0)
#include <QGLWidget>
#include <QGLFormat>
#else
#include <QOpenGLWidget>
#include <QSurfaceFormat>
#endif
#if QT_VERSION < QT_VERSION_CHECK(5, 4, 0)
#define OPENGL_WIDGET QGLWidget
#else
#define OPENGL_WIDGET QOpenGLWidget
#endif
#if QT_VERSION < QT_VERSION_CHECK(5, 4, 0)
#define OPENGL_SET_FORMAT(samples, stencilBuffer) \
{QGLFormat fmt; \
fmt.setStencilBufferSize(stencilBuffer); \
fmt.setSamples(samples); \
QGLFormat::setDefaultFormat(fmt);}
#else
#define OPENGL_SET_FORMAT(samples, stencilBuffer) \
{QSurfaceFormat fmt; \
fmt.setStencilBufferSize(stencilBuffer); \
fmt.setSamples(samples); \
QSurfaceFormat::setDefaultFormat(fmt);}
#endif

View File

@ -46,19 +46,53 @@ void OptionsDialog::automaticPauseDetectionSet(bool set)
QWidget *OptionsDialog::createMapPage()
{
_projection = new LimitedComboBox(200);
int last = -1;
_outputProjection = new LimitedComboBox(200);
QList<KV<int, QString> > projections(GCS::list() + PCS::list());
qSort(projections);
std::sort(projections.begin(), projections.end());
for (int i = 0; i < projections.size(); i++) {
QString text = QString::number(projections.at(i).key()) + " - "
+ projections.at(i).value();
_projection->addItem(text, QVariant(projections.at(i).key()));
const KV<int, QString> &proj = projections.at(i);
// There may be same EPSG codes with different names
if (proj.key() == last)
continue;
else
last = proj.key();
QString text = QString::number(proj.key()) + " - " + proj.value();
_outputProjection->addItem(text, QVariant(proj.key()));
}
_projection->setCurrentIndex(_projection->findData(_options.projection));
_outputProjection->setCurrentIndex(_outputProjection->findData(
_options.outputProjection));
_inputProjection = new LimitedComboBox(200);
last = -1;
for (int i = 0; i < projections.size(); i++) {
const KV<int, QString> &proj = projections.at(i);
// There may be same EPSG codes with different names
if (proj.key() == last)
continue;
else
last = proj.key();
if (proj.key() == 4326 || proj.key() == 3857) {
QString text = QString::number(proj.key()) + " - " + proj.value();
_inputProjection->addItem(text, QVariant(proj.key()));
}
}
_inputProjection->setCurrentIndex(_inputProjection->findData(
_options.inputProjection));
QLabel *inInfo = new QLabel(tr("Select the proper projection of"
" JNX and KMZ maps. Both EPSG:3857 and EPSG:4326 projected maps"
" exist and there is no projection info in the map file."));
QLabel *outInfo = new QLabel(tr("Select the desired projection of IMG"
" maps. The projection must be valid for the whole map area."));
QFont f = inInfo->font();
f.setPointSize(f.pointSize() - 1);
inInfo->setWordWrap(true);
outInfo->setWordWrap(true);
inInfo->setFont(f);
outInfo->setFont(f);
#ifdef ENABLE_HIDPI
_hidpi = new QRadioButton(tr("High-resolution"));
_lodpi = new QRadioButton(tr("Standard"));
if (_options.hidpiMap)
@ -69,24 +103,39 @@ QWidget *OptionsDialog::createMapPage()
"The map is sharp but map objects are small/hard to read."));
QLabel *llo = new QLabel(tr("Non-HiDPI maps are loaded such as they are. "
"Map objects have the expected size but the map is blurry."));
QFont f = lhi->font();
f.setPointSize(f.pointSize() - 1);
lhi->setWordWrap(true);
llo->setWordWrap(true);
lhi->setFont(f);
llo->setFont(f);
#endif // ENABLE_HIDPI
QFormLayout *vectorLayout = new QFormLayout();
vectorLayout->addRow(tr("Projection:"), _projection);
QVBoxLayout *inLayout = new QVBoxLayout();
inLayout->addWidget(_inputProjection);
inLayout->addWidget(inInfo);
QVBoxLayout *outLayout = new QVBoxLayout();
outLayout->addWidget(_outputProjection);
outLayout->addWidget(outInfo);
#ifndef Q_OS_MAC
QGroupBox *inBox = new QGroupBox(tr("Input"));
inBox->setLayout(inLayout);
QGroupBox *outBox = new QGroupBox(tr("Output"));
outBox->setLayout(outLayout);
#endif // Q_OS_MAC
QWidget *vectorMapsTab = new QWidget();
QVBoxLayout *vectorMapsTabLayout = new QVBoxLayout();
vectorMapsTabLayout->addLayout(vectorLayout);
vectorMapsTabLayout->addStretch();
vectorMapsTab->setLayout(vectorMapsTabLayout);
QWidget *projectionTab = new QWidget();
QVBoxLayout *projectionTabLayout = new QVBoxLayout();
#ifdef Q_OS_MAC
projectionTabLayout->addWidget(new QLabel(tr("Input:")));
projectionTabLayout->addLayout(inLayout);
projectionTabLayout->addWidget(line());
projectionTabLayout->addWidget(new QLabel(tr("Output:")));
projectionTabLayout->addLayout(outLayout);
#else // Q_OS_MAC
projectionTabLayout->addWidget(inBox);
projectionTabLayout->addWidget(outBox);
#endif // Q_OS_MAC
projectionTabLayout->addStretch();
projectionTab->setLayout(projectionTabLayout);
#ifdef ENABLE_HIDPI
QVBoxLayout *hidpiTabLayout = new QVBoxLayout();
hidpiTabLayout->addWidget(_lodpi);
hidpiTabLayout->addWidget(llo);
@ -97,13 +146,10 @@ QWidget *OptionsDialog::createMapPage()
QWidget *hidpiTab = new QWidget();
hidpiTab->setLayout(hidpiTabLayout);
#endif // ENABLE_HIDPI
QTabWidget *mapPage = new QTabWidget();
mapPage->addTab(vectorMapsTab, tr("Vector maps"));
#ifdef ENABLE_HIDPI
mapPage->addTab(projectionTab, tr("Projection"));
mapPage->addTab(hidpiTab, tr("HiDPI display mode"));
#endif // ENABLE_HIDPI
return mapPage;
}
@ -416,7 +462,6 @@ QWidget *OptionsDialog::createDataPage()
_showSecondaryElevation = new QCheckBox(tr("Show secondary elevation"));
_showSecondaryElevation->setChecked(_options.showSecondaryElevation);
#ifdef ENABLE_TIMEZONES
_utcZone = new QRadioButton(tr("UTC"));
_systemZone = new QRadioButton(tr("System"));
_customZone = new QRadioButton(tr("Custom"));
@ -437,7 +482,6 @@ QWidget *OptionsDialog::createDataPage()
QHBoxLayout *customZoneLayout = new QHBoxLayout();
customZoneLayout->addSpacing(20);
customZoneLayout->addWidget(_timeZone);
#endif // ENABLE_TIMEZONES
_useSegments = new QCheckBox(tr("Use segments"));
_useSegments->setChecked(_options.useSegments);
@ -462,7 +506,6 @@ QWidget *OptionsDialog::createDataPage()
elevationOptions->addWidget(_dataDEMElevation);
elevationOptions->addWidget(_showSecondaryElevation);
#ifdef ENABLE_TIMEZONES
QButtonGroup *timeZoneGroup = new QButtonGroup(this);
timeZoneGroup->addButton(_utcZone);
timeZoneGroup->addButton(_systemZone);
@ -472,15 +515,12 @@ QWidget *OptionsDialog::createDataPage()
zoneOptions->addWidget(_systemZone);
zoneOptions->addWidget(_customZone);
zoneOptions->addItem(customZoneLayout);
#endif // ENABLE_TIMEZONES
QFormLayout *formLayout = new QFormLayout();
formLayout->addRow(tr("Speed:"), speedOptions);
formLayout->addRow(tr("Elevation:"), elevationOptions);
#ifdef ENABLE_TIMEZONES
formLayout->addRow(tr("Time zone:"), zoneOptions);
#endif // ENABLE_TIMEZONES
QFormLayout *segmentsLayout = new QFormLayout();
segmentsLayout->addWidget(_useSegments);
@ -492,9 +532,7 @@ QWidget *OptionsDialog::createDataPage()
#else // Q_OS_MAC
QFormLayout *speedLayout = new QFormLayout();
QFormLayout *elevationLayout = new QFormLayout();
#ifdef ENABLE_TIMEZONES
QFormLayout *timeZoneLayout = new QFormLayout();
#endif // ENABLE_TIMEZONES
QFormLayout *segmentsLayout = new QFormLayout();
speedLayout->addWidget(_computedSpeed);
@ -511,7 +549,6 @@ QWidget *OptionsDialog::createDataPage()
QGroupBox *elevationBox = new QGroupBox(tr("Elevation"));
elevationBox->setLayout(elevationLayout);
#ifdef ENABLE_TIMEZONES
timeZoneLayout->addWidget(_utcZone);
timeZoneLayout->addWidget(_systemZone);
timeZoneLayout->addWidget(_customZone);
@ -519,15 +556,12 @@ QWidget *OptionsDialog::createDataPage()
QGroupBox *timeZoneBox = new QGroupBox(tr("Time zone"));
timeZoneBox->setLayout(timeZoneLayout);
#endif // ENABLE_TIMEZONES
segmentsLayout->addWidget(_useSegments);
sourceTabLayout->addWidget(speedBox);
sourceTabLayout->addWidget(elevationBox);
#ifdef ENABLE_TIMEZONES
sourceTabLayout->addWidget(timeZoneBox);
#endif // ENABLE_TIMEZONES
sourceTabLayout->addLayout(segmentsLayout);
#endif // Q_OS_MAC
sourceTabLayout->addStretch();
@ -648,10 +682,8 @@ QWidget *OptionsDialog::createSystemPage()
{
_useOpenGL = new QCheckBox(tr("Use OpenGL"));
_useOpenGL->setChecked(_options.useOpenGL);
#ifdef ENABLE_HTTP2
_enableHTTP2 = new QCheckBox(tr("Enable HTTP/2"));
_enableHTTP2->setChecked(_options.enableHTTP2);
#endif // ENABLE_HTTP2
_pixmapCache = new QSpinBox();
_pixmapCache->setMinimum(16);
@ -670,9 +702,7 @@ QWidget *OptionsDialog::createSystemPage()
formLayout->addRow(tr("Connection timeout:"), _connectionTimeout);
QFormLayout *checkboxLayout = new QFormLayout();
#ifdef ENABLE_HTTP2
checkboxLayout->addWidget(_enableHTTP2);
#endif // ENABLE_HTTP2
checkboxLayout->addWidget(_useOpenGL);
QWidget *systemTab = new QWidget();
@ -764,11 +794,11 @@ void OptionsDialog::accept()
_options.sliderColor = _sliderColor->color();
_options.graphAntiAliasing = _graphAA->isChecked();
_options.projection = _projection->itemData(_projection->currentIndex())
.toInt();
#ifdef ENABLE_HIDPI
_options.outputProjection = _outputProjection->itemData(
_outputProjection->currentIndex()).toInt();
_options.inputProjection = _inputProjection->itemData(
_inputProjection->currentIndex()).toInt();
_options.hidpiMap = _hidpi->isChecked();
#endif // ENABLE_HIDPI
_options.elevationFilter = _elevationFilter->value();
_options.speedFilter = _speedFilter->value();
@ -787,13 +817,11 @@ void OptionsDialog::accept()
_options.dataUseDEM = _dataDEMElevation->isChecked();
_options.showSecondaryElevation = _showSecondaryElevation->isChecked();
_options.showSecondarySpeed = _showSecondarySpeed->isChecked();
#ifdef ENABLE_TIMEZONES
_options.timeZone.setType(_utcZone->isChecked()
? TimeZoneInfo::UTC : _systemZone->isChecked()
? TimeZoneInfo::System : TimeZoneInfo::Custom);
_options.timeZone.setCustomZone(QTimeZone(_timeZone->currentText()
.toLatin1()));
#endif // ENABLE_TIMEZONES
_options.useSegments = _useSegments->isChecked();
qreal poiRadius = (_units == Imperial)
@ -803,9 +831,7 @@ void OptionsDialog::accept()
_options.poiRadius = poiRadius;
_options.useOpenGL = _useOpenGL->isChecked();
#ifdef ENABLE_HTTP2
_options.enableHTTP2 = _enableHTTP2->isChecked();
#endif // ENABLE_HTTP2
_options.pixmapCache = _pixmapCache->value();
_options.connectionTimeout = _connectionTimeout->value();

View File

@ -2,12 +2,9 @@
#define OPTIONSDIALOG_H
#include <QDialog>
#include "common/config.h"
#include "palette.h"
#include "units.h"
#ifdef ENABLE_TIMEZONES
#include "timezoneinfo.h"
#endif // ENABLE_TIMEZONES
class ColorBox;
class StyleComboBox;
@ -42,10 +39,9 @@ struct Options {
int mapOpacity;
QColor backgroundColor;
// Map
int projection;
#ifdef ENABLE_HIDPI
int outputProjection;
int inputProjection;
bool hidpiMap;
#endif // ENABLE_HIDPI
// Data
int elevationFilter;
int speedFilter;
@ -60,17 +56,13 @@ struct Options {
bool dataUseDEM;
bool showSecondaryElevation;
bool showSecondarySpeed;
#ifdef ENABLE_TIMEZONES
TimeZoneInfo timeZone;
#endif // ENABLE_TIMEZONES
bool useSegments;
// POI
int poiRadius;
// System
bool useOpenGL;
#ifdef ENABLE_HTTP2
bool enableHTTP2;
#endif // ENABLE_HTTP2
int pixmapCache;
int connectionTimeout;
// Print/Export
@ -129,11 +121,10 @@ private:
ColorBox *_sliderColor;
QCheckBox *_graphAA;
// Map
LimitedComboBox *_projection;
#ifdef ENABLE_HIDPI
LimitedComboBox *_outputProjection;
LimitedComboBox *_inputProjection;
QRadioButton *_hidpi;
QRadioButton *_lodpi;
#endif // ENABLE_HIDPI
// Data
OddSpinBox *_elevationFilter;
OddSpinBox *_speedFilter;
@ -151,12 +142,10 @@ private:
QRadioButton *_dataDEMElevation;
QCheckBox *_showSecondaryElevation;
QCheckBox *_showSecondarySpeed;
#ifdef ENABLE_TIMEZONES
QRadioButton *_utcZone;
QRadioButton *_systemZone;
QRadioButton *_customZone;
QComboBox *_timeZone;
#endif // ENABLE_TIMEZONES
QCheckBox *_useSegments;
// POI
QDoubleSpinBox *_poiRadius;
@ -164,9 +153,7 @@ private:
QSpinBox *_pixmapCache;
QSpinBox *_connectionTimeout;
QCheckBox *_useOpenGL;
#ifdef ENABLE_HTTP2
QCheckBox *_enableHTTP2;
#endif // ENABLE_HTTP2
// Print/Export
QRadioButton *_wysiwyg;
QRadioButton *_hires;

View File

@ -24,8 +24,13 @@ public:
{return !(*this == other);}
private:
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
qreal _h, _s, _v, _a, _shift;
qreal _state;
#else // QT6
float _h, _s, _v, _a, _shift;
float _state;
#endif // QT6
};
#ifndef QT_NO_DEBUG

View File

@ -6,9 +6,17 @@
#include "map/map.h"
#include "pathtickitem.h"
#include "popup.h"
#include "graphitem.h"
#include "markeritem.h"
#include "pathitem.h"
#if QT_VERSION < QT_VERSION_CHECK(5, 15, 0)
#define INTERSECTS intersect
#else // QT 5.15
#define INTERSECTS intersects
#endif // QT 5.15
#define GEOGRAPHICAL_MILE 1855.3248
static inline bool isValid(const QPointF &p)
@ -22,12 +30,10 @@ static inline unsigned segments(qreal distance)
}
Units PathItem::_units = Metric;
#ifdef ENABLE_TIMEZONES
QTimeZone PathItem::_timeZone = QTimeZone::utc();
#endif // ENABLE_TIMEZONES
PathItem::PathItem(const Path &path, Map *map, QGraphicsItem *parent)
: GraphicsItem(parent), _path(path), _map(map)
: GraphicsItem(parent), _path(path), _map(map), _graph(0)
{
Q_ASSERT(_path.isValid());
@ -37,6 +43,7 @@ PathItem::PathItem(const Path &path, Map *map, QGraphicsItem *parent)
_pen = QPen(brush, _width);
_showMarker = true;
_showTicks = false;
_markerInfoType = MarkerInfoItem::None;
updatePainterPath();
updateShape();
@ -46,6 +53,8 @@ PathItem::PathItem(const Path &path, Map *map, QGraphicsItem *parent)
_marker = new MarkerItem(this);
_marker->setZValue(1);
_marker->setPos(position(_markerDistance));
_markerInfo = new MarkerInfoItem(_marker);
_markerInfo->setVisible(false);
setCursor(Qt::ArrowCursor);
setAcceptHoverEvents(true);
@ -68,14 +77,14 @@ void PathItem::addSegment(const Coordinates &c1, const Coordinates &c2)
QLineF l(QPointF(c1.lon(), c1.lat()), QPointF(c2.lon() + 360,
c2.lat()));
QLineF dl(QPointF(180, -90), QPointF(180, 90));
l.intersect(dl, &p);
l.INTERSECTS(dl, &p);
_painterPath.lineTo(_map->ll2xy(Coordinates(180, p.y())));
_painterPath.moveTo(_map->ll2xy(Coordinates(-180, p.y())));
} else {
QLineF l(QPointF(c1.lon(), c1.lat()), QPointF(c2.lon() - 360,
c2.lat()));
QLineF dl(QPointF(-180, -90), QPointF(-180, 90));
l.intersect(dl, &p);
l.INTERSECTS(dl, &p);
_painterPath.lineTo(_map->ll2xy(Coordinates(-180, p.y())));
_painterPath.moveTo(_map->ll2xy(Coordinates(180, p.y())));
}
@ -260,21 +269,49 @@ QPointF PathItem::position(qreal x) const
}
}
void PathItem::moveMarker(qreal distance)
void PathItem::setMarkerPosition(qreal pos)
{
_markerDistance = distance;
QPointF pos(position(distance));
qreal distance = _graph
? (_graph->graphType() == Time) ? _graph->distanceAtTime(pos) : pos
: NAN;
if (isValid(pos)) {
_markerDistance = distance;
QPointF pp(position(distance));
if (isValid(pp)) {
_marker->setVisible(_showMarker);
_marker->setPos(pos);
_marker->setPos(pp);
setMarkerInfo(pos);
} else
_marker->setVisible(false);
}
void PathItem::setMarkerInfo(qreal pos)
{
if (_markerInfoType == MarkerInfoItem::Date) {
qreal time = _graph
? (_graph->graphType() == Time) ? pos : _graph->timeAtDistance(pos)
: NAN;
QDateTime d(date());
if (!std::isnan(time) && d.isValid())
_markerInfo->setDate(d.addSecs(time).toTimeZone(_timeZone));
else
_markerInfo->setDate(QDateTime());
} else if (_markerInfoType == MarkerInfoItem::Position)
_markerInfo->setCoordinates(_map->xy2ll(_marker->pos()));
}
void PathItem::updateMarkerInfo()
{
qreal pos = _graph ? (_graph->graphType() == Time)
? _graph->timeAtDistance(_markerDistance) : _markerDistance : NAN;
setMarkerInfo(pos);
}
void PathItem::setMarkerColor(const QColor &color)
{
_marker->setColor(color);
_markerInfo->setColor(color);
}
void PathItem::hover(bool hover)
@ -296,9 +333,20 @@ void PathItem::showMarker(bool show)
return;
_showMarker = show;
updateMarkerInfo();
_marker->setVisible(show && isValid(position(_markerDistance)));
}
void PathItem::showMarkerInfo(MarkerInfoItem::Type type)
{
if (_markerInfoType == type)
return;
_markerInfoType = type;
updateMarkerInfo();
_markerInfo->setVisible(type > MarkerInfoItem::None);
}
qreal PathItem::xInM() const
{
return (_units == Nautical) ? NMIINM : (_units == Imperial) ? MIINM : KMINM;
@ -356,6 +404,21 @@ void PathItem::showTicks(bool show)
updateTicks();
}
void PathItem::addGraph(GraphItem *graph)
{
_graphs.append(graph);
if (graph) {
connect(this, SIGNAL(selected(bool)), graph, SLOT(hover(bool)));
connect(graph, SIGNAL(selected(bool)), this, SLOT(hover(bool)));
}
}
void PathItem::setGraph(int index)
{
_graph = _graphs.at(index);
}
void PathItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event)
{
Q_UNUSED(event);

View File

@ -1,19 +1,18 @@
#ifndef PATHITEM_H
#define PATHITEM_H
#include "common/config.h"
#include <QGraphicsObject>
#include <QPen>
#ifdef ENABLE_TIMEZONES
#include <QTimeZone>
#endif // ENABLE_TIMEZONES
#include "data/path.h"
#include "markeritem.h"
#include "units.h"
#include "graphicsscene.h"
#include "markerinfoitem.h"
#include "units.h"
class Map;
class PathTickItem;
class GraphItem;
class MarkerItem;
class PathItem : public QObject, public GraphicsItem
{
@ -28,9 +27,14 @@ public:
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
QWidget *widget);
virtual QDateTime date() const = 0;
const Path &path() const {return _path;}
void addGraph(GraphItem *graph);
void setMap(Map *map);
void setGraph(int index);
void setColor(const QColor &color);
void setWidth(qreal width);
@ -38,17 +42,20 @@ public:
void setDigitalZoom(int zoom);
void setMarkerColor(const QColor &color);
void showMarker(bool show);
void showMarkerInfo(MarkerInfoItem::Type type);
void showTicks(bool show);
void setMarkerPosition(qreal pos);
void updateTicks();
void updateMarkerInfo();
static void setUnits(Units units) {_units = units;}
#ifdef ENABLE_TIMEZONES
static void setTimeZone(const QTimeZone &zone) {_timeZone = zone;}
#endif // ENABLE_TIMEZONES
static void setCoordinatesFormat(const CoordinatesFormat &format)
{MarkerInfoItem::setCoordinatesFormat(format);}
public slots:
void moveMarker(qreal distance);
void hover(bool hover);
signals:
@ -60,9 +67,7 @@ protected:
void mousePressEvent(QGraphicsSceneMouseEvent *event);
static Units _units;
#ifdef ENABLE_TIMEZONES
static QTimeZone _timeZone;
#endif // ENABLE_TIMEZONES
private:
const PathSegment *segment(qreal x) const;
@ -70,12 +75,15 @@ private:
void updatePainterPath();
void updateShape();
void addSegment(const Coordinates &c1, const Coordinates &c2);
void setMarkerInfo(qreal pos);
qreal xInM() const;
unsigned tickSize() const;
Path _path;
Map *_map;
QList<GraphItem *> _graphs;
GraphItem *_graph;
qreal _markerDistance;
int _digitalZoom;
@ -85,8 +93,10 @@ private:
QPainterPath _painterPath;
bool _showMarker;
bool _showTicks;
MarkerInfoItem::Type _markerInfoType;
MarkerItem *_marker;
MarkerInfoItem *_markerInfo;
QVector<PathTickItem*> _ticks;
};

View File

@ -24,18 +24,18 @@ PDFExportDialog::PDFExportDialog(PDFExport &exp, Units units, QWidget *parent)
_fileSelect->setFile(_export.fileName);
_paperSize = new QComboBox();
_paperSize->addItem("A2", QPrinter::A2);
_paperSize->addItem("A3", QPrinter::A3);
_paperSize->addItem("A4", QPrinter::A4);
_paperSize->addItem("A5", QPrinter::A5);
_paperSize->addItem("A6", QPrinter::A6);
_paperSize->addItem("B3", QPrinter::B3);
_paperSize->addItem("B4", QPrinter::B4);
_paperSize->addItem("B5", QPrinter::B5);
_paperSize->addItem("B6", QPrinter::B6);
_paperSize->addItem("Tabloid", QPrinter::Tabloid);
_paperSize->addItem("Legal", QPrinter::Legal);
_paperSize->addItem("Letter", QPrinter::Letter);
_paperSize->addItem("A2", QPageSize::PageSizeId::A2);
_paperSize->addItem("A3", QPageSize::PageSizeId::A3);
_paperSize->addItem("A4", QPageSize::PageSizeId::A4);
_paperSize->addItem("A5", QPageSize::PageSizeId::A5);
_paperSize->addItem("A6", QPageSize::PageSizeId::A6);
_paperSize->addItem("B3", QPageSize::PageSizeId::B3);
_paperSize->addItem("B4", QPageSize::PageSizeId::B4);
_paperSize->addItem("B5", QPageSize::PageSizeId::B5);
_paperSize->addItem("B6", QPageSize::PageSizeId::B6);
_paperSize->addItem("Tabloid", QPageSize::PageSizeId::Tabloid);
_paperSize->addItem("Legal", QPageSize::PageSizeId::Legal);
_paperSize->addItem("Letter", QPageSize::PageSizeId::Letter);
if ((index = _paperSize->findData(_export.paperSize)) >= 0)
_paperSize->setCurrentIndex(index);
@ -51,7 +51,7 @@ PDFExportDialog::PDFExportDialog(PDFExport &exp, Units units, QWidget *parent)
QHBoxLayout *orientationLayout = new QHBoxLayout();
orientationLayout->addWidget(_portrait);
orientationLayout->addWidget(_landscape);
if (_export.orientation == QPrinter::Portrait)
if (_export.orientation == QPageLayout::Orientation::Portrait)
_portrait->setChecked(true);
else
_landscape->setChecked(true);
@ -116,9 +116,9 @@ void PDFExportDialog::accept()
return;
}
QPrinter::Orientation orientation = _portrait->isChecked()
? QPrinter::Portrait : QPrinter::Landscape;
QPrinter::PaperSize paperSize = static_cast<QPrinter::PaperSize>
QPageLayout::Orientation orientation = _portrait->isChecked()
? QPageLayout::Orientation::Portrait : QPageLayout::Orientation::Landscape;
QPageSize::PageSizeId paperSize = static_cast<QPageSize::PageSizeId>
(_paperSize->itemData(_paperSize->currentIndex()).toInt());
int resolution = _resolution->itemData(_resolution->currentIndex()).toInt();

View File

@ -3,7 +3,6 @@
#include <QDialog>
#include <QPrinter>
#include "margins.h"
#include "units.h"
class QComboBox;
@ -14,9 +13,9 @@ class MarginsFWidget;
struct PDFExport
{
QString fileName;
QPrinter::PaperSize paperSize;
QPrinter::Orientation orientation;
MarginsF margins;
QPageSize::PageSizeId paperSize;
QPageLayout::Orientation orientation;
QMarginsF margins;
int resolution;
};

View File

@ -3,7 +3,6 @@
#include <QDialog>
#include <QMargins>
#include "margins.h"
class FileSelectWidget;
class MarginsWidget;

View File

@ -4,9 +4,12 @@
#include <QStyleOptionFrame>
#include <QLabel>
#include <QMouseEvent>
#include <QApplication>
#include <QDesktopWidget>
#include <QBasicTimer>
#include <QScreen>
#include <QApplication>
#if QT_VERSION < QT_VERSION_CHECK(5, 15, 0)
#include <QDesktopWidget>
#endif // QT 5.15
#include "popup.h"
@ -36,10 +39,7 @@ PopupLabel *PopupLabel::_instance = 0;
PopupLabel::PopupLabel(const QString &text, QWidget *parent)
: QLabel(text, parent, Qt::ToolTip | Qt::BypassGraphicsProxyWidget
#if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
| Qt::WindowDoesNotAcceptFocus
#endif // QT5
)
| Qt::WindowDoesNotAcceptFocus)
{
delete _instance;
_instance = this;
@ -74,7 +74,7 @@ void PopupLabel::paintEvent(QPaintEvent *event)
{
QStylePainter p(this);
QStyleOptionFrame opt;
opt.init(this);
opt.initFrom(this);
p.drawPrimitive(QStyle::PE_PanelTipLabel, opt);
p.end();
QLabel::paintEvent(event);
@ -125,7 +125,11 @@ bool PopupLabel::eventFilter(QObject *o, QEvent *ev)
void PopupLabel::place(const QPoint &pos, QWidget *w)
{
#if QT_VERSION < QT_VERSION_CHECK(5, 15, 0)
QRect screen = QApplication::desktop()->screenGeometry(w);
#else // QT 5.15
QRect screen = w->screen()->geometry();
#endif // QT 5.15
QPoint p(pos.x() + 2, pos.y() + 16);
if (p.x() + width() > screen.x() + screen.width())
@ -153,6 +157,9 @@ void PopupLabel::deleteAfterTimer()
void Popup::show(const QPoint &pos, const QString &text, QWidget *w)
{
if (text.isEmpty())
return;
if (PopupLabel::_instance) {
PopupLabel::_instance->stopTimer();
PopupLabel::_instance->setText(text);

View File

@ -1,5 +1,6 @@
#include <QPainter>
#include "data/waypoint.h"
#include "data/route.h"
#include "map/map.h"
#include "format.h"
#include "waypointitem.h"

View File

@ -1,13 +1,11 @@
#ifndef ROUTEITEM_H
#define ROUTEITEM_H
#include "data/route.h"
#include "data/link.h"
#include "pathitem.h"
#include "units.h"
#include "format.h"
#include "graphicsscene.h"
class Map;
class Route;
class WaypointItem;
class RouteItem : public PathItem
@ -23,6 +21,7 @@ public:
void showWaypointLabels(bool show);
QString info() const;
QDateTime date() const {return QDateTime();}
private:
QString _name;

View File

@ -61,9 +61,9 @@ void ScaleItem::computeScale()
qreal res = _res * pow(2, -_digitalZoom);
if (_units == Imperial) {
_length = niceNum((res * M2FT * SCALE_WIDTH) / SEGMENTS, true);
_length = Util::niceNum((res * M2FT * SCALE_WIDTH) / SEGMENTS, true);
if (_length >= MIINFT) {
_length = niceNum((res * M2MI * SCALE_WIDTH) / SEGMENTS, true);
_length = Util::niceNum((res * M2MI * SCALE_WIDTH) / SEGMENTS, true);
_width = (_length / (res * M2MI));
_scale = true;
} else {
@ -71,9 +71,9 @@ void ScaleItem::computeScale()
_scale = false;
}
} else if (_units == Nautical) {
_length = niceNum((res * M2FT * SCALE_WIDTH) / SEGMENTS, true);
_length = Util::niceNum((res * M2FT * SCALE_WIDTH) / SEGMENTS, true);
if (_length >= NMIINFT) {
_length = niceNum((res * M2NMI * SCALE_WIDTH) / SEGMENTS, true);
_length = Util::niceNum((res * M2NMI * SCALE_WIDTH) / SEGMENTS, true);
_width = (_length / (res * M2NMI));
_scale = true;
} else {
@ -81,7 +81,7 @@ void ScaleItem::computeScale()
_scale = false;
}
} else {
_length = niceNum((res * SCALE_WIDTH) / SEGMENTS, true);
_length = Util::niceNum((res * SCALE_WIDTH) / SEGMENTS, true);
if (_length >= KMINM) {
_length *= M2KM;
_width = (_length / (res * M2KM));

View File

@ -1,6 +1,8 @@
#ifndef SEARCHPOINTER_H
#define SEARCHPOINTER_H
#include "common/config.h"
template <class T>
class SearchPointer
{
@ -16,7 +18,7 @@ private:
};
template <class T>
inline uint qHash(const SearchPointer<T> &t)
inline HASH_T qHash(const SearchPointer<T> &t)
{
return ::qHash(*(t.data()));
}

View File

@ -5,10 +5,7 @@
(QLocale::system().measurementSystem() == QLocale::ImperialSystem)
#define WINDOW_SETTINGS_GROUP "Window"
#define WINDOW_SIZE_SETTING "size"
#define WINDOW_SIZE_DEFAULT QSize(600, 800)
#define WINDOW_POS_SETTING "pos"
#define WINDOW_POS_DEFAULT QPoint(10, 10)
#define WINDOW_GEOMETRY_SETTING "geometry"
#define WINDOW_STATE_SETTING "state"
#define SETTINGS_SETTINGS_GROUP "Settings"
@ -30,8 +27,6 @@
#define SHOW_GRAPH_GRIDS_DEFAULT true
#define SHOW_GRAPH_SLIDER_INFO_SETTING "sliderInfo"
#define SHOW_GRAPH_SLIDER_INFO_DEFAULT true
#define SHOW_MARKERS_SETTING "pathMarkers"
#define SHOW_MARKERS_DEFAULT true
#define SHOW_TICKS_SETTING "pathTicks"
#define SHOW_TICKS_DEFAULT false
@ -65,13 +60,18 @@
#define SHOW_ROUTE_WAYPOINTS_DEFAULT true
#define SHOW_WAYPOINT_LABELS_SETTING "waypointLabels"
#define SHOW_WAYPOINT_LABELS_DEFAULT true
#define SHOW_MARKERS_SETTING "positionMarkers"
#define SHOW_MARKERS_DEFAULT true
#define SHOW_MARKER_INFO_SETTING "markerInfo"
#define SHOW_MARKER_INFO_DEFAULT MarkerInfoItem::None
#define PDF_EXPORT_SETTINGS_GROUP "Export"
#define PAPER_ORIENTATION_SETTING "orientation"
#define PAPER_ORIENTATION_DEFAULT QPrinter::Portrait
#define PAPER_ORIENTATION_DEFAULT QPageLayout::Orientation::Portrait
#define PAPER_SIZE_SETTING "size"
#define PAPER_SIZE_DEFAULT (IMPERIAL_UNITS() ? QPrinter::Letter \
: QPrinter::A4)
#define PAPER_SIZE_DEFAULT (IMPERIAL_UNITS() \
? QPageSize::PageSizeId::Letter \
: QPageSize::PageSizeId::A4)
#define PDF_MARGIN_LEFT_SETTING "marginLeft"
#define PDF_MARGIN_LEFT_DEFAULT 5 /* mm */
#define PDF_MARGIN_TOP_SETTING "marginTop"
@ -199,8 +199,10 @@
#define SEPARATE_GRAPH_PAGE_DEFAULT false
#define SLIDER_COLOR_SETTING "sliderColor"
#define SLIDER_COLOR_DEFAULT QColor(Qt::red)
#define PROJECTION_SETTING "projection"
#define PROJECTION_DEFAULT 3857
#define OUTPUT_PROJECTION_SETTING "outputProjection"
#define OUTPUT_PROJECTION_DEFAULT 3857
#define INPUT_PROJECTION_SETTING "inputProjection"
#define INPUT_PROJECTION_DEFAULT 4326
#define HIDPI_MAP_SETTING "HiDPIMap"
#define HIDPI_MAP_DEFAULT true

View File

@ -18,7 +18,7 @@ void SliderInfoItem::updateBoundingRect()
{
QFontMetrics fm(_font);
qreal width = qMax(fm.width(_x), fm.width(_y));
qreal width = qMax(fm.boundingRect(_x).width(), fm.boundingRect(_y).width());
qreal height = 2 * fm.height() - 2*fm.descent();
_boundingRect = (_side == Right)
@ -35,16 +35,16 @@ void SliderInfoItem::paint(QPainter *painter, const QStyleOptionGraphicsItem
QRectF rx, ry;
qreal width = qMax(fm.width(_x), fm.width(_y));
qreal width = qMax(fm.boundingRect(_x).width(), fm.boundingRect(_y).width());
if (_side == Right) {
ry = QRectF(SIZE, -fm.height() + fm.descent(), fm.width(_y),
ry = QRectF(SIZE, -fm.height() + fm.descent(), fm.boundingRect(_y).width(),
fm.height() - fm.descent());
rx = QRectF(SIZE, 0, fm.width(_x), fm.height()
rx = QRectF(SIZE, 0, fm.boundingRect(_x).width(), fm.height()
- fm.descent());
} else {
ry = QRectF(-(width + SIZE), -fm.height() + fm.descent(), fm.width(_y),
fm.height() - fm.descent());
rx = QRectF(-(width + SIZE), 0, fm.width(_x), fm.height()
ry = QRectF(-(width + SIZE), -fm.height() + fm.descent(),
fm.boundingRect(_y).width(), fm.height() - fm.descent());
rx = QRectF(-(width + SIZE), 0, fm.boundingRect(_x).width(), fm.height()
- fm.descent());
}

View File

@ -3,6 +3,7 @@
#include <QTimeZone>
#include <QDataStream>
#include <QDebug>
class TimeZoneInfo
{
@ -42,6 +43,7 @@ public:
private:
friend QDataStream& operator<<(QDataStream &out, const TimeZoneInfo &info);
friend QDataStream& operator>>(QDataStream &in, TimeZoneInfo &info);
friend QDebug operator<<(QDebug dbg, const TimeZoneInfo &info);
Type _type;
QTimeZone _customZone;
@ -66,4 +68,12 @@ inline QDataStream &operator>>(QDataStream &in, TimeZoneInfo &info)
return in;
}
// Required in Qt6 even in release builds
inline QDebug operator<<(QDebug dbg, const TimeZoneInfo &info)
{
dbg.nospace() << "TimeZoneInfo(" << static_cast<int>(info._type)
<< ", " << info._customZone << ")";
return dbg.space();
}
#endif // TIMEZONEINFO_H

View File

@ -1,5 +1,6 @@
#include <QPainter>
#include "map/map.h"
#include "data/track.h"
#include "format.h"
#include "tooltip.h"
#include "trackitem.h"
@ -8,6 +9,7 @@
QString TrackItem::info() const
{
ToolTip tt;
QLocale l;
if (!_name.isEmpty())
tt.insert(tr("Name"), _name);
@ -22,13 +24,7 @@ QString TrackItem::info() const
if (_movingTime > 0)
tt.insert(tr("Moving time"), Format::timeSpan(_movingTime));
if (!_date.isNull())
tt.insert(tr("Date"),
#ifdef ENABLE_TIMEZONES
_date.toTimeZone(_timeZone)
#else // ENABLE_TIMEZONES
_date
#endif // ENABLE_TIMEZONES
.toString(Qt::SystemLocaleShortDate));
tt.insert(tr("Date"), l.toString(_date.toTimeZone(_timeZone)));
if (!_links.isEmpty()) {
QString links;
for (int i = 0; i < _links.size(); i++) {

View File

@ -2,13 +2,11 @@
#define TRACKITEM_H
#include <QDateTime>
#include <QPen>
#include "data/track.h"
#include "data/link.h"
#include "pathitem.h"
#include "units.h"
#include "graphicsscene.h"
class Map;
class Track;
class TrackItem : public PathItem
{
@ -18,6 +16,7 @@ public:
TrackItem(const Track &track, Map *map, QGraphicsItem *parent = 0);
QString info() const;
QDateTime date() const {return _date;}
private:
QString _name;

View File

@ -16,13 +16,12 @@
Units WaypointItem::_units = Metric;
CoordinatesFormat WaypointItem::_format = DecimalDegrees;
#ifdef ENABLE_TIMEZONES
QTimeZone WaypointItem::_timeZone = QTimeZone::utc();
#endif // ENABLE_TIMEZONES
QString WaypointItem::info() const
{
ToolTip tt;
QLocale l;
if (!_waypoint.name().isEmpty())
tt.insert(qApp->translate("WaypointItem", "Name"), _waypoint.name());
@ -37,12 +36,8 @@ QString WaypointItem::info() const
}
if (_waypoint.timestamp().isValid())
tt.insert(qApp->translate("WaypointItem", "Date"),
#ifdef ENABLE_TIMEZONES
_waypoint.timestamp().toTimeZone(_timeZone)
#else // ENABLE_TIMEZONES
_waypoint.timestamp()
#endif // ENABLE_TIMEZONES
.toString(Qt::SystemLocaleShortDate));
l.toString(_waypoint.timestamp().toTimeZone(_timeZone),
QLocale::ShortFormat));
if (!_waypoint.description().isEmpty())
tt.insert(qApp->translate("WaypointItem", "Description"),
_waypoint.description());

View File

@ -1,13 +1,10 @@
#ifndef WAYPOINTITEM_H
#define WAYPOINTITEM_H
#include "common/config.h"
#include <cmath>
#include <QGraphicsItem>
#include <QFont>
#ifdef ENABLE_TIMEZONES
#include <QTimeZone>
#endif // ENABLE_TIMEZONES
#include "data/waypoint.h"
#include "map/map.h"
#include "units.h"
@ -38,9 +35,7 @@ public:
static void setUnits(Units units) {_units = units;}
static void setCoordinatesFormat(CoordinatesFormat format)
{_format = format;}
#ifdef ENABLE_TIMEZONES
static void setTimeZone(const QTimeZone &zone) {_timeZone = zone;}
#endif // ENABLE_TIMEZONES
protected:
void hoverEnterEvent(QGraphicsSceneHoverEvent *event);
@ -60,9 +55,7 @@ private:
static Units _units;
static CoordinatesFormat _format;
#ifdef ENABLE_TIMEZONES
static QTimeZone _timeZone;
#endif // ENABLE_TIMEZONES
};
#endif // WAYPOINTITEM_H

View File

@ -2,24 +2,20 @@
#define CONFIG_H
#include <QtGlobal>
#include <QPoint>
#define APP_NAME "GPXSee"
#define APP_HOMEPAGE "http://www.gpxsee.org"
#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 1)
#define ENABLE_HTTP2
#endif // QT >= 5.10.1
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
#define HASH_T uint
#else // QT6
#define HASH_T size_t
#endif // QT6
#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)
#define ENABLE_HIDPI
#endif // QT >= 5.6
#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)
#define ENABLE_GEOJSON
#endif // QT >= 5.0
#if QT_VERSION >= QT_VERSION_CHECK(5, 5, 0)
#define ENABLE_TIMEZONES
#endif // QT >= 5.5
inline HASH_T qHash(const QPoint &p)
{
return ::qHash(p.x()) ^ ::qHash(p.y());
}
#endif /* CONFIG_H */

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