Compare commits
329 Commits
Author | SHA1 | Date | |
---|---|---|---|
145a46686e | |||
065d52d98b | |||
d769ec4f06 | |||
4d05b6d667 | |||
a96b047a9e | |||
9041524076 | |||
5358c8ea38 | |||
0b58f3ec48 | |||
1830c038f3 | |||
42bf36fdfa | |||
f2e91f4a6b | |||
7604346799 | |||
a369a1689d | |||
787868185f | |||
d294d86b0f | |||
317833dfc3 | |||
b80b50d5bb | |||
c44d21017a | |||
7bc1c53452 | |||
de8f49979c | |||
399b6e9013 | |||
6590a2ca44 | |||
4ab611b04a | |||
c82e97b1ca | |||
86c6fa7b03 | |||
5cec192a1c | |||
f73097af86 | |||
2f740d5b8e | |||
b9c1c6c6cf | |||
731f2d7e6d | |||
d2a1271348 | |||
47b6c9d116 | |||
97dbfb163b | |||
33f2002a52 | |||
02c3682758 | |||
a9c2b30bd6 | |||
b880998dcc | |||
01d7842c00 | |||
bf613f1b6d | |||
43c4dae4d1 | |||
6ba7493b59 | |||
2e10c609f4 | |||
cd571f4662 | |||
51e38bf4d8 | |||
3b480fbd23 | |||
c523ddbfac | |||
3be4227de9 | |||
17dbcf3e10 | |||
57b2f431c1 | |||
52b081ea59 | |||
dc97061c8e | |||
b59e6d5d79 | |||
9386fa587c | |||
9a459dc365 | |||
2bbf75cb0b | |||
f697c6b693 | |||
6d8ccd2216 | |||
3033bc680d | |||
c95e9abd65 | |||
591560c0eb | |||
e473b5dc2d | |||
7217f9acfc | |||
8f39ce3be5 | |||
fba7a0b40f | |||
fb261a1513 | |||
925ddffba5 | |||
6891999139 | |||
14a9c0a8cb | |||
6103788008 | |||
cb8c19a2bc | |||
dadf095cc1 | |||
f4ee36a173 | |||
7555c89f0c | |||
ae1e357fb7 | |||
05e8cccb3a | |||
1468528a62 | |||
30e6f624b6 | |||
a568efadd2 | |||
aca258da05 | |||
815071fc55 | |||
35ff0f8d55 | |||
7a664342b6 | |||
34b5323fb6 | |||
0a5480ba2c | |||
ef6dff42b7 | |||
cec8946d86 | |||
1b842ab2f0 | |||
0ac6b697bb | |||
4cb369d2f3 | |||
f7b44b64b0 | |||
895b2219c5 | |||
0ec265e4ea | |||
d9e5fc6a74 | |||
c3f345c7f9 | |||
1f9bff6a9b | |||
7e39a34d0e | |||
a941a7315e | |||
cf4f9b6f98 | |||
3d89d0d7da | |||
9b3ed7ef1d | |||
796107b1ab | |||
a7e9c95ba2 | |||
cd54d2d952 | |||
bafbb825fc | |||
031ed4907c | |||
7cdbad3e79 | |||
b62ec2429a | |||
10032000b1 | |||
fd19d9c5a4 | |||
60bb42d708 | |||
6201ba1c67 | |||
85d6357cb9 | |||
26cbbee135 | |||
e200d1597d | |||
cd46a9cb0a | |||
1ba1ae498c | |||
31429b6344 | |||
5719cb5a35 | |||
73aab44848 | |||
e2360f8fb2 | |||
08fc8ff6c4 | |||
78d6ae6838 | |||
0ae55e1511 | |||
e0be482d65 | |||
4f22c50510 | |||
3bc5adec73 | |||
a17110782a | |||
1d5f5ccffd | |||
e1e3800f72 | |||
a1a67fd03f | |||
b12eef7366 | |||
a3071eb022 | |||
821790fa91 | |||
4d0cf66925 | |||
598d21077e | |||
763d634934 | |||
336f3741d8 | |||
b6357cfab6 | |||
248695ac04 | |||
ab4944b296 | |||
d116508d73 | |||
efec3ce4f4 | |||
23c7d8e585 | |||
ec86692ea9 | |||
3237146b78 | |||
fbf81e8861 | |||
5bf9ee7bec | |||
652d6cf97c | |||
a36068c207 | |||
8e5fcfa0b2 | |||
f1375fb7f8 | |||
c98315a7b7 | |||
b90dfc963f | |||
a7bbfb0995 | |||
eca7ca44ee | |||
56a68689b4 | |||
16e7de8a0d | |||
977ba58570 | |||
0d8e46cad0 | |||
14cf94d393 | |||
88763ba1ca | |||
d74693327d | |||
dde8e9a22c | |||
50d4ca1690 | |||
07894f3a55 | |||
86dd6ed772 | |||
d01a5a7e42 | |||
97bea8c56c | |||
b5972c8328 | |||
4fd0ca0b11 | |||
84d5673e17 | |||
e40836e6bb | |||
88aef38f9d | |||
7d8dcec88b | |||
561d8362a9 | |||
7f9fde76e9 | |||
239e571358 | |||
44b28e3d4d | |||
4cef089c81 | |||
05ac5ccedb | |||
22fb6071f7 | |||
2c78772a67 | |||
0f03ef4af7 | |||
351cc49ec9 | |||
743a937f41 | |||
033225502f | |||
75b8b9eab0 | |||
e76e7b71ed | |||
41ea07d020 | |||
4bad086152 | |||
8be088be0a | |||
73021bec01 | |||
7584116168 | |||
59b734c402 | |||
8168d52f09 | |||
74796e3e41 | |||
676024854a | |||
10e1b5c4fb | |||
54570ed97e | |||
07fa377e38 | |||
2b8c3f64ac | |||
a60cccb57e | |||
c2e50e5213 | |||
0ea8e008c2 | |||
082435c83d | |||
e63ad7a244 | |||
32a4365543 | |||
abd1dc2450 | |||
5674534efd | |||
33287f9d76 | |||
1dfe84c4af | |||
7fe8d204bc | |||
5080247e10 | |||
13d6c7c643 | |||
547d7a5f23 | |||
9e03d85b7a | |||
b811132394 | |||
ca33328d99 | |||
41c8a4d935 | |||
acd09400be | |||
16bfd593c7 | |||
9e70a1ffbb | |||
1b590fbf76 | |||
8d52dbf59f | |||
c6fd32fc61 | |||
af6082425e | |||
785123f005 | |||
df3ee11f42 | |||
6af1ff35ab | |||
8423fc1230 | |||
a62d84da67 | |||
2431f432d4 | |||
6c4ebc40ca | |||
0cc6908b30 | |||
becf57e4eb | |||
96733883cb | |||
973c086029 | |||
609e73256a | |||
50c43dc0b7 | |||
b6194d535e | |||
a4906050b8 | |||
d1d0341ce5 | |||
1b27be6173 | |||
2eed9884a5 | |||
afee454b92 | |||
8ade76b9f4 | |||
45ca0f306c | |||
faf445d708 | |||
7ed4821e81 | |||
524a854d35 | |||
800189cec5 | |||
dc209bd96e | |||
d71b9f5e19 | |||
781bc8c38f | |||
a49c2cd7c2 | |||
75bd542feb | |||
c43a68c3b0 | |||
d211371ed0 | |||
eaed49786a | |||
baf574b68b | |||
f4561ba0b5 | |||
c120ad9715 | |||
0f49beeff5 | |||
f2bfd5711b | |||
3d43a0e472 | |||
049ca264b2 | |||
3635a7dfdc | |||
2ae572ba88 | |||
5fac30c962 | |||
4e29801d9a | |||
0ace6da8a3 | |||
cfcaa72cd2 | |||
1b1f706c5c | |||
b4d240d8fe | |||
ed9ebfffac | |||
fa03ecd419 | |||
609202fe57 | |||
f55d6d8501 | |||
731b309ac9 | |||
f85977d881 | |||
12e395270b | |||
45b637ba17 | |||
f139d33502 | |||
63e7735abe | |||
27122f94ef | |||
0644bb72a0 | |||
a4d14511de | |||
1225d350d4 | |||
a1d93cc548 | |||
80f5bbfbce | |||
70c9431ee4 | |||
de7664ccc7 | |||
9bd79a4104 | |||
f9abf21e6d | |||
fb4af33d89 | |||
9eb95daf09 | |||
d291e55bdb | |||
b5893cf506 | |||
8507fe3b52 | |||
79edd6e09d | |||
491c6c9a98 | |||
3c36db9f5a | |||
c4a750f5d4 | |||
e4d7f45103 | |||
c85b90d56d | |||
7babf734bf | |||
25ac235414 | |||
630a5cea83 | |||
a0de7f25c3 | |||
7c6174a8ee | |||
0f512d1269 | |||
246b46ffcb | |||
cc4cbcbeda | |||
64e0b492e6 | |||
52a8b1de5b | |||
5045c03953 | |||
515f1aeb27 | |||
dbb82d6f44 | |||
307a03d46c | |||
b7c03b4b9e | |||
2d1e0934ce | |||
0ff66bc897 | |||
3b68f497fe | |||
a04293b411 | |||
5a4de1cef0 | |||
99d3d8fd0a | |||
d579ce3482 | |||
67ce176b74 | |||
1a88527c60 |
@ -1,32 +1,39 @@
|
||||
version: 7.33.{build}
|
||||
version: 8.4.{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
|
||||
|
@ -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
|
||||
|
20
README.md
@ -4,12 +4,12 @@ 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).
|
||||
* 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.
|
||||
* Support for POI files.
|
||||
* Print/export to PDF.
|
||||
* Print/export to PDF/PNG.
|
||||
* Full-screen mode.
|
||||
* HiDPI/Retina displays & maps support.
|
||||
* Native GUI for Windows, Mac OS X and Linux.
|
||||
@ -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
|
||||
@ -43,3 +43,15 @@ make # nmake on windows
|
||||
|
||||
## Translations
|
||||
GPXSee uses [Weblate](https://hosted.weblate.org/projects/gpxsee/translations/) for translations.
|
||||
|
||||
## License
|
||||
GPXSee is licensed under GPL-3.0 (only). However, some 3rd party parts are using different, GPL compatible,
|
||||
licenses:
|
||||
* [Oxygen icons](icons/GUI) - LGPLv3
|
||||
* [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),
|
||||
[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
|
||||
|
84
gpxsee.pro
@ -3,31 +3,33 @@ unix:!macx {
|
||||
} else {
|
||||
TARGET = GPXSee
|
||||
}
|
||||
VERSION = 7.33
|
||||
VERSION = 8.4
|
||||
|
||||
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 \
|
||||
src/GUI/axislabelitem.h \
|
||||
src/GUI/graphicsscene.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 \
|
||||
@ -55,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 \
|
||||
@ -71,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 \
|
||||
@ -83,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 \
|
||||
@ -93,13 +92,20 @@ HEADERS += src/common/config.h \
|
||||
src/map/IMG/bitstream.h \
|
||||
src/map/IMG/deltastream.h \
|
||||
src/map/IMG/gmap.h \
|
||||
src/map/IMG/huffmanbuffer.h \
|
||||
src/map/IMG/huffmanstream.h \
|
||||
src/map/IMG/huffmantable.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 \
|
||||
@ -200,13 +206,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 \
|
||||
@ -258,18 +272,23 @@ SOURCES += src/main.cpp \
|
||||
src/map/IMG/bitstream.cpp \
|
||||
src/map/IMG/deltastream.cpp \
|
||||
src/map/IMG/gmap.cpp \
|
||||
src/map/IMG/huffmanbuffer.cpp \
|
||||
src/map/IMG/huffmanstream.cpp \
|
||||
src/map/IMG/huffmantable.cpp \
|
||||
src/map/IMG/huffmantext.cpp \
|
||||
src/map/IMG/nodfile.cpp \
|
||||
src/map/IMG/mapdata.cpp \
|
||||
src/map/IMG/rastertile.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/tar.cpp \
|
||||
src/map/atlas.cpp \
|
||||
src/map/ozf.cpp \
|
||||
@ -348,19 +367,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 \
|
||||
@ -378,7 +390,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
|
||||
@ -399,7 +412,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
|
||||
@ -419,7 +433,14 @@ macx {
|
||||
icons/formats/json.icns \
|
||||
icons/formats/cup.icns \
|
||||
icons/formats/gpi.icns \
|
||||
icons/formats/sml.icns
|
||||
icons/formats/sml.icns \
|
||||
icons/formats/img.icns \
|
||||
icons/formats/jnx.icns \
|
||||
icons/formats/kap.icns \
|
||||
icons/formats/mbts.icns \
|
||||
icons/formats/rmap.icns \
|
||||
icons/formats/tba.icns \
|
||||
icons/formats/aqm.icns
|
||||
QMAKE_BUNDLE_DATA += locale maps icons csv
|
||||
}
|
||||
|
||||
@ -439,14 +460,21 @@ win32 {
|
||||
icons/formats/json.ico \
|
||||
icons/formats/cup.ico \
|
||||
icons/formats/gpi.ico \
|
||||
icons/formats/sml.ico
|
||||
icons/formats/sml.ico \
|
||||
icons/formats/img.ico \
|
||||
icons/formats/jnx.ico \
|
||||
icons/formats/kap.ico \
|
||||
icons/formats/map.ico \
|
||||
icons/formats/mbts.ico \
|
||||
icons/formats/rmap.ico \
|
||||
icons/formats/tba.ico \
|
||||
icons/formats/aqm.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
|
||||
|
@ -67,10 +67,12 @@
|
||||
<file alias="cinema-11.png">icons/POI/cinema-11.png</file>
|
||||
<file alias="clothing-store-11.png">icons/POI/clothing-store-11.png</file>
|
||||
<file alias="communications-tower-11.png">icons/POI/communications-tower-11.png</file>
|
||||
<file alias="convenience-11.png">icons/POI/convenience-11.png</file>
|
||||
<file alias="dam-11.png">icons/POI/dam-11.png</file>
|
||||
<file alias="danger-11.png">icons/POI/danger-11.png</file>
|
||||
<file alias="drinking-water-11.png">icons/POI/drinking-water-11.png</file>
|
||||
<file alias="fast-food-11.png">icons/POI/fast-food-11.png</file>
|
||||
<file alias="entrance-alt1-11.png">icons/POI/entrance-alt1-11.png</file>
|
||||
<file alias="fire-station-11.png">icons/POI/fire-station-11.png</file>
|
||||
<file alias="fitness-centre-11.png">icons/POI/fitness-centre-11.png</file>
|
||||
<file alias="fuel-11.png">icons/POI/fuel-11.png</file>
|
||||
@ -97,7 +99,6 @@
|
||||
<file alias="place-of-worship-11.png">icons/POI/place-of-worship-11.png</file>
|
||||
<file alias="police-11.png">icons/POI/police-11.png</file>
|
||||
<file alias="post-11.png">icons/POI/post-11.png</file>
|
||||
<file alias="prison-11.png">icons/POI/prison-11.png</file>
|
||||
<file alias="religious-christian-11.png">icons/POI/religious-christian-11.png</file>
|
||||
<file alias="religious-jewish-11.png">icons/POI/religious-jewish-11.png</file>
|
||||
<file alias="religious-muslim-11.png">icons/POI/religious-muslim-11.png</file>
|
||||
|
BIN
icons/POI/convenience-11.png
Normal file
After Width: | Height: | Size: 650 B |
BIN
icons/POI/entrance-alt1-11.png
Normal file
After Width: | Height: | Size: 611 B |
Before Width: | Height: | Size: 323 B |
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 4.8 KiB |
Before Width: | Height: | Size: 571 B After Width: | Height: | Size: 571 B |
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
BIN
icons/formats/aqm.icns
Normal file
BIN
icons/formats/aqm.ico
Normal file
After Width: | Height: | Size: 306 KiB |
Before Width: | Height: | Size: 304 KiB After Width: | Height: | Size: 305 KiB |
Before Width: | Height: | Size: 302 KiB After Width: | Height: | Size: 302 KiB |
Before Width: | Height: | Size: 303 KiB After Width: | Height: | Size: 304 KiB |
Before Width: | Height: | Size: 305 KiB After Width: | Height: | Size: 306 KiB |
Before Width: | Height: | Size: 304 KiB After Width: | Height: | Size: 304 KiB |
BIN
icons/formats/img.icns
Normal file
BIN
icons/formats/img.ico
Normal file
After Width: | Height: | Size: 304 KiB |
BIN
icons/formats/jnx.icns
Normal file
BIN
icons/formats/jnx.ico
Normal file
After Width: | Height: | Size: 304 KiB |
Before Width: | Height: | Size: 306 KiB After Width: | Height: | Size: 307 KiB |
BIN
icons/formats/kap.icns
Normal file
BIN
icons/formats/kap.ico
Normal file
After Width: | Height: | Size: 305 KiB |
Before Width: | Height: | Size: 304 KiB After Width: | Height: | Size: 304 KiB |
Before Width: | Height: | Size: 305 KiB After Width: | Height: | Size: 305 KiB |
BIN
icons/formats/map.icns
Normal file
BIN
icons/formats/map.ico
Normal file
After Width: | Height: | Size: 304 KiB |
BIN
icons/formats/mbts.icns
Normal file
BIN
icons/formats/mbts.ico
Normal file
After Width: | Height: | Size: 305 KiB |
Before Width: | Height: | Size: 305 KiB After Width: | Height: | Size: 305 KiB |
Before Width: | Height: | Size: 302 KiB After Width: | Height: | Size: 302 KiB |
BIN
icons/formats/rmap.icns
Normal file
BIN
icons/formats/rmap.ico
Normal file
After Width: | Height: | Size: 306 KiB |
Before Width: | Height: | Size: 302 KiB After Width: | Height: | Size: 303 KiB |
@ -13,3 +13,11 @@ slf:#881199
|
||||
cup:#20a810
|
||||
gpi:#fca314
|
||||
sml:#6434eb
|
||||
img:#cf0a0a
|
||||
jnx:#aeff00
|
||||
kap:#080045
|
||||
map:#f6ff00
|
||||
mbts:#ff0062
|
||||
rmap:#145cba
|
||||
tba:#367050
|
||||
aqm:#32a89e
|
||||
|
@ -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
|
||||
|
Before Width: | Height: | Size: 304 KiB After Width: | Height: | Size: 304 KiB |
Before Width: | Height: | Size: 304 KiB After Width: | Height: | Size: 305 KiB |
BIN
icons/formats/tba.icns
Normal file
BIN
icons/formats/tba.ico
Normal file
After Width: | Height: | Size: 304 KiB |
Before Width: | Height: | Size: 304 KiB After Width: | Height: | Size: 304 KiB |
Before Width: | Height: | Size: 304 KiB After Width: | Height: | Size: 304 KiB |
2103
lang/gpxsee_eo.ts
Normal file
537
pkg/Info.plist
@ -42,7 +42,7 @@
|
||||
</array>
|
||||
<key>CFBundleTypeMIMETypes</key>
|
||||
<array>
|
||||
<string>application/tcx+xml</string>
|
||||
<string>application/vnd.garmin.tcx+xml</string>
|
||||
</array>
|
||||
<key>CFBundleTypeIconFile</key>
|
||||
<string>icons/tcx.icns</string>
|
||||
@ -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>
|
||||
@ -74,7 +90,7 @@
|
||||
</array>
|
||||
<key>CFBundleTypeMIMETypes</key>
|
||||
<array>
|
||||
<string>application/loc+xml</string>
|
||||
<string>application/vnd.groundspeak.loc+xml</string>
|
||||
</array>
|
||||
<key>CFBundleTypeIconFile</key>
|
||||
<string>icons/loc.icns</string>
|
||||
@ -90,7 +106,7 @@
|
||||
</array>
|
||||
<key>CFBundleTypeMIMETypes</key>
|
||||
<array>
|
||||
<string>application/slf+xml</string>
|
||||
<string>application/vnd.sigma.slf+xml</string>
|
||||
</array>
|
||||
<key>CFBundleTypeIconFile</key>
|
||||
<string>icons/slf.icns</string>
|
||||
@ -250,7 +266,7 @@
|
||||
</array>
|
||||
<key>CFBundleTypeMIMETypes</key>
|
||||
<array>
|
||||
<string>application/sml+xml</string>
|
||||
<string>application/vnd.suunto.sml+xml</string>
|
||||
</array>
|
||||
<key>CFBundleTypeIconFile</key>
|
||||
<string>icons/sml.icns</string>
|
||||
@ -259,6 +275,207 @@
|
||||
<key>CFBundleTypeRole</key>
|
||||
<string>Viewer</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>CFBundleTypeExtensions</key>
|
||||
<array>
|
||||
<string>jpeg</string>
|
||||
<string>jpg</string>
|
||||
</array>
|
||||
<key>CFBundleTypeMIMETypes</key>
|
||||
<array>
|
||||
<string>image/jpeg</string>
|
||||
</array>
|
||||
<key>CFBundleTypeName</key>
|
||||
<string>JPEG Image</string>
|
||||
<key>CFBundleTypeRole</key>
|
||||
<string>Viewer</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>CFBundleTypeExtensions</key>
|
||||
<array>
|
||||
<string>csv</string>
|
||||
</array>
|
||||
<key>CFBundleTypeMIMETypes</key>
|
||||
<array>
|
||||
<string>text/csv</string>
|
||||
</array>
|
||||
<key>CFBundleTypeName</key>
|
||||
<string>Comma-Separated Values (CSV) Files</string>
|
||||
<key>CFBundleTypeRole</key>
|
||||
<string>Viewer</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>CFBundleTypeExtensions</key>
|
||||
<array>
|
||||
<string>img</string>
|
||||
</array>
|
||||
<key>CFBundleTypeMIMETypes</key>
|
||||
<array>
|
||||
<string>application/vnd.garmin.img</string>
|
||||
</array>
|
||||
<key>CFBundleTypeIconFile</key>
|
||||
<string>icons/img.icns</string>
|
||||
<key>CFBundleTypeName</key>
|
||||
<string>Garmin IMG Map</string>
|
||||
<key>CFBundleTypeRole</key>
|
||||
<string>Viewer</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>CFBundleTypeExtensions</key>
|
||||
<array>
|
||||
<string>gmap</string>
|
||||
<string>gmapi</string>
|
||||
</array>
|
||||
<key>CFBundleTypeMIMETypes</key>
|
||||
<array>
|
||||
<string>application/vnd.garmin.gmap</string>
|
||||
</array>
|
||||
<key>CFBundleTypeIconFile</key>
|
||||
<string>icons/img.icns</string>
|
||||
<key>CFBundleTypeName</key>
|
||||
<string>Garmin Map Product File</string>
|
||||
<key>CFBundleTypeRole</key>
|
||||
<string>Viewer</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>CFBundleTypeExtensions</key>
|
||||
<array>
|
||||
<string>jnx</string>
|
||||
</array>
|
||||
<key>CFBundleTypeMIMETypes</key>
|
||||
<array>
|
||||
<string>application/vnd.garmin.jnx</string>
|
||||
</array>
|
||||
<key>CFBundleTypeIconFile</key>
|
||||
<string>icons/jnx.icns</string>
|
||||
<key>CFBundleTypeName</key>
|
||||
<string>Garmin JNX Map</string>
|
||||
<key>CFBundleTypeRole</key>
|
||||
<string>Viewer</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>CFBundleTypeExtensions</key>
|
||||
<array>
|
||||
<string>kap</string>
|
||||
</array>
|
||||
<key>CFBundleTypeMIMETypes</key>
|
||||
<array>
|
||||
<string>application/vnd.maptech.kap</string>
|
||||
</array>
|
||||
<key>CFBundleTypeIconFile</key>
|
||||
<string>icons/kap.icns</string>
|
||||
<key>CFBundleTypeName</key>
|
||||
<string>BSB Nautical Charts</string>
|
||||
<key>CFBundleTypeRole</key>
|
||||
<string>Viewer</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>CFBundleTypeExtensions</key>
|
||||
<array>
|
||||
<string>map</string>
|
||||
</array>
|
||||
<key>CFBundleTypeMIMETypes</key>
|
||||
<array>
|
||||
<string>application/vnd.oziexplorer.map</string>
|
||||
</array>
|
||||
<key>CFBundleTypeIconFile</key>
|
||||
<string>icons/map.icns</string>
|
||||
<key>CFBundleTypeName</key>
|
||||
<string>OziExplorer Map File</string>
|
||||
<key>CFBundleTypeRole</key>
|
||||
<string>Viewer</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>CFBundleTypeExtensions</key>
|
||||
<array>
|
||||
<string>rmap</string>
|
||||
<string>rtmap</string>
|
||||
</array>
|
||||
<key>CFBundleTypeMIMETypes</key>
|
||||
<array>
|
||||
<string>application/vnd.twonav.rmap</string>
|
||||
</array>
|
||||
<key>CFBundleTypeIconFile</key>
|
||||
<string>icons/rmap.icns</string>
|
||||
<key>CFBundleTypeName</key>
|
||||
<string>TwoNav Raster Map File</string>
|
||||
<key>CFBundleTypeRole</key>
|
||||
<string>Viewer</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>CFBundleTypeExtensions</key>
|
||||
<array>
|
||||
<string>tba</string>
|
||||
</array>
|
||||
<key>CFBundleTypeMIMETypes</key>
|
||||
<array>
|
||||
<string>application/vnd.trekbuddy.tba</string>
|
||||
</array>
|
||||
<key>CFBundleTypeIconFile</key>
|
||||
<string>icons/tba.icns</string>
|
||||
<key>CFBundleTypeName</key>
|
||||
<string>TrekBuddy Atlas</string>
|
||||
<key>CFBundleTypeRole</key>
|
||||
<string>Viewer</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>CFBundleTypeExtensions</key>
|
||||
<array>
|
||||
<string>mbtiles</string>
|
||||
</array>
|
||||
<key>CFBundleTypeMIMETypes</key>
|
||||
<array>
|
||||
<string>application/vnd.mapbox.mbtiles</string>
|
||||
</array>
|
||||
<key>CFBundleTypeIconFile</key>
|
||||
<string>icons/mbts.icns</string>
|
||||
<key>CFBundleTypeName</key>
|
||||
<string>MBTiles Map File</string>
|
||||
<key>CFBundleTypeRole</key>
|
||||
<string>Viewer</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>CFBundleTypeExtensions</key>
|
||||
<array>
|
||||
<string>tiff</string>
|
||||
</array>
|
||||
<key>CFBundleTypeMIMETypes</key>
|
||||
<array>
|
||||
<string>image/tiff</string>
|
||||
</array>
|
||||
<key>CFBundleTypeName</key>
|
||||
<string>GeoTIFF Image</string>
|
||||
<key>CFBundleTypeRole</key>
|
||||
<string>Viewer</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>CFBundleTypeExtensions</key>
|
||||
<array>
|
||||
<string>xml</string>
|
||||
</array>
|
||||
<key>CFBundleTypeMIMETypes</key>
|
||||
<array>
|
||||
<string>application/vnd.gpxsee.map+xml</string>
|
||||
</array>
|
||||
<key>CFBundleTypeName</key>
|
||||
<string>GPXSee Map Definition File</string>
|
||||
<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>CFBundleTypeName</key>
|
||||
<string>AlpineQuest Map File</string>
|
||||
<key>CFBundleTypeRole</key>
|
||||
<string>Viewer</string>
|
||||
</dict>
|
||||
</array>
|
||||
|
||||
<key>UTImportedTypeDeclarations</key>
|
||||
@ -302,7 +519,7 @@
|
||||
<string>tcx</string>
|
||||
</array>
|
||||
<key>public.mime-type</key>
|
||||
<string>application/tcx+xml</string>
|
||||
<string>application/vnd.garmin.tcx+xml</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
@ -326,6 +543,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>
|
||||
@ -344,7 +582,7 @@
|
||||
<string>loc</string>
|
||||
</array>
|
||||
<key>public.mime-type</key>
|
||||
<string>application/loc+xml</string>
|
||||
<string>application/vnd.groundspeak.loc+xml</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
@ -365,7 +603,7 @@
|
||||
<string>slf</string>
|
||||
</array>
|
||||
<key>public.mime-type</key>
|
||||
<string>application/slf+xml</string>
|
||||
<string>application/vnd.sigma.slf+xml</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
@ -575,7 +813,290 @@
|
||||
<string>sml</string>
|
||||
</array>
|
||||
<key>public.mime-type</key>
|
||||
<string>application/sml+xml</string>
|
||||
<string>application/vnd.suunto.sml+xml</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>UTTypeIdentifier</key>
|
||||
<string>public.jpeg</string>
|
||||
<key>UTTypeReferenceURL</key>
|
||||
<string>http://www.w3.org/Graphics/JPEG/</string>
|
||||
<key>UTTypeDescription</key>
|
||||
<string>JPEG Image</string>
|
||||
<key>UTTypeConformsTo</key>
|
||||
<array>
|
||||
<string>public.image</string>
|
||||
<string>public.data</string>
|
||||
</array>
|
||||
<key>UTTypeTagSpecification</key>
|
||||
<dict>
|
||||
<key>public.filename-extension</key>
|
||||
<array>
|
||||
<string>jpeg</string>
|
||||
<string>jpg</string>
|
||||
</array>
|
||||
<key>public.mime-type</key>
|
||||
<string>image/jpeg</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>UTTypeIdentifier</key>
|
||||
<string>public.csv</string>
|
||||
<key>UTTypeReferenceURL</key>
|
||||
<string>https://tools.ietf.org/html/rfc4180</string>
|
||||
<key>UTTypeDescription</key>
|
||||
<string>Comma-Separated Values (CSV) Files</string>
|
||||
<key>UTTypeConformsTo</key>
|
||||
<array>
|
||||
<string>public.data</string>
|
||||
</array>
|
||||
<key>UTTypeTagSpecification</key>
|
||||
<dict>
|
||||
<key>public.filename-extension</key>
|
||||
<array>
|
||||
<string>csv</string>
|
||||
</array>
|
||||
<key>public.mime-type</key>
|
||||
<string>text/csv</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>UTTypeIdentifier</key>
|
||||
<string>com.garmin.img</string>
|
||||
<key>UTTypeReferenceURL</key>
|
||||
<string>https://sourceforge.net/projects/garmin-img/</string>
|
||||
<key>UTTypeDescription</key>
|
||||
<string>Garmin IMG map</string>
|
||||
<key>UTTypeConformsTo</key>
|
||||
<array>
|
||||
<string>public.data</string>
|
||||
</array>
|
||||
<key>UTTypeTagSpecification</key>
|
||||
<dict>
|
||||
<key>public.filename-extension</key>
|
||||
<array>
|
||||
<string>img</string>
|
||||
</array>
|
||||
<key>public.mime-type</key>
|
||||
<string>application/vnd.garmin.img</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>UTTypeIdentifier</key>
|
||||
<string>com.garmin.jnx</string>
|
||||
<key>UTTypeReferenceURL</key>
|
||||
<string>http://whiter.brinkster.net/en/JNX.shtml</string>
|
||||
<key>UTTypeDescription</key>
|
||||
<string>Garmin JNX Map</string>
|
||||
<key>UTTypeConformsTo</key>
|
||||
<array>
|
||||
<string>public.data</string>
|
||||
</array>
|
||||
<key>UTTypeTagSpecification</key>
|
||||
<dict>
|
||||
<key>public.filename-extension</key>
|
||||
<array>
|
||||
<string>jnx</string>
|
||||
</array>
|
||||
<key>public.mime-type</key>
|
||||
<string>application/vnd.garmin.jnx</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>UTTypeIdentifier</key>
|
||||
<string>com.garmin.gmap</string>
|
||||
<key>UTTypeReferenceURL</key>
|
||||
<string>https://sourceforge.net/projects/garmin-img/</string>
|
||||
<key>UTTypeDescription</key>
|
||||
<string>Garmin Map Product File</string>
|
||||
<key>UTTypeConformsTo</key>
|
||||
<array>
|
||||
<string>public.xml</string>
|
||||
</array>
|
||||
<key>UTTypeTagSpecification</key>
|
||||
<dict>
|
||||
<key>public.filename-extension</key>
|
||||
<array>
|
||||
<string>xml</string>
|
||||
</array>
|
||||
<key>public.mime-type</key>
|
||||
<string>application/vnd.garmin.gmap</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>UTTypeIdentifier</key>
|
||||
<string>com.maptech.kap</string>
|
||||
<key>UTTypeReferenceURL</key>
|
||||
<string>http://libbsb.sourceforge.net/bsb_file_format.html</string>
|
||||
<key>UTTypeDescription</key>
|
||||
<string>BSB Nautical Charts</string>
|
||||
<key>UTTypeConformsTo</key>
|
||||
<array>
|
||||
<string>public.image</string>
|
||||
<string>public.data</string>
|
||||
</array>
|
||||
<key>UTTypeTagSpecification</key>
|
||||
<dict>
|
||||
<key>public.filename-extension</key>
|
||||
<array>
|
||||
<string>kap</string>
|
||||
</array>
|
||||
<key>public.mime-type</key>
|
||||
<string>image/vnd.maptech.kap</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>UTTypeIdentifier</key>
|
||||
<string>com.oziexplorer3.map</string>
|
||||
<key>UTTypeReferenceURL</key>
|
||||
<string>https://www.oziexplorer3.com/eng/help/map_file_format.html</string>
|
||||
<key>UTTypeDescription</key>
|
||||
<string>OziExplorer Map File</string>
|
||||
<key>UTTypeConformsTo</key>
|
||||
<array>
|
||||
<string>public.data</string>
|
||||
</array>
|
||||
<key>UTTypeTagSpecification</key>
|
||||
<dict>
|
||||
<key>public.filename-extension</key>
|
||||
<array>
|
||||
<string>map</string>
|
||||
</array>
|
||||
<key>public.mime-type</key>
|
||||
<string>application/vnd.oziexplorer.map</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>UTTypeIdentifier</key>
|
||||
<string>com.mapbox.mbtiles</string>
|
||||
<key>UTTypeReferenceURL</key>
|
||||
<string>https://github.com/mapbox/mbtiles-spec</string>
|
||||
<key>UTTypeDescription</key>
|
||||
<string>MBTiles Map File</string>
|
||||
<key>UTTypeConformsTo</key>
|
||||
<array>
|
||||
<string>public.data</string>
|
||||
</array>
|
||||
<key>UTTypeTagSpecification</key>
|
||||
<dict>
|
||||
<key>public.filename-extension</key>
|
||||
<array>
|
||||
<string>mbtiles</string>
|
||||
</array>
|
||||
<key>public.mime-type</key>
|
||||
<string>application/vnd.mapbox.mbtiles</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>UTTypeIdentifier</key>
|
||||
<string>com.twonav.rmap</string>
|
||||
<key>UTTypeReferenceURL</key>
|
||||
<string>https://wiki.openstreetmap.org/wiki/TwoNav_RMAP</string>
|
||||
<key>UTTypeDescription</key>
|
||||
<string>TwoNav Raster Map File</string>
|
||||
<key>UTTypeConformsTo</key>
|
||||
<array>
|
||||
<string>public.data</string>
|
||||
</array>
|
||||
<key>UTTypeTagSpecification</key>
|
||||
<dict>
|
||||
<key>public.filename-extension</key>
|
||||
<array>
|
||||
<string>rmap</string>
|
||||
<string>rtmap</string>
|
||||
</array>
|
||||
<key>public.mime-type</key>
|
||||
<string>application/vnd.twonav.rmap</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>UTTypeIdentifier</key>
|
||||
<string>net.trekbuddy.tba</string>
|
||||
<key>UTTypeReferenceURL</key>
|
||||
<string>https://github.com/kruhc/trekbuddy</string>
|
||||
<key>UTTypeDescription</key>
|
||||
<string>TrekBuddy Atlas</string>
|
||||
<key>UTTypeConformsTo</key>
|
||||
<array>
|
||||
<string>public.data</string>
|
||||
</array>
|
||||
<key>UTTypeTagSpecification</key>
|
||||
<dict>
|
||||
<key>public.filename-extension</key>
|
||||
<array>
|
||||
<string>tba</string>
|
||||
</array>
|
||||
<key>public.mime-type</key>
|
||||
<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>public.tiff</string>
|
||||
<key>UTTypeReferenceURL</key>
|
||||
<string>https://www.adobe.io/open/standards/TIFF.html</string>
|
||||
<key>UTTypeDescription</key>
|
||||
<string>TIFF Image</string>
|
||||
<key>UTTypeConformsTo</key>
|
||||
<array>
|
||||
<string>public.image</string>
|
||||
<string>public.data</string>
|
||||
</array>
|
||||
<key>UTTypeTagSpecification</key>
|
||||
<dict>
|
||||
<key>public.filename-extension</key>
|
||||
<array>
|
||||
<string>tiff</string>
|
||||
<string>tif</string>
|
||||
</array>
|
||||
<key>public.mime-type</key>
|
||||
<string>image/tiff</string>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
|
||||
<key>UTExportedTypeDeclarations</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>UTTypeIdentifier</key>
|
||||
<string>org.gpxsee.map</string>
|
||||
<key>UTTypeReferenceURL</key>
|
||||
<string>http://www.gpxsee.org/map/1.4/</string>
|
||||
<key>UTTypeDescription</key>
|
||||
<string>GPXSee Map Definition File</string>
|
||||
<key>UTTypeConformsTo</key>
|
||||
<array>
|
||||
<string>public.xml</string>
|
||||
</array>
|
||||
<key>UTTypeTagSpecification</key>
|
||||
<dict>
|
||||
<key>public.filename-extension</key>
|
||||
<array>
|
||||
<string>xml</string>
|
||||
</array>
|
||||
<key>public.mime-type</key>
|
||||
<string>application/vnd.gpxsee.map+xml</string>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
|
@ -18,13 +18,14 @@
|
||||
<li>User-definable online maps (OpenStreetMap/Google tiles, WMTS,
|
||||
WMS, TMS, QuadTiles).</li>
|
||||
<li>Offline maps (MBTiles, OziExplorer maps, TrekBuddy maps/atlases,
|
||||
TwoNav RMaps, Garmin IMG & JNX, GeoTIFF images).</li>
|
||||
TwoNav RMaps, Garmin IMG & JNX maps, GeoTIFF images,
|
||||
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>
|
||||
<li>Support for POI files.</li>
|
||||
<li>Support for DEM files (SRTM HGT).</li>
|
||||
<li>Print/export to PDF.</li>
|
||||
<li>Print/export to PDF & PNG.</li>
|
||||
<li>Full-screen mode.</li>
|
||||
<li>HiDPI/Retina displays & maps support.</li>
|
||||
</ul>
|
||||
@ -32,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>
|
||||
|
||||
@ -48,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>
|
||||
|
||||
@ -58,7 +59,7 @@
|
||||
|
||||
<mimetypes>
|
||||
<mimetype>application/gpx+xml</mimetype>
|
||||
<mimetype>application/tcx+xml</mimetype>
|
||||
<mimetype>application/vnd.garmin.tcx+xml</mimetype>
|
||||
<mimetype>application/vnd.ant.fit</mimetype>
|
||||
<mimetype>application/vnd.google-earth.kml+xml</mimetype>
|
||||
<mimetype>application/vnd.fai.igc</mimetype>
|
||||
@ -66,11 +67,26 @@
|
||||
<mimetype>application/vnd.oziexplorer.plt</mimetype>
|
||||
<mimetype>application/vnd.oziexplorer.rte</mimetype>
|
||||
<mimetype>application/vnd.oziexplorer.wpt</mimetype>
|
||||
<mimetype>application/loc+xml</mimetype>
|
||||
<mimetype>application/slf+xml</mimetype>
|
||||
<mimetype>application/vnd.groundspeak.loc+xml</mimetype>
|
||||
<mimetype>application/vnd.sigma.slf+xml</mimetype>
|
||||
<mimetype>application/geo+json</mimetype>
|
||||
<mimetype>application/vnd.naviter.seeyou.cup</mimetype>
|
||||
<mimetype>application/vnd.garmin.gpi</mimetype>
|
||||
<mimetype>application/sml+xml</mimetype>
|
||||
<mimetype>application/vnd.suunto.sml+xml</mimetype>
|
||||
<mimetype>image/jpeg</mimetype>
|
||||
<mimetype>text/csv</mimetype>
|
||||
<mimetype>application/vnd.garmin.img</mimetype>
|
||||
<mimetype>application/vnd.garmin.jnx</mimetype>
|
||||
<mimetype>application/vnd.garmin.gmap+xml</mimetype>
|
||||
<mimetype>image/vnd.maptech.kap</mimetype>
|
||||
<mimetype>application/vnd.oziexplorer.map</mimetype>
|
||||
<mimetype>application/vnd.mapbox.mbtiles</mimetype>
|
||||
<mimetype>application/vnd.twonav.rmap</mimetype>
|
||||
<mimetype>application/vnd.trekbuddy.tba</mimetype>
|
||||
<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>
|
||||
</mimetypes>
|
||||
</component>
|
||||
|
@ -1887,6 +1887,7 @@ CI1971 / Chatham Islands Map Grid,5518,4672,5517,9001,9807,4500,8801,-44,9110,88
|
||||
CI1979 / Chatham Islands Map Grid,5519,4673,5517,9001,9807,4500,8801,-44,9110,8802,-176.3,9110,8805,1,9201,8806,350000,9001,8807,650000,9001,,,,,,
|
||||
DHDN / 3-degree Gauss-Kruger zone 1,5520,4314,16261,9001,9807,4530,8801,0,9102,8802,3,9102,8805,1,9201,8806,1500000,9001,8807,0,9001,,,,,,
|
||||
WGS 84 / Gabon TM 2011,5523,4326,5522,9001,9807,4499,8801,0,9102,8802,11.3,9110,8805,0.9996,9201,8806,1500000,9001,8807,5500000,9001,,,,,,
|
||||
SAD69(96) / Brazil Polyconic,5530,5527,19941,9001,9818,4499,8801,0,9102,8802,-54,9102,8806,5000000,9001,8807,10000000,9001,,,,,,,,,
|
||||
SAD69(96) / UTM zone 21S,5531,5527,16121,9001,9807,4400,8801,0,9102,8802,-57,9102,8805,0.9996,9201,8806,500000,9001,8807,10000000,9001,,,,,,
|
||||
SAD69(96) / UTM zone 22S,5532,4618,16122,9001,9807,4400,8801,0,9102,8802,-51,9102,8805,0.9996,9201,8806,500000,9001,8807,10000000,9001,,,,,,
|
||||
SAD69(96) / UTM zone 23S,5533,5527,16123,9001,9807,4400,8801,0,9102,8802,-45,9102,8805,0.9996,9201,8806,500000,9001,8807,10000000,9001,,,,,,
|
||||
@ -1970,6 +1971,7 @@ SAD69(96) / UTM zone 18S,5875,5527,16118,9001,9807,4400,8801,0,9102,8802,-75,910
|
||||
SAD69(96) / UTM zone 19S,5876,5527,16119,9001,9807,4400,8801,0,9102,8802,-69,9102,8805,0.9996,9201,8806,500000,9001,8807,10000000,9001,,,,,,
|
||||
SAD69(96) / UTM zone 20S,5877,5527,16120,9001,9807,4400,8801,0,9102,8802,-63,9102,8805,0.9996,9201,8806,500000,9001,8807,10000000,9001,,,,,,
|
||||
Cadastre 1997 / UTM zone 38S,5879,4475,16138,9001,9807,4400,8801,0,9102,8802,45,9102,8805,0.9996,9201,8806,500000,9001,8807,10000000,9001,,,,,,
|
||||
SIRGAS 2000 / Brazil Polyconic,5880,4674,19941,9001,9818,4499,8801,0,9102,8802,-54,9102,8806,5000000,9001,8807,10000000,9001,,,,,,,,,
|
||||
WGS 84 / EPSG Arctic Regional zone A1,5921,4326,5906,9001,9802,4400,8821,81.19020136,9110,8822,-111,9102,8823,85,9102,8824,77,9102,8826,0,9001,8827,0,9001,,,
|
||||
WGS 84 / EPSG Arctic Regional zone A2,5922,4326,5907,9001,9802,4400,8821,81.19020136,9110,8822,-39,9102,8823,85,9102,8824,77,9102,8826,0,9001,8827,0,9001,,,
|
||||
WGS 84 / EPSG Arctic Regional zone A3,5923,4326,5908,9001,9802,4400,8821,81.19020136,9110,8822,33,9102,8823,85,9102,8824,77,9102,8826,0,9001,8827,0,9001,,,
|
||||
@ -3046,6 +3048,8 @@ Pulkovo 1942 / Gauss-Kruger 32N,28492,4284,16332,9001,9807,4530,8801,0,9102,8802
|
||||
Qatar 1974 / Qatar National Grid,28600,4285,19919,9001,9807,4400,8801,24.27,9110,8802,51.13,9110,8805,0.99999,9201,8806,200000,9001,8807,300000,9001,,,,,,
|
||||
Amersfoort / RD Old,28991,4289,19913,9001,9809,4499,8801,52.0922178,9110,8802,5.23155,9110,8805,0.9999079,9201,8806,0,9001,8807,0,9001,,,,,,
|
||||
Amersfoort / RD New,28992,4289,19914,9001,9809,4499,8801,52.0922178,9110,8802,5.23155,9110,8805,0.9999079,9201,8806,155000,9001,8807,463000,9001,,,,,,
|
||||
SAD69 / Brazil Polyconic,29100,4291,19941,9001,9818,4499,8801,0,9102,8802,-54,9102,8806,5000000,9001,8807,10000000,9001,,,,,,,,,
|
||||
SAD69 / Brazil Polyconic,29101,4618,19941,9001,9818,4499,8801,0,9102,8802,-54,9102,8806,5000000,9001,8807,10000000,9001,,,,,,,,,
|
||||
SAD69 / UTM zone 18N,29118,4291,16018,9001,9807,4400,8801,0,9102,8802,-75,9102,8805,0.9996,9201,8806,500000,9001,8807,0,9001,,,,,,
|
||||
SAD69 / UTM zone 19N,29119,4291,16019,9001,9807,4400,8801,0,9102,8802,-69,9102,8805,0.9996,9201,8806,500000,9001,8807,0,9001,,,,,,
|
||||
SAD69 / UTM zone 20N,29120,4291,16020,9001,9807,4400,8801,0,9102,8802,-63,9102,8805,0.9996,9201,8806,500000,9001,8807,0,9001,,,,,,
|
||||
|
Can't render this file because it is too large.
|
@ -15,4 +15,4 @@ Icon=gpxsee
|
||||
Terminal=false
|
||||
Type=Application
|
||||
Categories=Graphics;Viewer;Education;Geography;Maps;Sports;Qt;
|
||||
MimeType=application/gpx+xml;application/tcx+xml;application/vnd.ant.fit;application/vnd.google-earth.kml+xml;application/vnd.fai.igc;application/vnd.nmea.nmea;application/vnd.oziexplorer.plt;application/vnd.oziexplorer.rte;application/vnd.oziexplorer.wpt;application/loc+xml;application/slf+xml;application/geo+json;application/vnd.naviter.seeyou.cup;application/vnd.garmin.gpi;application/sml+xml;
|
||||
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
|
||||
|
118
pkg/gpxsee.nsi
@ -4,10 +4,12 @@
|
||||
!include "macros.nsh"
|
||||
|
||||
|
||||
Unicode true
|
||||
|
||||
; The name of the installer
|
||||
Name "GPXSee"
|
||||
; Program version
|
||||
!define VERSION "7.33"
|
||||
!define VERSION "8.4"
|
||||
|
||||
; The file to write
|
||||
OutFile "GPXSee-${VERSION}.exe"
|
||||
@ -17,6 +19,9 @@ SetCompressor /SOLID lzma
|
||||
; Required execution level
|
||||
RequestExecutionLevel admin
|
||||
|
||||
; Don't let the OS scale(blur) the installer GUI
|
||||
ManifestDPIAware true
|
||||
|
||||
; The default installation directory
|
||||
InstallDir "$PROGRAMFILES\GPXSee"
|
||||
|
||||
@ -98,7 +103,7 @@ Section "GPXSee" SEC_APP
|
||||
|
||||
; 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"'
|
||||
WriteRegDWORD HKLM "${REGENTRY}" "NoModify" 1
|
||||
@ -106,14 +111,6 @@ Section "GPXSee" SEC_APP
|
||||
|
||||
; Associate file formats
|
||||
DetailPrint "Associating file types..."
|
||||
!insertmacro FILE_ASSOCIATION_ADD "gpx" "GPS Exchange Format" 8
|
||||
!insertmacro FILE_ASSOCIATION_ADD "tcx" "Training Center XML" 9
|
||||
!insertmacro FILE_ASSOCIATION_ADD "kml" "Keyhole Markup Language" 10
|
||||
!insertmacro FILE_ASSOCIATION_ADD "fit" "Flexible and Interoperable Data Transfer" 11
|
||||
!insertmacro FILE_ASSOCIATION_ADD "igc" "Flight Recorder Data Format" 12
|
||||
!insertmacro FILE_ASSOCIATION_ADD "nmea" "NMEA 0183 Data" 13
|
||||
!insertmacro FILE_ASSOCIATION_ADD "plt" "OziExplorer Track Point File" 14
|
||||
!insertmacro FILE_ASSOCIATION_ADD "rte" "OziExplorer Route File" 15
|
||||
!insertmacro FILE_ASSOCIATION_ADD "wpt" "OziExplorer Waypoint File" 1
|
||||
!insertmacro FILE_ASSOCIATION_ADD "loc" "Geocaching.com Waypoint File" 2
|
||||
!insertmacro FILE_ASSOCIATION_ADD "slf" "Sigma Log File" 3
|
||||
@ -121,6 +118,59 @@ Section "GPXSee" SEC_APP
|
||||
!insertmacro FILE_ASSOCIATION_ADD "cup" "SeeYou CUP File" 5
|
||||
!insertmacro FILE_ASSOCIATION_ADD "gpi" "Garmin POI File" 6
|
||||
!insertmacro FILE_ASSOCIATION_ADD "sml" "Suunto Markup Language" 7
|
||||
!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 "tcx" "Training Center XML" 17
|
||||
!insertmacro FILE_ASSOCIATION_ADD "kml" "Keyhole Markup Language" 18
|
||||
!insertmacro FILE_ASSOCIATION_ADD "kmz" "KML geographic compressed data" 18
|
||||
!insertmacro FILE_ASSOCIATION_ADD "fit" "Flexible and Interoperable Data Transfer" 19
|
||||
!insertmacro FILE_ASSOCIATION_ADD "igc" "Flight Recorder Data Format" 20
|
||||
!insertmacro FILE_ASSOCIATION_ADD "nmea" "NMEA 0183 Data" 21
|
||||
!insertmacro FILE_ASSOCIATION_ADD "plt" "OziExplorer Track File" 22
|
||||
!insertmacro FILE_ASSOCIATION_ADD "rte" "OziExplorer Route File" 23
|
||||
|
||||
WriteRegStr HKCR "Applications\GPXSee.exe\shell\open\command" "" "$\"$INSTDIR\GPXSee.exe$\" $\"%1$\""
|
||||
WriteRegStr HKCR ".gpx\OpenWithList" "GPXSee.exe" ""
|
||||
WriteRegStr HKCR ".tcx\OpenWithList" "GPXSee.exe" ""
|
||||
WriteRegStr HKCR ".kml\OpenWithList" "GPXSee.exe" ""
|
||||
WriteRegStr HKCR ".fit\OpenWithList" "GPXSee.exe" ""
|
||||
WriteRegStr HKCR ".igc\OpenWithList" "GPXSee.exe" ""
|
||||
WriteRegStr HKCR ".nmea\OpenWithList" "GPXSee.exe" ""
|
||||
WriteRegStr HKCR ".plt\OpenWithList" "GPXSee.exe" ""
|
||||
WriteRegStr HKCR ".rte\OpenWithList" "GPXSee.exe" ""
|
||||
WriteRegStr HKCR ".wpt\OpenWithList" "GPXSee.exe" ""
|
||||
WriteRegStr HKCR ".loc\OpenWithList" "GPXSee.exe" ""
|
||||
WriteRegStr HKCR ".slf\OpenWithList" "GPXSee.exe" ""
|
||||
WriteRegStr HKCR ".geojson\OpenWithList" "GPXSee.exe" ""
|
||||
WriteRegStr HKCR ".cup\OpenWithList" "GPXSee.exe" ""
|
||||
WriteRegStr HKCR ".gpi\OpenWithList" "GPXSee.exe" ""
|
||||
WriteRegStr HKCR ".sml\OpenWithList" "GPXSee.exe" ""
|
||||
WriteRegStr HKCR ".csv\OpenWithList" "GPXSee.exe" ""
|
||||
WriteRegStr HKCR ".json\OpenWithList" "GPXSee.exe" ""
|
||||
WriteRegStr HKCR ".jpg\OpenWithList" "GPXSee.exe" ""
|
||||
WriteRegStr HKCR ".jpeg\OpenWithList" "GPXSee.exe" ""
|
||||
WriteRegStr HKCR ".img\OpenWithList" "GPXSee.exe" ""
|
||||
WriteRegStr HKCR ".jnx\OpenWithList" "GPXSee.exe" ""
|
||||
WriteRegStr HKCR ".kap\OpenWithList" "GPXSee.exe" ""
|
||||
WriteRegStr HKCR ".map\OpenWithList" "GPXSee.exe" ""
|
||||
WriteRegStr HKCR ".mbtiles\OpenWithList" "GPXSee.exe" ""
|
||||
WriteRegStr HKCR ".rmap\OpenWithList" "GPXSee.exe" ""
|
||||
WriteRegStr HKCR ".rtmap\OpenWithList" "GPXSee.exe" ""
|
||||
WriteRegStr HKCR ".tar\OpenWithList" "GPXSee.exe" ""
|
||||
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 ".kmz\OpenWithList" "GPXSee.exe" ""
|
||||
WriteRegStr HKCR ".aqm\OpenWithList" "GPXSee.exe" ""
|
||||
|
||||
System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) v (0x08000000, 0, 0, 0)'
|
||||
|
||||
SectionEnd
|
||||
@ -173,6 +223,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"
|
||||
@ -207,7 +258,7 @@ Section "Uninstall"
|
||||
Delete "$SMPROGRAMS\$StartMenuFolder\*.*"
|
||||
RMDir "$SMPROGRAMS\$StartMenuFolder"
|
||||
|
||||
; Remove GPX file association
|
||||
; Remove file associations
|
||||
!insertmacro FILE_ASSOCIATION_REMOVE "gpx"
|
||||
!insertmacro FILE_ASSOCIATION_REMOVE "tcx"
|
||||
!insertmacro FILE_ASSOCIATION_REMOVE "kml"
|
||||
@ -223,6 +274,51 @@ Section "Uninstall"
|
||||
!insertmacro FILE_ASSOCIATION_REMOVE "cup"
|
||||
!insertmacro FILE_ASSOCIATION_REMOVE "gpi"
|
||||
!insertmacro FILE_ASSOCIATION_REMOVE "sml"
|
||||
!insertmacro FILE_ASSOCIATION_REMOVE "img"
|
||||
!insertmacro FILE_ASSOCIATION_REMOVE "jnx"
|
||||
!insertmacro FILE_ASSOCIATION_REMOVE "kap"
|
||||
!insertmacro FILE_ASSOCIATION_REMOVE "map"
|
||||
!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"
|
||||
|
||||
DeleteRegValue HKCR ".gpx\OpenWithList" "GPXSee.exe"
|
||||
DeleteRegValue HKCR ".tcx\OpenWithList" "GPXSee.exe"
|
||||
DeleteRegValue HKCR ".kml\OpenWithList" "GPXSee.exe"
|
||||
DeleteRegValue HKCR ".fit\OpenWithList" "GPXSee.exe"
|
||||
DeleteRegValue HKCR ".igc\OpenWithList" "GPXSee.exe"
|
||||
DeleteRegValue HKCR ".nmea\OpenWithList" "GPXSee.exe"
|
||||
DeleteRegValue HKCR ".plt\OpenWithList" "GPXSee.exe"
|
||||
DeleteRegValue HKCR ".rte\OpenWithList" "GPXSee.exe"
|
||||
DeleteRegValue HKCR ".wpt\OpenWithList" "GPXSee.exe"
|
||||
DeleteRegValue HKCR ".loc\OpenWithList" "GPXSee.exe"
|
||||
DeleteRegValue HKCR ".slf\OpenWithList" "GPXSee.exe"
|
||||
DeleteRegValue HKCR ".geojson\OpenWithList" "GPXSee.exe"
|
||||
DeleteRegValue HKCR ".cup\OpenWithList" "GPXSee.exe"
|
||||
DeleteRegValue HKCR ".gpi\OpenWithList" "GPXSee.exe"
|
||||
DeleteRegValue HKCR ".sml\OpenWithList" "GPXSee.exe"
|
||||
DeleteRegValue HKCR ".csv\OpenWithList" "GPXSee.exe"
|
||||
DeleteRegValue HKCR ".json\OpenWithList" "GPXSee.exe"
|
||||
DeleteRegValue HKCR ".jpg\OpenWithList" "GPXSee.exe"
|
||||
DeleteRegValue HKCR ".jpeg\OpenWithList" "GPXSee.exe"
|
||||
DeleteRegValue HKCR ".img\OpenWithList" "GPXSee.exe"
|
||||
DeleteRegValue HKCR ".jnx\OpenWithList" "GPXSee.exe"
|
||||
DeleteRegValue HKCR ".kap\OpenWithList" "GPXSee.exe"
|
||||
DeleteRegValue HKCR ".map\OpenWithList" "GPXSee.exe"
|
||||
DeleteRegValue HKCR ".mbtiles\OpenWithList" "GPXSee.exe"
|
||||
DeleteRegValue HKCR ".rmap\OpenWithList" "GPXSee.exe"
|
||||
DeleteRegValue HKCR ".rtmap\OpenWithList" "GPXSee.exe"
|
||||
DeleteRegValue HKCR ".tar\OpenWithList" "GPXSee.exe"
|
||||
DeleteRegValue HKCR ".tba\OpenWithList" "GPXSee.exe"
|
||||
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"
|
||||
DeleteRegKey HKCR "Applications\GPXSee.exe"
|
||||
|
||||
System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) v (0x08000000, 0, 0, 0)'
|
||||
|
||||
SectionEnd
|
||||
|
135
pkg/gpxsee.xml
@ -1,35 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
|
||||
|
||||
<!-- Data files -->
|
||||
|
||||
<mime-type type="application/gpx+xml">
|
||||
<comment>GPS Exchange Format</comment>
|
||||
<sub-class-of type="application/xml"/>
|
||||
<generic-icon name="application-xml"/>
|
||||
<root-XML namespaceURI="http://www.topografix.com/GPX/1/0" localName="gpx"/>
|
||||
<root-XML namespaceURI="http://www.topografix.com/GPX/1/1" localName="gpx"/>
|
||||
<glob pattern="*.gpx"/>
|
||||
</mime-type>
|
||||
|
||||
<mime-type type="application/tcx+xml">
|
||||
<mime-type type="application/vnd.garmin.tcx+xml">
|
||||
<comment>Training Center XML</comment>
|
||||
<sub-class-of type="application/xml"/>
|
||||
<generic-icon name="application-xml"/>
|
||||
<root-XML namespaceURI="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2" localName="TrainingCenterDatabase"/>
|
||||
<glob pattern="*.tcx"/>
|
||||
</mime-type>
|
||||
|
||||
<mime-type type="application/kml+xml">
|
||||
<mime-type type="application/vnd.google-earth.kml+xml">
|
||||
<comment>Keyhole Markup Language</comment>
|
||||
<sub-class-of type="application/xml"/>
|
||||
<generic-icon name="application-xml"/>
|
||||
<root-XML namespaceURI="http://www.opengis.net/kml/2.2" localName="kml"/>
|
||||
<glob pattern="*.kml"/>
|
||||
</mime-type>
|
||||
|
||||
<mime-type type="application/loc+xml">
|
||||
<mime-type type="application/vnd.groundspeak.loc+xml">
|
||||
<comment>Geocaching.com Waypoint File</comment>
|
||||
<sub-class-of type="application/xml"/>
|
||||
<generic-icon name="application-xml"/>
|
||||
<glob pattern="*.loc"/>
|
||||
</mime-type>
|
||||
|
||||
<mime-type type="application/slf+xml">
|
||||
<mime-type type="application/vnd.sigma.slf+xml">
|
||||
<comment>Sigma Log Format</comment>
|
||||
<sub-class-of type="application/xml"/>
|
||||
<generic-icon name="application-xml"/>
|
||||
@ -40,6 +46,9 @@
|
||||
<comment>Flexible and Interoperable Data Transfer</comment>
|
||||
<sub-class-of type="application/octet-stream"/>
|
||||
<generic-icon name="application-octet-stream"/>
|
||||
<magic>
|
||||
<match type="string" offset="8" value=".FIT"/>
|
||||
</magic>
|
||||
<glob pattern="*.fit"/>
|
||||
</mime-type>
|
||||
|
||||
@ -61,6 +70,9 @@
|
||||
<comment>OziExplorer Track Point File</comment>
|
||||
<sub-class-of type="text/plain"/>
|
||||
<generic-icon name="text-plain"/>
|
||||
<magic>
|
||||
<match type="string" offset="0" value="OziExplorer Track Point File"/>
|
||||
</magic>
|
||||
<glob pattern="*.plt"/>
|
||||
</mime-type>
|
||||
|
||||
@ -68,6 +80,9 @@
|
||||
<comment>OziExplorer Route File</comment>
|
||||
<sub-class-of type="text/plain"/>
|
||||
<generic-icon name="text-plain"/>
|
||||
<magic>
|
||||
<match type="string" offset="0" value="OziExplorer Route File"/>
|
||||
</magic>
|
||||
<glob pattern="*.rte"/>
|
||||
</mime-type>
|
||||
|
||||
@ -75,6 +90,9 @@
|
||||
<comment>OziExplorer Waypoint File</comment>
|
||||
<sub-class-of type="text/plain"/>
|
||||
<generic-icon name="text-plain"/>
|
||||
<magic>
|
||||
<match type="string" offset="0" value="OziExplorer Waypoint File"/>
|
||||
</magic>
|
||||
<glob pattern="*.wpt"/>
|
||||
</mime-type>
|
||||
|
||||
@ -96,13 +114,120 @@
|
||||
<comment>Garmin POI File</comment>
|
||||
<sub-class-of type="application/octet-stream"/>
|
||||
<generic-icon name="application/octet-stream"/>
|
||||
<magic>
|
||||
<match type="string" offset="8" value="GRMREC"/>
|
||||
</magic>
|
||||
<glob pattern="*.gpi"/>
|
||||
</mime-type>
|
||||
|
||||
<mime-type type="application/sml+xml">
|
||||
<mime-type type="application/vnd.suunto.sml+xml">
|
||||
<comment>Suunto Markup Language</comment>
|
||||
<sub-class-of type="application/xml"/>
|
||||
<generic-icon name="application-xml"/>
|
||||
<root-XML namespaceURI="http://www.suunto.com/schemas/sml" localName="sml"/>
|
||||
<glob pattern="*.sml"/>
|
||||
</mime-type>
|
||||
|
||||
|
||||
<!-- Maps -->
|
||||
|
||||
<mime-type type="application/vnd.garmin.img">
|
||||
<comment>Garmin IMG Map</comment>
|
||||
<sub-class-of type="application/octet-stream"/>
|
||||
<generic-icon name="application-octet-stream"/>
|
||||
<magic>
|
||||
<match type="string" offset="16" value="DSKIMG"/>
|
||||
</magic>
|
||||
<glob pattern="*.img"/>
|
||||
</mime-type>
|
||||
|
||||
<mime-type type="application/vnd.garmin.jnx">
|
||||
<comment>Garmin JNX Map</comment>
|
||||
<sub-class-of type="application/octet-stream"/>
|
||||
<generic-icon name="application-octet-stream"/>
|
||||
<glob pattern="*.jnx"/>
|
||||
</mime-type>
|
||||
|
||||
<mime-type type="application/vnd.garmin.gmap+xml">
|
||||
<comment>Garmin Map Product File</comment>
|
||||
<sub-class-of type="application/xml"/>
|
||||
<generic-icon name="application-xml"/>
|
||||
<root-XML namespaceURI="http://www.garmin.com/xmlschemas/MapProduct/v1" localName="MapProduct"/>
|
||||
<root-XML namespaceURI="http://www.garmin.com/xmlschemas/MapProduct/v2" localName="MapProduct"/>
|
||||
<glob pattern="*.xml"/>
|
||||
</mime-type>
|
||||
|
||||
<mime-type type="image/vnd.maptech.kap">
|
||||
<comment>BSB Nautical Chart</comment>
|
||||
<generic-icon name="image-x-generic"/>
|
||||
<glob pattern="*.kap"/>
|
||||
</mime-type>
|
||||
|
||||
<mime-type type="application/vnd.oziexplorer.map">
|
||||
<comment>OziExplorer Map File</comment>
|
||||
<sub-class-of type="text/plain"/>
|
||||
<generic-icon name="text-plain"/>
|
||||
<magic>
|
||||
<match type="string" offset="0" value="OziExplorer Map Data File"/>
|
||||
</magic>
|
||||
<glob pattern="*.map"/>
|
||||
</mime-type>
|
||||
|
||||
<mime-type type="application/vnd.mapbox.mbtiles">
|
||||
<comment>MBTiles Map File</comment>
|
||||
<sub-class-of type="application/vnd.sqlite3"/>
|
||||
<generic-icon name="application/octet-stream"/>
|
||||
<glob pattern="*.mbtiles"/>
|
||||
</mime-type>
|
||||
|
||||
<mime-type type="application/vnd.twonav.rmap">
|
||||
<comment>TwoNav Raster Map File</comment>
|
||||
<sub-class-of type="application/octet-stream"/>
|
||||
<generic-icon name="application/octet-stream"/>
|
||||
<magic>
|
||||
<match type="string" offset="0" value="CompeGPSRasterImage"/>
|
||||
</magic>
|
||||
<glob pattern="*.rmap"/>
|
||||
<glob pattern="*.rtmap"/>
|
||||
</mime-type>
|
||||
|
||||
<mime-type type="application/vnd.trekbuddy.tba">
|
||||
<comment>TrekBuddy Atlas</comment>
|
||||
<sub-class-of type="text/plain"/>
|
||||
<generic-icon name="text-plain"/>
|
||||
<magic>
|
||||
<match type="string" offset="0" value="Atlas 1.0"/>
|
||||
</magic>
|
||||
<glob pattern="*.tba"/>
|
||||
</mime-type>
|
||||
|
||||
<mime-type type="application/vnd.gpxsee.map+xml">
|
||||
<comment>GPXSee Map Definition File</comment>
|
||||
<sub-class-of type="application/xml"/>
|
||||
<generic-icon name="application-xml"/>
|
||||
<root-XML namespaceURI="http://www.gpxsee.org/map/1.0" localName="map"/>
|
||||
<root-XML namespaceURI="http://www.gpxsee.org/map/1.1" localName="map"/>
|
||||
<root-XML namespaceURI="http://www.gpxsee.org/map/1.2" localName="map"/>
|
||||
<root-XML namespaceURI="http://www.gpxsee.org/map/1.3" localName="map"/>
|
||||
<root-XML namespaceURI="http://www.gpxsee.org/map/1.4" localName="map"/>
|
||||
<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-info>
|
||||
|
134
pkg/gpxsee64.nsi
@ -4,10 +4,12 @@
|
||||
!include "macros.nsh"
|
||||
|
||||
|
||||
Unicode true
|
||||
|
||||
; The name of the installer
|
||||
Name "GPXSee"
|
||||
; Program version
|
||||
!define VERSION "7.33"
|
||||
!define VERSION "8.4"
|
||||
|
||||
; The file to write
|
||||
OutFile "GPXSee-${VERSION}_x64.exe"
|
||||
@ -17,6 +19,9 @@ SetCompressor /SOLID lzma
|
||||
; Required execution level
|
||||
RequestExecutionLevel admin
|
||||
|
||||
; Don't let the OS scale(blur) the installer GUI
|
||||
ManifestDPIAware true
|
||||
|
||||
; The default installation directory
|
||||
InstallDir "$PROGRAMFILES64\GPXSee"
|
||||
|
||||
@ -105,7 +110,7 @@ Section "GPXSee" SEC_APP
|
||||
|
||||
; 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"'
|
||||
WriteRegDWORD HKLM "${REGENTRY}" "NoModify" 1
|
||||
@ -113,14 +118,6 @@ Section "GPXSee" SEC_APP
|
||||
|
||||
; Associate file formats
|
||||
DetailPrint "Associating file types..."
|
||||
!insertmacro FILE_ASSOCIATION_ADD "gpx" "GPS Exchange Format" 8
|
||||
!insertmacro FILE_ASSOCIATION_ADD "tcx" "Training Center XML" 9
|
||||
!insertmacro FILE_ASSOCIATION_ADD "kml" "Keyhole Markup Language" 10
|
||||
!insertmacro FILE_ASSOCIATION_ADD "fit" "Flexible and Interoperable Data Transfer" 11
|
||||
!insertmacro FILE_ASSOCIATION_ADD "igc" "Flight Recorder Data Format" 12
|
||||
!insertmacro FILE_ASSOCIATION_ADD "nmea" "NMEA 0183 Data" 13
|
||||
!insertmacro FILE_ASSOCIATION_ADD "plt" "OziExplorer Track Point File" 14
|
||||
!insertmacro FILE_ASSOCIATION_ADD "rte" "OziExplorer Route File" 15
|
||||
!insertmacro FILE_ASSOCIATION_ADD "wpt" "OziExplorer Waypoint File" 1
|
||||
!insertmacro FILE_ASSOCIATION_ADD "loc" "Geocaching.com Waypoint File" 2
|
||||
!insertmacro FILE_ASSOCIATION_ADD "slf" "Sigma Log File" 3
|
||||
@ -128,6 +125,59 @@ Section "GPXSee" SEC_APP
|
||||
!insertmacro FILE_ASSOCIATION_ADD "cup" "SeeYou CUP File" 5
|
||||
!insertmacro FILE_ASSOCIATION_ADD "gpi" "Garmin POI File" 6
|
||||
!insertmacro FILE_ASSOCIATION_ADD "sml" "Suunto Markup Language" 7
|
||||
!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 "tcx" "Training Center XML" 17
|
||||
!insertmacro FILE_ASSOCIATION_ADD "kml" "Keyhole Markup Language" 18
|
||||
!insertmacro FILE_ASSOCIATION_ADD "kmz" "KML geographic compressed data" 18
|
||||
!insertmacro FILE_ASSOCIATION_ADD "fit" "Flexible and Interoperable Data Transfer" 19
|
||||
!insertmacro FILE_ASSOCIATION_ADD "igc" "Flight Recorder Data Format" 20
|
||||
!insertmacro FILE_ASSOCIATION_ADD "nmea" "NMEA 0183 Data" 21
|
||||
!insertmacro FILE_ASSOCIATION_ADD "plt" "OziExplorer Track File" 22
|
||||
!insertmacro FILE_ASSOCIATION_ADD "rte" "OziExplorer Route File" 23
|
||||
|
||||
WriteRegStr HKCR "Applications\GPXSee.exe\shell\open\command" "" "$\"$INSTDIR\GPXSee.exe$\" $\"%1$\""
|
||||
WriteRegStr HKCR ".gpx\OpenWithList" "GPXSee.exe" ""
|
||||
WriteRegStr HKCR ".tcx\OpenWithList" "GPXSee.exe" ""
|
||||
WriteRegStr HKCR ".kml\OpenWithList" "GPXSee.exe" ""
|
||||
WriteRegStr HKCR ".fit\OpenWithList" "GPXSee.exe" ""
|
||||
WriteRegStr HKCR ".igc\OpenWithList" "GPXSee.exe" ""
|
||||
WriteRegStr HKCR ".nmea\OpenWithList" "GPXSee.exe" ""
|
||||
WriteRegStr HKCR ".plt\OpenWithList" "GPXSee.exe" ""
|
||||
WriteRegStr HKCR ".rte\OpenWithList" "GPXSee.exe" ""
|
||||
WriteRegStr HKCR ".wpt\OpenWithList" "GPXSee.exe" ""
|
||||
WriteRegStr HKCR ".loc\OpenWithList" "GPXSee.exe" ""
|
||||
WriteRegStr HKCR ".slf\OpenWithList" "GPXSee.exe" ""
|
||||
WriteRegStr HKCR ".geojson\OpenWithList" "GPXSee.exe" ""
|
||||
WriteRegStr HKCR ".cup\OpenWithList" "GPXSee.exe" ""
|
||||
WriteRegStr HKCR ".gpi\OpenWithList" "GPXSee.exe" ""
|
||||
WriteRegStr HKCR ".sml\OpenWithList" "GPXSee.exe" ""
|
||||
WriteRegStr HKCR ".csv\OpenWithList" "GPXSee.exe" ""
|
||||
WriteRegStr HKCR ".json\OpenWithList" "GPXSee.exe" ""
|
||||
WriteRegStr HKCR ".jpg\OpenWithList" "GPXSee.exe" ""
|
||||
WriteRegStr HKCR ".jpeg\OpenWithList" "GPXSee.exe" ""
|
||||
WriteRegStr HKCR ".img\OpenWithList" "GPXSee.exe" ""
|
||||
WriteRegStr HKCR ".jnx\OpenWithList" "GPXSee.exe" ""
|
||||
WriteRegStr HKCR ".kap\OpenWithList" "GPXSee.exe" ""
|
||||
WriteRegStr HKCR ".map\OpenWithList" "GPXSee.exe" ""
|
||||
WriteRegStr HKCR ".mbtiles\OpenWithList" "GPXSee.exe" ""
|
||||
WriteRegStr HKCR ".rmap\OpenWithList" "GPXSee.exe" ""
|
||||
WriteRegStr HKCR ".rtmap\OpenWithList" "GPXSee.exe" ""
|
||||
WriteRegStr HKCR ".tar\OpenWithList" "GPXSee.exe" ""
|
||||
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 ".kmz\OpenWithList" "GPXSee.exe" ""
|
||||
WriteRegStr HKCR ".aqm\OpenWithList" "GPXSee.exe" ""
|
||||
|
||||
System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) v (0x08000000, 0, 0, 0)'
|
||||
|
||||
SectionEnd
|
||||
@ -136,6 +186,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"
|
||||
@ -143,9 +204,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"
|
||||
|
||||
@ -169,6 +231,7 @@ Section "OpenSSL" SEC_OPENSSL
|
||||
|
||||
SectionEnd
|
||||
|
||||
!ifndef QT6
|
||||
Section "ANGLE" SEC_ANGLE
|
||||
|
||||
File "libGLESv2.dll"
|
||||
@ -176,10 +239,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"
|
||||
@ -215,7 +280,7 @@ Section "Uninstall"
|
||||
Delete "$SMPROGRAMS\$StartMenuFolder\*.*"
|
||||
RMDir "$SMPROGRAMS\$StartMenuFolder"
|
||||
|
||||
; Remove File associations
|
||||
; Remove file associations
|
||||
!insertmacro FILE_ASSOCIATION_REMOVE "gpx"
|
||||
!insertmacro FILE_ASSOCIATION_REMOVE "tcx"
|
||||
!insertmacro FILE_ASSOCIATION_REMOVE "kml"
|
||||
@ -231,6 +296,51 @@ Section "Uninstall"
|
||||
!insertmacro FILE_ASSOCIATION_REMOVE "cup"
|
||||
!insertmacro FILE_ASSOCIATION_REMOVE "gpi"
|
||||
!insertmacro FILE_ASSOCIATION_REMOVE "sml"
|
||||
!insertmacro FILE_ASSOCIATION_REMOVE "img"
|
||||
!insertmacro FILE_ASSOCIATION_REMOVE "jnx"
|
||||
!insertmacro FILE_ASSOCIATION_REMOVE "kap"
|
||||
!insertmacro FILE_ASSOCIATION_REMOVE "map"
|
||||
!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"
|
||||
|
||||
DeleteRegValue HKCR ".gpx\OpenWithList" "GPXSee.exe"
|
||||
DeleteRegValue HKCR ".tcx\OpenWithList" "GPXSee.exe"
|
||||
DeleteRegValue HKCR ".kml\OpenWithList" "GPXSee.exe"
|
||||
DeleteRegValue HKCR ".fit\OpenWithList" "GPXSee.exe"
|
||||
DeleteRegValue HKCR ".igc\OpenWithList" "GPXSee.exe"
|
||||
DeleteRegValue HKCR ".nmea\OpenWithList" "GPXSee.exe"
|
||||
DeleteRegValue HKCR ".plt\OpenWithList" "GPXSee.exe"
|
||||
DeleteRegValue HKCR ".rte\OpenWithList" "GPXSee.exe"
|
||||
DeleteRegValue HKCR ".wpt\OpenWithList" "GPXSee.exe"
|
||||
DeleteRegValue HKCR ".loc\OpenWithList" "GPXSee.exe"
|
||||
DeleteRegValue HKCR ".slf\OpenWithList" "GPXSee.exe"
|
||||
DeleteRegValue HKCR ".geojson\OpenWithList" "GPXSee.exe"
|
||||
DeleteRegValue HKCR ".cup\OpenWithList" "GPXSee.exe"
|
||||
DeleteRegValue HKCR ".gpi\OpenWithList" "GPXSee.exe"
|
||||
DeleteRegValue HKCR ".sml\OpenWithList" "GPXSee.exe"
|
||||
DeleteRegValue HKCR ".csv\OpenWithList" "GPXSee.exe"
|
||||
DeleteRegValue HKCR ".json\OpenWithList" "GPXSee.exe"
|
||||
DeleteRegValue HKCR ".jpg\OpenWithList" "GPXSee.exe"
|
||||
DeleteRegValue HKCR ".jpeg\OpenWithList" "GPXSee.exe"
|
||||
DeleteRegValue HKCR ".img\OpenWithList" "GPXSee.exe"
|
||||
DeleteRegValue HKCR ".jnx\OpenWithList" "GPXSee.exe"
|
||||
DeleteRegValue HKCR ".kap\OpenWithList" "GPXSee.exe"
|
||||
DeleteRegValue HKCR ".map\OpenWithList" "GPXSee.exe"
|
||||
DeleteRegValue HKCR ".mbtiles\OpenWithList" "GPXSee.exe"
|
||||
DeleteRegValue HKCR ".rmap\OpenWithList" "GPXSee.exe"
|
||||
DeleteRegValue HKCR ".rtmap\OpenWithList" "GPXSee.exe"
|
||||
DeleteRegValue HKCR ".tar\OpenWithList" "GPXSee.exe"
|
||||
DeleteRegValue HKCR ".tba\OpenWithList" "GPXSee.exe"
|
||||
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"
|
||||
DeleteRegKey HKCR "Applications\GPXSee.exe"
|
||||
|
||||
System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) v (0x08000000, 0, 0, 0)'
|
||||
|
||||
SectionEnd
|
||||
|
@ -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,9 +14,9 @@
|
||||
#include "map/gcs.h"
|
||||
#include "map/pcs.h"
|
||||
#include "data/dem.h"
|
||||
#include "opengl.h"
|
||||
#include "gui.h"
|
||||
#include "settings.h"
|
||||
#include "mapaction.h"
|
||||
#include "app.h"
|
||||
|
||||
|
||||
@ -29,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);
|
||||
@ -51,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();
|
||||
@ -76,11 +78,25 @@ App::~App()
|
||||
|
||||
int App::run()
|
||||
{
|
||||
MapAction *lastReady = 0;
|
||||
QStringList args(arguments());
|
||||
|
||||
_gui->show();
|
||||
|
||||
QStringList args(arguments());
|
||||
for (int i = 1; i < args.count(); i++)
|
||||
_gui->openFile(args.at(i));
|
||||
for (int i = 1; i < args.count(); i++) {
|
||||
if (!_gui->openFile(args.at(i), true)) {
|
||||
MapAction *a;
|
||||
if (!_gui->loadMap(args.at(i), a, true))
|
||||
_gui->openFile(args.at(i), false);
|
||||
else {
|
||||
if (a)
|
||||
lastReady = a;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (lastReady)
|
||||
lastReady->trigger();
|
||||
|
||||
return exec();
|
||||
}
|
||||
@ -89,7 +105,18 @@ bool App::event(QEvent *event)
|
||||
{
|
||||
if (event->type() == QEvent::FileOpen) {
|
||||
QFileOpenEvent *e = static_cast<QFileOpenEvent *>(event);
|
||||
return _gui->openFile(e->file());
|
||||
|
||||
if (!_gui->openFile(e->file(), true)) {
|
||||
MapAction *a;
|
||||
if (!_gui->loadMap(e->file(), a, true))
|
||||
return _gui->openFile(e->file(), false);
|
||||
else {
|
||||
if (a)
|
||||
a->trigger();
|
||||
return true;
|
||||
}
|
||||
} else
|
||||
return true;
|
||||
}
|
||||
|
||||
return QApplication::event(event);
|
||||
|
@ -5,6 +5,7 @@
|
||||
#include <QGraphicsSceneMouseEvent>
|
||||
#include "map/map.h"
|
||||
#include "popup.h"
|
||||
#include "tooltip.h"
|
||||
#include "areaitem.h"
|
||||
|
||||
|
||||
@ -22,7 +23,7 @@ QString AreaItem::info() const
|
||||
}
|
||||
|
||||
AreaItem::AreaItem(const Area &area, Map *map, GraphicsItem *parent)
|
||||
: GraphicsItem(parent), _area(area)
|
||||
: PlaneItem(parent), _area(area)
|
||||
{
|
||||
_map = map;
|
||||
_digitalZoom = 0;
|
||||
@ -158,7 +159,6 @@ void AreaItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event)
|
||||
Q_UNUSED(event);
|
||||
|
||||
_pen.setWidthF((_width + 1) * pow(2, -_digitalZoom));
|
||||
setZValue(zValue() + 1.0);
|
||||
update();
|
||||
}
|
||||
|
||||
@ -167,12 +167,5 @@ void AreaItem::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
|
||||
Q_UNUSED(event);
|
||||
|
||||
_pen.setWidthF(_width * pow(2, -_digitalZoom));
|
||||
setZValue(zValue() - 1.0);
|
||||
update();
|
||||
}
|
||||
|
||||
void AreaItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
|
||||
{
|
||||
Popup::show(event->screenPos(), info(), event->widget());
|
||||
QGraphicsItem::mousePressEvent(event);
|
||||
}
|
||||
|
@ -2,12 +2,9 @@
|
||||
#define AREAITEM_H
|
||||
|
||||
#include "data/area.h"
|
||||
#include "graphicsscene.h"
|
||||
#include "tooltip.h"
|
||||
#include "planeitem.h"
|
||||
|
||||
class Map;
|
||||
|
||||
class AreaItem : public GraphicsItem
|
||||
class AreaItem : public PlaneItem
|
||||
{
|
||||
public:
|
||||
AreaItem(const Area &area, Map *map, GraphicsItem *parent = 0);
|
||||
@ -19,6 +16,7 @@ public:
|
||||
|
||||
const Area &area() const {return _area;}
|
||||
|
||||
RectC bounds() const {return _area.boundingRect();}
|
||||
void setMap(Map *map);
|
||||
|
||||
void setColor(const QColor &color);
|
||||
@ -27,17 +25,15 @@ public:
|
||||
void setStyle(Qt::PenStyle style);
|
||||
void setDigitalZoom(int zoom);
|
||||
|
||||
virtual QString info() const;
|
||||
QString info() const;
|
||||
|
||||
protected:
|
||||
void hoverEnterEvent(QGraphicsSceneHoverEvent *event);
|
||||
void hoverLeaveEvent(QGraphicsSceneHoverEvent *event);
|
||||
void mousePressEvent(QGraphicsSceneMouseEvent *event);
|
||||
|
||||
private:
|
||||
QPainterPath painterPath(const Polygon &polygon);
|
||||
void updatePainterPath();
|
||||
ToolTip toolTip() const;
|
||||
|
||||
Area _area;
|
||||
Map *_map;
|
||||
|
@ -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;
|
||||
}
|
||||
@ -41,6 +41,7 @@ AxisItem::AxisItem(Type type, QGraphicsItem *parent)
|
||||
{
|
||||
_type = type;
|
||||
_size = 0;
|
||||
_zoom = 1.0;
|
||||
|
||||
_font.setPixelSize(FONT_SIZE);
|
||||
_font.setFamily(FONT_FAMILY);
|
||||
@ -52,8 +53,10 @@ void AxisItem::setRange(const RangeF &range)
|
||||
_range = range;
|
||||
|
||||
QFontMetrics fm(_font);
|
||||
Ticks ticks(_range.min(), _range.max(), (_type == X) ? XTICKS : YTICKS);
|
||||
Ticks ticks(_range.min(), _range.max(),
|
||||
(_type == X) ? XTICKS * _zoom : YTICKS * _zoom);
|
||||
_ticks = QVector<Tick>(ticks.count());
|
||||
|
||||
for (int i = 0; i < ticks.count(); i++) {
|
||||
Tick &t = _ticks[i];
|
||||
t.value = ticks.val(i);
|
||||
@ -72,34 +75,23 @@ void AxisItem::setSize(qreal size)
|
||||
update();
|
||||
}
|
||||
|
||||
void AxisItem::setLabel(const QString& label)
|
||||
{
|
||||
prepareGeometryChange();
|
||||
QFontMetrics fm(_font);
|
||||
_label = label;
|
||||
_labelBB = fm.tightBoundingRect(label);
|
||||
updateBoundingRect();
|
||||
update();
|
||||
}
|
||||
|
||||
void AxisItem::updateBoundingRect()
|
||||
{
|
||||
QFontMetrics fm(_font);
|
||||
QRect es = _ticks.isEmpty() ? QRect() : _ticks.last().boundingBox;
|
||||
QRect ss = _ticks.isEmpty() ? QRect() : _ticks.first().boundingBox;
|
||||
QRect ls(_labelBB);
|
||||
|
||||
if (_type == X) {
|
||||
_boundingRect = QRectF(-ss.width()/2, -TICK/2, _size + es.width()/2
|
||||
+ ss.width()/2, ls.height() + es.height() - fm.descent() + TICK
|
||||
+ 2*PADDING + 1);
|
||||
+ ss.width()/2, es.height() - 2*fm.descent() + TICK + 2*PADDING);
|
||||
} else {
|
||||
int mtw = 0;
|
||||
for (int i = 0; i < _ticks.count(); i++)
|
||||
mtw = qMax(_ticks.at(i).boundingBox.width(), mtw);
|
||||
_boundingRect = QRectF(-(ls.height() + mtw + 2*PADDING + TICK/2),
|
||||
-(_size + es.height()/2 + fm.descent()), ls.height() + mtw + 2*PADDING
|
||||
+ TICK, _size + es.height()/2 + fm.descent() + ss.height()/2);
|
||||
_boundingRect = QRectF(-(mtw + 2*PADDING + TICK/2 - fm.descent()),
|
||||
-(_size + es.height()/2 + fm.descent()), mtw + 2*PADDING
|
||||
+ TICK - fm.descent(), _size + es.height()/2 + fm.descent()
|
||||
+ ss.height()/2);
|
||||
}
|
||||
}
|
||||
|
||||
@ -108,7 +100,6 @@ void AxisItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
|
||||
{
|
||||
Q_UNUSED(option);
|
||||
Q_UNUSED(widget);
|
||||
QFontMetrics fm(_font);
|
||||
QRect ts;
|
||||
|
||||
painter->setRenderHint(QPainter::Antialiasing, false);
|
||||
@ -130,9 +121,6 @@ void AxisItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
|
||||
- (ts.width()/2), ts.height() + TICK/2 + PADDING,
|
||||
_locale.toString(val));
|
||||
}
|
||||
|
||||
painter->drawText(_size/2 - _labelBB.width()/2, _labelBB.height()
|
||||
+ ts.height() - 2*fm.descent() + TICK/2 + 2*PADDING, _label);
|
||||
} else {
|
||||
painter->drawLine(0, 0, 0, -_size);
|
||||
|
||||
@ -149,17 +137,10 @@ void AxisItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
|
||||
-((_size/_range.size()) * (val - _range.min())) + (ts.height()/2),
|
||||
_locale.toString(val));
|
||||
}
|
||||
|
||||
painter->rotate(-90);
|
||||
painter->drawText(_size/2 - _labelBB.width()/2, -(mtw + 2*PADDING
|
||||
+ TICK/2), _label);
|
||||
painter->rotate(90);
|
||||
}
|
||||
|
||||
/*
|
||||
painter->setPen(Qt::red);
|
||||
painter->drawRect(boundingRect());
|
||||
*/
|
||||
//painter->setPen(Qt::red);
|
||||
//painter->drawRect(boundingRect());
|
||||
}
|
||||
|
||||
QSizeF AxisItem::margin() const
|
||||
@ -168,15 +149,15 @@ QSizeF AxisItem::margin() const
|
||||
QRect es = _ticks.isEmpty() ? QRect() : _ticks.last().boundingBox;
|
||||
|
||||
if (_type == X) {
|
||||
return QSizeF(es.width()/2, _labelBB.height() + es.height()
|
||||
- fm.descent() + TICK/2 + 2*PADDING);
|
||||
return QSizeF(es.width()/2, es.height() - 2*fm.descent() + TICK/2
|
||||
+ 2*PADDING);
|
||||
} else {
|
||||
int mtw = 0;
|
||||
for (int i = 0; i < _ticks.count(); i++)
|
||||
mtw = qMax(_ticks.at(i).boundingBox.width(), mtw);
|
||||
|
||||
return QSizeF(_labelBB.height() -fm.descent() + mtw + 2*PADDING
|
||||
+ TICK/2, es.height()/2 + fm.descent());
|
||||
return QSizeF(mtw + 2*PADDING + TICK/2 - fm.descent(),
|
||||
es.height()/2 + fm.descent());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -13,13 +13,15 @@ public:
|
||||
|
||||
AxisItem(Type type, QGraphicsItem *parent = 0);
|
||||
|
||||
/* Note: The items position is at the 0 point of the axis line, not at the
|
||||
top-left point of the bounding rect as usual */
|
||||
QRectF boundingRect() const {return _boundingRect;}
|
||||
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
|
||||
QWidget *widget);
|
||||
|
||||
void setRange(const RangeF &range);
|
||||
void setSize(qreal size);
|
||||
void setLabel(const QString& label);
|
||||
void setZoom(qreal zoom) {_zoom = zoom;}
|
||||
|
||||
QSizeF margin() const;
|
||||
QList<qreal> ticks() const;
|
||||
@ -35,12 +37,11 @@ private:
|
||||
Type _type;
|
||||
RangeF _range;
|
||||
qreal _size;
|
||||
QString _label;
|
||||
QRect _labelBB;
|
||||
QVector<Tick> _ticks;
|
||||
QRectF _boundingRect;
|
||||
QFont _font;
|
||||
QLocale _locale;
|
||||
qreal _zoom;
|
||||
};
|
||||
|
||||
#endif // AXISITEM_H
|
||||
|
54
src/GUI/axislabelitem.cpp
Normal file
@ -0,0 +1,54 @@
|
||||
#include <QPainter>
|
||||
#include <QFontMetrics>
|
||||
#include "font.h"
|
||||
#include "axislabelitem.h"
|
||||
|
||||
|
||||
AxisLabelItem::AxisLabelItem(Type type, QGraphicsItem *parent)
|
||||
: QGraphicsItem(parent), _type(type)
|
||||
{
|
||||
_font.setPixelSize(FONT_SIZE);
|
||||
_font.setFamily(FONT_FAMILY);
|
||||
}
|
||||
|
||||
void AxisLabelItem::setLabel(const QString& label, const QString &units)
|
||||
{
|
||||
prepareGeometryChange();
|
||||
QFontMetrics fm(_font);
|
||||
_label = QString("%1 [%2]").arg(label, units.isEmpty() ? "-" : units);
|
||||
_labelBB = fm.tightBoundingRect(_label);
|
||||
updateBoundingRect();
|
||||
update();
|
||||
}
|
||||
|
||||
void AxisLabelItem::updateBoundingRect()
|
||||
{
|
||||
QFontMetrics fm(_font);
|
||||
|
||||
if (_type == X)
|
||||
_boundingRect = QRectF(0, 0, _labelBB.width(), fm.height());
|
||||
else
|
||||
_boundingRect = QRectF(0, 0, fm.height(), _labelBB.width());
|
||||
}
|
||||
|
||||
void AxisLabelItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
|
||||
QWidget *widget)
|
||||
{
|
||||
Q_UNUSED(option);
|
||||
Q_UNUSED(widget);
|
||||
QFontMetrics fm(_font);
|
||||
|
||||
painter->setFont(_font);
|
||||
|
||||
if (_type == X) {
|
||||
painter->drawText(0, fm.height() - fm.descent(), _label);
|
||||
} else {
|
||||
painter->rotate(-90);
|
||||
painter->drawText(-_labelBB.width(), fm.height() - fm.descent(), _label);
|
||||
painter->rotate(90);
|
||||
}
|
||||
|
||||
//painter->setRenderHint(QPainter::Antialiasing, false);
|
||||
//painter->setPen(Qt::red);
|
||||
//painter->drawRect(boundingRect());
|
||||
}
|
30
src/GUI/axislabelitem.h
Normal file
@ -0,0 +1,30 @@
|
||||
#ifndef AXISLABELITEM_H
|
||||
#define AXISLABELITEM_H
|
||||
|
||||
#include <QGraphicsItem>
|
||||
#include <QFont>
|
||||
|
||||
class AxisLabelItem : public QGraphicsItem
|
||||
{
|
||||
public:
|
||||
enum Type {X, Y};
|
||||
|
||||
AxisLabelItem(Type type, QGraphicsItem *parent = 0);
|
||||
|
||||
QRectF boundingRect() const {return _boundingRect;}
|
||||
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
|
||||
QWidget *widget);
|
||||
|
||||
void setLabel(const QString& label, const QString &units);
|
||||
|
||||
private:
|
||||
void updateBoundingRect();
|
||||
|
||||
Type _type;
|
||||
QString _label;
|
||||
QFont _font;
|
||||
QRect _labelBB;
|
||||
QRectF _boundingRect;
|
||||
};
|
||||
|
||||
#endif // AXISLABELITEM_H
|
@ -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;
|
||||
|
@ -15,6 +15,8 @@ public:
|
||||
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
|
||||
QWidget *widget);
|
||||
|
||||
CoordinatesFormat format() const {return _format;}
|
||||
|
||||
void setCoordinates(const Coordinates &c);
|
||||
void setFormat(const CoordinatesFormat &format);
|
||||
void setDigitalZoom(qreal zoom);
|
||||
|
@ -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
|
@ -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);
|
||||
|
@ -11,7 +11,7 @@ GraphItem::GraphItem(const Graph &graph, GraphType type, int width,
|
||||
Q_ASSERT(_graph.isValid());
|
||||
|
||||
_units = Metric;
|
||||
_pen = QPen(color, width, style);
|
||||
_pen = QPen(color, width, style, Qt::FlatCap);
|
||||
_sx = 0; _sy = 0;
|
||||
_time = _graph.hasTime();
|
||||
setZValue(2.0);
|
||||
@ -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)
|
||||
|
@ -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:
|
||||
|
@ -1,6 +1,7 @@
|
||||
#ifndef GRAPHTAB_H
|
||||
#define GRAPHTAB_H
|
||||
|
||||
#include <QtGlobal>
|
||||
#include <QList>
|
||||
#include "graphview.h"
|
||||
#include "units.h"
|
||||
@ -15,7 +16,11 @@ class GraphTab : public GraphView
|
||||
|
||||
public:
|
||||
GraphTab(QWidget *parent = 0) : GraphView(parent)
|
||||
{setFrameShape(QFrame::NoFrame);}
|
||||
{
|
||||
#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;
|
||||
|
@ -6,9 +6,10 @@
|
||||
#include <QGraphicsSimpleTextItem>
|
||||
#include <QPalette>
|
||||
#include <QLocale>
|
||||
#include <QOpenGLWidget>
|
||||
#include "data/graph.h"
|
||||
#include "opengl.h"
|
||||
#include "axisitem.h"
|
||||
#include "axislabelitem.h"
|
||||
#include "slideritem.h"
|
||||
#include "sliderinfoitem.h"
|
||||
#include "infoitem.h"
|
||||
@ -22,6 +23,9 @@
|
||||
|
||||
#define MARGIN 10.0
|
||||
|
||||
#define IW(item) ((item)->boundingRect().width())
|
||||
#define IH(item) ((item)->boundingRect().height())
|
||||
|
||||
GraphView::GraphView(QWidget *parent)
|
||||
: QGraphicsView(parent)
|
||||
{
|
||||
@ -38,6 +42,10 @@ GraphView::GraphView(QWidget *parent)
|
||||
_xAxis->setZValue(1.0);
|
||||
_yAxis = new AxisItem(AxisItem::Y);
|
||||
_yAxis->setZValue(1.0);
|
||||
_xAxisLabel = new AxisLabelItem(AxisLabelItem::X);
|
||||
_xAxisLabel->setZValue(1.0);
|
||||
_yAxisLabel = new AxisLabelItem(AxisLabelItem::Y);
|
||||
_yAxisLabel->setZValue(1.0);
|
||||
_slider = new SliderItem();
|
||||
_slider->setZValue(4.0);
|
||||
_sliderInfo = new SliderInfoItem(_slider);
|
||||
@ -73,34 +81,24 @@ GraphView::~GraphView()
|
||||
{
|
||||
delete _xAxis;
|
||||
delete _yAxis;
|
||||
delete _xAxisLabel;
|
||||
delete _yAxisLabel;
|
||||
delete _slider;
|
||||
delete _info;
|
||||
delete _grid;
|
||||
delete _message;
|
||||
}
|
||||
|
||||
void GraphView::createXLabel()
|
||||
{
|
||||
_xAxis->setLabel(QString("%1 [%2]").arg(_xLabel,
|
||||
_xUnits.isEmpty() ? "-" : _xUnits));
|
||||
}
|
||||
|
||||
void GraphView::createYLabel()
|
||||
{
|
||||
_yAxis->setLabel(QString("%1 [%2]").arg(_yLabel,
|
||||
_yUnits.isEmpty() ? "-" : _yUnits));
|
||||
}
|
||||
|
||||
void GraphView::setYLabel(const QString &label)
|
||||
{
|
||||
_yLabel = label;
|
||||
createYLabel();
|
||||
_yAxisLabel->setLabel(_yLabel, _yUnits);
|
||||
}
|
||||
|
||||
void GraphView::setYUnits(const QString &units)
|
||||
{
|
||||
_yUnits = units;
|
||||
createYLabel();
|
||||
_yAxisLabel->setLabel(_yLabel, _yUnits);
|
||||
}
|
||||
|
||||
void GraphView::setXUnits()
|
||||
@ -144,7 +142,7 @@ void GraphView::setXUnits()
|
||||
}
|
||||
}
|
||||
|
||||
createXLabel();
|
||||
_xAxisLabel->setLabel(_xLabel, _xUnits);
|
||||
}
|
||||
|
||||
void GraphView::setUnits(Units units)
|
||||
@ -163,6 +161,7 @@ void GraphView::setGraphType(GraphType type)
|
||||
{
|
||||
_graphType = type;
|
||||
_bounds = QRectF();
|
||||
_zoom = 1.0;
|
||||
|
||||
for (int i = 0; i < _graphs.count(); i++) {
|
||||
GraphItem *gi = _graphs.at(i);
|
||||
@ -180,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();
|
||||
}
|
||||
|
||||
@ -195,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);
|
||||
@ -208,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);
|
||||
|
||||
@ -257,6 +257,8 @@ void GraphView::redraw(const QSizeF &size)
|
||||
if (_bounds.isNull()) {
|
||||
removeItem(_xAxis);
|
||||
removeItem(_yAxis);
|
||||
removeItem(_xAxisLabel);
|
||||
removeItem(_yAxisLabel);
|
||||
removeItem(_slider);
|
||||
removeItem(_info);
|
||||
removeItem(_grid);
|
||||
@ -268,6 +270,8 @@ void GraphView::redraw(const QSizeF &size)
|
||||
removeItem(_message);
|
||||
addItem(_xAxis);
|
||||
addItem(_yAxis);
|
||||
addItem(_xAxisLabel);
|
||||
addItem(_yAxisLabel);
|
||||
addItem(_slider);
|
||||
addItem(_info);
|
||||
addItem(_grid);
|
||||
@ -278,7 +282,9 @@ void GraphView::redraw(const QSizeF &size)
|
||||
if (ry.size() < _minYRange * _yScale)
|
||||
ry.resize(_minYRange * _yScale);
|
||||
|
||||
_xAxis->setZoom(_zoom);
|
||||
_xAxis->setRange(rx);
|
||||
_xAxis->setZoom(_zoom);
|
||||
_yAxis->setRange(ry);
|
||||
mx = _xAxis->margin();
|
||||
my = _yAxis->margin();
|
||||
@ -288,9 +294,10 @@ void GraphView::redraw(const QSizeF &size)
|
||||
r.adjust(0, -(_minYRange/2 - r.height()/2), 0,
|
||||
_minYRange/2 - r.height()/2);
|
||||
|
||||
sx = (size.width() - (my.width() + mx.width())) / r.width();
|
||||
sx = (size.width() - (my.width() + mx.width()) - IW(_yAxisLabel))
|
||||
/ r.width();
|
||||
sy = (size.height() - (mx.height() + my.height())
|
||||
- _info->boundingRect().height()) / r.height();
|
||||
- IH(_info) - IH(_xAxisLabel)) / r.height();
|
||||
sx *= _zoom;
|
||||
|
||||
for (int i = 0; i < _graphs.size(); i++)
|
||||
@ -316,10 +323,12 @@ void GraphView::redraw(const QSizeF &size)
|
||||
_slider->setArea(r);
|
||||
updateSliderPosition();
|
||||
|
||||
r |= _xAxis->sceneBoundingRect();
|
||||
r |= _yAxis->sceneBoundingRect();
|
||||
_info->setPos(r.topLeft() + QPointF(r.width()/2
|
||||
- _info->boundingRect().width()/2, -_info->boundingRect().height()));
|
||||
_info->setPos(QPointF(r.width()/2 - IW(_info)/2 - (IW(_yAxisLabel)
|
||||
+ IW(_yAxis))/2, r.top() - IH(_info) - my.height()));
|
||||
_xAxisLabel->setPos(QPointF(r.width()/2 - IW(_xAxisLabel)/2,
|
||||
r.bottom() + mx.height()));
|
||||
_yAxisLabel->setPos(QPointF(r.left() - my.width() - IW(_yAxisLabel),
|
||||
r.bottom() - (r.height()/2 + IH(_yAxisLabel)/2)));
|
||||
|
||||
_scene->setSceneRect(_scene->itemsBoundingRect());
|
||||
}
|
||||
@ -343,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);
|
||||
}
|
||||
@ -367,8 +384,10 @@ void GraphView::wheelEvent(QWheelEvent *e)
|
||||
void GraphView::paintEvent(QPaintEvent *e)
|
||||
{
|
||||
QRectF viewRect(mapToScene(rect()).boundingRect());
|
||||
_info->setPos(QPointF(viewRect.left() + (viewRect.width()
|
||||
- _info->boundingRect().width())/2.0, _info->pos().y()));
|
||||
_info->setPos(QPointF(viewRect.left() + (viewRect.width() - IW(_info))/2.0,
|
||||
_info->pos().y()));
|
||||
_xAxisLabel->setPos(QPointF(viewRect.left() + (viewRect.width()
|
||||
- IW(_xAxisLabel))/2.0, _xAxisLabel->pos().y()));
|
||||
|
||||
QGraphicsView::paintEvent(e);
|
||||
}
|
||||
@ -416,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);
|
||||
@ -429,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();
|
||||
}
|
||||
|
||||
@ -445,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);
|
||||
}
|
||||
@ -527,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);
|
||||
}
|
||||
|
@ -10,6 +10,7 @@
|
||||
|
||||
|
||||
class AxisItem;
|
||||
class AxisLabelItem;
|
||||
class SliderItem;
|
||||
class SliderInfoItem;
|
||||
class GraphItem;
|
||||
@ -42,6 +43,8 @@ public:
|
||||
void setSliderPosition(qreal pos);
|
||||
void setSliderColor(const QColor &color);
|
||||
|
||||
qreal sliderPosition() const {return _sliderPos;}
|
||||
|
||||
signals:
|
||||
void sliderPositionChanged(qreal);
|
||||
|
||||
@ -86,16 +89,16 @@ private slots:
|
||||
private:
|
||||
void redraw(const QSizeF &size);
|
||||
void setXUnits();
|
||||
void createXLabel();
|
||||
void createYLabel();
|
||||
void updateSliderPosition();
|
||||
void updateSliderInfo();
|
||||
void removeItem(QGraphicsItem *item);
|
||||
void addItem(QGraphicsItem *item);
|
||||
bool singleGraph() const;
|
||||
|
||||
GraphicsScene *_scene;
|
||||
|
||||
AxisItem *_xAxis, *_yAxis;
|
||||
AxisLabelItem *_xAxisLabel, *_yAxisLabel;
|
||||
SliderItem *_slider;
|
||||
SliderInfoItem *_sliderInfo;
|
||||
InfoItem *_info;
|
||||
|
@ -23,10 +23,8 @@ void GridItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
|
||||
painter->drawLine(0, -_yTicks.at(i), boundingRect().width(),
|
||||
-_yTicks.at(i));
|
||||
|
||||
/*
|
||||
painter->setPen(Qt::red);
|
||||
painter->drawRect(boundingRect());
|
||||
*/
|
||||
//painter->setPen(Qt::red);
|
||||
//painter->drawRect(boundingRect());
|
||||
}
|
||||
|
||||
void GridItem::setTicks(const QList<qreal> &x, const QList<qreal> &y)
|
||||
|
585
src/GUI/gui.cpp
@ -30,6 +30,7 @@ class Map;
|
||||
class POI;
|
||||
class QScreen;
|
||||
class MapAction;
|
||||
class Data;
|
||||
|
||||
class GUI : public QMainWindow
|
||||
{
|
||||
@ -38,7 +39,9 @@ class GUI : public QMainWindow
|
||||
public:
|
||||
GUI();
|
||||
|
||||
bool openFile(const QString &fileName);
|
||||
bool openFile(const QString &fileName, bool silent = false);
|
||||
bool loadMap(const QString &fileName, MapAction *&action,
|
||||
bool silent = false);
|
||||
void show();
|
||||
|
||||
private slots:
|
||||
@ -62,9 +65,11 @@ private slots:
|
||||
void showTracks(bool show);
|
||||
void showRoutes(bool show);
|
||||
void loadMap();
|
||||
void loadMapDir();
|
||||
void nextMap();
|
||||
void prevMap();
|
||||
void openOptions();
|
||||
void clearMapCache();
|
||||
|
||||
void mapChanged();
|
||||
void graphChanged(int);
|
||||
@ -86,11 +91,11 @@ private slots:
|
||||
void setDegreesMinutes() {setCoordinatesFormat(DegreesMinutes);}
|
||||
void setDMS() {setCoordinatesFormat(DMS);}
|
||||
|
||||
void sliderPositionChanged(qreal pos);
|
||||
void screenChanged(QScreen *screen);
|
||||
void logicalDotsPerInchChanged(qreal dpi);
|
||||
|
||||
void mapLoaded();
|
||||
void mapLoadedDir();
|
||||
void mapInitialized();
|
||||
|
||||
private:
|
||||
@ -117,8 +122,8 @@ private:
|
||||
void createBrowser();
|
||||
|
||||
bool openPOIFile(const QString &fileName);
|
||||
bool loadFile(const QString &fileName);
|
||||
bool loadMap(const QString &fileName);
|
||||
bool loadFile(const QString &fileName, bool silent = false);
|
||||
void loadData(const Data &data);
|
||||
void updateStatusBarInfo();
|
||||
void updateWindowTitle();
|
||||
void updateNavigationActions();
|
||||
@ -172,6 +177,7 @@ private:
|
||||
QAction *_showMapAction;
|
||||
QAction *_fullscreenAction;
|
||||
QAction *_loadMapAction;
|
||||
QAction *_loadMapDirAction;
|
||||
QAction *_clearMapCacheAction;
|
||||
QAction *_showGraphsAction;
|
||||
QAction *_showGraphGridAction;
|
||||
@ -200,6 +206,7 @@ private:
|
||||
QAction *_showAreasAction;
|
||||
QAction *_showRouteWaypointsAction;
|
||||
QAction *_showMarkersAction;
|
||||
QAction *_showMarkerInfoAction;
|
||||
QAction *_showTicksAction;
|
||||
QAction *_showCoordinatesAction;
|
||||
QAction *_openOptionsAction;
|
||||
@ -229,7 +236,7 @@ private:
|
||||
DateTimeRange _dateRange;
|
||||
QString _pathName;
|
||||
|
||||
qreal _sliderPos;
|
||||
GraphTab *_lastGraphTab;
|
||||
|
||||
QList<QByteArray> _windowStates;
|
||||
int _frameStyle;
|
||||
|
@ -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(),
|
||||
@ -53,10 +52,8 @@ void InfoItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
painter->setPen(Qt::red);
|
||||
painter->drawRect(boundingRect());
|
||||
*/
|
||||
//painter->setPen(Qt::red);
|
||||
//painter->drawRect(boundingRect());
|
||||
}
|
||||
|
||||
void InfoItem::insert(const QString &key, const QString &value)
|
||||
|
@ -8,6 +8,7 @@
|
||||
#define PREV_KEY Qt::Key_Backspace
|
||||
#define FIRST_KEY Qt::Key_Home
|
||||
#define LAST_KEY Qt::Key_End
|
||||
#define MODIFIER_KEY Qt::Key_Shift
|
||||
#define MODIFIER Qt::ShiftModifier
|
||||
#define ZOOM_IN Qt::Key_Plus
|
||||
#define ZOOM_OUT Qt::Key_Minus
|
||||
|
230
src/GUI/mapitem.cpp
Normal file
@ -0,0 +1,230 @@
|
||||
#include <cmath>
|
||||
#include <QCursor>
|
||||
#include <QPainter>
|
||||
#include <QGraphicsSceneMouseEvent>
|
||||
#include "map/map.h"
|
||||
#include "mapaction.h"
|
||||
#include "popup.h"
|
||||
#include "tooltip.h"
|
||||
#include "mapitem.h"
|
||||
|
||||
|
||||
static void growLeft(Map *map, const Coordinates &c, QRectF &rect)
|
||||
{
|
||||
QPointF p(map->ll2xy(c));
|
||||
|
||||
if (p.x() < rect.left())
|
||||
rect.setLeft(p.x());
|
||||
}
|
||||
|
||||
static void growRight(Map *map, const Coordinates &c, QRectF &rect)
|
||||
{
|
||||
|
||||
QPointF p(map->ll2xy(c));
|
||||
|
||||
if (p.x() > rect.right())
|
||||
rect.setRight(p.x());
|
||||
}
|
||||
|
||||
static void growTop(Map *map, const Coordinates &c, QRectF &rect)
|
||||
{
|
||||
QPointF p(map->ll2xy(c));
|
||||
|
||||
if (p.y() > rect.top())
|
||||
rect.setTop(p.y());
|
||||
}
|
||||
|
||||
static void growBottom(Map *map, const Coordinates &c, QRectF &rect)
|
||||
{
|
||||
QPointF p(map->ll2xy(c));
|
||||
|
||||
if (p.y() < rect.bottom())
|
||||
rect.setBottom(p.y());
|
||||
}
|
||||
|
||||
static QRectF bbox(const RectC &rect, Map *map, int samples = 100)
|
||||
{
|
||||
if (!rect.isValid())
|
||||
return QRectF();
|
||||
|
||||
double dx = rect.width() / samples;
|
||||
double dy = rect.height() / samples;
|
||||
|
||||
QPointF tl(map->ll2xy(rect.topLeft()));
|
||||
QPointF br(map->ll2xy(rect.bottomRight()));
|
||||
QRectF prect(tl, br);
|
||||
|
||||
for (int i = 0; i <= samples; i++) {
|
||||
double x = remainder(rect.left() + i * dx, 360.0);
|
||||
growTop(map, Coordinates(x, rect.bottom()), prect);
|
||||
growBottom(map, Coordinates(x, rect.top()), prect);
|
||||
}
|
||||
|
||||
for (int i = 0; i <= samples; i++) {
|
||||
double y = rect.bottom() + i * dy;
|
||||
growLeft(map, Coordinates(rect.left(), y), prect);
|
||||
growRight(map, Coordinates(rect.right(), y), prect);
|
||||
}
|
||||
|
||||
return prect;
|
||||
}
|
||||
|
||||
QString MapItem::info() const
|
||||
{
|
||||
ToolTip tt;
|
||||
|
||||
if (!_name.isEmpty())
|
||||
tt.insert(tr("Name"), _name);
|
||||
if (!_fileName.isEmpty())
|
||||
tt.insert(tr("File"), _fileName);
|
||||
|
||||
return tt.toString();
|
||||
}
|
||||
|
||||
MapItem::MapItem(MapAction *action, Map *map, GraphicsItem *parent)
|
||||
: PlaneItem(parent)
|
||||
{
|
||||
Map *src = action->data().value<Map*>();
|
||||
Q_ASSERT(map->isReady());
|
||||
|
||||
_name = src->name();
|
||||
_fileName = src->path();
|
||||
_bounds = src->llBounds();
|
||||
|
||||
connect(this, SIGNAL(triggered()), action, SLOT(trigger()));
|
||||
|
||||
_map = map;
|
||||
_digitalZoom = 0;
|
||||
|
||||
_width = 2;
|
||||
_opacity = 0.5;
|
||||
QBrush brush(Qt::SolidPattern);
|
||||
_pen = QPen(brush, _width);
|
||||
|
||||
updatePainterPath();
|
||||
|
||||
setCursor(Qt::ArrowCursor);
|
||||
setAcceptHoverEvents(true);
|
||||
}
|
||||
|
||||
void MapItem::updatePainterPath()
|
||||
{
|
||||
_painterPath = QPainterPath();
|
||||
|
||||
QRectF r(bbox(_bounds, _map));
|
||||
|
||||
if (r.left() > r.right()) {
|
||||
QRectF r1(bbox(RectC(_bounds.topLeft(),
|
||||
Coordinates(180, _bounds.bottomRight().lat())), _map));
|
||||
QRectF r2(bbox(RectC(Coordinates(-180, _bounds.topLeft().lat()),
|
||||
_bounds.bottomRight()), _map));
|
||||
|
||||
_painterPath.addRect(r1);
|
||||
_painterPath.addRect(r2);
|
||||
} else
|
||||
_painterPath.addRect(r);
|
||||
}
|
||||
|
||||
void MapItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
|
||||
QWidget *widget)
|
||||
{
|
||||
Q_UNUSED(option);
|
||||
Q_UNUSED(widget);
|
||||
|
||||
painter->setPen(_width ? _pen : QPen(Qt::NoPen));
|
||||
painter->drawPath(_painterPath);
|
||||
painter->fillPath(_painterPath, _brush);
|
||||
|
||||
//QPen p = QPen(QBrush(Qt::red), 0);
|
||||
//painter->setPen(p);
|
||||
//painter->drawRect(boundingRect());
|
||||
}
|
||||
|
||||
void MapItem::setMap(Map *map)
|
||||
{
|
||||
prepareGeometryChange();
|
||||
|
||||
_map = map;
|
||||
|
||||
updatePainterPath();
|
||||
}
|
||||
|
||||
void MapItem::setColor(const QColor &color)
|
||||
{
|
||||
if (_pen.color() == color)
|
||||
return;
|
||||
|
||||
QColor bc(color);
|
||||
bc.setAlphaF(_opacity * color.alphaF());
|
||||
|
||||
_pen.setColor(color);
|
||||
_brush = QBrush(bc);
|
||||
update();
|
||||
}
|
||||
|
||||
void MapItem::setOpacity(qreal opacity)
|
||||
{
|
||||
if (_opacity == opacity)
|
||||
return;
|
||||
|
||||
_opacity = opacity;
|
||||
QColor bc(_pen.color());
|
||||
bc.setAlphaF(_opacity * _pen.color().alphaF());
|
||||
_brush = QBrush(bc);
|
||||
|
||||
update();
|
||||
}
|
||||
|
||||
void MapItem::setWidth(qreal width)
|
||||
{
|
||||
if (_width == width)
|
||||
return;
|
||||
|
||||
prepareGeometryChange();
|
||||
|
||||
_width = width;
|
||||
_pen.setWidthF(_width * pow(2, -_digitalZoom));
|
||||
}
|
||||
|
||||
void MapItem::setStyle(Qt::PenStyle style)
|
||||
{
|
||||
if (_pen.style() == style)
|
||||
return;
|
||||
|
||||
_pen.setStyle(style);
|
||||
update();
|
||||
}
|
||||
|
||||
void MapItem::setDigitalZoom(int zoom)
|
||||
{
|
||||
if (_digitalZoom == zoom)
|
||||
return;
|
||||
|
||||
prepareGeometryChange();
|
||||
|
||||
_digitalZoom = zoom;
|
||||
_pen.setWidthF(_width * pow(2, -_digitalZoom));
|
||||
}
|
||||
|
||||
void MapItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event)
|
||||
{
|
||||
Q_UNUSED(event);
|
||||
|
||||
_pen.setWidthF((_width + 1) * pow(2, -_digitalZoom));
|
||||
update();
|
||||
}
|
||||
|
||||
void MapItem::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
|
||||
{
|
||||
Q_UNUSED(event);
|
||||
|
||||
_pen.setWidthF(_width * pow(2, -_digitalZoom));
|
||||
update();
|
||||
}
|
||||
|
||||
void MapItem::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
|
||||
{
|
||||
Q_UNUSED(event);
|
||||
|
||||
emit triggered();
|
||||
}
|
57
src/GUI/mapitem.h
Normal file
@ -0,0 +1,57 @@
|
||||
#ifndef MAPITEM_H
|
||||
#define MAPITEM_H
|
||||
|
||||
#include "planeitem.h"
|
||||
|
||||
class MapAction;
|
||||
|
||||
class MapItem : public QObject, public PlaneItem
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
MapItem(MapAction *action, Map *map, GraphicsItem *parent = 0);
|
||||
|
||||
QPainterPath shape() const {return _painterPath;}
|
||||
QRectF boundingRect() const {return _painterPath.boundingRect();}
|
||||
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
|
||||
QWidget *widget);
|
||||
|
||||
RectC bounds() const {return _bounds;}
|
||||
void setMap(Map *map);
|
||||
|
||||
void setColor(const QColor &color);
|
||||
void setOpacity(qreal opacity);
|
||||
void setWidth(qreal width);
|
||||
void setStyle(Qt::PenStyle style);
|
||||
void setDigitalZoom(int zoom);
|
||||
|
||||
QString info() const;
|
||||
|
||||
signals:
|
||||
void triggered();
|
||||
|
||||
protected:
|
||||
void hoverEnterEvent(QGraphicsSceneHoverEvent *event);
|
||||
void hoverLeaveEvent(QGraphicsSceneHoverEvent *event);
|
||||
void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event);
|
||||
|
||||
private:
|
||||
void updatePainterPath();
|
||||
|
||||
RectC _bounds;
|
||||
QString _name;
|
||||
QString _fileName;
|
||||
|
||||
Map *_map;
|
||||
int _digitalZoom;
|
||||
|
||||
qreal _width;
|
||||
QPen _pen;
|
||||
QBrush _brush;
|
||||
qreal _opacity;
|
||||
|
||||
QPainterPath _painterPath;
|
||||
};
|
||||
|
||||
#endif // MAPITEM_H
|
@ -3,19 +3,22 @@
|
||||
#include <QWheelEvent>
|
||||
#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"
|
||||
#include "areaitem.h"
|
||||
#include "scaleitem.h"
|
||||
#include "coordinatesitem.h"
|
||||
#include "mapitem.h"
|
||||
#include "keys.h"
|
||||
#include "graphicsscene.h"
|
||||
#include "mapaction.h"
|
||||
#include "mapview.h"
|
||||
|
||||
|
||||
@ -26,6 +29,20 @@
|
||||
#define COORDINATES_OFFSET SCALE_OFFSET
|
||||
|
||||
|
||||
template<typename T>
|
||||
static void updateZValues(T &items)
|
||||
{
|
||||
for (int i = 0; i < items.size(); i++) {
|
||||
const QGraphicsItem *ai = items.at(i);
|
||||
for (int j = 0; j < items.size(); j++) {
|
||||
QGraphicsItem *aj = items[j];
|
||||
if (aj->boundingRect().contains(ai->boundingRect()))
|
||||
aj->setZValue(qMin(ai->zValue() - 1, aj->zValue()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
MapView::MapView(Map *map, POI *poi, QWidget *parent)
|
||||
: QGraphicsView(parent)
|
||||
{
|
||||
@ -38,7 +55,7 @@ MapView::MapView(Map *map, POI *poi, QWidget *parent)
|
||||
setViewportUpdateMode(QGraphicsView::FullViewportUpdate);
|
||||
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||||
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||||
setRenderHint(QPainter::Antialiasing, true);
|
||||
setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);
|
||||
setResizeAnchor(QGraphicsView::AnchorViewCenter);
|
||||
setAcceptDrops(false);
|
||||
|
||||
@ -50,10 +67,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;
|
||||
@ -74,6 +93,7 @@ MapView::MapView(Map *map, POI *poi, QWidget *parent)
|
||||
_overlapPOIs = true;
|
||||
_showRouteWaypoints = true;
|
||||
_showMarkers = true;
|
||||
_showMarkerInfo = false;
|
||||
_showPathTicks = false;
|
||||
_trackWidth = 3;
|
||||
_routeWidth = 3;
|
||||
@ -84,10 +104,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;
|
||||
@ -124,6 +142,7 @@ PathItem *MapView::addTrack(const Track &track)
|
||||
ti->setDigitalZoom(_digitalZoom);
|
||||
ti->setMarkerColor(_markerColor);
|
||||
ti->showMarker(_showMarkers);
|
||||
ti->showMarkerInfo(_showMarkerInfo);
|
||||
ti->showTicks(_showPathTicks);
|
||||
_scene->addItem(ti);
|
||||
|
||||
@ -152,6 +171,7 @@ PathItem *MapView::addRoute(const Route &route)
|
||||
ri->setDigitalZoom(_digitalZoom);
|
||||
ri->setMarkerColor(_markerColor);
|
||||
ri->showMarker(_showMarkers);
|
||||
ri->showMarkerInfo(_showMarkerInfo);
|
||||
ri->showTicks(_showPathTicks);
|
||||
_scene->addItem(ri);
|
||||
|
||||
@ -169,18 +189,19 @@ void MapView::addArea(const Area &area)
|
||||
}
|
||||
|
||||
AreaItem *ai = new AreaItem(area, _map);
|
||||
_areas.append(ai);
|
||||
_ar |= ai->area().boundingRect();
|
||||
ai->setColor(_palette.nextColor());
|
||||
ai->setWidth(_areaWidth);
|
||||
ai->setStyle(_areaStyle);
|
||||
ai->setOpacity(_areaOpacity);
|
||||
ai->setDigitalZoom(_digitalZoom);
|
||||
ai->setVisible(_showAreas);
|
||||
|
||||
_scene->addItem(ai);
|
||||
_ar |= ai->bounds();
|
||||
_areas.append(ai);
|
||||
|
||||
if (_showAreas)
|
||||
addPOI(_poi->points(ai->area()));
|
||||
addPOI(_poi->points(ai->bounds()));
|
||||
}
|
||||
|
||||
void MapView::addWaypoints(const QVector<Waypoint> &waypoints)
|
||||
@ -204,6 +225,26 @@ void MapView::addWaypoints(const QVector<Waypoint> &waypoints)
|
||||
}
|
||||
}
|
||||
|
||||
MapItem *MapView::addMap(MapAction *map)
|
||||
{
|
||||
MapItem *mi = new MapItem(map, _map);
|
||||
mi->setColor(_palette.nextColor());
|
||||
mi->setWidth(_areaWidth);
|
||||
mi->setStyle(_areaStyle);
|
||||
mi->setOpacity(_areaOpacity);
|
||||
mi->setDigitalZoom(_digitalZoom);
|
||||
mi->setVisible(_showAreas);
|
||||
|
||||
_scene->addItem(mi);
|
||||
_ar |= mi->bounds();
|
||||
_areas.append(mi);
|
||||
|
||||
if (_showAreas)
|
||||
addPOI(_poi->points(mi->bounds()));
|
||||
|
||||
return mi;
|
||||
}
|
||||
|
||||
QList<PathItem *> MapView::loadData(const Data &data)
|
||||
{
|
||||
QList<PathItem *> paths;
|
||||
@ -226,18 +267,37 @@ QList<PathItem *> MapView::loadData(const Data &data)
|
||||
else
|
||||
updatePOIVisibility();
|
||||
|
||||
if (!data.areas().isEmpty())
|
||||
updateZValues(_areas);
|
||||
|
||||
centerOn(contentCenter());
|
||||
|
||||
return paths;
|
||||
}
|
||||
|
||||
void MapView::loadMaps(const QList<MapAction *> &maps)
|
||||
{
|
||||
int zoom = _map->zoom();
|
||||
|
||||
for (int i = 0; i < maps.size(); i++)
|
||||
addMap(maps.at(i));
|
||||
|
||||
if (fitMapZoom() != zoom)
|
||||
rescale();
|
||||
else
|
||||
updatePOIVisibility();
|
||||
|
||||
updateZValues(_areas);
|
||||
|
||||
centerOn(contentCenter());
|
||||
}
|
||||
|
||||
int MapView::fitMapZoom() const
|
||||
{
|
||||
RectC br = _tr | _rr | _wr | _ar;
|
||||
|
||||
return _map->zoomFit(viewport()->size() - QSize(2*MARGIN, 2*MARGIN),
|
||||
br.isNull() ? RectC(_map->xy2ll(_map->bounds().topLeft()),
|
||||
_map->xy2ll(_map->bounds().bottomRight())) : br);
|
||||
br.isNull() ? _map->llBounds() : br);
|
||||
}
|
||||
|
||||
QPointF MapView::contentCenter() const
|
||||
@ -314,10 +374,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);
|
||||
@ -356,6 +415,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();
|
||||
@ -372,7 +439,7 @@ void MapView::updatePOI()
|
||||
addPOI(_poi->points(_routes.at(i)->path()));
|
||||
if (_showAreas)
|
||||
for (int i = 0; i < _areas.size(); i++)
|
||||
addPOI(_poi->points(_areas.at(i)->area()));
|
||||
addPOI(_poi->points(_areas.at(i)->bounds()));
|
||||
if (_showWaypoints)
|
||||
for (int i = 0; i< _waypoints.size(); i++)
|
||||
addPOI(_poi->points(_waypoints.at(i)->waypoint()));
|
||||
@ -423,12 +490,8 @@ void MapView::setCoordinatesFormat(CoordinatesFormat 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
|
||||
}
|
||||
|
||||
void MapView::clearMapCache()
|
||||
@ -463,10 +526,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
|
||||
@ -492,27 +553,42 @@ 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;
|
||||
|
||||
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)
|
||||
@ -522,12 +598,35 @@ void MapView::keyPressEvent(QKeyEvent *event)
|
||||
else if (_digitalZoom && event->key() == Qt::Key_Escape) {
|
||||
digitalZoom(0);
|
||||
return;
|
||||
} else {
|
||||
} else {
|
||||
if (event->key() == MODIFIER_KEY) {
|
||||
_cursor = viewport()->cursor();
|
||||
viewport()->setCursor(Qt::CrossCursor);
|
||||
}
|
||||
|
||||
QGraphicsView::keyPressEvent(event);
|
||||
return;
|
||||
}
|
||||
|
||||
zoom(z, pos);
|
||||
zoom(z, pos, shift);
|
||||
}
|
||||
|
||||
void MapView::keyReleaseEvent(QKeyEvent *event)
|
||||
{
|
||||
if (event->key() == MODIFIER_KEY
|
||||
&& viewport()->cursor().shape() == Qt::CrossCursor)
|
||||
viewport()->setCursor(_cursor);
|
||||
|
||||
QGraphicsView::keyReleaseEvent(event);
|
||||
}
|
||||
|
||||
void MapView::mousePressEvent(QMouseEvent *event)
|
||||
{
|
||||
if (event->button() == Qt::LeftButton && event->modifiers() & MODIFIER)
|
||||
QApplication::clipboard()->setText(Format::coordinates(
|
||||
_map->xy2ll(mapToScene(event->pos())), _coordinates->format()));
|
||||
else
|
||||
QGraphicsView::mousePressEvent(event);
|
||||
}
|
||||
|
||||
void MapView::plot(QPainter *painter, const QRectF &target, qreal scale,
|
||||
@ -542,9 +641,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();
|
||||
@ -611,9 +708,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);
|
||||
}
|
||||
@ -713,6 +808,16 @@ void MapView::showMarkers(bool show)
|
||||
_routes.at(i)->showMarker(show);
|
||||
}
|
||||
|
||||
void MapView::showMarkerInfo(bool show)
|
||||
{
|
||||
_showMarkerInfo = show;
|
||||
|
||||
for (int i = 0; i < _tracks.size(); i++)
|
||||
_tracks.at(i)->showMarkerInfo(show);
|
||||
for (int i = 0; i < _routes.size(); i++)
|
||||
_routes.at(i)->showMarkerInfo(show);
|
||||
}
|
||||
|
||||
void MapView::showTicks(bool show)
|
||||
{
|
||||
_showPathTicks = show;
|
||||
@ -756,9 +861,9 @@ void MapView::showCoordinates(bool show)
|
||||
setMouseTracking(show);
|
||||
}
|
||||
|
||||
void MapView::setPOIOverlap(bool overlap)
|
||||
void MapView::showOverlappedPOIs(bool show)
|
||||
{
|
||||
_overlapPOIs = overlap;
|
||||
_overlapPOIs = show;
|
||||
|
||||
updatePOIVisibility();
|
||||
}
|
||||
@ -935,7 +1040,7 @@ void MapView::useOpenGL(bool use)
|
||||
_opengl = use;
|
||||
|
||||
if (use)
|
||||
setViewport(new OPENGL_WIDGET);
|
||||
setViewport(new QOpenGLWidget);
|
||||
else
|
||||
setViewport(new QWidget);
|
||||
}
|
||||
@ -955,6 +1060,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();
|
||||
@ -962,7 +1075,6 @@ void MapView::reloadMap()
|
||||
|
||||
void MapView::setDevicePixelRatio(qreal deviceRatio, qreal mapRatio)
|
||||
{
|
||||
#ifdef ENABLE_HIDPI
|
||||
if (_deviceRatio == deviceRatio && _mapRatio == mapRatio)
|
||||
return;
|
||||
|
||||
@ -995,26 +1107,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));
|
||||
}
|
||||
|
@ -29,10 +29,12 @@ class ScaleItem;
|
||||
class CoordinatesItem;
|
||||
class PathItem;
|
||||
class GraphItem;
|
||||
class AreaItem;
|
||||
class PlaneItem;
|
||||
class MapItem;
|
||||
class Area;
|
||||
class GraphicsScene;
|
||||
class QTimeZone;
|
||||
class MapAction;
|
||||
|
||||
class MapView : public QGraphicsView
|
||||
{
|
||||
@ -49,10 +51,12 @@ public:
|
||||
MapView(Map *map, POI *poi, QWidget *parent = 0);
|
||||
|
||||
QList<PathItem *> loadData(const Data &data);
|
||||
void loadMaps(const QList<MapAction*> &maps);
|
||||
|
||||
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);
|
||||
@ -76,28 +80,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(bool show);
|
||||
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();
|
||||
@ -108,6 +114,7 @@ private:
|
||||
|
||||
PathItem *addTrack(const Track &track);
|
||||
PathItem *addRoute(const Route &route);
|
||||
MapItem *addMap(MapAction *map);
|
||||
void addArea(const Area &area);
|
||||
void addWaypoints(const QVector<Waypoint> &waypoints);
|
||||
void addPOI(const QList<Waypoint> &waypoints);
|
||||
@ -118,18 +125,20 @@ 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();}
|
||||
|
||||
void mouseMoveEvent(QMouseEvent *event);
|
||||
void mousePressEvent(QMouseEvent *event);
|
||||
void mouseDoubleClickEvent(QMouseEvent *event);
|
||||
void wheelEvent(QWheelEvent *event);
|
||||
void keyPressEvent(QKeyEvent *event);
|
||||
void keyReleaseEvent(QKeyEvent *event);
|
||||
void drawBackground(QPainter *painter, const QRectF &rect);
|
||||
void paintEvent(QPaintEvent *event);
|
||||
void scrollContentsBy(int dx, int dy);
|
||||
void mouseMoveEvent(QMouseEvent *event);
|
||||
void leaveEvent(QEvent *event);
|
||||
|
||||
GraphicsScene *_scene;
|
||||
@ -138,7 +147,7 @@ private:
|
||||
QList<TrackItem*> _tracks;
|
||||
QList<RouteItem*> _routes;
|
||||
QList<WaypointItem*> _waypoints;
|
||||
QList<AreaItem*> _areas;
|
||||
QList<PlaneItem*> _areas;
|
||||
POIHash _pois;
|
||||
|
||||
RectC _tr, _rr, _wr, _ar;
|
||||
@ -149,11 +158,11 @@ private:
|
||||
|
||||
Palette _palette;
|
||||
qreal _mapOpacity;
|
||||
Projection _projection;
|
||||
Projection _outputProjection, _inputProjection;
|
||||
|
||||
bool _showMap, _showTracks, _showRoutes, _showAreas, _showWaypoints,
|
||||
_showWaypointLabels, _showPOI, _showPOILabels, _showRouteWaypoints,
|
||||
_showMarkers, _showPathTicks;
|
||||
_showMarkers, _showMarkerInfo, _showPathTicks;
|
||||
bool _overlapPOIs;
|
||||
int _trackWidth, _routeWidth, _areaWidth;
|
||||
Qt::PenStyle _trackStyle, _routeStyle, _areaStyle;
|
||||
@ -163,11 +172,10 @@ private:
|
||||
|
||||
int _digitalZoom;
|
||||
bool _plot;
|
||||
QCursor _cursor;
|
||||
|
||||
#ifdef ENABLE_HIDPI
|
||||
qreal _deviceRatio;
|
||||
qreal _mapRatio;
|
||||
#endif // ENABLE_HIDPI
|
||||
bool _opengl;
|
||||
};
|
||||
|
||||
|
@ -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
|
@ -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());
|
||||
}
|
||||
|
@ -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);
|
||||
|
||||
|
73
src/GUI/markerinfoitem.cpp
Normal file
@ -0,0 +1,73 @@
|
||||
#include <QPainter>
|
||||
#include <QDateTime>
|
||||
#include <QLocale>
|
||||
#include "font.h"
|
||||
#include "markerinfoitem.h"
|
||||
|
||||
|
||||
#define OFFSET 7
|
||||
|
||||
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;
|
||||
_date = l.toString(date.date(), QLocale::ShortFormat);
|
||||
_time = l.toString(date.time(), QLocale::ShortFormat);
|
||||
|
||||
updateBoundingRect();
|
||||
}
|
||||
|
||||
void MarkerInfoItem::updateBoundingRect()
|
||||
{
|
||||
QFontMetrics fm(_font);
|
||||
|
||||
qreal width = qMax(fm.boundingRect(_date).width(),
|
||||
fm.boundingRect(_time).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 rd(OFFSET, -fm.height() + fm.descent(),
|
||||
fm.boundingRect(_date).width(), fm.height() - fm.descent());
|
||||
QRectF rt(OFFSET, 0, fm.boundingRect(_time).width(), fm.height()
|
||||
- fm.descent());
|
||||
|
||||
painter->setPen(Qt::NoPen);
|
||||
QColor bc(painter->background().color());
|
||||
bc.setAlpha(196);
|
||||
painter->setBrush(QBrush(bc));
|
||||
painter->drawRect(rt);
|
||||
painter->drawRect(rd);
|
||||
painter->setBrush(Qt::NoBrush);
|
||||
|
||||
painter->setFont(_font);
|
||||
painter->setPen(_color);
|
||||
|
||||
painter->drawText(OFFSET, -fm.descent()/2, _date);
|
||||
painter->drawText(OFFSET, fm.height() - fm.descent()*1.5, _time);
|
||||
|
||||
//painter->drawRect(boundingRect());
|
||||
}
|
||||
|
||||
void MarkerInfoItem::setColor(const QColor &color)
|
||||
{
|
||||
_color = color;
|
||||
update();
|
||||
}
|
27
src/GUI/markerinfoitem.h
Normal file
@ -0,0 +1,27 @@
|
||||
#ifndef MARKERINFOITEM_H
|
||||
#define MARKERINFOITEM_H
|
||||
|
||||
#include <QGraphicsItem>
|
||||
|
||||
class MarkerInfoItem : public QGraphicsItem
|
||||
{
|
||||
public:
|
||||
MarkerInfoItem(QGraphicsItem *parent = 0);
|
||||
|
||||
QRectF boundingRect() const {return _boundingRect;}
|
||||
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
|
||||
QWidget *widget);
|
||||
|
||||
void setDate(const QDateTime &date);
|
||||
void setColor(const QColor &color);
|
||||
|
||||
private:
|
||||
void updateBoundingRect();
|
||||
|
||||
QString _date, _time;
|
||||
QRectF _boundingRect;
|
||||
QColor _color;
|
||||
QFont _font;
|
||||
};
|
||||
|
||||
#endif // MARKERINFOITEM_H
|