mirror of
https://github.com/tumic0/GPXSee.git
synced 2025-07-01 05:19:15 +02:00
Compare commits
55 Commits
11.2
...
a8299050c5
Author | SHA1 | Date | |
---|---|---|---|
a8299050c5 | |||
e8e1e98775 | |||
6768647070 | |||
de63009edd | |||
125f99e8f4 | |||
092929a967 | |||
fafe6c4b03 | |||
b156e25023 | |||
e15deccfca | |||
9b24bccfed | |||
589c602d21 | |||
b7df3cbe0e | |||
f08f5893a3 | |||
1d5f7db12f | |||
532a1eb69f | |||
1efb4e494d | |||
4653f771a6 | |||
22e5ffaa0c | |||
9a4514a464 | |||
7d47f243ea | |||
18c2613302 | |||
e2bdc1aae6 | |||
a245043573 | |||
42dbc91143 | |||
23a7c6d4eb | |||
b6b4319f89 | |||
8673c00a23 | |||
90280fb018 | |||
285022c17a | |||
e76bb40d10 | |||
bbf5c09377 | |||
e1c7ad18e6 | |||
99792f2984 | |||
6d2e6f64d3 | |||
183cb4825c | |||
7b8fff7440 | |||
a01ff33768 | |||
c3117bb3ac | |||
20fe804293 | |||
525f70f15e | |||
209df67380 | |||
6e40d8cbc7 | |||
0ef28cda0f | |||
1b83f88b27 | |||
a40ed633ae | |||
399299d192 | |||
ec68557de5 | |||
c68fc72387 | |||
3c9da66a51 | |||
22e56e06fd | |||
2e9d173f53 | |||
84b7da13f0 | |||
ed74d0c069 | |||
218eb3be56 | |||
5795395107 |
@ -1,4 +1,4 @@
|
||||
version: 11.2.{build}
|
||||
version: 11.5.{build}
|
||||
|
||||
configuration:
|
||||
- Release
|
||||
@ -11,7 +11,7 @@ environment:
|
||||
OPENSSLDIR: C:\OpenSSL-v111-Win64\bin
|
||||
matrix:
|
||||
- QTDIR: C:\Qt\5.15\msvc2019_64
|
||||
- QTDIR: C:\Qt\6.2\msvc2019_64
|
||||
- QTDIR: C:\Qt\6.3\msvc2019_64
|
||||
NSISDEF: /DQT6
|
||||
|
||||
install:
|
||||
|
13
.github/workflows/android.yml
vendored
13
.github/workflows/android.yml
vendored
@ -11,10 +11,11 @@ jobs:
|
||||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
- name: set up JDK 11
|
||||
uses: actions/setup-java@v1
|
||||
uses: actions/setup-java@v3
|
||||
with:
|
||||
distribution: 'zulu'
|
||||
java-version: '11'
|
||||
- name: Setup Android SDK
|
||||
uses: android-actions/setup-android@v2
|
||||
@ -22,16 +23,18 @@ jobs:
|
||||
run: ${ANDROID_HOME}/tools/bin/sdkmanager --update
|
||||
- name: Install android platform, platform-tools, build-tools and ndk
|
||||
run: ${ANDROID_HOME}/tools/bin/sdkmanager --install "cmdline-tools;latest" "platform-tools" "platforms;android-31" "build-tools;31.0.0" "ndk;22.1.7171670"
|
||||
- name: Setup NDK path
|
||||
run: echo "ANDROID_NDK_ROOT=${ANDROID_HOME}/ndk/22.1.7171670/" >> $GITHUB_ENV
|
||||
- name: Install Qt (Desktop)
|
||||
uses: jurplel/install-qt-action@v2
|
||||
with:
|
||||
aqtversion: '==2.1.0'
|
||||
version: '6.3.0'
|
||||
version: '6.3.1'
|
||||
- name: Install Qt (Android)
|
||||
uses: jurplel/install-qt-action@v2
|
||||
with:
|
||||
aqtversion: '==2.1.0'
|
||||
version: '6.3.0'
|
||||
version: '6.3.1'
|
||||
target: 'android'
|
||||
arch: 'android_armv7'
|
||||
modules: qtpositioning qt5compat
|
||||
@ -40,7 +43,7 @@ jobs:
|
||||
- name: Create localization
|
||||
run: lrelease gpxsee.pro
|
||||
- name: Configure build
|
||||
run: qmake gpxsee.pro OPENSSL_PATH=android_openssl
|
||||
run: qmake gpxsee.pro OPENSSL_PATH=android_openssl
|
||||
- name: Build project
|
||||
run: make -j2 apk
|
||||
- name: Upload artifacts
|
||||
|
2
.github/workflows/osx.yml
vendored
2
.github/workflows/osx.yml
vendored
@ -8,7 +8,7 @@ on:
|
||||
jobs:
|
||||
qt5:
|
||||
name: GPXSee Qt5 build
|
||||
runs-on: macos-10.15
|
||||
runs-on: macos-latest
|
||||
steps:
|
||||
- name: Set environment variables
|
||||
run: echo "PATH=/usr/local/opt/qt@5/bin:$PATH" >> $GITHUB_ENV
|
||||
|
@ -11,7 +11,8 @@ GPS log file formats.
|
||||
* Offline maps (MBTiles, OziExplorer maps, TrekBuddy maps/atlases,
|
||||
Garmin IMG/GMAP & JNX maps, TwoNav RMaps, GeoTIFF images, BSB charts, KMZ maps,
|
||||
AlpineQuest maps, Locus/OsmAnd/RMaps SQLite maps, Mapsforge vector maps,
|
||||
QCT maps, ESRI World-File georeferenced images).
|
||||
QCT maps, GEMF maps, Osmdroid SQLite maps, Orux maps,
|
||||
ESRI World-File georeferenced images).
|
||||
* Elevation, speed, heart rate, cadence, power, temperature and gear ratio/shifts
|
||||
graphs.
|
||||
* Support for DEM files (SRTM HGT).
|
||||
|
11
gpxsee.pro
11
gpxsee.pro
@ -3,7 +3,7 @@ unix:!macx:!android {
|
||||
} else {
|
||||
TARGET = GPXSee
|
||||
}
|
||||
VERSION = 11.2
|
||||
VERSION = 11.5
|
||||
|
||||
QT += core \
|
||||
gui \
|
||||
@ -114,9 +114,11 @@ HEADERS += src/common/config.h \
|
||||
src/GUI/pngexportdialog.h \
|
||||
src/GUI/timezoneinfo.h \
|
||||
src/GUI/passwordedit.h \
|
||||
src/data/style.h \
|
||||
src/data/twonavparser.h \
|
||||
src/map/IMG/section.h \
|
||||
src/map/gemfmap.h \
|
||||
src/map/oruxmap.h \
|
||||
src/map/osmdroidmap.h \
|
||||
src/map/proj/polyconic.h \
|
||||
src/map/proj/webmercator.h \
|
||||
@ -321,6 +323,7 @@ SOURCES += src/main.cpp \
|
||||
src/GUI/passwordedit.cpp \
|
||||
src/data/twonavparser.cpp \
|
||||
src/map/gemfmap.cpp \
|
||||
src/map/oruxmap.cpp \
|
||||
src/map/osmdroidmap.cpp \
|
||||
src/map/proj/polyconic.cpp \
|
||||
src/map/proj/webmercator.cpp \
|
||||
@ -455,7 +458,8 @@ TRANSLATIONS = lang/gpxsee_en.ts \
|
||||
lang/gpxsee_hu.ts \
|
||||
lang/gpxsee_it.ts \
|
||||
lang/gpxsee_eo.ts \
|
||||
lang/gpxsee_zh.ts
|
||||
lang/gpxsee_zh.ts \
|
||||
lang/gpxsee_ca.ts
|
||||
|
||||
macx {
|
||||
ICON = icons/app/gpxsee.icns
|
||||
@ -506,7 +510,8 @@ win32 {
|
||||
icons/formats/omd.ico \
|
||||
icons/formats/ghp.ico \
|
||||
icons/formats/qct.ico \
|
||||
icons/formats/trk.ico
|
||||
icons/formats/trk.ico \
|
||||
icons/formats/gemf.ico
|
||||
DEFINES += _USE_MATH_DEFINES \
|
||||
NOGDI
|
||||
}
|
||||
|
2523
lang/gpxsee_ca.ts
Normal file
2523
lang/gpxsee_ca.ts
Normal file
File diff suppressed because it is too large
Load Diff
@ -287,22 +287,23 @@
|
||||
<context>
|
||||
<name>FileSelectWidget</name>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="41"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="44"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="49"/>
|
||||
<source>Select file</source>
|
||||
<translation>Vybrat soubor</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="51"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="59"/>
|
||||
<source>No output file selected.</source>
|
||||
<translation>Nebyl zvolen žádný výstupní soubor.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="61"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="69"/>
|
||||
<source>%1 is a directory.</source>
|
||||
<translation>%1 je adresář.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="65"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="73"/>
|
||||
<source>%1 is not writable.</source>
|
||||
<translation>%1 nelze zapsat.</translation>
|
||||
</message>
|
||||
@ -1204,97 +1205,102 @@
|
||||
<context>
|
||||
<name>MapList</name>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="152"/>
|
||||
<location filename="../src/map/maplist.cpp" line="154"/>
|
||||
<source>Supported files</source>
|
||||
<translation>Podporované soubory</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="163"/>
|
||||
<location filename="../src/map/maplist.cpp" line="165"/>
|
||||
<source>MBTiles maps</source>
|
||||
<translation>MBTiles mapy</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="157"/>
|
||||
<location filename="../src/map/maplist.cpp" line="160"/>
|
||||
<source>Garmin JNX maps</source>
|
||||
<translation>Garmin JNX mapy</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="154"/>
|
||||
<location filename="../src/map/maplist.cpp" line="156"/>
|
||||
<source>AlpineQuest maps</source>
|
||||
<translation>AlpineQuest mapy</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="155"/>
|
||||
<location filename="../src/map/maplist.cpp" line="158"/>
|
||||
<source>Garmin IMG maps</source>
|
||||
<translation>Garmin IMG mapy</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="158"/>
|
||||
<location filename="../src/map/maplist.cpp" line="161"/>
|
||||
<source>BSB nautical charts</source>
|
||||
<translation>BSB námořní mapy</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="159"/>
|
||||
<location filename="../src/map/maplist.cpp" line="157"/>
|
||||
<source>GEMF maps</source>
|
||||
<translation>GEMF mapy</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="160"/>
|
||||
<location filename="../src/map/maplist.cpp" line="162"/>
|
||||
<source>KMZ maps</source>
|
||||
<translation>KMZ mapy</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="161"/>
|
||||
<location filename="../src/map/maplist.cpp" line="163"/>
|
||||
<source>Mapsforge maps</source>
|
||||
<translation>Mapsforge mapy</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="162"/>
|
||||
<location filename="../src/map/maplist.cpp" line="164"/>
|
||||
<source>OziExplorer maps</source>
|
||||
<translation>OziExplorer mapy</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="164"/>
|
||||
<location filename="../src/map/maplist.cpp" line="166"/>
|
||||
<source>Orux maps</source>
|
||||
<translation>Orux mapy</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="167"/>
|
||||
<source>QuickChart maps</source>
|
||||
<translation>QuickChart mapy</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="166"/>
|
||||
<location filename="../src/map/maplist.cpp" line="169"/>
|
||||
<source>Osmdroid SQLite maps</source>
|
||||
<translation>Osmdroid SQLite mapy</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="169"/>
|
||||
<location filename="../src/map/maplist.cpp" line="172"/>
|
||||
<source>TrekBuddy maps/atlases</source>
|
||||
<translation>TrekBuddy mapy/atlasy</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="170"/>
|
||||
<location filename="../src/map/maplist.cpp" line="173"/>
|
||||
<source>GeoTIFF images</source>
|
||||
<translation>GeoTIFF obrázky</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="174"/>
|
||||
<location filename="../src/map/maplist.cpp" line="177"/>
|
||||
<source>All files</source>
|
||||
<translation>Všechny soubory</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="165"/>
|
||||
<location filename="../src/map/maplist.cpp" line="168"/>
|
||||
<source>TwoNav maps</source>
|
||||
<translation>TwoNav mapy</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="167"/>
|
||||
<location filename="../src/map/maplist.cpp" line="170"/>
|
||||
<source>Locus/OsmAnd/RMaps SQLite maps</source>
|
||||
<translation>Locus/OsmAnd/RMaps SQLite mapy</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="171"/>
|
||||
<location filename="../src/map/maplist.cpp" line="174"/>
|
||||
<source>World-file georeferenced images</source>
|
||||
<translation>Georeferencované obrázky - world-file</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="173"/>
|
||||
<location filename="../src/map/maplist.cpp" line="176"/>
|
||||
<source>Online map sources</source>
|
||||
<translation>Online mapové zdroje</translation>
|
||||
</message>
|
||||
|
@ -287,22 +287,23 @@
|
||||
<context>
|
||||
<name>FileSelectWidget</name>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="41"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="44"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="49"/>
|
||||
<source>Select file</source>
|
||||
<translation>Vælg fil</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="51"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="59"/>
|
||||
<source>No output file selected.</source>
|
||||
<translation>Ingen uddatafil valgt.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="61"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="69"/>
|
||||
<source>%1 is a directory.</source>
|
||||
<translation>%1 er en mappe.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="65"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="73"/>
|
||||
<source>%1 is not writable.</source>
|
||||
<translation>%1 er skrivebeskyttet.</translation>
|
||||
</message>
|
||||
@ -1203,97 +1204,102 @@
|
||||
<context>
|
||||
<name>MapList</name>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="152"/>
|
||||
<location filename="../src/map/maplist.cpp" line="154"/>
|
||||
<source>Supported files</source>
|
||||
<translation>Understøttede filer</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="163"/>
|
||||
<location filename="../src/map/maplist.cpp" line="165"/>
|
||||
<source>MBTiles maps</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="157"/>
|
||||
<location filename="../src/map/maplist.cpp" line="160"/>
|
||||
<source>Garmin JNX maps</source>
|
||||
<translation>Garmin JNX-kort</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="154"/>
|
||||
<location filename="../src/map/maplist.cpp" line="156"/>
|
||||
<source>AlpineQuest maps</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="155"/>
|
||||
<location filename="../src/map/maplist.cpp" line="158"/>
|
||||
<source>Garmin IMG maps</source>
|
||||
<translation>Garmin IMG-kort</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="158"/>
|
||||
<location filename="../src/map/maplist.cpp" line="161"/>
|
||||
<source>BSB nautical charts</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="159"/>
|
||||
<location filename="../src/map/maplist.cpp" line="157"/>
|
||||
<source>GEMF maps</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="160"/>
|
||||
<location filename="../src/map/maplist.cpp" line="162"/>
|
||||
<source>KMZ maps</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="161"/>
|
||||
<location filename="../src/map/maplist.cpp" line="163"/>
|
||||
<source>Mapsforge maps</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="162"/>
|
||||
<location filename="../src/map/maplist.cpp" line="164"/>
|
||||
<source>OziExplorer maps</source>
|
||||
<translation>OziExplorer-kort</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="164"/>
|
||||
<source>QuickChart maps</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="166"/>
|
||||
<source>Osmdroid SQLite maps</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="169"/>
|
||||
<source>TrekBuddy maps/atlases</source>
|
||||
<translation>TrekBuddy kort/atlas</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="170"/>
|
||||
<source>GeoTIFF images</source>
|
||||
<translation>GeoTIFF billeder</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="174"/>
|
||||
<source>All files</source>
|
||||
<translation type="unfinished">Alle filer</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="165"/>
|
||||
<source>TwoNav maps</source>
|
||||
<source>Orux maps</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="167"/>
|
||||
<source>QuickChart maps</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="169"/>
|
||||
<source>Osmdroid SQLite maps</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="172"/>
|
||||
<source>TrekBuddy maps/atlases</source>
|
||||
<translation>TrekBuddy kort/atlas</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="173"/>
|
||||
<source>GeoTIFF images</source>
|
||||
<translation>GeoTIFF billeder</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="177"/>
|
||||
<source>All files</source>
|
||||
<translation type="unfinished">Alle filer</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="168"/>
|
||||
<source>TwoNav maps</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="170"/>
|
||||
<source>Locus/OsmAnd/RMaps SQLite maps</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="171"/>
|
||||
<location filename="../src/map/maplist.cpp" line="174"/>
|
||||
<source>World-file georeferenced images</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="173"/>
|
||||
<location filename="../src/map/maplist.cpp" line="176"/>
|
||||
<source>Online map sources</source>
|
||||
<translation>Online-kort kilder</translation>
|
||||
</message>
|
||||
|
@ -287,22 +287,23 @@
|
||||
<context>
|
||||
<name>FileSelectWidget</name>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="41"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="44"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="49"/>
|
||||
<source>Select file</source>
|
||||
<translation>Datei auswählen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="51"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="59"/>
|
||||
<source>No output file selected.</source>
|
||||
<translation>Keine Ausgabedatei ausgewählt.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="61"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="69"/>
|
||||
<source>%1 is a directory.</source>
|
||||
<translation>%1 ist ein Verzeichnis.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="65"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="73"/>
|
||||
<source>%1 is not writable.</source>
|
||||
<translation>%1 ist nicht beschreibbar.</translation>
|
||||
</message>
|
||||
@ -1203,97 +1204,102 @@
|
||||
<context>
|
||||
<name>MapList</name>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="152"/>
|
||||
<location filename="../src/map/maplist.cpp" line="154"/>
|
||||
<source>Supported files</source>
|
||||
<translation>Unterstützte Dateien</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="163"/>
|
||||
<location filename="../src/map/maplist.cpp" line="165"/>
|
||||
<source>MBTiles maps</source>
|
||||
<translation>MBTiles-Karten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="157"/>
|
||||
<location filename="../src/map/maplist.cpp" line="160"/>
|
||||
<source>Garmin JNX maps</source>
|
||||
<translation>Garmin JNX-Karten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="154"/>
|
||||
<location filename="../src/map/maplist.cpp" line="156"/>
|
||||
<source>AlpineQuest maps</source>
|
||||
<translation>AlpineQuest-Karten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="155"/>
|
||||
<location filename="../src/map/maplist.cpp" line="158"/>
|
||||
<source>Garmin IMG maps</source>
|
||||
<translation>Garmin IMG-Karten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="158"/>
|
||||
<location filename="../src/map/maplist.cpp" line="161"/>
|
||||
<source>BSB nautical charts</source>
|
||||
<translation>BSB-Seekarten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="159"/>
|
||||
<location filename="../src/map/maplist.cpp" line="157"/>
|
||||
<source>GEMF maps</source>
|
||||
<translation>GEMF-Karten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="160"/>
|
||||
<location filename="../src/map/maplist.cpp" line="162"/>
|
||||
<source>KMZ maps</source>
|
||||
<translation>KMZ-Karten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="161"/>
|
||||
<location filename="../src/map/maplist.cpp" line="163"/>
|
||||
<source>Mapsforge maps</source>
|
||||
<translation>Mapsforge-Karten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="162"/>
|
||||
<location filename="../src/map/maplist.cpp" line="164"/>
|
||||
<source>OziExplorer maps</source>
|
||||
<translation>OziExplorer-Karten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="164"/>
|
||||
<location filename="../src/map/maplist.cpp" line="166"/>
|
||||
<source>Orux maps</source>
|
||||
<translation>Orux-Karten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="167"/>
|
||||
<source>QuickChart maps</source>
|
||||
<translation>QuickChart-Karten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="166"/>
|
||||
<location filename="../src/map/maplist.cpp" line="169"/>
|
||||
<source>Osmdroid SQLite maps</source>
|
||||
<translation>Osmdroid SQLite-Karten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="169"/>
|
||||
<location filename="../src/map/maplist.cpp" line="172"/>
|
||||
<source>TrekBuddy maps/atlases</source>
|
||||
<translation>TrekBuddy-Karten/Atlanten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="170"/>
|
||||
<location filename="../src/map/maplist.cpp" line="173"/>
|
||||
<source>GeoTIFF images</source>
|
||||
<translation>GeoTIFF-Bilder</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="174"/>
|
||||
<location filename="../src/map/maplist.cpp" line="177"/>
|
||||
<source>All files</source>
|
||||
<translation>Alle Dateien</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="165"/>
|
||||
<location filename="../src/map/maplist.cpp" line="168"/>
|
||||
<source>TwoNav maps</source>
|
||||
<translation>TwoNav-Karten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="167"/>
|
||||
<location filename="../src/map/maplist.cpp" line="170"/>
|
||||
<source>Locus/OsmAnd/RMaps SQLite maps</source>
|
||||
<translation>Locus/OsmAnd/RMaps SQLite-Karten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="171"/>
|
||||
<location filename="../src/map/maplist.cpp" line="174"/>
|
||||
<source>World-file georeferenced images</source>
|
||||
<translation>World-File georeferenzierte Bilder</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="173"/>
|
||||
<location filename="../src/map/maplist.cpp" line="176"/>
|
||||
<source>Online map sources</source>
|
||||
<translation>Online-Kartenquellen</translation>
|
||||
</message>
|
||||
|
@ -287,22 +287,23 @@
|
||||
<context>
|
||||
<name>FileSelectWidget</name>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="41"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="44"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="49"/>
|
||||
<source>Select file</source>
|
||||
<translation>Elekti dosieron</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="51"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="59"/>
|
||||
<source>No output file selected.</source>
|
||||
<translation>Neniu eligdosiero estas elektita.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="61"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="69"/>
|
||||
<source>%1 is a directory.</source>
|
||||
<translation>%1 estas dosierujo.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="65"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="73"/>
|
||||
<source>%1 is not writable.</source>
|
||||
<translation>%1 ne estas skribebla.</translation>
|
||||
</message>
|
||||
@ -1203,97 +1204,102 @@
|
||||
<context>
|
||||
<name>MapList</name>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="152"/>
|
||||
<location filename="../src/map/maplist.cpp" line="154"/>
|
||||
<source>Supported files</source>
|
||||
<translation>Subtenataj dosieroj</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="154"/>
|
||||
<location filename="../src/map/maplist.cpp" line="156"/>
|
||||
<source>AlpineQuest maps</source>
|
||||
<translation>AlpineQuest-mapoj</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="155"/>
|
||||
<location filename="../src/map/maplist.cpp" line="158"/>
|
||||
<source>Garmin IMG maps</source>
|
||||
<translation>Garmin IMG -mapoj</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="157"/>
|
||||
<location filename="../src/map/maplist.cpp" line="160"/>
|
||||
<source>Garmin JNX maps</source>
|
||||
<translation>Garmin JNX -mapoj</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="158"/>
|
||||
<location filename="../src/map/maplist.cpp" line="161"/>
|
||||
<source>BSB nautical charts</source>
|
||||
<translation>BSB -maraj mapoj</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="159"/>
|
||||
<location filename="../src/map/maplist.cpp" line="157"/>
|
||||
<source>GEMF maps</source>
|
||||
<translation>GEMF-mapoj</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="160"/>
|
||||
<location filename="../src/map/maplist.cpp" line="162"/>
|
||||
<source>KMZ maps</source>
|
||||
<translation>KMZ-mapoj</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="161"/>
|
||||
<location filename="../src/map/maplist.cpp" line="163"/>
|
||||
<source>Mapsforge maps</source>
|
||||
<translation>Mapsforge-mapoj</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="162"/>
|
||||
<location filename="../src/map/maplist.cpp" line="164"/>
|
||||
<source>OziExplorer maps</source>
|
||||
<translation>OziExplorer-mapoj</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="163"/>
|
||||
<location filename="../src/map/maplist.cpp" line="165"/>
|
||||
<source>MBTiles maps</source>
|
||||
<translation>MBTiles-mapoj</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="164"/>
|
||||
<location filename="../src/map/maplist.cpp" line="166"/>
|
||||
<source>Orux maps</source>
|
||||
<translation>Orux-mapoj</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="167"/>
|
||||
<source>QuickChart maps</source>
|
||||
<translation>QuickChart-mapoj</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="166"/>
|
||||
<location filename="../src/map/maplist.cpp" line="169"/>
|
||||
<source>Osmdroid SQLite maps</source>
|
||||
<translation>Osmdroid SQLite -mapoj</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="169"/>
|
||||
<location filename="../src/map/maplist.cpp" line="172"/>
|
||||
<source>TrekBuddy maps/atlases</source>
|
||||
<translation>TrekBuddy-mapoj/maparoj</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="170"/>
|
||||
<location filename="../src/map/maplist.cpp" line="173"/>
|
||||
<source>GeoTIFF images</source>
|
||||
<translation>GeoTIFF-bildoj</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="174"/>
|
||||
<location filename="../src/map/maplist.cpp" line="177"/>
|
||||
<source>All files</source>
|
||||
<translation>Ĉiuj dosieroj</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="165"/>
|
||||
<location filename="../src/map/maplist.cpp" line="168"/>
|
||||
<source>TwoNav maps</source>
|
||||
<translation>TwoNav-mapoj</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="167"/>
|
||||
<location filename="../src/map/maplist.cpp" line="170"/>
|
||||
<source>Locus/OsmAnd/RMaps SQLite maps</source>
|
||||
<translation>Locus/OsmAnd/RMaps SQLite -mapoj</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="171"/>
|
||||
<location filename="../src/map/maplist.cpp" line="174"/>
|
||||
<source>World-file georeferenced images</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="173"/>
|
||||
<location filename="../src/map/maplist.cpp" line="176"/>
|
||||
<source>Online map sources</source>
|
||||
<translation>Fontoj de Online-mapoj</translation>
|
||||
</message>
|
||||
|
@ -287,22 +287,23 @@
|
||||
<context>
|
||||
<name>FileSelectWidget</name>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="41"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="44"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="49"/>
|
||||
<source>Select file</source>
|
||||
<translation>Escoger archivo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="51"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="59"/>
|
||||
<source>No output file selected.</source>
|
||||
<translation>Falta nombre de archivo.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="61"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="69"/>
|
||||
<source>%1 is a directory.</source>
|
||||
<translation>%1 es una carpeta.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="65"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="73"/>
|
||||
<source>%1 is not writable.</source>
|
||||
<translation>%1 es de solo lectura.</translation>
|
||||
</message>
|
||||
@ -1203,97 +1204,102 @@
|
||||
<context>
|
||||
<name>MapList</name>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="152"/>
|
||||
<location filename="../src/map/maplist.cpp" line="154"/>
|
||||
<source>Supported files</source>
|
||||
<translation>Formatos admitidos</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="163"/>
|
||||
<location filename="../src/map/maplist.cpp" line="165"/>
|
||||
<source>MBTiles maps</source>
|
||||
<translation>Mapas MBTiles</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="157"/>
|
||||
<location filename="../src/map/maplist.cpp" line="160"/>
|
||||
<source>Garmin JNX maps</source>
|
||||
<translation>Mapas Garmin JNX</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="154"/>
|
||||
<location filename="../src/map/maplist.cpp" line="156"/>
|
||||
<source>AlpineQuest maps</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="155"/>
|
||||
<location filename="../src/map/maplist.cpp" line="158"/>
|
||||
<source>Garmin IMG maps</source>
|
||||
<translation>Mapas Garmin IMG</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="158"/>
|
||||
<location filename="../src/map/maplist.cpp" line="161"/>
|
||||
<source>BSB nautical charts</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="159"/>
|
||||
<location filename="../src/map/maplist.cpp" line="157"/>
|
||||
<source>GEMF maps</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="160"/>
|
||||
<location filename="../src/map/maplist.cpp" line="162"/>
|
||||
<source>KMZ maps</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="161"/>
|
||||
<location filename="../src/map/maplist.cpp" line="163"/>
|
||||
<source>Mapsforge maps</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="162"/>
|
||||
<location filename="../src/map/maplist.cpp" line="164"/>
|
||||
<source>OziExplorer maps</source>
|
||||
<translation>Mapas OziExplorer</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="164"/>
|
||||
<location filename="../src/map/maplist.cpp" line="166"/>
|
||||
<source>Orux maps</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="167"/>
|
||||
<source>QuickChart maps</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="166"/>
|
||||
<location filename="../src/map/maplist.cpp" line="169"/>
|
||||
<source>Osmdroid SQLite maps</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="169"/>
|
||||
<location filename="../src/map/maplist.cpp" line="172"/>
|
||||
<source>TrekBuddy maps/atlases</source>
|
||||
<translation>Mapas/atlas TrekBuddy</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="170"/>
|
||||
<location filename="../src/map/maplist.cpp" line="173"/>
|
||||
<source>GeoTIFF images</source>
|
||||
<translation>Imágenes GeoTIFF</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="174"/>
|
||||
<location filename="../src/map/maplist.cpp" line="177"/>
|
||||
<source>All files</source>
|
||||
<translation type="unfinished">Todos los archivos</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="165"/>
|
||||
<location filename="../src/map/maplist.cpp" line="168"/>
|
||||
<source>TwoNav maps</source>
|
||||
<translation>Mapas TwoNav</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="167"/>
|
||||
<location filename="../src/map/maplist.cpp" line="170"/>
|
||||
<source>Locus/OsmAnd/RMaps SQLite maps</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="171"/>
|
||||
<location filename="../src/map/maplist.cpp" line="174"/>
|
||||
<source>World-file georeferenced images</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="173"/>
|
||||
<location filename="../src/map/maplist.cpp" line="176"/>
|
||||
<source>Online map sources</source>
|
||||
<translation>Fuentes de mapas en línea</translation>
|
||||
</message>
|
||||
|
@ -287,22 +287,23 @@
|
||||
<context>
|
||||
<name>FileSelectWidget</name>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="41"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="44"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="49"/>
|
||||
<source>Select file</source>
|
||||
<translation>Valitse tiedosto</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="51"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="59"/>
|
||||
<source>No output file selected.</source>
|
||||
<translation>Ei tulostustiedostoa valittu.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="61"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="69"/>
|
||||
<source>%1 is a directory.</source>
|
||||
<translation>%1 on hakemisto.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="65"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="73"/>
|
||||
<source>%1 is not writable.</source>
|
||||
<translation>%1 ei voi kirjoittaa.</translation>
|
||||
</message>
|
||||
@ -1203,97 +1204,102 @@
|
||||
<context>
|
||||
<name>MapList</name>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="152"/>
|
||||
<location filename="../src/map/maplist.cpp" line="154"/>
|
||||
<source>Supported files</source>
|
||||
<translation>Tuetut tiedostot</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="163"/>
|
||||
<location filename="../src/map/maplist.cpp" line="165"/>
|
||||
<source>MBTiles maps</source>
|
||||
<translation>MBTiles-kartat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="157"/>
|
||||
<location filename="../src/map/maplist.cpp" line="160"/>
|
||||
<source>Garmin JNX maps</source>
|
||||
<translation>Garmin JNX -kartat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="154"/>
|
||||
<location filename="../src/map/maplist.cpp" line="156"/>
|
||||
<source>AlpineQuest maps</source>
|
||||
<translation>AlpineQuest-kartat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="155"/>
|
||||
<location filename="../src/map/maplist.cpp" line="158"/>
|
||||
<source>Garmin IMG maps</source>
|
||||
<translation>Garmin IMG -kartat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="158"/>
|
||||
<location filename="../src/map/maplist.cpp" line="161"/>
|
||||
<source>BSB nautical charts</source>
|
||||
<translation>BSB-merikartat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="159"/>
|
||||
<location filename="../src/map/maplist.cpp" line="157"/>
|
||||
<source>GEMF maps</source>
|
||||
<translation>GEMF-kartat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="160"/>
|
||||
<location filename="../src/map/maplist.cpp" line="162"/>
|
||||
<source>KMZ maps</source>
|
||||
<translation>KMZ-kartat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="161"/>
|
||||
<location filename="../src/map/maplist.cpp" line="163"/>
|
||||
<source>Mapsforge maps</source>
|
||||
<translation>Mapsforge-kartat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="162"/>
|
||||
<location filename="../src/map/maplist.cpp" line="164"/>
|
||||
<source>OziExplorer maps</source>
|
||||
<translation>OziExplorer-kartat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="164"/>
|
||||
<location filename="../src/map/maplist.cpp" line="166"/>
|
||||
<source>Orux maps</source>
|
||||
<translation>Orux-kartat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="167"/>
|
||||
<source>QuickChart maps</source>
|
||||
<translation>QuickChart-kartat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="166"/>
|
||||
<location filename="../src/map/maplist.cpp" line="169"/>
|
||||
<source>Osmdroid SQLite maps</source>
|
||||
<translation>Osmdroid SQLite -kartat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="169"/>
|
||||
<location filename="../src/map/maplist.cpp" line="172"/>
|
||||
<source>TrekBuddy maps/atlases</source>
|
||||
<translation>TrekBuddy-kartat/kartastot</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="170"/>
|
||||
<location filename="../src/map/maplist.cpp" line="173"/>
|
||||
<source>GeoTIFF images</source>
|
||||
<translation>GeoTIFF -kuvat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="174"/>
|
||||
<location filename="../src/map/maplist.cpp" line="177"/>
|
||||
<source>All files</source>
|
||||
<translation>Kaikki tiedostot</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="165"/>
|
||||
<location filename="../src/map/maplist.cpp" line="168"/>
|
||||
<source>TwoNav maps</source>
|
||||
<translation>TwoNav-kartat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="167"/>
|
||||
<location filename="../src/map/maplist.cpp" line="170"/>
|
||||
<source>Locus/OsmAnd/RMaps SQLite maps</source>
|
||||
<translation>Locus/OsmAnd/RMaps SQLite -kartat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="171"/>
|
||||
<location filename="../src/map/maplist.cpp" line="174"/>
|
||||
<source>World-file georeferenced images</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="173"/>
|
||||
<location filename="../src/map/maplist.cpp" line="176"/>
|
||||
<source>Online map sources</source>
|
||||
<translation>Online-karttojen lähteet</translation>
|
||||
</message>
|
||||
|
@ -287,22 +287,23 @@
|
||||
<context>
|
||||
<name>FileSelectWidget</name>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="41"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="44"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="49"/>
|
||||
<source>Select file</source>
|
||||
<translation>Sélectionner un fichier</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="51"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="59"/>
|
||||
<source>No output file selected.</source>
|
||||
<translation>Auncun fichier sélectionné.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="61"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="69"/>
|
||||
<source>%1 is a directory.</source>
|
||||
<translation>%1 est un dossier.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="65"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="73"/>
|
||||
<source>%1 is not writable.</source>
|
||||
<translation>%1 n'est pas inscriptible.</translation>
|
||||
</message>
|
||||
@ -1203,97 +1204,102 @@
|
||||
<context>
|
||||
<name>MapList</name>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="152"/>
|
||||
<location filename="../src/map/maplist.cpp" line="154"/>
|
||||
<source>Supported files</source>
|
||||
<translation>Formats pris en charge</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="163"/>
|
||||
<location filename="../src/map/maplist.cpp" line="165"/>
|
||||
<source>MBTiles maps</source>
|
||||
<translation>Cartes MBTiles</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="157"/>
|
||||
<location filename="../src/map/maplist.cpp" line="160"/>
|
||||
<source>Garmin JNX maps</source>
|
||||
<translation>Cartes Garmin JNX</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="154"/>
|
||||
<location filename="../src/map/maplist.cpp" line="156"/>
|
||||
<source>AlpineQuest maps</source>
|
||||
<translation>Cartes AlpineQuest</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="155"/>
|
||||
<location filename="../src/map/maplist.cpp" line="158"/>
|
||||
<source>Garmin IMG maps</source>
|
||||
<translation>Cartes Garmin IMG</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="158"/>
|
||||
<location filename="../src/map/maplist.cpp" line="161"/>
|
||||
<source>BSB nautical charts</source>
|
||||
<translation>Cartes marines BSB</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="159"/>
|
||||
<location filename="../src/map/maplist.cpp" line="157"/>
|
||||
<source>GEMF maps</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="160"/>
|
||||
<location filename="../src/map/maplist.cpp" line="162"/>
|
||||
<source>KMZ maps</source>
|
||||
<translation>Cartes KMZ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="161"/>
|
||||
<location filename="../src/map/maplist.cpp" line="163"/>
|
||||
<source>Mapsforge maps</source>
|
||||
<translation>Cartes Mapsforge</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="162"/>
|
||||
<location filename="../src/map/maplist.cpp" line="164"/>
|
||||
<source>OziExplorer maps</source>
|
||||
<translation>Cartes OziExplorer</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="164"/>
|
||||
<location filename="../src/map/maplist.cpp" line="166"/>
|
||||
<source>Orux maps</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="167"/>
|
||||
<source>QuickChart maps</source>
|
||||
<translation>Cartes QuickChart</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="166"/>
|
||||
<location filename="../src/map/maplist.cpp" line="169"/>
|
||||
<source>Osmdroid SQLite maps</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="169"/>
|
||||
<location filename="../src/map/maplist.cpp" line="172"/>
|
||||
<source>TrekBuddy maps/atlases</source>
|
||||
<translation>Cartes ou atlas TrekBuddy</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="170"/>
|
||||
<location filename="../src/map/maplist.cpp" line="173"/>
|
||||
<source>GeoTIFF images</source>
|
||||
<translation>Images GeoTIFF</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="174"/>
|
||||
<location filename="../src/map/maplist.cpp" line="177"/>
|
||||
<source>All files</source>
|
||||
<translation type="unfinished">Tous les fichiers</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="165"/>
|
||||
<location filename="../src/map/maplist.cpp" line="168"/>
|
||||
<source>TwoNav maps</source>
|
||||
<translation>Cartes TwoNav</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="167"/>
|
||||
<location filename="../src/map/maplist.cpp" line="170"/>
|
||||
<source>Locus/OsmAnd/RMaps SQLite maps</source>
|
||||
<translation>Cartes SQLite Locus, OsmAnd ou RMaps</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="171"/>
|
||||
<location filename="../src/map/maplist.cpp" line="174"/>
|
||||
<source>World-file georeferenced images</source>
|
||||
<translation>Images de carte positionnées par world file</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="173"/>
|
||||
<location filename="../src/map/maplist.cpp" line="176"/>
|
||||
<source>Online map sources</source>
|
||||
<translation>Cartes en ligne</translation>
|
||||
</message>
|
||||
|
@ -287,22 +287,23 @@
|
||||
<context>
|
||||
<name>FileSelectWidget</name>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="41"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="44"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="49"/>
|
||||
<source>Select file</source>
|
||||
<translation>Fájl választása</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="51"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="59"/>
|
||||
<source>No output file selected.</source>
|
||||
<translation>Nincs kiválasztott kimeneti fájl.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="61"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="69"/>
|
||||
<source>%1 is a directory.</source>
|
||||
<translation>A(z) %1 egy mappa.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="65"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="73"/>
|
||||
<source>%1 is not writable.</source>
|
||||
<translation>A(z) %1 írásvédett.</translation>
|
||||
</message>
|
||||
@ -1013,7 +1014,6 @@
|
||||
<source>%n files</source>
|
||||
<translation>
|
||||
<numerusform>%n fájl</numerusform>
|
||||
<numerusform>%n fájl</numerusform>
|
||||
</translation>
|
||||
</message>
|
||||
</context>
|
||||
@ -1203,97 +1203,102 @@
|
||||
<context>
|
||||
<name>MapList</name>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="152"/>
|
||||
<location filename="../src/map/maplist.cpp" line="154"/>
|
||||
<source>Supported files</source>
|
||||
<translation>Támogatott fájltípusok</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="154"/>
|
||||
<location filename="../src/map/maplist.cpp" line="156"/>
|
||||
<source>AlpineQuest maps</source>
|
||||
<translation>AlpineQuest térképek</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="155"/>
|
||||
<location filename="../src/map/maplist.cpp" line="158"/>
|
||||
<source>Garmin IMG maps</source>
|
||||
<translation>Garmin IMG térképek</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="157"/>
|
||||
<location filename="../src/map/maplist.cpp" line="160"/>
|
||||
<source>Garmin JNX maps</source>
|
||||
<translation>Garmin JNX térképek</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="158"/>
|
||||
<location filename="../src/map/maplist.cpp" line="161"/>
|
||||
<source>BSB nautical charts</source>
|
||||
<translation>BSB tengeri térképek</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="159"/>
|
||||
<location filename="../src/map/maplist.cpp" line="157"/>
|
||||
<source>GEMF maps</source>
|
||||
<translation>GEMF térképek</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="160"/>
|
||||
<location filename="../src/map/maplist.cpp" line="162"/>
|
||||
<source>KMZ maps</source>
|
||||
<translation>KMZ térképek</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="161"/>
|
||||
<location filename="../src/map/maplist.cpp" line="163"/>
|
||||
<source>Mapsforge maps</source>
|
||||
<translation>Mapsforge térképek</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="162"/>
|
||||
<location filename="../src/map/maplist.cpp" line="164"/>
|
||||
<source>OziExplorer maps</source>
|
||||
<translation>OziExplorer térképek</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="163"/>
|
||||
<location filename="../src/map/maplist.cpp" line="165"/>
|
||||
<source>MBTiles maps</source>
|
||||
<translation>MBTiles térképek</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="164"/>
|
||||
<location filename="../src/map/maplist.cpp" line="166"/>
|
||||
<source>Orux maps</source>
|
||||
<translation>Orux térképek</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="167"/>
|
||||
<source>QuickChart maps</source>
|
||||
<translation>QuickChart térképek</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="166"/>
|
||||
<location filename="../src/map/maplist.cpp" line="169"/>
|
||||
<source>Osmdroid SQLite maps</source>
|
||||
<translation>Osmdroid SQLite térképek</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="169"/>
|
||||
<location filename="../src/map/maplist.cpp" line="172"/>
|
||||
<source>TrekBuddy maps/atlases</source>
|
||||
<translation>TrekBuddy térképek</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="170"/>
|
||||
<location filename="../src/map/maplist.cpp" line="173"/>
|
||||
<source>GeoTIFF images</source>
|
||||
<translation>GeoTIFF képek</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="174"/>
|
||||
<location filename="../src/map/maplist.cpp" line="177"/>
|
||||
<source>All files</source>
|
||||
<translation>Minden fájl</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="165"/>
|
||||
<location filename="../src/map/maplist.cpp" line="168"/>
|
||||
<source>TwoNav maps</source>
|
||||
<translation>TwoNav térképek</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="167"/>
|
||||
<location filename="../src/map/maplist.cpp" line="170"/>
|
||||
<source>Locus/OsmAnd/RMaps SQLite maps</source>
|
||||
<translation>Locus/OsmAnd/RMaps SQLite térképek</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="171"/>
|
||||
<location filename="../src/map/maplist.cpp" line="174"/>
|
||||
<source>World-file georeferenced images</source>
|
||||
<translation>Georeferált világ-fájlképek</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="173"/>
|
||||
<location filename="../src/map/maplist.cpp" line="176"/>
|
||||
<source>Online map sources</source>
|
||||
<translation>Online térképforrások</translation>
|
||||
</message>
|
||||
|
@ -287,22 +287,23 @@
|
||||
<context>
|
||||
<name>FileSelectWidget</name>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="41"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="44"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="49"/>
|
||||
<source>Select file</source>
|
||||
<translation>Seleziona file</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="51"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="59"/>
|
||||
<source>No output file selected.</source>
|
||||
<translation>Nessun file di output selezionato.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="61"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="69"/>
|
||||
<source>%1 is a directory.</source>
|
||||
<translation>%1 è una cartella.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="65"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="73"/>
|
||||
<source>%1 is not writable.</source>
|
||||
<translation>%1 non è scrivibile.</translation>
|
||||
</message>
|
||||
@ -1203,97 +1204,102 @@
|
||||
<context>
|
||||
<name>MapList</name>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="152"/>
|
||||
<location filename="../src/map/maplist.cpp" line="154"/>
|
||||
<source>Supported files</source>
|
||||
<translation>File supportati</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="154"/>
|
||||
<location filename="../src/map/maplist.cpp" line="156"/>
|
||||
<source>AlpineQuest maps</source>
|
||||
<translation>Mappe AlpineQuest</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="155"/>
|
||||
<location filename="../src/map/maplist.cpp" line="158"/>
|
||||
<source>Garmin IMG maps</source>
|
||||
<translation>Mappe Garmin IMG</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="157"/>
|
||||
<location filename="../src/map/maplist.cpp" line="160"/>
|
||||
<source>Garmin JNX maps</source>
|
||||
<translation>Mappe Garmin JNX</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="158"/>
|
||||
<location filename="../src/map/maplist.cpp" line="161"/>
|
||||
<source>BSB nautical charts</source>
|
||||
<translation>Carte nautiche BSB</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="159"/>
|
||||
<location filename="../src/map/maplist.cpp" line="157"/>
|
||||
<source>GEMF maps</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="160"/>
|
||||
<location filename="../src/map/maplist.cpp" line="162"/>
|
||||
<source>KMZ maps</source>
|
||||
<translation>Mappe KMZ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="161"/>
|
||||
<location filename="../src/map/maplist.cpp" line="163"/>
|
||||
<source>Mapsforge maps</source>
|
||||
<translation>Mappe Mapsforge</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="162"/>
|
||||
<location filename="../src/map/maplist.cpp" line="164"/>
|
||||
<source>OziExplorer maps</source>
|
||||
<translation>Mappe OziExplorer</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="163"/>
|
||||
<location filename="../src/map/maplist.cpp" line="165"/>
|
||||
<source>MBTiles maps</source>
|
||||
<translation>Mappe MBTiles</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="164"/>
|
||||
<location filename="../src/map/maplist.cpp" line="166"/>
|
||||
<source>Orux maps</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="167"/>
|
||||
<source>QuickChart maps</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="166"/>
|
||||
<location filename="../src/map/maplist.cpp" line="169"/>
|
||||
<source>Osmdroid SQLite maps</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="169"/>
|
||||
<location filename="../src/map/maplist.cpp" line="172"/>
|
||||
<source>TrekBuddy maps/atlases</source>
|
||||
<translation>Mappe/Atlanti TrekBuddy</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="170"/>
|
||||
<location filename="../src/map/maplist.cpp" line="173"/>
|
||||
<source>GeoTIFF images</source>
|
||||
<translation>Immagini GeoTIFF</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="174"/>
|
||||
<location filename="../src/map/maplist.cpp" line="177"/>
|
||||
<source>All files</source>
|
||||
<translation type="unfinished">Tutti i file</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="165"/>
|
||||
<location filename="../src/map/maplist.cpp" line="168"/>
|
||||
<source>TwoNav maps</source>
|
||||
<translation>Mappe TwoNav</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="167"/>
|
||||
<location filename="../src/map/maplist.cpp" line="170"/>
|
||||
<source>Locus/OsmAnd/RMaps SQLite maps</source>
|
||||
<translation>Mappe Locus/OsmAnd/RMaps o SQLite</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="171"/>
|
||||
<location filename="../src/map/maplist.cpp" line="174"/>
|
||||
<source>World-file georeferenced images</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="173"/>
|
||||
<location filename="../src/map/maplist.cpp" line="176"/>
|
||||
<source>Online map sources</source>
|
||||
<translation>Mappe online</translation>
|
||||
</message>
|
||||
|
@ -200,13 +200,13 @@
|
||||
<location filename="../src/GUI/elevationgraph.cpp" line="60"/>
|
||||
<source>Up</source>
|
||||
<extracomment>Use an Unicode arrow (U+2197) when there is no abbreviation or extremly short term for "Up" in your language</extracomment>
|
||||
<translation type="unfinished">Opp</translation>
|
||||
<translation>Opp</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/elevationgraph.cpp" line="64"/>
|
||||
<source>Down</source>
|
||||
<extracomment>Use an Unicode arrow (U+2198) when there is no abbreviation or extremly short term for "Down" in your language</extracomment>
|
||||
<translation type="unfinished">Ned</translation>
|
||||
<translation>Ned</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/elevationgraph.cpp" line="67"/>
|
||||
@ -287,22 +287,23 @@
|
||||
<context>
|
||||
<name>FileSelectWidget</name>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="41"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="44"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="49"/>
|
||||
<source>Select file</source>
|
||||
<translation>Velg fil</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="51"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="59"/>
|
||||
<source>No output file selected.</source>
|
||||
<translation>Ingen utdatafil valgt.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="61"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="69"/>
|
||||
<source>%1 is a directory.</source>
|
||||
<translation>%1 er en mappe.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="65"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="73"/>
|
||||
<source>%1 is not writable.</source>
|
||||
<translation>%1 er skrivebeskyttet.</translation>
|
||||
</message>
|
||||
@ -373,7 +374,7 @@
|
||||
<message>
|
||||
<location filename="../src/GUI/gui.cpp" line="219"/>
|
||||
<source>Open directory...</source>
|
||||
<translation type="unfinished">Åpne mappe …</translation>
|
||||
<translation>Åpne mappe …</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/gui.cpp" line="224"/>
|
||||
@ -597,7 +598,7 @@
|
||||
<message>
|
||||
<location filename="../src/GUI/gui.cpp" line="477"/>
|
||||
<source>Show tabs</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Vis faner</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/gui.cpp" line="486"/>
|
||||
@ -711,7 +712,7 @@
|
||||
<message>
|
||||
<location filename="../src/GUI/gui.cpp" line="955"/>
|
||||
<source>Open directory</source>
|
||||
<translation type="unfinished">Åpne mappe</translation>
|
||||
<translation>Åpne mappe</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/gui.cpp" line="1959"/>
|
||||
@ -1028,7 +1029,7 @@
|
||||
<message>
|
||||
<location filename="../src/GUI/gearratiograph.cpp" line="28"/>
|
||||
<source>Top</source>
|
||||
<translation type="unfinished">Topp</translation>
|
||||
<translation>Topp</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/gearratiograph.cpp" line="30"/>
|
||||
@ -1203,97 +1204,102 @@
|
||||
<context>
|
||||
<name>MapList</name>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="152"/>
|
||||
<location filename="../src/map/maplist.cpp" line="154"/>
|
||||
<source>Supported files</source>
|
||||
<translation>Støttede filer</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="163"/>
|
||||
<location filename="../src/map/maplist.cpp" line="165"/>
|
||||
<source>MBTiles maps</source>
|
||||
<translation>MBTiles-kart</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="157"/>
|
||||
<location filename="../src/map/maplist.cpp" line="160"/>
|
||||
<source>Garmin JNX maps</source>
|
||||
<translation>Garmin JNX-kart</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="154"/>
|
||||
<location filename="../src/map/maplist.cpp" line="156"/>
|
||||
<source>AlpineQuest maps</source>
|
||||
<translation>AlpineQuest-kart</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="155"/>
|
||||
<location filename="../src/map/maplist.cpp" line="158"/>
|
||||
<source>Garmin IMG maps</source>
|
||||
<translation>Garmin IMG-kart</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="158"/>
|
||||
<location filename="../src/map/maplist.cpp" line="161"/>
|
||||
<source>BSB nautical charts</source>
|
||||
<translation>BSB-sjøkart</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="159"/>
|
||||
<location filename="../src/map/maplist.cpp" line="157"/>
|
||||
<source>GEMF maps</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>GEMF-kart</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="160"/>
|
||||
<location filename="../src/map/maplist.cpp" line="162"/>
|
||||
<source>KMZ maps</source>
|
||||
<translation>KMZ-kart</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="161"/>
|
||||
<location filename="../src/map/maplist.cpp" line="163"/>
|
||||
<source>Mapsforge maps</source>
|
||||
<translation>Mapsforge-kart</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="162"/>
|
||||
<location filename="../src/map/maplist.cpp" line="164"/>
|
||||
<source>OziExplorer maps</source>
|
||||
<translation>OziExplorer-kart</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="164"/>
|
||||
<location filename="../src/map/maplist.cpp" line="166"/>
|
||||
<source>Orux maps</source>
|
||||
<translation>Orux-kart</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="167"/>
|
||||
<source>QuickChart maps</source>
|
||||
<translation>QuickChart-kart</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="166"/>
|
||||
<location filename="../src/map/maplist.cpp" line="169"/>
|
||||
<source>Osmdroid SQLite maps</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Osmdroid SQLite-kart</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="167"/>
|
||||
<location filename="../src/map/maplist.cpp" line="170"/>
|
||||
<source>Locus/OsmAnd/RMaps SQLite maps</source>
|
||||
<translation>Locus/OsmAnd/RMaps-SQLite-kart</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="169"/>
|
||||
<location filename="../src/map/maplist.cpp" line="172"/>
|
||||
<source>TrekBuddy maps/atlases</source>
|
||||
<translation>TrekBuddy-kart/atlas</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="170"/>
|
||||
<location filename="../src/map/maplist.cpp" line="173"/>
|
||||
<source>GeoTIFF images</source>
|
||||
<translation>GeoTIFF-bilder</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="174"/>
|
||||
<location filename="../src/map/maplist.cpp" line="177"/>
|
||||
<source>All files</source>
|
||||
<translation type="unfinished">Alle filer</translation>
|
||||
<translation>Alle filer</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="165"/>
|
||||
<location filename="../src/map/maplist.cpp" line="168"/>
|
||||
<source>TwoNav maps</source>
|
||||
<translation>TwoNav-kart</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="171"/>
|
||||
<location filename="../src/map/maplist.cpp" line="174"/>
|
||||
<source>World-file georeferenced images</source>
|
||||
<translation>World-file georefererte bilder</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="173"/>
|
||||
<location filename="../src/map/maplist.cpp" line="176"/>
|
||||
<source>Online map sources</source>
|
||||
<translation>Nettbaserte kartkilder</translation>
|
||||
</message>
|
||||
@ -1915,7 +1921,7 @@
|
||||
<message>
|
||||
<location filename="../src/GUI/optionsdialog.cpp" line="779"/>
|
||||
<source>Initial paths</source>
|
||||
<translation type="unfinished">Forvalgte stier</translation>
|
||||
<translation>Forvalgte stier</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/optionsdialog.cpp" line="814"/>
|
||||
|
@ -287,22 +287,23 @@
|
||||
<context>
|
||||
<name>FileSelectWidget</name>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="41"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="44"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="49"/>
|
||||
<source>Select file</source>
|
||||
<translation>Wybierz plik</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="51"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="59"/>
|
||||
<source>No output file selected.</source>
|
||||
<translation>Nie wybrano pliku docelowego.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="61"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="69"/>
|
||||
<source>%1 is a directory.</source>
|
||||
<translation>%1 jest katalogiem.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="65"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="73"/>
|
||||
<source>%1 is not writable.</source>
|
||||
<translation>%1 nie jest zapisywalny.</translation>
|
||||
</message>
|
||||
@ -1204,97 +1205,102 @@
|
||||
<context>
|
||||
<name>MapList</name>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="152"/>
|
||||
<location filename="../src/map/maplist.cpp" line="154"/>
|
||||
<source>Supported files</source>
|
||||
<translation>Obsługiwane pliki</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="163"/>
|
||||
<location filename="../src/map/maplist.cpp" line="165"/>
|
||||
<source>MBTiles maps</source>
|
||||
<translation>Mapy MBTiles</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="157"/>
|
||||
<location filename="../src/map/maplist.cpp" line="160"/>
|
||||
<source>Garmin JNX maps</source>
|
||||
<translation>Mapy Garmin JNX</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="154"/>
|
||||
<location filename="../src/map/maplist.cpp" line="156"/>
|
||||
<source>AlpineQuest maps</source>
|
||||
<translation>Mapy AlpineQuest</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="155"/>
|
||||
<location filename="../src/map/maplist.cpp" line="158"/>
|
||||
<source>Garmin IMG maps</source>
|
||||
<translation>Mapy Garmin IMG</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="158"/>
|
||||
<location filename="../src/map/maplist.cpp" line="161"/>
|
||||
<source>BSB nautical charts</source>
|
||||
<translation>Mapy morskie BSB</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="159"/>
|
||||
<location filename="../src/map/maplist.cpp" line="157"/>
|
||||
<source>GEMF maps</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="160"/>
|
||||
<location filename="../src/map/maplist.cpp" line="162"/>
|
||||
<source>KMZ maps</source>
|
||||
<translation>Mapy KMZ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="161"/>
|
||||
<location filename="../src/map/maplist.cpp" line="163"/>
|
||||
<source>Mapsforge maps</source>
|
||||
<translation>Mapy Mapsforge</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="162"/>
|
||||
<location filename="../src/map/maplist.cpp" line="164"/>
|
||||
<source>OziExplorer maps</source>
|
||||
<translation>Mapy OziExplorer</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="164"/>
|
||||
<location filename="../src/map/maplist.cpp" line="166"/>
|
||||
<source>Orux maps</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="167"/>
|
||||
<source>QuickChart maps</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="166"/>
|
||||
<location filename="../src/map/maplist.cpp" line="169"/>
|
||||
<source>Osmdroid SQLite maps</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="169"/>
|
||||
<location filename="../src/map/maplist.cpp" line="172"/>
|
||||
<source>TrekBuddy maps/atlases</source>
|
||||
<translation>Mapy/atlasy TrekBuddy</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="170"/>
|
||||
<location filename="../src/map/maplist.cpp" line="173"/>
|
||||
<source>GeoTIFF images</source>
|
||||
<translation>Obrazy GeoTIFF</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="174"/>
|
||||
<location filename="../src/map/maplist.cpp" line="177"/>
|
||||
<source>All files</source>
|
||||
<translation type="unfinished">Wszystkie pliki</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="165"/>
|
||||
<location filename="../src/map/maplist.cpp" line="168"/>
|
||||
<source>TwoNav maps</source>
|
||||
<translation>Mapy TwoNav</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="167"/>
|
||||
<location filename="../src/map/maplist.cpp" line="170"/>
|
||||
<source>Locus/OsmAnd/RMaps SQLite maps</source>
|
||||
<translation>Mapy Locus/OsmAnd/RMaps SQLite</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="171"/>
|
||||
<location filename="../src/map/maplist.cpp" line="174"/>
|
||||
<source>World-file georeferenced images</source>
|
||||
<translation>Obrazy georeferencyjne z plikami ze świata</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="173"/>
|
||||
<location filename="../src/map/maplist.cpp" line="176"/>
|
||||
<source>Online map sources</source>
|
||||
<translation>Źródła map online</translation>
|
||||
</message>
|
||||
|
@ -287,22 +287,23 @@
|
||||
<context>
|
||||
<name>FileSelectWidget</name>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="41"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="44"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="49"/>
|
||||
<source>Select file</source>
|
||||
<translation>Selecionar arquivo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="51"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="59"/>
|
||||
<source>No output file selected.</source>
|
||||
<translation>Nenhum arquivo de saída selecionado.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="61"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="69"/>
|
||||
<source>%1 is a directory.</source>
|
||||
<translation>%1 é uma pasta.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="65"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="73"/>
|
||||
<source>%1 is not writable.</source>
|
||||
<translation>%1 é apenas para leitura.</translation>
|
||||
</message>
|
||||
@ -1203,97 +1204,102 @@
|
||||
<context>
|
||||
<name>MapList</name>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="152"/>
|
||||
<location filename="../src/map/maplist.cpp" line="154"/>
|
||||
<source>Supported files</source>
|
||||
<translation>Formatos suportados</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="163"/>
|
||||
<location filename="../src/map/maplist.cpp" line="165"/>
|
||||
<source>MBTiles maps</source>
|
||||
<translation>Mapas MBTiles</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="157"/>
|
||||
<location filename="../src/map/maplist.cpp" line="160"/>
|
||||
<source>Garmin JNX maps</source>
|
||||
<translation>Mapas Garmin JNX</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="154"/>
|
||||
<location filename="../src/map/maplist.cpp" line="156"/>
|
||||
<source>AlpineQuest maps</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="155"/>
|
||||
<location filename="../src/map/maplist.cpp" line="158"/>
|
||||
<source>Garmin IMG maps</source>
|
||||
<translation>Mapas Garmin IMG</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="158"/>
|
||||
<location filename="../src/map/maplist.cpp" line="161"/>
|
||||
<source>BSB nautical charts</source>
|
||||
<translation>Cartas náuticas BSB</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="159"/>
|
||||
<location filename="../src/map/maplist.cpp" line="157"/>
|
||||
<source>GEMF maps</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="160"/>
|
||||
<location filename="../src/map/maplist.cpp" line="162"/>
|
||||
<source>KMZ maps</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="161"/>
|
||||
<location filename="../src/map/maplist.cpp" line="163"/>
|
||||
<source>Mapsforge maps</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="162"/>
|
||||
<location filename="../src/map/maplist.cpp" line="164"/>
|
||||
<source>OziExplorer maps</source>
|
||||
<translation>Mapas OziExplorer</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="164"/>
|
||||
<location filename="../src/map/maplist.cpp" line="166"/>
|
||||
<source>Orux maps</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="167"/>
|
||||
<source>QuickChart maps</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="166"/>
|
||||
<location filename="../src/map/maplist.cpp" line="169"/>
|
||||
<source>Osmdroid SQLite maps</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="169"/>
|
||||
<location filename="../src/map/maplist.cpp" line="172"/>
|
||||
<source>TrekBuddy maps/atlases</source>
|
||||
<translation>Mapas/Atlas TrekBuddy</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="170"/>
|
||||
<location filename="../src/map/maplist.cpp" line="173"/>
|
||||
<source>GeoTIFF images</source>
|
||||
<translation>Imagens GeoTIFF</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="174"/>
|
||||
<location filename="../src/map/maplist.cpp" line="177"/>
|
||||
<source>All files</source>
|
||||
<translation type="unfinished">Todos os arquivos</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="165"/>
|
||||
<location filename="../src/map/maplist.cpp" line="168"/>
|
||||
<source>TwoNav maps</source>
|
||||
<translation>Mapas TwoNav</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="167"/>
|
||||
<location filename="../src/map/maplist.cpp" line="170"/>
|
||||
<source>Locus/OsmAnd/RMaps SQLite maps</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="171"/>
|
||||
<location filename="../src/map/maplist.cpp" line="174"/>
|
||||
<source>World-file georeferenced images</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="173"/>
|
||||
<location filename="../src/map/maplist.cpp" line="176"/>
|
||||
<source>Online map sources</source>
|
||||
<translation>Mapas online</translation>
|
||||
</message>
|
||||
|
@ -287,22 +287,23 @@
|
||||
<context>
|
||||
<name>FileSelectWidget</name>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="41"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="44"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="49"/>
|
||||
<source>Select file</source>
|
||||
<translation>Выбрать файл</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="51"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="59"/>
|
||||
<source>No output file selected.</source>
|
||||
<translation>Не выбран файл вывода.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="61"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="69"/>
|
||||
<source>%1 is a directory.</source>
|
||||
<translation>%1 - это директория.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="65"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="73"/>
|
||||
<source>%1 is not writable.</source>
|
||||
<translation>%1 не доступен для записи.</translation>
|
||||
</message>
|
||||
@ -1204,97 +1205,102 @@
|
||||
<context>
|
||||
<name>MapList</name>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="152"/>
|
||||
<location filename="../src/map/maplist.cpp" line="154"/>
|
||||
<source>Supported files</source>
|
||||
<translation>Все поддерживаемые файлы</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="163"/>
|
||||
<location filename="../src/map/maplist.cpp" line="165"/>
|
||||
<source>MBTiles maps</source>
|
||||
<translation>MBTiles карты</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="157"/>
|
||||
<location filename="../src/map/maplist.cpp" line="160"/>
|
||||
<source>Garmin JNX maps</source>
|
||||
<translation>Garmin JNX карты</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="154"/>
|
||||
<location filename="../src/map/maplist.cpp" line="156"/>
|
||||
<source>AlpineQuest maps</source>
|
||||
<translation>AlpineQuest карты</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="155"/>
|
||||
<location filename="../src/map/maplist.cpp" line="158"/>
|
||||
<source>Garmin IMG maps</source>
|
||||
<translation>Garmin IMG карты</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="158"/>
|
||||
<location filename="../src/map/maplist.cpp" line="161"/>
|
||||
<source>BSB nautical charts</source>
|
||||
<translation>BSB навигационные карты</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="159"/>
|
||||
<location filename="../src/map/maplist.cpp" line="157"/>
|
||||
<source>GEMF maps</source>
|
||||
<translation>GEMF карты</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="160"/>
|
||||
<location filename="../src/map/maplist.cpp" line="162"/>
|
||||
<source>KMZ maps</source>
|
||||
<translation>KMZ карты</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="161"/>
|
||||
<location filename="../src/map/maplist.cpp" line="163"/>
|
||||
<source>Mapsforge maps</source>
|
||||
<translation>Карты Mapsforge</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="162"/>
|
||||
<location filename="../src/map/maplist.cpp" line="164"/>
|
||||
<source>OziExplorer maps</source>
|
||||
<translation>OziExplorer карты</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="164"/>
|
||||
<location filename="../src/map/maplist.cpp" line="166"/>
|
||||
<source>Orux maps</source>
|
||||
<translation>Orux карты</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="167"/>
|
||||
<source>QuickChart maps</source>
|
||||
<translation>QuickChart карты</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="166"/>
|
||||
<location filename="../src/map/maplist.cpp" line="169"/>
|
||||
<source>Osmdroid SQLite maps</source>
|
||||
<translation>Osmdroid SQLite карты</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="169"/>
|
||||
<location filename="../src/map/maplist.cpp" line="172"/>
|
||||
<source>TrekBuddy maps/atlases</source>
|
||||
<translation>TrekBuddy карты/атласы</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="170"/>
|
||||
<location filename="../src/map/maplist.cpp" line="173"/>
|
||||
<source>GeoTIFF images</source>
|
||||
<translation>GeoTIFF изображения</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="174"/>
|
||||
<location filename="../src/map/maplist.cpp" line="177"/>
|
||||
<source>All files</source>
|
||||
<translation>Все файлы</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="165"/>
|
||||
<location filename="../src/map/maplist.cpp" line="168"/>
|
||||
<source>TwoNav maps</source>
|
||||
<translation>TwoNav карты</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="167"/>
|
||||
<location filename="../src/map/maplist.cpp" line="170"/>
|
||||
<source>Locus/OsmAnd/RMaps SQLite maps</source>
|
||||
<translation>Locus/OsmAnd/RMaps SQLite карты</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="171"/>
|
||||
<location filename="../src/map/maplist.cpp" line="174"/>
|
||||
<source>World-file georeferenced images</source>
|
||||
<translation>Изображения с геопривязкой World-файлe</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="173"/>
|
||||
<location filename="../src/map/maplist.cpp" line="176"/>
|
||||
<source>Online map sources</source>
|
||||
<translation>Источники онлайн карт</translation>
|
||||
</message>
|
||||
|
@ -287,22 +287,23 @@
|
||||
<context>
|
||||
<name>FileSelectWidget</name>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="41"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="44"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="49"/>
|
||||
<source>Select file</source>
|
||||
<translation>Välj fil</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="51"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="59"/>
|
||||
<source>No output file selected.</source>
|
||||
<translation>Ingen utdatafil vald.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="61"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="69"/>
|
||||
<source>%1 is a directory.</source>
|
||||
<translation>%1 är en mapp.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="65"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="73"/>
|
||||
<source>%1 is not writable.</source>
|
||||
<translation>%1 är skrivskyddad.</translation>
|
||||
</message>
|
||||
@ -1203,97 +1204,102 @@
|
||||
<context>
|
||||
<name>MapList</name>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="152"/>
|
||||
<location filename="../src/map/maplist.cpp" line="154"/>
|
||||
<source>Supported files</source>
|
||||
<translation>Filer som stöds</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="163"/>
|
||||
<location filename="../src/map/maplist.cpp" line="165"/>
|
||||
<source>MBTiles maps</source>
|
||||
<translation>MBTiles-kartor</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="157"/>
|
||||
<location filename="../src/map/maplist.cpp" line="160"/>
|
||||
<source>Garmin JNX maps</source>
|
||||
<translation>Garmin JNX-kartor</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="154"/>
|
||||
<location filename="../src/map/maplist.cpp" line="156"/>
|
||||
<source>AlpineQuest maps</source>
|
||||
<translation>AlpineQuest kartor</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="155"/>
|
||||
<location filename="../src/map/maplist.cpp" line="158"/>
|
||||
<source>Garmin IMG maps</source>
|
||||
<translation>Garmin IMG-kartor</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="158"/>
|
||||
<location filename="../src/map/maplist.cpp" line="161"/>
|
||||
<source>BSB nautical charts</source>
|
||||
<translation>BSB nautiska sjökort</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="159"/>
|
||||
<location filename="../src/map/maplist.cpp" line="157"/>
|
||||
<source>GEMF maps</source>
|
||||
<translation>GEMF-kartor</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="160"/>
|
||||
<location filename="../src/map/maplist.cpp" line="162"/>
|
||||
<source>KMZ maps</source>
|
||||
<translation>KMZ-kartor</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="161"/>
|
||||
<location filename="../src/map/maplist.cpp" line="163"/>
|
||||
<source>Mapsforge maps</source>
|
||||
<translation>Mapsforge-kartor</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="162"/>
|
||||
<location filename="../src/map/maplist.cpp" line="164"/>
|
||||
<source>OziExplorer maps</source>
|
||||
<translation>OziExplorer-kartor</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="164"/>
|
||||
<location filename="../src/map/maplist.cpp" line="166"/>
|
||||
<source>Orux maps</source>
|
||||
<translation>Orux-kartor</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="167"/>
|
||||
<source>QuickChart maps</source>
|
||||
<translation>QuickChart-kartor</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="166"/>
|
||||
<location filename="../src/map/maplist.cpp" line="169"/>
|
||||
<source>Osmdroid SQLite maps</source>
|
||||
<translation>Osmdroid SQLite-kartor</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="169"/>
|
||||
<location filename="../src/map/maplist.cpp" line="172"/>
|
||||
<source>TrekBuddy maps/atlases</source>
|
||||
<translation>TrekBuddy-kartor/-atlaser</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="170"/>
|
||||
<location filename="../src/map/maplist.cpp" line="173"/>
|
||||
<source>GeoTIFF images</source>
|
||||
<translation>GeoTIFF-bilder</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="174"/>
|
||||
<location filename="../src/map/maplist.cpp" line="177"/>
|
||||
<source>All files</source>
|
||||
<translation>Alla filer</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="165"/>
|
||||
<location filename="../src/map/maplist.cpp" line="168"/>
|
||||
<source>TwoNav maps</source>
|
||||
<translation>TwoNav-kartor</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="167"/>
|
||||
<location filename="../src/map/maplist.cpp" line="170"/>
|
||||
<source>Locus/OsmAnd/RMaps SQLite maps</source>
|
||||
<translation>Locus/OsmAnd/RMaps SQLite-kartor</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="171"/>
|
||||
<location filename="../src/map/maplist.cpp" line="174"/>
|
||||
<source>World-file georeferenced images</source>
|
||||
<translation>Georefererade bilder i världsfil</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="173"/>
|
||||
<location filename="../src/map/maplist.cpp" line="176"/>
|
||||
<source>Online map sources</source>
|
||||
<translation>Online-kartkällor</translation>
|
||||
</message>
|
||||
|
@ -287,22 +287,23 @@
|
||||
<context>
|
||||
<name>FileSelectWidget</name>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="41"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="44"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="49"/>
|
||||
<source>Select file</source>
|
||||
<translation>Dosya seç</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="51"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="59"/>
|
||||
<source>No output file selected.</source>
|
||||
<translation>Çıktı dosyası seçilmedi.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="61"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="69"/>
|
||||
<source>%1 is a directory.</source>
|
||||
<translation>%1 bir dizin.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="65"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="73"/>
|
||||
<source>%1 is not writable.</source>
|
||||
<translation>%1 yazılabilir değil.</translation>
|
||||
</message>
|
||||
@ -1202,97 +1203,102 @@
|
||||
<context>
|
||||
<name>MapList</name>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="152"/>
|
||||
<location filename="../src/map/maplist.cpp" line="154"/>
|
||||
<source>Supported files</source>
|
||||
<translation>Desteklenen dosyalar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="163"/>
|
||||
<location filename="../src/map/maplist.cpp" line="165"/>
|
||||
<source>MBTiles maps</source>
|
||||
<translation>MBTiles haritaları</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="157"/>
|
||||
<location filename="../src/map/maplist.cpp" line="160"/>
|
||||
<source>Garmin JNX maps</source>
|
||||
<translation>Garmin JNX haritaları</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="154"/>
|
||||
<location filename="../src/map/maplist.cpp" line="156"/>
|
||||
<source>AlpineQuest maps</source>
|
||||
<translation>AlpineQuest haritaları</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="155"/>
|
||||
<location filename="../src/map/maplist.cpp" line="158"/>
|
||||
<source>Garmin IMG maps</source>
|
||||
<translation>Garmin IMG haritaları</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="158"/>
|
||||
<location filename="../src/map/maplist.cpp" line="161"/>
|
||||
<source>BSB nautical charts</source>
|
||||
<translation>BSB denizcilik haritaları</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="159"/>
|
||||
<location filename="../src/map/maplist.cpp" line="157"/>
|
||||
<source>GEMF maps</source>
|
||||
<translation>GEMF haritaları</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="160"/>
|
||||
<location filename="../src/map/maplist.cpp" line="162"/>
|
||||
<source>KMZ maps</source>
|
||||
<translation>KMZ haritaları</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="161"/>
|
||||
<location filename="../src/map/maplist.cpp" line="163"/>
|
||||
<source>Mapsforge maps</source>
|
||||
<translation>Mapsforge haritaları</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="162"/>
|
||||
<location filename="../src/map/maplist.cpp" line="164"/>
|
||||
<source>OziExplorer maps</source>
|
||||
<translation>OziExplorer haritaları</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="164"/>
|
||||
<location filename="../src/map/maplist.cpp" line="166"/>
|
||||
<source>Orux maps</source>
|
||||
<translation>Orux haritaları</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="167"/>
|
||||
<source>QuickChart maps</source>
|
||||
<translation>QuickChart haritaları</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="166"/>
|
||||
<location filename="../src/map/maplist.cpp" line="169"/>
|
||||
<source>Osmdroid SQLite maps</source>
|
||||
<translation>Osmdroid SQLite haritaları</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="169"/>
|
||||
<location filename="../src/map/maplist.cpp" line="172"/>
|
||||
<source>TrekBuddy maps/atlases</source>
|
||||
<translation>TrekBuddy haritaları/atlasları</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="170"/>
|
||||
<location filename="../src/map/maplist.cpp" line="173"/>
|
||||
<source>GeoTIFF images</source>
|
||||
<translation>GeoTIFF görüntüleri</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="174"/>
|
||||
<location filename="../src/map/maplist.cpp" line="177"/>
|
||||
<source>All files</source>
|
||||
<translation>Tüm dosyalar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="165"/>
|
||||
<location filename="../src/map/maplist.cpp" line="168"/>
|
||||
<source>TwoNav maps</source>
|
||||
<translation>TwoNav haritaları</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="167"/>
|
||||
<location filename="../src/map/maplist.cpp" line="170"/>
|
||||
<source>Locus/OsmAnd/RMaps SQLite maps</source>
|
||||
<translation>Locus/OsmAnd/RMaps SQLite haritaları</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="171"/>
|
||||
<location filename="../src/map/maplist.cpp" line="174"/>
|
||||
<source>World-file georeferenced images</source>
|
||||
<translation>World-file coğrafi referanslı görüntüleri</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="173"/>
|
||||
<location filename="../src/map/maplist.cpp" line="176"/>
|
||||
<source>Online map sources</source>
|
||||
<translation>Çevrim içi harita kaynakları</translation>
|
||||
</message>
|
||||
|
@ -287,22 +287,23 @@
|
||||
<context>
|
||||
<name>FileSelectWidget</name>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="41"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="44"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="49"/>
|
||||
<source>Select file</source>
|
||||
<translation>Вибрати файл</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="51"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="59"/>
|
||||
<source>No output file selected.</source>
|
||||
<translation>Не обрано вихідний файл.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="61"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="69"/>
|
||||
<source>%1 is a directory.</source>
|
||||
<translation>%1 є каталогом.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="65"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="73"/>
|
||||
<source>%1 is not writable.</source>
|
||||
<translation>%1 недоступний для запису.</translation>
|
||||
</message>
|
||||
@ -1204,97 +1205,102 @@
|
||||
<context>
|
||||
<name>MapList</name>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="152"/>
|
||||
<location filename="../src/map/maplist.cpp" line="154"/>
|
||||
<source>Supported files</source>
|
||||
<translation>Всі підтримувані формати</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="154"/>
|
||||
<location filename="../src/map/maplist.cpp" line="156"/>
|
||||
<source>AlpineQuest maps</source>
|
||||
<translation>AlpineQuest мапи</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="155"/>
|
||||
<location filename="../src/map/maplist.cpp" line="158"/>
|
||||
<source>Garmin IMG maps</source>
|
||||
<translation>Garmin IMG мапи</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="157"/>
|
||||
<location filename="../src/map/maplist.cpp" line="160"/>
|
||||
<source>Garmin JNX maps</source>
|
||||
<translation>Garmin JNX мапи</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="158"/>
|
||||
<location filename="../src/map/maplist.cpp" line="161"/>
|
||||
<source>BSB nautical charts</source>
|
||||
<translation>BSB навігаційні мапи</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="159"/>
|
||||
<location filename="../src/map/maplist.cpp" line="157"/>
|
||||
<source>GEMF maps</source>
|
||||
<translation>GEMF мапи</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="160"/>
|
||||
<location filename="../src/map/maplist.cpp" line="162"/>
|
||||
<source>KMZ maps</source>
|
||||
<translation>KMZ мапи</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="161"/>
|
||||
<location filename="../src/map/maplist.cpp" line="163"/>
|
||||
<source>Mapsforge maps</source>
|
||||
<translation>Mapsforge мапи</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="162"/>
|
||||
<location filename="../src/map/maplist.cpp" line="164"/>
|
||||
<source>OziExplorer maps</source>
|
||||
<translation>OziExplorer мапи</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="163"/>
|
||||
<location filename="../src/map/maplist.cpp" line="165"/>
|
||||
<source>MBTiles maps</source>
|
||||
<translation>MBTiles мапи</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="164"/>
|
||||
<location filename="../src/map/maplist.cpp" line="166"/>
|
||||
<source>Orux maps</source>
|
||||
<translation>Orux мапи</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="167"/>
|
||||
<source>QuickChart maps</source>
|
||||
<translation>QuickChart мапи</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="166"/>
|
||||
<location filename="../src/map/maplist.cpp" line="169"/>
|
||||
<source>Osmdroid SQLite maps</source>
|
||||
<translation>Osmdroid SQLite мапи</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="169"/>
|
||||
<location filename="../src/map/maplist.cpp" line="172"/>
|
||||
<source>TrekBuddy maps/atlases</source>
|
||||
<translation>TrekBuddy мапи/атласи</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="170"/>
|
||||
<location filename="../src/map/maplist.cpp" line="173"/>
|
||||
<source>GeoTIFF images</source>
|
||||
<translation>GeoTIFF зображення</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="174"/>
|
||||
<location filename="../src/map/maplist.cpp" line="177"/>
|
||||
<source>All files</source>
|
||||
<translation>Всі файли</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="165"/>
|
||||
<location filename="../src/map/maplist.cpp" line="168"/>
|
||||
<source>TwoNav maps</source>
|
||||
<translation>TwoNav мапи</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="167"/>
|
||||
<location filename="../src/map/maplist.cpp" line="170"/>
|
||||
<source>Locus/OsmAnd/RMaps SQLite maps</source>
|
||||
<translation>Locus/OsmAnd/RMaps SQLite мапи</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="171"/>
|
||||
<location filename="../src/map/maplist.cpp" line="174"/>
|
||||
<source>World-file georeferenced images</source>
|
||||
<translation>Зображення з геоприв’язками World-файлу</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="173"/>
|
||||
<location filename="../src/map/maplist.cpp" line="176"/>
|
||||
<source>Online map sources</source>
|
||||
<translation>Онлайнові джерела мап</translation>
|
||||
</message>
|
||||
|
@ -287,22 +287,23 @@
|
||||
<context>
|
||||
<name>FileSelectWidget</name>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="41"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="44"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="49"/>
|
||||
<source>Select file</source>
|
||||
<translation>选择文件</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="51"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="59"/>
|
||||
<source>No output file selected.</source>
|
||||
<translation>未选择输出文件。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="61"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="69"/>
|
||||
<source>%1 is a directory.</source>
|
||||
<translation>%1 是一个目录。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="65"/>
|
||||
<location filename="../src/GUI/fileselectwidget.cpp" line="73"/>
|
||||
<source>%1 is not writable.</source>
|
||||
<translation>%1 不可写。</translation>
|
||||
</message>
|
||||
@ -1202,97 +1203,102 @@
|
||||
<context>
|
||||
<name>MapList</name>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="152"/>
|
||||
<location filename="../src/map/maplist.cpp" line="154"/>
|
||||
<source>Supported files</source>
|
||||
<translation>支持的文件</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="154"/>
|
||||
<location filename="../src/map/maplist.cpp" line="156"/>
|
||||
<source>AlpineQuest maps</source>
|
||||
<translation>AlpineQuest 地图</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="155"/>
|
||||
<location filename="../src/map/maplist.cpp" line="158"/>
|
||||
<source>Garmin IMG maps</source>
|
||||
<translation>佳明 IMG 地图</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="157"/>
|
||||
<location filename="../src/map/maplist.cpp" line="160"/>
|
||||
<source>Garmin JNX maps</source>
|
||||
<translation>佳明 JNX 地图</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="158"/>
|
||||
<location filename="../src/map/maplist.cpp" line="161"/>
|
||||
<source>BSB nautical charts</source>
|
||||
<translation>BSB 海图</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="159"/>
|
||||
<location filename="../src/map/maplist.cpp" line="157"/>
|
||||
<source>GEMF maps</source>
|
||||
<translation>GEMF 地图</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="160"/>
|
||||
<location filename="../src/map/maplist.cpp" line="162"/>
|
||||
<source>KMZ maps</source>
|
||||
<translation>KMZ 地图</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="161"/>
|
||||
<location filename="../src/map/maplist.cpp" line="163"/>
|
||||
<source>Mapsforge maps</source>
|
||||
<translation>Mapsforge 地图</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="162"/>
|
||||
<location filename="../src/map/maplist.cpp" line="164"/>
|
||||
<source>OziExplorer maps</source>
|
||||
<translation>OziExplorer 地图</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="163"/>
|
||||
<location filename="../src/map/maplist.cpp" line="165"/>
|
||||
<source>MBTiles maps</source>
|
||||
<translation>MBTiles 地图</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="164"/>
|
||||
<location filename="../src/map/maplist.cpp" line="166"/>
|
||||
<source>Orux maps</source>
|
||||
<translation>Orux 地图</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="167"/>
|
||||
<source>QuickChart maps</source>
|
||||
<translation>QuickChart 地图</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="165"/>
|
||||
<location filename="../src/map/maplist.cpp" line="168"/>
|
||||
<source>TwoNav maps</source>
|
||||
<translation>TwoNav 地图</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="166"/>
|
||||
<location filename="../src/map/maplist.cpp" line="169"/>
|
||||
<source>Osmdroid SQLite maps</source>
|
||||
<translation>Osmdroid SQLite 地图</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="167"/>
|
||||
<location filename="../src/map/maplist.cpp" line="170"/>
|
||||
<source>Locus/OsmAnd/RMaps SQLite maps</source>
|
||||
<translation>Locus/OsmAnd/RMaps SQLite 地图</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="169"/>
|
||||
<location filename="../src/map/maplist.cpp" line="172"/>
|
||||
<source>TrekBuddy maps/atlases</source>
|
||||
<translation>TrekBuddy 地图/地图集</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="170"/>
|
||||
<location filename="../src/map/maplist.cpp" line="173"/>
|
||||
<source>GeoTIFF images</source>
|
||||
<translation>GeoTIFF 图像</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="171"/>
|
||||
<location filename="../src/map/maplist.cpp" line="174"/>
|
||||
<source>World-file georeferenced images</source>
|
||||
<translation>World-file georeferenced 图像</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="173"/>
|
||||
<location filename="../src/map/maplist.cpp" line="176"/>
|
||||
<source>Online map sources</source>
|
||||
<translation>在线地图源</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/map/maplist.cpp" line="174"/>
|
||||
<location filename="../src/map/maplist.cpp" line="177"/>
|
||||
<source>All files</source>
|
||||
<translation>所有文件</translation>
|
||||
</message>
|
||||
|
@ -462,6 +462,20 @@
|
||||
<key>CFBundleTypeRole</key>
|
||||
<string>Viewer</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>CFBundleTypeExtensions</key>
|
||||
<array>
|
||||
<string>xml</string>
|
||||
</array>
|
||||
<key>CFBundleTypeMIMETypes</key>
|
||||
<array>
|
||||
<string>application/vnd.orux.map+xml</string>
|
||||
</array>
|
||||
<key>CFBundleTypeName</key>
|
||||
<string>Orux Map File</string>
|
||||
<key>CFBundleTypeRole</key>
|
||||
<string>Viewer</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>CFBundleTypeExtensions</key>
|
||||
<array>
|
||||
@ -1524,6 +1538,27 @@
|
||||
<string>application/vnd.twonav.trk</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>UTTypeIdentifier</key>
|
||||
<string>com.oruxmap.xml</string>
|
||||
<key>UTTypeReferenceURL</key>
|
||||
<string>https://www.oruxmaps.com/OruxMapsManual-9.0_en.pdf</string>
|
||||
<key>UTTypeDescription</key>
|
||||
<string>Orux Map 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.orux.map+xml</string>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
|
||||
<key>UTExportedTypeDeclarations</key>
|
||||
|
@ -22,7 +22,8 @@
|
||||
TwoNav RMaps, Garmin IMG & JNX maps, GeoTIFF images,
|
||||
BSB nautical charts, KMZ maps, AlpineQuest maps,
|
||||
Locus/OsmAnd/RMaps SQLite maps, Osmdroid SQLite maps,
|
||||
Mapsforge maps, QCT maps, ESRI world files).</li>
|
||||
Mapsforge maps, QCT maps, GEMF maps, Orux maps,
|
||||
ESRI world files).</li>
|
||||
<li>Elevation, speed, heart rate, cadence, power, temperature and
|
||||
gear ratio graphs.</li>
|
||||
<li>Support for multiple tracks in one view.</li>
|
||||
@ -105,5 +106,6 @@
|
||||
<mimetype>application/vnd.twonav.rte</mimetype>
|
||||
<mimetype>application/vnd.twonav.wpt</mimetype>
|
||||
<mimetype>application/vnd.cgtk.gemf</mimetype>
|
||||
<mimetype>application/vnd.orux.map+xml</mimetype>
|
||||
</mimetypes>
|
||||
</component>
|
||||
|
@ -15,4 +15,4 @@ Icon=gpxsee
|
||||
Terminal=false
|
||||
Type=Application
|
||||
Categories=Graphics;Viewer;Education;Geography;Maps;Sports;Qt
|
||||
MimeType=application/gpx+xml;application/vnd.garmin.tcx+xml;application/vnd.ant.fit;application/vnd.google-earth.kml+xml;application/vnd.fai.igc;application/vnd.nmea.nmea;application/vnd.oziexplorer.plt;application/vnd.oziexplorer.rte;application/vnd.oziexplorer.wpt;application/vnd.groundspeak.loc+xml;application/vnd.sigma.slf+xml;application/geo+json;application/vnd.naviter.seeyou.cup;application/vnd.garmin.gpi;application/vnd.suunto.sml+xml;image/jpeg;text/csv;application/vnd.garmin.img;application/vnd.garmin.jnx;application/vnd.garmin.gmap+xml;image/vnd.maptech.kap;application/vnd.oziexplorer.map;application/vnd.mapbox.mbtiles;application/vnd.twonav.rmap;application/vnd.trekbuddy.tba;application/vnd.gpxsee.map+xml;application/x-tar;image/tiff;application/vnd.google-earth.kmz;application/vnd.alpinequest.aqm;application/vnd.cgtk.gemf;application/vnd.rmaps.sqlite;application/vnd.osmdroid.sqlite;application/vnd.mapsforge.map;application/vnd.tomtom.ov2;application/vnd.tomtom.itn;application/vnd.esri.wld;application/vnd.onmove.omd;application/vnd.onmove.ghp;application/vnd.memory-map.qct;application/vnd.twonav.trk;application/vnd.twonav.rte;application/vnd.twonav.wpt
|
||||
MimeType=application/gpx+xml;application/vnd.garmin.tcx+xml;application/vnd.ant.fit;application/vnd.google-earth.kml+xml;application/vnd.fai.igc;application/vnd.nmea.nmea;application/vnd.oziexplorer.plt;application/vnd.oziexplorer.rte;application/vnd.oziexplorer.wpt;application/vnd.groundspeak.loc+xml;application/vnd.sigma.slf+xml;application/geo+json;application/vnd.naviter.seeyou.cup;application/vnd.garmin.gpi;application/vnd.suunto.sml+xml;image/jpeg;text/csv;application/vnd.garmin.img;application/vnd.garmin.jnx;application/vnd.garmin.gmap+xml;image/vnd.maptech.kap;application/vnd.oziexplorer.map;application/vnd.mapbox.mbtiles;application/vnd.twonav.rmap;application/vnd.trekbuddy.tba;application/vnd.gpxsee.map+xml;application/x-tar;image/tiff;application/vnd.google-earth.kmz;application/vnd.alpinequest.aqm;application/vnd.cgtk.gemf;application/vnd.rmaps.sqlite;application/vnd.osmdroid.sqlite;application/vnd.mapsforge.map;application/vnd.tomtom.ov2;application/vnd.tomtom.itn;application/vnd.esri.wld;application/vnd.onmove.omd;application/vnd.onmove.ghp;application/vnd.memory-map.qct;application/vnd.twonav.trk;application/vnd.twonav.rte;application/vnd.twonav.wpt;application/vnd.orux.map+xml
|
||||
|
@ -331,4 +331,12 @@
|
||||
<glob pattern="*.qct"/>
|
||||
</mime-type>
|
||||
|
||||
<mime-type type="application/vnd.orux.map+xml">
|
||||
<comment>Orux Map File</comment>
|
||||
<sub-class-of type="application/xml"/>
|
||||
<generic-icon name="application-xml"/>
|
||||
<root-XML namespaceURI="http://oruxtracker.com/app/res/calibration" localName="OruxTracker"/>
|
||||
<glob pattern="*.otrk2.xml"/>
|
||||
</mime-type>
|
||||
|
||||
</mime-info>
|
||||
|
@ -37,7 +37,7 @@ Unicode true
|
||||
; The name of the installer
|
||||
Name "GPXSee"
|
||||
; Program version
|
||||
!define VERSION "11.2"
|
||||
!define VERSION "11.5"
|
||||
|
||||
; The file to write
|
||||
OutFile "GPXSee-${VERSION}_x64.exe"
|
||||
@ -313,6 +313,7 @@ SectionEnd
|
||||
!endif
|
||||
|
||||
SectionGroup "Localization" SEC_LOCALIZATION
|
||||
!insertmacro LOCALIZATION "Catalan" "ca"
|
||||
!insertmacro LOCALIZATION "Chinese (Simplified)" "zh"
|
||||
!insertmacro LOCALIZATION "Czech" "cs"
|
||||
!insertmacro LOCALIZATION "Danish" "da"
|
||||
|
@ -28,10 +28,17 @@ AreaItem::AreaItem(const Area &area, Map *map, GraphicsItem *parent)
|
||||
_map = map;
|
||||
_digitalZoom = 0;
|
||||
|
||||
_width = 2;
|
||||
_opacity = 0.5;
|
||||
QBrush brush(Qt::SolidPattern);
|
||||
_pen = QPen(brush, _width);
|
||||
if (_area.style().isValid()) {
|
||||
_width = (_area.style().pen().style() == Qt::NoPen)
|
||||
? 0 : _area.style().pen().width();
|
||||
_pen = _area.style().pen();
|
||||
_brush = _area.style().brush();
|
||||
} else {
|
||||
_width = 2;
|
||||
_opacity = 0.5;
|
||||
QBrush brush(Qt::SolidPattern);
|
||||
_pen = QPen(brush, _width);
|
||||
}
|
||||
|
||||
updatePainterPath();
|
||||
|
||||
@ -91,6 +98,8 @@ void AreaItem::setMap(Map *map)
|
||||
|
||||
void AreaItem::setColor(const QColor &color)
|
||||
{
|
||||
if (_area.style().isValid())
|
||||
return;
|
||||
if (_pen.color() == color)
|
||||
return;
|
||||
|
||||
@ -104,6 +113,8 @@ void AreaItem::setColor(const QColor &color)
|
||||
|
||||
void AreaItem::setOpacity(qreal opacity)
|
||||
{
|
||||
if (_area.style().isValid())
|
||||
return;
|
||||
if (_opacity == opacity)
|
||||
return;
|
||||
|
||||
@ -117,6 +128,8 @@ void AreaItem::setOpacity(qreal opacity)
|
||||
|
||||
void AreaItem::setWidth(qreal width)
|
||||
{
|
||||
if (_area.style().isValid())
|
||||
return;
|
||||
if (_width == width)
|
||||
return;
|
||||
|
||||
@ -128,6 +141,8 @@ void AreaItem::setWidth(qreal width)
|
||||
|
||||
void AreaItem::setStyle(Qt::PenStyle style)
|
||||
{
|
||||
if (_area.style().isValid())
|
||||
return;
|
||||
if (_pen.style() == style)
|
||||
return;
|
||||
|
||||
|
@ -5,13 +5,16 @@
|
||||
#include <QFileInfo>
|
||||
#include <QApplication>
|
||||
#include <QFontMetrics>
|
||||
#include "common/util.h"
|
||||
#include "fileselectwidget.h"
|
||||
|
||||
|
||||
FileSelectWidget::FileSelectWidget(QWidget *parent) : QWidget(parent)
|
||||
{
|
||||
_edit = new QLineEdit();
|
||||
#ifndef Q_OS_ANDROID
|
||||
#ifdef Q_OS_ANDROID
|
||||
_edit->setDisabled(true);
|
||||
#else // Q_OS_ANDROID
|
||||
QFontMetrics fm(QApplication::font());
|
||||
_edit->setMinimumWidth(fm.averageCharWidth() * (QDir::homePath().length()
|
||||
+ 12));
|
||||
@ -37,39 +40,44 @@ FileSelectWidget::FileSelectWidget(QWidget *parent) : QWidget(parent)
|
||||
|
||||
void FileSelectWidget::browse()
|
||||
{
|
||||
#ifdef Q_OS_ANDROID
|
||||
_fileName = QFileDialog::getSaveFileName(this, tr("Select file"));
|
||||
if (!_fileName.isEmpty())
|
||||
_edit->setText(Util::displayName(_fileName));
|
||||
#else // Q_OS_ANDROID
|
||||
QFileInfo fi(_edit->text());
|
||||
QString fileName = QFileDialog::getSaveFileName(this, tr("Select file"),
|
||||
fi.dir().absolutePath(), _filter);
|
||||
|
||||
if (!fileName.isEmpty())
|
||||
_edit->setText(fileName);
|
||||
#endif // Q_OS_ANDROID
|
||||
}
|
||||
|
||||
bool FileSelectWidget::checkFile(QString &error) const
|
||||
{
|
||||
if (_edit->text().isEmpty()) {
|
||||
if (file().isEmpty()) {
|
||||
error = tr("No output file selected.");
|
||||
return false;
|
||||
}
|
||||
|
||||
QFile file(_edit->text());
|
||||
QFileInfo fi(file);
|
||||
QFile f(file());
|
||||
QFileInfo fi(f);
|
||||
bool exists = fi.exists();
|
||||
bool opened = false;
|
||||
|
||||
if (exists && fi.isDir()) {
|
||||
error = tr("%1 is a directory.").arg(file.fileName());
|
||||
error = tr("%1 is a directory.").arg(f.fileName());
|
||||
return false;
|
||||
} else if ((exists && !fi.isWritable())
|
||||
|| !(opened = file.open(QFile::Append))) {
|
||||
error = tr("%1 is not writable.").arg(file.fileName());
|
||||
|| !(opened = f.open(QFile::Append))) {
|
||||
error = tr("%1 is not writable.").arg(f.fileName());
|
||||
return false;
|
||||
}
|
||||
|
||||
if (opened) {
|
||||
file.close();
|
||||
f.close();
|
||||
if (!exists)
|
||||
file.remove();
|
||||
f.remove();
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -14,9 +14,13 @@ class FileSelectWidget : public QWidget
|
||||
public:
|
||||
FileSelectWidget(QWidget *parent = 0);
|
||||
|
||||
#ifdef Q_OS_ANDROID
|
||||
QString file() const {return _fileName;}
|
||||
#else // Q_OS_ANDROID
|
||||
QString file() const {return _edit->text();}
|
||||
void setFile(const QString &file) {_edit->setText(file);}
|
||||
void setFilter(const QString &filter) {_filter = filter;}
|
||||
#endif // Q_OS_ANDROID
|
||||
bool checkFile(QString &error) const;
|
||||
|
||||
private slots:
|
||||
@ -29,8 +33,11 @@ private:
|
||||
#else // Q_OS_WIN32
|
||||
QToolButton *_button;
|
||||
#endif // Q_OS_WIN32
|
||||
|
||||
#ifdef Q_OS_ANDROID
|
||||
QString _fileName;
|
||||
#else // Q_OS_ANDROID
|
||||
QString _filter;
|
||||
#endif // Q_OS_ANDROID
|
||||
};
|
||||
|
||||
#endif // FILESELECTWIDGET_H
|
||||
|
@ -11,7 +11,8 @@ GraphItem::GraphItem(const Graph &graph, GraphType type, int width,
|
||||
Q_ASSERT(_graph.isValid());
|
||||
|
||||
_units = Metric;
|
||||
_pen = QPen(color, width, style, Qt::FlatCap);
|
||||
_pen = QPen(graph.color().isValid() ? graph.color() : color, width, style,
|
||||
Qt::FlatCap);
|
||||
_sx = 0; _sy = 0;
|
||||
_time = _graph.hasTime();
|
||||
setZValue(2.0);
|
||||
@ -54,6 +55,8 @@ void GraphItem::setGraphType(GraphType type)
|
||||
|
||||
void GraphItem::setColor(const QColor &color)
|
||||
{
|
||||
if (_graph.color().isValid())
|
||||
return;
|
||||
if (_pen.color() == color)
|
||||
return;
|
||||
|
||||
|
@ -32,15 +32,16 @@ static inline unsigned segments(qreal distance)
|
||||
Units PathItem::_units = Metric;
|
||||
QTimeZone PathItem::_timeZone = QTimeZone::utc();
|
||||
|
||||
PathItem::PathItem(const Path &path, Map *map, QGraphicsItem *parent)
|
||||
: GraphicsItem(parent), _path(path), _map(map), _graph(0)
|
||||
PathItem::PathItem(const Path &path, const LineStyle &style, Map *map,
|
||||
QGraphicsItem *parent) : GraphicsItem(parent), _path(path), _style(style),
|
||||
_map(map), _graph(0)
|
||||
{
|
||||
Q_ASSERT(_path.isValid());
|
||||
|
||||
_digitalZoom = 0;
|
||||
_width = 3;
|
||||
QBrush brush(Qt::SolidPattern);
|
||||
_pen = QPen(brush, _width);
|
||||
_width = (_style.width() >= 0) ? _style.width() : 3;
|
||||
_pen = _style.color().isValid()
|
||||
? QPen(_style.color(), _width) : QPen(QBrush(Qt::SolidPattern), _width);
|
||||
_showMarker = true;
|
||||
_showTicks = false;
|
||||
_markerInfoType = MarkerInfoItem::None;
|
||||
@ -153,6 +154,8 @@ void PathItem::setMap(Map *map)
|
||||
|
||||
void PathItem::setColor(const QColor &color)
|
||||
{
|
||||
if (_style.color().isValid())
|
||||
return;
|
||||
if (_pen.color() == color)
|
||||
return;
|
||||
|
||||
@ -166,6 +169,8 @@ void PathItem::setColor(const QColor &color)
|
||||
|
||||
void PathItem::setWidth(qreal width)
|
||||
{
|
||||
if (_style.color().isValid())
|
||||
return;
|
||||
if (_width == width)
|
||||
return;
|
||||
|
||||
|
@ -5,6 +5,8 @@
|
||||
#include <QPen>
|
||||
#include <QTimeZone>
|
||||
#include "data/path.h"
|
||||
#include "data/link.h"
|
||||
#include "data/style.h"
|
||||
#include "graphicsscene.h"
|
||||
#include "markerinfoitem.h"
|
||||
#include "units.h"
|
||||
@ -19,7 +21,8 @@ class PathItem : public QObject, public GraphicsItem
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
PathItem(const Path &path, Map *map, QGraphicsItem *parent = 0);
|
||||
PathItem(const Path &path, const LineStyle &style, Map *map,
|
||||
QGraphicsItem *parent = 0);
|
||||
virtual ~PathItem() {}
|
||||
|
||||
QPainterPath shape() const {return _shape;}
|
||||
@ -66,6 +69,11 @@ protected:
|
||||
void hoverLeaveEvent(QGraphicsSceneHoverEvent *event);
|
||||
void mousePressEvent(QGraphicsSceneMouseEvent *event);
|
||||
|
||||
QString _name;
|
||||
QString _desc;
|
||||
QString _comment;
|
||||
QVector<Link> _links;
|
||||
|
||||
static Units _units;
|
||||
static QTimeZone _timeZone;
|
||||
|
||||
@ -81,6 +89,7 @@ private:
|
||||
unsigned tickSize() const;
|
||||
|
||||
Path _path;
|
||||
LineStyle _style;
|
||||
Map *_map;
|
||||
QList<GraphItem *> _graphs;
|
||||
GraphItem *_graph;
|
||||
|
@ -27,8 +27,8 @@ PDFExportDialog::PDFExportDialog(PDFExport &exp, Units units, QWidget *parent)
|
||||
#ifndef Q_OS_ANDROID
|
||||
_fileSelect->setFilter(tr("PDF files") + " (*.pdf);;" + tr("All files")
|
||||
+ " (*)");
|
||||
#endif // Q_OS_ANDROID
|
||||
_fileSelect->setFile(_export.fileName);
|
||||
#endif // Q_OS_ANDROID
|
||||
|
||||
_paperSize = new QComboBox();
|
||||
_paperSize->addItem("A2", QPageSize::PageSizeId::A2);
|
||||
|
@ -24,8 +24,8 @@ PNGExportDialog::PNGExportDialog(PNGExport &exp, QWidget *parent)
|
||||
#ifndef Q_OS_ANDROID
|
||||
_fileSelect->setFilter(tr("PNG files") + " (*.png);;" + tr("All files")
|
||||
+ " (*)");
|
||||
#endif // Q_OS_ANDROID
|
||||
_fileSelect->setFile(_export.fileName);
|
||||
#endif // Q_OS_ANDROID
|
||||
|
||||
_width = new QSpinBox();
|
||||
_width->setMinimum(256);
|
||||
|
@ -36,7 +36,7 @@ ToolTip RouteItem::info() const
|
||||
}
|
||||
|
||||
RouteItem::RouteItem(const Route &route, Map *map, QGraphicsItem *parent)
|
||||
: PathItem(route.path(), map, parent)
|
||||
: PathItem(route.path(), route.style(), map, parent)
|
||||
{
|
||||
const RouteData &waypoints = route.data();
|
||||
|
||||
|
@ -1,7 +1,6 @@
|
||||
#ifndef ROUTEITEM_H
|
||||
#define ROUTEITEM_H
|
||||
|
||||
#include "data/link.h"
|
||||
#include "pathitem.h"
|
||||
|
||||
class Map;
|
||||
@ -26,11 +25,6 @@ public:
|
||||
QDateTime date() const {return QDateTime();}
|
||||
|
||||
private:
|
||||
QString _name;
|
||||
QString _desc;
|
||||
QString _comment;
|
||||
QVector<Link> _links;
|
||||
|
||||
QVector<WaypointItem*> _waypoints;
|
||||
};
|
||||
|
||||
|
@ -41,7 +41,7 @@ ToolTip TrackItem::info() const
|
||||
}
|
||||
|
||||
TrackItem::TrackItem(const Track &track, Map *map, QGraphicsItem *parent)
|
||||
: PathItem(track.path(), map, parent)
|
||||
: PathItem(track.path(), track.style(), map, parent)
|
||||
{
|
||||
_name = track.name();
|
||||
_desc = track.description();
|
||||
|
@ -2,7 +2,6 @@
|
||||
#define TRACKITEM_H
|
||||
|
||||
#include <QDateTime>
|
||||
#include "data/link.h"
|
||||
#include "pathitem.h"
|
||||
|
||||
class Map;
|
||||
@ -19,10 +18,6 @@ public:
|
||||
QDateTime date() const {return _date;}
|
||||
|
||||
private:
|
||||
QString _name;
|
||||
QString _desc;
|
||||
QString _comment;
|
||||
QVector<Link> _links;
|
||||
QDateTime _date;
|
||||
qreal _time;
|
||||
qreal _movingTime;
|
||||
|
@ -77,12 +77,14 @@ WaypointItem::WaypointItem(const Waypoint &waypoint, Map *map,
|
||||
_waypoint = waypoint;
|
||||
_showLabel = true;
|
||||
_showIcon = false;
|
||||
_size = 8;
|
||||
_color = Qt::black;
|
||||
_size = (_waypoint.style().size() >= 0)
|
||||
? _waypoint.style().size() : 8;
|
||||
_color = (_waypoint.style().color().isValid())
|
||||
? _waypoint.style().color() : Qt::black;
|
||||
|
||||
_icon = (_waypoint.icon().isNull())
|
||||
_icon = (_waypoint.style().icon().isNull())
|
||||
? Waypoint::symbolIcon(_waypoint.symbol())
|
||||
: &_waypoint.icon();
|
||||
: &_waypoint.style().icon();
|
||||
|
||||
_font.setPixelSize(FS(_size));
|
||||
_font.setFamily(FONT_FAMILY);
|
||||
@ -98,19 +100,28 @@ void WaypointItem::updateCache()
|
||||
{
|
||||
QPainterPath p;
|
||||
qreal pointSize = _font.bold() ? HS(_size) : _size;
|
||||
const QPixmap &icon = _waypoint.style().icon();
|
||||
|
||||
if (_showLabel) {
|
||||
if (_showLabel && !_waypoint.name().isEmpty()) {
|
||||
QFontMetrics fm(_font);
|
||||
_labelBB = fm.tightBoundingRect(_waypoint.name());
|
||||
|
||||
if (_showIcon && _icon) {
|
||||
if (_font.bold())
|
||||
p.addRect(-_icon->width() * 0.625, -_icon->height() * 1.25,
|
||||
p.addRect(-_icon->width() * 0.625, icon.isNull()
|
||||
? -_icon->height() * 1.25 : -_icon->height() * 0.625,
|
||||
_icon->width() * 1.25, _icon->height() * 1.25);
|
||||
else
|
||||
p.addRect(-_icon->width()/2.0, -_icon->height(), _icon->width(),
|
||||
p.addRect(-_icon->width()/2.0, icon.isNull()
|
||||
? -_icon->height() : -_icon->height()/2, _icon->width(),
|
||||
_icon->height());
|
||||
p.addRect(0, 0, _labelBB.width(), _labelBB.height() + fm.descent());
|
||||
|
||||
if (icon.isNull())
|
||||
p.addRect(0, 0, _labelBB.width(), _labelBB.height()
|
||||
+ fm.descent());
|
||||
else
|
||||
p.addRect(_icon->width()/2, _icon->height()/2, _labelBB.width(),
|
||||
_labelBB.height() + fm.descent());
|
||||
} else {
|
||||
p.addRect(-pointSize/2, -pointSize/2, pointSize, pointSize);
|
||||
p.addRect(pointSize/2, pointSize/2, _labelBB.width(),
|
||||
@ -119,10 +130,12 @@ void WaypointItem::updateCache()
|
||||
} else {
|
||||
if (_showIcon && _icon) {
|
||||
if (_font.bold())
|
||||
p.addRect(-_icon->width() * 0.625, -_icon->height() * 1.25,
|
||||
p.addRect(-_icon->width() * 0.625, icon.isNull()
|
||||
? -_icon->height() * 1.25 : -_icon->height() * 0.625,
|
||||
_icon->width() * 1.25, _icon->height() * 1.25);
|
||||
else
|
||||
p.addRect(-_icon->width()/2, -_icon->height(), _icon->width(),
|
||||
p.addRect(-_icon->width()/2, icon.isNull()
|
||||
? -_icon->height() : -_icon->height()/2, _icon->width(),
|
||||
_icon->height());
|
||||
} else
|
||||
p.addRect(-pointSize/2, -pointSize/2, pointSize, pointSize);
|
||||
@ -137,15 +150,20 @@ void WaypointItem::paint(QPainter *painter,
|
||||
Q_UNUSED(option);
|
||||
Q_UNUSED(widget);
|
||||
qreal pointSize = _font.bold() ? HS(_size) : _size;
|
||||
const QPixmap &icon = _waypoint.style().icon();
|
||||
|
||||
painter->setPen(_color);
|
||||
|
||||
if (_showLabel) {
|
||||
if (_showLabel && !_waypoint.name().isEmpty()) {
|
||||
painter->setFont(_font);
|
||||
if (_showIcon && _icon)
|
||||
painter->drawText(-qMax(_labelBB.x(), 0), _labelBB.height(),
|
||||
_waypoint.name());
|
||||
else
|
||||
if (_showIcon && _icon) {
|
||||
if (icon.isNull())
|
||||
painter->drawText(-qMax(_labelBB.x(), 0), _labelBB.height(),
|
||||
_waypoint.name());
|
||||
else
|
||||
painter->drawText(_icon->width()/2 - qMax(_labelBB.x(), 0),
|
||||
_icon->height()/2 + _labelBB.height(), _waypoint.name());
|
||||
} else
|
||||
painter->drawText(pointSize/2 - qMax(_labelBB.x(), 0), pointSize/2
|
||||
+ _labelBB.height(), _waypoint.name());
|
||||
}
|
||||
@ -153,11 +171,13 @@ void WaypointItem::paint(QPainter *painter,
|
||||
painter->setBrush(QBrush(_color, Qt::SolidPattern));
|
||||
if (_showIcon && _icon) {
|
||||
if (_font.bold())
|
||||
painter->drawPixmap(-_icon->width() * 0.625, -_icon->height() * 1.25,
|
||||
painter->drawPixmap(-_icon->width() * 0.625, icon.isNull()
|
||||
? -_icon->height() * 1.25 : -_icon->height() * 0.625,
|
||||
_icon->scaled(_icon->width() * 1.25, _icon->height() * 1.25,
|
||||
Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
|
||||
else
|
||||
painter->drawPixmap(-_icon->width()/2.0, -_icon->height(), *_icon);
|
||||
painter->drawPixmap(-_icon->width()/2.0, icon.isNull()
|
||||
? -_icon->height() : -_icon->height()/2, *_icon);
|
||||
} else
|
||||
painter->drawEllipse(-pointSize/2, -pointSize/2, pointSize, pointSize);
|
||||
|
||||
@ -168,6 +188,8 @@ void WaypointItem::paint(QPainter *painter,
|
||||
|
||||
void WaypointItem::setSize(int size)
|
||||
{
|
||||
if (_waypoint.style().size() >= 0)
|
||||
return;
|
||||
if (_size == size)
|
||||
return;
|
||||
|
||||
@ -179,6 +201,8 @@ void WaypointItem::setSize(int size)
|
||||
|
||||
void WaypointItem::setColor(const QColor &color)
|
||||
{
|
||||
if (_waypoint.style().color().isValid())
|
||||
return;
|
||||
if (_color == color)
|
||||
return;
|
||||
|
||||
|
@ -68,7 +68,7 @@ void NetworkTimeout::timerEvent(QTimerEvent *ev)
|
||||
return;
|
||||
QNetworkReply *reply = static_cast<QNetworkReply*>(parent());
|
||||
if (reply->isRunning())
|
||||
reply->close();
|
||||
reply->abort();
|
||||
_timer.stop();
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
#include <cctype>
|
||||
#include <cmath>
|
||||
#include <QFileInfo>
|
||||
#include <QTemporaryDir>
|
||||
#ifdef Q_OS_ANDROID
|
||||
#include <QUrl>
|
||||
#include <QCoreApplication>
|
||||
@ -139,3 +140,9 @@ QString Util::displayName(const QString &path)
|
||||
return path;
|
||||
#endif // Q_OS_ANDROID
|
||||
}
|
||||
|
||||
const QTemporaryDir &Util::tempDir()
|
||||
{
|
||||
static QTemporaryDir dir;
|
||||
return dir;
|
||||
}
|
||||
|
@ -3,12 +3,15 @@
|
||||
|
||||
#include <QString>
|
||||
|
||||
class QTemporaryDir;
|
||||
|
||||
namespace Util
|
||||
{
|
||||
int str2int(const char *str, int len);
|
||||
double niceNum(double x, bool round);
|
||||
QString file2name(const QString &path);
|
||||
QString displayName(const QString &path);
|
||||
const QTemporaryDir &tempDir();
|
||||
}
|
||||
|
||||
#endif // UTIL_H
|
||||
|
@ -4,6 +4,7 @@
|
||||
#include <QString>
|
||||
#include <QList>
|
||||
#include "common/polygon.h"
|
||||
#include "style.h"
|
||||
|
||||
class Area
|
||||
{
|
||||
@ -27,6 +28,7 @@ public:
|
||||
const QString &description() const {return _desc;}
|
||||
const QList<Polygon> &polygons() const {return _polygons;}
|
||||
const RectC &boundingRect() const {return _boundingRect;}
|
||||
const PolygonStyle &style() const {return _style;}
|
||||
|
||||
bool isValid() const
|
||||
{
|
||||
@ -47,11 +49,13 @@ public:
|
||||
|
||||
void setName(const QString &name) {_name = name;}
|
||||
void setDescription(const QString &desc) {_desc = desc;}
|
||||
void setStyle(const PolygonStyle &style) {_style = style;}
|
||||
|
||||
private:
|
||||
QList<Polygon> _polygons;
|
||||
QString _name;
|
||||
QString _desc;
|
||||
PolygonStyle _style;
|
||||
RectC _boundingRect;
|
||||
};
|
||||
|
||||
|
@ -53,6 +53,7 @@ static QMultiMap<QString, Parser*> parsers()
|
||||
map.insert("gpx", &gpx);
|
||||
map.insert("tcx", &tcx);
|
||||
map.insert("kml", &kml);
|
||||
map.insert("kmz", &kml);
|
||||
map.insert("fit", &fit);
|
||||
map.insert("csv", &csv);
|
||||
map.insert("igc", &igc);
|
||||
@ -162,7 +163,7 @@ QString Data::formats()
|
||||
+ qApp->translate("Data", "IGC files") + " (*.igc);;"
|
||||
+ qApp->translate("Data", "ITN files") + " (*.itn);;"
|
||||
+ qApp->translate("Data", "JPEG images") + " (*.jpg *.jpeg);;"
|
||||
+ qApp->translate("Data", "KML files") + " (*.kml);;"
|
||||
+ qApp->translate("Data", "KML files") + " (*.kml *.kmz);;"
|
||||
+ qApp->translate("Data", "LOC files") + " (*.loc);;"
|
||||
+ qApp->translate("Data", "NMEA files") + " (*.nmea);;"
|
||||
+ qApp->translate("Data", "ONmove files") + " (*.omd *.ghp);;"
|
||||
|
@ -2,6 +2,109 @@
|
||||
#include <QJsonArray>
|
||||
#include "geojsonparser.h"
|
||||
|
||||
#define MARKER_SIZE_MEDIUM 12
|
||||
#define MARKER_SIZE_SMALL 8
|
||||
#define MARKER_SIZE_LARGE 16
|
||||
|
||||
static int markerSize(const QString &str)
|
||||
{
|
||||
if (str == "small")
|
||||
return MARKER_SIZE_SMALL;
|
||||
else if (str == "medium")
|
||||
return MARKER_SIZE_MEDIUM;
|
||||
else if (str == "large")
|
||||
return MARKER_SIZE_LARGE;
|
||||
else
|
||||
return -1;
|
||||
}
|
||||
|
||||
static void setAreaProperties(Area &area, const QJsonValue &properties)
|
||||
{
|
||||
if (!properties.isObject())
|
||||
return;
|
||||
QJsonObject o(properties.toObject());
|
||||
|
||||
if (o["name"].isString())
|
||||
area.setName(o["name"].toString());
|
||||
if (o["title"].isString())
|
||||
area.setName(o["title"].toString());
|
||||
if (o["description"].isString())
|
||||
area.setDescription(o["description"].toString());
|
||||
|
||||
QColor strokeColor(0x55, 0x55, 0x55);
|
||||
QColor fillColor(0x55, 0x55, 0x55);
|
||||
double strokeWidth = 2;
|
||||
|
||||
if (o["stroke"].isString())
|
||||
strokeColor = QColor(o["stroke"].toString());
|
||||
if (o["stroke-opacity"].isDouble())
|
||||
strokeColor.setAlphaF(o["stroke-opacity"].toDouble());
|
||||
if (o["stroke-width"].isDouble())
|
||||
strokeWidth = o["stroke-width"].toDouble();
|
||||
if (o["fill"].isString())
|
||||
fillColor = QColor(o["fill"].toString());
|
||||
if (o["fill-opacity"].isDouble())
|
||||
fillColor.setAlphaF(o["fill-opacity"].toDouble());
|
||||
else
|
||||
fillColor.setAlphaF(0.6);
|
||||
|
||||
area.setStyle(PolygonStyle(QPen(strokeColor, strokeWidth),
|
||||
QBrush(fillColor)));
|
||||
}
|
||||
|
||||
static void setTrackProperties(TrackData &track, const QJsonValue &properties)
|
||||
{
|
||||
if (!properties.isObject())
|
||||
return;
|
||||
QJsonObject o(properties.toObject());
|
||||
|
||||
if (o["name"].isString())
|
||||
track.setName(o["name"].toString());
|
||||
if (o["title"].isString())
|
||||
track.setName(o["title"].toString());
|
||||
if (o["description"].isString())
|
||||
track.setDescription(o["description"].toString());
|
||||
|
||||
QColor color(0x55, 0x55, 0x55);
|
||||
double width = 2;
|
||||
|
||||
if (o["stroke"].isString())
|
||||
color = QColor(o["stroke"].toString());
|
||||
if (o["stroke-opacity"].isDouble())
|
||||
color.setAlphaF(o["stroke-opacity"].toDouble());
|
||||
if (o["stroke-width"].isDouble())
|
||||
width = o["stroke-width"].toDouble();
|
||||
|
||||
track.setStyle(LineStyle(color, width));
|
||||
}
|
||||
|
||||
static void setWaypointProperties(Waypoint &waypoint,
|
||||
const QJsonValue &properties)
|
||||
{
|
||||
if (!properties.isObject())
|
||||
return;
|
||||
QJsonObject o(properties.toObject());
|
||||
|
||||
if (o["name"].isString())
|
||||
waypoint.setName(o["name"].toString());
|
||||
if (o["title"].isString())
|
||||
waypoint.setName(o["title"].toString());
|
||||
if (o["description"].isString())
|
||||
waypoint.setDescription(o["description"].toString());
|
||||
|
||||
QColor color(0x7e, 0x7e, 0x7e);
|
||||
int size = MARKER_SIZE_MEDIUM;
|
||||
|
||||
if (o["marker-color"].isString())
|
||||
color = QColor(o["marker-color"].toString());
|
||||
if (o["marker-symbol"].isString())
|
||||
waypoint.setSymbol(o["marker-symbol"].toString());
|
||||
if (o["marker-size"].isString())
|
||||
size = markerSize(o["marker-size"].toString());
|
||||
|
||||
waypoint.setStyle(PointStyle(QPixmap(), color, size));
|
||||
}
|
||||
|
||||
|
||||
GeoJSONParser::Type GeoJSONParser::type(const QJsonObject &json)
|
||||
{
|
||||
@ -30,7 +133,7 @@ GeoJSONParser::Type GeoJSONParser::type(const QJsonObject &json)
|
||||
}
|
||||
|
||||
bool GeoJSONParser::point(const QJsonArray &coordinates, Waypoint &waypoint,
|
||||
const QJsonObject &properties)
|
||||
const QJsonValue &properties)
|
||||
{
|
||||
if (coordinates.count() < 2 || !coordinates.at(0).isDouble()
|
||||
|| !coordinates.at(1).isDouble()) {
|
||||
@ -38,23 +141,18 @@ bool GeoJSONParser::point(const QJsonArray &coordinates, Waypoint &waypoint,
|
||||
return false;
|
||||
}
|
||||
|
||||
setWaypointProperties(waypoint, properties);
|
||||
|
||||
waypoint.setCoordinates(Coordinates(coordinates.at(0).toDouble(),
|
||||
coordinates.at(1).toDouble()));
|
||||
if (coordinates.count() == 3 && coordinates.at(2).isDouble())
|
||||
waypoint.setElevation(coordinates.at(2).toDouble());
|
||||
if (properties.contains("title") && properties["title"].isString())
|
||||
waypoint.setName(properties["title"].toString());
|
||||
if (properties.contains("name") && properties["name"].isString())
|
||||
waypoint.setName(properties["name"].toString());
|
||||
if (properties.contains("description")
|
||||
&& properties["description"].isString())
|
||||
waypoint.setDescription(properties["description"].toString());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool GeoJSONParser::multiPoint(const QJsonArray &coordinates,
|
||||
QVector<Waypoint> &waypoints, const QJsonObject &properties)
|
||||
QVector<Waypoint> &waypoints, const QJsonValue &properties)
|
||||
{
|
||||
for (int i = 0; i < coordinates.size(); i++) {
|
||||
if (!coordinates.at(i).isArray()) {
|
||||
@ -92,15 +190,9 @@ bool GeoJSONParser::lineString(const QJsonArray &coordinates,
|
||||
}
|
||||
|
||||
bool GeoJSONParser::lineString(const QJsonArray &coordinates, TrackData &track,
|
||||
const QJsonObject &properties)
|
||||
const QJsonValue &properties)
|
||||
{
|
||||
if (properties.contains("title") && properties["title"].isString())
|
||||
track.setName(properties["title"].toString());
|
||||
if (properties.contains("name") && properties["name"].isString())
|
||||
track.setName(properties["name"].toString());
|
||||
if (properties.contains("description")
|
||||
&& properties["description"].isString())
|
||||
track.setDescription(properties["description"].toString());
|
||||
setTrackProperties(track, properties);
|
||||
|
||||
track.append(SegmentData());
|
||||
|
||||
@ -110,15 +202,9 @@ bool GeoJSONParser::lineString(const QJsonArray &coordinates, TrackData &track,
|
||||
}
|
||||
|
||||
bool GeoJSONParser::multiLineString(const QJsonArray &coordinates,
|
||||
TrackData &track, const QJsonObject &properties)
|
||||
TrackData &track, const QJsonValue &properties)
|
||||
{
|
||||
if (properties.contains("title") && properties["title"].isString())
|
||||
track.setName(properties["title"].toString());
|
||||
if (properties.contains("name") && properties["name"].isString())
|
||||
track.setName(properties["name"].toString());
|
||||
if (properties.contains("description")
|
||||
&& properties["description"].isString())
|
||||
track.setDescription(properties["description"].toString());
|
||||
setTrackProperties(track, properties);
|
||||
|
||||
for (int i = 0; i < coordinates.size(); i++) {
|
||||
if (!coordinates.at(i).isArray()) {
|
||||
@ -163,15 +249,9 @@ bool GeoJSONParser::polygon(const QJsonArray &coordinates, ::Polygon &pg)
|
||||
}
|
||||
|
||||
bool GeoJSONParser::polygon(const QJsonArray &coordinates, Area &area,
|
||||
const QJsonObject &properties)
|
||||
const QJsonValue &properties)
|
||||
{
|
||||
if (properties.contains("title") && properties["title"].isString())
|
||||
area.setName(properties["title"].toString());
|
||||
if (properties.contains("name") && properties["name"].isString())
|
||||
area.setName(properties["name"].toString());
|
||||
if (properties.contains("description")
|
||||
&& properties["description"].isString())
|
||||
area.setDescription(properties["description"].toString());
|
||||
setAreaProperties(area, properties);
|
||||
|
||||
::Polygon p;
|
||||
if (!polygon(coordinates, p))
|
||||
@ -182,15 +262,9 @@ bool GeoJSONParser::polygon(const QJsonArray &coordinates, Area &area,
|
||||
}
|
||||
|
||||
bool GeoJSONParser::multiPolygon(const QJsonArray &coordinates,
|
||||
Area &area, const QJsonObject &properties)
|
||||
Area &area, const QJsonValue &properties)
|
||||
{
|
||||
if (properties.contains("title") && properties["title"].isString())
|
||||
area.setName(properties["title"].toString());
|
||||
if (properties.contains("name") && properties["name"].isString())
|
||||
area.setName(properties["name"].toString());
|
||||
if (properties.contains("description")
|
||||
&& properties["description"].isString())
|
||||
area.setDescription(properties["description"].toString());
|
||||
setAreaProperties(area, properties);
|
||||
|
||||
for (int i = 0; i < coordinates.size(); i++) {
|
||||
if (!coordinates.at(i).isArray()) {
|
||||
@ -209,7 +283,7 @@ bool GeoJSONParser::multiPolygon(const QJsonArray &coordinates,
|
||||
|
||||
bool GeoJSONParser::geometryCollection(const QJsonObject &json,
|
||||
QList<TrackData> &tracks, QList<Area> &areas,
|
||||
QVector<Waypoint> &waypoints, const QJsonObject &properties)
|
||||
QVector<Waypoint> &waypoints, const QJsonValue &properties)
|
||||
{
|
||||
if (!json.contains("geometries") || !json["geometries"].isArray()) {
|
||||
_errorString = "Invalid/missing GeometryCollection geometries array";
|
||||
@ -273,7 +347,7 @@ bool GeoJSONParser::geometryCollection(const QJsonObject &json,
|
||||
bool GeoJSONParser::feature(const QJsonObject &json, QList<TrackData> &tracks,
|
||||
QList<Area> &areas, QVector<Waypoint> &waypoints)
|
||||
{
|
||||
QJsonObject properties(json["properties"].toObject());
|
||||
QJsonValue properties(json["properties"]);
|
||||
QJsonObject geometry(json["geometry"].toObject());
|
||||
|
||||
switch (type(geometry)) {
|
||||
|
@ -31,22 +31,22 @@ private:
|
||||
|
||||
Type type(const QJsonObject &json);
|
||||
bool point(const QJsonArray &coordinates, Waypoint &waypoint,
|
||||
const QJsonObject &properties = QJsonObject());
|
||||
const QJsonValue &properties = QJsonValue());
|
||||
bool multiPoint(const QJsonArray &coordinates,
|
||||
QVector<Waypoint> &waypoints, const QJsonObject &properties = QJsonObject());
|
||||
QVector<Waypoint> &waypoints, const QJsonValue &properties = QJsonValue());
|
||||
bool lineString(const QJsonArray &coordinates, SegmentData &segment);
|
||||
bool lineString(const QJsonArray &coordinates, TrackData &track,
|
||||
const QJsonObject &properties = QJsonObject());
|
||||
const QJsonValue &properties = QJsonValue());
|
||||
bool multiLineString(const QJsonArray &coordinates,
|
||||
TrackData &track, const QJsonObject &properties = QJsonObject());
|
||||
TrackData &track, const QJsonValue &properties = QJsonValue());
|
||||
bool polygon(const QJsonArray &coordinates, ::Polygon &pg);
|
||||
bool polygon(const QJsonArray &coordinates, Area &area,
|
||||
const QJsonObject &properties = QJsonObject());
|
||||
const QJsonValue &properties = QJsonValue());
|
||||
bool multiPolygon(const QJsonArray &coordinates, Area &area,
|
||||
const QJsonObject &properties = QJsonObject());
|
||||
const QJsonValue &properties = QJsonValue());
|
||||
bool geometryCollection(const QJsonObject &json, QList<TrackData> &tracks,
|
||||
QList<Area> &areas, QVector<Waypoint> &waypoints,
|
||||
const QJsonObject &properties = QJsonObject());
|
||||
const QJsonValue &properties = QJsonValue());
|
||||
bool feature(const QJsonObject &json, QList<TrackData> &tracks,
|
||||
QList<Area> &areas, QVector<Waypoint> &waypoints);
|
||||
bool featureCollection(const QJsonObject &json, QList<TrackData> &tracks,
|
||||
|
@ -11,6 +11,7 @@
|
||||
#include "common/garmin.h"
|
||||
#include "common/textcodec.h"
|
||||
#include "common/color.h"
|
||||
#include "common/util.h"
|
||||
#include "address.h"
|
||||
#include "gpiparser.h"
|
||||
|
||||
@ -388,12 +389,6 @@ static quint32 readAddress(DataStream &stream, Waypoint &waypoint)
|
||||
return rs + rh.size;
|
||||
}
|
||||
|
||||
static const QTemporaryDir &tempDir()
|
||||
{
|
||||
static QTemporaryDir dir;
|
||||
return dir;
|
||||
}
|
||||
|
||||
static quint32 readImageInfo(DataStream &stream, Waypoint &waypoint,
|
||||
const QString &fileName, int &imgId)
|
||||
{
|
||||
@ -408,12 +403,12 @@ static quint32 readImageInfo(DataStream &stream, Waypoint &waypoint,
|
||||
ba.resize(size);
|
||||
stream.readRawData(ba.data(), ba.size());
|
||||
|
||||
if (tempDir().isValid()) {
|
||||
if (Util::tempDir().isValid()) {
|
||||
QBuffer buf(&ba);
|
||||
QImageReader ir(&buf);
|
||||
|
||||
QByteArray id(fileName.toUtf8() + QByteArray::number(imgId++));
|
||||
QFile imgFile(tempDir().path() + "/" + QString("%0.%1").arg(
|
||||
QFile imgFile(Util::tempDir().path() + "/" + QString("%0.%1").arg(
|
||||
QCryptographicHash::hash(id, QCryptographicHash::Sha1).toHex(),
|
||||
QString(ir.format())));
|
||||
imgFile.open(QIODevice::WriteOnly);
|
||||
@ -700,7 +695,7 @@ static void readPOIDatabase(DataStream &stream, QVector<Waypoint> &waypoints,
|
||||
for (int i = 0; i < il.size(); i++) {
|
||||
const QPair<int, quint16> &e = il.at(i);
|
||||
if (e.second < icons.size())
|
||||
waypoints[e.first].setIcon(icons.at(e.second));
|
||||
waypoints[e.first].setStyle(icons.at(e.second));
|
||||
}
|
||||
|
||||
if (ds != rh.size)
|
||||
|
@ -228,6 +228,26 @@ void GPXParser::trackpoints(SegmentData &segment)
|
||||
}
|
||||
}
|
||||
|
||||
void GPXParser::routeExtension(RouteData &route)
|
||||
{
|
||||
while (_reader.readNextStartElement()) {
|
||||
if (_reader.name() == QLatin1String("DisplayColor"))
|
||||
route.setStyle(LineStyle(QColor(_reader.readElementText())));
|
||||
else
|
||||
_reader.skipCurrentElement();
|
||||
}
|
||||
}
|
||||
|
||||
void GPXParser::routeExtensions(RouteData &track)
|
||||
{
|
||||
while (_reader.readNextStartElement()) {
|
||||
if (_reader.name() == QLatin1String("RouteExtension"))
|
||||
routeExtension(track);
|
||||
else
|
||||
_reader.skipCurrentElement();
|
||||
}
|
||||
}
|
||||
|
||||
void GPXParser::routepoints(RouteData &route, QList<TrackData> &tracks)
|
||||
{
|
||||
TrackData autoRoute;
|
||||
@ -253,6 +273,8 @@ void GPXParser::routepoints(RouteData &route, QList<TrackData> &tracks)
|
||||
link10.setURL(_reader.readElementText());
|
||||
else if (_reader.name() == QLatin1String("urlname"))
|
||||
link10.setText(_reader.readElementText());
|
||||
else if (_reader.name() == QLatin1String("extensions"))
|
||||
routeExtensions(route);
|
||||
else
|
||||
_reader.skipCurrentElement();
|
||||
}
|
||||
@ -267,6 +289,26 @@ void GPXParser::routepoints(RouteData &route, QList<TrackData> &tracks)
|
||||
}
|
||||
}
|
||||
|
||||
void GPXParser::trackExtension(TrackData &track)
|
||||
{
|
||||
while (_reader.readNextStartElement()) {
|
||||
if (_reader.name() == QLatin1String("DisplayColor"))
|
||||
track.setStyle(LineStyle(QColor(_reader.readElementText())));
|
||||
else
|
||||
_reader.skipCurrentElement();
|
||||
}
|
||||
}
|
||||
|
||||
void GPXParser::trackExtensions(TrackData &track)
|
||||
{
|
||||
while (_reader.readNextStartElement()) {
|
||||
if (_reader.name() == QLatin1String("TrackExtension"))
|
||||
trackExtension(track);
|
||||
else
|
||||
_reader.skipCurrentElement();
|
||||
}
|
||||
}
|
||||
|
||||
void GPXParser::track(TrackData &track)
|
||||
{
|
||||
Link link10;
|
||||
@ -289,6 +331,8 @@ void GPXParser::track(TrackData &track)
|
||||
link10.setURL(_reader.readElementText());
|
||||
else if (_reader.name() == QLatin1String("urlname"))
|
||||
link10.setText(_reader.readElementText());
|
||||
else if (_reader.name() == QLatin1String("extensions"))
|
||||
trackExtensions(track);
|
||||
else
|
||||
_reader.skipCurrentElement();
|
||||
}
|
||||
|
@ -25,6 +25,10 @@ private:
|
||||
void waypointExtensions(Waypoint &waypoint, SegmentData *autoRoute);
|
||||
void area(Area &area);
|
||||
void gpxExtensions(QList<Area> &areas);
|
||||
void trackExtensions(TrackData &track);
|
||||
void trackExtension(TrackData &track);
|
||||
void routeExtensions(RouteData &route);
|
||||
void routeExtension(RouteData &route);
|
||||
void trackpointData(Trackpoint &trackpoint);
|
||||
void waypointData(Waypoint &waypoint, SegmentData *autoRoute = 0);
|
||||
void address(Waypoint &waypoint);
|
||||
|
@ -65,6 +65,12 @@ public:
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
const QColor &color() const {return _color;}
|
||||
void setColor(const QColor &color) {_color = color;}
|
||||
|
||||
private:
|
||||
QColor _color;
|
||||
};
|
||||
|
||||
class GraphPair
|
||||
|
@ -1,5 +1,33 @@
|
||||
/*
|
||||
WARNING: This code uses internal Qt API - the QZipReader class for reading
|
||||
ZIP files - and things may break if Qt changes the API. For Qt5 this is not
|
||||
a problem as we can "see the future" now and there are no changes in all
|
||||
the supported Qt5 versions up to the last one (5.15). In Qt6 the class
|
||||
might change or even disappear in the future, but this is very unlikely
|
||||
as there were no changes for several years and The Qt Company's policy
|
||||
is: "do not invest any resources into any desktop related stuff unless
|
||||
absolutely necessary". There is an issue (QTBUG-3897) since the year 2009 to
|
||||
include the ZIP reader into the public API, which aptly illustrates the
|
||||
effort The Qt Company is willing to make about anything desktop related...
|
||||
*/
|
||||
|
||||
#include <QFileInfo>
|
||||
#include <QTemporaryDir>
|
||||
#include <QCryptographicHash>
|
||||
#include <QtEndian>
|
||||
#include <QUrl>
|
||||
#include <QRegularExpression>
|
||||
#include <private/qzipreader_p.h>
|
||||
#include "common/util.h"
|
||||
#include "kmlparser.h"
|
||||
|
||||
static bool isZIP(QFile *file)
|
||||
{
|
||||
quint32 magic;
|
||||
|
||||
return (file->read((char *)&magic, sizeof(magic)) == (qint64)sizeof(magic)
|
||||
&& qFromLittleEndian(magic) == 0x04034b50);
|
||||
}
|
||||
|
||||
qreal KMLParser::number()
|
||||
{
|
||||
@ -463,6 +491,9 @@ void KMLParser::multiGeometry(QList<TrackData> &tracks, QList<Area> &areas,
|
||||
QVector<Waypoint> &waypoints, const QString &name, const QString &desc,
|
||||
const QDateTime ×tamp)
|
||||
{
|
||||
TrackData *tp = 0;
|
||||
Area *ap = 0;
|
||||
|
||||
while (_reader.readNextStartElement()) {
|
||||
if (_reader.name() == QLatin1String("Point")) {
|
||||
waypoints.append(Waypoint());
|
||||
@ -472,28 +503,92 @@ void KMLParser::multiGeometry(QList<TrackData> &tracks, QList<Area> &areas,
|
||||
w.setTimestamp(timestamp);
|
||||
point(w);
|
||||
} else if (_reader.name() == QLatin1String("LineString")) {
|
||||
tracks.append(TrackData());
|
||||
TrackData &t = tracks.last();
|
||||
t.append(SegmentData());
|
||||
t.setName(name);
|
||||
t.setDescription(desc);
|
||||
lineString(t.last());
|
||||
if (!tp) {
|
||||
tracks.append(TrackData());
|
||||
tp = &tracks.last();
|
||||
tp->setName(name);
|
||||
tp->setDescription(desc);
|
||||
}
|
||||
tp->append(SegmentData());
|
||||
lineString(tp->last());
|
||||
} else if (_reader.name() == QLatin1String("Polygon")) {
|
||||
areas.append(Area());
|
||||
Area &a = areas.last();
|
||||
a.setName(name);
|
||||
a.setDescription(desc);
|
||||
polygon(a);
|
||||
if (!ap) {
|
||||
areas.append(Area());
|
||||
ap = &areas.last();
|
||||
ap->setName(name);
|
||||
ap->setDescription(desc);
|
||||
}
|
||||
polygon(*ap);
|
||||
} else
|
||||
_reader.skipCurrentElement();
|
||||
}
|
||||
}
|
||||
|
||||
void KMLParser::placemark(QList<TrackData> &tracks, QList<Area> &areas,
|
||||
QVector<Waypoint> &waypoints)
|
||||
void KMLParser::photoOverlay(const Ctx &ctx, QVector<Waypoint> &waypoints,
|
||||
PointStyleMap &pointStyles)
|
||||
{
|
||||
QString name, desc, phone, address;
|
||||
QString img, id;
|
||||
Waypoint w;
|
||||
QMap<QString, PolygonStyle> unused;
|
||||
QMap<QString, LineStyle> unused2;
|
||||
static QRegularExpression re("\\$\\[[^\\]]+\\]");
|
||||
|
||||
while (_reader.readNextStartElement()) {
|
||||
if (_reader.name() == QLatin1String("name"))
|
||||
w.setName(_reader.readElementText());
|
||||
else if (_reader.name() == QLatin1String("description"))
|
||||
w.setDescription(_reader.readElementText());
|
||||
else if (_reader.name() == QLatin1String("phoneNumber"))
|
||||
w.setPhone(_reader.readElementText());
|
||||
else if (_reader.name() == QLatin1String("address"))
|
||||
w.setAddress(_reader.readElementText());
|
||||
else if (_reader.name() == QLatin1String("TimeStamp"))
|
||||
w.setTimestamp(timeStamp());
|
||||
else if (_reader.name() == QLatin1String("Style")) {
|
||||
style(ctx.dir, pointStyles, unused, unused2);
|
||||
id = QString();
|
||||
} else if (_reader.name() == QLatin1String("StyleMap"))
|
||||
styleMap(pointStyles, unused, unused2);
|
||||
else if (_reader.name() == QLatin1String("Icon"))
|
||||
img = icon();
|
||||
else if (_reader.name() == QLatin1String("Point"))
|
||||
point(w);
|
||||
else if (_reader.name() == QLatin1String("styleUrl"))
|
||||
id = styleUrl();
|
||||
else
|
||||
_reader.skipCurrentElement();
|
||||
}
|
||||
|
||||
if (!w.coordinates().isNull()) {
|
||||
w.setStyle(pointStyles.value(id));
|
||||
|
||||
img.replace(re, "0");
|
||||
if (!QUrl(img).scheme().isEmpty())
|
||||
w.addLink(Link(img, "Photo Overlay"));
|
||||
else if (ctx.zip && Util::tempDir().isValid()) {
|
||||
QFileInfo fi(img);
|
||||
QByteArray id(ctx.path.toUtf8() + img.toUtf8());
|
||||
QString path(Util::tempDir().path() + "/" + QString("%0.%1")
|
||||
.arg(QCryptographicHash::hash(id, QCryptographicHash::Sha1)
|
||||
.toHex(), QString(fi.suffix())));
|
||||
QFile::rename(ctx.dir.absoluteFilePath(img), path);
|
||||
w.addImage(path);
|
||||
} else if (!ctx.zip)
|
||||
w.addImage(ctx.dir.absoluteFilePath(img));
|
||||
|
||||
waypoints.append(w);
|
||||
}
|
||||
}
|
||||
|
||||
void KMLParser::placemark(const Ctx &ctx, QList<TrackData> &tracks,
|
||||
QList<Area> &areas, QVector<Waypoint> &waypoints, PointStyleMap &pointStyles,
|
||||
PolygonStyleMap &polyStyles, LineStyleMap &lineStyles)
|
||||
{
|
||||
QString name, desc, phone, address, id;
|
||||
QDateTime timestamp;
|
||||
Waypoint *wp = 0;
|
||||
TrackData *tp = 0;
|
||||
Area *ap = 0;
|
||||
|
||||
while (_reader.readNextStartElement()) {
|
||||
if (_reader.name() == QLatin1String("name"))
|
||||
@ -506,87 +601,256 @@ void KMLParser::placemark(QList<TrackData> &tracks, QList<Area> &areas,
|
||||
address = _reader.readElementText();
|
||||
else if (_reader.name() == QLatin1String("TimeStamp"))
|
||||
timestamp = timeStamp();
|
||||
else if (_reader.name() == QLatin1String("Style")) {
|
||||
style(ctx.dir, pointStyles, polyStyles, lineStyles);
|
||||
id = QString();
|
||||
} else if (_reader.name() == QLatin1String("StyleMap"))
|
||||
styleMap(pointStyles, polyStyles, lineStyles);
|
||||
else if (_reader.name() == QLatin1String("MultiGeometry"))
|
||||
multiGeometry(tracks, areas, waypoints, name, desc, timestamp);
|
||||
else if (_reader.name() == QLatin1String("Point")) {
|
||||
waypoints.append(Waypoint());
|
||||
Waypoint &w = waypoints.last();
|
||||
w.setName(name);
|
||||
w.setDescription(desc);
|
||||
w.setTimestamp(timestamp);
|
||||
w.setAddress(address);
|
||||
w.setPhone(phone);
|
||||
point(w);
|
||||
wp = &waypoints.last();
|
||||
point(*wp);
|
||||
} else if (_reader.name() == QLatin1String("LineString")
|
||||
|| _reader.name() == QLatin1String("LinearRing")) {
|
||||
tracks.append(TrackData());
|
||||
TrackData &t = tracks.last();
|
||||
t.append(SegmentData());
|
||||
t.setName(name);
|
||||
t.setDescription(desc);
|
||||
lineString(t.last());
|
||||
tp = &tracks.last();
|
||||
tp->append(SegmentData());
|
||||
lineString(tp->last());
|
||||
} else if (_reader.name() == QLatin1String("Track")) {
|
||||
tracks.append(TrackData());
|
||||
TrackData &t = tracks.last();
|
||||
t.append(SegmentData());
|
||||
t.setName(name);
|
||||
t.setDescription(desc);
|
||||
track(t.last());
|
||||
tp = &tracks.last();
|
||||
tp->append(SegmentData());
|
||||
track(tp->last());
|
||||
} else if (_reader.name() == QLatin1String("MultiTrack")) {
|
||||
tracks.append(TrackData());
|
||||
TrackData &t = tracks.last();
|
||||
t.setName(name);
|
||||
t.setDescription(desc);
|
||||
multiTrack(t);
|
||||
tp = &tracks.last();
|
||||
multiTrack(*tp);
|
||||
} else if (_reader.name() == QLatin1String("Polygon")) {
|
||||
areas.append(Area());
|
||||
Area &a = areas.last();
|
||||
a.setName(name);
|
||||
a.setDescription(desc);
|
||||
polygon(a);
|
||||
} else
|
||||
ap = &areas.last();
|
||||
polygon(*ap);
|
||||
} else if (_reader.name() == QLatin1String("styleUrl"))
|
||||
id = styleUrl();
|
||||
else
|
||||
_reader.skipCurrentElement();
|
||||
}
|
||||
|
||||
if (wp) {
|
||||
wp->setName(name);
|
||||
wp->setDescription(desc);
|
||||
wp->setTimestamp(timestamp);
|
||||
wp->setAddress(address);
|
||||
wp->setPhone(phone);
|
||||
wp->setStyle(pointStyles.value(id));
|
||||
} else if (tp) {
|
||||
tp->setName(name);
|
||||
tp->setDescription(desc);
|
||||
tp->setStyle(lineStyles.value(id));
|
||||
} else if (ap) {
|
||||
ap->setName(name);
|
||||
ap->setDescription(desc);
|
||||
ap->setStyle(polyStyles.value(id));
|
||||
}
|
||||
}
|
||||
|
||||
void KMLParser::folder(QList<TrackData> &tracks, QList<Area> &areas,
|
||||
QVector<Waypoint> &waypoints)
|
||||
QString KMLParser::icon()
|
||||
{
|
||||
QString path;
|
||||
|
||||
while (_reader.readNextStartElement()) {
|
||||
if (_reader.name() == QLatin1String("Placemark"))
|
||||
placemark(tracks, areas, waypoints);
|
||||
else if (_reader.name() == QLatin1String("Folder"))
|
||||
folder(tracks, areas, waypoints);
|
||||
if (_reader.name() == QLatin1String("href"))
|
||||
path = _reader.readElementText();
|
||||
else
|
||||
_reader.skipCurrentElement();
|
||||
}
|
||||
|
||||
return path;
|
||||
}
|
||||
|
||||
QString KMLParser::styleUrl()
|
||||
{
|
||||
QString id(_reader.readElementText());
|
||||
return (id.at(0) == '#') ? id.right(id.size() - 1) : QString();
|
||||
}
|
||||
|
||||
void KMLParser::iconStyle(const QDir &dir, const QString &id,
|
||||
PointStyleMap &styles)
|
||||
{
|
||||
QPixmap img;
|
||||
QColor color(Qt::white);
|
||||
|
||||
while (_reader.readNextStartElement()) {
|
||||
if (_reader.name() == QLatin1String("Icon"))
|
||||
img = QPixmap(dir.absoluteFilePath(icon()));
|
||||
else if (_reader.name() == QLatin1String("color"))
|
||||
color = QColor("#" + _reader.readElementText());
|
||||
else
|
||||
_reader.skipCurrentElement();
|
||||
}
|
||||
|
||||
styles.insert(id, PointStyle(img, color));
|
||||
}
|
||||
|
||||
void KMLParser::polyStyle(const QString &id, PolygonStyleMap &styles)
|
||||
{
|
||||
QColor color(Qt::white);
|
||||
uint fill = 1, outline = 1;
|
||||
|
||||
while (_reader.readNextStartElement()) {
|
||||
if (_reader.name() == QLatin1String("color"))
|
||||
color = QColor("#" + _reader.readElementText());
|
||||
else if (_reader.name() == QLatin1String("fill"))
|
||||
fill = _reader.readElementText().toUInt();
|
||||
else if (_reader.name() == QLatin1String("outline"))
|
||||
outline = _reader.readElementText().toUInt();
|
||||
else
|
||||
_reader.skipCurrentElement();
|
||||
}
|
||||
|
||||
QPen pen = (color.isValid() && outline)
|
||||
? QPen(color) : QPen(Qt::NoPen);
|
||||
QBrush brush = (color.isValid() && fill)
|
||||
? QBrush(color) : QBrush(Qt::NoBrush);
|
||||
|
||||
styles.insert(id, PolygonStyle(pen, brush));
|
||||
}
|
||||
|
||||
void KMLParser::lineStyle(const QString &id, LineStyleMap &styles)
|
||||
{
|
||||
QColor color(Qt::white);
|
||||
uint width = 1;
|
||||
|
||||
while (_reader.readNextStartElement()) {
|
||||
if (_reader.name() == QLatin1String("color"))
|
||||
color = QColor("#" + _reader.readElementText());
|
||||
else if (_reader.name() == QLatin1String("width"))
|
||||
width = _reader.readElementText().toUInt();
|
||||
else
|
||||
_reader.skipCurrentElement();
|
||||
}
|
||||
|
||||
styles.insert(id, LineStyle(color, width));
|
||||
}
|
||||
|
||||
void KMLParser::styleMapPair(const QString &id, PointStyleMap &pointStyles,
|
||||
PolygonStyleMap &polyStyles, LineStyleMap &lineStyles)
|
||||
{
|
||||
QString key, url;
|
||||
|
||||
while (_reader.readNextStartElement()) {
|
||||
if (_reader.name() == QLatin1String("key"))
|
||||
key = _reader.readElementText();
|
||||
else if (_reader.name() == QLatin1String("styleUrl"))
|
||||
url = styleUrl();
|
||||
else
|
||||
_reader.skipCurrentElement();
|
||||
}
|
||||
|
||||
if (key == "normal") {
|
||||
pointStyles.insert(id, pointStyles.value(url));
|
||||
polyStyles.insert(id, polyStyles.value(url));
|
||||
lineStyles.insert(id, lineStyles.value(url));
|
||||
}
|
||||
}
|
||||
|
||||
void KMLParser::styleMap(PointStyleMap &pointStyles,
|
||||
PolygonStyleMap &polyStyles, LineStyleMap &lineStyles)
|
||||
{
|
||||
QString id = _reader.attributes().value("id").toString();
|
||||
|
||||
while (_reader.readNextStartElement()) {
|
||||
if (_reader.name() == QLatin1String("Pair"))
|
||||
styleMapPair(id, pointStyles, polyStyles, lineStyles);
|
||||
else
|
||||
_reader.skipCurrentElement();
|
||||
}
|
||||
}
|
||||
|
||||
void KMLParser::document(QList<TrackData> &tracks, QList<Area> &areas,
|
||||
QVector<Waypoint> &waypoints)
|
||||
void KMLParser::style(const QDir &dir, PointStyleMap &pointStyles,
|
||||
PolygonStyleMap &polyStyles, LineStyleMap &lineStyles)
|
||||
{
|
||||
QString id = _reader.attributes().value("id").toString();
|
||||
|
||||
while (_reader.readNextStartElement()) {
|
||||
if (_reader.name() == QLatin1String("Document"))
|
||||
document(tracks, areas, waypoints);
|
||||
else if (_reader.name() == QLatin1String("Placemark"))
|
||||
placemark(tracks, areas, waypoints);
|
||||
else if (_reader.name() == QLatin1String("Folder"))
|
||||
folder(tracks, areas, waypoints);
|
||||
if (_reader.name() == QLatin1String("IconStyle"))
|
||||
iconStyle(dir, id, pointStyles);
|
||||
else if (_reader.name() == QLatin1String("PolyStyle"))
|
||||
polyStyle(id, polyStyles);
|
||||
else if (_reader.name() == QLatin1String("LineStyle"))
|
||||
lineStyle(id, lineStyles);
|
||||
else
|
||||
_reader.skipCurrentElement();
|
||||
}
|
||||
}
|
||||
|
||||
void KMLParser::kml(QList<TrackData> &tracks, QList<Area> &areas,
|
||||
QVector<Waypoint> &waypoints)
|
||||
void KMLParser::folder(const Ctx &ctx, QList<TrackData> &tracks,
|
||||
QList<Area> &areas, QVector<Waypoint> &waypoints,
|
||||
PointStyleMap &pointStyles, PolygonStyleMap &polyStyles,
|
||||
LineStyleMap &lineStyles)
|
||||
{
|
||||
while (_reader.readNextStartElement()) {
|
||||
if (_reader.name() == QLatin1String("Document"))
|
||||
document(tracks, areas, waypoints);
|
||||
else if (_reader.name() == QLatin1String("Placemark"))
|
||||
placemark(tracks, areas, waypoints);
|
||||
document(ctx, tracks, areas, waypoints);
|
||||
else if (_reader.name() == QLatin1String("Folder"))
|
||||
folder(tracks, areas, waypoints);
|
||||
folder(ctx, tracks, areas, waypoints, pointStyles, polyStyles,
|
||||
lineStyles);
|
||||
else if (_reader.name() == QLatin1String("Placemark"))
|
||||
placemark(ctx, tracks, areas, waypoints, pointStyles, polyStyles,
|
||||
lineStyles);
|
||||
else if (_reader.name() == QLatin1String("PhotoOverlay"))
|
||||
photoOverlay(ctx, waypoints, pointStyles);
|
||||
else
|
||||
_reader.skipCurrentElement();
|
||||
}
|
||||
}
|
||||
|
||||
void KMLParser::document(const Ctx &ctx, QList<TrackData> &tracks,
|
||||
QList<Area> &areas, QVector<Waypoint> &waypoints)
|
||||
{
|
||||
PointStyleMap pointStyles;
|
||||
PolygonStyleMap polyStyles;
|
||||
LineStyleMap lineStyles;
|
||||
|
||||
while (_reader.readNextStartElement()) {
|
||||
if (_reader.name() == QLatin1String("Document"))
|
||||
document(ctx, tracks, areas, waypoints);
|
||||
else if (_reader.name() == QLatin1String("Folder"))
|
||||
folder(ctx, tracks, areas, waypoints, pointStyles, polyStyles,
|
||||
lineStyles);
|
||||
else if (_reader.name() == QLatin1String("Placemark"))
|
||||
placemark(ctx, tracks, areas, waypoints, pointStyles, polyStyles,
|
||||
lineStyles);
|
||||
else if (_reader.name() == QLatin1String("PhotoOverlay"))
|
||||
photoOverlay(ctx, waypoints, pointStyles);
|
||||
else if (_reader.name() == QLatin1String("Style"))
|
||||
style(ctx.dir, pointStyles, polyStyles, lineStyles);
|
||||
else if (_reader.name() == QLatin1String("StyleMap"))
|
||||
styleMap(pointStyles, polyStyles, lineStyles);
|
||||
else
|
||||
_reader.skipCurrentElement();
|
||||
}
|
||||
}
|
||||
|
||||
void KMLParser::kml(const Ctx &ctx, QList<TrackData> &tracks,
|
||||
QList<Area> &areas, QVector<Waypoint> &waypoints)
|
||||
{
|
||||
PointStyleMap pointStyles;
|
||||
PolygonStyleMap polyStyles;
|
||||
LineStyleMap lineStyles;
|
||||
|
||||
while (_reader.readNextStartElement()) {
|
||||
if (_reader.name() == QLatin1String("Document"))
|
||||
document(ctx, tracks, areas, waypoints);
|
||||
else if (_reader.name() == QLatin1String("Folder"))
|
||||
folder(ctx, tracks, areas, waypoints, pointStyles, polyStyles,
|
||||
lineStyles);
|
||||
else if (_reader.name() == QLatin1String("Placemark"))
|
||||
placemark(ctx, tracks, areas, waypoints, pointStyles, polyStyles,
|
||||
lineStyles);
|
||||
else if (_reader.name() == QLatin1String("PhotoOverlay"))
|
||||
photoOverlay(ctx, waypoints, pointStyles);
|
||||
else
|
||||
_reader.skipCurrentElement();
|
||||
}
|
||||
@ -596,15 +860,50 @@ bool KMLParser::parse(QFile *file, QList<TrackData> &tracks,
|
||||
QList<RouteData> &routes, QList<Area> &areas, QVector<Waypoint> &waypoints)
|
||||
{
|
||||
Q_UNUSED(routes);
|
||||
QFileInfo fi(*file);
|
||||
|
||||
_reader.clear();
|
||||
_reader.setDevice(file);
|
||||
|
||||
if (_reader.readNextStartElement()) {
|
||||
if (_reader.name() == QLatin1String("kml"))
|
||||
kml(tracks, areas, waypoints);
|
||||
else
|
||||
_reader.raiseError("Not a KML file");
|
||||
if (isZIP(file)) {
|
||||
QZipReader zip(fi.absoluteFilePath(), QIODevice::ReadOnly);
|
||||
QTemporaryDir tempDir;
|
||||
if (!tempDir.isValid() || !zip.extractAll(tempDir.path()))
|
||||
_reader.raiseError("Error extracting ZIP file");
|
||||
else {
|
||||
QDir zipDir(tempDir.path());
|
||||
QFileInfoList files(zipDir.entryInfoList(QStringList("*.kml"),
|
||||
QDir::Files));
|
||||
|
||||
if (files.isEmpty())
|
||||
_reader.raiseError("No KML file found in ZIP file");
|
||||
else {
|
||||
QFile kmlFile(files.first().absoluteFilePath());
|
||||
if (!kmlFile.open(QIODevice::ReadOnly))
|
||||
_reader.raiseError("Error opening KML file");
|
||||
else {
|
||||
_reader.setDevice(&kmlFile);
|
||||
|
||||
if (_reader.readNextStartElement()) {
|
||||
if (_reader.name() == QLatin1String("kml"))
|
||||
kml(Ctx(fi.absoluteFilePath(), zipDir, true),
|
||||
tracks, areas, waypoints);
|
||||
else
|
||||
_reader.raiseError("Not a KML file");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
file->reset();
|
||||
_reader.setDevice(file);
|
||||
|
||||
if (_reader.readNextStartElement()) {
|
||||
if (_reader.name() == QLatin1String("kml"))
|
||||
kml(Ctx(fi.absoluteFilePath(), fi.absoluteDir(), false), tracks,
|
||||
areas, waypoints);
|
||||
else
|
||||
_reader.raiseError("Not a KML file");
|
||||
}
|
||||
}
|
||||
|
||||
return !_reader.error();
|
||||
|
@ -3,6 +3,7 @@
|
||||
|
||||
#include <QXmlStreamReader>
|
||||
#include <QDateTime>
|
||||
#include <QDir>
|
||||
#include "parser.h"
|
||||
|
||||
class KMLParser : public Parser
|
||||
@ -14,17 +15,34 @@ public:
|
||||
int errorLine() const {return _reader.lineNumber();}
|
||||
|
||||
private:
|
||||
void kml(QList<TrackData> &tracks, QList<Area> &areas,
|
||||
struct Ctx {
|
||||
Ctx(const QString &path, const QDir &dir, bool zip)
|
||||
: path(path), dir(dir), zip(zip) {}
|
||||
|
||||
QString path;
|
||||
QDir dir;
|
||||
bool zip;
|
||||
};
|
||||
|
||||
typedef QMap<QString, PointStyle> PointStyleMap;
|
||||
typedef QMap<QString, PolygonStyle> PolygonStyleMap;
|
||||
typedef QMap<QString, LineStyle> LineStyleMap;
|
||||
|
||||
void kml(const Ctx &ctx, QList<TrackData> &tracks, QList<Area> &areas,
|
||||
QVector<Waypoint> &waypoints);
|
||||
void document(QList<TrackData> &tracks, QList<Area> &areas,
|
||||
QVector<Waypoint> &waypoints);
|
||||
void folder(QList<TrackData> &tracks, QList<Area> &areas,
|
||||
QVector<Waypoint> &waypoints);
|
||||
void placemark(QList<TrackData> &tracks, QList<Area> &areas,
|
||||
void document(const Ctx &ctx, QList<TrackData> &tracks, QList<Area> &areas,
|
||||
QVector<Waypoint> &waypoints);
|
||||
void folder(const Ctx &ctx, QList<TrackData> &tracks, QList<Area> &areas,
|
||||
QVector<Waypoint> &waypoints, PointStyleMap &pointStyles,
|
||||
PolygonStyleMap &polyStyles, LineStyleMap &lineStyles);
|
||||
void placemark(const Ctx &ctx, QList<TrackData> &tracks, QList<Area> &areas,
|
||||
QVector<Waypoint> &waypoints, PointStyleMap &pointStyles,
|
||||
PolygonStyleMap &polyStyles, LineStyleMap &lineStyles);
|
||||
void multiGeometry(QList<TrackData> &tracks, QList<Area> &areas,
|
||||
QVector<Waypoint> &waypoints, const QString &name, const QString &desc,
|
||||
const QDateTime ×tamp);
|
||||
void photoOverlay(const Ctx &ctx, QVector<Waypoint> &waypoints,
|
||||
PointStyleMap &pointStyles);
|
||||
void track(SegmentData &segment);
|
||||
void multiTrack(TrackData &t);
|
||||
void lineString(SegmentData &segment);
|
||||
@ -45,6 +63,17 @@ private:
|
||||
QDateTime timeStamp();
|
||||
qreal number();
|
||||
QDateTime time();
|
||||
QString icon();
|
||||
QString styleUrl();
|
||||
void style(const QDir &dir, PointStyleMap &pointStyles,
|
||||
PolygonStyleMap &polyStyles, LineStyleMap &lineStyles);
|
||||
void styleMapPair(const QString &id, PointStyleMap &pointStyles,
|
||||
PolygonStyleMap &polyStyles, LineStyleMap &lineStyles);
|
||||
void styleMap(PointStyleMap &pointStyles, PolygonStyleMap &polyStyles,
|
||||
LineStyleMap &lineStyles);
|
||||
void iconStyle(const QDir &dir, const QString &id, PointStyleMap &style);
|
||||
void polyStyle(const QString &id, PolygonStyleMap &styles);
|
||||
void lineStyle(const QString &id, LineStyleMap &styles);
|
||||
|
||||
QXmlStreamReader _reader;
|
||||
};
|
||||
|
@ -38,6 +38,9 @@ Graph Route::gpsElevation() const
|
||||
if (_data.at(i).hasElevation())
|
||||
gs.append(GraphPoint(_distance.at(i), NAN, _data.at(i).elevation()));
|
||||
|
||||
if (_data.style().color().isValid())
|
||||
graph.setColor(_data.style().color());
|
||||
|
||||
return graph;
|
||||
}
|
||||
|
||||
@ -53,6 +56,9 @@ Graph Route::demElevation() const
|
||||
gs.append(GraphPoint(_distance.at(i), NAN, dem));
|
||||
}
|
||||
|
||||
if (_data.style().color().isValid())
|
||||
graph.setColor(_data.style().color());
|
||||
|
||||
return graph;
|
||||
}
|
||||
|
||||
|
@ -20,6 +20,7 @@ public:
|
||||
const QString &description() const {return _data.description();}
|
||||
const QString &comment() const {return _data.comment();}
|
||||
const QVector<Link> &links() const {return _data.links();}
|
||||
const LineStyle &style() const {return _data.style();}
|
||||
|
||||
bool isValid() const {return _data.size() >= 2;}
|
||||
|
||||
|
@ -5,6 +5,7 @@
|
||||
#include <QString>
|
||||
#include "waypoint.h"
|
||||
#include "link.h"
|
||||
#include "style.h"
|
||||
|
||||
class RouteData : public QVector<Waypoint>
|
||||
{
|
||||
@ -13,17 +14,20 @@ public:
|
||||
const QString &description() const {return _desc;}
|
||||
const QString &comment() const {return _comment;}
|
||||
const QVector<Link> &links() const {return _links;}
|
||||
const LineStyle &style() const {return _style;}
|
||||
|
||||
void setName(const QString &name) {_name = name;}
|
||||
void setDescription(const QString &desc) {_desc = desc;}
|
||||
void setComment(const QString &comment) {_comment = comment;}
|
||||
void addLink(const Link &link) {_links.append(link);}
|
||||
void setStyle(const LineStyle &style) {_style = style;}
|
||||
|
||||
private:
|
||||
QString _name;
|
||||
QString _desc;
|
||||
QString _comment;
|
||||
QVector<Link> _links;
|
||||
LineStyle _style;
|
||||
};
|
||||
|
||||
#endif // ROUTEDATA_H
|
||||
|
56
src/data/style.h
Normal file
56
src/data/style.h
Normal file
@ -0,0 +1,56 @@
|
||||
#ifndef STYLE_H
|
||||
#define STYLE_H
|
||||
|
||||
#include <QPen>
|
||||
#include <QBrush>
|
||||
#include <QPixmap>
|
||||
|
||||
class PointStyle {
|
||||
public:
|
||||
PointStyle() : _size(-1) {}
|
||||
PointStyle(const QPixmap &icon, const QColor &color = QColor(), int size = -1)
|
||||
: _icon(icon), _color(color), _size(size) {}
|
||||
|
||||
const QColor &color() const {return _color;}
|
||||
const QPixmap &icon() const {return _icon;}
|
||||
int size() const {return _size;}
|
||||
|
||||
private:
|
||||
QPixmap _icon;
|
||||
QColor _color;
|
||||
int _size;
|
||||
};
|
||||
|
||||
class PolygonStyle {
|
||||
public:
|
||||
PolygonStyle()
|
||||
: _pen(QPen(Qt::NoPen)), _brush(QBrush(Qt::NoBrush)) {}
|
||||
PolygonStyle(const QPen &pen, const QBrush &brush)
|
||||
: _pen(pen), _brush(brush) {}
|
||||
|
||||
const QPen &pen() const {return _pen;}
|
||||
const QBrush &brush() const {return _brush;}
|
||||
|
||||
bool isValid() const
|
||||
{return _pen.style() != Qt::NoPen || _brush.style() != Qt::NoBrush;}
|
||||
|
||||
private:
|
||||
QPen _pen;
|
||||
QBrush _brush;
|
||||
};
|
||||
|
||||
class LineStyle {
|
||||
public:
|
||||
LineStyle() : _width(-1) {}
|
||||
LineStyle(const QColor &color, int width = -1)
|
||||
: _color(color), _width(width) {}
|
||||
|
||||
const QColor &color() const {return _color;}
|
||||
int width() const {return _width;}
|
||||
|
||||
private:
|
||||
QColor _color;
|
||||
int _width;
|
||||
};
|
||||
|
||||
#endif // STYLE_H
|
@ -254,6 +254,9 @@ Graph Track::gpsElevation() const
|
||||
ret.append(filter(gs, _elevationWindow));
|
||||
}
|
||||
|
||||
if (_data.style().color().isValid())
|
||||
ret.setColor(_data.style().color());
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -278,6 +281,9 @@ Graph Track::demElevation() const
|
||||
ret.append(filter(gs, _elevationWindow));
|
||||
}
|
||||
|
||||
if (_data.style().color().isValid())
|
||||
ret.setColor(_data.style().color());
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -330,6 +336,9 @@ Graph Track::computedSpeed() const
|
||||
filtered[stop.at(j)].setY(0);
|
||||
}
|
||||
|
||||
if (_data.style().color().isValid())
|
||||
ret.setColor(_data.style().color());
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -365,6 +374,9 @@ Graph Track::reportedSpeed() const
|
||||
filtered[stop.at(j)].setY(0);
|
||||
}
|
||||
|
||||
if (_data.style().color().isValid())
|
||||
ret.setColor(_data.style().color());
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -406,6 +418,9 @@ Graph Track::heartRate() const
|
||||
ret.append(filter(gs, _heartRateWindow));
|
||||
}
|
||||
|
||||
if (_data.style().color().isValid())
|
||||
ret.setColor(_data.style().color());
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -429,6 +444,9 @@ Graph Track::temperature() const
|
||||
ret.append(gs);
|
||||
}
|
||||
|
||||
if (_data.style().color().isValid())
|
||||
ret.setColor(_data.style().color());
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -451,6 +469,9 @@ Graph Track::ratio() const
|
||||
ret.append(gs);
|
||||
}
|
||||
|
||||
if (_data.style().color().isValid())
|
||||
ret.setColor(_data.style().color());
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -486,6 +507,9 @@ Graph Track::cadence() const
|
||||
filtered[stop.at(j)].setY(0);
|
||||
}
|
||||
|
||||
if (_data.style().color().isValid())
|
||||
ret.setColor(_data.style().color());
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -522,6 +546,9 @@ Graph Track::power() const
|
||||
filtered[stop.at(j)].setY(0);
|
||||
}
|
||||
|
||||
if (_data.style().color().isValid())
|
||||
ret.setColor(_data.style().color());
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -34,6 +34,7 @@ public:
|
||||
const QString &description() const {return _data.description();}
|
||||
const QString &comment() const {return _data.comment();}
|
||||
const QVector<Link> &links() const {return _data.links();}
|
||||
const LineStyle &style() const {return _data.style();}
|
||||
|
||||
bool isValid() const;
|
||||
|
||||
|
@ -6,6 +6,7 @@
|
||||
#include <QString>
|
||||
#include "trackpoint.h"
|
||||
#include "link.h"
|
||||
#include "style.h"
|
||||
|
||||
typedef QVector<Trackpoint> SegmentData;
|
||||
|
||||
@ -16,17 +17,20 @@ public:
|
||||
const QString &description() const {return _desc;}
|
||||
const QString &comment() const {return _comment;}
|
||||
const QVector<Link> &links() const {return _links;}
|
||||
const LineStyle &style() const {return _style;}
|
||||
|
||||
void setName(const QString &name) {_name = name;}
|
||||
void setDescription(const QString &desc) {_desc = desc;}
|
||||
void setComment(const QString &comment) {_comment = comment;}
|
||||
void addLink(const Link &link) {_links.append(link);}
|
||||
void setStyle(const LineStyle &style) {_style = style;}
|
||||
|
||||
private:
|
||||
QString _name;
|
||||
QString _desc;
|
||||
QString _comment;
|
||||
QVector<Link> _links;
|
||||
LineStyle _style;
|
||||
};
|
||||
|
||||
#endif // TRACKDATA_H
|
||||
|
@ -10,6 +10,7 @@
|
||||
#include "common/config.h"
|
||||
#include "common/coordinates.h"
|
||||
#include "link.h"
|
||||
#include "style.h"
|
||||
|
||||
class Waypoint
|
||||
{
|
||||
@ -30,7 +31,7 @@ public:
|
||||
const QVector<Link> &links() const {return _links;}
|
||||
const QDateTime ×tamp() const {return _timestamp;}
|
||||
qreal elevation() const {return _elevation;}
|
||||
const QPixmap &icon() const {return _icon;}
|
||||
const PointStyle &style() const {return _style;}
|
||||
|
||||
QPair<qreal, qreal> elevations() const;
|
||||
|
||||
@ -47,7 +48,7 @@ public:
|
||||
void setElevation(qreal elevation) {_elevation = elevation;}
|
||||
void addImage(const QString &path) {_images.append(path);}
|
||||
void addLink(const Link &link) {_links.append(link);}
|
||||
void setIcon(const QPixmap &icon) {_icon = icon;}
|
||||
void setStyle(const PointStyle &style) {_style = style;}
|
||||
|
||||
bool hasElevation() const {return !std::isnan(_elevation);}
|
||||
|
||||
@ -74,7 +75,7 @@ private:
|
||||
QVector<Link> _links;
|
||||
QDateTime _timestamp;
|
||||
qreal _elevation;
|
||||
QPixmap _icon;
|
||||
PointStyle _style;
|
||||
|
||||
static bool _useDEM;
|
||||
static bool _show2ndElevation;
|
||||
|
@ -53,6 +53,7 @@ const GCS &GCS::WGS84()
|
||||
QList<GCS::Entry> GCS::defaults()
|
||||
{
|
||||
QList<GCS::Entry> list;
|
||||
list.append(GCS::Entry(4326, 6326, "WGS 1984", WGS84()));
|
||||
list.append(GCS::Entry(4326, 6326, "WGS 84", WGS84()));
|
||||
list.append(GCS::Entry(4326, 6326, "WGS84", WGS84()));
|
||||
return list;
|
||||
|
@ -18,6 +18,7 @@
|
||||
#include "qctmap.h"
|
||||
#include "osmdroidmap.h"
|
||||
#include "gemfmap.h"
|
||||
#include "oruxmap.h"
|
||||
#include "invalidmap.h"
|
||||
#include "maplist.h"
|
||||
|
||||
@ -52,6 +53,7 @@ MapList::ParserMap MapList::parsers()
|
||||
map.insert("qct", &QCTMap::create);
|
||||
map.insert("sqlite", &OsmdroidMap::create);
|
||||
map.insert("gemf", &GEMFMap::create);
|
||||
map.insert("otrk2.xml", &OruxMap::create);
|
||||
|
||||
return map;
|
||||
}
|
||||
@ -62,7 +64,7 @@ Map *MapList::loadFile(const QString &path, const Projection &proj, bool *isDir)
|
||||
{
|
||||
ParserMap::iterator it;
|
||||
QFileInfo fi(path);
|
||||
QString suffix(fi.suffix().toLower());
|
||||
QString suffix(fi.completeSuffix().toLower());
|
||||
Map *map = 0;
|
||||
QStringList errors;
|
||||
|
||||
@ -161,6 +163,7 @@ QString MapList::formats()
|
||||
+ qApp->translate("MapList", "Mapsforge maps") + " (*.map);;"
|
||||
+ qApp->translate("MapList", "OziExplorer maps") + " (*.map);;"
|
||||
+ qApp->translate("MapList", "MBTiles maps") + " (*.mbtiles);;"
|
||||
+ qApp->translate("MapList", "Orux maps") + " (*.otrk2.xml);;"
|
||||
+ qApp->translate("MapList", "QuickChart maps") + " (*.qct);;"
|
||||
+ qApp->translate("MapList", "TwoNav maps") + " (*.rmap *.rtmap);;"
|
||||
+ qApp->translate("MapList", "Osmdroid SQLite maps") + " (*.sqlite);;"
|
||||
|
@ -98,15 +98,17 @@ qreal OnlineMap::tileSize() const
|
||||
void OnlineMap::draw(QPainter *painter, const QRectF &rect, Flags flags)
|
||||
{
|
||||
qreal scale = OSM::zoom2scale(_zoom, _tileSize);
|
||||
QRectF b(bounds());
|
||||
|
||||
QPoint tile = OSM::mercator2tile(QPointF(rect.topLeft().x() * scale,
|
||||
-rect.topLeft().y() * scale) * coordinatesRatio(), _zoom);
|
||||
QPointF tl(floor(rect.left() / tileSize())
|
||||
* tileSize(), floor(rect.top() / tileSize()) * tileSize());
|
||||
|
||||
QSizeF s(rect.right() - tl.x(), rect.bottom() - tl.y());
|
||||
int width = _zoom ? qCeil(s.width() / tileSize()) : 1;
|
||||
int height = _zoom ? qCeil(s.height() / tileSize()) : 1;
|
||||
QSizeF s(qMin(rect.right() - tl.x(), b.width()),
|
||||
qMin(rect.bottom() - tl.y(), b.height()));
|
||||
int width = ceil(s.width() / tileSize());
|
||||
int height = ceil(s.height() / tileSize());
|
||||
|
||||
QVector<FetchTile> tiles;
|
||||
tiles.reserve(width * height);
|
||||
@ -122,10 +124,9 @@ void OnlineMap::draw(QPainter *painter, const QRectF &rect, Flags flags)
|
||||
|
||||
for (int i = 0; i < tiles.count(); i++) {
|
||||
FetchTile &t = tiles[i];
|
||||
QPointF tp = _zoom ? QPointF(tl.x() + (t.xy().x() - tile.x())
|
||||
* tileSize(), tl.y() + ((_invertY ? (1<<_zoom) - t.xy().y() - 1 :
|
||||
t.xy().y()) - tile.y()) * tileSize())
|
||||
: QPointF(-_tileSize/2, -_tileSize/2);
|
||||
QPointF tp(qMax(tl.x(), b.left()) + (t.xy().x() - tile.x()) * tileSize(),
|
||||
qMax(tl.y(), b.top()) + ((_invertY ? (1<<_zoom) - t.xy().y() - 1 :
|
||||
t.xy().y()) - tile.y()) * tileSize());
|
||||
|
||||
if (!t.pixmap().isNull()) {
|
||||
t.pixmap().setDevicePixelRatio(imageRatio());
|
||||
|
603
src/map/oruxmap.cpp
Normal file
603
src/map/oruxmap.cpp
Normal file
@ -0,0 +1,603 @@
|
||||
#include <QPainter>
|
||||
#include <QPixmapCache>
|
||||
#include <QSqlQuery>
|
||||
#include <QSqlRecord>
|
||||
#include <QSqlField>
|
||||
#include <QFile>
|
||||
#include <QFileInfo>
|
||||
#include <QDir>
|
||||
#include <QXmlStreamReader>
|
||||
#include "pcs.h"
|
||||
#include "utm.h"
|
||||
#include "oruxmap.h"
|
||||
|
||||
|
||||
#define META_TYPE(type) static_cast<QMetaType::Type>(type)
|
||||
|
||||
static bool intAttr(QXmlStreamReader &reader, const QXmlStreamAttributes &attr,
|
||||
const QString &name, int &val)
|
||||
{
|
||||
bool ok;
|
||||
if (!attr.hasAttribute(name)) {
|
||||
reader.raiseError(QString("Missing %1 attribute").arg(name));
|
||||
return false;
|
||||
}
|
||||
val = attr.value(name).toInt(&ok);
|
||||
if (!ok) {
|
||||
reader.raiseError(QString("Invalid %1 attribute").arg(name));
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool dblAttr(QXmlStreamReader &reader, const QXmlStreamAttributes &attr,
|
||||
const QString &name, double &val)
|
||||
{
|
||||
bool ok;
|
||||
if (!attr.hasAttribute(name)) {
|
||||
reader.raiseError(QString("Missing %1 attribute").arg(name));
|
||||
return false;
|
||||
}
|
||||
val = attr.value(name).toDouble(&ok);
|
||||
if (!ok) {
|
||||
reader.raiseError(QString("Invalid %1 attribute").arg(name));
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool strAttr(QXmlStreamReader &reader, const QXmlStreamAttributes &attr,
|
||||
const QString &name, QString &val)
|
||||
{
|
||||
if (!attr.hasAttribute(name)) {
|
||||
reader.raiseError(QString("Missing %1 attribute").arg(name));
|
||||
return false;
|
||||
}
|
||||
|
||||
val = attr.value(name).toString();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static PointD corner2point(const QString &name, const QSize &size)
|
||||
{
|
||||
if (name == "TL")
|
||||
return PointD(0, 0);
|
||||
else if (name == "BR")
|
||||
return PointD(size.width(), size.height());
|
||||
else if (name == "TR")
|
||||
return PointD(size.width(), 0);
|
||||
else if (name == "BL")
|
||||
return PointD(0, size.height());
|
||||
else
|
||||
return PointD();
|
||||
}
|
||||
|
||||
static Projection::Setup lcc2setup(const QStringList &list)
|
||||
{
|
||||
double params[6];
|
||||
bool ok;
|
||||
|
||||
if (list.size() < 7)
|
||||
return Projection::Setup();
|
||||
for (int i = 1; i < 7; i++) {
|
||||
params[i - 1] = list.at(i).toDouble(&ok);
|
||||
if (!ok)
|
||||
return Projection::Setup();
|
||||
}
|
||||
|
||||
return Projection::Setup(params[0], params[1], NAN, params[4],
|
||||
params[5], params[2], params[3]);
|
||||
}
|
||||
|
||||
static Projection::Setup laea2setup(const QStringList &list)
|
||||
{
|
||||
double params[2];
|
||||
bool ok;
|
||||
|
||||
if (list.size() < 3)
|
||||
return Projection::Setup();
|
||||
for (int i = 1; i < 3; i++) {
|
||||
params[i - 1] = list.at(i).toDouble(&ok);
|
||||
if (!ok)
|
||||
return Projection::Setup();
|
||||
}
|
||||
|
||||
return Projection::Setup(params[1], params[0], NAN, 0, 0, NAN, NAN);
|
||||
}
|
||||
|
||||
static Projection::Setup polyconic2setup(const QStringList &list)
|
||||
{
|
||||
double params[3];
|
||||
bool ok;
|
||||
|
||||
if (list.size() < 4)
|
||||
return Projection::Setup();
|
||||
for (int i = 1; i < 4; i++) {
|
||||
params[i - 1] = list.at(i).toDouble(&ok);
|
||||
if (!ok)
|
||||
return Projection::Setup();
|
||||
}
|
||||
|
||||
return Projection::Setup(NAN, params[0], NAN, params[1], params[2], NAN,
|
||||
NAN);
|
||||
}
|
||||
|
||||
static Projection::Setup tm2setup(const QStringList &list)
|
||||
{
|
||||
double params[5];
|
||||
bool ok;
|
||||
|
||||
if (list.size() < 6)
|
||||
return Projection::Setup();
|
||||
for (int i = 1; i < 6; i++) {
|
||||
params[i - 1] = list.at(i).toDouble(&ok);
|
||||
if (!ok)
|
||||
return Projection::Setup();
|
||||
}
|
||||
|
||||
return Projection::Setup(params[1], params[0], params[2], params[3],
|
||||
params[4], NAN, NAN);
|
||||
}
|
||||
|
||||
static Projection::Setup utm2setup(const QStringList &list)
|
||||
{
|
||||
bool ok;
|
||||
if (list.size() < 2)
|
||||
return Projection::Setup();
|
||||
int zone = list.at(1).toInt(&ok);
|
||||
return ok ? UTM::setup(zone) : Projection::Setup();
|
||||
}
|
||||
|
||||
static Projection::Setup mercator2setup(const QStringList &list)
|
||||
{
|
||||
double lon;
|
||||
bool ok;
|
||||
|
||||
if (list.size() < 2)
|
||||
return Projection::Setup(0, 0, NAN, 0, 0, NAN, NAN);
|
||||
lon = list.at(1).toDouble(&ok);
|
||||
|
||||
return ok ? Projection::Setup(0, lon, NAN, 0, 0, NAN, NAN)
|
||||
: Projection::Setup();
|
||||
}
|
||||
|
||||
static GCS createGCS(const QString &datum)
|
||||
{
|
||||
QStringList dl(datum.split(':'));
|
||||
return (GCS::gcs(dl.first()));
|
||||
}
|
||||
|
||||
static Projection createProjection(const GCS &gcs, const QString &name)
|
||||
{
|
||||
PCS pcs;
|
||||
QStringList pl(name.split(','));
|
||||
|
||||
if (pl.first() == "Latitude/Longitude")
|
||||
return Projection(gcs);
|
||||
else if (pl.first() == "UTM")
|
||||
pcs = PCS(gcs, 9807, utm2setup(pl), 9001);
|
||||
else if (pl.first() == "Mercator")
|
||||
pcs = PCS(gcs, 1024, Projection::Setup(), 9001);
|
||||
else if (pl.first() == "Mercator Ellipsoidal")
|
||||
pcs = PCS(gcs, 9804, mercator2setup(pl), 9001);
|
||||
else if (pl.first() == "Transverse Mercator")
|
||||
pcs = PCS(gcs, 9807, tm2setup(pl), 9001);
|
||||
else if (pl.first() == "Lambert Conformal Conic")
|
||||
pcs = PCS(gcs, 9802, lcc2setup(pl), 9001);
|
||||
else if (pl.first() == "(A)Lambert Azimuthual Equal Area")
|
||||
pcs = PCS(gcs, 9820, laea2setup(pl), 9001);
|
||||
else if (pl.first() == "Polyconic (American)")
|
||||
pcs = PCS(gcs, 9818, polyconic2setup(pl), 9001);
|
||||
else if (pl.first() == "(IG) Irish Grid")
|
||||
pcs = PCS(gcs, 9807, Projection::Setup(53.5, -8, 1.000035, 200000,
|
||||
250000, NAN, NAN), 9001);
|
||||
else if (pl.first() == "(SUI) Swiss Grid")
|
||||
pcs = PCS(gcs, 9815, Projection::Setup(46.570866, 7.26225, 1.0, 600000,
|
||||
200000, 90.0, 90.0), 9001);
|
||||
else if (pl.first() == "Rijksdriehoeksmeting")
|
||||
pcs = PCS(gcs, 9809, Projection::Setup(52.1561605555556,
|
||||
5.38763888888889, 0.9999079, 155000, 463000, NAN, NAN), 9001);
|
||||
else
|
||||
return Projection();
|
||||
|
||||
return Projection(pcs);
|
||||
}
|
||||
|
||||
static Transform computeTransformation(const Projection &proj,
|
||||
const QList<CalibrationPoint> &points)
|
||||
{
|
||||
QList<ReferencePoint> rp;
|
||||
|
||||
for (int i = 0; i < points.size(); i++)
|
||||
rp.append(points.at(i).rp(proj));
|
||||
|
||||
return Transform(rp);
|
||||
}
|
||||
|
||||
void OruxMap::calibrationPoints(QXmlStreamReader &reader, const QSize &size,
|
||||
QList<CalibrationPoint> &points)
|
||||
{
|
||||
while (reader.readNextStartElement()) {
|
||||
if (reader.name() == QLatin1String("CalibrationPoint")) {
|
||||
double lon, lat;
|
||||
QString corner;
|
||||
|
||||
QXmlStreamAttributes attr = reader.attributes();
|
||||
if (!dblAttr(reader, attr, "lat", lat))
|
||||
return;
|
||||
if (!dblAttr(reader, attr, "lon", lon))
|
||||
return;
|
||||
if (!strAttr(reader, attr, "corner", corner))
|
||||
return;
|
||||
|
||||
CalibrationPoint p(corner2point(corner, size), Coordinates(lon, lat));
|
||||
if (!p.isValid()) {
|
||||
reader.raiseError(QString("invalid calibration point"));
|
||||
return;
|
||||
}
|
||||
points.append(p);
|
||||
|
||||
reader.readElementText();
|
||||
} else
|
||||
reader.skipCurrentElement();
|
||||
}
|
||||
}
|
||||
|
||||
void OruxMap::mapCalibration(QXmlStreamReader &reader, const QString &dir,
|
||||
int level)
|
||||
{
|
||||
int zoom;
|
||||
QSize tileSize, size, calibrationSize;
|
||||
QString fileName;
|
||||
Projection proj;
|
||||
Transform t;
|
||||
|
||||
QXmlStreamAttributes attr = reader.attributes();
|
||||
if (!intAttr(reader, attr, "layerLevel", zoom))
|
||||
return;
|
||||
|
||||
while (reader.readNextStartElement()) {
|
||||
if (reader.name() == QLatin1String("OruxTracker"))
|
||||
oruxTracker(reader, dir, level + 1);
|
||||
else if (reader.name() == QLatin1String("MapName")) {
|
||||
QString name(reader.readElementText());
|
||||
if (!level && dir.isEmpty())
|
||||
_name = name;
|
||||
} else if (reader.name() == QLatin1String("MapChunks")) {
|
||||
int xMax, yMax, width, height;
|
||||
QString datum, projection;
|
||||
|
||||
QXmlStreamAttributes attr = reader.attributes();
|
||||
if (!intAttr(reader, attr, "xMax", xMax))
|
||||
return;
|
||||
if (!intAttr(reader, attr, "yMax", yMax))
|
||||
return;
|
||||
if (!intAttr(reader, attr, "img_width", width))
|
||||
return;
|
||||
if (!intAttr(reader, attr, "img_height", height))
|
||||
return;
|
||||
if (!strAttr(reader, attr, "datum", datum))
|
||||
return;
|
||||
if (!strAttr(reader, attr, "projection", projection))
|
||||
return;
|
||||
if (!strAttr(reader, attr, "file_name", fileName))
|
||||
return;
|
||||
|
||||
tileSize = QSize(width, height);
|
||||
size = QSize(xMax * width, yMax * height);
|
||||
calibrationSize = size;
|
||||
|
||||
GCS gcs(createGCS(datum));
|
||||
if (!gcs.isValid()) {
|
||||
reader.raiseError(QString("%1: invalid/unknown datum")
|
||||
.arg(datum));
|
||||
return;
|
||||
}
|
||||
proj = createProjection(gcs, projection);
|
||||
if (!proj.isValid()) {
|
||||
reader.raiseError(QString("%1: invalid/unknown projection")
|
||||
.arg(projection));
|
||||
return;
|
||||
}
|
||||
|
||||
reader.readElementText();
|
||||
|
||||
} else if (reader.name() == QLatin1String("MapDimensions")) {
|
||||
int height, width;
|
||||
|
||||
QXmlStreamAttributes attr = reader.attributes();
|
||||
if (!intAttr(reader, attr, "height", height))
|
||||
return;
|
||||
if (!intAttr(reader, attr, "width", width))
|
||||
return;
|
||||
|
||||
calibrationSize = QSize(width, height);
|
||||
|
||||
reader.readElementText();
|
||||
} else if (reader.name() == QLatin1String("CalibrationPoints")) {
|
||||
QList<CalibrationPoint> points;
|
||||
|
||||
calibrationPoints(reader, calibrationSize, points);
|
||||
|
||||
t = computeTransformation(proj, points);
|
||||
if (!t.isValid()) {
|
||||
reader.raiseError(t.errorString());
|
||||
return;
|
||||
}
|
||||
} else
|
||||
reader.skipCurrentElement();
|
||||
}
|
||||
|
||||
if (tileSize.isValid()) {
|
||||
if (!t.isValid()) {
|
||||
reader.raiseError("Invalid map calibration");
|
||||
return;
|
||||
}
|
||||
|
||||
QDir mapDir(QFileInfo(path()).absoluteDir());
|
||||
QDir subDir = dir.isEmpty()
|
||||
? mapDir : QDir(mapDir.absoluteFilePath(dir));
|
||||
QString set(subDir.absoluteFilePath("set"));
|
||||
|
||||
_zooms.append(Zoom(zoom, tileSize, size, proj, t, fileName, set));
|
||||
}
|
||||
}
|
||||
|
||||
void OruxMap::oruxTracker(QXmlStreamReader &reader, const QString &dir,
|
||||
int level)
|
||||
{
|
||||
if (level > 1 || (level && !dir.isEmpty())) {
|
||||
reader.raiseError("invalid map nesting");
|
||||
return;
|
||||
}
|
||||
|
||||
while (reader.readNextStartElement()) {
|
||||
if (reader.name() == QLatin1String("MapCalibration"))
|
||||
mapCalibration(reader, dir, level);
|
||||
else
|
||||
reader.skipCurrentElement();
|
||||
}
|
||||
}
|
||||
|
||||
bool OruxMap::readXML(const QString &path, const QString &dir)
|
||||
{
|
||||
QFile file(path);
|
||||
|
||||
if (!file.open(QFile::ReadOnly | QFile::Text))
|
||||
return false;
|
||||
|
||||
QXmlStreamReader reader(&file);
|
||||
if (reader.readNextStartElement()) {
|
||||
if (reader.name() == QLatin1String("OruxTracker"))
|
||||
oruxTracker(reader, dir, 0);
|
||||
else
|
||||
reader.raiseError("Not a Orux map calibration file");
|
||||
}
|
||||
if (reader.error()) {
|
||||
_errorString = QString("%1: %2").arg(reader.lineNumber())
|
||||
.arg(reader.errorString());
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
OruxMap::OruxMap(const QString &fileName, QObject *parent)
|
||||
: Map(fileName, parent), _zoom(0), _mapRatio(1.0), _valid(false)
|
||||
{
|
||||
QFileInfo fi(fileName);
|
||||
QDir dir(fi.absoluteDir());
|
||||
|
||||
if (!readXML(fileName))
|
||||
return;
|
||||
if (_zooms.isEmpty()) {
|
||||
QStringList list(dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot));
|
||||
for (int i = 0; i < list.size(); i++) {
|
||||
QDir subDir(dir.absoluteFilePath(list.at(i)));
|
||||
if (!readXML(subDir.absoluteFilePath(list.at(i) + ".otrk2.xml"),
|
||||
list.at(i))) {
|
||||
_errorString = list.at(i) + ": " + _errorString;
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (_zooms.isEmpty()) {
|
||||
_errorString = "No usable zoom level found";
|
||||
return;
|
||||
}
|
||||
}
|
||||
std::sort(_zooms.begin(), _zooms.end());
|
||||
|
||||
|
||||
if (dir.exists("OruxMapsImages.db")) {
|
||||
QString dbFile(dir.absoluteFilePath("OruxMapsImages.db"));
|
||||
_db = QSqlDatabase::addDatabase("QSQLITE", dbFile);
|
||||
_db.setDatabaseName(dbFile);
|
||||
_db.setConnectOptions("QSQLITE_OPEN_READONLY");
|
||||
if (!_db.open()) {
|
||||
_errorString = "Error opening database file";
|
||||
return;
|
||||
}
|
||||
|
||||
QSqlRecord r = _db.record("tiles");
|
||||
if (r.isEmpty()
|
||||
|| r.field(0).name() != "x"
|
||||
|| META_TYPE(r.field(0).type()) != QMetaType::Int
|
||||
|| r.field(1).name() != "y"
|
||||
|| META_TYPE(r.field(1).type()) != QMetaType::Int
|
||||
|| r.field(2).name() != "z"
|
||||
|| META_TYPE(r.field(2).type()) != QMetaType::Int
|
||||
|| r.field(3).name() != "image"
|
||||
|| META_TYPE(r.field(3).type()) != QMetaType::QByteArray) {
|
||||
_errorString = "Invalid table format";
|
||||
return;
|
||||
}
|
||||
|
||||
_db.close();
|
||||
} else {
|
||||
for (int i = 0; i < _zooms.size(); i++) {
|
||||
if (!_zooms.at(i).set.exists()) {
|
||||
_errorString = "missing set directory (level "
|
||||
+ QString::number(_zooms.at(i).zoom) + ")";
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
_valid = true;
|
||||
}
|
||||
|
||||
int OruxMap::zoomFit(const QSize &size, const RectC &rect)
|
||||
{
|
||||
if (!rect.isValid())
|
||||
_zoom = _zooms.size() - 1;
|
||||
else {
|
||||
for (int i = 1; i < _zooms.size(); i++) {
|
||||
_zoom = i;
|
||||
QRect sbr(QPoint(ll2xy(rect.topLeft()).toPoint()),
|
||||
QPoint(ll2xy(rect.bottomRight()).toPoint()));
|
||||
if (sbr.size().width() >= size.width() || sbr.size().height()
|
||||
>= size.height()) {
|
||||
_zoom--;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return _zoom;
|
||||
}
|
||||
|
||||
int OruxMap::zoomIn()
|
||||
{
|
||||
_zoom = qMin(_zoom + 1, _zooms.size() - 1);
|
||||
return _zoom;
|
||||
}
|
||||
|
||||
int OruxMap::zoomOut()
|
||||
{
|
||||
_zoom = qMax(_zoom - 1, 0);
|
||||
return _zoom;
|
||||
}
|
||||
|
||||
void OruxMap::load()
|
||||
{
|
||||
if (_db.isValid())
|
||||
_db.open();
|
||||
}
|
||||
|
||||
void OruxMap::unload()
|
||||
{
|
||||
if (_db.isValid())
|
||||
_db.close();
|
||||
}
|
||||
|
||||
void OruxMap::setDevicePixelRatio(qreal deviceRatio, qreal mapRatio)
|
||||
{
|
||||
Q_UNUSED(deviceRatio);
|
||||
_mapRatio = mapRatio;
|
||||
}
|
||||
|
||||
QPixmap OruxMap::tile(const Zoom &z, int x, int y) const
|
||||
{
|
||||
if (_db.isValid()) {
|
||||
QSqlQuery query(_db);
|
||||
query.prepare("SELECT image FROM tiles WHERE z=:z AND x=:x AND y=:y");
|
||||
query.bindValue(":z", z.zoom);
|
||||
query.bindValue(":x", x);
|
||||
query.bindValue(":y", y);
|
||||
query.exec();
|
||||
|
||||
if (!query.first()) {
|
||||
qWarning("%s: SQL %d-%d-%d: not found", qPrintable(name()), z.zoom,
|
||||
x, y);
|
||||
return QPixmap();
|
||||
} else {
|
||||
QImage img(QImage::fromData(query.value(0).toByteArray()));
|
||||
return QPixmap::fromImage(img);
|
||||
}
|
||||
} else {
|
||||
QString fileName(z.fileName + "_" + QString::number(x) + "_"
|
||||
+ QString::number(y) + ".omc2");
|
||||
QString path(z.set.absoluteFilePath(fileName));
|
||||
if (!QFileInfo::exists(path)) {
|
||||
qWarning("%s: %s: not found", qPrintable(name()),
|
||||
qPrintable(fileName));
|
||||
return QPixmap();
|
||||
} else {
|
||||
QImage img(path);
|
||||
return QPixmap::fromImage(img);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void OruxMap::draw(QPainter *painter, const QRectF &rect, Flags flags)
|
||||
{
|
||||
Q_UNUSED(flags);
|
||||
const Zoom &z = _zooms.at(_zoom);
|
||||
QSizeF ts(z.tileSize.width() / _mapRatio, z.tileSize.height() / _mapRatio);
|
||||
QPointF tl(floor(rect.left() / ts.width()) * ts.width(),
|
||||
floor(rect.top() / ts.height()) * ts.height());
|
||||
|
||||
QSizeF s(rect.right() - tl.x(), rect.bottom() - tl.y());
|
||||
for (int i = 0; i < ceil(s.width() / ts.width()); i++) {
|
||||
for (int j = 0; j < ceil(s.height() / ts.height()); j++) {
|
||||
int x = round(tl.x() * _mapRatio + i * z.tileSize.width());
|
||||
int y = round(tl.y() * _mapRatio + j * z.tileSize.height());
|
||||
|
||||
QPixmap pixmap;
|
||||
QString key = path() + "/" + QString::number(z.zoom)
|
||||
+ "_" + QString::number(x/z.tileSize.width())
|
||||
+ "_" + QString::number(y/z.tileSize.height());
|
||||
if (!QPixmapCache::find(key, &pixmap)) {
|
||||
pixmap = tile(z, x/z.tileSize.width(), y/z.tileSize.height());
|
||||
if (!pixmap.isNull())
|
||||
QPixmapCache::insert(key, pixmap);
|
||||
}
|
||||
|
||||
if (!pixmap.isNull()) {
|
||||
pixmap.setDevicePixelRatio(_mapRatio);
|
||||
QPointF tp(tl.x() + i * ts.width(), tl.y() + j * ts.height());
|
||||
painter->drawPixmap(tp, pixmap);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
QRectF OruxMap::bounds()
|
||||
{
|
||||
const Zoom &z = _zooms.at(_zoom);
|
||||
return QRectF(QPointF(0, 0), z.size / _mapRatio);
|
||||
}
|
||||
|
||||
QPointF OruxMap::ll2xy(const Coordinates &c)
|
||||
{
|
||||
const Zoom &z = _zooms.at(_zoom);
|
||||
QPointF p(z.transform.proj2img(z.projection.ll2xy(c)));
|
||||
return (p / _mapRatio);
|
||||
}
|
||||
|
||||
Coordinates OruxMap::xy2ll(const QPointF &p)
|
||||
{
|
||||
const Zoom &z = _zooms.at(_zoom);
|
||||
return z.projection.xy2ll(z.transform.img2proj(p * _mapRatio));
|
||||
}
|
||||
|
||||
Map *OruxMap::create(const QString &path, const Projection &, bool *isDir)
|
||||
{
|
||||
if (isDir)
|
||||
*isDir = true;
|
||||
|
||||
return new OruxMap(path);
|
||||
}
|
||||
|
||||
#ifndef QT_NO_DEBUG
|
||||
QDebug operator<<(QDebug dbg, const OruxMap::Zoom &zoom)
|
||||
{
|
||||
dbg.nospace() << "Zoom(" << zoom.zoom << ", " << zoom.tileSize << ", "
|
||||
<< zoom.size << ")";
|
||||
|
||||
return dbg.space();
|
||||
}
|
||||
#endif // QT_NO_DEBUG
|
83
src/map/oruxmap.h
Normal file
83
src/map/oruxmap.h
Normal file
@ -0,0 +1,83 @@
|
||||
#ifndef ORUXMAP_H
|
||||
#define ORUXMAP_H
|
||||
|
||||
#include <QDebug>
|
||||
#include <QSqlDatabase>
|
||||
#include <QDir>
|
||||
#include "map.h"
|
||||
#include "projection.h"
|
||||
#include "transform.h"
|
||||
#include "calibrationpoint.h"
|
||||
|
||||
class QXmlStreamReader;
|
||||
|
||||
class OruxMap : public Map
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
OruxMap(const QString &fileName, QObject *parent = 0);
|
||||
|
||||
QString name() const {return _name;}
|
||||
|
||||
QRectF bounds();
|
||||
|
||||
int zoom() const {return _zoom;}
|
||||
void setZoom(int zoom) {_zoom = zoom;}
|
||||
int zoomFit(const QSize &size, const RectC &rect);
|
||||
int zoomIn();
|
||||
int zoomOut();
|
||||
|
||||
QPointF ll2xy(const Coordinates &c);
|
||||
Coordinates xy2ll(const QPointF &p);
|
||||
|
||||
void draw(QPainter *painter, const QRectF &rect, Flags flags);
|
||||
|
||||
void setDevicePixelRatio(qreal deviceRatio, qreal mapRatio);
|
||||
void load();
|
||||
void unload();
|
||||
|
||||
bool isValid() const {return _valid;}
|
||||
QString errorString() const {return _errorString;}
|
||||
|
||||
static Map *create(const QString &path, const Projection &, bool *isDir);
|
||||
|
||||
private:
|
||||
struct Zoom {
|
||||
Zoom(int zoom, const QSize &tileSize, const QSize &size,
|
||||
const Projection &proj, const Transform &transform,
|
||||
const QString &fileName, const QString &set)
|
||||
: zoom(zoom), tileSize(tileSize), size(size), projection(proj),
|
||||
transform(transform), fileName(fileName), set(set) {}
|
||||
bool operator<(const Zoom &other) const
|
||||
{return zoom < other.zoom;}
|
||||
|
||||
int zoom;
|
||||
QSize tileSize;
|
||||
QSize size;
|
||||
Projection projection;
|
||||
Transform transform;
|
||||
QString fileName;
|
||||
QDir set;
|
||||
};
|
||||
|
||||
bool readXML(const QString &path, const QString &dir = QString());
|
||||
void oruxTracker(QXmlStreamReader &reader, const QString &dir, int level);
|
||||
void mapCalibration(QXmlStreamReader &reader, const QString &dir, int level);
|
||||
void calibrationPoints(QXmlStreamReader &reader, const QSize &size,
|
||||
QList<CalibrationPoint> &points);
|
||||
QPixmap tile(const Zoom &z, int x, int y) const;
|
||||
|
||||
friend QDebug operator<<(QDebug dbg, const Zoom &zoom);
|
||||
|
||||
QString _name;
|
||||
QList<Zoom> _zooms;
|
||||
QSqlDatabase _db;
|
||||
int _zoom;
|
||||
qreal _mapRatio;
|
||||
|
||||
bool _valid;
|
||||
QString _errorString;
|
||||
};
|
||||
|
||||
#endif // ORUXMAP_H
|
Reference in New Issue
Block a user