Hello community, here is the log from the commit of package gpxsee for openSUSE:Factory checked in at 2019-06-21 09:58:44 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/gpxsee (Old) and /work/SRC/openSUSE:Factory/.gpxsee.new.4811 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gpxsee" Fri Jun 21 09:58:44 2019 rev:45 rq:711224 version:7.9 Changes: -------- --- /work/SRC/openSUSE:Factory/gpxsee/gpxsee.changes 2019-06-01 09:56:33.171179811 +0200 +++ /work/SRC/openSUSE:Factory/.gpxsee.new.4811/gpxsee.changes 2019-06-21 09:58:46.716697211 +0200 @@ -1,0 +2,7 @@ +Sat Jun 15 22:36:58 CEST 2019 - [email protected] + +- Update to version 7.9 + * Removed the annoying map view re-zooming on window resize. + * Improved POI handling and text rendering in IMG maps. + +------------------------------------------------------------------- Old: ---- GPXSee-7.8.tar.gz New: ---- GPXSee-7.9.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ gpxsee.spec ++++++ --- /var/tmp/diff_new_pack.8DAszL/_old 2019-06-21 09:58:48.180699391 +0200 +++ /var/tmp/diff_new_pack.8DAszL/_new 2019-06-21 09:58:48.184699397 +0200 @@ -19,7 +19,7 @@ # See also http://en.opensuse.org/openSUSE:Specfile_guidelines Name: gpxsee -Version: 7.8 +Version: 7.9 Release: 1 Summary: GPS log file visualization and analysis tool License: GPL-3.0-only @@ -30,7 +30,6 @@ BuildRequires: gcc-c++ BuildRequires: make %if 0%{?fedora_version} -%if 0%{?fedora_version} >= 24 BuildRequires: qt5-qtbase BuildRequires: qt5-qtbase-gui BuildRequires: qt5-qtbase-devel @@ -38,9 +37,6 @@ Recommends: qt5-qtimageformats Recommends: qt5-qtpbfimageformat %else -BuildRequires: libqt4-devel -%endif -%endif %if 0%{?suse_version} BuildRequires: libQt5Core-devel BuildRequires: libQt5Concurrent-devel @@ -54,11 +50,26 @@ Recommends: libQt5Sql5-sqlite Recommends: libqt5-qtimageformats Recommends: libqt5-qtpbfimageformat -%endif +%else %if 0%{?rhel_version} || 0%{?centos_version} BuildRequires: libqt4-devel +%else +# Mageia +BuildRequires: libqt5core-devel +BuildRequires: libqt5gui-devel +BuildRequires: libqt5concurrent-devel +BuildRequires: libqt5widgets-devel +BuildRequires: libqt5network-devel +BuildRequires: libqt5printsupport-devel +BuildRequires: libqt5opengl-devel +BuildRequires: libqt5sql-devel +BuildRequires: qttools5 +Recommends: qtimageformats5 +Recommends: libqt5-database-plugin-sqlite +Recommends: libqt5-qtpbfimageformat +%endif +%endif %endif - %description GPXSee is a Qt-based tool for visualizing and analyzing GPX, TCX, FIT, KML, @@ -69,16 +80,21 @@ %setup -q -n GPXSee-%{version} %build -%if 0%{?fedora_version} >= 24 -lrelease-qt5 gpxsee.pro -%{qmake_qt5} gpxsee.pro -%else %if 0%{?suse_version} lrelease-qt5 gpxsee.pro %{qmake5} gpxsee.pro %else +%if 0%{?fedora_version} +lrelease-qt5 gpxsee.pro +%{qmake_qt5} gpxsee.pro +%else +%if 0%{?rhel_version} || 0%{?centos_version} lrelease-qt4 gpxsee.pro qmake-qt4 PREFIX=/usr gpxsee.pro +%else +lrelease gpxsee.pro +%{qmake_qt5} gpxsee.pro +%endif %endif %endif make %{?_smp_mflags} ++++++ GPXSee-7.8.tar.gz -> GPXSee-7.9.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/GPXSee-7.8/.appveyor.yml new/GPXSee-7.9/.appveyor.yml --- old/GPXSee-7.8/.appveyor.yml 2019-05-29 21:24:37.000000000 +0200 +++ new/GPXSee-7.9/.appveyor.yml 2019-06-15 09:25:16.000000000 +0200 @@ -1,4 +1,4 @@ -version: 7.8.{build} +version: 7.9.{build} configuration: Release platform: Any CPU environment: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/GPXSee-7.8/README.md new/GPXSee-7.9/README.md --- old/GPXSee-7.8/README.md 2019-05-29 21:24:37.000000000 +0200 +++ new/GPXSee-7.9/README.md 2019-06-15 09:25:16.000000000 +0200 @@ -3,7 +3,7 @@ ## Features * Opens GPX, TCX, FIT, KML, IGC, NMEA, SLF, LOC, GeoJSON, OziExplorer (PLT, RTE, WPT), Garmin CSV and geotagged JPEG files. -* User-definable online maps (OpenStreetMap/Google tiles, WMTS, WMS, TMS). +* User-definable online maps (OpenStreetMap/Google tiles, WMTS, WMS, TMS, QuadTiles). * Offline maps (MBTiles, OziExplorer maps, TrekBuddy maps/atlases, Garmin IMG & JNX maps, TwoNav RMaps, GeoTIFF images). * Elevation, speed, heart rate, cadence, power, temperature and gear ratio/shifts graphs. * Support for DEM files (SRTM HGT). diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/GPXSee-7.8/gpxsee.pro new/GPXSee-7.9/gpxsee.pro --- old/GPXSee-7.8/gpxsee.pro 2019-05-29 21:24:37.000000000 +0200 +++ new/GPXSee-7.9/gpxsee.pro 2019-06-15 09:25:16.000000000 +0200 @@ -3,7 +3,7 @@ } else { TARGET = GPXSee } -VERSION = 7.8 +VERSION = 7.9 QT += core \ gui \ @@ -179,7 +179,8 @@ src/map/IMG/style.h \ src/map/IMG/netfile.h \ src/GUI/limitedcombobox.h \ - src/GUI/pathtickitem.h + src/GUI/pathtickitem.h \ + src/map/IMG/textitem.h SOURCES += src/main.cpp \ src/common/coordinates.cpp \ src/common/rectc.cpp \ @@ -309,7 +310,8 @@ src/map/IMG/vectortile.cpp \ src/map/IMG/style.cpp \ src/map/IMG/netfile.cpp \ - src/GUI/pathtickitem.cpp + src/GUI/pathtickitem.cpp \ + src/map/IMG/textitem.cpp greaterThan(QT_MAJOR_VERSION, 4) { HEADERS += src/data/geojsonparser.h diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/GPXSee-7.8/gpxsee.qrc new/GPXSee-7.9/gpxsee.qrc --- old/GPXSee-7.8/gpxsee.qrc 2019-05-29 21:24:37.000000000 +0200 +++ new/GPXSee-7.9/gpxsee.qrc 2019-06-15 09:25:16.000000000 +0200 @@ -1,5 +1,6 @@ <RCC> <qresource prefix="/"> + <!-- GUI --> <file alias="gpxsee.png">icons/gpxsee.png</file> <file alias="[email protected]">icons/[email protected]</file> <file alias="dialog-close.png">icons/GUI/dialog-close.png</file> @@ -42,5 +43,83 @@ <file alias="[email protected]">icons/GUI/[email protected]</file> <file alias="applications-internet_32.png">icons/GUI/applications-internet_32.png</file> <file alias="[email protected]">icons/GUI/[email protected]</file> + + <!-- POI --> + <file alias="airfield-11.png">icons/POI/airfield-11.png</file> + <file alias="airport-11.png">icons/POI/airport-11.png</file> + <file alias="amusement-park-11.png">icons/POI/amusement-park-11.png</file> + <file alias="bakery-11.png">icons/POI/bakery-11.png</file> + <file alias="bank-11.png">icons/POI/bank-11.png</file> + <file alias="bar-11.png">icons/POI/bar-11.png</file> + <file alias="bbq-11.png">icons/POI/bbq-11.png</file> + <file alias="beach-11.png">icons/POI/beach-11.png</file> + <file alias="bowling-alley-11.png">icons/POI/bowling-alley-11.png</file> + <file alias="building-alt1-11.png">icons/POI/building-alt1-11.png</file> + <file alias="bridge-11.png">icons/POI/bridge-11.png</file> + <file alias="bus-11.png">icons/POI/bus-11.png</file> + <file alias="cafe-11.png">icons/POI/cafe-11.png</file> + <file alias="campsite-11.png">icons/POI/campsite-11.png</file> + <file alias="car-11.png">icons/POI/car-11.png</file> + <file alias="car-rental-11.png">icons/POI/car-rental-11.png</file> + <file alias="car-repair-11.png">icons/POI/car-repair-11.png</file> + <file alias="casino-11.png">icons/POI/casino-11.png</file> + <file alias="cemetery-11.png">icons/POI/cemetery-11.png</file> + <file alias="cinema-11.png">icons/POI/cinema-11.png</file> + <file alias="clothing-store-11.png">icons/POI/clothing-store-11.png</file> + <file alias="communications-tower-11.png">icons/POI/communications-tower-11.png</file> + <file alias="dam-11.png">icons/POI/dam-11.png</file> + <file alias="danger-11.png">icons/POI/danger-11.png</file> + <file alias="drinking-water-11.png">icons/POI/drinking-water-11.png</file> + <file alias="fast-food-11.png">icons/POI/fast-food-11.png</file> + <file alias="fire-station-11.png">icons/POI/fire-station-11.png</file> + <file alias="fitness-centre-11.png">icons/POI/fitness-centre-11.png</file> + <file alias="fuel-11.png">icons/POI/fuel-11.png</file> + <file alias="furniture-11.png">icons/POI/furniture-11.png</file> + <file alias="garden-11.png">icons/POI/garden-11.png</file> + <file alias="garden-centre-11.png">icons/POI/garden-centre-11.png</file> + <file alias="golf-11.png">icons/POI/golf-11.png</file> + <file alias="grocery-11.png">icons/POI/grocery-11.png</file> + <file alias="hairdresser-11.png">icons/POI/hairdresser-11.png</file> + <file alias="harbor-11.png">icons/POI/harbor-11.png</file> + <file alias="hardware-11.png">icons/POI/hardware-11.png</file> + <file alias="heliport-11.png">icons/POI/heliport-11.png</file> + <file alias="hospital-11.png">icons/POI/hospital-11.png</file> + <file alias="information-11.png">icons/POI/information-11.png</file> + <file alias="landmark-11.png">icons/POI/landmark-11.png</file> + <file alias="library-11.png">icons/POI/library-11.png</file> + <file alias="lodging-11.png">icons/POI/lodging-11.png</file> + <file alias="mountain-11.png">icons/POI/mountain-11.png</file> + <file alias="museum-11.png">icons/POI/museum-11.png</file> + <file alias="park-11.png">icons/POI/park-11.png</file> + <file alias="parking-11.png">icons/POI/parking-11.png</file> + <file alias="pharmacy-11.png">icons/POI/pharmacy-11.png</file> + <file alias="picnic-site-11.png">icons/POI/picnic-site-11.png</file> + <file alias="place-of-worship-11.png">icons/POI/place-of-worship-11.png</file> + <file alias="police-11.png">icons/POI/police-11.png</file> + <file alias="post-11.png">icons/POI/post-11.png</file> + <file alias="prison-11.png">icons/POI/prison-11.png</file> + <file alias="religious-christian-11.png">icons/POI/religious-christian-11.png</file> + <file alias="religious-jewish-11.png">icons/POI/religious-jewish-11.png</file> + <file alias="religious-muslim-11.png">icons/POI/religious-muslim-11.png</file> + <file alias="restaurant-11.png">icons/POI/restaurant-11.png</file> + <file alias="restaurant-noodle-11.png">icons/POI/restaurant-noodle-11.png</file> + <file alias="restaurant-pizza-11.png">icons/POI/restaurant-pizza-11.png</file> + <file alias="restaurant-seafood-11.png">icons/POI/restaurant-seafood-11.png</file> + <file alias="roadblock-11.png">icons/POI/roadblock-11.png</file> + <file alias="school-11.png">icons/POI/school-11.png</file> + <file alias="shelter-11.png">icons/POI/shelter-11.png</file> + <file alias="shop-11.png">icons/POI/shop-11.png</file> + <file alias="skiing-11.png">icons/POI/skiing-11.png</file> + <file alias="soccer-11.png">icons/POI/soccer-11.png</file> + <file alias="swimming-11.png">icons/POI/swimming-11.png</file> + <file alias="theatre-11.png">icons/POI/theatre-11.png</file> + <file alias="telephone-11.png">icons/POI/telephone-11.png</file> + <file alias="toilet-11.png">icons/POI/toilet-11.png</file> + <file alias="town-hall-11.png">icons/POI/town-hall-11.png</file> + <file alias="viewpoint-11.png">icons/POI/viewpoint-11.png</file> + <file alias="village-11.png">icons/POI/village-11.png</file> + <file alias="waterfall-11.png">icons/POI/waterfall-11.png</file> + <file alias="wetland-11.png">icons/POI/wetland-11.png</file> + <file alias="zoo-11.png">icons/POI/zoo-11.png</file> </qresource> </RCC> Binary files old/GPXSee-7.8/icons/POI/airfield-11.png and new/GPXSee-7.9/icons/POI/airfield-11.png differ Binary files old/GPXSee-7.8/icons/POI/airport-11.png and new/GPXSee-7.9/icons/POI/airport-11.png differ Binary files old/GPXSee-7.8/icons/POI/amusement-park-11.png and new/GPXSee-7.9/icons/POI/amusement-park-11.png differ Binary files old/GPXSee-7.8/icons/POI/bakery-11.png and new/GPXSee-7.9/icons/POI/bakery-11.png differ Binary files old/GPXSee-7.8/icons/POI/bank-11.png and new/GPXSee-7.9/icons/POI/bank-11.png differ Binary files old/GPXSee-7.8/icons/POI/bar-11.png and new/GPXSee-7.9/icons/POI/bar-11.png differ Binary files old/GPXSee-7.8/icons/POI/bbq-11.png and new/GPXSee-7.9/icons/POI/bbq-11.png differ Binary files old/GPXSee-7.8/icons/POI/beach-11.png and new/GPXSee-7.9/icons/POI/beach-11.png differ Binary files old/GPXSee-7.8/icons/POI/bowling-alley-11.png and new/GPXSee-7.9/icons/POI/bowling-alley-11.png differ Binary files old/GPXSee-7.8/icons/POI/bridge-11.png and new/GPXSee-7.9/icons/POI/bridge-11.png differ Binary files old/GPXSee-7.8/icons/POI/building-alt1-11.png and new/GPXSee-7.9/icons/POI/building-alt1-11.png differ Binary files old/GPXSee-7.8/icons/POI/bus-11.png and new/GPXSee-7.9/icons/POI/bus-11.png differ Binary files old/GPXSee-7.8/icons/POI/cafe-11.png and new/GPXSee-7.9/icons/POI/cafe-11.png differ Binary files old/GPXSee-7.8/icons/POI/campsite-11.png and new/GPXSee-7.9/icons/POI/campsite-11.png differ Binary files old/GPXSee-7.8/icons/POI/car-11.png and new/GPXSee-7.9/icons/POI/car-11.png differ Binary files old/GPXSee-7.8/icons/POI/car-rental-11.png and new/GPXSee-7.9/icons/POI/car-rental-11.png differ Binary files old/GPXSee-7.8/icons/POI/car-repair-11.png and new/GPXSee-7.9/icons/POI/car-repair-11.png differ Binary files old/GPXSee-7.8/icons/POI/casino-11.png and new/GPXSee-7.9/icons/POI/casino-11.png differ Binary files old/GPXSee-7.8/icons/POI/cemetery-11.png and new/GPXSee-7.9/icons/POI/cemetery-11.png differ Binary files old/GPXSee-7.8/icons/POI/cinema-11.png and new/GPXSee-7.9/icons/POI/cinema-11.png differ Binary files old/GPXSee-7.8/icons/POI/clothing-store-11.png and new/GPXSee-7.9/icons/POI/clothing-store-11.png differ Binary files old/GPXSee-7.8/icons/POI/communications-tower-11.png and new/GPXSee-7.9/icons/POI/communications-tower-11.png differ Binary files old/GPXSee-7.8/icons/POI/dam-11.png and new/GPXSee-7.9/icons/POI/dam-11.png differ Binary files old/GPXSee-7.8/icons/POI/danger-11.png and new/GPXSee-7.9/icons/POI/danger-11.png differ Binary files old/GPXSee-7.8/icons/POI/drinking-water-11.png and new/GPXSee-7.9/icons/POI/drinking-water-11.png differ Binary files old/GPXSee-7.8/icons/POI/fast-food-11.png and new/GPXSee-7.9/icons/POI/fast-food-11.png differ Binary files old/GPXSee-7.8/icons/POI/fire-station-11.png and new/GPXSee-7.9/icons/POI/fire-station-11.png differ Binary files old/GPXSee-7.8/icons/POI/fitness-centre-11.png and new/GPXSee-7.9/icons/POI/fitness-centre-11.png differ Binary files old/GPXSee-7.8/icons/POI/fuel-11.png and new/GPXSee-7.9/icons/POI/fuel-11.png differ Binary files old/GPXSee-7.8/icons/POI/furniture-11.png and new/GPXSee-7.9/icons/POI/furniture-11.png differ Binary files old/GPXSee-7.8/icons/POI/garden-11.png and new/GPXSee-7.9/icons/POI/garden-11.png differ Binary files old/GPXSee-7.8/icons/POI/garden-centre-11.png and new/GPXSee-7.9/icons/POI/garden-centre-11.png differ Binary files old/GPXSee-7.8/icons/POI/golf-11.png and new/GPXSee-7.9/icons/POI/golf-11.png differ Binary files old/GPXSee-7.8/icons/POI/grocery-11.png and new/GPXSee-7.9/icons/POI/grocery-11.png differ Binary files old/GPXSee-7.8/icons/POI/hairdresser-11.png and new/GPXSee-7.9/icons/POI/hairdresser-11.png differ Binary files old/GPXSee-7.8/icons/POI/harbor-11.png and new/GPXSee-7.9/icons/POI/harbor-11.png differ Binary files old/GPXSee-7.8/icons/POI/hardware-11.png and new/GPXSee-7.9/icons/POI/hardware-11.png differ Binary files old/GPXSee-7.8/icons/POI/heliport-11.png and new/GPXSee-7.9/icons/POI/heliport-11.png differ Binary files old/GPXSee-7.8/icons/POI/hospital-11.png and new/GPXSee-7.9/icons/POI/hospital-11.png differ Binary files old/GPXSee-7.8/icons/POI/information-11.png and new/GPXSee-7.9/icons/POI/information-11.png differ Binary files old/GPXSee-7.8/icons/POI/landmark-11.png and new/GPXSee-7.9/icons/POI/landmark-11.png differ Binary files old/GPXSee-7.8/icons/POI/library-11.png and new/GPXSee-7.9/icons/POI/library-11.png differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/GPXSee-7.8/icons/POI/licence.txt new/GPXSee-7.9/icons/POI/licence.txt --- old/GPXSee-7.8/icons/POI/licence.txt 1970-01-01 01:00:00.000000000 +0100 +++ new/GPXSee-7.9/icons/POI/licence.txt 2019-06-15 09:25:16.000000000 +0200 @@ -0,0 +1,126 @@ +The POI icons are Mapbox Maki icons (https://labs.mapbox.com/maki-icons/) +licensed under CC0. + +----- + +Creative Commons Legal Code + +CC0 1.0 Universal + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS + PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM + THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED + HEREUNDER. + +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer +exclusive Copyright and Related Rights (defined below) upon the creator +and subsequent owner(s) (each and all, an "owner") of an original work of +authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for +the purpose of contributing to a commons of creative, cultural and +scientific works ("Commons") that the public can reliably and without fear +of later claims of infringement build upon, modify, incorporate in other +works, reuse and redistribute as freely as possible in any form whatsoever +and for any purposes, including without limitation commercial purposes. +These owners may contribute to the Commons to promote the ideal of a free +culture and the further production of creative, cultural and scientific +works, or to gain reputation or greater distribution for their Work in +part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any +expectation of additional consideration or compensation, the person +associating CC0 with a Work (the "Affirmer"), to the extent that he or she +is an owner of Copyright and Related Rights in the Work, voluntarily +elects to apply CC0 to the Work and publicly distribute the Work under its +terms, with knowledge of his or her Copyright and Related Rights in the +Work and the meaning and intended legal effect of CC0 on those rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be +protected by copyright and related or neighboring rights ("Copyright and +Related Rights"). Copyright and Related Rights include, but are not +limited to, the following: + + i. the right to reproduce, adapt, distribute, perform, display, + communicate, and translate a Work; + ii. moral rights retained by the original author(s) and/or performer(s); +iii. publicity and privacy rights pertaining to a person's image or + likeness depicted in a Work; + iv. rights protecting against unfair competition in regards to a Work, + subject to the limitations in paragraph 4(a), below; + v. rights protecting the extraction, dissemination, use and reuse of data + in a Work; + vi. database rights (such as those arising under Directive 96/9/EC of the + European Parliament and of the Council of 11 March 1996 on the legal + protection of databases, and under any national implementation + thereof, including any amended or successor version of such + directive); and +vii. other similar, equivalent or corresponding rights throughout the + world based on applicable law or treaty, and any national + implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention +of, applicable law, Affirmer hereby overtly, fully, permanently, +irrevocably and unconditionally waives, abandons, and surrenders all of +Affirmer's Copyright and Related Rights and associated claims and causes +of action, whether now known or unknown (including existing as well as +future claims and causes of action), in the Work (i) in all territories +worldwide, (ii) for the maximum duration provided by applicable law or +treaty (including future time extensions), (iii) in any current or future +medium and for any number of copies, and (iv) for any purpose whatsoever, +including without limitation commercial, advertising or promotional +purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each +member of the public at large and to the detriment of Affirmer's heirs and +successors, fully intending that such Waiver shall not be subject to +revocation, rescission, cancellation, termination, or any other legal or +equitable action to disrupt the quiet enjoyment of the Work by the public +as contemplated by Affirmer's express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason +be judged legally invalid or ineffective under applicable law, then the +Waiver shall be preserved to the maximum extent permitted taking into +account Affirmer's express Statement of Purpose. In addition, to the +extent the Waiver is so judged Affirmer hereby grants to each affected +person a royalty-free, non transferable, non sublicensable, non exclusive, +irrevocable and unconditional license to exercise Affirmer's Copyright and +Related Rights in the Work (i) in all territories worldwide, (ii) for the +maximum duration provided by applicable law or treaty (including future +time extensions), (iii) in any current or future medium and for any number +of copies, and (iv) for any purpose whatsoever, including without +limitation commercial, advertising or promotional purposes (the +"License"). The License shall be deemed effective as of the date CC0 was +applied by Affirmer to the Work. Should any part of the License for any +reason be judged legally invalid or ineffective under applicable law, such +partial invalidity or ineffectiveness shall not invalidate the remainder +of the License, and in such case Affirmer hereby affirms that he or she +will not (i) exercise any of his or her remaining Copyright and Related +Rights in the Work or (ii) assert any associated claims and causes of +action with respect to the Work, in either case contrary to Affirmer's +express Statement of Purpose. + +4. Limitations and Disclaimers. + + a. No trademark or patent rights held by Affirmer are waived, abandoned, + surrendered, licensed or otherwise affected by this document. + b. Affirmer offers the Work as-is and makes no representations or + warranties of any kind concerning the Work, express, implied, + statutory or otherwise, including without limitation warranties of + title, merchantability, fitness for a particular purpose, non + infringement, or the absence of latent or other defects, accuracy, or + the present or absence of errors, whether or not discoverable, all to + the greatest extent permissible under applicable law. + c. Affirmer disclaims responsibility for clearing rights of other persons + that may apply to the Work or any use thereof, including without + limitation any person's Copyright and Related Rights in the Work. + Further, Affirmer disclaims responsibility for obtaining any necessary + consents, permissions or other rights required for any use of the + Work. + d. Affirmer understands and acknowledges that Creative Commons is not a + party to this document and has no duty or obligation with respect to + this CC0 or use of the Work. Binary files old/GPXSee-7.8/icons/POI/lodging-11.png and new/GPXSee-7.9/icons/POI/lodging-11.png differ Binary files old/GPXSee-7.8/icons/POI/mountain-11.png and new/GPXSee-7.9/icons/POI/mountain-11.png differ Binary files old/GPXSee-7.8/icons/POI/museum-11.png and new/GPXSee-7.9/icons/POI/museum-11.png differ Binary files old/GPXSee-7.8/icons/POI/park-11.png and new/GPXSee-7.9/icons/POI/park-11.png differ Binary files old/GPXSee-7.8/icons/POI/parking-11.png and new/GPXSee-7.9/icons/POI/parking-11.png differ Binary files old/GPXSee-7.8/icons/POI/pharmacy-11.png and new/GPXSee-7.9/icons/POI/pharmacy-11.png differ Binary files old/GPXSee-7.8/icons/POI/picnic-site-11.png and new/GPXSee-7.9/icons/POI/picnic-site-11.png differ Binary files old/GPXSee-7.8/icons/POI/place-of-worship-11.png and new/GPXSee-7.9/icons/POI/place-of-worship-11.png differ Binary files old/GPXSee-7.8/icons/POI/police-11.png and new/GPXSee-7.9/icons/POI/police-11.png differ Binary files old/GPXSee-7.8/icons/POI/post-11.png and new/GPXSee-7.9/icons/POI/post-11.png differ Binary files old/GPXSee-7.8/icons/POI/prison-11.png and new/GPXSee-7.9/icons/POI/prison-11.png differ Binary files old/GPXSee-7.8/icons/POI/religious-christian-11.png and new/GPXSee-7.9/icons/POI/religious-christian-11.png differ Binary files old/GPXSee-7.8/icons/POI/religious-jewish-11.png and new/GPXSee-7.9/icons/POI/religious-jewish-11.png differ Binary files old/GPXSee-7.8/icons/POI/religious-muslim-11.png and new/GPXSee-7.9/icons/POI/religious-muslim-11.png differ Binary files old/GPXSee-7.8/icons/POI/restaurant-11.png and new/GPXSee-7.9/icons/POI/restaurant-11.png differ Binary files old/GPXSee-7.8/icons/POI/restaurant-noodle-11.png and new/GPXSee-7.9/icons/POI/restaurant-noodle-11.png differ Binary files old/GPXSee-7.8/icons/POI/restaurant-pizza-11.png and new/GPXSee-7.9/icons/POI/restaurant-pizza-11.png differ Binary files old/GPXSee-7.8/icons/POI/restaurant-seafood-11.png and new/GPXSee-7.9/icons/POI/restaurant-seafood-11.png differ Binary files old/GPXSee-7.8/icons/POI/roadblock-11.png and new/GPXSee-7.9/icons/POI/roadblock-11.png differ Binary files old/GPXSee-7.8/icons/POI/school-11.png and new/GPXSee-7.9/icons/POI/school-11.png differ Binary files old/GPXSee-7.8/icons/POI/shelter-11.png and new/GPXSee-7.9/icons/POI/shelter-11.png differ Binary files old/GPXSee-7.8/icons/POI/shop-11.png and new/GPXSee-7.9/icons/POI/shop-11.png differ Binary files old/GPXSee-7.8/icons/POI/skiing-11.png and new/GPXSee-7.9/icons/POI/skiing-11.png differ Binary files old/GPXSee-7.8/icons/POI/soccer-11.png and new/GPXSee-7.9/icons/POI/soccer-11.png differ Binary files old/GPXSee-7.8/icons/POI/swimming-11.png and new/GPXSee-7.9/icons/POI/swimming-11.png differ Binary files old/GPXSee-7.8/icons/POI/telephone-11.png and new/GPXSee-7.9/icons/POI/telephone-11.png differ Binary files old/GPXSee-7.8/icons/POI/theatre-11.png and new/GPXSee-7.9/icons/POI/theatre-11.png differ Binary files old/GPXSee-7.8/icons/POI/toilet-11.png and new/GPXSee-7.9/icons/POI/toilet-11.png differ Binary files old/GPXSee-7.8/icons/POI/town-hall-11.png and new/GPXSee-7.9/icons/POI/town-hall-11.png differ Binary files old/GPXSee-7.8/icons/POI/viewpoint-11.png and new/GPXSee-7.9/icons/POI/viewpoint-11.png differ Binary files old/GPXSee-7.8/icons/POI/village-11.png and new/GPXSee-7.9/icons/POI/village-11.png differ Binary files old/GPXSee-7.8/icons/POI/waterfall-11.png and new/GPXSee-7.9/icons/POI/waterfall-11.png differ Binary files old/GPXSee-7.8/icons/POI/wetland-11.png and new/GPXSee-7.9/icons/POI/wetland-11.png differ Binary files old/GPXSee-7.8/icons/POI/zoo-11.png and new/GPXSee-7.9/icons/POI/zoo-11.png differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/GPXSee-7.8/lang/gpxsee_fr.ts new/GPXSee-7.9/lang/gpxsee_fr.ts --- old/GPXSee-7.8/lang/gpxsee_fr.ts 2019-05-29 21:24:37.000000000 +0200 +++ new/GPXSee-7.9/lang/gpxsee_fr.ts 2019-06-15 09:25:16.000000000 +0200 @@ -479,7 +479,7 @@ <message> <location filename="../src/GUI/gui.cpp" line="352"/> <source>km/mi markers</source> - <translation type="unfinished"></translation> + <translation>Bornes kilométriques ou milliaires</translation> </message> <message> <location filename="../src/GUI/gui.cpp" line="359"/> @@ -606,7 +606,7 @@ <message> <location filename="../src/GUI/gui.cpp" line="670"/> <source>GPXSee is distributed under the terms of the GNU General Public License version 3. For more info about GPXSee visit the project homepage at %1.</source> - <translation>GPXSee est distribué selon les termes de la licence publique générale GNU (version 3). Pour plus d'information sur GPXSee, visiter le site du projet sur %1.</translation> + <translation>GPXSee est distribué selon les termes de la licence publique générale GNU (version 3). Pour plus d'information sur GPXSee, visiter le site du projet %1.</translation> </message> <message> <location filename="../src/GUI/gui.cpp" line="697"/> @@ -666,7 +666,7 @@ <message> <location filename="../src/GUI/gui.cpp" line="733"/> <source>Styles directory:</source> - <translation type="unfinished"></translation> + <translation>Dossier de styles :</translation> </message> <message> <location filename="../src/GUI/gui.cpp" line="1037"/> @@ -1017,7 +1017,7 @@ <message> <location filename="../src/map/maplist.cpp" line="123"/> <source>Garmin IMG maps</source> - <translation type="unfinished"></translation> + <translation>Cartes Garmin IMG</translation> </message> <message> <location filename="../src/map/maplist.cpp" line="125"/> @@ -1349,12 +1349,12 @@ <message> <location filename="../src/GUI/optionsdialog.cpp" line="72"/> <source>Projection:</source> - <translation type="unfinished"></translation> + <translation>Projection :</translation> </message> <message> <location filename="../src/GUI/optionsdialog.cpp" line="94"/> <source>Vector maps</source> - <translation type="unfinished"></translation> + <translation>Cartes vectorielles</translation> </message> <message> <location filename="../src/GUI/optionsdialog.cpp" line="147"/> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/GPXSee-7.8/pkg/gpxsee.nsi new/GPXSee-7.9/pkg/gpxsee.nsi --- old/GPXSee-7.8/pkg/gpxsee.nsi 2019-05-29 21:24:37.000000000 +0200 +++ new/GPXSee-7.9/pkg/gpxsee.nsi 2019-06-15 09:25:16.000000000 +0200 @@ -7,7 +7,7 @@ ; The name of the installer Name "GPXSee" ; Program version -!define VERSION "7.8" +!define VERSION "7.9" ; The file to write OutFile "GPXSee-${VERSION}.exe" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/GPXSee-7.8/pkg/gpxsee64.nsi new/GPXSee-7.9/pkg/gpxsee64.nsi --- old/GPXSee-7.8/pkg/gpxsee64.nsi 2019-05-29 21:24:37.000000000 +0200 +++ new/GPXSee-7.9/pkg/gpxsee64.nsi 2019-06-15 09:25:16.000000000 +0200 @@ -7,7 +7,7 @@ ; The name of the installer Name "GPXSee" ; Program version -!define VERSION "7.8" +!define VERSION "7.9" ; The file to write OutFile "GPXSee-${VERSION}_x64.exe" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/GPXSee-7.8/src/GUI/gui.cpp new/GPXSee-7.9/src/GUI/gui.cpp --- old/GPXSee-7.8/src/GUI/gui.cpp 2019-05-29 21:24:37.000000000 +0200 +++ new/GPXSee-7.9/src/GUI/gui.cpp 2019-06-15 09:25:16.000000000 +0200 @@ -2216,6 +2216,8 @@ connect(w, SIGNAL(screenChanged(QScreen*)), this, SLOT(screenChanged(QScreen*))); #endif // ENABLE_HIDPI + + _mapView->fitContentToSize(); } void GUI::screenChanged(QScreen *screen) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/GPXSee-7.8/src/GUI/mapview.cpp new/GPXSee-7.9/src/GUI/mapview.cpp --- old/GPXSee-7.8/src/GUI/mapview.cpp 2019-05-29 21:24:37.000000000 +0200 +++ new/GPXSee-7.9/src/GUI/mapview.cpp 2019-06-15 09:25:16.000000000 +0200 @@ -39,6 +39,7 @@ setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setRenderHint(QPainter::Antialiasing, true); + setResizeAnchor(QGraphicsView::AnchorViewCenter); setAcceptDrops(false); _mapScale = new ScaleItem(); @@ -901,17 +902,6 @@ } } -void MapView::resizeEvent(QResizeEvent *event) -{ - QGraphicsView::resizeEvent(event); - - int zoom = _map->zoom(); - if (fitMapZoom() != zoom) - rescale(); - - centerOn(contentCenter()); -} - void MapView::paintEvent(QPaintEvent *event) { QPointF scaleScenePos = mapToScene(rect().bottomRight() + QPoint( @@ -1042,3 +1032,12 @@ rescale(); centerOn(_map->ll2xy(center)); } + +void MapView::fitContentToSize() +{ + int zoom = _map->zoom(); + if (fitMapZoom() != zoom) + rescale(); + + centerOn(contentCenter()); +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/GPXSee-7.8/src/GUI/mapview.h new/GPXSee-7.9/src/GUI/mapview.h --- old/GPXSee-7.8/src/GUI/mapview.h 2019-05-29 21:24:37.000000000 +0200 +++ new/GPXSee-7.9/src/GUI/mapview.h 2019-06-15 09:25:16.000000000 +0200 @@ -85,6 +85,8 @@ void setDevicePixelRatio(qreal deviceRatio, qreal mapRatio); void setProjection(int id); + void fitContentToSize(); + private slots: void updatePOI(); void reloadMap(); @@ -111,7 +113,6 @@ void wheelEvent(QWheelEvent *event); void keyPressEvent(QKeyEvent *event); void drawBackground(QPainter *painter, const QRectF &rect); - void resizeEvent(QResizeEvent *event); void paintEvent(QPaintEvent *event); void scrollContentsBy(int dx, int dy); void mouseMoveEvent(QMouseEvent *event); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/GPXSee-7.8/src/GUI/optionsdialog.cpp new/GPXSee-7.9/src/GUI/optionsdialog.cpp --- old/GPXSee-7.8/src/GUI/optionsdialog.cpp 2019-05-29 21:24:37.000000000 +0200 +++ new/GPXSee-7.9/src/GUI/optionsdialog.cpp 2019-06-15 09:25:16.000000000 +0200 @@ -12,7 +12,6 @@ #include <QRadioButton> #include <QLabel> #include <QSysInfo> -#include <QInputDialog> #include "map/pcs.h" #include "icons.h" #include "colorbox.h" @@ -35,7 +34,7 @@ return l; } -#endif +#endif // Q_OS_MAC QWidget *OptionsDialog::createMapPage() { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/GPXSee-7.8/src/GUI/optionsdialog.h new/GPXSee-7.9/src/GUI/optionsdialog.h --- old/GPXSee-7.8/src/GUI/optionsdialog.h 2019-05-29 21:24:37.000000000 +0200 +++ new/GPXSee-7.9/src/GUI/optionsdialog.h 2019-06-15 09:25:16.000000000 +0200 @@ -86,9 +86,6 @@ public: OptionsDialog(Options *options, QWidget *parent = 0); -//private slots: -// void projectionChanged(int index); - private: QWidget *createMapPage(); QWidget *createAppearancePage(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/GPXSee-7.8/src/map/IMG/img.cpp new/GPXSee-7.9/src/map/IMG/img.cpp --- old/GPXSee-7.8/src/map/IMG/img.cpp 2019-05-29 21:24:37.000000000 +0200 +++ new/GPXSee-7.9/src/map/IMG/img.cpp 2019-06-15 09:25:16.000000000 +0200 @@ -255,3 +255,18 @@ return true; } + +#ifndef QT_NO_DEBUG +QDebug operator<<(QDebug dbg, const IMG::Point &point) +{ + dbg.nospace() << "Point(" << hex << point.type << ", " << point.label + << ", " << point.poi << ")"; + return dbg.space(); +} + +QDebug operator<<(QDebug dbg, const IMG::Poly &poly) +{ + dbg.nospace() << "Poly(" << hex << poly.type << ", " << poly.label << ")"; + return dbg.space(); +} +#endif // QT_NO_DEBUG diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/GPXSee-7.8/src/map/IMG/img.h new/GPXSee-7.9/src/map/IMG/img.h --- old/GPXSee-7.8/src/map/IMG/img.h 2019-05-29 21:24:37.000000000 +0200 +++ new/GPXSee-7.9/src/map/IMG/img.h 2019-06-15 09:25:16.000000000 +0200 @@ -40,7 +40,7 @@ quint64 id; bool operator<(const Point &other) const - {return id < other.id;} + {return id > other.id;} }; @@ -84,4 +84,9 @@ QString _errorString; }; +#ifndef QT_NO_DEBUG +QDebug operator<<(QDebug dbg, const IMG::Point &point); +QDebug operator<<(QDebug dbg, const IMG::Poly &poly); +#endif // QT_NO_DEBUG + #endif // IMG_H diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/GPXSee-7.8/src/map/IMG/rgnfile.cpp new/GPXSee-7.9/src/map/IMG/rgnfile.cpp --- old/GPXSee-7.8/src/map/IMG/rgnfile.cpp 2019-05-29 21:24:37.000000000 +0200 +++ new/GPXSee-7.9/src/map/IMG/rgnfile.cpp 2019-06-15 09:25:16.000000000 +0200 @@ -338,7 +338,8 @@ point.poi = labelPtr & 0x400000; if (lbl && (labelPtr & 0x3FFFFF)) { point.label = lbl->label(lblHdl, labelPtr & 0x3FFFFF, point.poi); - point.id = ((quint64)lbl->offset())<<24 | (labelPtr & 0x3FFFFF); + point.id = ((quint64)point.type)<<40 | ((quint64)lbl->offset())<<24 + | (labelPtr & 0x3FFFFF); } points->append(point); @@ -383,7 +384,8 @@ point.poi = labelPtr & 0x400000; if (lbl && (labelPtr & 0x3FFFFF)) { point.label = lbl->label(lblHdl, labelPtr & 0x3FFFFF, point.poi); - point.id = ((quint64)lbl->offset())<<24 | (labelPtr & 0x3FFFFF); + point.id = ((quint64)point.type)<<40 + | ((quint64)lbl->offset())<<24 | (labelPtr & 0x3FFFFF); } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/GPXSee-7.8/src/map/IMG/style.cpp new/GPXSee-7.9/src/map/IMG/style.cpp --- old/GPXSee-7.8/src/map/IMG/style.cpp 2019-05-29 21:24:37.000000000 +0200 +++ new/GPXSee-7.9/src/map/IMG/style.cpp 2019-06-15 09:25:16.000000000 +0200 @@ -75,10 +75,11 @@ << TYPE(0x42) << TYPE(0x43) << TYPE(0x44) << TYPE(0x45) << TYPE(0x46) << TYPE(0x47) << TYPE(0x48) << TYPE(0x49) << TYPE(0x4c) << TYPE(0x4d) << TYPE(0x4e) << TYPE(0x4f) << TYPE(0x50) << TYPE(0x51) << TYPE(0x52) - << TYPE(0x14) << TYPE(0x15) << TYPE(0x1e) << TYPE(0x1f) << TYPE(0x04) - << TYPE(0x05) << TYPE(0x06) << TYPE(0x07) << TYPE(0x08) << TYPE(0x09) - << TYPE(0x0a) << TYPE(0x0b) << TYPE(0x0c) << TYPE(0x0d) << TYPE(0x0e) - << TYPE(0x0f) << TYPE(0x10) << TYPE(0x11) << TYPE(0x12) << TYPE(0x13); + << TYPE(0x14) << TYPE(0x15) << TYPE(0x16) << TYPE(0x1e) << TYPE(0x1f) + << TYPE(0x04) << TYPE(0x05) << TYPE(0x06) << TYPE(0x07) << TYPE(0x08) + << TYPE(0x09) << TYPE(0x0a) << TYPE(0x0b) << TYPE(0x0c) << TYPE(0x0d) + << TYPE(0x0e) << TYPE(0x0f) << TYPE(0x10) << TYPE(0x11) << TYPE(0x12) + << TYPE(0x13); } void Style::defaultLineStyle() @@ -147,6 +148,137 @@ _lines[TYPE(0x29)].setTextFontSize(Style::None); } +void Style::defaultPOIStyle() +{ + _points[0x2a00] = Point(QImage(":/restaurant-11.png")); + _points[0x2a01] = Point(QImage(":/restaurant-11.png")); + _points[0x2a02] = Point(QImage(":/restaurant-noodle-11.png")); + _points[0x2a03] = Point(QImage(":/bbq-11.png")); + _points[0x2a04] = Point(QImage(":/restaurant-noodle-11.png")); + _points[0x2a05] = Point(QImage(":/bakery-11.png")); + _points[0x2a06] = Point(QImage(":/restaurant-11.png")); + _points[0x2a07] = Point(QImage(":/fast-food-11.png")); + _points[0x2a08] = Point(QImage(":/restaurant-pizza-11.png")); + _points[0x2a09] = Point(QImage(":/restaurant-11.png")); + _points[0x2a0a] = Point(QImage(":/restaurant-pizza-11.png")); + _points[0x2a0b] = Point(QImage(":/restaurant-seafood-11.png")); + _points[0x2a0c] = Point(QImage(":/restaurant-11.png")); + _points[0x2a0d] = Point(QImage(":/bakery-11.png")); + _points[0x2a0e] = Point(QImage(":/cafe-11.png")); + _points[0x2a0f] = Point(QImage(":/restaurant-11.png")); + _points[0x2a10] = Point(QImage(":/restaurant-11.png")); + _points[0x2a11] = Point(QImage(":/restaurant-11.png")); + _points[0x2a12] = Point(QImage(":/restaurant-11.png")); + _points[0x2a13] = Point(QImage(":/restaurant-11.png")); + + _points[0x2b01] = Point(QImage(":/lodging-11.png")); + _points[0x2b02] = Point(QImage(":/lodging-11.png")); + _points[0x2b03] = Point(QImage(":/campsite-11.png")); + _points[0x2b04] = Point(QImage(":/village-11.png")); + _points[0x2b06] = Point(QImage(":/shelter-11.png")); + + _points[0x2c01] = Point(QImage(":/amusement-park-11.png")); + _points[0x2c02] = Point(QImage(":/museum-11.png")); + _points[0x2c03] = Point(QImage(":/library-11.png")); + _points[0x2c04] = Point(QImage(":/landmark-11.png")); + _points[0x2c05] = Point(QImage(":/school-11.png")); + _points[0x2c06] = Point(QImage(":/garden-11.png")); + _points[0x2c07] = Point(QImage(":/zoo-11.png")); + _points[0x2c08] = Point(QImage(":/soccer-11.png")); + _points[0x2c0a] = Point(QImage(":/bar-11.png")); + _points[0x2c0b] = Point(QImage(":/place-of-worship-11.png")); + _points[0x2c0d] = Point(QImage(":/religious-muslim-11.png")); + _points[0x2c0e] = Point(QImage(":/religious-christian-11.png")); + _points[0x2c10] = Point(QImage(":/religious-jewish-11.png")); + _points[0x2d01] = Point(QImage(":/theatre-11.png")); + _points[0x2d02] = Point(QImage(":/bar-11.png")); + _points[0x2d03] = Point(QImage(":/cinema-11.png")); + _points[0x2d04] = Point(QImage(":/casino-11.png")); + _points[0x2d05] = Point(QImage(":/golf-11.png")); + _points[0x2d06] = Point(QImage(":/skiing-11.png")); + _points[0x2d07] = Point(QImage(":/bowling-alley-11.png")); + _points[0x2d09] = Point(QImage(":/swimming-11.png")); + _points[0x2d0a] = Point(QImage(":/fitness-centre-11.png")); + _points[0x2d0b] = Point(QImage(":/airfield-11.png")); + + _points[0x2e02] = Point(QImage(":/grocery-11.png")); + _points[0x2e05] = Point(QImage(":/pharmacy-11.png")); + _points[0x2e07] = Point(QImage(":/clothing-store-11.png")); + _points[0x2e08] = Point(QImage(":/garden-centre-11.png")); + _points[0x2e09] = Point(QImage(":/furniture-11.png")); + _points[0x2e0c] = Point(QImage(":/shop-11.png")); + + _points[0x2f01] = Point(QImage(":/fuel-11.png")); + _points[0x2f02] = Point(QImage(":/car-rental-11.png")); + _points[0x2f03] = Point(QImage(":/car-repair-11.png")); + _points[0x2f04] = Point(QImage(":/airport-11.png")); + _points[0x2f05] = Point(QImage(":/post-11.png")); + _points[0x2f06] = Point(QImage(":/bank-11.png")); + _points[0x2f07] = Point(QImage(":/car-11.png")); + _points[0x2f08] = Point(QImage(":/bus-11.png")); + _points[0x2f09] = Point(QImage(":/harbor-11.png")); + _points[0x2f0b] = Point(QImage(":/parking-11.png")); + _points[0x2f0b].setTextFontSize(None); + _points[0x2f0c] = Point(QImage(":/toilet-11.png")); + _points[0x2f0c].setTextFontSize(None); + _points[0x2f10] = Point(QImage(":/hairdresser-11.png")); + _points[0x2f12].setTextFontSize(None); + _points[0x2f13] = Point(QImage(":/hardware-11.png")); + _points[0x2f17] = Point(QImage(":/bus-11.png")); + + _points[0x3001] = Point(QImage(":/police-11.png")); + _points[0x3002] = Point(QImage(":/hospital-11.png")); + _points[0x3003] = Point(QImage(":/town-hall-11.png")); + _points[0x3007] = Point(QImage(":/prison-11.png")); + _points[0x3008] = Point(QImage(":/fire-station-11.png")); + + _points[0x4000] = Point(QImage(":/golf-11.png")); + _points[0x4300] = Point(QImage(":/harbor-11.png")); + _points[0x4400] = Point(QImage(":/fuel-11.png")); + _points[0x4500] = Point(QImage(":/restaurant-11.png")); + _points[0x4600] = Point(QImage(":/bar-11.png")); + _points[0x4900] = Point(QImage(":/park-11.png")); + _points[0x4a00] = Point(QImage(":/picnic-site-11.png")); + _points[0x4c00] = Point(QImage(":/information-11.png")); + _points[0x4800] = Point(QImage(":/campsite-11.png")); + _points[0x4a00] = Point(QImage(":/picnic-site-11.png")); + _points[0x4b00] = Point(QImage(":/hospital-11.png")); + _points[0x4c00] = Point(QImage(":/information-11.png")); + _points[0x4d00] = Point(QImage(":/parking-11.png")); + _points[0x4d00].setTextFontSize(None); + _points[0x4e00] = Point(QImage(":/toilet-11.png")); + _points[0x4e00].setTextFontSize(None); + _points[0x5000] = Point(QImage(":/drinking-water-11.png")); + _points[0x5000].setTextFontSize(None); + _points[0x5100] = Point(QImage(":/telephone-11.png")); + _points[0x5200] = Point(QImage(":/viewpoint-11.png")); + _points[0x5300] = Point(QImage(":/skiing-11.png")); + _points[0x5400] = Point(QImage(":/swimming-11.png")); + _points[0x5500] = Point(QImage(":/dam-11.png")); + _points[0x5700] = Point(QImage(":/danger-11.png")); + _points[0x5800] = Point(QImage(":/roadblock-11.png")); + _points[0x5900] = Point(QImage(":/airport-11.png")); + _points[0x5901] = Point(QImage(":/airport-11.png")); + _points[0x5904] = Point(QImage(":/heliport-11.png")); + + _points[0x6401] = Point(QImage(":/bridge-11.png")); + _points[0x6402] = Point(QImage(":/building-alt1-11.png")); + _points[0x6403] = Point(QImage(":/cemetery-11.png")); + _points[0x6404] = Point(QImage(":/religious-christian-11.png")); + _points[0x6407] = Point(QImage(":/dam-11.png")); + _points[0x6408] = Point(QImage(":/hospital-11.png")); + _points[0x6409] = Point(QImage(":/dam-11.png")); + _points[0x640d] = Point(QImage(":/communications-tower-11.png")); + _points[0x640e] = Point(QImage(":/park-11.png")); + _points[0x640f] = Point(QImage(":/post-11.png")); + _points[0x6411] = Point(QImage(":/communications-tower-11.png")); + + _points[0x6508] = Point(QImage(":/waterfall-11.png")); + _points[0x6513] = Point(QImage(":/wetland-11.png")); + _points[0x6604] = Point(QImage(":/beach-11.png")); + _points[0x6616] = Point(QImage(":/mountain-11.png")); +} + static bool readBitmap(SubFile *file, SubFile::Handle &hdl, QImage &img, int bpp) { @@ -790,6 +922,7 @@ { defaultLineStyle(); defaultPolygonStyle(); + defaultPOIStyle(); if (typ && typ->isValid()) parseTYPFile(typ); @@ -830,6 +963,37 @@ return (type == TYPE(0x62) || type == TYPE(0x63)); } +bool Style::isSummit(quint32 type) +{ + return (type == 0x6616); +} + +Style::POIClass Style::poiClass(quint32 type) +{ + if ((type >= 0x2a00 && type < 0x2b00) || type == 0x2c0a || type == 0x2d02) + return Food; + else if (type >= 0x2b00 && type < 0x2c00) + return Accommodation; + else if (type >= 0x2c00 && type < 0x2e00) + return Recreation; + else if (type >= 0x2e00 && type < 0x2f00) + return Shopping; + else if ((type >= 0x2f00 && type < 0x2f0f) || type == 0x2f17) + return Transport; + else if (type >= 0x2f0f && type < 0x3000) + return Services; + else if (type >= 0x3000 && type < 0x3100) + return Community; + else if (type >= 0x4000 && type < 0x6000) + return Elementary; + else if (type >= 0x6400 && type < 0x6500) + return ManmadePlaces; + else if (type >= 0x6500 && type < 0x6700) + return NaturePlaces; + else + return Unknown; +} + #ifndef QT_NO_DEBUG static QString penColor(const QPen &pen) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/GPXSee-7.8/src/map/IMG/style.h new/GPXSee-7.9/src/map/IMG/style.h --- old/GPXSee-7.8/src/map/IMG/style.h 2019-05-29 21:24:37.000000000 +0200 +++ new/GPXSee-7.9/src/map/IMG/style.h 2019-06-15 09:25:16.000000000 +0200 @@ -18,6 +18,20 @@ Large = 4 }; + enum POIClass { + Unknown, + Food, + Accommodation, + Recreation, + Shopping, + Transport, + Services, + Community, + Elementary, + ManmadePlaces, + NaturePlaces + }; + class Polygon { public: Polygon() : _brush(Qt::NoBrush), _pen(Qt::NoPen) {} @@ -91,6 +105,8 @@ static bool isContourLine(quint32 type); static bool isSpot(quint32 type); + static bool isSummit(quint32 type); + static POIClass poiClass(quint32 type); private: struct Section { @@ -121,6 +137,7 @@ const Section §ion, ItemInfo &info); void defaultPolygonStyle(); void defaultLineStyle(); + void defaultPOIStyle(); QMap<quint32, Line> _lines; QMap<quint32, Polygon> _polygons; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/GPXSee-7.8/src/map/IMG/textitem.cpp new/GPXSee-7.9/src/map/IMG/textitem.cpp --- old/GPXSee-7.8/src/map/IMG/textitem.cpp 1970-01-01 01:00:00.000000000 +0100 +++ new/GPXSee-7.9/src/map/IMG/textitem.cpp 2019-06-15 09:25:16.000000000 +0200 @@ -0,0 +1,17 @@ +#include "textitem.h" + +bool TextItem::collides(const QList<TextItem*> &list) const +{ + QRectF r1(boundingRect()); + + for (int i = 0; i < list.size(); i++) { + const TextItem* other = list.at(i); + QRectF r2(other->boundingRect()); + + if (!(r1.isEmpty() || r2.isEmpty() || !r1.intersects(r2))) + if (other->shape().intersects(shape())) + return true; + } + + return false; +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/GPXSee-7.8/src/map/IMG/textitem.h new/GPXSee-7.9/src/map/IMG/textitem.h --- old/GPXSee-7.8/src/map/IMG/textitem.h 1970-01-01 01:00:00.000000000 +0100 +++ new/GPXSee-7.9/src/map/IMG/textitem.h 2019-06-15 09:25:16.000000000 +0200 @@ -0,0 +1,22 @@ +#ifndef TEXTITEM_H +#define TEXTITEM_H + +#include <QList> +#include <QRectF> +#include <QPainterPath> + +class QPainter; + +class TextItem +{ +public: + virtual ~TextItem() {} + + virtual QPainterPath shape() const = 0; + virtual QRectF boundingRect() const = 0; + virtual void paint(QPainter *painter) const = 0; + + bool collides(const QList<TextItem*> &list) const; +}; + +#endif // TEXTITEM_H diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/GPXSee-7.8/src/map/IMG/textpathitem.cpp new/GPXSee-7.9/src/map/IMG/textpathitem.cpp --- old/GPXSee-7.8/src/map/IMG/textpathitem.cpp 2019-05-29 21:24:37.000000000 +0200 +++ new/GPXSee-7.9/src/map/IMG/textpathitem.cpp 2019-06-15 09:25:16.000000000 +0200 @@ -154,23 +154,6 @@ _rect = _shape.boundingRect(); } -bool TextPathItem::collides(const QVector<TextPathItem> &list) const -{ - if (_rect.isEmpty()) - return false; - - for (int i = 0; i < list.size(); i++) { - const TextPathItem &other = list.at(i); - if (other._rect.isEmpty() || !_rect.intersects(other._rect)) - continue; - - if (other._shape.intersects(_shape)) - return true; - } - - return false; -} - void TextPathItem::paint(QPainter *painter) const { QFontMetrics fm(*_font); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/GPXSee-7.8/src/map/IMG/textpathitem.h new/GPXSee-7.9/src/map/IMG/textpathitem.h --- old/GPXSee-7.8/src/map/IMG/textpathitem.h 2019-05-29 21:24:37.000000000 +0200 +++ new/GPXSee-7.9/src/map/IMG/textpathitem.h 2019-06-15 09:25:16.000000000 +0200 @@ -3,9 +3,9 @@ #include <QVector> #include <QPainterPath> -#include "img.h" +#include "textitem.h" -class TextPathItem +class TextPathItem : public TextItem { public: TextPathItem() : _text(0), _font(0), _color(0) {} @@ -13,7 +13,9 @@ const QRect &tileRect, const QFont *font, const QColor *color); bool isValid() const {return !_path.isEmpty();} - bool collides(const QVector<TextPathItem> &list) const; + + QPainterPath shape() const {return _shape;} + QRectF boundingRect() const {return _rect;} void paint(QPainter *painter) const; private: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/GPXSee-7.8/src/map/IMG/textpointitem.cpp new/GPXSee-7.9/src/map/IMG/textpointitem.cpp --- old/GPXSee-7.8/src/map/IMG/textpointitem.cpp 2019-05-29 21:24:37.000000000 +0200 +++ new/GPXSee-7.9/src/map/IMG/textpointitem.cpp 2019-06-15 09:25:16.000000000 +0200 @@ -18,6 +18,7 @@ QFontMetrics fm(*font); int limit = font->pixelSize() * MAX_TEXT_WIDTH; _textRect = fm.boundingRect(QRect(0, 0, limit, 0), FLAGS, *text); + _textRect.adjust(0, 0, 1, 1); } if (img) { iconRect = QRect(QPoint(point.x() - img->width()/2, point.y() @@ -28,15 +29,7 @@ _textRect.moveCenter(point); _rect = _textRect | iconRect; -} - -bool TextPointItem::collides(const QVector<TextPointItem> &list) const -{ - for (int i = 0; i < list.size(); i++) - if (list.at(i)._rect.intersects(_rect)) - return true; - - return false; + _shape.addRect(_rect); } void TextPointItem::paint(QPainter *painter) const diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/GPXSee-7.8/src/map/IMG/textpointitem.h new/GPXSee-7.9/src/map/IMG/textpointitem.h --- old/GPXSee-7.8/src/map/IMG/textpointitem.h 2019-05-29 21:24:37.000000000 +0200 +++ new/GPXSee-7.9/src/map/IMG/textpointitem.h 2019-06-15 09:25:16.000000000 +0200 @@ -4,20 +4,24 @@ #include <QRect> #include <QString> #include <QVector> +#include "textitem.h" class QPainter; class QFont; class QImage; class QColor; -class TextPointItem +class TextPointItem : public TextItem { public: TextPointItem() : _text(0), _font(0), _img(0) {} TextPointItem(const QPoint &point, const QString *text, const QFont *font, const QImage *img, const QColor *color); - bool collides(const QVector<TextPointItem> &list) const; + bool isValid() const {return !_rect.isEmpty();} + + QRectF boundingRect() const {return _rect;} + QPainterPath shape() const {return _shape;} void paint(QPainter *painter) const; private: @@ -26,6 +30,7 @@ const QImage *_img; const QColor *_color; QRect _rect, _textRect; + QPainterPath _shape; }; #endif // TEXTPOINTITEM_H diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/GPXSee-7.8/src/map/imgmap.cpp new/GPXSee-7.9/src/map/imgmap.cpp --- old/GPXSee-7.8/src/map/imgmap.cpp 2019-05-29 21:24:37.000000000 +0200 +++ new/GPXSee-7.9/src/map/imgmap.cpp 2019-06-15 09:25:16.000000000 +0200 @@ -24,9 +24,7 @@ #define SMALL_FONT_SIZE 10 #define POI_FONT_SIZE 9 -#define LINE_TEXT_MIN_ZOOM 23 -#define POI_MIN_ZOOM 25 -#define POI_TEXT_MIN_ZOOM 26 +#define LINE_TEXT_MIN_ZOOM 22 class RasterTile { @@ -45,6 +43,12 @@ void load() { + QList<TextItem*> textItems; + + _map->processPolygons(_polygons); + _map->processPoints(_points, textItems); + _map->processLines(_lines, _xy, textItems); + _img.fill(Qt::transparent); QPainter painter(&_img); @@ -53,8 +57,10 @@ painter.translate(-_xy.x(), -_xy.y()); _map->drawPolygons(&painter, _polygons); - _map->drawLines(&painter, _lines, _xy); - _map->drawPoints(&painter, _points); + _map->drawLines(&painter, _lines); + _map->drawTextItems(&painter, textItems); + + qDeleteAll(textItems); } private: @@ -76,6 +82,26 @@ str = QString::number(qRound(number * 0.3048)); } +static int minPOIZoom(Style::POIClass cl) +{ + switch (cl) { + case Style::Food: + case Style::Shopping: + case Style::Services: + return 27; + case Style::Accommodation: + case Style::Recreation: + return 25; + case Style::ManmadePlaces: + case Style::NaturePlaces: + case Style::Transport: + case Style::Community: + case Style::Elementary: + return 23; + default: + return 0; + } +} IMGMap::IMGMap(const QString &fileName, QObject *parent) : Map(parent), _fileName(fileName), _img(fileName), @@ -171,20 +197,15 @@ } -void IMGMap::drawPolygons(QPainter *painter, QList<IMG::Poly> &polygons) +void IMGMap::drawPolygons(QPainter *painter, const QList<IMG::Poly> &polygons) { for (int n = 0; n < _img.style().drawOrder().size(); n++) { for (int i = 0; i < polygons.size(); i++) { - IMG::Poly &poly = polygons[i]; + const IMG::Poly &poly = polygons.at(i); if (poly.type != _img.style().drawOrder().at(n)) continue; const Style::Polygon &style = _img.style().polygon(poly.type); - for (int j = 0; j < poly.points.size(); j++) { - QPointF &p = poly.points[j]; - p = ll2xy(Coordinates(p.x(), p.y())); - } - painter->setPen(style.pen()); painter->setBrush(style.brush()); painter->drawPolygon(poly.points); @@ -192,19 +213,8 @@ } } -void IMGMap::drawLines(QPainter *painter, QList<IMG::Poly> &lines, - const QPoint &tile) +void IMGMap::drawLines(QPainter *painter, const QList<IMG::Poly> &lines) { - qStableSort(lines); - - for (int i = 0; i < lines.size(); i++) { - IMG::Poly &poly = lines[i]; - for (int j = 0; j < poly.points.size(); j++) { - QPointF &p = poly.points[j]; - p = ll2xy(Coordinates(p.x(), p.y())); - } - } - painter->setBrush(Qt::NoBrush); for (int i = 0; i < lines.size(); i++) { @@ -229,12 +239,42 @@ painter->drawPolyline(poly.points); } } +} + +void IMGMap::drawTextItems(QPainter *painter, const QList<TextItem*> &textItems) +{ + for (int i = 0; i < textItems.size(); i++) + textItems.at(i)->paint(painter); +} + + +void IMGMap::processPolygons(QList<IMG::Poly> &polygons) +{ + for (int i = 0; i < polygons.size(); i++) { + IMG::Poly &poly = polygons[i]; + for (int j = 0; j < poly.points.size(); j++) { + QPointF &p = poly.points[j]; + p = ll2xy(Coordinates(p.x(), p.y())); + } + } +} + +void IMGMap::processLines(QList<IMG::Poly> &lines, const QPoint &tile, + QList<TextItem*> &textItems) +{ + qStableSort(lines); + + for (int i = 0; i < lines.size(); i++) { + IMG::Poly &poly = lines[i]; + for (int j = 0; j < poly.points.size(); j++) { + QPointF &p = poly.points[j]; + p = ll2xy(Coordinates(p.x(), p.y())); + } + } if (_zoom < LINE_TEXT_MIN_ZOOM) return; - QVector<TextPathItem> items; - for (int i = 0; i < lines.size(); i++) { IMG::Poly &poly = lines[i]; const Style::Line &style = _img.style().line(poly.type); @@ -261,36 +301,37 @@ const QColor *color = style.textColor().isValid() ? &style.textColor() : 0; - TextPathItem item(poly.points, &poly.label, QRect(tile, - QSize(TILE_SIZE, TILE_SIZE)), font, color); - if (item.isValid() && !item.collides(items)) - items.append(item); + TextPathItem *item = new TextPathItem(poly.points, &poly.label, + QRect(tile, QSize(TILE_SIZE, TILE_SIZE)), font, color); + if (item->isValid() && !item->collides(textItems)) + textItems.append(item); + else + delete item; } - - for (int i = 0; i < items.size(); i++) - items.at(i).paint(painter); } -void IMGMap::drawPoints(QPainter *painter, QList<IMG::Point> &points) +void IMGMap::processPoints(QList<IMG::Point> &points, + QList<TextItem*> &textItems) { qSort(points); - QVector<TextPointItem> items; - for (int i = 0; i < points.size(); i++) { IMG::Point &point = points[i]; + const Style::Point &style = _img.style().point(point.type); - if (point.poi && _zoom < POI_MIN_ZOOM) + if (point.poi && _zoom < minPOIZoom(Style::poiClass(point.type))) continue; - const QString *label = ((point.poi && _zoom < POI_TEXT_MIN_ZOOM) - || point.label.isEmpty()) ? 0 : &(point.label); + const QString *label = point.label.isEmpty() ? 0 : &(point.label); const QImage *img = style.img().isNull() ? 0 : &style.img(); const QFont *font = 0; - if (point.poi) - font = &_poiFont; - else { + if (point.poi) { + if (style.textFontSize() == Style::None) + label = 0; + else + font = &_poiFont; + } else { switch (style.textFontSize()) { case Style::None: label = 0; @@ -313,15 +354,19 @@ if (Style::isSpot(point.type)) convertUnits(point.label); + if (Style::isSummit(point.type) && !point.label.isEmpty()) { + QStringList list = point.label.split(" "); + convertUnits(list.last()); + point.label = list.join(" "); + } - TextPointItem item(ll2xy(point.coordinates).toPoint(), label, font, img, - color); - if (!item.collides(items)) - items.append(item); + TextPointItem *item = new TextPointItem( + ll2xy(point.coordinates).toPoint(), label, font, img, color); + if (item->isValid() && !item->collides(textItems)) + textItems.append(item); + else + delete item; } - - for (int i = 0; i < items.size(); i++) - items.at(i).paint(painter); } static void render(RasterTile &tile) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/GPXSee-7.8/src/map/imgmap.h new/GPXSee-7.9/src/map/imgmap.h --- old/GPXSee-7.8/src/map/imgmap.h 2019-05-29 21:24:37.000000000 +0200 +++ new/GPXSee-7.9/src/map/imgmap.h 2019-06-15 09:25:16.000000000 +0200 @@ -8,6 +8,7 @@ #include "common/range.h" #include "IMG/img.h" +class TextItem; class IMGMap : public Map { @@ -41,10 +42,14 @@ Transform transform(int zoom) const; void updateTransform(); - void drawPolygons(QPainter *painter, QList<IMG::Poly> &polygons); - void drawLines(QPainter *painter, QList<IMG::Poly> &lines, - const QPoint &tile); - void drawPoints(QPainter *painter, QList<IMG::Point> &points); + void drawPolygons(QPainter *painter, const QList<IMG::Poly> &polygons); + void drawLines(QPainter *painter, const QList<IMG::Poly> &lines); + void drawTextItems(QPainter *painter, const QList<TextItem*> &textItems); + + void processPolygons(QList<IMG::Poly> &polygons); + void processLines(QList<IMG::Poly> &lines, const QPoint &tile, + QList<TextItem*> &textItems); + void processPoints(QList<IMG::Point> &points, QList<TextItem*> &textItems); QString _fileName; IMG _img; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/GPXSee-7.8/src/map/map.cpp new/GPXSee-7.9/src/map/map.cpp --- old/GPXSee-7.8/src/map/map.cpp 2019-05-29 21:24:37.000000000 +0200 +++ new/GPXSee-7.9/src/map/map.cpp 2019-06-15 09:25:16.000000000 +0200 @@ -1,6 +1,5 @@ #include <QLineF> #include "map.h" -#include "pcs.h" qreal Map::resolution(const QRectF &rect) { ++++++ PKGBUILD ++++++ --- /var/tmp/diff_new_pack.8DAszL/_old 2019-06-21 09:58:48.512699885 +0200 +++ /var/tmp/diff_new_pack.8DAszL/_new 2019-06-21 09:58:48.516699891 +0200 @@ -1,5 +1,5 @@ pkgname=gpxsee -pkgver=7.8 +pkgver=7.9 pkgrel=1 pkgdesc='GPS log files visualizing and analyzing tool' arch=('i686' 'x86_64') ++++++ debian.changelog ++++++ --- /var/tmp/diff_new_pack.8DAszL/_old 2019-06-21 09:58:48.540699926 +0200 +++ /var/tmp/diff_new_pack.8DAszL/_new 2019-06-21 09:58:48.540699926 +0200 @@ -1,3 +1,10 @@ +gpxsee (7.9) stable; urgency=low + + * Removed the annoying map view re-zooming on window resize. + * Improved POI handling and text rendering in IMG maps. + + -- Martin Tuma <[email protected]> Sat, 15 Jun 2019 22:44:41 +0200 + gpxsee (7.8) stable; urgency=low * Added support for QuadTiles maps. ++++++ gpxsee.dsc ++++++ --- /var/tmp/diff_new_pack.8DAszL/_old 2019-06-21 09:58:48.600700016 +0200 +++ /var/tmp/diff_new_pack.8DAszL/_new 2019-06-21 09:58:48.604700022 +0200 @@ -1,9 +1,9 @@ Format: 1.0 Source: gpxsee -Version: 7.8 +Version: 7.9 Binary: gpxsee Maintainer: Martin Tuma <[email protected]> Architecture: any Build-Depends: debhelper (>= 9), qtbase5-dev, qtbase5-dev-tools, qt5-qmake, qttools5-dev-tools, libqt5opengl5-dev Files: - 00000000000000000000000000000000 0 GPXSee-7.8.tar.gz + 00000000000000000000000000000000 0 GPXSee-7.9.tar.gz
