1
0
mirror of https://github.com/tumic0/GPXSee.git synced 2025-07-21 14:24:24 +02:00

Compare commits

..

34 Commits
11.11 ... 11.12

Author SHA1 Message Date
80ec7f624e Moved maps and csv from pkg to data 2023-01-26 01:51:46 +01:00
bfeb6d266e Some more iso8211 code cleanup 2023-01-26 01:13:15 +01:00
af3e5d41c2 Split the config header to config+hash headers 2023-01-26 01:11:56 +01:00
51511a9bf9 Fixed broken parsing of KML tracks with empty coordinates 2023-01-25 09:01:20 +01:00
2549204662 Use CFBundleLocalizations instead of lproj directories 2023-01-24 23:01:40 +01:00
b826c856fc Extended Info.plist with some more bundle info 2023-01-24 09:19:13 +01:00
1afe74242a Properly handle locales with sub-languages 2023-01-24 08:33:48 +01:00
b43412b135 Added Korean localization 2023-01-23 23:48:00 +01:00
bbad4eb8d9 Merge branch 'origin/master' into Weblate. 2023-01-23 23:10:54 +01:00
f6c128fbf6 Create localization lproj directories on OS X
+ pkg dir structure cleanup
2023-01-23 23:11:05 +01:00
b955c4d45e Translated using Weblate (Korean)
Currently translated at 100.0% (440 of 440 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/ko/
2023-01-23 15:50:01 +01:00
e26a776576 Translated using Weblate (Esperanto)
Currently translated at 93.1% (434 of 466 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/eo/
2023-01-23 15:49:59 +01:00
52c4e97be5 Translated using Weblate (Russian)
Currently translated at 100.0% (466 of 466 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/ru/
2023-01-23 15:49:59 +01:00
49bd2b9501 Translated using Weblate (Finnish)
Currently translated at 97.2% (453 of 466 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/fi/
2023-01-23 15:49:59 +01:00
ab76521990 ISO8211 API cleanup 2023-01-19 10:08:17 +01:00
ee73908231 Do not treat Ozimaps as directories
Directory parsing was stopped at the level of the map which is not what we
want - users would have to create separate directories for every Ozimap.
2023-01-19 10:04:03 +01:00
3af98b6785 Fixed typo 2023-01-16 21:16:20 +01:00
05657ccdce Version++ 2023-01-15 10:10:48 +01:00
a698aa96cd Trying to fix the Android CI build...
no. 5
2023-01-14 15:20:40 +01:00
a7fef63461 Trying to fix the Android CI build...
no. 4
2023-01-14 15:08:58 +01:00
83217d31a7 Trying to fix the Android CI build...
no. 3
2023-01-14 14:46:45 +01:00
4191f5414f Trying to fix the Android CI build...
no. 2
2023-01-14 14:20:04 +01:00
bf81994aa0 Trying to fix the Android CI build... 2023-01-14 14:00:43 +01:00
21c02010f7 Improved marine charts render style 2023-01-14 13:00:36 +01:00
c209e24db8 Optimization/code cleanup 2023-01-14 08:45:18 +01:00
9ff7ecea97 ENC signal stations 2023-01-11 23:03:54 +01:00
78e3c78197 Added safety zone lines 2023-01-09 23:58:03 +01:00
38cd871178 Cleanup 2023-01-05 22:13:26 +01:00
5594bf74b6 Run the CodeQL action manually only 2023-01-05 22:02:25 +01:00
65515143eb Added missing include guard prefix 2023-01-05 21:44:03 +01:00
29895420b6 Fixed broken temperature units translations 2023-01-01 16:54:44 +01:00
88f7e13500 Added alignment check 2022-12-23 08:35:59 +01:00
51335a0f84 Added missing build dependencies 2022-12-16 16:34:32 +01:00
077cc20934 Create codeql.yml 2022-12-16 16:23:59 +01:00
51 changed files with 730 additions and 609 deletions

View File

@ -1,4 +1,4 @@
version: 11.11.{build} version: 11.12.{build}
configuration: configuration:
- Release - Release
@ -28,9 +28,9 @@ build_script:
md installer md installer
copy release\GPXSee.exe installer copy release\GPXSee.exe installer
windeployqt --release installer\GPXSee.exe windeployqt --release installer\GPXSee.exe
copy pkg\gpxsee64.nsi installer copy pkg\windows\gpxsee64.nsi installer
xcopy pkg\csv installer\csv /i xcopy data\csv installer\csv /i
xcopy pkg\maps installer\maps /i xcopy data\maps installer\maps /i
xcopy lang\*.qm installer\translations\ /sy xcopy lang\*.qm installer\translations\ /sy
xcopy icons\symbols installer\symbols /i xcopy icons\symbols installer\symbols /i
copy licence.txt installer copy licence.txt installer

45
.github/workflows/codeql.yml vendored Normal file
View File

@ -0,0 +1,45 @@
name: "CodeQL"
on: [workflow_dispatch]
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
permissions:
actions: read
contents: read
security-events: write
strategy:
fail-fast: false
matrix:
language: [ 'cpp' ]
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install qtbase5-dev qtbase5-private-dev qtbase5-dev-tools qt5-qmake qttools5-dev-tools libqt5opengl5-dev qtpositioning5-dev libqt5svg5-dev
- name: Initialize CodeQL
uses: github/codeql-action/init@v2
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
# queries: security-extended,security-and-quality
- name: Autobuild
uses: github/codeql-action/autobuild@v2
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2
with:
category: "/language:${{matrix.language}}"

View File

Can't render this file because it is too large.

View File

@ -3,7 +3,7 @@ unix:!macx:!android {
} else { } else {
TARGET = GPXSee TARGET = GPXSee
} }
VERSION = 11.11 VERSION = 11.12
QT += core \ QT += core \
gui \ gui \
@ -29,6 +29,7 @@ HEADERS += src/common/config.h \
src/GUI/pluginparameters.h \ src/GUI/pluginparameters.h \
src/common/garmin.h \ src/common/garmin.h \
src/common/coordinates.h \ src/common/coordinates.h \
src/common/hash.h \
src/common/linec.h \ src/common/linec.h \
src/common/range.h \ src/common/range.h \
src/common/rectc.h \ src/common/rectc.h \
@ -472,23 +473,26 @@ TRANSLATIONS = lang/gpxsee_en.ts \
lang/gpxsee_it.ts \ lang/gpxsee_it.ts \
lang/gpxsee_eo.ts \ lang/gpxsee_eo.ts \
lang/gpxsee_zh.ts \ lang/gpxsee_zh.ts \
lang/gpxsee_ca.ts lang/gpxsee_ca.ts \
lang/gpxsee_ko.ts
macx { macx {
ICON = icons/app/gpxsee.icns ICON = icons/app/gpxsee.icns
QMAKE_INFO_PLIST = pkg/Info.plist QMAKE_INFO_PLIST = pkg/mac/Info.plist
locale.path = Contents/Resources/translations locale.path = Contents/Resources/translations
locale.files = $$files(lang/*.qm) locale.files = $$files(lang/*.qm)
csv.path = Contents/Resources csv.path = Contents/Resources
csv.files = pkg/csv csv.files = data/csv
maps.path = Contents/Resources maps.path = Contents/Resources
maps.files = pkg/maps maps.files = data/maps
symbols.path = Contents/Resources/symbols symbols.path = Contents/Resources/symbols
symbols.files = $$files(icons/symbols/*.png) symbols.files = $$files(icons/symbols/*.png)
icons.path = Contents/Resources/icons icons.path = Contents/Resources/icons
icons.files = $$files(icons/formats/*.icns) icons.files = $$files(icons/formats/*.icns)
lproj.path = Contents/Resources
lproj.files = $$files(pkg/mac/lproj/*)
QMAKE_BUNDLE_DATA += locale maps symbols icons csv QMAKE_BUNDLE_DATA += locale maps symbols icons csv lproj
} }
win32 { win32 {
@ -533,9 +537,9 @@ win32 {
unix:!macx:!android { unix:!macx:!android {
isEmpty(PREFIX):PREFIX = /usr/local isEmpty(PREFIX):PREFIX = /usr/local
maps.files = $$files(pkg/maps/*) maps.files = $$files(data/maps/*)
maps.path = $$PREFIX/share/gpxsee/maps maps.path = $$PREFIX/share/gpxsee/maps
csv.files = $$files(pkg/csv/*) csv.files = $$files(data/csv/*)
csv.path = $$PREFIX/share/gpxsee/csv csv.path = $$PREFIX/share/gpxsee/csv
symbols.files = $$files(icons/symbols/*.png) symbols.files = $$files(icons/symbols/*.png)
symbols.path = $$PREFIX/share/gpxsee/symbols symbols.path = $$PREFIX/share/gpxsee/symbols
@ -543,12 +547,14 @@ unix:!macx:!android {
locale.path = $$PREFIX/share/gpxsee/translations locale.path = $$PREFIX/share/gpxsee/translations
icon.files = $$files(icons/app/hicolor/*) icon.files = $$files(icons/app/hicolor/*)
icon.path = $$PREFIX/share/icons/hicolor icon.path = $$PREFIX/share/icons/hicolor
desktop.files = pkg/gpxsee.desktop desktop.files = pkg/linux/gpxsee.desktop
desktop.path = $$PREFIX/share/applications desktop.path = $$PREFIX/share/applications
mime.files = pkg/gpxsee.xml mime.files = pkg/linux/gpxsee.xml
mime.path = $$PREFIX/share/mime/packages mime.path = $$PREFIX/share/mime/packages
appdata.files = pkg/linux/gpxsee.appdata.xml
appdata.path = $$PREFIX/share/metainfo
target.path = $$PREFIX/bin target.path = $$PREFIX/bin
INSTALLS += target maps csv symbols locale icon desktop mime INSTALLS += target maps csv symbols locale icon desktop mime appdata
} }
android { android {
@ -581,9 +587,9 @@ android {
pkg/android/build.gradle \ pkg/android/build.gradle \
pkg/android/res/values/libs.xml pkg/android/res/values/libs.xml
maps.files = $$files(pkg/maps/*) maps.files = $$files(data/maps/*)
maps.path = /assets/maps maps.path = /assets/maps
csv.files = $$files(pkg/csv/*) csv.files = $$files(data/csv/*)
csv.path = /assets/csv csv.path = /assets/csv
symbols.files = $$files(icons/symbols/*.png) symbols.files = $$files(icons/symbols/*.png)
symbols.path = /assets/symbols symbols.path = /assets/symbols

View File

@ -188,6 +188,7 @@
<file alias="silo.png">icons/map/marine/silo.png</file> <file alias="silo.png">icons/map/marine/silo.png</file>
<file alias="turning-basin.png">icons/map/marine/turning-basin.png</file> <file alias="turning-basin.png">icons/map/marine/turning-basin.png</file>
<file alias="entry-prohibited-line.png">icons/map/marine/entry-prohibited-line.png</file> <file alias="entry-prohibited-line.png">icons/map/marine/entry-prohibited-line.png</file>
<file alias="safety-zone-line.png">icons/map/marine/safety-zone-line.png</file>
<file alias="cable-area-line.png">icons/map/marine/cable-area-line.png</file> <file alias="cable-area-line.png">icons/map/marine/cable-area-line.png</file>
<file alias="pipeline-area-line.png">icons/map/marine/pipeline-area-line.png</file> <file alias="pipeline-area-line.png">icons/map/marine/pipeline-area-line.png</file>
<file alias="windmotor.png">icons/map/marine/windmotor.png</file> <file alias="windmotor.png">icons/map/marine/windmotor.png</file>
@ -203,7 +204,7 @@
<!-- Mapsforge rendertheme --> <!-- Mapsforge rendertheme -->
<qresource prefix="/mapsforge"> <qresource prefix="/mapsforge">
<file alias="default.xml">data/default.xml</file> <file alias="default.xml">data/mapsforge/default.xml</file>
<file alias="patterns/hills.svg">icons/map/mapsforge/patterns/hills.svg</file> <file alias="patterns/hills.svg">icons/map/mapsforge/patterns/hills.svg</file>
<file alias="patterns/farmland.svg">icons/map/mapsforge/patterns/farmland.svg</file> <file alias="patterns/farmland.svg">icons/map/mapsforge/patterns/farmland.svg</file>

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 B

View File

@ -556,7 +556,7 @@
<message> <message>
<location filename="../src/GUI/gui.cpp" line="432"/> <location filename="../src/GUI/gui.cpp" line="432"/>
<source>Use styles</source> <source>Use styles</source>
<translation type="unfinished"></translation> <translation>Uzi stilojn</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="439"/> <location filename="../src/GUI/gui.cpp" line="439"/>
@ -603,7 +603,7 @@
<message> <message>
<location filename="../src/GUI/gui.cpp" line="482"/> <location filename="../src/GUI/gui.cpp" line="482"/>
<source>Show tabs</source> <source>Show tabs</source>
<translation type="unfinished"></translation> <translation>Montri langetojn</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="491"/> <location filename="../src/GUI/gui.cpp" line="491"/>
@ -1241,7 +1241,7 @@
<message> <message>
<location filename="../src/map/maplist.cpp" line="158"/> <location filename="../src/map/maplist.cpp" line="158"/>
<source>Electronic Navigational Charts</source> <source>Electronic Navigational Charts</source>
<translation type="unfinished"></translation> <translation>ENC-mapoj</translation>
</message> </message>
<message> <message>
<location filename="../src/map/maplist.cpp" line="165"/> <location filename="../src/map/maplist.cpp" line="165"/>

View File

@ -557,7 +557,7 @@
<message> <message>
<location filename="../src/GUI/gui.cpp" line="432"/> <location filename="../src/GUI/gui.cpp" line="432"/>
<source>Use styles</source> <source>Use styles</source>
<translation type="unfinished"></translation> <translation>Käytä tyylejä</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="439"/> <location filename="../src/GUI/gui.cpp" line="439"/>

View File

@ -2397,12 +2397,12 @@
<message> <message>
<location filename="../src/GUI/temperaturegraph.cpp" line="111"/> <location filename="../src/GUI/temperaturegraph.cpp" line="111"/>
<source>C</source> <source>C</source>
<translation>°C</translation> <translation>C</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/temperaturegraph.cpp" line="115"/> <location filename="../src/GUI/temperaturegraph.cpp" line="115"/>
<source>F</source> <source>F</source>
<translation>°F</translation> <translation>F</translation>
</message> </message>
</context> </context>
<context> <context>
@ -2410,12 +2410,12 @@
<message> <message>
<location filename="../src/GUI/temperaturegraphitem.cpp" line="21"/> <location filename="../src/GUI/temperaturegraphitem.cpp" line="21"/>
<source>C</source> <source>C</source>
<translation>°C</translation> <translation>C</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/temperaturegraphitem.cpp" line="21"/> <location filename="../src/GUI/temperaturegraphitem.cpp" line="21"/>
<source>F</source> <source>F</source>
<translation>°F</translation> <translation>F</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/temperaturegraphitem.cpp" line="24"/> <location filename="../src/GUI/temperaturegraphitem.cpp" line="24"/>

File diff suppressed because it is too large Load Diff

View File

@ -557,7 +557,7 @@
<message> <message>
<location filename="../src/GUI/gui.cpp" line="432"/> <location filename="../src/GUI/gui.cpp" line="432"/>
<source>Use styles</source> <source>Use styles</source>
<translation type="unfinished"></translation> <translation>Использовать стили</translation>
</message> </message>
<message> <message>
<location filename="../src/GUI/gui.cpp" line="439"/> <location filename="../src/GUI/gui.cpp" line="439"/>
@ -1247,7 +1247,7 @@
<message> <message>
<location filename="../src/map/maplist.cpp" line="158"/> <location filename="../src/map/maplist.cpp" line="158"/>
<source>Electronic Navigational Charts</source> <source>Electronic Navigational Charts</source>
<translation type="unfinished"></translation> <translation>Морские карты ENC</translation>
</message> </message>
<message> <message>
<location filename="../src/map/maplist.cpp" line="165"/> <location filename="../src/map/maplist.cpp" line="165"/>

View File

@ -34,8 +34,10 @@ android {
* Changing them manually might break the compilation! * Changing them manually might break the compilation!
*******************************************************/ *******************************************************/
compileSdkVersion androidCompileSdkVersion.toInteger() //compileSdkVersion androidCompileSdkVersion.toInteger()
buildToolsVersion androidBuildToolsVersion compileSdkVersion 31
//buildToolsVersion androidBuildToolsVersion
buildToolsVersion '31.0.0'
ndkVersion androidNdkVersion ndkVersion androidNdkVersion
sourceSets { sourceSets {

View File

@ -1,14 +0,0 @@
# Project-wide Gradle settings.
# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
org.gradle.jvmargs=-Xmx2500m -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
# Enable building projects in parallel
org.gradle.parallel=true
# Gradle caching allows reusing the build artifacts from a previous
# build with the same inputs. However, over time, the cache size will
# grow. Uncomment the following line to enable it.
#org.gradle.caching=true

View File

@ -2,8 +2,12 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0"> <plist version="1.0">
<dict> <dict>
<key>NSPrincipalClass</key> <key>CFBundleDevelopmentRegion</key>
<string>NSApplication</string> <string>English</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>GPXSee</string>
<key>CFBundleIconFile</key> <key>CFBundleIconFile</key>
<string>@ICON@</string> <string>@ICON@</string>
<key>CFBundlePackageType</key> <key>CFBundlePackageType</key>
@ -16,6 +20,34 @@
<string>@EXECUTABLE@</string> <string>@EXECUTABLE@</string>
<key>CFBundleIdentifier</key> <key>CFBundleIdentifier</key>
<string>org.gpxsee.GPXSee</string> <string>org.gpxsee.GPXSee</string>
<key>CFBundleVersion</key>
<string>@FULL_VERSION@</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
<key>CFBundleLocalizations</key>
<array>
<string>ca</string>
<string>cs</string>
<string>da</string>
<string>de</string>
<string>en</string>
<string>eo</string>
<string>es</string>
<string>fi</string>
<string>fr</string>
<string>hu</string>
<string>it</string>
<string>ko</string>
<string>nb</string>
<string>pl</string>
<string>pt_BR</string>
<string>ru</string>
<string>sv</string>
<string>tr</string>
<string>uk</string>
<string>zh_CN</string>
</array>
<key>CFBundleDocumentTypes</key> <key>CFBundleDocumentTypes</key>
<array> <array>

View File

@ -37,7 +37,7 @@ Unicode true
; The name of the installer ; The name of the installer
Name "GPXSee" Name "GPXSee"
; Program version ; Program version
!define VERSION "11.11" !define VERSION "11.12"
; The file to write ; The file to write
OutFile "GPXSee-${VERSION}_x64.exe" OutFile "GPXSee-${VERSION}_x64.exe"
@ -325,6 +325,7 @@ SectionGroup "Localization" SEC_LOCALIZATION
!insertmacro LOCALIZATION "German" "de" !insertmacro LOCALIZATION "German" "de"
!insertmacro LOCALIZATION "Hungarian" "hu" !insertmacro LOCALIZATION "Hungarian" "hu"
!insertmacro LOCALIZATION "Italian" "it" !insertmacro LOCALIZATION "Italian" "it"
!insertmacro LOCALIZATION "Korean" "ko"
!insertmacro LOCALIZATION "Norwegian" "nb" !insertmacro LOCALIZATION "Norwegian" "nb"
!insertmacro LOCALIZATION "Polish" "pl" !insertmacro LOCALIZATION "Polish" "pl"
!insertmacro LOCALIZATION "Portuguese (Brazil)" "pt_BR" !insertmacro LOCALIZATION "Portuguese (Brazil)" "pt_BR"

View File

@ -28,10 +28,10 @@ App::App(int &argc, char **argv) : QApplication(argc, argv)
#endif #endif
setApplicationVersion(APP_VERSION); setApplicationVersion(APP_VERSION);
QTranslator *gpxsee = new QTranslator(this); QTranslator *app = new QTranslator(this);
if (gpxsee->load(QLocale::system(), "gpxsee", "_", if (app->load(QLocale::system(), "gpxsee", "_",
ProgramPaths::translationsDir())) ProgramPaths::translationsDir()))
installTranslator(gpxsee); installTranslator(app);
QTranslator *qt = new QTranslator(this); QTranslator *qt = new QTranslator(this);
#if defined(Q_OS_WIN32) || defined(Q_OS_MAC) #if defined(Q_OS_WIN32) || defined(Q_OS_MAC)

View File

@ -26,6 +26,7 @@
#include <QStyle> #include <QStyle>
#include <QTabBar> #include <QTabBar>
#include <QGeoPositionInfoSource> #include <QGeoPositionInfoSource>
#include "common/config.h"
#include "common/programpaths.h" #include "common/programpaths.h"
#include "common/downloader.h" #include "common/downloader.h"
#include "data/data.h" #include "data/data.h"

View File

@ -7,7 +7,6 @@
#include <QList> #include <QList>
#include <QFlags> #include <QFlags>
#include "common/rectc.h" #include "common/rectc.h"
#include "common/config.h"
#include "data/waypoint.h" #include "data/waypoint.h"
#include "map/projection.h" #include "map/projection.h"
#include "searchpointer.h" #include "searchpointer.h"

View File

@ -1,7 +1,7 @@
#ifndef SEARCHPOINTER_H #ifndef SEARCHPOINTER_H
#define SEARCHPOINTER_H #define SEARCHPOINTER_H
#include "common/config.h" #include "common/hash.h"
template <class T> template <class T>
class SearchPointer class SearchPointer

View File

@ -1,21 +1,7 @@
#ifndef CONFIG_H #ifndef CONFIG_H
#define CONFIG_H #define CONFIG_H
#include <QtGlobal>
#include <QPoint>
#define APP_NAME "GPXSee" #define APP_NAME "GPXSee"
#define APP_HOMEPAGE "http://www.gpxsee.org" #define APP_HOMEPAGE "http://www.gpxsee.org"
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
#define HASH_T uint
#else // QT6
#define HASH_T size_t
#endif // QT6
inline HASH_T qHash(const QPoint &p)
{
return ::qHash(p.x()) ^ ::qHash(p.y());
}
#endif /* CONFIG_H */ #endif /* CONFIG_H */

18
src/common/hash.h Normal file
View File

@ -0,0 +1,18 @@
#ifndef HASH_H
#define HASH_H
#include <QtGlobal>
#include <QPoint>
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
#define HASH_T uint
#else // QT6
#define HASH_T size_t
#endif // QT6
inline HASH_T qHash(const QPoint &p)
{
return ::qHash(p.x()) ^ ::qHash(p.y());
}
#endif // HASH_H

View File

@ -4,7 +4,7 @@
#include <QString> #include <QString>
#include <QCache> #include <QCache>
#include <QByteArray> #include <QByteArray>
#include "common/config.h" #include "common/hash.h"
#include "area.h" #include "area.h"
class QString; class QString;

View File

@ -482,6 +482,7 @@ void KMLParser::track(SegmentData &segment)
{ {
const char error[] = "gx:coord/when element count mismatch"; const char error[] = "gx:coord/when element count mismatch";
int i = 0; int i = 0;
bool empty = false;
while (_reader.readNextStartElement()) { while (_reader.readNextStartElement()) {
if (_reader.name() == QLatin1String("when")) { if (_reader.name() == QLatin1String("when")) {
@ -495,6 +496,8 @@ void KMLParser::track(SegmentData &segment)
_reader.raiseError("Invalid coordinates"); _reader.raiseError("Invalid coordinates");
return; return;
} }
if (segment.at(i).coordinates().isNull())
empty = true;
i++; i++;
} else if (_reader.name() == QLatin1String("ExtendedData")) } else if (_reader.name() == QLatin1String("ExtendedData"))
extendedData(segment); extendedData(segment);
@ -507,10 +510,15 @@ void KMLParser::track(SegmentData &segment)
return; return;
} }
// empty (invalid) coordinates are allowed per KML specification! /* empty (invalid) coordinates are allowed per KML specification, but
for (int i = 0; i < segment.size(); i++) invalid in our data representation so get rid of the segment entries */
if (segment.at(i).coordinates().isNull()) if (empty) {
segment.remove(i); SegmentData filtered;
for (int i = 0; i < segment.size(); i++)
if (!segment.at(i).coordinates().isNull())
filtered.append(segment.at(i));
segment = filtered;
}
} }
void KMLParser::multiTrack(TrackData &t) void KMLParser::multiTrack(TrackData &t)

View File

@ -7,7 +7,7 @@
#include <QVector> #include <QVector>
#include <QPixmap> #include <QPixmap>
#include <QDebug> #include <QDebug>
#include "common/config.h" #include "common/hash.h"
#include "common/coordinates.h" #include "common/coordinates.h"
#include "link.h" #include "link.h"
#include "style.h" #include "style.h"

View File

@ -10,6 +10,7 @@
#define CATMOR 40 #define CATMOR 40
#define CATTRK 54 #define CATTRK 54
#define CATREA 56 #define CATREA 56
#define CATSIT 61
#define CATSCF 65 #define CATSCF 65
#define CATWAT 69 #define CATWAT 69
#define CATWRK 71 #define CATWRK 71
@ -24,6 +25,7 @@
#define WATLEV 187 #define WATLEV 187
#define I_CATACH 17000 #define I_CATACH 17000
#define I_CATSIT 17002
#define I_RESTRN 17004 #define I_RESTRN 17004
#define I_CATHAF 17008 #define I_CATHAF 17008
#define I_RDOCAL 17017 #define I_RDOCAL 17017

View File

@ -5,6 +5,13 @@
using namespace ENC; using namespace ENC;
#define UINT16(x) \
(((quint16)*(const uchar*)(x)) \
| ((quint16)(*((const uchar*)(x) + 1)) << 8))
#define INT32(x) ((qint32)UINT32(x))
#define INT16(x) ((qint16)UINT16(x))
struct DR { struct DR {
char RecordLength[5]; char RecordLength[5];
char InterchangeLevel; char InterchangeLevel;
@ -91,13 +98,14 @@ bool ISO8211::fieldType(const QString &str, int cnt, FieldType &type, int &size)
return true; return true;
} }
int ISO8211::readDR(QFile &file, QVector<FieldDefinition> &fields) const int ISO8211::readDR(QVector<FieldDefinition> &fields)
{ {
DR ddr; DR ddr;
QByteArray fieldLen, fieldPos; QByteArray fieldLen, fieldPos;
int len, lenSize, posSize, tagSize, offset; int len, lenSize, posSize, tagSize, offset;
if (file.read((char*)&ddr, sizeof(ddr)) != sizeof(ddr)) static_assert(sizeof(ddr) == 24, "Invalid DR alignment");
if (_file.read((char*)&ddr, sizeof(ddr)) != sizeof(ddr))
return -1; return -1;
len = Util::str2int(ddr.RecordLength, sizeof(ddr.RecordLength)); len = Util::str2int(ddr.RecordLength, sizeof(ddr.RecordLength));
@ -118,9 +126,9 @@ int ISO8211::readDR(QFile &file, QVector<FieldDefinition> &fields) const
r.tag.resize(tagSize); r.tag.resize(tagSize);
if (file.read(r.tag.data(), tagSize) != tagSize if (_file.read(r.tag.data(), tagSize) != tagSize
|| file.read(fieldLen.data(), lenSize) != lenSize || _file.read(fieldLen.data(), lenSize) != lenSize
|| file.read(fieldPos.data(), posSize) != posSize) || _file.read(fieldPos.data(), posSize) != posSize)
return -1; return -1;
r.pos = offset + Util::str2int(fieldPos.constData(), posSize); r.pos = offset + Util::str2int(fieldPos.constData(), posSize);
@ -133,13 +141,13 @@ int ISO8211::readDR(QFile &file, QVector<FieldDefinition> &fields) const
return len; return len;
} }
bool ISO8211::readDDA(QFile &file, const FieldDefinition &def, SubFields &fields) bool ISO8211::readDDA(const FieldDefinition &def, SubFields &fields)
{ {
static QRegularExpression re("(\\d*)(\\w+)\\(*(\\d*)\\)*"); static QRegularExpression re("(\\d*)(\\w+)\\(*(\\d*)\\)*");
QByteArray ba; QByteArray ba;
ba.resize(def.size); ba.resize(def.size);
if (!(file.seek(def.pos) && file.read(ba.data(), ba.size()) == ba.size())) if (!(_file.seek(def.pos) && _file.read(ba.data(), ba.size()) == ba.size()))
return false; return false;
QList<QByteArray> list(ba.split('\x1f')); QList<QByteArray> list(ba.split('\x1f'));
@ -187,12 +195,16 @@ bool ISO8211::readDDA(QFile &file, const FieldDefinition &def, SubFields &fields
return true; return true;
} }
bool ISO8211::readDDR(QFile &file) bool ISO8211::readDDR()
{ {
QVector<FieldDefinition> fields; QVector<FieldDefinition> fields;
qint64 pos = file.pos();
int len = readDR(file, fields);
if (!_file.open(QIODevice::ReadOnly)) {
_errorString = _file.errorString();
return false;
}
int len = readDR(fields);
if (len < 0) { if (len < 0) {
_errorString = "Not a ISO8211 file"; _errorString = "Not a ISO8211 file";
return false; return false;
@ -200,7 +212,7 @@ bool ISO8211::readDDR(QFile &file)
for (int i = 0; i < fields.size(); i++) { for (int i = 0; i < fields.size(); i++) {
SubFields def; SubFields def;
if (!readDDA(file, fields.at(i), def)) { if (!readDDA(fields.at(i), def)) {
_errorString = QString("Error reading %1 DDA field") _errorString = QString("Error reading %1 DDA field")
.arg(QString(fields.at(i).tag)); .arg(QString(fields.at(i).tag));
return false; return false;
@ -208,7 +220,7 @@ bool ISO8211::readDDR(QFile &file)
_map.insert(fields.at(i).tag, def); _map.insert(fields.at(i).tag, def);
} }
if (file.pos() != pos + len || fields.size() < 2) { if (_file.pos() != len || fields.size() < 2) {
_errorString = "DDR format error"; _errorString = "DDR format error";
return false; return false;
} }
@ -216,20 +228,21 @@ bool ISO8211::readDDR(QFile &file)
return true; return true;
} }
bool ISO8211::readUDA(QFile &file, quint64 pos, const FieldDefinition &def, bool ISO8211::readUDA(quint64 pos, const FieldDefinition &def,
const SubFields &fields, Data &data) const const SubFields &fields, Data &data)
{ {
QByteArray ba; QByteArray ba;
ba.resize(def.size); ba.resize(def.size);
if (!(file.seek(pos + def.pos) if (!(_file.seek(pos + def.pos)
&& file.read(ba.data(), ba.size()) == ba.size())) && _file.read(ba.data(), ba.size()) == ba.size()))
return false; return false;
const char *sp; const char *sp;
const char *dp = ba.constData(); const char *dp = ba.constData();
const char *ep = ba.constData() + ba.size() - 1; const char *ep = ba.constData() + ba.size() - 1;
data.clear();
data.setFields(&fields); data.setFields(&fields);
do { do {
@ -286,11 +299,14 @@ bool ISO8211::readUDA(QFile &file, quint64 pos, const FieldDefinition &def,
return true; return true;
} }
bool ISO8211::readRecord(QFile &file, Record &record) bool ISO8211::readRecord(Record &record)
{ {
if (_file.atEnd())
return false;
QVector<FieldDefinition> fields; QVector<FieldDefinition> fields;
qint64 pos = file.pos(); qint64 pos = _file.pos();
int len = readDR(file, fields); int len = readDR(fields);
if (len < 0) { if (len < 0) {
_errorString = "Error reading DR"; _errorString = "Error reading DR";
@ -312,7 +328,7 @@ bool ISO8211::readRecord(QFile &file, Record &record)
f.setTag(def.tag); f.setTag(def.tag);
if (!readUDA(file, pos, def, it.value(), f.rdata())) { if (!readUDA(pos, def, it.value(), f.rdata())) {
_errorString = QString("Error reading %1 record") _errorString = QString("Error reading %1 record")
.arg(QString(def.tag)); .arg(QString(def.tag));
return false; return false;

View File

@ -1,25 +1,17 @@
#ifndef ENC_ISO8211_H #ifndef ENC_ISO8211_H
#define ENC_ISO8211_H #define ENC_ISO8211_H
#include <QFile>
#include <QByteArray> #include <QByteArray>
#include <QVariant> #include <QVariant>
#include <QDebug> #include <QDebug>
class QFile;
#define UINT32(x) \ #define UINT32(x) \
(((quint32)*(const uchar*)(x)) \ (((quint32)*(const uchar*)(x)) \
| ((quint32)(*((const uchar*)(x) + 1)) << 8) \ | ((quint32)(*((const uchar*)(x) + 1)) << 8) \
| ((quint32)(*((const uchar*)(x) + 2)) << 16) \ | ((quint32)(*((const uchar*)(x) + 2)) << 16) \
| ((quint32)(*((const uchar*)(x) + 3)) << 24)) | ((quint32)(*((const uchar*)(x) + 3)) << 24))
#define UINT16(x) \
(((quint16)*(const uchar*)(x)) \
| ((quint16)(*((const uchar*)(x) + 1)) << 8))
#define INT32(x) ((qint32)UINT32(x))
#define INT16(x) ((qint16)UINT16(x))
namespace ENC { namespace ENC {
class ISO8211 class ISO8211
@ -102,8 +94,9 @@ public:
} }
}; };
bool readDDR(QFile &file); ISO8211(const QString &path) : _file(path) {}
bool readRecord(QFile &file, Record &record); bool readDDR();
bool readRecord(Record &record);
const QString &errorString() const {return _errorString;} const QString &errorString() const {return _errorString;}
@ -113,11 +106,12 @@ private:
static bool fieldType(const QString &str, int cnt, FieldType &type, static bool fieldType(const QString &str, int cnt, FieldType &type,
int &size); int &size);
int readDR(QFile &file, QVector<FieldDefinition> &fields) const; int readDR(QVector<FieldDefinition> &fields);
bool readDDA(QFile &file, const FieldDefinition &def, SubFields &fields); bool readDDA(const FieldDefinition &def, SubFields &fields);
bool readUDA(QFile &file, quint64 pos, const FieldDefinition &def, bool readUDA(quint64 pos, const FieldDefinition &def,
const SubFields &fields, Data &data) const; const SubFields &fields, Data &data);
QFile _file;
FieldsMap _map; FieldsMap _map;
QString _errorString; QString _errorString;
}; };

View File

@ -1,4 +1,3 @@
#include <QFile>
#include "common/util.h" #include "common/util.h"
#include "objects.h" #include "objects.h"
#include "attributes.h" #include "attributes.h"
@ -51,22 +50,24 @@ static QMap<uint,uint> orderMapInit()
map.insert(TYPE(UWTROC), 26); map.insert(TYPE(UWTROC), 26);
map.insert(TYPE(WATTUR), 27); map.insert(TYPE(WATTUR), 27);
map.insert(TYPE(PILBOP), 28); map.insert(TYPE(PILBOP), 28);
map.insert(TYPE(I_RDOCAL), 29); map.insert(TYPE(SISTAT), 29);
map.insert(TYPE(I_TRNBSN), 30); map.insert(TYPE(I_SISTAT), 29);
map.insert(TYPE(HRBFAC), 31); map.insert(TYPE(I_RDOCAL), 30);
map.insert(TYPE(I_HRBFAC), 31); map.insert(TYPE(I_TRNBSN), 31);
map.insert(TYPE(PILPNT), 32); map.insert(TYPE(HRBFAC), 32);
map.insert(TYPE(ACHBRT), 33); map.insert(TYPE(I_HRBFAC), 32);
map.insert(TYPE(I_ACHBRT), 33); map.insert(TYPE(PILPNT), 33);
map.insert(TYPE(CRANES), 34); map.insert(TYPE(ACHBRT), 34);
map.insert(TYPE(I_CRANES), 34); map.insert(TYPE(I_ACHBRT), 34);
map.insert(TYPE(I_WTWGAG), 35); map.insert(TYPE(CRANES), 35);
map.insert(TYPE(PYLONS), 36); map.insert(TYPE(I_CRANES), 35);
map.insert(TYPE(LNDMRK), 37); map.insert(TYPE(I_WTWGAG), 36);
map.insert(TYPE(SILTNK), 38); map.insert(TYPE(PYLONS), 37);
map.insert(TYPE(LNDELV), 39); map.insert(TYPE(LNDMRK), 38);
map.insert(TYPE(SMCFAC), 40); map.insert(TYPE(SILTNK), 39);
map.insert(TYPE(BUISGL), 41); map.insert(TYPE(LNDELV), 40);
map.insert(TYPE(SMCFAC), 41);
map.insert(TYPE(BUISGL), 42);
map.insert(TYPE(I_DISMAR), 0xFFFFFFFE); map.insert(TYPE(I_DISMAR), 0xFFFFFFFE);
map.insert(TYPE(SOUNDG), 0xFFFFFFFF); map.insert(TYPE(SOUNDG), 0xFFFFFFFF);
@ -220,6 +221,22 @@ static QString hUnits(uint type)
} }
} }
static QString sistat(uint type)
{
switch (type) {
case 1:
return "SS (Port Control)";
case 3:
return "SS (INT)";
case 6:
return "SS (Lock)";
case 8:
return "SS (Bridge)";
default:
return "SS";
}
}
MapData::Point::Point(uint type, const Coordinates &c, const QString &label, MapData::Point::Point(uint type, const Coordinates &c, const QString &label,
const QVector<QByteArray> &params) : _type(type), _pos(c), _label(label) const QVector<QByteArray> &params) : _type(type), _pos(c), _label(label)
{ {
@ -233,6 +250,10 @@ MapData::Point::Point(uint type, const Coordinates &c, const QString &label,
if (!params.at(1).isEmpty()) if (!params.at(1).isEmpty())
_label = QString("VHF ") + QString::fromLatin1(params.at(1)); _label = QString("VHF ") + QString::fromLatin1(params.at(1));
_param = QVariant(params.at(0).toDouble()); _param = QVariant(params.at(0).toDouble());
} else if (type>>16 == I_SISTAT || type>>16 == SISTAT) {
if (_label.isEmpty())
_label = sistat(type & 0xFF);
_type = TYPE(SISTAT);
} }
} }
@ -509,7 +530,9 @@ MapData::Attr MapData::pointAttr(const ISO8211::Record &r, uint OBJL)
|| (OBJL == BUAARE && key == CATBUA) || (OBJL == BUAARE && key == CATBUA)
|| (OBJL == SMCFAC && key == CATSCF) || (OBJL == SMCFAC && key == CATSCF)
|| (OBJL == BUISGL && key == FUNCTN) || (OBJL == BUISGL && key == FUNCTN)
|| (OBJL == WATTUR && key == CATWAT)) || (OBJL == WATTUR && key == CATWAT)
|| (OBJL == SISTAT && key == CATSIT)
|| (OBJL == I_SISTAT && key == I_CATSIT))
subtype = av.at(1).toByteArray().toUInt(); subtype = av.at(1).toByteArray().toUInt();
else if (OBJL == I_DISMAR && key == CATDIS) else if (OBJL == I_DISMAR && key == CATDIS)
subtype |= av.at(1).toByteArray().toUInt(); subtype |= av.at(1).toByteArray().toUInt();
@ -727,31 +750,25 @@ bool MapData::bounds(const QVector<ISO8211::Record> &gv, Rect &b)
MapData::MapData(const QString &path): _fileName(path) MapData::MapData(const QString &path): _fileName(path)
{ {
QFile file(_fileName);
QVector<ISO8211::Record> gv; QVector<ISO8211::Record> gv;
ISO8211 ddf; ISO8211 ddf(_fileName);
ISO8211::Record record;
uint COMF = 1; uint COMF = 1;
if (!file.open(QIODevice::ReadOnly)) { if (!ddf.readDDR()) {
_errorString = file.errorString();
return;
}
if (!ddf.readDDR(file)) {
_errorString = ddf.errorString(); _errorString = ddf.errorString();
return; return;
} }
while (!file.atEnd()) { while (ddf.readRecord(record)) {
ISO8211::Record record;
if (!ddf.readRecord(file, record)) {
_errorString = ddf.errorString();
return;
}
if (!processRecord(record, gv, COMF, _name)) { if (!processRecord(record, gv, COMF, _name)) {
_errorString = "Invalid S-57 record"; _errorString = "Invalid S-57 record";
return; return;
} }
} }
if (!ddf.errorString().isNull()) {
_errorString = ddf.errorString();
return;
}
Rect b; Rect b;
if (!bounds(gv, b)) { if (!bounds(gv, b)) {
@ -783,30 +800,22 @@ MapData::~MapData()
void MapData::load() void MapData::load()
{ {
QFile file(_fileName);
RecordMap vi, vc, ve, vf; RecordMap vi, vc, ve, vf;
QVector<ISO8211::Record> fe; QVector<ISO8211::Record> fe;
uint COMF = 1, SOMF = 1; ISO8211 ddf(_fileName);
ISO8211 ddf; ISO8211::Record record;
uint PRIM, OBJL; uint PRIM, OBJL, COMF = 1, SOMF = 1;
Poly *poly; Poly *poly;
Line *line; Line *line;
Point *point; Point *point;
double min[2], max[2]; double min[2], max[2];
if (!file.open(QIODevice::ReadOnly)) if (!ddf.readDDR())
return; return;
while (ddf.readRecord(record))
if (!ddf.readDDR(file))
return;
while (!file.atEnd()) {
ISO8211::Record record;
if (!ddf.readRecord(file, record))
return;
if (!processRecord(record, fe, vi, vc, ve, vf, COMF, SOMF)) if (!processRecord(record, fe, vi, vc, ve, vf, COMF, SOMF))
return; qWarning("Invalid S-57 record");
}
for (int i = 0; i < fe.size(); i++) { for (int i = 0; i < fe.size(); i++) {
const ISO8211::Record &r = fe.at(i); const ISO8211::Record &r = fe.at(i);

View File

@ -71,6 +71,7 @@
#define RIVERS 114 #define RIVERS 114
#define ROADWY 116 #define ROADWY 116
#define SLCONS 122 #define SLCONS 122
#define SISTAT 123
#define SILTNK 125 #define SILTNK 125
#define SLOTOP 126 #define SLOTOP 126
#define SMCFAC 128 #define SMCFAC 128
@ -90,6 +91,7 @@
#define I_ACHARE 17001 #define I_ACHARE 17001
#define I_DISMAR 17004 #define I_DISMAR 17004
#define I_RESARE 17005 #define I_RESARE 17005
#define I_SISTAT 17007
#define I_BERTHS 17010 #define I_BERTHS 17010
#define I_BRIDGE 17011 #define I_BRIDGE 17011
#define I_CBLOHD 17012 #define I_CBLOHD 17012

View File

@ -67,6 +67,9 @@ void Style::polygonStyle()
QImage(":/marine/entry-prohibited-line.png")); QImage(":/marine/entry-prohibited-line.png"));
_polygons[SUBTYPE(I_RESARE, 17)] = Polygon( _polygons[SUBTYPE(I_RESARE, 17)] = Polygon(
QImage(":/marine/entry-prohibited-line.png")); QImage(":/marine/entry-prohibited-line.png"));
_polygons[SUBTYPE(RESARE, 12)] = Polygon(QImage(":/marine/safety-zone-line.png"));
_polygons[SUBTYPE(I_RESARE, 12)] = Polygon(QImage(":/marine/safety-zone-line.png"));
_polygons[SUBTYPE(RESARE, 1)] = Polygon(QImage(":/marine/safety-zone-line.png"));
_polygons[SUBTYPE(ACHARE, 1)] = Polygon(QImage(":/marine/anchor-line.png")); _polygons[SUBTYPE(ACHARE, 1)] = Polygon(QImage(":/marine/anchor-line.png"));
_polygons[SUBTYPE(I_ACHARE, 1)] = Polygon(QImage(":/marine/anchor-line.png")); _polygons[SUBTYPE(I_ACHARE, 1)] = Polygon(QImage(":/marine/anchor-line.png"));
_polygons[TYPE(PRCARE)] = Polygon(QBrush(QColor("#eb49eb"), _polygons[TYPE(PRCARE)] = Polygon(QBrush(QColor("#eb49eb"),
@ -117,7 +120,8 @@ void Style::polygonStyle()
<< TYPE(DMPGRD) << TYPE(TSEZNE) << TYPE(OBSTRN) << TYPE(UWTROC) << TYPE(DMPGRD) << TYPE(TSEZNE) << TYPE(OBSTRN) << TYPE(UWTROC)
<< TYPE(DWRTPT) << SUBTYPE(ACHARE, 1) << SUBTYPE(I_ACHARE, 1) << TYPE(DWRTPT) << SUBTYPE(ACHARE, 1) << SUBTYPE(I_ACHARE, 1)
<< SUBTYPE(RESARE, 9) << SUBTYPE(RESARE, 2) << SUBTYPE(I_RESARE, 2) << SUBTYPE(RESARE, 9) << SUBTYPE(RESARE, 2) << SUBTYPE(I_RESARE, 2)
<< SUBTYPE(RESARE, 17) << SUBTYPE(I_RESARE, 17) << TYPE(CBLARE) << SUBTYPE(RESARE, 17) << SUBTYPE(I_RESARE, 17) << SUBTYPE(RESARE, 12)
<< SUBTYPE(I_RESARE, 12) << SUBTYPE(RESARE, 1) << TYPE(CBLARE)
<< TYPE(PIPARE) << TYPE(PRCARE) << SUBTYPE(MARKUL, 3); << TYPE(PIPARE) << TYPE(PRCARE) << SUBTYPE(MARKUL, 3);
} }
@ -241,6 +245,7 @@ void Style::pointStyle()
_points[SUBTYPE(I_DISMAR, 2)].setTextFontSize(Small); _points[SUBTYPE(I_DISMAR, 2)].setTextFontSize(Small);
_points[SUBTYPE(I_DISMAR, 2)].setHaloColor(QColor()); _points[SUBTYPE(I_DISMAR, 2)].setHaloColor(QColor());
_points[SUBTYPE(I_DISMAR, 3)] = _points[SUBTYPE(I_DISMAR, 2)]; _points[SUBTYPE(I_DISMAR, 3)] = _points[SUBTYPE(I_DISMAR, 2)];
_points[SUBTYPE(I_DISMAR, 4)] = _points[SUBTYPE(I_DISMAR, 2)];
_points[TYPE(CGUSTA)] = Point(QImage(":/marine/coast-guard.png")); _points[TYPE(CGUSTA)] = Point(QImage(":/marine/coast-guard.png"));
_points[TYPE(RDOSTA)] = Point(QImage(":/marine/radio.png")); _points[TYPE(RDOSTA)] = Point(QImage(":/marine/radio.png"));
_points[TYPE(RADSTA)] = Point(QImage(":/marine/radar.png")); _points[TYPE(RADSTA)] = Point(QImage(":/marine/radar.png"));
@ -255,6 +260,7 @@ void Style::pointStyle()
_points[SUBTYPE(WATTUR, 3)] = Point(QImage(":/marine/overfalls.png")); _points[SUBTYPE(WATTUR, 3)] = Point(QImage(":/marine/overfalls.png"));
_points[SUBTYPE(WATTUR, 4)] = Point(QImage(":/marine/overfalls.png")); _points[SUBTYPE(WATTUR, 4)] = Point(QImage(":/marine/overfalls.png"));
_points[TYPE(PILBOP)] = Point(QImage(":/marine/boarding-place.png")); _points[TYPE(PILBOP)] = Point(QImage(":/marine/boarding-place.png"));
_points[TYPE(SISTAT)] = Point(QImage(":/marine/pylon.png"));
_points[SUBTYPE(SMCFAC, 7)] = Point(QImage(":/POI/restaurant-11.png")); _points[SUBTYPE(SMCFAC, 7)] = Point(QImage(":/POI/restaurant-11.png"));
_points[SUBTYPE(SMCFAC, 11)] = Point(QImage(":/POI/pharmacy-11.png")); _points[SUBTYPE(SMCFAC, 11)] = Point(QImage(":/POI/pharmacy-11.png"));

View File

@ -301,7 +301,7 @@ void RasterTile::processPolygons(QList<TextItem*> &textItems)
QList<TextItem *> labels; QList<TextItem *> labels;
for (int i = 0; i < _polygons.size(); i++) { for (int i = 0; i < _polygons.size(); i++) {
MapData::Poly &poly = _polygons[i]; const MapData::Poly &poly = _polygons.at(i);
bool exists = set.contains(poly.label.text()); bool exists = set.contains(poly.label.text());
if (poly.label.text().isEmpty()) if (poly.label.text().isEmpty())
@ -343,7 +343,7 @@ void RasterTile::processLines(QList<TextItem*> &textItems)
void RasterTile::processStreetNames(QList<TextItem*> &textItems) void RasterTile::processStreetNames(QList<TextItem*> &textItems)
{ {
for (int i = 0; i < _lines.size(); i++) { for (int i = 0; i < _lines.size(); i++) {
MapData::Poly &poly = _lines[i]; const MapData::Poly &poly = _lines.at(i);
const Style::Line &style = _style->line(poly.type); const Style::Line &style = _style->line(poly.type);
if (style.img().isNull() && style.foreground() == Qt::NoPen) if (style.img().isNull() && style.foreground() == Qt::NoPen)
@ -433,7 +433,7 @@ void RasterTile::processPoints(QList<TextItem*> &textItems)
std::sort(_points.begin(), _points.end()); std::sort(_points.begin(), _points.end());
for (int i = 0; i < _points.size(); i++) { for (int i = 0; i < _points.size(); i++) {
MapData::Point &point = _points[i]; const MapData::Point &point = _points.at(i);
const Style::Point &style = _style->point(point.type); const Style::Point &style = _style->point(point.type);
bool poi = Style::isPOI(point.type); bool poi = Style::isPOI(point.type);

View File

@ -1,5 +1,5 @@
#ifndef SECTION_H #ifndef IMG_SECTION_H
#define SECTION_H #define IMG_SECTION_H
#include <QtGlobal> #include <QtGlobal>
@ -14,4 +14,4 @@ struct Section {
} }
#endif // SECTION_H #endif // IMG_SECTION_H

View File

@ -2,7 +2,7 @@
#define IMG_SHIELD_H #define IMG_SHIELD_H
#include <QString> #include <QString>
#include "common/config.h" #include "common/hash.h"
#define FIRST_SHIELD Shield::USInterstate #define FIRST_SHIELD Shield::USInterstate
#define LAST_SHIELD Shield::Oval #define LAST_SHIELD Shield::Oval

View File

@ -384,10 +384,13 @@ void Style::defaultLineStyle()
_lines[0x10307] = Line(QPen(QColor("#05620e"), 1, Qt::SolidLine)); _lines[0x10307] = Line(QPen(QColor("#05620e"), 1, Qt::SolidLine));
_lines[0x10401] = Line(QImage(":/marine/cable.png")); _lines[0x10401] = Line(QImage(":/marine/cable.png"));
_lines[0x10402] = Line(QImage(":/marine/pipeline.png")); _lines[0x10402] = Line(QImage(":/marine/pipeline.png"));
_lines[0x10405] = Line(QPen(QColor("#e728e7"), 1, Qt::DashLine)); _lines[0x10404] = Line(QImage(":/marine/fishing-farm-line.png"));
_lines[0x10405] = Line(QImage(":/marine/pipeline-area-line.png"));
_lines[0x10406] = Line(QImage(":/marine/cable-area-line.png"));
_lines[0x10409] = Line(QPen(QColor("#000000"), 1, Qt::DotLine)); _lines[0x10409] = Line(QPen(QColor("#000000"), 1, Qt::DotLine));
_lines[0x10501] = Line(QImage(":/marine/noanchor-line.png")); _lines[0x10501] = Line(QImage(":/marine/noanchor-line.png"));
_lines[0x10503] = Line(QPen(QColor("#e728e7"), 1, Qt::DashLine)); _lines[0x10503] = Line(QPen(QColor("#e728e7"), 1, Qt::DashLine));
_lines[0x10505] = Line(QImage(":/marine/safety-zone-line.png"));
_lines[0x10507] = Line(QPen(QColor("#e728e7"), 1, Qt::DashLine)); _lines[0x10507] = Line(QPen(QColor("#e728e7"), 1, Qt::DashLine));
_lines[0x10601] = Line(QPen(QColor("#000000"), 1, Qt::SolidLine)); _lines[0x10601] = Line(QPen(QColor("#000000"), 1, Qt::SolidLine));
_lines[0x10606] = Line(QImage(":/marine/anchor-line.png")); _lines[0x10606] = Line(QImage(":/marine/anchor-line.png"));
@ -663,8 +666,10 @@ void Style::defaultPointStyle()
_points[0x10216] = Point(QImage(":/marine/mooring-buoy.png")); _points[0x10216] = Point(QImage(":/marine/mooring-buoy.png"));
_points[0x10305] = Point(QImage(":/marine/chimney.png")); _points[0x10305] = Point(QImage(":/marine/chimney.png"));
_points[0x10306] = Point(QImage(":/marine/church.png")); _points[0x10306] = Point(QImage(":/marine/church.png"));
_points[0x10307] = Point(QImage(":/marine/silo.png"));
_points[0x10308] = Point(QImage(":/marine/tower.png")); _points[0x10308] = Point(QImage(":/marine/tower.png"));
_points[0x1030a] = Point(QImage(":/marine/triangulation-point.png")); _points[0x1030a] = Point(QImage(":/marine/triangulation-point.png"));
_points[0x1030b] = Point(QImage(":/marine/radio.png"));
_points[0x10400] = Point(QImage(":/marine/obstruction.png")); _points[0x10400] = Point(QImage(":/marine/obstruction.png"));
_points[0x10401] = Point(QImage(":/marine/obstruction.png")); _points[0x10401] = Point(QImage(":/marine/obstruction.png"));
_points[0x10402] = Point(QImage(":/marine/wreck.png")); _points[0x10402] = Point(QImage(":/marine/wreck.png"));
@ -673,9 +678,12 @@ void Style::defaultPointStyle()
_points[0x1040a] = Point(QImage(":/marine/rock-dangerous.png")); _points[0x1040a] = Point(QImage(":/marine/rock-dangerous.png"));
_points[0x1040c] = Point(QImage(":/marine/rock-exposed.png")); _points[0x1040c] = Point(QImage(":/marine/rock-exposed.png"));
_points[0x10701] = Point(QImage(":/marine/anchorage.png")); _points[0x10701] = Point(QImage(":/marine/anchorage.png"));
_points[0x10702] = Point(QImage(":/marine/boarding-place.png"));
_points[0x10703] = Point(QImage(":/marine/yacht-harbor.png")); _points[0x10703] = Point(QImage(":/marine/yacht-harbor.png"));
_points[0x10704] = Point(QImage(":/marine/pile.png")); _points[0x10704] = Point(QImage(":/marine/pile.png"));
_points[0x10705] = Point(QImage(":/marine/anchoring-prohibited.png")); _points[0x10705] = Point(QImage(":/marine/anchoring-prohibited.png"));
_points[0x1070a] = Point(QImage(":/marine/coast-guard.png"));
_points[0x1070b] = Point(QImage(":/marine/fishing-harbor.png"));
} }
bool Style::itemInfo(SubFile *file, SubFile::Handle &hdl, bool Style::itemInfo(SubFile *file, SubFile::Handle &hdl,

View File

@ -4,6 +4,7 @@
#include <QImageReader> #include <QImageReader>
#include <QBuffer> #include <QBuffer>
#include <QtConcurrent> #include <QtConcurrent>
#include "common/hash.h"
#include "osm.h" #include "osm.h"
#include "tile.h" #include "tile.h"
#include "aqmmap.h" #include "aqmmap.h"

View File

@ -4,7 +4,6 @@
#include <QDebug> #include <QDebug>
#include <QFile> #include <QFile>
#include <QHash> #include <QHash>
#include "common/config.h"
#include "map.h" #include "map.h"
class AQMMap : public Map class AQMMap : public Map

View File

@ -4,7 +4,7 @@
#include <QFile> #include <QFile>
#include <QCache> #include <QCache>
#include <QPainterPath> #include <QPainterPath>
#include "common/config.h" #include "common/hash.h"
#include "common/rectc.h" #include "common/rectc.h"
#include "common/rtree.h" #include "common/rtree.h"
#include "common/range.h" #include "common/range.h"

View File

@ -8,7 +8,6 @@
#include <QRegularExpression> #include <QRegularExpression>
#include "common/coordinates.h" #include "common/coordinates.h"
#include "common/rectc.h" #include "common/rectc.h"
#include "common/config.h"
#include "tar.h" #include "tar.h"
#include "ozf.h" #include "ozf.h"
#include "image.h" #include "image.h"
@ -381,7 +380,7 @@ void OziMap::setDevicePixelRatio(qreal deviceRatio, qreal mapRatio)
Map *OziMap::createTAR(const QString &path, const Projection &, bool *isDir) Map *OziMap::createTAR(const QString &path, const Projection &, bool *isDir)
{ {
if (isDir) if (isDir)
*isDir = true; *isDir = false;
return new OziMap(path, true); return new OziMap(path, true);
} }
@ -389,7 +388,7 @@ Map *OziMap::createTAR(const QString &path, const Projection &, bool *isDir)
Map *OziMap::createMAP(const QString &path, const Projection &, bool *isDir) Map *OziMap::createMAP(const QString &path, const Projection &, bool *isDir)
{ {
if (isDir) if (isDir)
*isDir = true; *isDir = false;
return new OziMap(path, false); return new OziMap(path, false);
} }

View File

@ -6,7 +6,7 @@
#include <QSet> #include <QSet>
#include <QList> #include <QList>
#include <QHash> #include <QHash>
#include "common/config.h" #include "common/hash.h"
#include "common/rectc.h" #include "common/rectc.h"
#include "common/kv.h" #include "common/kv.h"
#include "common/downloader.h" #include "common/downloader.h"