Browse Source

Merge pull request #2854 from dogmaphobic/flickableInOfflineMaps

Flickable in Offline Maps
QGC4.4
Gus Grubba 9 years ago
parent
commit
b4f0cd6618
  1. 6
      src/QtLocationPlugin/QGCMapTileSet.cpp
  2. 4
      src/QtLocationPlugin/QGCMapUrlEngine.cpp
  3. 6
      src/QtLocationPlugin/QGCTileCacheWorker.cpp
  4. 12
      src/QtLocationPlugin/QGeoCodeReplyQGC.cpp
  5. 9
      src/QtLocationPlugin/QGeoCodingManagerEngineQGC.cpp
  6. 6
      src/QtLocationPlugin/QGeoMapReplyQGC.cpp
  7. 5
      src/QtLocationPlugin/QGeoServiceProviderPluginQGC.cpp
  8. 8
      src/QtLocationPlugin/QGeoTileFetcherQGC.cpp
  9. 8
      src/QtLocationPlugin/QGeoTiledMappingManagerEngineQGC.cpp
  10. 513
      src/QtLocationPlugin/QMLControl/OfflineMap.qml
  11. 4
      src/QtLocationPlugin/QMLControl/QGCMapEngineManager.cc

6
src/QtLocationPlugin/QGCMapTileSet.cpp

@ -29,13 +29,13 @@ This file is part of the QGROUNDCONTROL project
* *
*/ */
#include <math.h>
#include <QSettings>
#include "QGCMapEngine.h" #include "QGCMapEngine.h"
#include "QGCMapTileSet.h" #include "QGCMapTileSet.h"
#include "QGCMapEngineManager.h" #include "QGCMapEngineManager.h"
#include <QSettings>
#include <math.h>
QGC_LOGGING_CATEGORY(QGCCachedTileSetLog, "QGCCachedTileSetLog") QGC_LOGGING_CATEGORY(QGCCachedTileSetLog, "QGCCachedTileSetLog")
#define TILE_BATCH_SIZE 256 #define TILE_BATCH_SIZE 256

4
src/QtLocationPlugin/QGCMapUrlEngine.cpp

@ -27,6 +27,8 @@ This file is part of the QGROUNDCONTROL project
* Original work: The OpenPilot Team, http://www.openpilot.org Copyright (C) 2012. * Original work: The OpenPilot Team, http://www.openpilot.org Copyright (C) 2012.
*/ */
#include "QGCMapEngine.h"
#include <QRegExp> #include <QRegExp>
#include <QNetworkReply> #include <QNetworkReply>
#include <QEventLoop> #include <QEventLoop>
@ -34,8 +36,6 @@ This file is part of the QGROUNDCONTROL project
#include <QString> #include <QString>
#include <QByteArray> #include <QByteArray>
#include "QGCMapEngine.h"
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
UrlFactory::UrlFactory() UrlFactory::UrlFactory()
: _timeout(5 * 1000) : _timeout(5 * 1000)

6
src/QtLocationPlugin/QGCTileCacheWorker.cpp

@ -29,6 +29,9 @@ This file is part of the QGROUNDCONTROL project
* *
*/ */
#include "QGCMapEngine.h"
#include "QGCMapTileSet.h"
#include <QVariant> #include <QVariant>
#include <QtSql/QSqlQuery> #include <QtSql/QSqlQuery>
#include <QSqlError> #include <QSqlError>
@ -39,9 +42,6 @@ This file is part of the QGROUNDCONTROL project
#include "time.h" #include "time.h"
#include "QGCMapEngine.h"
#include "QGCMapTileSet.h"
const char* kDefaultSet = "Default Tile Set"; const char* kDefaultSet = "Default Tile Set";
const QString kSession = QLatin1String("QGeoTileWorkerSession"); const QString kSession = QLatin1String("QGeoTileWorkerSession");

12
src/QtLocationPlugin/QGeoCodeReplyQGC.cpp

@ -44,6 +44,8 @@
** **
****************************************************************************/ ****************************************************************************/
#include "QGeoCodeReplyQGC.h"
#include <QtCore/QJsonDocument> #include <QtCore/QJsonDocument>
#include <QtCore/QJsonObject> #include <QtCore/QJsonObject>
#include <QtCore/QJsonArray> #include <QtCore/QJsonArray>
@ -54,8 +56,6 @@
#include <QSet> #include <QSet>
#include <QDebug> #include <QDebug>
#include "QGeoCodeReplyQGC.h"
enum QGeoCodeTypeGoogle { enum QGeoCodeTypeGoogle {
GeoCodeTypeUnknown, GeoCodeTypeUnknown,
StreetAddress, // indicates a precise street address. StreetAddress, // indicates a precise street address.
@ -193,7 +193,7 @@ void QGeoCodeReplyQGC::networkReplyFinished()
QJsonDocument document = QJsonDocument::fromJson(m_reply->readAll()); QJsonDocument document = QJsonDocument::fromJson(m_reply->readAll());
QJsonObject object = document.object(); QJsonObject object = document.object();
if (object.value(QStringLiteral("status")) != QStringLiteral("OK")) { if (object.value(QStringLiteral("status")) != QStringLiteral("OK")) {
QString error = object.value(QStringLiteral("status")).toString(); QString error = object.value(QStringLiteral("status")).toString();
qWarning() << m_reply->url() << "returned" << error; qWarning() << m_reply->url() << "returned" << error;
@ -210,13 +210,13 @@ void QGeoCodeReplyQGC::networkReplyFinished()
continue; continue;
QJsonObject geocode = results[i].toObject(); QJsonObject geocode = results[i].toObject();
QGeoAddress address; QGeoAddress address;
if (geocode.contains(QStringLiteral("formatted_address"))) { if (geocode.contains(QStringLiteral("formatted_address"))) {
address.setText(geocode.value(QStringLiteral("formatted_address")).toString()); address.setText(geocode.value(QStringLiteral("formatted_address")).toString());
} }
if (geocode.contains(QStringLiteral("address_components"))) { if (geocode.contains(QStringLiteral("address_components"))) {
QJsonArray ac = geocode.value(QStringLiteral("address_components")).toArray(); QJsonArray ac = geocode.value(QStringLiteral("address_components")).toArray();

9
src/QtLocationPlugin/QGeoCodingManagerEngineQGC.cpp

@ -44,6 +44,9 @@
** **
****************************************************************************/ ****************************************************************************/
#include "QGeoCodingManagerEngineQGC.h"
#include "QGeoCodeReplyQGC.h"
#include <QtCore/QVariantMap> #include <QtCore/QVariantMap>
#include <QtCore/QUrl> #include <QtCore/QUrl>
#include <QtCore/QUrlQuery> #include <QtCore/QUrlQuery>
@ -55,10 +58,6 @@
#include <QtPositioning/QGeoAddress> #include <QtPositioning/QGeoAddress>
#include <QtPositioning/QGeoShape> #include <QtPositioning/QGeoShape>
#include <QtPositioning/QGeoRectangle> #include <QtPositioning/QGeoRectangle>
#include <QDebug>
#include "QGeoCodingManagerEngineQGC.h"
#include "QGeoCodeReplyQGC.h"
static QString addressToQuery(const QGeoAddress &address) static QString addressToQuery(const QGeoAddress &address)
{ {
@ -120,7 +119,7 @@ QGeoCodeReply *QGeoCodingManagerEngineQGC::geocode(const QString &address, int l
url.setQuery(query); url.setQuery(query);
request.setUrl(url); request.setUrl(url);
//qDebug() << url; //qDebug() << url;
QNetworkReply *reply = m_networkManager->get(request); QNetworkReply *reply = m_networkManager->get(request);
reply->setParent(0); reply->setParent(0);

6
src/QtLocationPlugin/QGeoMapReplyQGC.cpp

@ -44,13 +44,13 @@
** **
****************************************************************************/ ****************************************************************************/
#include "QGCMapEngine.h"
#include "QGeoMapReplyQGC.h"
#include <QtLocation/private/qgeotilespec_p.h> #include <QtLocation/private/qgeotilespec_p.h>
#include <QtNetwork/QNetworkAccessManager> #include <QtNetwork/QNetworkAccessManager>
#include <QFile> #include <QFile>
#include "QGCMapEngine.h"
#include "QGeoMapReplyQGC.h"
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
QGeoTiledMapReplyQGC::QGeoTiledMapReplyQGC(QNetworkAccessManager *networkManager, const QNetworkRequest &request, const QGeoTileSpec &spec, QObject *parent) QGeoTiledMapReplyQGC::QGeoTiledMapReplyQGC(QNetworkAccessManager *networkManager, const QNetworkRequest &request, const QGeoTileSpec &spec, QObject *parent)
: QGeoTiledMapReply(spec, parent) : QGeoTiledMapReply(spec, parent)

5
src/QtLocationPlugin/QGeoServiceProviderPluginQGC.cpp

@ -44,13 +44,12 @@
** **
****************************************************************************/ ****************************************************************************/
#include <QtLocation/private/qgeotiledmappingmanagerengine_p.h>
#include "qdebug.h"
#include "QGeoServiceProviderPluginQGC.h" #include "QGeoServiceProviderPluginQGC.h"
#include "QGeoTiledMappingManagerEngineQGC.h" #include "QGeoTiledMappingManagerEngineQGC.h"
#include "QGeoCodingManagerEngineQGC.h" #include "QGeoCodingManagerEngineQGC.h"
#include <QtLocation/private/qgeotiledmappingmanagerengine_p.h>
Q_EXTERN_C Q_DECL_EXPORT const char *qt_plugin_query_metadata(); Q_EXTERN_C Q_DECL_EXPORT const char *qt_plugin_query_metadata();
Q_EXTERN_C Q_DECL_EXPORT QT_PREPEND_NAMESPACE(QObject) *qt_plugin_instance(); Q_EXTERN_C Q_DECL_EXPORT QT_PREPEND_NAMESPACE(QObject) *qt_plugin_instance();

8
src/QtLocationPlugin/QGeoTileFetcherQGC.cpp

@ -44,14 +44,14 @@
** **
****************************************************************************/ ****************************************************************************/
#include <QtCore/QLocale>
#include <QtNetwork/QNetworkRequest>
#include <QtLocation/private/qgeotilespec_p.h>
#include "QGCMapEngine.h" #include "QGCMapEngine.h"
#include "QGeoTileFetcherQGC.h" #include "QGeoTileFetcherQGC.h"
#include "QGeoMapReplyQGC.h" #include "QGeoMapReplyQGC.h"
#include <QtCore/QLocale>
#include <QtNetwork/QNetworkRequest>
#include <QtLocation/private/qgeotilespec_p.h>
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
QGeoTileFetcherQGC::QGeoTileFetcherQGC(QGeoTiledMappingManagerEngine *parent) QGeoTileFetcherQGC::QGeoTileFetcherQGC(QGeoTiledMappingManagerEngine *parent)
: QGeoTileFetcher(parent) : QGeoTileFetcher(parent)

8
src/QtLocationPlugin/QGeoTiledMappingManagerEngineQGC.cpp

@ -44,6 +44,10 @@
** **
****************************************************************************/ ****************************************************************************/
#include "QGCMapEngine.h"
#include "QGeoTiledMappingManagerEngineQGC.h"
#include "QGeoTileFetcherQGC.h"
#include <QtLocation/private/qgeocameracapabilities_p.h> #include <QtLocation/private/qgeocameracapabilities_p.h>
#include <QtLocation/private/qgeomaptype_p.h> #include <QtLocation/private/qgeomaptype_p.h>
#if QT_VERSION < 0x050500 #if QT_VERSION < 0x050500
@ -54,10 +58,6 @@
#include <QDir> #include <QDir>
#include <QStandardPaths> #include <QStandardPaths>
#include "QGCMapEngine.h"
#include "QGeoTiledMappingManagerEngineQGC.h"
#include "QGeoTileFetcherQGC.h"
#if QT_VERSION >= 0x050500 #if QT_VERSION >= 0x050500
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
QGeoTiledMapQGC::QGeoTiledMapQGC(QGeoTiledMappingManagerEngine *engine, QObject *parent) QGeoTiledMapQGC::QGeoTiledMapQGC(QGeoTiledMappingManagerEngine *engine, QObject *parent)

513
src/QtLocationPlugin/QMLControl/OfflineMap.qml

@ -611,171 +611,178 @@ Rectangle {
anchors.bottom: parent.bottom anchors.bottom: parent.bottom
anchors.margins: ScreenTools.defaultFontPixelWidth anchors.margins: ScreenTools.defaultFontPixelWidth
visible: false visible: false
QGCFlickable {
Column { id: infoScroll
width: parent.width anchors.fill: parent
spacing: ScreenTools.defaultFontPixelHeight contentHeight: infoColumn.height
Item { flickableDirection: Flickable.VerticalFlick
height: ScreenTools.defaultFontPixelHeight * 0.5 clip: true
width: 1 Column {
} id: infoColumn
Rectangle { width: parent.width
width: infoWidth spacing: ScreenTools.defaultFontPixelHeight
height: nameLabel.height + (ScreenTools.defaultFontPixelHeight * 2) Item {
color: __qgcPal.window height: ScreenTools.defaultFontPixelHeight * 0.5
radius: ScreenTools.defaultFontPixelHeight * 0.5 width: 1
anchors.horizontalCenter: parent.horizontalCenter
QGCLabel {
id: nameLabel
text: _offlineMapRoot._currentSelection ? _offlineMapRoot._currentSelection.name : ""
font.pixelSize: ScreenTools.isAndroid ? ScreenTools.mediumFontPixelSize : ScreenTools.largeFontPixelSize
anchors.centerIn: parent
} }
} Rectangle {
QGCLabel { width: infoWidth
id: descLabel height: nameLabel.height + (ScreenTools.defaultFontPixelHeight * 2)
text: _offlineMapRoot._currentSelection ? _offlineMapRoot._currentSelection.description : "" color: __qgcPal.window
anchors.horizontalCenter: parent.horizontalCenter radius: ScreenTools.defaultFontPixelHeight * 0.5
} anchors.horizontalCenter: parent.horizontalCenter
Rectangle {
id: infoRect
width: infoWidth
height: infoGrid.height + (ScreenTools.defaultFontPixelHeight * 4)
color: __qgcPal.window
radius: ScreenTools.defaultFontPixelHeight * 0.5
anchors.horizontalCenter: parent.horizontalCenter
GridLayout {
id: infoGrid
columns: 2
anchors.centerIn: parent
anchors.margins: ScreenTools.defaultFontPixelWidth * 2
rowSpacing: ScreenTools.defaultFontPixelWidth
columnSpacing: ScreenTools.defaultFontPixelHeight * 2
QGCLabel {
text: "Map Type:"
visible: !isDefaultSet
}
QGCLabel {
text: _offlineMapRoot._currentSelection ? _offlineMapRoot._currentSelection.mapTypeStr : ""
visible: !isDefaultSet
}
QGCLabel {
text: "Min Zoom:"
visible: !isDefaultSet
}
QGCLabel {
text: _offlineMapRoot._currentSelection ? _offlineMapRoot._currentSelection.minZoom : ""
visible: !isDefaultSet
}
QGCLabel {
text: "Max Zoom:"
visible: !isDefaultSet
}
QGCLabel {
text: _offlineMapRoot._currentSelection ? _offlineMapRoot._currentSelection.maxZoom : ""
visible: !isDefaultSet
}
QGCLabel {
text: isDefaultSet ? "Default Set Size:" : "Total Size:"
}
QGCLabel {
text: _offlineMapRoot._currentSelection ? _offlineMapRoot._currentSelection.tilesSizeStr : ""
}
QGCLabel {
text: isDefaultSet ? "Default Set Tile Count:" : "Total Tile Count:"
}
QGCLabel {
text: _offlineMapRoot._currentSelection ? _offlineMapRoot._currentSelection.numTilesStr : ""
}
QGCLabel {
text: isDefaultSet ? "Total Size (All Sets):" : "Downloaded Size:"
}
QGCLabel {
text: _offlineMapRoot._currentSelection ? _offlineMapRoot._currentSelection.savedSizeStr : ""
}
QGCLabel {
text: isDefaultSet ? "Total Count (All Sets):" : "Downloaded Count:"
}
QGCLabel {
text: _offlineMapRoot._currentSelection ? _offlineMapRoot._currentSelection.savedTilesStr : ""
}
QGCLabel {
text: "Error Count:"
visible: !isDefaultSet && _offlineMapRoot._currentSelection && !_offlineMapRoot._currentSelection.complete
}
QGCLabel { QGCLabel {
text: _offlineMapRoot._currentSelection ? _offlineMapRoot._currentSelection.errorCountStr : "" id: nameLabel
visible: !isDefaultSet && _offlineMapRoot._currentSelection && !_offlineMapRoot._currentSelection.complete text: _offlineMapRoot._currentSelection ? _offlineMapRoot._currentSelection.name : ""
font.pixelSize: ScreenTools.isAndroid ? ScreenTools.mediumFontPixelSize : ScreenTools.largeFontPixelSize
anchors.centerIn: parent
} }
} }
} QGCLabel {
Item { id: descLabel
height: ScreenTools.defaultFontPixelHeight * 0.5 text: _offlineMapRoot._currentSelection ? _offlineMapRoot._currentSelection.description : ""
width: 1 anchors.horizontalCenter: parent.horizontalCenter
} }
Row { Rectangle {
anchors.horizontalCenter: parent.horizontalCenter id: infoRect
spacing: ScreenTools.defaultFontPixelWidth width: infoWidth
QGCButton { height: infoGrid.height + (ScreenTools.defaultFontPixelHeight * 4)
width: ScreenTools.defaultFontPixelWidth * 18 color: __qgcPal.window
text: "Delete" radius: ScreenTools.defaultFontPixelHeight * 0.5
enabled: _offlineMapRoot._currentSelection && (!_offlineMapRoot._currentSelection.deleting) anchors.horizontalCenter: parent.horizontalCenter
onClicked: { GridLayout {
if(_offlineMapRoot._currentSelection) id: infoGrid
deleteDialog.visible = true columns: 2
anchors.centerIn: parent
anchors.margins: ScreenTools.defaultFontPixelWidth * 2
rowSpacing: ScreenTools.defaultFontPixelWidth
columnSpacing: ScreenTools.defaultFontPixelHeight * 2
QGCLabel {
text: "Map Type:"
visible: !isDefaultSet
}
QGCLabel {
text: _offlineMapRoot._currentSelection ? _offlineMapRoot._currentSelection.mapTypeStr : ""
visible: !isDefaultSet
}
QGCLabel {
text: "Min Zoom:"
visible: !isDefaultSet
}
QGCLabel {
text: _offlineMapRoot._currentSelection ? _offlineMapRoot._currentSelection.minZoom : ""
visible: !isDefaultSet
}
QGCLabel {
text: "Max Zoom:"
visible: !isDefaultSet
}
QGCLabel {
text: _offlineMapRoot._currentSelection ? _offlineMapRoot._currentSelection.maxZoom : ""
visible: !isDefaultSet
}
QGCLabel {
text: isDefaultSet ? "Default Set Size:" : "Total Size:"
}
QGCLabel {
text: _offlineMapRoot._currentSelection ? _offlineMapRoot._currentSelection.tilesSizeStr : ""
}
QGCLabel {
text: isDefaultSet ? "Default Set Tile Count:" : "Total Tile Count:"
}
QGCLabel {
text: _offlineMapRoot._currentSelection ? _offlineMapRoot._currentSelection.numTilesStr : ""
}
QGCLabel {
text: isDefaultSet ? "Total Size (All Sets):" : "Downloaded Size:"
}
QGCLabel {
text: _offlineMapRoot._currentSelection ? _offlineMapRoot._currentSelection.savedSizeStr : ""
}
QGCLabel {
text: isDefaultSet ? "Total Count (All Sets):" : "Downloaded Count:"
}
QGCLabel {
text: _offlineMapRoot._currentSelection ? _offlineMapRoot._currentSelection.savedTilesStr : ""
}
QGCLabel {
text: "Error Count:"
visible: !isDefaultSet && _offlineMapRoot._currentSelection && !_offlineMapRoot._currentSelection.complete
}
QGCLabel {
text: _offlineMapRoot._currentSelection ? _offlineMapRoot._currentSelection.errorCountStr : ""
visible: !isDefaultSet && _offlineMapRoot._currentSelection && !_offlineMapRoot._currentSelection.complete
}
} }
MessageDialog { }
id: deleteDialog Item {
visible: false height: ScreenTools.defaultFontPixelHeight * 0.5
icon: StandardIcon.Warning width: 1
standardButtons: StandardButton.Yes | StandardButton.No }
title: "Delete Tile Set" Row {
text: { anchors.horizontalCenter: parent.horizontalCenter
if(_offlineMapRoot._currentSelection) { spacing: ScreenTools.defaultFontPixelWidth
var blurb = "Delete " + _offlineMapRoot._currentSelection.name + " and all its tiles.\nIs this really what you want?" QGCButton {
if(_offlineMapRoot._currentSelection.defaultSet) width: ScreenTools.defaultFontPixelWidth * 18
return blurb + "\nNote that deleteting the Default Set deletes all tiles from all sets." text: "Delete"
else enabled: _offlineMapRoot._currentSelection && (!_offlineMapRoot._currentSelection.deleting)
return blurb onClicked: {
if(_offlineMapRoot._currentSelection)
deleteDialog.visible = true
}
MessageDialog {
id: deleteDialog
visible: false
icon: StandardIcon.Warning
standardButtons: StandardButton.Yes | StandardButton.No
title: "Delete Tile Set"
text: {
if(_offlineMapRoot._currentSelection) {
var blurb = "Delete " + _offlineMapRoot._currentSelection.name + " and all its tiles.\nIs this really what you want?"
if(_offlineMapRoot._currentSelection.defaultSet)
return blurb + "\nNote that deleteting the Default Set deletes all tiles from all sets."
else
return blurb
}
return ""
}
onYes: {
if(_offlineMapRoot._currentSelection)
QGroundControl.mapEngineManager.deleteTileSet(_offlineMapRoot._currentSelection)
deleteDialog.visible = false
showList()
}
onNo: {
deleteDialog.visible = false
} }
return ""
} }
onYes: { }
QGCButton {
text: "Resume Download"
width: ScreenTools.defaultFontPixelWidth * 18
enabled: _offlineMapRoot._currentSelection && (!_offlineMapRoot._currentSelection.deleting && !_offlineMapRoot._currentSelection.downloading)
visible: !isDefaultSet && _offlineMapRoot._currentSelection && (!_offlineMapRoot._currentSelection.complete && !_offlineMapRoot._currentSelection.downloading)
onClicked: {
if(_offlineMapRoot._currentSelection) if(_offlineMapRoot._currentSelection)
QGroundControl.mapEngineManager.deleteTileSet(_offlineMapRoot._currentSelection) _offlineMapRoot._currentSelection.resumeDownloadTask()
deleteDialog.visible = false
showList()
}
onNo: {
deleteDialog.visible = false
} }
} }
} QGCButton {
QGCButton { text: "Cancel Download"
text: "Resume Download" width: ScreenTools.defaultFontPixelWidth * 18
width: ScreenTools.defaultFontPixelWidth * 18 enabled: _offlineMapRoot._currentSelection && (!_offlineMapRoot._currentSelection.deleting && _offlineMapRoot._currentSelection.downloading)
enabled: _offlineMapRoot._currentSelection && (!_offlineMapRoot._currentSelection.deleting && !_offlineMapRoot._currentSelection.downloading) visible: !isDefaultSet && _offlineMapRoot._currentSelection && (!_offlineMapRoot._currentSelection.complete && _offlineMapRoot._currentSelection.downloading)
visible: !isDefaultSet && _offlineMapRoot._currentSelection && (!_offlineMapRoot._currentSelection.complete && !_offlineMapRoot._currentSelection.downloading) onClicked: {
onClicked: { if(_offlineMapRoot._currentSelection)
if(_offlineMapRoot._currentSelection) _offlineMapRoot._currentSelection.cancelDownloadTask()
_offlineMapRoot._currentSelection.resumeDownloadTask() }
} }
} QGCButton {
QGCButton { text: "Back"
text: "Cancel Download" width: ScreenTools.defaultFontPixelWidth * 18
width: ScreenTools.defaultFontPixelWidth * 18 onClicked: showList()
enabled: _offlineMapRoot._currentSelection && (!_offlineMapRoot._currentSelection.deleting && _offlineMapRoot._currentSelection.downloading)
visible: !isDefaultSet && _offlineMapRoot._currentSelection && (!_offlineMapRoot._currentSelection.complete && _offlineMapRoot._currentSelection.downloading)
onClicked: {
if(_offlineMapRoot._currentSelection)
_offlineMapRoot._currentSelection.cancelDownloadTask()
} }
} }
QGCButton {
text: "Back"
width: ScreenTools.defaultFontPixelWidth * 18
onClicked: showList()
}
} }
} }
} }
@ -794,113 +801,121 @@ Rectangle {
maxCacheMemSize.text = QGroundControl.mapEngineManager.maxMemCache maxCacheMemSize.text = QGroundControl.mapEngineManager.maxMemCache
} }
} }
Column { QGCFlickable {
width: parent.width id: optionsScroll
spacing: ScreenTools.defaultFontPixelHeight anchors.fill: parent
Item { contentHeight: optionsColumn.height
height: ScreenTools.defaultFontPixelHeight flickableDirection: Flickable.VerticalFlick
width: 1 clip: true
} Column {
Rectangle { id: optionsColumn
width: infoWidth width: parent.width
height: optionsLabel.height + (ScreenTools.defaultFontPixelHeight * 2) spacing: ScreenTools.defaultFontPixelHeight
color: __qgcPal.window Item {
radius: ScreenTools.defaultFontPixelHeight * 0.5 height: ScreenTools.defaultFontPixelHeight
anchors.horizontalCenter: parent.horizontalCenter width: 1
QGCLabel {
id: optionsLabel
text: "Offline Map Options"
font.pixelSize: ScreenTools.isAndroid ? ScreenTools.mediumFontPixelSize : ScreenTools.largeFontPixelSize
anchors.centerIn: parent
} }
} Rectangle {
Rectangle { width: infoWidth
id: optionsRect height: optionsLabel.height + (ScreenTools.defaultFontPixelHeight * 2)
width: optionsGrid.width + (ScreenTools.defaultFontPixelWidth * 4) color: __qgcPal.window
height: optionsGrid.height + (ScreenTools.defaultFontPixelHeight * 4) radius: ScreenTools.defaultFontPixelHeight * 0.5
color: __qgcPal.window anchors.horizontalCenter: parent.horizontalCenter
radius: ScreenTools.defaultFontPixelHeight * 0.5
anchors.horizontalCenter: parent.horizontalCenter
GridLayout {
id: optionsGrid
columns: 2
anchors.centerIn: parent
anchors.margins: ScreenTools.defaultFontPixelWidth * 2
rowSpacing: ScreenTools.defaultFontPixelWidth * 1.5
columnSpacing: ScreenTools.defaultFontPixelHeight * 2
QGCLabel {
text: "Max Cache Disk Size (MB):"
}
QGCTextField {
id: maxCacheSize
maximumLength: 6
inputMethodHints: Qt.ImhDigitsOnly
validator: IntValidator {bottom: 1; top: 262144;}
}
QGCLabel { QGCLabel {
text: "Max Cache Memory Size (MB):" id: optionsLabel
} text: "Offline Map Options"
QGCTextField { font.pixelSize: ScreenTools.isAndroid ? ScreenTools.mediumFontPixelSize : ScreenTools.largeFontPixelSize
id: maxCacheMemSize anchors.centerIn: parent
maximumLength: 4
inputMethodHints: Qt.ImhDigitsOnly
validator: IntValidator {bottom: 1; top: 4096;}
} }
Item { }
Layout.columnSpan: 2 Rectangle {
Layout.fillWidth: true id: optionsRect
implicitHeight: ScreenTools.defaultFontPixelHeight * 1.5 width: optionsGrid.width + (ScreenTools.defaultFontPixelWidth * 4)
height: optionsGrid.height + (ScreenTools.defaultFontPixelHeight * 4)
color: __qgcPal.window
radius: ScreenTools.defaultFontPixelHeight * 0.5
anchors.horizontalCenter: parent.horizontalCenter
GridLayout {
id: optionsGrid
columns: 2
anchors.centerIn: parent
anchors.margins: ScreenTools.defaultFontPixelWidth * 2
rowSpacing: ScreenTools.defaultFontPixelWidth * 1.5
columnSpacing: ScreenTools.defaultFontPixelHeight * 2
QGCLabel { QGCLabel {
anchors.centerIn: parent text: "Max Cache Disk Size (MB):"
text: "Memory cache changes require a restart to take effect." }
font.pixelSize: ScreenTools.defaultFontPixelSize * 0.85 QGCTextField {
id: maxCacheSize
maximumLength: 6
inputMethodHints: Qt.ImhDigitsOnly
validator: IntValidator {bottom: 1; top: 262144;}
}
QGCLabel {
text: "Max Cache Memory Size (MB):"
}
QGCTextField {
id: maxCacheMemSize
maximumLength: 4
inputMethodHints: Qt.ImhDigitsOnly
validator: IntValidator {bottom: 1; top: 4096;}
}
Item {
Layout.columnSpan: 2
Layout.fillWidth: true
implicitHeight: ScreenTools.defaultFontPixelHeight * 1.5
QGCLabel {
anchors.centerIn: parent
text: "Memory cache changes require a restart to take effect."
font.pixelSize: ScreenTools.defaultFontPixelSize * 0.85
}
}
Rectangle {
Layout.columnSpan: 2
Layout.fillWidth: true
implicitHeight: 1
color: __qgcPal.text
} }
}
Rectangle {
Layout.columnSpan: 2
Layout.fillWidth: true
implicitHeight: 1
color: __qgcPal.text
}
QGCLabel {
text: "MapBox Access Token"
}
QGCTextField {
id: mapBoxToken
Layout.fillWidth: true
maximumLength: 256
implicitWidth : ScreenTools.defaultFontPixelWidth * 30
}
Item {
Layout.columnSpan: 2
Layout.fillWidth: true
implicitHeight: ScreenTools.defaultFontPixelHeight * 1.5
QGCLabel { QGCLabel {
anchors.centerIn: parent text: "MapBox Access Token"
text: "With an access token, you can use MapBox Maps." }
font.pixelSize: ScreenTools.defaultFontPixelSize * 0.85 QGCTextField {
id: mapBoxToken
Layout.fillWidth: true
maximumLength: 256
implicitWidth : ScreenTools.defaultFontPixelWidth * 30
}
Item {
Layout.columnSpan: 2
Layout.fillWidth: true
implicitHeight: ScreenTools.defaultFontPixelHeight * 1.5
QGCLabel {
anchors.centerIn: parent
text: "With an access token, you can use MapBox Maps."
font.pixelSize: ScreenTools.defaultFontPixelSize * 0.85
}
} }
} }
} }
} Row {
Row { anchors.horizontalCenter: parent.horizontalCenter
anchors.horizontalCenter: parent.horizontalCenter spacing: ScreenTools.defaultFontPixelWidth
spacing: ScreenTools.defaultFontPixelWidth QGCButton {
QGCButton { text: "Save"
text: "Save" width: ScreenTools.defaultFontPixelWidth * 18
width: ScreenTools.defaultFontPixelWidth * 18 onClicked: {
onClicked: { QGroundControl.mapEngineManager.mapboxToken = mapBoxToken.text
QGroundControl.mapEngineManager.mapboxToken = mapBoxToken.text QGroundControl.mapEngineManager.maxDiskCache = parseInt(maxCacheSize.text)
QGroundControl.mapEngineManager.maxDiskCache = parseInt(maxCacheSize.text) QGroundControl.mapEngineManager.maxMemCache = parseInt(maxCacheMemSize.text)
QGroundControl.mapEngineManager.maxMemCache = parseInt(maxCacheMemSize.text) showList()
showList() }
} }
} QGCButton {
QGCButton { text: "Cancel"
text: "Cancel" width: ScreenTools.defaultFontPixelWidth * 18
width: ScreenTools.defaultFontPixelWidth * 18 onClicked: {
onClicked: { showList()
showList() }
} }
} }
} }

4
src/QtLocationPlugin/QMLControl/QGCMapEngineManager.cc

@ -29,11 +29,9 @@
#include "QGCMapTileSet.h" #include "QGCMapTileSet.h"
#include "QGCMapUrlEngine.h" #include "QGCMapUrlEngine.h"
#include <stdio.h>
#include <QQmlEngine>
#include <QSettings> #include <QSettings>
#include <QStorageInfo> #include <QStorageInfo>
#include <stdio.h>
QGC_LOGGING_CATEGORY(QGCMapEngineManagerLog, "QGCMapEngineManagerLog") QGC_LOGGING_CATEGORY(QGCMapEngineManagerLog, "QGCMapEngineManagerLog")

Loading…
Cancel
Save