1
0
mirror of https://github.com/tumic0/GPXSee.git synced 2024-11-24 03:35:53 +01:00

Compare commits

..

5 Commits

Author SHA1 Message Date
937c71f16c Version++ 2024-09-12 00:08:20 +02:00
Hosted Weblate
bdc0c1d2b3
Merge branch 'origin/master' into Weblate. 2024-09-12 00:02:44 +02:00
f36ec45c42 Localization update 2024-09-12 00:02:18 +02:00
52c6773b7e Added support for map layers selection
Enable selecting only raster or only vector layers when showing Garmin maps.
2024-09-11 23:52:30 +02:00
ovl-1
5b3a41f11a
Translated using Weblate (Norwegian Bokmål)
Currently translated at 100.0% (484 of 484 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/nb_NO/
2024-09-11 18:09:13 +02:00
32 changed files with 4538 additions and 4050 deletions

View File

@ -1,4 +1,4 @@
version: 13.24.{build} version: 13.25.{build}
configuration: configuration:
- Release - Release

View File

@ -3,7 +3,7 @@ unix:!macx:!android {
} else { } else {
TARGET = GPXSee TARGET = GPXSee
} }
VERSION = 13.24 VERSION = 13.25
QT += core \ QT += core \

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -37,7 +37,7 @@ Unicode true
; The name of the installer ; The name of the installer
Name "GPXSee" Name "GPXSee"
; Program version ; Program version
!define VERSION "13.24" !define VERSION "13.25"
; The file to write ; The file to write
OutFile "GPXSee-${VERSION}_x64.exe" OutFile "GPXSee-${VERSION}_x64.exe"

View File

@ -364,6 +364,21 @@ void GUI::createActions()
_showCoordinatesAction->setCheckable(true); _showCoordinatesAction->setCheckable(true);
connect(_showCoordinatesAction, &QAction::triggered, _mapView, connect(_showCoordinatesAction, &QAction::triggered, _mapView,
&MapView::showCursorCoordinates); &MapView::showCursorCoordinates);
QActionGroup *mapLayersGroup = new QActionGroup(this);
connect(mapLayersGroup, &QActionGroup::triggered, this,
&GUI::selectMapLayers);
_drawAllAction = new QAction(tr("All"), this);
_drawAllAction->setMenuRole(QAction::NoRole);
_drawAllAction->setCheckable(true);
_drawAllAction->setActionGroup(mapLayersGroup);
_drawRastersAction = new QAction(tr("Raster only"), this);
_drawRastersAction->setMenuRole(QAction::NoRole);
_drawRastersAction->setCheckable(true);
_drawRastersAction->setActionGroup(mapLayersGroup);
_drawVectorsAction = new QAction(tr("Vector only"), this);
_drawVectorsAction->setMenuRole(QAction::NoRole);
_drawVectorsAction->setCheckable(true);
_drawVectorsAction->setActionGroup(mapLayersGroup);
// Position // Position
_showPositionAction = new QAction(QIcon::fromTheme(SHOW_POS_NAME, _showPositionAction = new QAction(QIcon::fromTheme(SHOW_POS_NAME,
@ -677,6 +692,11 @@ void GUI::createMenus()
_mapMenu->addAction(_loadMapDirAction); _mapMenu->addAction(_loadMapDirAction);
_mapMenu->addAction(_clearMapCacheAction); _mapMenu->addAction(_clearMapCacheAction);
_mapMenu->addSeparator(); _mapMenu->addSeparator();
QMenu *layersMenu = _mapMenu->addMenu(tr("Layers"));
layersMenu->menuAction()->setMenuRole(QAction::NoRole);
layersMenu->addAction(_drawAllAction);
layersMenu->addAction(_drawRastersAction);
layersMenu->addAction(_drawVectorsAction);
_mapMenu->addAction(_showCoordinatesAction); _mapMenu->addAction(_showCoordinatesAction);
_mapMenu->addSeparator(); _mapMenu->addSeparator();
_mapMenu->addAction(_showMapAction); _mapMenu->addAction(_showMapAction);
@ -1462,7 +1482,7 @@ void GUI::plotMainPage(QPainter *painter, const QRectF &rect, qreal ratio,
sc = 1; sc = 1;
} }
MapView::PlotFlags flags; MapView::Flags flags;
if (_options.hiresPrint) if (_options.hiresPrint)
flags |= MapView::HiRes; flags |= MapView::HiRes;
if (expand) if (expand)
@ -1718,6 +1738,16 @@ void GUI::showPathMarkerInfo(QAction *action)
} }
} }
void GUI::selectMapLayers(QAction *action)
{
if (action == _drawVectorsAction)
_mapView->selectLayers(MapView::Layer::Vector);
else if (action == _drawRastersAction)
_mapView->selectLayers(MapView::Layer::Raster);
else
_mapView->selectLayers(MapView::Layer::Raster | MapView::Layer::Vector);
}
void GUI::loadMap() void GUI::loadMap()
{ {
#ifdef Q_OS_ANDROID #ifdef Q_OS_ANDROID
@ -2478,10 +2508,19 @@ void GUI::writeSettings()
#endif // Q_OS_ANDROID #endif // Q_OS_ANDROID
/* Map */ /* Map */
MapView::Layers ml;
if (_drawRastersAction->isChecked())
ml = MapView::Layer::Raster;
else if (_drawVectorsAction->isChecked())
ml = MapView::Layer::Vector;
else
ml = MapView::Layer::Raster | MapView::Layer::Vector;
settings.beginGroup(SETTINGS_MAP); settings.beginGroup(SETTINGS_MAP);
WRITE(activeMap, _map->name()); WRITE(activeMap, _map->name());
WRITE(showMap, _showMapAction->isChecked()); WRITE(showMap, _showMapAction->isChecked());
WRITE(cursorCoordinates, _showCoordinatesAction->isChecked()); WRITE(cursorCoordinates, _showCoordinatesAction->isChecked());
WRITE(layers, (int)ml);
settings.endGroup(); settings.endGroup();
/* Graph */ /* Graph */
@ -2716,6 +2755,15 @@ void GUI::readSettings(QString &activeMap, QStringList &disabledPOIs,
_showCoordinatesAction->setChecked(true); _showCoordinatesAction->setChecked(true);
_mapView->showCursorCoordinates(true); _mapView->showCursorCoordinates(true);
} }
int layers = READ(layers).toInt();
if (layers == MapView::Layer::Raster) {
_drawRastersAction->setChecked(true);
_mapView->selectLayers(MapView::Layer::Raster);
} else if (layers == MapView::Layer::Vector) {
_drawVectorsAction->setChecked(true);
_mapView->selectLayers(MapView::Layer::Vector);
} else
_drawAllAction->setChecked(true);
activeMap = READ(activeMap).toString(); activeMap = READ(activeMap).toString();
settings.endGroup(); settings.endGroup();
@ -2831,10 +2879,10 @@ void GUI::readSettings(QString &activeMap, QStringList &disabledPOIs,
/* DEM */ /* DEM */
settings.beginGroup(SETTINGS_DEM); settings.beginGroup(SETTINGS_DEM);
if (READ(drawHillShading).toBool()) { if (READ(drawHillShading).toBool())
_drawHillShadingAction->setChecked(true); _drawHillShadingAction->setChecked(true);
_mapView->drawHillShading(true); else
} _mapView->drawHillShading(false);
settings.endGroup(); settings.endGroup();
/* Position */ /* Position */

View File

@ -68,6 +68,7 @@ private slots:
void showGraphGrids(bool show); void showGraphGrids(bool show);
void showGraphSliderInfo(bool show); void showGraphSliderInfo(bool show);
void showPathMarkerInfo(QAction *action); void showPathMarkerInfo(QAction *action);
void selectMapLayers(QAction *action);
#ifdef Q_OS_ANDROID #ifdef Q_OS_ANDROID
void showGraphTabs(bool show); void showGraphTabs(bool show);
#else // Q_OS_ANDROID #else // Q_OS_ANDROID
@ -298,6 +299,9 @@ private:
QAction *_downloadMapDEMAction; QAction *_downloadMapDEMAction;
QAction *_showDEMTilesAction; QAction *_showDEMTilesAction;
QAction *_drawHillShadingAction; QAction *_drawHillShadingAction;
QAction *_drawRastersAction;
QAction *_drawVectorsAction;
QAction *_drawAllAction;
QAction *_mapsEnd; QAction *_mapsEnd;
QAction *_poisEnd; QAction *_poisEnd;
#ifndef Q_OS_ANDROID #ifndef Q_OS_ANDROID

View File

@ -62,7 +62,8 @@ MapView::MapView(Map *map, POI *poi, QWidget *parent) : QGraphicsView(parent)
_outputProjection = PCS::pcs(3857); _outputProjection = PCS::pcs(3857);
_inputProjection = GCS::gcs(4326); _inputProjection = GCS::gcs(4326);
_hidpi = true; _hidpi = true;
_hillShading = false; _hillShading = true;
_layers = Layer::Raster | Layer::Vector;
_map = map; _map = map;
_map->load(_inputProjection, _outputProjection, _deviceRatio, _hidpi); _map->load(_inputProjection, _outputProjection, _deviceRatio, _hidpi);
connect(_map, &Map::tilesLoaded, this, &MapView::reloadMap); connect(_map, &Map::tilesLoaded, this, &MapView::reloadMap);
@ -683,7 +684,7 @@ void MapView::keyReleaseEvent(QKeyEvent *event)
} }
void MapView::plot(QPainter *painter, const QRectF &target, qreal scale, void MapView::plot(QPainter *painter, const QRectF &target, qreal scale,
PlotFlags flags) Flags flags)
{ {
QRect orig, adj; QRect orig, adj;
qreal ratio, diff, q, p; qreal ratio, diff, q, p;
@ -1115,6 +1116,10 @@ void MapView::drawBackground(QPainter *painter, const QRectF &rect)
flags = Map::OpenGL; flags = Map::OpenGL;
if (_hillShading) if (_hillShading)
flags |= Map::HillShading; flags |= Map::HillShading;
if (_layers & Layer::Raster)
flags |= Map::Rasters;
if (_layers & Layer::Vector)
flags |= Map::Vectors;
_map->draw(painter, ir, flags); _map->draw(painter, ir, flags);
} }
@ -1252,6 +1257,13 @@ void MapView::drawHillShading(bool draw)
setMap(_map); setMap(_map);
} }
void MapView::selectLayers(Layers layers)
{
_layers = layers;
setMap(_map);
}
void MapView::useStyles(bool use) void MapView::useStyles(bool use)
{ {
GraphicsItem::useStyle(use); GraphicsItem::useStyle(use);

View File

@ -51,7 +51,14 @@ public:
HiRes = 1, HiRes = 1,
Expand = 2 Expand = 2
}; };
Q_DECLARE_FLAGS(PlotFlags, Flag) Q_DECLARE_FLAGS(Flags, Flag)
enum Layer {
NoLayers = 0,
Raster = 1,
Vector = 2
};
Q_DECLARE_FLAGS(Layers, Layer)
MapView(Map *map, POI *poi, QWidget *parent = 0); MapView(Map *map, POI *poi, QWidget *parent = 0);
@ -66,8 +73,7 @@ public:
void setGraph(int index); void setGraph(int index);
void showExtendedInfo(bool show) {_scene->showExtendedInfo(show);} void showExtendedInfo(bool show) {_scene->showExtendedInfo(show);}
void plot(QPainter *painter, const QRectF &target, qreal scale, void plot(QPainter *painter, const QRectF &target, qreal scale, Flags flags);
PlotFlags flags);
void clear(); void clear();
@ -130,6 +136,7 @@ public slots:
void showMotionInfo(bool show); void showMotionInfo(bool show);
void useStyles(bool use); void useStyles(bool use);
void drawHillShading(bool draw); void drawHillShading(bool draw);
void selectLayers(Layers layers);
private slots: private slots:
void updatePOI(); void updatePOI();
@ -209,6 +216,7 @@ private:
bool _infoBackground; bool _infoBackground;
bool _hillShading; bool _hillShading;
Layers _layers;
int _digitalZoom; int _digitalZoom;
bool _plot; bool _plot;
@ -222,4 +230,6 @@ private:
int _wheelDelta; int _wheelDelta;
}; };
Q_DECLARE_OPERATORS_FOR_FLAGS(MapView::Layers)
#endif // MAPVIEW_H #endif // MAPVIEW_H

View File

@ -5,6 +5,7 @@
#include <QGeoPositionInfoSource> #include <QGeoPositionInfoSource>
#include "common/config.h" #include "common/config.h"
#include "data/graph.h" #include "data/graph.h"
#include "GUI/mapview.h"
#include "format.h" #include "format.h"
#include "units.h" #include "units.h"
#include "timetype.h" #include "timetype.h"
@ -31,6 +32,8 @@
? QPageSize::PageSizeId::Letter \ ? QPageSize::PageSizeId::Letter \
: QPageSize::PageSizeId::A4) : QPageSize::PageSizeId::A4)
#define ALL_LAYERS (int)(MapView::Layer::Raster | MapView::Layer::Vector)
#ifdef Q_OS_ANDROID #ifdef Q_OS_ANDROID
#define PIXMAP_CACHE 384 #define PIXMAP_CACHE 384
#define DEM_CACHE 128 #define DEM_CACHE 128
@ -144,6 +147,7 @@ SETTING(showToolbars, "toolbar", true );
SETTING(activeMap, "map", "Open Street Map" ); SETTING(activeMap, "map", "Open Street Map" );
SETTING(showMap, "show", true ); SETTING(showMap, "show", true );
SETTING(cursorCoordinates, "coordinates", false ); SETTING(cursorCoordinates, "coordinates", false );
SETTING(layers, "layers", ALL_LAYERS );
/* Graph */ /* Graph */
SETTING(showGraphs, "show", true ); SETTING(showGraphs, "show", true );

View File

@ -95,6 +95,7 @@ public:
static const Setting activeMap; static const Setting activeMap;
static const Setting showMap; static const Setting showMap;
static const Setting cursorCoordinates; static const Setting cursorCoordinates;
static const Setting layers;
/* Graph */ /* Graph */
static const Setting showGraphs; static const Setting showGraphs;

View File

@ -114,8 +114,11 @@ const QFont *RasterTile::poiFont(Style::FontSize size, int zoom,
} }
} }
void RasterTile::ll2xy(QList<MapData::Poly> &polys) const void RasterTile::ll2xy(QList<MapData::Poly> &polys, bool polygons) const
{ {
if (!_vectors && !polygons)
return;
for (int i = 0; i < polys.size(); i++) { for (int i = 0; i < polys.size(); i++) {
MapData::Poly &poly = polys[i]; MapData::Poly &poly = polys[i];
for (int j = 0; j < poly.points.size(); j++) { for (int j = 0; j < poly.points.size(); j++) {
@ -127,6 +130,9 @@ void RasterTile::ll2xy(QList<MapData::Poly> &polys) const
void RasterTile::ll2xy(QList<MapData::Point> &points) const void RasterTile::ll2xy(QList<MapData::Point> &points) const
{ {
if (!_vectors)
return;
for (int i = 0; i < points.size(); i++) { for (int i = 0; i < points.size(); i++) {
QPointF p(ll2xy(points.at(i).coordinates)); QPointF p(ll2xy(points.at(i).coordinates));
points[i].coordinates = Coordinates(p.x(), p.y()); points[i].coordinates = Coordinates(p.x(), p.y());
@ -145,6 +151,9 @@ void RasterTile::drawPolygons(QPainter *painter,
continue; continue;
if (poly.raster.isValid()) { if (poly.raster.isValid()) {
if (!_rasters)
continue;
RectC r(poly.raster.rect()); RectC r(poly.raster.rect());
QPointF tl(ll2xy(r.topLeft())); QPointF tl(ll2xy(r.topLeft()));
QPointF br(ll2xy(r.bottomRight())); QPointF br(ll2xy(r.bottomRight()));
@ -173,6 +182,9 @@ void RasterTile::drawPolygons(QPainter *painter,
//painter->drawRect(QRectF(tl, br)); //painter->drawRect(QRectF(tl, br));
//painter->setRenderHint(QPainter::Antialiasing); //painter->setRenderHint(QPainter::Antialiasing);
} else { } else {
if (!_vectors)
continue;
const Style::Polygon &style = _data->style()->polygon(poly.type); const Style::Polygon &style = _data->style()->polygon(poly.type);
painter->setPen(style.pen()); painter->setPen(style.pen());
@ -186,6 +198,9 @@ void RasterTile::drawPolygons(QPainter *painter,
void RasterTile::drawLines(QPainter *painter, void RasterTile::drawLines(QPainter *painter,
const QList<MapData::Poly> &lines) const const QList<MapData::Poly> &lines) const
{ {
if (!_vectors)
return;
painter->setBrush(Qt::NoBrush); painter->setBrush(Qt::NoBrush);
for (int i = 0; i < lines.size(); i++) { for (int i = 0; i < lines.size(); i++) {
@ -238,6 +253,9 @@ void RasterTile::processPolygons(const QList<MapData::Poly> &polygons,
QSet<QString> set; QSet<QString> set;
QList<TextItem *> labels; QList<TextItem *> labels;
if (!_vectors)
return;
for (int i = 0; i < polygons.size(); i++) { for (int i = 0; i < polygons.size(); i++) {
const MapData::Poly &poly = polygons.at(i); const MapData::Poly &poly = polygons.at(i);
bool exists = set.contains(poly.label.text()); bool exists = set.contains(poly.label.text());
@ -272,6 +290,9 @@ void RasterTile::processPolygons(const QList<MapData::Poly> &polygons,
void RasterTile::processLines(QList<MapData::Poly> &lines, void RasterTile::processLines(QList<MapData::Poly> &lines,
QList<TextItem*> &textItems, const QImage (&arrows)[2]) QList<TextItem*> &textItems, const QImage (&arrows)[2])
{ {
if (!_vectors)
return;
std::stable_sort(lines.begin(), lines.end()); std::stable_sort(lines.begin(), lines.end());
if (_zoom >= 22) if (_zoom >= 22)
@ -390,6 +411,9 @@ void RasterTile::processShields(const QList<MapData::Poly> &lines,
void RasterTile::processPoints(QList<MapData::Point> &points, void RasterTile::processPoints(QList<MapData::Point> &points,
QList<TextItem*> &textItems) QList<TextItem*> &textItems)
{ {
if (!_vectors)
return;
std::sort(points.begin(), points.end()); std::sort(points.begin(), points.end());
for (int i = 0; i < points.size(); i++) { for (int i = 0; i < points.size(); i++) {
@ -511,8 +535,8 @@ void RasterTile::render()
arrows[WATER] = HIDPI_IMG(":/map", "water-arrow", _ratio); arrows[WATER] = HIDPI_IMG(":/map", "water-arrow", _ratio);
fetchData(polygons, lines, points); fetchData(polygons, lines, points);
ll2xy(polygons); ll2xy(polygons, true);
ll2xy(lines); ll2xy(lines, false);
ll2xy(points); ll2xy(points);
processPoints(points, textItems); processPoints(points, textItems);

View File

@ -19,9 +19,10 @@ class RasterTile
public: public:
RasterTile(const Projection &proj, const Transform &transform, MapData *data, RasterTile(const Projection &proj, const Transform &transform, MapData *data,
int zoom, const QRect &rect, qreal ratio, const QString &key, int zoom, const QRect &rect, qreal ratio, const QString &key,
bool hillShading) bool hillShading, bool rasters, bool vectors)
: _proj(proj), _transform(transform), _data(data), _zoom(zoom), : _proj(proj), _transform(transform), _data(data), _zoom(zoom),
_rect(rect), _ratio(ratio), _key(key), _hillShading(hillShading) {} _rect(rect), _ratio(ratio), _key(key), _hillShading(hillShading),
_rasters(rasters), _vectors(vectors) {}
const QString &key() const {return _key;} const QString &key() const {return _key;}
QPoint xy() const {return _rect.topLeft();} QPoint xy() const {return _rect.topLeft();}
@ -53,7 +54,7 @@ private:
{return _transform.proj2img(_proj.ll2xy(c));} {return _transform.proj2img(_proj.ll2xy(c));}
Coordinates xy2ll(const QPointF &p) const Coordinates xy2ll(const QPointF &p) const
{return _proj.xy2ll(_transform.img2proj(p));} {return _proj.xy2ll(_transform.img2proj(p));}
void ll2xy(QList<MapData::Poly> &polys) const; void ll2xy(QList<MapData::Poly> &polys, bool polygons) const;
void ll2xy(QList<MapData::Point> &points) const; void ll2xy(QList<MapData::Point> &points) const;
void drawPolygons(QPainter *painter, const QList<MapData::Poly> &polygons) const; void drawPolygons(QPainter *painter, const QList<MapData::Poly> &polygons) const;
@ -86,6 +87,7 @@ private:
QString _key; QString _key;
QPixmap _pixmap; QPixmap _pixmap;
bool _hillShading; bool _hillShading;
bool _rasters, _vectors;
}; };
} }

View File

@ -246,7 +246,8 @@ void IMGMap::draw(QPainter *painter, const QRectF &rect, Flags flags)
else { else {
tiles.append(RasterTile(_projection, _transform, _data.at(n), tiles.append(RasterTile(_projection, _transform, _data.at(n),
_zoom, QRect(ttl, QSize(TILE_SIZE, TILE_SIZE)), _tileRatio, _zoom, QRect(ttl, QSize(TILE_SIZE, TILE_SIZE)), _tileRatio,
key, !n && flags & Map::HillShading)); key, !n && flags & Map::HillShading, flags & Map::Rasters,
flags & Map::Vectors));
} }
} }
} }

View File

@ -21,7 +21,9 @@ public:
NoFlags = 0, NoFlags = 0,
Block = 1, Block = 1,
OpenGL = 2, OpenGL = 2,
HillShading = 4 HillShading = 4,
Rasters = 8,
Vectors = 16
}; };
Q_DECLARE_FLAGS(Flags, Flag) Q_DECLARE_FLAGS(Flags, Flag)