Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package gpxsee for openSUSE:Factory checked 
in at 2024-04-21 20:28:06
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gpxsee (Old)
 and      /work/SRC/openSUSE:Factory/.gpxsee.new.26366 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "gpxsee"

Sun Apr 21 20:28:06 2024 rev:122 rq:1169408 version:13.19

Changes:
--------
--- /work/SRC/openSUSE:Factory/gpxsee/gpxsee.changes    2024-03-25 
21:17:09.149143477 +0100
+++ /work/SRC/openSUSE:Factory/.gpxsee.new.26366/gpxsee.changes 2024-04-21 
20:29:41.047212941 +0200
@@ -1,0 +2,9 @@
+Sat Apr 20 21:32:42 CEST 2024 - tu...@cbox.cz
+
+- Update to version 13.19
+  * Added support for FIT course icons.
+  * Use propper GUI icons on Qt>=6.7 (Windows & Mac).
+  * Added support for GPX water temperature extension.
+  * Multiple minor map fixes (IMG & Mapsforge).
+
+-------------------------------------------------------------------

Old:
----
  GPXSee-13.18.tar.gz

New:
----
  GPXSee-13.19.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ gpxsee.spec ++++++
--- /var/tmp/diff_new_pack.0o57FR/_old  2024-04-21 20:29:41.919244952 +0200
+++ /var/tmp/diff_new_pack.0o57FR/_new  2024-04-21 20:29:41.919244952 +0200
@@ -19,7 +19,7 @@
 # See also http://en.opensuse.org/openSUSE:Specfile_guidelines
 
 Name:           gpxsee
-Version:        13.18
+Version:        13.19
 Release:        1
 Summary:        GPS log file visualization and analysis tool
 License:        GPL-3.0-only

++++++ GPXSee-13.18.tar.gz -> GPXSee-13.19.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/GPXSee-13.18/.appveyor.yml 
new/GPXSee-13.19/.appveyor.yml
--- old/GPXSee-13.18/.appveyor.yml      2024-03-23 20:59:50.000000000 +0100
+++ new/GPXSee-13.19/.appveyor.yml      2024-04-20 19:57:52.000000000 +0200
@@ -1,4 +1,4 @@
-version: 13.18.{build}
+version: 13.19.{build}
 
 configuration:
   - Release
@@ -12,8 +12,8 @@
   - QTDIR: C:\Qt\5.15\msvc2019_64
     OPENSSLDIR: C:\OpenSSL-v111-Win64\bin
     NSISDEF: /DOPENSSL /DANGLE
-  - QTDIR: C:\Qt\6.5\msvc2019_64
-    OPENSSLDIR: C:\OpenSSL-v30-Win64\bin
+  - QTDIR: C:\Qt\6.7\msvc2019_64
+    OPENSSLDIR: C:\OpenSSL-v32-Win64\bin
     NSISDEF: /DQT6 /DOPENSSL
 
 install:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/GPXSee-13.18/.github/workflows/osx.yml 
new/GPXSee-13.19/.github/workflows/osx.yml
--- old/GPXSee-13.18/.github/workflows/osx.yml  2024-03-23 20:59:50.000000000 
+0100
+++ new/GPXSee-13.19/.github/workflows/osx.yml  2024-04-20 19:57:52.000000000 
+0200
@@ -39,7 +39,7 @@
       - name: Install Qt
         uses: jurplel/install-qt-action@v3
         with:
-          version: '6.6.1'
+          version: '6.7.0'
           modules: qtpositioning qtserialport qtimageformats
       - name: Create localization
         run: lrelease gpxsee.pro
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/GPXSee-13.18/gpxsee.pro new/GPXSee-13.19/gpxsee.pro
--- old/GPXSee-13.18/gpxsee.pro 2024-03-23 20:59:50.000000000 +0100
+++ new/GPXSee-13.19/gpxsee.pro 2024-04-20 19:57:52.000000000 +0200
@@ -3,7 +3,7 @@
 } else {
     TARGET = GPXSee
 }
-VERSION = 13.18
+VERSION = 13.19
 
 
 QT += core \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/GPXSee-13.18/icons/formats/scripts/icns.sh 
new/GPXSee-13.19/icons/formats/scripts/icns.sh
--- old/GPXSee-13.18/icons/formats/scripts/icns.sh      2024-03-23 
20:59:50.000000000 +0100
+++ new/GPXSee-13.19/icons/formats/scripts/icns.sh      2024-04-20 
19:57:52.000000000 +0200
@@ -4,7 +4,7 @@
        IFS=":"; set $e
 
        EXT=`echo $1 | tr /a-z/ /A-Z/`
-       sed -e "s/\$EXTENSION/$EXT/" -e "s/\$COLOR/$2/" icon-template.svg > 
$1.svg
+       sed -e "s/\$EXT/$EXT/" -e "s/\$COLOR/$2/" icon-template.svg > $1.svg
 
        ICONSET=$1.iconset
        mkdir $ICONSET
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/GPXSee-13.18/icons/formats/scripts/ico.sh 
new/GPXSee-13.19/icons/formats/scripts/ico.sh
--- old/GPXSee-13.18/icons/formats/scripts/ico.sh       2024-03-23 
20:59:50.000000000 +0100
+++ new/GPXSee-13.19/icons/formats/scripts/ico.sh       2024-04-20 
19:57:52.000000000 +0200
@@ -4,7 +4,7 @@
        IFS=":"; set $e
 
        EXT=`echo $1 | tr /a-z/ /A-Z/`
-       sed -e "s/\$EXTENSION/$EXT/" -e "s/\$COLOR/$2/" icon-template.svg > 
$1.svg
+       sed -e "s/\$EXT/$EXT/" -e "s/\$COLOR/$2/" icon-template.svg > $1.svg
        convert -density 400 -background none $1.svg -define icon:auto-resize 
$1.ico
        rm $1.svg
 done < extensions
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/GPXSee-13.18/icons/formats/scripts/icon-template.svg 
new/GPXSee-13.19/icons/formats/scripts/icon-template.svg
--- old/GPXSee-13.18/icons/formats/scripts/icon-template.svg    2024-03-23 
20:59:50.000000000 +0100
+++ new/GPXSee-13.19/icons/formats/scripts/icon-template.svg    2024-04-20 
19:57:52.000000000 +0200
@@ -13,8 +13,8 @@
   <g transform="translate(16.573463,124.9782)">
     <rect y="0" x="0" id="textrect" height="50" width="120" 
style="fill:$COLOR;fill-opacity:1;stroke:none;"/>
 <!--
-    <text y="28" x="60" dominant-baseline="central" text-anchor="middle" 
style="fill:#FFFFFF;font-size:39px;font-family:Helvetica;font-weight:bold;">$EXTENSION</text>
+    <text y="28" x="60" dominant-baseline="central" text-anchor="middle" 
style="fill:#FFFFFF;font-size:39px;font-family:Helvetica;font-weight:bold;">$EXT</text>
 -->
-    <text y="25" x="60" dy="0.36em" text-anchor="middle" 
style="fill:#FFFFFF;font-size:39px;font-family:Helvetica;font-weight:bold;">$EXTENSION</text>
+    <text y="25" x="60" dy="0.36em" text-anchor="middle" 
style="fill:#FFFFFF;font-size:39px;font-family:Helvetica;font-weight:bold;">$EXT</text>
   </g>
 </svg>
Binary files old/GPXSee-13.18/icons/symbols/Alert.png and 
new/GPXSee-13.19/icons/symbols/Alert.png differ
Binary files old/GPXSee-13.18/icons/symbols/Campground.png and 
new/GPXSee-13.19/icons/symbols/Campground.png differ
Binary files old/GPXSee-13.18/icons/symbols/Checkpoint.png and 
new/GPXSee-13.19/icons/symbols/Checkpoint.png differ
Binary files old/GPXSee-13.18/icons/symbols/Danger.png and 
new/GPXSee-13.19/icons/symbols/Danger.png differ
Binary files old/GPXSee-13.18/icons/symbols/First Aid.png and 
new/GPXSee-13.19/icons/symbols/First Aid.png differ
Binary files old/GPXSee-13.18/icons/symbols/First Category.png and 
new/GPXSee-13.19/icons/symbols/First Category.png differ
Binary files old/GPXSee-13.18/icons/symbols/Flag, Blue.png and 
new/GPXSee-13.19/icons/symbols/Flag, Blue.png differ
Binary files old/GPXSee-13.18/icons/symbols/Flag, Red.png and 
new/GPXSee-13.19/icons/symbols/Flag, Red.png differ
Binary files old/GPXSee-13.18/icons/symbols/Flag.png and 
new/GPXSee-13.19/icons/symbols/Flag.png differ
Binary files old/GPXSee-13.18/icons/symbols/Food.png and 
new/GPXSee-13.19/icons/symbols/Food.png differ
Binary files old/GPXSee-13.18/icons/symbols/Fourth Category.png and 
new/GPXSee-13.19/icons/symbols/Fourth Category.png differ
Binary files old/GPXSee-13.18/icons/symbols/Gear.png and 
new/GPXSee-13.19/icons/symbols/Gear.png differ
Binary files old/GPXSee-13.18/icons/symbols/Hors Category.png and 
new/GPXSee-13.19/icons/symbols/Hors Category.png differ
Binary files old/GPXSee-13.18/icons/symbols/Info.png and 
new/GPXSee-13.19/icons/symbols/Info.png differ
Binary files old/GPXSee-13.18/icons/symbols/Left.png and 
new/GPXSee-13.19/icons/symbols/Left.png differ
Binary files old/GPXSee-13.18/icons/symbols/Meeting Spot.png and 
new/GPXSee-13.19/icons/symbols/Meeting Spot.png differ
Binary files old/GPXSee-13.18/icons/symbols/Obstacle.png and 
new/GPXSee-13.19/icons/symbols/Obstacle.png differ
Binary files old/GPXSee-13.18/icons/symbols/Overlook.png and 
new/GPXSee-13.19/icons/symbols/Overlook.png differ
Binary files old/GPXSee-13.18/icons/symbols/Rest Area.png and 
new/GPXSee-13.19/icons/symbols/Rest Area.png differ
Binary files old/GPXSee-13.18/icons/symbols/Right.png and 
new/GPXSee-13.19/icons/symbols/Right.png differ
Binary files old/GPXSee-13.18/icons/symbols/Second Category.png and 
new/GPXSee-13.19/icons/symbols/Second Category.png differ
Binary files old/GPXSee-13.18/icons/symbols/Segment End.png and 
new/GPXSee-13.19/icons/symbols/Segment End.png differ
Binary files old/GPXSee-13.18/icons/symbols/Segment Start.png and 
new/GPXSee-13.19/icons/symbols/Segment Start.png differ
Binary files old/GPXSee-13.18/icons/symbols/Service.png and 
new/GPXSee-13.19/icons/symbols/Service.png differ
Binary files old/GPXSee-13.18/icons/symbols/Sharp Curve.png and 
new/GPXSee-13.19/icons/symbols/Sharp Curve.png differ
Binary files old/GPXSee-13.18/icons/symbols/Sharp Left.png and 
new/GPXSee-13.19/icons/symbols/Sharp Left.png differ
Binary files old/GPXSee-13.18/icons/symbols/Sharp Right.png and 
new/GPXSee-13.19/icons/symbols/Sharp Right.png differ
Binary files old/GPXSee-13.18/icons/symbols/Shelter.png and 
new/GPXSee-13.19/icons/symbols/Shelter.png differ
Binary files old/GPXSee-13.18/icons/symbols/Slight Left.png and 
new/GPXSee-13.19/icons/symbols/Slight Left.png differ
Binary files old/GPXSee-13.18/icons/symbols/Slight Right.png and 
new/GPXSee-13.19/icons/symbols/Slight Right.png differ
Binary files old/GPXSee-13.18/icons/symbols/Sprint.png and 
new/GPXSee-13.19/icons/symbols/Sprint.png differ
Binary files old/GPXSee-13.18/icons/symbols/Steep Incline.png and 
new/GPXSee-13.19/icons/symbols/Steep Incline.png differ
Binary files old/GPXSee-13.18/icons/symbols/Store.png and 
new/GPXSee-13.19/icons/symbols/Store.png differ
Binary files old/GPXSee-13.18/icons/symbols/Straight.png and 
new/GPXSee-13.19/icons/symbols/Straight.png differ
Binary files old/GPXSee-13.18/icons/symbols/Third Category.png and 
new/GPXSee-13.19/icons/symbols/Third Category.png differ
Binary files old/GPXSee-13.18/icons/symbols/Toilet.png and 
new/GPXSee-13.19/icons/symbols/Toilet.png differ
Binary files old/GPXSee-13.18/icons/symbols/Transport.png and 
new/GPXSee-13.19/icons/symbols/Transport.png differ
Binary files old/GPXSee-13.18/icons/symbols/U-Turn.png and 
new/GPXSee-13.19/icons/symbols/U-Turn.png differ
Binary files old/GPXSee-13.18/icons/symbols/Valley.png and 
new/GPXSee-13.19/icons/symbols/Valley.png differ
Binary files old/GPXSee-13.18/icons/symbols/Water.png and 
new/GPXSee-13.19/icons/symbols/Water.png differ
Binary files old/GPXSee-13.18/icons/symbols/Waypoint.png and 
new/GPXSee-13.19/icons/symbols/Waypoint.png differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/GPXSee-13.18/lang/gpxsee_zh.ts 
new/GPXSee-13.19/lang/gpxsee_zh.ts
--- old/GPXSee-13.18/lang/gpxsee_zh.ts  2024-03-23 20:59:50.000000000 +0100
+++ new/GPXSee-13.19/lang/gpxsee_zh.ts  2024-04-20 19:57:52.000000000 +0200
@@ -571,12 +571,12 @@
     <message>
         <location filename="../src/GUI/gui.cpp" line="457"/>
         <source>Download data DEM</source>
-        <translation type="unfinished"></translation>
+        <translation>下载 DEM 数据</translation>
     </message>
     <message>
         <location filename="../src/GUI/gui.cpp" line="463"/>
         <source>Download map DEM</source>
-        <translation type="unfinished"></translation>
+        <translation>下载 DEM 地图</translation>
     </message>
     <message>
         <location filename="../src/GUI/gui.cpp" line="468"/>
@@ -586,7 +586,7 @@
     <message>
         <location filename="../src/GUI/gui.cpp" line="471"/>
         <source>Show hillshading</source>
-        <translation type="unfinished"></translation>
+        <translation>显示山体阴影</translation>
     </message>
     <message>
         <location filename="../src/GUI/gui.cpp" line="480"/>
@@ -1034,13 +1034,13 @@
     <message>
         <location filename="../src/GUI/gui.cpp" line="1986"/>
         <source>DEM tiles download limit exceeded. If you really need data for 
such a huge area, download the files manually.</source>
-        <translation type="unfinished"></translation>
+        <translation>已超过 DEM 
瓦片下载限额。如您确需大量数据,请手动下载。</translation>
     </message>
     <message numerus="yes">
         <location filename="../src/GUI/gui.cpp" line="1989"/>
         <source>Download %n DEM tiles?</source>
-        <translation type="unfinished">
-            <numerusform></numerusform>
+        <translation>
+            <numerusform>下载 %n DEM 瓦片?</numerusform>
         </translation>
     </message>
     <message>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/GPXSee-13.18/pkg/windows/gpxsee64.nsi 
new/GPXSee-13.19/pkg/windows/gpxsee64.nsi
--- old/GPXSee-13.18/pkg/windows/gpxsee64.nsi   2024-03-23 20:59:50.000000000 
+0100
+++ new/GPXSee-13.19/pkg/windows/gpxsee64.nsi   2024-04-20 19:57:52.000000000 
+0200
@@ -37,7 +37,7 @@
 ; The name of the installer
 Name "GPXSee"
 ; Program version
-!define VERSION "13.18"
+!define VERSION "13.19"
 
 ; The file to write
 OutFile "GPXSee-${VERSION}_x64.exe"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/GPXSee-13.18/src/GUI/app.cpp 
new/GPXSee-13.19/src/GUI/app.cpp
--- old/GPXSee-13.18/src/GUI/app.cpp    2024-03-23 20:59:50.000000000 +0100
+++ new/GPXSee-13.19/src/GUI/app.cpp    2024-04-20 19:57:52.000000000 +0200
@@ -29,9 +29,9 @@
 {
 #if defined(Q_OS_WIN32) || defined(Q_OS_MAC)
        setApplicationName(APP_NAME);
-#else
+#else // Q_OS_WIN32 || Q_OS_MAC
        setApplicationName(QString(APP_NAME).toLower());
-#endif
+#endif // Q_OS_WIN32 || Q_OS_MAC
        setApplicationVersion(APP_VERSION);
 
        QTranslator *app = new QTranslator(this);
@@ -65,6 +65,9 @@
        loadPCSs();
        Waypoint::loadSymbolIcons(ProgramPaths::symbolsDir());
 
+#if defined(Q_OS_WIN32) || defined(Q_OS_MAC)
+       QIcon::setThemeName(APP_NAME);
+#endif // Q_OS_WIN32 || Q_OS_MAC
 #if QT_VERSION >= QT_VERSION_CHECK(5, 12, 0)
        QIcon::setFallbackThemeName(APP_NAME);
 #endif // QT 5.12
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/GPXSee-13.18/src/GUI/stylecombobox.cpp 
new/GPXSee-13.19/src/GUI/stylecombobox.cpp
--- old/GPXSee-13.18/src/GUI/stylecombobox.cpp  2024-03-23 20:59:50.000000000 
+0100
+++ new/GPXSee-13.19/src/GUI/stylecombobox.cpp  2024-04-20 19:57:52.000000000 
+0200
@@ -13,15 +13,18 @@
 
 QIcon StyleComboBox::icon(Qt::PenStyle style)
 {
-       QPixmap pm(iconSize());
+       qreal ratio(devicePixelRatioF());
+       QSize size(iconSize());
+       QPixmap pm(size * ratio);
+       pm.setDevicePixelRatio(ratio);
        pm.fill(Qt::transparent);
 
        QBrush brush(QPalette().brush(QPalette::Active, QPalette::WindowText));
-       QPen pen(brush, pm.height() / LINE_WIDTH_RATIO, style);
+       QPen pen(brush, size.height() / LINE_WIDTH_RATIO, style);
 
        QPainter painter(&pm);
        painter.setPen(pen);
-       painter.drawLine(0, pm.height() / 2, pm.width(), pm.height() / 2);
+       painter.drawLine(0, size.height() / 2, size.width(), size.height() / 2);
 
        return QIcon(pm);
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/GPXSee-13.18/src/GUI/waypointitem.cpp 
new/GPXSee-13.19/src/GUI/waypointitem.cpp
--- old/GPXSee-13.18/src/GUI/waypointitem.cpp   2024-03-23 20:59:50.000000000 
+0100
+++ new/GPXSee-13.19/src/GUI/waypointitem.cpp   2024-04-20 19:57:52.000000000 
+0200
@@ -170,8 +170,7 @@
                if (_font.bold())
                        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));
+                         _icon->scaled(_icon->width() * 1.25, _icon->height() 
* 1.25));
                else
                        painter->drawPixmap(-_icon->width()/2.0, icon.isNull()
                          ? -_icon->height() : -_icon->height()/2, *_icon);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/GPXSee-13.18/src/data/data.cpp 
new/GPXSee-13.19/src/data/data.cpp
--- old/GPXSee-13.18/src/data/data.cpp  2024-03-23 20:59:50.000000000 +0100
+++ new/GPXSee-13.19/src/data/data.cpp  2024-04-20 19:57:52.000000000 +0200
@@ -106,7 +106,7 @@
        _errorLine = 0;
 
        if (!file.open(QFile::ReadOnly)) {
-               _errorString = qPrintable(file.errorString());
+               _errorString = file.errorString();
                return;
        }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/GPXSee-13.18/src/data/fitparser.cpp 
new/GPXSee-13.19/src/data/fitparser.cpp
--- old/GPXSee-13.18/src/data/fitparser.cpp     2024-03-23 20:59:50.000000000 
+0100
+++ new/GPXSee-13.19/src/data/fitparser.cpp     2024-04-20 19:57:52.000000000 
+0200
@@ -64,7 +64,7 @@
        SegmentData segment;
 };
 
-static QMap<int, QString> coursePointDescInit()
+static QMap<int, QString> coursePointSymbolsInit()
 {
        QMap<int, QString> map;
 
@@ -76,28 +76,70 @@
        map.insert(6, "Left");
        map.insert(7, "Right");
        map.insert(8, "Straight");
-       map.insert(9, "First aid");
-       map.insert(10, "Fourth category");
-       map.insert(11, "Third category");
-       map.insert(12, "Second category");
-       map.insert(13, "First category");
-       map.insert(14, "Hors category");
+       map.insert(9, "First Aid");
+       map.insert(10, "Fourth Category");
+       map.insert(11, "Third Category");
+       map.insert(12, "Second Category");
+       map.insert(13, "First Category");
+       map.insert(14, "Hors Category");
        map.insert(15, "Sprint");
-       map.insert(16, "Left fork");
-       map.insert(17, "Right fork");
-       map.insert(18, "Middle fork");
-       map.insert(19, "Slight left");
-       map.insert(20, "Sharp left");
-       map.insert(21, "Slight right");
-       map.insert(22, "Sharp right");
+       map.insert(16, "Left Fork");
+       map.insert(17, "Right Fork");
+       map.insert(18, "Middle Fork");
+       map.insert(19, "Slight Left");
+       map.insert(20, "Sharp Left");
+       map.insert(21, "Slight Right");
+       map.insert(22, "Sharp Right");
        map.insert(23, "U-Turn");
-       map.insert(24, "Segment start");
-       map.insert(25, "Segment end");
+       map.insert(24, "Segment Start");
+       map.insert(25, "Segment End");
+       map.insert(27, "Campground");
+       map.insert(28, "Aid Station");
+       map.insert(29, "Rest Area");
+       map.insert(30, "General Distance");
+       map.insert(31, "Service");
+       map.insert(32, "Energy Gel");
+       map.insert(33, "Sports Drink");
+       map.insert(34, "Mile Marker");
+       map.insert(35, "Checkpoint");
+       map.insert(36, "Shelter");
+       map.insert(37, "Meeting Spot");
+       map.insert(38, "Overlook");
+       map.insert(39, "Toilet");
+       map.insert(40, "Shower");
+       map.insert(41, "Gear");
+       map.insert(42, "Sharp Curve");
+       map.insert(43, "Steep Incline");
+       map.insert(44, "Tunnel");
+       map.insert(45, "Bridge");
+       map.insert(46, "Obstacle");
+       map.insert(47, "Crossing");
+       map.insert(48, "Store");
+       map.insert(49, "Transition");
+       map.insert(50, "Navaid");
+       map.insert(51, "Transport");
+       map.insert(52, "Alert");
+       map.insert(53, "Info");
 
        return map;
 }
 
-static QMap<int, QString> coursePointDesc = coursePointDescInit();
+static QMap<int, QString> locationPointSymbolsInit()
+{
+       QMap<int, QString> map;
+
+       /* The location symbols are a typical GARMIN mess. Every GPS unit
+          has probably its own list, so we only add a few generic icons seen
+          "in the wild" most often. */
+       map.insert(94, "Flag, Blue");
+       map.insert(95, "Flag, Green");
+       map.insert(96, "Flag, Red");
+
+       return map;
+}
+
+static QMap<int, QString> coursePointSymbols = coursePointSymbolsInit();
+static QMap<int, QString> locationPointSymbols = locationPointSymbolsInit();
 
 
 bool FITParser::readData(QFile *file, char *data, size_t size)
@@ -244,7 +286,7 @@
                        ctx.len -= field->size;
                        ret = (ba.size() == field->size);
                        val = ret ? ba : QString();
-                       valid = !ba.isEmpty();}
+                       valid = (!ba.isEmpty() && ba.at(0) != 0);}
                        break;
                default:
                        ret = skipValue(ctx, field->size);
@@ -330,8 +372,8 @@
                } else if (def->globalId == COURSE_POINT) {
                        switch (field->id) {
                                case 1:
-                                       
waypoint.setTimestamp(QDateTime::fromSecsSinceEpoch(val.toUInt()
-                                         + 631065600, Qt::UTC));
+                                       
waypoint.setTimestamp(QDateTime::fromSecsSinceEpoch(
+                                         val.toUInt() + 631065600, Qt::UTC));
                                        break;
                                case 2:
                                        waypoint.rcoordinates().setLat(
@@ -342,7 +384,7 @@
                                          (val.toInt() / (double)0x7fffffff) * 
180);
                                        break;
                                case 5:
-                                       
waypoint.setDescription(coursePointDesc.value(val.toUInt()));
+                                       
waypoint.setSymbol(coursePointSymbols.value(val.toUInt()));
                                        break;
                                case 6:
                                        waypoint.setName(val.toString());
@@ -361,6 +403,9 @@
                                        waypoint.rcoordinates().setLon(
                                          (val.toInt() / (double)0x7fffffff) * 
180);
                                        break;
+                               case 3:
+                                       
waypoint.setSymbol(locationPointSymbols.value(val.toUInt()));
+                                       break;
                                case 4:
                                        waypoint.setElevation((val.toUInt() / 
5.0) - 500);
                                        break;
@@ -386,8 +431,8 @@
                }
        } else if (def->globalId == RECORD_MESSAGE) {
                if (ctx.trackpoint.coordinates().isValid()) {
-                       
ctx.trackpoint.setTimestamp(QDateTime::fromSecsSinceEpoch(ctx.timestamp
-                         + 631065600, Qt::UTC));
+                       
ctx.trackpoint.setTimestamp(QDateTime::fromSecsSinceEpoch(
+                         ctx.timestamp + 631065600, Qt::UTC));
                        ctx.trackpoint.setRatio(ctx.ratio);
                        ctx.segment.append(ctx.trackpoint);
                        ctx.trackpoint = Trackpoint();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/GPXSee-13.18/src/data/geojsonparser.cpp 
new/GPXSee-13.19/src/data/geojsonparser.cpp
--- old/GPXSee-13.18/src/data/geojsonparser.cpp 2024-03-23 20:59:50.000000000 
+0100
+++ new/GPXSee-13.19/src/data/geojsonparser.cpp 2024-04-20 19:57:52.000000000 
+0200
@@ -603,6 +603,8 @@
 bool GeoJSONParser::feature(const QJsonObject &object, const Projection 
&parent,
   QList<TrackData> &tracks, QList<Area> &areas, QVector<Waypoint> &waypoints)
 {
+       if (object["geometry"].isNull())
+               return true;
        if (!object["geometry"].isObject()) {
                _errorString = "Invalid/missing Feature geometry object";
                return false;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/GPXSee-13.18/src/data/gpxparser.cpp 
new/GPXSee-13.19/src/data/gpxparser.cpp
--- old/GPXSee-13.18/src/data/gpxparser.cpp     2024-03-23 20:59:50.000000000 
+0100
+++ new/GPXSee-13.19/src/data/gpxparser.cpp     2024-04-20 19:57:52.000000000 
+0200
@@ -76,6 +76,9 @@
                        trackpoint.setHeartRate(number());
                else if (_reader.name() == QLatin1String("atemp"))
                        trackpoint.setTemperature(number());
+               else if (_reader.name() == QLatin1String("wtemp")
+                 && !trackpoint.hasTemperature())
+                       trackpoint.setTemperature(number());
                else if (_reader.name() == QLatin1String("cad"))
                        trackpoint.setCadence(number());
                else if (_reader.name() == QLatin1String("speed"))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/GPXSee-13.18/src/map/IMG/lblfile.cpp 
new/GPXSee-13.19/src/map/IMG/lblfile.cpp
--- old/GPXSee-13.18/src/map/IMG/lblfile.cpp    2024-03-23 20:59:50.000000000 
+0100
+++ new/GPXSee-13.19/src/map/IMG/lblfile.cpp    2024-04-20 19:57:52.000000000 
+0200
@@ -7,53 +7,36 @@
 
 enum Charset {Normal, Symbol, Special};
 
-static quint8 NORMAL_CHARS[] = {
-       ' ', 'A', 'B', 'C', 'D', 'E', 'F', 'G',
-       'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
-       'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
-       'X', 'Y', 'Z',  '~', '~', '~', ' ', ' ',
-       '0', '1', '2', '3', '4', '5', '6', '7',
-       '8', '9', '~', '~', '~', '~', '~', '~'
-};
-
-static quint8 SYMBOL_CHARS[] = {
-       '@', '!', '"', '#', '$', '%', '&', '\'',
-       '(', ')', '*', '+', ',', '-', '.', '/',
-       '~', '~', '~', '~', '~', '~', '~', '~',
-       '~', '~', ':', ';', '<', '=', '>', '?',
-       '~', '~', '~', '~', '~', '~', '~', '~',
-       '~', '~', '~', '[', '\\', ']', '^', '_'
-};
-
-static quint8 SPECIAL_CHARS[] = {
-       '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g',
-       'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
-       'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
-       'x', 'y', 'z', '~', '~', '~', '~', '~',
-       '0', '1', '2', '3', '4', '5', '6', '7',
-       '8', '9', '~', '~', '~', '~', '~', '~'
-};
-
 static bool isAllUpperCase(const QString &str)
 {
        if (str.isEmpty())
                return false;
-       for (int i = 0; i < str.size(); i++)
-               if (str.at(i).isLetter() && !(str.at(i).isUpper()
-                 || str.at(i) == QChar(0x00DF)))
+
+       for (int i = 0; i < str.size(); i++) {
+               QChar c(str.at(i));
+
+               if (c.isLetter() && !(c.isUpper() || c == QChar(0x00DF)))
                        return false;
+       }
 
        return true;
 }
 
 static QString capitalized(const QString &str)
 {
-       QString ret(str);
-       for (int i = 0; i < str.size(); i++)
-               if (i && !str.at(i-1).isSpace())
-                       ret[i] = str.at(i).toLower();
-               else
-                       ret[i] = str.at(i);
+       QString ret;
+
+       ret.resize(str.size());
+
+       if (!str.isEmpty())
+               ret[0] = str.at(0);
+
+       for (int i = 1; i < str.size(); i++) {
+               QChar last(str.at(i-1));
+               QChar c(str.at(i));
+
+               ret[i] = (last.isSpace() || last == '(') ? c : c.toLower();
+       }
 
        return ret;
 }
@@ -65,11 +48,10 @@
        return ok ? QByteArray::number(qRound(number * 0.3048)) : str;
 }
 
+
 LBLFile::~LBLFile()
 {
        delete _huffmanText;
-       delete[] _table;
-       delete[] _rasters;
 }
 
 bool LBLFile::load(Handle &hdl, const RGNFile *rgn, Handle &rgnHdl)
@@ -93,10 +75,10 @@
                        return false;
 
                if (size && recordSize) {
-                       _table = new quint32[size / recordSize];
+                       _table.resize(size / recordSize);
                        if (!seek(hdl, offset))
                                return false;
-                       for (quint32 i = 0; i < size / recordSize; i++) {
+                       for (quint32 i = 0; i < _table.size(); i++) {
                                if (!readVUInt32(hdl, recordSize, _table[i]))
                                        return false;
                        }
@@ -129,12 +111,10 @@
 
 void LBLFile::clear()
 {
+       _table = QVector<quint32>();
+       _rasters = QVector<Image>();
        delete _huffmanText;
-       delete[] _table;
-       delete[] _rasters;
        _huffmanText = 0;
-       _table = 0;
-       _rasters = 0;
 }
 
 Label LBLFile::str2label(const QVector<quint8> &str, bool capitalize,
@@ -183,6 +163,30 @@
 Label LBLFile::label6b(const SubFile *file, Handle &fileHdl, quint32 size,
   bool capitalize, bool convert) const
 {
+       static const quint8 NORMAL_CHARS[] = {
+               ' ', 'A', 'B', 'C', 'D', 'E', 'F', 'G',
+               'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
+               'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
+               'X', 'Y', 'Z',  '~', '~', '~', ' ', ' ',
+               '0', '1', '2', '3', '4', '5', '6', '7',
+               '8', '9', '~', '~', '~', '~', '~', '~'
+       };
+       static const quint8 SYMBOL_CHARS[] = {
+               '@', '!', '"', '#', '$', '%', '&', '\'',
+               '(', ')', '*', '+', ',', '-', '.', '/',
+               '~', '~', '~', '~', '~', '~', '~', '~',
+               '~', '~', ':', ';', '<', '=', '>', '?',
+               '~', '~', '~', '~', '~', '~', '~', '~',
+               '~', '~', '~', '[', '\\', ']', '^', '_'
+       };
+       static const quint8 SPECIAL_CHARS[] = {
+               '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g',
+               'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
+               'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
+               'x', 'y', 'z', '~', '~', '~', '~', '~',
+               '0', '1', '2', '3', '4', '5', '6', '7',
+               '8', '9', '~', '~', '~', '~', '~', '~'
+       };
        Shield::Type shieldType = Shield::None;
        QByteArray label, shieldLabel;
        QByteArray *bap = &label;
@@ -266,42 +270,41 @@
 Label LBLFile::labelHuffman(Handle &hdl, const SubFile *file, Handle &fileHdl,
   quint32 size, bool capitalize, bool convert)
 {
-       QVector<quint8> str;
+       QVector<quint8> tpl;
 
-       if (!_huffmanText->decode(file, fileHdl, size, str))
+       if (!_huffmanText->decode(file, fileHdl, size, tpl))
                return Label();
-       if (!_table)
-               return str2label(str, capitalize, convert);
+       if (!_table.size())
+               return str2label(tpl, capitalize, convert);
 
 
-       QVector<quint8> str2;
-       for (int i = 0; i < str.size(); i++) {
-               quint32 val = _table[str.at(i)];
-               if (val) {
-                       quint32 off = _base.offset + ((val & 0x7fffff) << 
_shift);
-                       if (!seek(hdl, off))
-                               return Label();
+       QVector<quint8> str;
 
-                       if (str2.size() && str2.back() == '\0')
-                               str2[str2.size() - 1] = ' ';
-                       else if (str2.size())
-                               str2.append(' ');
+       for (int i = 0; i < tpl.size(); i++) {
+               quint8 c(tpl.at(i));
+               quint32 val = (c < _table.size()) ? _table.at(c) : 0;
 
-                       if (!_huffmanText->decode(this, hdl, _base.offset + 
_base.size - off,
-                         str2))
+               if (val) {
+                       if (str.size() && str.back() == '\0')
+                               str.back() = ' ';
+                       else if (str.size())
+                               str.append(' ');
+
+                       quint32 offset = _base.offset + ((val & 0x7fffff) << 
_shift);
+                       quint32 limit = _base.offset + _base.size - offset;
+                       if (!seek(hdl, offset))
+                               return Label();
+                       if (!_huffmanText->decode(this, hdl, limit, str))
                                return Label();
                } else {
-                       if (str.at(i) == 7) {
-                               str2.append(0);
-                               break;
-                       }
-                       if (str2.size() && str2.back() == '\0')
-                               str2[str2.size() - 1] = ' ';
-                       str2.append(str.at(i));
+                       if (str.size() && str.back() == '\0')
+                               str.back() = ' ';
+
+                       str.append(c);
                }
        }
 
-       return str2label(str2, capitalize, convert);
+       return str2label(str, capitalize, convert);
 }
 
 Label LBLFile::label(Handle &hdl, quint32 offset, bool poi, bool capitalize,
@@ -347,15 +350,15 @@
   quint32 recordSize)
 {
        quint32 prev, cur;
+       quint32 imgCount = size / recordSize;
 
-       _imgCount = size / recordSize;
-       _imgIdSize = byteSize(_imgCount - 1);
-       _rasters = new Image[_imgCount];
+       _imgIdSize = byteSize(imgCount - 1);
+       _rasters.resize(imgCount);
 
        if (!(seek(hdl, offset) && readVUInt32(hdl, recordSize, prev)))
                return false;
 
-       for (quint32 i = 1; i < _imgCount; i++) {
+       for (quint32 i = 1; i < imgCount; i++) {
                if (!readVUInt32(hdl, recordSize, cur))
                        return false;
 
@@ -365,8 +368,8 @@
                prev = cur;
        }
 
-       _rasters[_imgCount-1].offset = prev;
-       _rasters[_imgCount-1].size = _img.size - prev;
+       _rasters[imgCount-1].offset = prev;
+       _rasters[imgCount-1].size = _img.size - prev;
 
        return true;
 }
@@ -375,14 +378,14 @@
 {
        QPixmap pm;
 
-       if (id >= _imgCount)
+       if (id >= _rasters.size())
                return pm;
 
-       if (!seek(hdl, _img.offset + _rasters[id].offset))
+       if (!seek(hdl, _img.offset + _rasters.at(id).offset))
                return pm;
        QByteArray ba;
-       ba.resize(_rasters[id].size);
-       if (!read(hdl, ba.data(), _rasters[id].size))
+       ba.resize(_rasters.at(id).size);
+       if (!read(hdl, ba.data(), ba.size()))
                return pm;
 
        pm.loadFromData(ba, "jpeg");
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/GPXSee-13.18/src/map/IMG/lblfile.h 
new/GPXSee-13.19/src/map/IMG/lblfile.h
--- old/GPXSee-13.18/src/map/IMG/lblfile.h      2024-03-23 20:59:50.000000000 
+0100
+++ new/GPXSee-13.19/src/map/IMG/lblfile.h      2024-04-20 19:57:52.000000000 
+0200
@@ -16,14 +16,14 @@
 {
 public:
        LBLFile(const IMGData *img)
-         : SubFile(img), _huffmanText(0), _table(0), _rasters(0), 
_imgIdSize(0),
-         _poiShift(0), _shift(0), _encoding(0) {}
+         : SubFile(img), _huffmanText(0), _imgIdSize(0), _poiShift(0), 
_shift(0),
+         _encoding(0) {}
        LBLFile(const QString *path)
-         : SubFile(path), _huffmanText(0), _table(0), _rasters(0), 
_imgIdSize(0),
-         _poiShift(0), _shift(0), _encoding(0) {}
+         : SubFile(path), _huffmanText(0), _imgIdSize(0), _poiShift(0), 
_shift(0),
+         _encoding(0) {}
        LBLFile(const SubFile *gmp, quint32 offset)
-         : SubFile(gmp, offset), _huffmanText(0), _table(0), _rasters(0),
-         _imgIdSize(0), _poiShift(0), _shift(0), _encoding(0) {}
+         : SubFile(gmp, offset), _huffmanText(0), _imgIdSize(0), _poiShift(0),
+         _shift(0), _encoding(0) {}
        ~LBLFile();
 
        bool load(Handle &hdl, const RGNFile *rgn, Handle &rgnHdl);
@@ -55,11 +55,10 @@
          quint32 recordSize);
 
        HuffmanText *_huffmanText;
-       quint32 *_table;
-       Image *_rasters;
+       QVector<Image> _rasters;
+       QVector<quint32> _table;
        TextCodec _codec;
        Section _base, _poi, _img;
-       quint32 _imgCount;
        quint8 _imgIdSize;
        quint8 _poiShift;
        quint8 _shift;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/GPXSee-13.18/src/map/IMG/style.cpp 
new/GPXSee-13.19/src/map/IMG/style.cpp
--- old/GPXSee-13.18/src/map/IMG/style.cpp      2024-03-23 20:59:50.000000000 
+0100
+++ new/GPXSee-13.19/src/map/IMG/style.cpp      2024-04-20 19:57:52.000000000 
+0200
@@ -187,7 +187,7 @@
        _polygons[TYPE(0x14)] = Polygon(QBrush(QColor(0xca, 0xdf, 0xaf)));
        _polygons[TYPE(0x15)] = Polygon(QBrush(QColor(0xca, 0xdf, 0xaf)));
        _polygons[TYPE(0x16)] = Polygon(QBrush(QColor(0x9a, 0xc2, 0x69),
-         Qt::Dense5Pattern));
+         Qt::BDiagPattern));
        _polygons[TYPE(0x17)] = Polygon(QBrush(QColor(0xe4, 0xef, 0xcf)));
        _polygons[TYPE(0x18)] = Polygon(QBrush(QColor(0xe3, 0xed, 0xc6)));
        _polygons[TYPE(0x19)] = Polygon(QBrush(QColor(0xe3, 0xed, 0xc6)),
@@ -195,9 +195,9 @@
        _polygons[TYPE(0x1a)] = Polygon(QBrush(QColor(0, 0, 0), 
Qt::Dense6Pattern),
          QPen(QColor(0xcd, 0xcc, 0xc4), 1));
        _polygons[TYPE(0x1e)] = Polygon(QBrush(QColor(0x9a, 0xc2, 0x69),
-         Qt::Dense5Pattern));
+         Qt::BDiagPattern));
        _polygons[TYPE(0x1f)] = Polygon(QBrush(QColor(0x9a, 0xc2, 0x69),
-         Qt::Dense5Pattern));
+         Qt::BDiagPattern));
        _polygons[TYPE(0x28)] = Polygon(QBrush(QColor(0x9f, 0xc4, 0xe1)));
        _polygons[TYPE(0x32)] = Polygon(QBrush(QColor(0x9f, 0xc4, 0xe1)));
        _polygons[TYPE(0x3c)] = Polygon(QBrush(QColor(0x9f, 0xc4, 0xe1)));
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/GPXSee-13.18/src/map/mapsforge/rastertile.h 
new/GPXSee-13.19/src/map/mapsforge/rastertile.h
--- old/GPXSee-13.18/src/map/mapsforge/rastertile.h     2024-03-23 
20:59:50.000000000 +0100
+++ new/GPXSee-13.19/src/map/mapsforge/rastertile.h     2024-04-20 
19:57:52.000000000 +0200
@@ -23,17 +23,13 @@
 class RasterTile
 {
 public:
-       /* Most Mapsforge themes expect the zoom levels to be offset by one from
-          the standard OSM zoom levels! We decrease the zoom level internaly
-          here when initializing _zoom and return the propper (increased) value
-          back in zoom() */
        RasterTile(const Projection &proj, const Transform &transform,
          const Style *style, MapData *data, int zoom, const QRect &rect,
          qreal ratio, bool hillShading)
                : _proj(proj), _transform(transform), _style(style), 
_data(data),
-               _zoom(zoom - 1), _rect(rect), _ratio(ratio), 
_hillShading(hillShading) {}
+               _zoom(zoom), _rect(rect), _ratio(ratio), 
_hillShading(hillShading) {}
 
-       int zoom() const {return _zoom + 1;}
+       int zoom() const {return _zoom;}
        QPoint xy() const {return _rect.topLeft();}
        const QPixmap &pixmap() const {return _pixmap;}
 

++++++ PKGBUILD ++++++
--- /var/tmp/diff_new_pack.0o57FR/_old  2024-04-21 20:29:42.447264335 +0200
+++ /var/tmp/diff_new_pack.0o57FR/_new  2024-04-21 20:29:42.451264482 +0200
@@ -1,5 +1,5 @@
 pkgname=gpxsee
-pkgver=13.18
+pkgver=13.19
 pkgrel=1
 pkgdesc='GPS log files visualizing and analyzing tool'
 arch=('i686' 'x86_64')

++++++ debian.changelog ++++++
--- /var/tmp/diff_new_pack.0o57FR/_old  2024-04-21 20:29:42.475265363 +0200
+++ /var/tmp/diff_new_pack.0o57FR/_new  2024-04-21 20:29:42.479265510 +0200
@@ -1,3 +1,12 @@
+gpxsee (13.19) stable; urgency=low
+
+  * Added support for FIT course icons.
+  * Use propper GUI icons on Qt>=6.7 (Windows & Mac).
+  * Added support for GPX water temperature extension.
+  * Multiple minor map fixes (IMG & Mapsforge).
+
+ -- Martin Tuma <tu...@cbox.cz>  Sat, 20 Apr 2024 21:38:39 +0200
+
 gpxsee (13.18) stable; urgency=low
 
   * Added support for arbitrary CRSs in GeoJSON files.

++++++ gpxsee.dsc ++++++
--- /var/tmp/diff_new_pack.0o57FR/_old  2024-04-21 20:29:42.539267713 +0200
+++ /var/tmp/diff_new_pack.0o57FR/_new  2024-04-21 20:29:42.543267860 +0200
@@ -1,10 +1,10 @@
 Format: 1.0
 Source: gpxsee
-Version: 13.18-1
+Version: 13.19-1
 Binary: gpxsee
 Maintainer: Martin Tuma <tu...@cbox.cz>
 Architecture: any
 Build-Depends: debhelper (>= 9), qtbase5-dev, qtbase5-private-dev, 
qtbase5-dev-tools, qt5-qmake, qttools5-dev-tools, libqt5opengl5-dev, 
qtpositioning5-dev, libqt5svg5-dev, libqt5serialport5-dev
 Files:
- 00000000000000000000000000000000 0 GPXSee-13.18.tar.gz
+ 00000000000000000000000000000000 0 GPXSee-13.19.tar.gz
 

Reply via email to