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

Compare commits

...

22 Commits

Author SHA1 Message Date
1480f8ad02 Cosmetics 2023-02-10 00:17:07 +01:00
b73ad9772f Fixed broken waypoint settings 2023-02-10 00:16:16 +01:00
e6bc548524 Merge remote-tracking branch 'weblate/master' 2023-02-09 00:37:04 +01:00
0d71e34665 Translated using Weblate (Danish)
Currently translated at 100.0% (466 of 466 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/da/
2023-02-09 00:36:28 +01:00
f575e79a70 Merge remote-tracking branch 'weblate/master' 2023-02-09 00:35:58 +01:00
903b73d9a4 Set OpenStreetMap as the default map 2023-02-09 00:35:22 +01:00
42f2f3377b Merge branch 'origin/master' into Weblate. 2023-02-07 23:13:13 +01:00
3b798e627b Be much more greedy when promoting the supported file types
File association on Android is broken by design resulting in two options:
1) associate almost everything
2) associate only some extensions which does not work most of the time

Lets choose #1
2023-02-07 23:09:10 +01:00
be5291a6c6 Merge branch 'origin/master' into Weblate. 2023-02-07 00:32:51 +01:00
7bb2c3a09d Added Android "desktop" integration 2023-02-07 00:32:36 +01:00
5467b55ff2 Translated using Weblate (Finnish)
Currently translated at 97.4% (454 of 466 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/fi/
2023-02-06 00:41:05 +01:00
820350d60b Fixed Android build 2023-02-05 00:06:02 +01:00
3801ff7bcb Settings refactoring 2023-02-04 23:59:47 +01:00
3b6e6c03a7 Fix the module name 2023-02-01 22:57:41 +01:00
a1a6fade92 Update the CI configurations to fetch the Qt serialport module 2023-02-01 22:54:59 +01:00
c001235e91 Code cleanup 2023-02-01 22:49:03 +01:00
c01b9da10c Version++
As we require the serialport Qt plugin now, increase the major number.
2023-02-01 22:41:57 +01:00
e4d42453a0 Require the serialport Qt module
The serialport module is a dependency of the nmea positioning plugin. Without
being explicitly specified, the Qt deploy tools skip the nmea positioning plugin
when creating the application package.
2023-02-01 22:36:41 +01:00
d6d316676c Properly use the default positioning plugin as the default option 2023-02-01 22:26:36 +01:00
973abedf3e A better current path macro 2023-02-01 09:41:18 +01:00
505f01a990 Code cleanup 2023-01-31 19:21:14 +01:00
78b091fbbc Fixed license info 2023-01-31 19:20:30 +01:00
30 changed files with 1257 additions and 1174 deletions

View File

@ -1,4 +1,4 @@
version: 11.12.{build}
version: 12.0.{build}
configuration:
- Release

View File

@ -37,7 +37,7 @@ jobs:
version: '6.4.0'
target: 'android'
arch: 'android_armv7'
modules: qtpositioning qt5compat
modules: qtpositioning qt5compat qtserialport
- name: Install Android OpenSSL
run: git clone https://github.com/KDAB/android_openssl.git
- name: Create localization

View File

@ -15,7 +15,7 @@ jobs:
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install qtbase5-dev qtbase5-private-dev qtbase5-dev-tools qt5-qmake qttools5-dev-tools libqt5opengl5-dev qtpositioning5-dev libqt5svg5-dev
sudo apt-get install qtbase5-dev qtbase5-private-dev qtbase5-dev-tools qt5-qmake qttools5-dev-tools libqt5opengl5-dev qtpositioning5-dev libqt5svg5-dev libqt5serialport5-dev
- name: Create localization
run: lrelease gpxsee.pro
- name: Configure build

View File

@ -64,7 +64,7 @@ GPXSee is licensed under GPL-3.0 (only). However, some 3rd party parts are using
different, GPL compatible, licenses:
* [Oxygen icons](icons/GUI) - LGPLv3
* [Mapbox Maki icons](icons/map/IMG/POI) - CC0
* [Mapbox Maki icons](icons/map/POI) - CC0
* [Map Icons Collection](icons/symbols) - CC BY SA 3.0
* [RTree implementation](src/common/rtree.h) - Public domain
* [Albers](src/map/proj/albersequal.cpp), [Geocentric](src/map/geocentric.cpp),

View File

@ -3,7 +3,7 @@ unix:!macx:!android {
} else {
TARGET = GPXSee
}
VERSION = 11.12
VERSION = 12.0
QT += core \
gui \
@ -14,7 +14,8 @@ QT += core \
widgets \
printsupport \
positioning \
svg
svg \
serialport
greaterThan(QT_MAJOR_VERSION, 5) {
QT += openglwidgets \
core5compat
@ -263,6 +264,7 @@ SOURCES += src/main.cpp \
src/GUI/motioninfoitem.cpp \
src/GUI/navigationwidget.cpp \
src/GUI/pluginparameters.cpp \
src/GUI/settings.cpp \
src/common/coordinates.cpp \
src/common/rectc.cpp \
src/common/range.cpp \

View File

@ -1,4 +1,4 @@
The IMG style icons are Mapbox Maki icons (https://labs.mapbox.com/maki-icons/)
The POI icons are Mapbox Maki icons (https://labs.mapbox.com/maki-icons/)
licensed under CC0.
-----

File diff suppressed because it is too large Load Diff

View File

@ -1246,7 +1246,7 @@
<message>
<location filename="../src/map/maplist.cpp" line="158"/>
<source>Electronic Navigational Charts</source>
<translation type="unfinished"></translation>
<translation>ENC-merikartat</translation>
</message>
<message>
<location filename="../src/map/maplist.cpp" line="165"/>

View File

@ -4,11 +4,24 @@
<!-- %%INSERT_FEATURES -->
<supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:smallScreens="true"/>
<application android:name="org.qtproject.qt.android.bindings.QtApplication" android:extractNativeLibs="true" android:hardwareAccelerated="true" android:label="-- %%INSERT_APP_NAME%% --" android:requestLegacyExternalStorage="true" android:allowNativeHeapPointerTagging="false" android:icon="@drawable/icon">
<activity android:name="org.qtproject.qt.android.bindings.QtActivity" android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation|mcc|mnc|density" android:label="-- %%INSERT_APP_NAME%% --" android:launchMode="singleTop" android:screenOrientation="unspecified" android:exported="true">
<activity android:name="org.gpxsee.gpxsee.Activity" android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation|mcc|mnc|density" android:label="-- %%INSERT_APP_NAME%% --" android:launchMode="singleTop" android:screenOrientation="unspecified" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:scheme="content" android:mimeType="application/*"/>
<data android:scheme="content" android:mimeType="text/plain"/>
<data android:scheme="content" android:mimeType="text/xml"/>
<data android:scheme="content" android:mimeType="text/csv"/>
<data android:scheme="content" android:mimeType="image/jpeg"/>
<data android:scheme="content" android:mimeType="image/tiff"/>
</intent-filter>
<meta-data android:name="android.app.lib_name" android:value="-- %%INSERT_APP_LIB_NAME%% --"/>
<meta-data android:name="android.app.arguments" android:value="-- %%INSERT_APP_ARGUMENTS%% --"/>
<meta-data android:name="android.app.extract_android_style" android:value="minimal"/>

View File

@ -0,0 +1,26 @@
package org.gpxsee.gpxsee;
import android.content.Intent;
public class Activity extends org.qtproject.qt.android.bindings.QtActivity
{
@Override
public void onNewIntent(Intent intent)
{
setIntent(intent);
}
public String intentPath()
{
String path = "";
Intent intent = getIntent();
if (intent != null) {
if (intent.getAction() == Intent.ACTION_VIEW)
path = intent.getDataString();
setIntent(null);
}
return path;
}
}

View File

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

View File

@ -6,6 +6,10 @@
#include <QNetworkAccessManager>
#include <QLibraryInfo>
#include <QSurfaceFormat>
#ifdef Q_OS_ANDROID
#include <QCoreApplication>
#include <QJniObject>
#endif // Q_OS_ANDROID
#include "common/programpaths.h"
#include "common/config.h"
#include "common/downloader.h"
@ -102,6 +106,21 @@ void App::appStateChanged(Qt::ApplicationState state)
{
if (state == Qt::ApplicationSuspended)
_gui->writeSettings();
else if (state == Qt::ApplicationActive) {
QJniObject activity = QNativeInterface::QAndroidApplication::context();
QString path(activity.callObjectMethod<jstring>("intentPath").toString());
if (!path.isEmpty()) {
if (!_gui->openFile(path, true)) {
MapAction *a;
if (!_gui->loadMap(path, a, true))
_gui->openFile(path, false);
else {
if (a)
a->trigger();
}
}
}
}
}
#endif // Q_OS_ANDROID

View File

@ -6,7 +6,7 @@
CadenceGraph::CadenceGraph(QWidget *parent) : GraphTab(parent)
{
_showTracks = true;
_showTracks = false;
GraphView::setYUnits(tr("rpm"));
setYLabel(tr("Cadence"));

View File

@ -33,8 +33,8 @@ ElevationGraph::ElevationGraph(QWidget *parent) : GraphTab(parent)
_routeMin = NAN;
_routeMax = NAN;
_showRoutes = true;
_showTracks = true;
_showRoutes = false;
_showTracks = false;
setYUnits(Metric);
setYLabel(tr("Elevation"));

View File

@ -6,7 +6,7 @@
GearRatioGraph::GearRatioGraph(QWidget *parent) : GraphTab(parent)
{
_showTracks = true;
_showTracks = false;
GraphView::setYUnits("");
setYLabel(tr("Gear ratio"));

File diff suppressed because it is too large Load Diff

View File

@ -179,6 +179,9 @@ private:
void loadInitialMaps(const QString &selected);
void loadInitialPOIs(const QStringList &disabled);
void loadOptions();
void updateOptions(const Options &options);
#ifndef Q_OS_ANDROID
void keyPressEvent(QKeyEvent *event);
#endif // Q_OS_ANDROID
@ -224,7 +227,7 @@ private:
QAction *_showPositionAction;
QAction *_followPositionAction;
QAction *_showPositionCoordinatesAction;
QAction *_showMotionInfo;
QAction *_showMotionInfoAction;
QAction *_loadMapAction;
QAction *_loadMapDirAction;
QAction *_clearMapCacheAction;

View File

@ -6,7 +6,7 @@
HeartRateGraph::HeartRateGraph(QWidget *parent) : GraphTab(parent)
{
_showTracks = true;
_showTracks = false;
GraphView::setYUnits(tr("bpm"));
setYLabel(tr("Heart rate"));

View File

@ -35,8 +35,7 @@
#define COORDINATES_OFFSET SCALE_OFFSET
MapView::MapView(Map *map, POI *poi, QGeoPositionInfoSource *source,
QWidget *parent) : QGraphicsView(parent)
MapView::MapView(Map *map, POI *poi, QWidget *parent) : QGraphicsView(parent)
{
Q_ASSERT(map != 0);
Q_ASSERT(poi != 0);
@ -72,10 +71,7 @@ MapView::MapView(Map *map, POI *poi, QGeoPositionInfoSource *source,
_poi = poi;
connect(_poi, &POI::pointsChanged, this, &MapView::updatePOI);
_positionSource = source;
if (_positionSource)
connect(_positionSource, &QGeoPositionInfoSource::positionUpdated, this,
&MapView::updatePosition);
_positionSource = 0;
_crosshair = new CrosshairItem();
_crosshair->setZValue(2.0);
_crosshair->setVisible(false);
@ -95,19 +91,19 @@ MapView::MapView(Map *map, POI *poi, QGeoPositionInfoSource *source,
_backgroundColor = Qt::white;
_markerColor = Qt::red;
_showMap = true;
_showTracks = true;
_showRoutes = true;
_showAreas = true;
_showWaypoints = true;
_showWaypointLabels = true;
_showMap = false;
_showTracks = false;
_showRoutes = false;
_showAreas = false;
_showWaypoints = false;
_showWaypointLabels = false;
_showWaypointIcons = false;
_showPOI = true;
_showPOILabels = true;
_showPOI = false;
_showPOILabels = false;
_showPOIIcons = false;
_overlapPOIs = true;
_showRouteWaypoints = true;
_showMarkers = true;
_overlapPOIs = false;
_showRouteWaypoints = false;
_showMarkers = false;
_markerInfoType = MarkerInfoItem::None;
_showPathTicks = false;
_trackWidth = 3;
@ -189,7 +185,7 @@ PathItem *MapView::addRoute(const Route &route)
ri->setVisible(_showRoutes);
ri->showWaypoints(_showRouteWaypoints);
ri->showWaypointLabels(_showWaypointLabels);
ri->showWaypointIcons(_showWaypointLabels);
ri->showWaypointIcons(_showWaypointIcons);
ri->setDigitalZoom(_digitalZoom);
ri->setMarkerColor(_markerColor);
ri->showMarker(_showMarkers);
@ -1375,11 +1371,8 @@ void MapView::showPosition(bool show)
{
_showPosition = show;
if (!_positionSource) {
_crosshair->setVisible(false);
_positionCoordinates->setVisible(false);
_motionInfo->setVisible(false);
} else if (_showPosition) {
if (_positionSource) {
if (_showPosition) {
_crosshair->setVisible(true);
if (_showPositionCoordinates)
_positionCoordinates->setVisible(true);
@ -1392,6 +1385,11 @@ void MapView::showPosition(bool show)
_positionCoordinates->setVisible(false);
_motionInfo->setVisible(false);
}
} else {
_crosshair->setVisible(false);
_positionCoordinates->setVisible(false);
_motionInfo->setVisible(false);
}
}
void MapView::followPosition(bool follow)

View File

@ -53,8 +53,7 @@ public:
};
Q_DECLARE_FLAGS(PlotFlags, Flag)
MapView(Map *map, POI *poi, QGeoPositionInfoSource *source,
QWidget *parent = 0);
MapView(Map *map, POI *poi, QWidget *parent = 0);
QList<PathItem *> loadData(const Data &data);
void loadMaps(const QList<MapAction*> &maps);

View File

@ -2,6 +2,7 @@
#define MARKERINFOITEM_H
#include <QGraphicsItem>
#include <QFont>
#include "format.h"
class Coordinates;

View File

@ -6,7 +6,7 @@
PowerGraph::PowerGraph(QWidget *parent) : GraphTab(parent)
{
_showTracks = true;
_showTracks = false;
GraphView::setYUnits(tr("W"));
setYLabel(tr("Power"));

267
src/GUI/settings.cpp Normal file
View File

@ -0,0 +1,267 @@
#include <QLocale>
#include <QDir>
#include <QPageLayout>
#include <QPageSize>
#include <QGeoPositionInfoSource>
#include "common/config.h"
#include "common/util.h"
#include "data/graph.h"
#include "format.h"
#include "units.h"
#include "timetype.h"
#include "markerinfoitem.h"
#include "timezoneinfo.h"
#include "settings.h"
#define SETTING(varName, name, defVal) \
const Settings::Setting Settings::varName = Settings::Setting(name, defVal)
#define IMPERIAL_UNITS() \
(QLocale::system().measurementSystem() == QLocale::ImperialSystem)
#define CWD(filename) \
QDir::current().filePath(filename)
#define UNITS() \
(IMPERIAL_UNITS() ? Imperial : Metric)
#define TIMEZONE() \
QVariant::fromValue(TimeZoneInfo())
#define POI_RADIUS() \
(int)(IMPERIAL_UNITS() ? MIINM : KMINM)
#define PAPER_SIZE() \
(IMPERIAL_UNITS() \
? QPageSize::PageSizeId::Letter \
: QPageSize::PageSizeId::A4)
#ifdef Q_OS_ANDROID
#define PIXMAP_CACHE 256
#else // Q_OS_ANDROID
#define PIXMAP_CACHE 512
#endif // Q_OS_ANDROID
static QString defaultPlugin()
{
QString source;
QGeoPositionInfoSource *ps = QGeoPositionInfoSource::createDefaultSource(0);
if (ps) {
source = ps->sourceName();
delete ps;
}
return source;
}
QMap<QString, QVariantMap> Settings::SettingMap::read(QSettings &settings) const
{
QMap<QString, QVariantMap> map;
int size = settings.beginReadArray(_prefix);
for (int i = 0; i < size; i++) {
settings.setArrayIndex(i);
map.insert(settings.value(_key).toString(),
settings.value(_value).toMap());
}
settings.endArray();
return map;
}
void Settings::SettingMap::write(QSettings &settings,
const QMap<QString, QVariantMap> &map) const
{
int index = 0;
if (map.isEmpty())
return;
settings.beginWriteArray(_prefix);
for (QMap<QString, QVariantMap>::const_iterator it = map.constBegin();
it != map.constEnd(); ++it) {
if (!it.value().isEmpty()) {
settings.setArrayIndex(index++);
settings.setValue(_key, it.key());
settings.setValue(_value, it.value());
}
}
settings.endArray();
}
QStringList Settings::SettingList::read(QSettings &settings) const
{
QStringList list;
int size = settings.beginReadArray(_prefix);
for (int i = 0; i < size; i++) {
settings.setArrayIndex(i);
list.append(settings.value(_value).toString());
}
settings.endArray();
return list;
}
void Settings::SettingList::write(QSettings &settings,
const QStringList &list) const
{
if (list.isEmpty())
return;
settings.beginWriteArray(_prefix);
for (int i = 0; i < list.size(); i++) {
settings.setArrayIndex(i);
settings.setValue(_value, list.at(i));
}
settings.endArray();
}
const Settings::Setting &Settings::positionPlugin()
{
static Setting s("positionPlugin", defaultPlugin());
return s;
}
/* Window */
#ifndef Q_OS_ANDROID
SETTING(windowGeometry, "geometry", QByteArray() );
SETTING(windowState, "state", QByteArray() );
#endif // Q_OS_ANDROID
/* Settings */
SETTING(timeType, "timeType", Total );
SETTING(units, "units", UNITS() );
SETTING(coordinatesFormat, "coordinates", DecimalDegrees );
#ifndef Q_OS_ANDROID
SETTING(showToolbars, "toolbar", true );
#endif // Q_OS_ANDROID
/* Map */
SETTING(activeMap, "map", "Open Street Map" );
SETTING(showMap, "show", true );
SETTING(cursorCoordinates, "coordinates", false );
/* Graph */
SETTING(showGraphs, "show", true );
SETTING(graphType, "type", Distance );
SETTING(showGrid, "grid", true );
SETTING(sliderInfo, "sliderInfo", true );
#ifdef Q_OS_ANDROID
SETTING(showGraphTabs, "tabs", true );
#endif // Q_OS_ANDROID
/* POI */
SETTING(poiIcons, "icons", true );
SETTING(poiLabels, "labels", true );
SETTING(showPoi, "show", false );
SETTING(poiOverlap, "overlap", false );
/* Data */
SETTING(tracks, "tracks", true );
SETTING(routes, "routes", true );
SETTING(waypoints, "waypoints", true );
SETTING(areas, "areas", true );
SETTING(routeWaypoints, "routeWaypoints", true );
SETTING(waypointIcons, "waypointIcons", false );
SETTING(waypointLabels, "waypointLabels", true );
SETTING(pathTicks, "pathTicks", false );
SETTING(positionMarkers, "positionMarkers", true );
SETTING(markerInfo, "markerInfo", MarkerInfoItem::None );
SETTING(useStyles, "styles", true );
/* Position */
SETTING(showPosition, "show", false );
SETTING(followPosition, "follow", true );
SETTING(positionCoordinates, "coordinates", true );
SETTING(motionInfo, "motionInfo", true );
/* PDF export */
SETTING(pdfOrientation, "orientation", QPageLayout::Orientation::Portrait);
SETTING(pdfSize, "size", PAPER_SIZE() );
SETTING(pdfMarginLeft, "marginLeft", 5 );
SETTING(pdfMarginTop, "marginTop", 5 );
SETTING(pdfMarginRight, "marginRight", 5 );
SETTING(pdfMarginBottom, "marginBottom", 5 );
SETTING(pdfFileName, "fileName", CWD("export.pdf") );
SETTING(pdfResolution, "resolution", 600 );
/* PNG export */
SETTING(pngWidth, "width", 600 );
SETTING(pngHeight, "height", 800 );
SETTING(pngMarginLeft, "marginLeft", 5 );
SETTING(pngMarginTop, "marginTop", 5 );
SETTING(pngMarginRight, "marginRight", 5 );
SETTING(pngMarginBottom, "marginBottom", 5 );
SETTING(pngAntialiasing, "antialiasing", true );
SETTING(pngFileName, "fileName", CWD("export.png") );
/* Options */
SETTING(paletteColor, "paletteColor", QColor(Qt::blue) );
SETTING(paletteShift, "paletteShift", 0.62 );
SETTING(mapOpacity, "mapOpacity", 100 );
SETTING(backgroundColor, "backgroundColor", QColor(Qt::white) );
SETTING(crosshairColor, "crosshairColor", QColor(Qt::red) );
SETTING(infoColor, "infoColor", QColor(Qt::black) );
SETTING(infoBackground, "infoBackground", false );
SETTING(trackWidth, "trackWidth", 3 );
SETTING(routeWidth, "routeWidth", 3 );
SETTING(areaWidth, "areaWidth", 2 );
SETTING(trackStyle, "trackStyle", (int)Qt::SolidLine );
SETTING(routeStyle, "routeStyle", (int)Qt::DotLine );
SETTING(areaStyle, "areaStyle", (int)Qt::SolidLine );
SETTING(areaOpacity, "areaOpacity", 50 );
SETTING(waypointSize, "waypointSize", 8 );
SETTING(waypointColor, "waypointColor", QColor(Qt::black) );
SETTING(poiSize, "poiSize", 8 );
SETTING(poiColor, "poiColor", QColor(Qt::black) );
SETTING(graphWidth, "graphWidth", 1 );
SETTING(pathAntiAliasing, "pathAntiAliasing", true );
SETTING(graphAntiAliasing, "graphAntiAliasing", true );
SETTING(elevationFilter, "elevationFilter", 3 );
SETTING(speedFilter, "speedFilter", 5 );
SETTING(heartRateFilter, "heartrateFilter", 3 );
SETTING(cadenceFilter, "cadenceFilter", 3 );
SETTING(powerFilter, "powerFilter", 3 );
SETTING(outlierEliminate, "outlierEliminate", true );
SETTING(automaticPause, "automaticPause", true );
SETTING(pauseSpeed, "pauseSpeed", 0.5 );
SETTING(pauseInterval, "pauseInterval", 10 );
SETTING(useReportedSpeed, "useReportedSpeed", false );
SETTING(dataUseDEM, "dataUseDEM", false );
SETTING(secondaryElevation, "showSecondaryElevation", false );
SETTING(secondarySpeed, "showSecondarySpeed", false );
SETTING(timeZone, "timeZone", TIMEZONE() );
SETTING(useSegments, "useSegments", true );
SETTING(poiRadius, "poiRadius", POI_RADIUS() );
SETTING(demURL, "demURL", DEM_TILES_URL );
SETTING(demAuthentication, "demAuthentication", false );
SETTING(demUsername, "demUsername", "" );
SETTING(demPassword, "demPassword", "" );
SETTING(useOpenGL, "useOpenGL", false );
SETTING(enableHTTP2, "enableHTTP2", true );
SETTING(pixmapCache, "pixmapCache", PIXMAP_CACHE );
SETTING(connectionTimeout, "connectionTimeout", 30 );
SETTING(hiresPrint, "hiresPrint", false );
SETTING(printName, "printName", true );
SETTING(printDate, "printDate", true );
SETTING(printDistance, "printDistance", true );
SETTING(printTime, "printTime", true );
SETTING(printMovingTime, "printMovingTime", false );
SETTING(printItemCount, "printItemCount", true );
SETTING(separateGraphPage, "separateGraphPage", false );
SETTING(sliderColor, "sliderColor", QColor(Qt::red) );
SETTING(outputProjection, "outputProjection", 3857 );
SETTING(inputProjection, "inputProjection", 4326 );
SETTING(hidpiMap, "HiDPIMap", true );
SETTING(poiPath, "poiPath", "" );
SETTING(mapsPath, "mapsPath", "" );
SETTING(dataPath, "dataPath", "" );
const Settings::SettingMap Settings::positionPluginParameters
= Settings::SettingMap("pluginParameters", "plugin", "parameters");
const Settings::SettingList Settings::disabledPoiFiles
= Settings::SettingList("disabled", "file");

View File

@ -1,262 +1,212 @@
#ifndef SETTINGS_H
#define SETTINGS_H
#include <QtGlobal>
#include <QMap>
#include <QVariant>
#include <QSettings>
#define IMPERIAL_UNITS() \
(QLocale::system().measurementSystem() == QLocale::ImperialSystem)
#define POSITION_PLUGIN() \
(QGeoPositionInfoSource::availableSources().isEmpty() \
? "" : QGeoPositionInfoSource::availableSources().first())
#define SETTINGS_WINDOW "Window"
#define SETTINGS_SETTINGS "Settings"
#define SETTINGS_MAP "Map"
#define SETTINGS_GRAPH "Graph"
#define SETTINGS_POI "POI"
#define SETTINGS_DATA "Data"
#define SETTINGS_POSITION "Position"
#define SETTINGS_PDF_EXPORT "Export"
#define SETTINGS_PNG_EXPORT "PNGExport"
#define SETTINGS_OPTIONS "Options"
#define WINDOW_SETTINGS_GROUP "Window"
#define WINDOW_GEOMETRY_SETTING "geometry"
#define WINDOW_STATE_SETTING "state"
class Settings
{
public:
class Setting
{
public:
Setting(const QString &name, const QVariant &defVal)
: _name(name), _defVal(defVal) {}
#define SETTINGS_SETTINGS_GROUP "Settings"
#define TIME_TYPE_SETTING "timeType"
#define TIME_TYPE_DEFAULT Total
#define UNITS_SETTING "units"
#define UNITS_DEFAULT (IMPERIAL_UNITS() ? Imperial : Metric)
#define COORDINATES_SETTING "coordinates"
#define COORDINATES_DEFAULT DecimalDegrees
#define SHOW_TOOLBARS_SETTING "toolbar"
#define SHOW_TOOLBARS_DEFAULT true
void write(QSettings &settings, const QVariant &value) const
{
if (value != _defVal)
settings.setValue(_name, value);
}
QVariant read(const QSettings &settings) const
{
return settings.value(_name, _defVal);
}
#define GRAPH_SETTINGS_GROUP "Graph"
#define SHOW_GRAPHS_SETTING "show"
#define SHOW_GRAPHS_DEFAULT true
#define GRAPH_TYPE_SETTING "type"
#define GRAPH_TYPE_DEFAULT Distance
#define SHOW_GRAPH_GRIDS_SETTING "grid"
#define SHOW_GRAPH_GRIDS_DEFAULT true
#define SHOW_GRAPH_SLIDER_INFO_SETTING "sliderInfo"
#define SHOW_GRAPH_SLIDER_INFO_DEFAULT true
#define SHOW_GRAPH_TABS_SETTING "tabs"
#define SHOW_GRAPH_TABS_DEFAULT true
#define SHOW_TICKS_SETTING "pathTicks"
#define SHOW_TICKS_DEFAULT false
private:
QString _name;
QVariant _defVal;
};
#define MAP_SETTINGS_GROUP "Map"
#define CURRENT_MAP_SETTING "map"
#define SHOW_MAP_SETTING "show"
#define SHOW_MAP_DEFAULT true
#define SHOW_CURSOR_COORDINATES_SETTING "coordinates"
#define SHOW_CURSOR_COORDINATES_DEFAULT false
class SettingMap
{
public:
SettingMap(const QString &prefix, const QString &key, const QString &value)
: _prefix(prefix), _key(key), _value(value) {}
#define POI_SETTINGS_GROUP "POI"
#define OVERLAP_POI_SETTING "overlap"
#define OVERLAP_POI_DEFAULT false
void write(QSettings &settings, const QMap<QString, QVariantMap> &map) const;
QMap<QString, QVariantMap> read(QSettings &settings) const;
#define POSITION_SETTINGS_GROUP "Position"
#define SHOW_POSITION_SETTING "show"
#define SHOW_POSITION_DEFAULT false
#define FOLLOW_POSITION_SETTING "follow"
#define FOLLOW_POSITION_DEFAULT true
#define SHOW_POSITION_COORDINATES_SETTING "coordinates"
#define SHOW_POSITION_COORDINATES_DEFAULT true
#define SHOW_MOTION_INFO_SETTING "motionInfo"
#define SHOW_MOTION_INFO_DEFAULT true
private:
QString _prefix;
QString _key;
QString _value;
};
#define SHOW_POI_ICONS_SETTING "icons"
#define SHOW_POI_ICONS_DEFAULT true
#define SHOW_POI_LABELS_SETTING "labels"
#define SHOW_POI_LABELS_DEFAULT true
#define SHOW_POI_SETTING "show"
#define SHOW_POI_DEFAULT false
#define DISABLED_POI_FILE_SETTINGS_PREFIX "disabled"
#define DISABLED_POI_FILE_SETTING "file"
class SettingList
{
public:
SettingList(const QString &prefix, const QString &value)
: _prefix(prefix), _value(value) {}
#define DATA_SETTINGS_GROUP "Data"
#define SHOW_TRACKS_SETTING "tracks"
#define SHOW_TRACKS_DEFAULT true
#define SHOW_ROUTES_SETTING "routes"
#define SHOW_ROUTES_DEFAULT true
#define SHOW_WAYPOINTS_SETTING "waypoints"
#define SHOW_WAYPOINTS_DEFAULT true
#define SHOW_AREAS_SETTING "areas"
#define SHOW_AREAS_DEFAULT true
#define SHOW_ROUTE_WAYPOINTS_SETTING "routeWaypoints"
#define SHOW_ROUTE_WAYPOINTS_DEFAULT true
#define SHOW_WAYPOINT_ICONS_SETTING "waypointIcons"
#define SHOW_WAYPOINT_ICONS_DEFAULT false
#define SHOW_WAYPOINT_LABELS_SETTING "waypointLabels"
#define SHOW_WAYPOINT_LABELS_DEFAULT true
#define SHOW_MARKERS_SETTING "positionMarkers"
#define SHOW_MARKERS_DEFAULT true
#define SHOW_MARKER_INFO_SETTING "markerInfo"
#define SHOW_MARKER_INFO_DEFAULT MarkerInfoItem::None
#define USE_STYLES_SETTING "styles"
#define USE_STYLES_DEFAULT true
void write(QSettings &settings, const QStringList &list) const;
QStringList read(QSettings &settings) const;
#define PDF_EXPORT_SETTINGS_GROUP "Export"
#define PAPER_ORIENTATION_SETTING "orientation"
#define PAPER_ORIENTATION_DEFAULT QPageLayout::Orientation::Portrait
#define PAPER_SIZE_SETTING "size"
#define PAPER_SIZE_DEFAULT (IMPERIAL_UNITS() \
? QPageSize::PageSizeId::Letter \
: QPageSize::PageSizeId::A4)
#define PDF_MARGIN_LEFT_SETTING "marginLeft"
#define PDF_MARGIN_LEFT_DEFAULT 5 /* mm */
#define PDF_MARGIN_TOP_SETTING "marginTop"
#define PDF_MARGIN_TOP_DEFAULT 5 /* mm */
#define PDF_MARGIN_RIGHT_SETTING "marginRight"
#define PDF_MARGIN_RIGHT_DEFAULT 5 /* mm */
#define PDF_MARGIN_BOTTOM_SETTING "marginBottom"
#define PDF_MARGIN_BOTTOM_DEFAULT 5 /* mm */
#define PDF_FILENAME_SETTING "fileName"
#define PDF_FILENAME_DEFAULT QString("%1/export.pdf"). \
arg(QDir::currentPath())
#define RESOLUTION_SETTING "resolution"
#define RESOLUTION_DEFAULT 600
private:
QString _prefix;
QString _value;
};
#define PNG_EXPORT_SETTINGS_GROUP "PNGExport"
#define PNG_WIDTH_SETTING "width"
#define PNG_WIDTH_DEFAULT 600
#define PNG_HEIGHT_SETTING "height"
#define PNG_HEIGHT_DEFAULT 800
#define PNG_MARGIN_LEFT_SETTING "marginLeft"
#define PNG_MARGIN_LEFT_DEFAULT 5 /* px */
#define PNG_MARGIN_TOP_SETTING "marginTop"
#define PNG_MARGIN_TOP_DEFAULT 5 /* px */
#define PNG_MARGIN_RIGHT_SETTING "marginRight"
#define PNG_MARGIN_RIGHT_DEFAULT 5 /* px */
#define PNG_MARGIN_BOTTOM_SETTING "marginBottom"
#define PNG_MARGIN_BOTTOM_DEFAULT 5 /* px */
#define PNG_ANTIALIASING_SETTING "antialiasing"
#define PNG_ANTIALIASING_DEFAULT true
#define PNG_FILENAME_SETTING "fileName"
#define PNG_FILENAME_DEFAULT QString("%1/export.png"). \
arg(QDir::currentPath())
#define OPTIONS_SETTINGS_GROUP "Options"
#define PALETTE_COLOR_SETTING "paletteColor"
#define PALETTE_COLOR_DEFAULT QColor(Qt::blue)
#define PALETTE_SHIFT_SETTING "paletteShift"
#define PALETTE_SHIFT_DEFAULT 0.62
#define MAP_OPACITY_SETTING "mapOpacity"
#define MAP_OPACITY_DEFAULT 100
#define BACKGROUND_COLOR_SETTING "backgroundColor"
#define BACKGROUND_COLOR_DEFAULT QColor(Qt::white)
#define CROSSHAIR_COLOR_SETTING "crosshairColor"
#define CROSSHAIR_COLOR_DEFAULT QColor(Qt::red)
#define INFO_COLOR_SETTING "infoColor"
#define INFO_COLOR_DEFAULT QColor(Qt::black)
#define INFO_BACKGROUND_SETTING "infoBackground"
#define INFO_BACKGROUND_DEFAULT false
#define TRACK_WIDTH_SETTING "trackWidth"
#define TRACK_WIDTH_DEFAULT 3
#define ROUTE_WIDTH_SETTING "routeWidth"
#define ROUTE_WIDTH_DEFAULT 3
#define AREA_WIDTH_SETTING "areaWidth"
#define AREA_WIDTH_DEFAULT 2
#define TRACK_STYLE_SETTING "trackStyle"
#define TRACK_STYLE_DEFAULT Qt::SolidLine
#define ROUTE_STYLE_SETTING "routeStyle"
#define ROUTE_STYLE_DEFAULT Qt::DotLine
#define AREA_STYLE_SETTING "areaStyle"
#define AREA_STYLE_DEFAULT Qt::SolidLine
#define AREA_OPACITY_SETTING "areaOpacity"
#define AREA_OPACITY_DEFAULT 50
#define WAYPOINT_SIZE_SETTING "waypointSize"
#define WAYPOINT_SIZE_DEFAULT 8
#define WAYPOINT_COLOR_SETTING "waypointColor"
#define WAYPOINT_COLOR_DEFAULT QColor(Qt::black)
#define POI_SIZE_SETTING "poiSize"
#define POI_SIZE_DEFAULT 8
#define POI_COLOR_SETTING "poiColor"
#define POI_COLOR_DEFAULT QColor(Qt::black)
#define GRAPH_WIDTH_SETTING "graphWidth"
#define GRAPH_WIDTH_DEFAULT 1
#define PATH_AA_SETTING "pathAntiAliasing"
#define PATH_AA_DEFAULT true
#define GRAPH_AA_SETTING "graphAntiAliasing"
#define GRAPH_AA_DEFAULT true
#define ELEVATION_FILTER_SETTING "elevationFilter"
#define ELEVATION_FILTER_DEFAULT 3
#define SPEED_FILTER_SETTING "speedFilter"
#define SPEED_FILTER_DEFAULT 5
#define HEARTRATE_FILTER_SETTING "heartrateFilter"
#define HEARTRATE_FILTER_DEFAULT 3
#define CADENCE_FILTER_SETTING "cadenceFilter"
#define CADENCE_FILTER_DEFAULT 3
#define POWER_FILTER_SETTING "powerFilter"
#define POWER_FILTER_DEFAULT 3
#define OUTLIER_ELIMINATE_SETTING "outlierEliminate"
#define OUTLIER_ELIMINATE_DEFAULT true
#define AUTOMATIC_PAUSE_SETTING "automaticPause"
#define AUTOMATIC_PAUSE_DEFAULT true
#define PAUSE_SPEED_SETTING "pauseSpeed"
#define PAUSE_SPEED_DEFAULT 0.5 /* m/s */
#define PAUSE_INTERVAL_SETTING "pauseInterval"
#define PAUSE_INTERVAL_DEFAULT 10 /* s */
#define USE_REPORTED_SPEED_SETTING "useReportedSpeed"
#define USE_REPORTED_SPEED_DEFAULT false
#define DATA_USE_DEM_SETTING "dataUseDEM"
#define DATA_USE_DEM_DEFAULT false
#define SHOW_SECONDARY_ELEVATION_SETTING "showSecondaryElevation"
#define SHOW_SECONDARY_ELEVATION_DEFAULT false
#define SHOW_SECONDARY_SPEED_SETTING "showSecondarySpeed"
#define SHOW_SECONDARY_SPEED_DEFAULT false
#define TIME_ZONE_SETTING "timeZone"
#define USE_SEGMENTS_SETTING "useSegments"
#define USE_SEGMENTS_DEFAULT true
#define POI_RADIUS_SETTING "poiRadius"
#define POI_RADIUS_DEFAULT (int)(IMPERIAL_UNITS() ? MIINM : KMINM)
#define DEM_URL_SETTING "demURL"
#define DEM_URL_DEFAULT "http://dem.gpxsee.org/$lat/$lat$lon.hgt.zip"
#define DEM_AUTH_SETTING "demAuthentication"
#define DEM_AUTH_DEFAULT false
#define DEM_USERNAME_SETTING "demUsername"
#define DEM_USERNAME_DEFAULT ""
#define DEM_PASSWORD_SETTING "demPassword"
#define DEM_PASSWORD_DEFAULT ""
#define POSITION_PLUGIN_SETTING "positionPlugin"
#define POSITION_PLUGIN_DEFAULT POSITION_PLUGIN()
#define POSITION_PLUGIN_PARAMS_PREFIX "pluginParameters"
#define POSITION_PLUGIN_PARAMS_PLUGIN "plugin"
#define POSITION_PLUGIN_PARAMS_PARAM "parameters"
#define USE_OPENGL_SETTING "useOpenGL"
#define USE_OPENGL_DEFAULT false
#define ENABLE_HTTP2_SETTING "enableHTTP2"
#define ENABLE_HTTP2_DEFAULT true
#define PIXMAP_CACHE_SETTING "pixmapCache"
#ifdef Q_OS_ANDROID
#define PIXMAP_CACHE_DEFAULT 256 /* MB */
#else // Q_OS_ANDROID
#define PIXMAP_CACHE_DEFAULT 512 /* MB */
/* Window */
#ifndef Q_OS_ANDROID
static const Setting windowGeometry;
static const Setting windowState;
#endif // Q_OS_ANDROID
#define CONNECTION_TIMEOUT_SETTING "connectionTimeout"
#define CONNECTION_TIMEOUT_DEFAULT 30 /* s */
#define HIRES_PRINT_SETTING "hiresPrint"
#define HIRES_PRINT_DEFAULT false
#define PRINT_NAME_SETTING "printName"
#define PRINT_NAME_DEFAULT true
#define PRINT_DATE_SETTING "printDate"
#define PRINT_DATE_DEFAULT true
#define PRINT_DISTANCE_SETTING "printDistance"
#define PRINT_DISTANCE_DEFAULT true
#define PRINT_TIME_SETTING "printTime"
#define PRINT_TIME_DEFAULT true
#define PRINT_MOVING_TIME_SETTING "printMovingTime"
#define PRINT_MOVING_TIME_DEFAULT false
#define PRINT_ITEM_COUNT_SETTING "printItemCount"
#define PRINT_ITEM_COUNT_DEFAULT true
#define SEPARATE_GRAPH_PAGE_SETTING "separateGraphPage"
#define SEPARATE_GRAPH_PAGE_DEFAULT false
#define SLIDER_COLOR_SETTING "sliderColor"
#define SLIDER_COLOR_DEFAULT QColor(Qt::red)
#define OUTPUT_PROJECTION_SETTING "outputProjection"
#define OUTPUT_PROJECTION_DEFAULT 3857
#define INPUT_PROJECTION_SETTING "inputProjection"
#define INPUT_PROJECTION_DEFAULT 4326
#define HIDPI_MAP_SETTING "HiDPIMap"
#define HIDPI_MAP_DEFAULT true
#define DATA_PATH_SETTING "dataPath"
#define DATA_PATH_DEFAULT QString()
#define MAPS_PATH_SETTING "mapsPath"
#define MAPS_PATH_DEFAULT QString()
#define POI_PATH_SETTING "poiPath"
#define POI_PATH_DEFAULT QString()
/* Settings */
static const Setting timeType;
static const Setting units;
static const Setting coordinatesFormat;
#ifndef Q_OS_ANDROID
static const Setting showToolbars;
#endif // Q_OS_ANDROID
/* Map */
static const Setting activeMap;
static const Setting showMap;
static const Setting cursorCoordinates;
/* Graph */
static const Setting showGraphs;
static const Setting graphType;
static const Setting showGrid;
static const Setting sliderInfo;
#ifdef Q_OS_ANDROID
static const Setting showGraphTabs;
#endif // Q_OS_ANDROID
/* POI */
static const Setting poiIcons;
static const Setting poiLabels;
static const Setting showPoi;
static const Setting poiOverlap;
static const SettingList disabledPoiFiles;
/* Data */
static const Setting tracks;
static const Setting routes;
static const Setting waypoints;
static const Setting areas;
static const Setting routeWaypoints;
static const Setting waypointIcons;
static const Setting waypointLabels;
static const Setting pathTicks;
static const Setting positionMarkers;
static const Setting markerInfo;
static const Setting useStyles;
/* Position */
static const Setting showPosition;
static const Setting followPosition;
static const Setting positionCoordinates;
static const Setting motionInfo;
/* PDF export */
static const Setting pdfOrientation;
static const Setting pdfSize;
static const Setting pdfMarginLeft;
static const Setting pdfMarginTop;
static const Setting pdfMarginRight;
static const Setting pdfMarginBottom;
static const Setting pdfFileName;
static const Setting pdfResolution;
/* PNG export */
static const Setting pngWidth;
static const Setting pngHeight;
static const Setting pngMarginLeft;
static const Setting pngMarginTop;
static const Setting pngMarginRight;
static const Setting pngMarginBottom;
static const Setting pngAntialiasing;
static const Setting pngFileName;
/* Options */
static const Setting paletteColor;
static const Setting paletteShift;
static const Setting mapOpacity;
static const Setting backgroundColor;
static const Setting crosshairColor;
static const Setting infoColor;
static const Setting infoBackground;
static const Setting trackWidth;
static const Setting routeWidth;
static const Setting areaWidth;
static const Setting trackStyle;
static const Setting routeStyle;
static const Setting areaStyle;
static const Setting areaOpacity;
static const Setting waypointSize;
static const Setting waypointColor;
static const Setting poiSize;
static const Setting poiColor;
static const Setting graphWidth;
static const Setting pathAntiAliasing;
static const Setting graphAntiAliasing;
static const Setting elevationFilter;
static const Setting speedFilter;
static const Setting heartRateFilter;
static const Setting cadenceFilter;
static const Setting powerFilter;
static const Setting outlierEliminate;
static const Setting automaticPause;
static const Setting pauseSpeed;
static const Setting pauseInterval;
static const Setting useReportedSpeed;
static const Setting dataUseDEM;
static const Setting secondaryElevation;
static const Setting secondarySpeed;
static const Setting timeZone;
static const Setting useSegments;
static const Setting poiRadius;
static const Setting demURL;
static const Setting demAuthentication;
static const Setting demUsername;
static const Setting demPassword;
static const Setting useOpenGL;
static const Setting enableHTTP2;
static const Setting pixmapCache;
static const Setting connectionTimeout;
static const Setting hiresPrint;
static const Setting printName;
static const Setting printDate;
static const Setting printDistance;
static const Setting printTime;
static const Setting printMovingTime;
static const Setting printItemCount;
static const Setting separateGraphPage;
static const Setting sliderColor;
static const Setting outputProjection;
static const Setting inputProjection;
static const Setting hidpiMap;
static const Setting poiPath;
static const Setting mapsPath;
static const Setting dataPath;
static const Setting &positionPlugin();
static const SettingMap positionPluginParameters;
};
#endif // SETTINGS_H

View File

@ -10,7 +10,7 @@ SpeedGraph::SpeedGraph(QWidget *parent) : GraphTab(parent)
{
_units = Metric;
_timeType = Total;
_showTracks = true;
_showTracks = false;
setYUnits();
setYLabel(tr("Speed"));

View File

@ -6,7 +6,7 @@
TemperatureGraph::TemperatureGraph(QWidget *parent) : GraphTab(parent)
{
_showTracks = true;
_showTracks = false;
setYUnits(Metric);
setYLabel(tr("Temperature"));

View File

@ -38,7 +38,10 @@ public:
else
return (other._type == Custom && _customZone == other._customZone);
}
bool operator!=(const TimeZoneInfo &other) {return !(*this == other);}
bool operator!=(const TimeZoneInfo &other) const
{
return !(*this == other);
}
private:
friend QDataStream& operator<<(QDataStream &out, const TimeZoneInfo &info);

View File

@ -74,7 +74,7 @@ WaypointItem::WaypointItem(const Waypoint &waypoint, Map *map,
QGraphicsItem *parent) : GraphicsItem(parent)
{
_waypoint = waypoint;
_showLabel = true;
_showLabel = false;
_showIcon = false;
_size = 8;
_color = Qt::black;

View File

@ -3,5 +3,6 @@
#define APP_NAME "GPXSee"
#define APP_HOMEPAGE "http://www.gpxsee.org"
#define DEM_TILES_URL "http://dem.gpxsee.org/$lat/$lat$lon.hgt.zip"
#endif /* CONFIG_H */

View File

@ -3,6 +3,7 @@
#include <QList>
#include <QVector>
#include <QColor>
#include <QDebug>
#include <cmath>